@asor-studio/asor-core 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import*as t from"@angular/core";import{inject as e,Injectable as r,Directive as n,ViewChildren as o,Injector as a,runInInjectionContext as s,ChangeDetectorRef as i,Pipe as l,Input as c,ViewEncapsulation as d,Component as p,ViewChild as g,EventEmitter as h,Output as b,HostListener as u}from"@angular/core";import{ActivatedRoute as f,Router as y,UrlTree as x}from"@angular/router";import*as m from"@angular/common";import{Location as v,CommonModule as w}from"@angular/common";import{ReplaySubject as k,of as C,BehaviorSubject as S,forkJoin as z,throwError as T,from as E,isObservable as O,tap as I}from"rxjs";import{map as D,filter as j,first as M,tap as N,switchMap as P,catchError as L}from"rxjs/operators";import{HttpClient as U,HttpResponse as H,HttpHeaders as R}from"@angular/common/http";import*as A from"crypto-js";import*as V from"@angular/forms";import{FormsModule as K}from"@angular/forms";class ConfigConst{static BaseApi="/api/v1";static SiteBaseUrl="/asor-core";static SiteAssetsUrl="/assets";static _routeBase={NONE:"none",PAGE_UNAUTHORIZED:"unathorized",LOGIN:"login"};static _routeExtensions;static get Route(){return{...this._routeBase,...this._routeExtensions}}static _urlBase={get UNAUTHORIZED(){return ConfigConst.SiteBaseUrl.concat("/unathorized")},get LOGIN(){return ConfigConst.SiteBaseUrl.concat("/login")}};static _urlExtensions;static get Url(){return{UNAUTHORIZED:this._urlBase.UNAUTHORIZED,LOGIN:this._urlBase.LOGIN,...this._urlExtensions}}static _translationUrlBase={DefaultLanguage:"en"};static _translationUrlExtensions;static get TranslationUrl(){return{...this._translationUrlBase,...this._translationUrlExtensions}}static _authCheckBase={PAGE_UNAUTHORIZED:"unathorized"};static _authCheckExtensions;static get AuthCheck(){return{...this._authCheckBase,...this._authCheckExtensions}}static _cacheBase={NONE:""};static _cacheExtensions;static get Cache(){return{...this._cacheBase,...this._cacheExtensions}}static SetConfiguration(t){if(!(t._routeExtensions&&t._urlExtensions&&t._translationUrlExtensions&&t._authCheckExtensions&&t._cacheExtensions))throw new Error("Missing configuration extensions");this.BaseApi=t.BaseApi,this.SiteBaseUrl=t.SiteBaseUrl,this.SiteAssetsUrl=t.SiteAssetsUrl,this._routeExtensions=t._routeExtensions,this._urlExtensions=t._urlExtensions,this._translationUrlExtensions=t._translationUrlExtensions,this._authCheckExtensions=t._authCheckExtensions,this._cacheExtensions=t._cacheExtensions}}class ConfigCache{static _pathsBase=[];static _pathsExtensions;static get Paths(){return[...this._pathsBase,...this._pathsExtensions]}static SetConfiguration(t){if(!t._pathsExtensions)throw new Error("Missing configuration extensions");this._pathsExtensions=t._pathsExtensions}}class ConsoleLogsConfig{static defaultLevels=[];static silent=!1;static classConfigs=[];static isLevelEnabled(t,e){const r=ConsoleLogsConfig.classConfigs.find(e=>e.className===t),n=r&&r.levels&&r.levels.length>0?r.levels:ConsoleLogsConfig.defaultLevels;return n.includes("ALL")||n.includes(e)}static setClassLevels(t,e){const r=ConsoleLogsConfig.classConfigs.find(e=>e.className===t);r?r.levels=e:ConsoleLogsConfig.classConfigs.push({className:t,levels:e})}static removeClassConfig(t){ConsoleLogsConfig.classConfigs=ConsoleLogsConfig.classConfigs.filter(e=>e.className!==t)}static reset(){ConsoleLogsConfig.defaultLevels=["ALL"],ConsoleLogsConfig.classConfigs=[]}}var B,G,X,F,W;!function(t){t.GET="GET",t.POST="POST",t.PUT="PUT",t.DELETE="DELETE",t.PATCH="PATCH",t.HEAD="HEAD",t.OPTIONS="OPTIONS",t.CONNECT="CONNECT",t.TRACE="TRACE"}(B||(B={})),function(t){t[t.Continue=100]="Continue",t[t.SwitchingProtocols=101]="SwitchingProtocols",t[t.Processing=102]="Processing",t[t.OK=200]="OK",t[t.Created=201]="Created",t[t.Accepted=202]="Accepted",t[t.NonAuthoritativeInformation=203]="NonAuthoritativeInformation",t[t.NoContent=204]="NoContent",t[t.ResetContent=205]="ResetContent",t[t.PartialContent=206]="PartialContent",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.Found=302]="Found",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.LengthRequired=411]="LengthRequired",t[t.PreconditionFailed=412]="PreconditionFailed",t[t.PayloadTooLarge=413]="PayloadTooLarge",t[t.URITooLong=414]="URITooLong",t[t.UnsupportedMediaType=415]="UnsupportedMediaType",t[t.RangeNotSatisfiable=416]="RangeNotSatisfiable",t[t.ExpectationFailed=417]="ExpectationFailed",t[t.UnprocessableEntity=422]="UnprocessableEntity",t[t.Locked=423]="Locked",t[t.FailedDependency=424]="FailedDependency",t[t.UpgradeRequired=426]="UpgradeRequired",t[t.PreconditionRequired=428]="PreconditionRequired",t[t.TooManyRequests=429]="TooManyRequests",t[t.RequestHeaderFieldsTooLarge=431]="RequestHeaderFieldsTooLarge",t[t.UnavailableForLegalReasons=451]="UnavailableForLegalReasons",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout",t[t.HTTPVersionNotSupported=505]="HTTPVersionNotSupported",t[t.VariantAlsoNegotiates=506]="VariantAlsoNegotiates",t[t.InsufficientStorage=507]="InsufficientStorage",t[t.LoopDetected=508]="LoopDetected",t[t.NotExtended=510]="NotExtended",t[t.NetworkAuthenticationRequired=511]="NetworkAuthenticationRequired"}(G||(G={})),function(t){t.Ok="ok",t.Retray="re",t.NotAllow="na",t.Expired="ex"}(X||(X={})),function(t){t.VOLATILE="volatile",t.SESSION="session",t.LOCAL="local"}(F||(F={})),function(t){t.NONE="NONE",t.AUTO="AUTO",t.CUSTOM="CUSTOM"}(W||(W={}));var q=Object.freeze({__proto__:null,get AuthStatus(){return X},get CacheEncriptType(){return W},get CacheType(){return F},get IHttpMethod(){return B},get IHttpStatusCode(){return G}});class StateConst{static EncryptType={AES:"AES"};static Generate={AUTO:"AUTO",CUSTOM:"CUSTOM"};static StoreType={VOLATILE:"VOLATILE",SESSION:"SESSION",LOCAL:"LOCAL"};static Data={REPLACE:"REPLACE",MERGE:"MERGE"};static Cookie={CACHE:"asor-cache-utility-asdgtr3648w9sd",CACHE_KEY:"asor-cache-key-rtyuiop789012",CACHE_KEY_EXPIRE:365,STATE:"asor-state-utility-qwezxc123456",STATE_KEY:"asor-secure-key-rtyuiop789012",STATE_KEY_EXPIRE:365};static CMPLX12=12;static CMPLX6=6}var J=Object.freeze({__proto__:null,StateConst});class ConsoleLogsUtility{static logStream$=new k(1e3);static COLORS={INFO:{badge:"background:#0dcaf0;color:#000;border-radius:3px;font-weight:bold",text:"color:#0dcaf0",time:"color:#888"},DEBUG:{badge:"background:#a855f7;color:#fff;border-radius:3px;font-weight:bold",text:"color:#a855f7",time:"color:#888"},WARNING:{badge:"background:#f59e0b;color:#000;border-radius:3px;font-weight:bold",text:"color:#f59e0b",time:"color:#888"},ERROR:{badge:"background:#ef4444;color:#fff;border-radius:3px;font-weight:bold",text:"color:#ef4444;font-weight:bold",time:"color:#888"}};static formatTimestamp(){const t=new Date,pad=(t,e=2)=>String(t).padStart(e,"0");return`${t.getFullYear()}-${pad(t.getMonth()+1)}-${pad(t.getDate())} ${pad(t.getHours())}:${pad(t.getMinutes())}:${pad(t.getSeconds())}.${pad(t.getMilliseconds(),3)}`}static buildLog(t,e,r){const n=e?.className||e?.constructor?.className||e?.constructor?.name||"Unknown";if(!ConsoleLogsConfig.isLevelEnabled(n,t))return;const o=ConsoleLogsUtility.COLORS[t],a=ConsoleLogsUtility.formatTimestamp(),s=r.length>0?r[0]:"",i=r.slice(1);ConsoleLogsUtility.logStream$.next({timestamp:a,level:t,className:n,message:"string"==typeof s?s:JSON.stringify(s),params:i,source:e}),ConsoleLogsConfig.silent||("ERROR"===t?console.error:"WARNING"===t?console.warn:console.log)(`%c ${t} %c %c${a}%c [${n}] ${s}`,o.badge,"",o.time,o.text,...i)}static info(t,...e){ConsoleLogsUtility.buildLog("INFO",t,e)}static debug(t,...e){ConsoleLogsUtility.buildLog("DEBUG",t,e)}static warning(t,...e){ConsoleLogsUtility.buildLog("WARNING",t,e)}static error(t,...e){ConsoleLogsUtility.buildLog("ERROR",t,e)}}class RoutingUtility{static _name="RoutingUtility";route=e(f);router=e(y);location=e(v);constructor(){}getNavParams(t){return this.route.snapshot.queryParams[t]||""}getPathParams(t){return this.route.snapshot.params[t]||""}currentNavPass(t){return-1!=this.router.url.indexOf(t)}navigate(t,e){const r=new URL(`${window.location.origin}${t}`);if(e){const t=new URLSearchParams(e);r.search=t.toString()}this.router.navigateByUrl(r.pathname.concat(r.search||"").replace(ConfigConst.SiteBaseUrl,"")).then(()=>{}).catch(t=>{})}navigateWithStateObj(t,e,r){const n={state:e,queryParams:r};this.router.navigate([t.replace(ConfigConst.SiteBaseUrl,"")],n).then(()=>{}).catch(t=>{ConsoleLogsUtility.error(RoutingUtility._name,t)})}getStateParams(){return this.location.getState()}getBaseRouter(){return this.router}getBaseActivatedRoute(){return this.route}getBaseLocation(){return this.location}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class HttpRequestHandler{static className="HttpRequestHandler";baseUrl="";http=e(U);constructor(t){try{if(!t)throw new Error("Missing configuration of HttpRequestHandlerconfig");this.baseUrl=t.baseApiUrl}catch(t){ConsoleLogsUtility.error(HttpRequestHandler.name,t)}}get(t,e){const r=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`GET request to ${r}`,e),this.wrapper(()=>this.http.get(r,{params:e}))}post(t,e,r){const n=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`POST request to ${n}`,e),this.wrapper(()=>this.http.post(n,e,{headers:r}))}put(t,e,r){const n=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`PUT request to ${n}`,e),this.wrapper(()=>this.http.put(n,e,{headers:r}))}delete(t){const e=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`DELETE request to ${e}`),this.wrapper(()=>this.http.delete(e))}wrapper(t){let e,r=t();return{send:t=>(e=r.subscribe({...t,error:r=>{try{t.error&&t.error(r)}finally{e&&e.unsubscribe()}},complete:()=>{try{t.complete&&t.complete()}finally{e&&e.unsubscribe()}}}),e),obs:()=>r}}}class TranslateUtility{translations={};translationSubjects={};loading={};requestHandler=new HttpRequestHandler({baseApiUrl:ConfigConst.SiteAssetsUrl});constructor(){}getTranslation$(t,e,r=ConfigConst.TranslationUrl.DefaultLanguage){const n=[];if(0===e.length)return C(t);for(const o of e){const e=`${o}|${r}|${t}`;let a;this.translationSubjects[e]||(this.translationSubjects[e]=new S(this.translations[o]?.[r]?.[t]||t)),a=this.translations[o]?.[r]?C(null):this.loadTranslations(o,r);const s=a.pipe(D(()=>this.translationSubjects[e].value));n.push(s)}return z(n).pipe(D(e=>e.find(e=>e!==t)||t))}loadTranslations(t,e){this.loading[t]||(this.loading[t]={}),this.loading[t][e]||(this.loading[t][e]=new S(!1));const r=this.loading[t][e];return this.translations[t]?.[e]&&!r.value?C(null):r.value?r.asObservable().pipe(j(t=>!t),M(),D(()=>null)):(r.next(!0),this.requestHandler.get(`i18n${t}/${e}.json`).obs().pipe(N(r=>{this.translations[t]=this.translations[t]||{},this.translations[t][e]=r,Object.entries(r).forEach(([r,n])=>{if("string"==typeof n){const o=`${t}|${e}|${r}`,a=this.translationSubjects[o];a?a.next(n):this.translationSubjects[o]=new S(n)}})}),D(()=>(r.next(!1),null))))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class CachePathUtility{paths=[];RoutingUtility=e(RoutingUtility);constructor(t){this.paths=t}config(t){return this.paths.find(e=>-1!==t.indexOf(e.pathValue))}exist(t){const e=this.paths.find(e=>-1!==t.indexOf(e.pathValue));if(e){if(e?.resctrictRoute==ConfigConst.Route.NONE)return!0;if(this.RoutingUtility.currentNavPass(e?.resctrictRoute||ConfigConst.Route.NONE))return!0}return!1}relationCleanOnConfig(t){return this.paths.find(e=>!!e.clearOn.find(e=>-1!==t.indexOf(e)))}existRelationCleanOn(t){return!!this.paths.find(e=>!!e.clearOn.find(e=>-1!==t.indexOf(e)))}getPaths(){return this.paths}}class CookieUtils{static add(t,e,r){let n="";if(r){const t=new Date;t.setTime(t.getTime()+24*r*60*60*1e3),n="; expires="+t.toUTCString()}document.cookie=t+"="+(e||"")+n+"; path=/"}static read(t){const e=t+"=",r=document.cookie.split(";");for(let t=0;t<r.length;t++){let n=r[t];for(;" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(e))return n.substring(e.length,n.length)}return""}static delete(t){document.cookie=t+"=; Max-Age=-99999999;"}}class ObjectUtils{static isEmpty(t){return null==t||"object"==typeof t&&0===Object.keys(t).length}static isNotEmpty(t){return!ObjectUtils.isEmpty(t)}static isObject(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}static cloneDeep(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>this.cloneDeep(t));const e={};for(const r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=this.cloneDeep(t[r]));return e}}class RandomUtils{static makeid(t){let e="";for(let r=0;r<t;r++)e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(62*Math.random()));return e}}let Z=class StringUtils{static isEmpty(t){return null==t||""===t}static isNotEmpty(t){return!StringUtils.isEmpty(t)}static isString(t){return"string"==typeof t}};class CacheUtility{static className="CacheUtility";cache_name=A.MD5(StateConst.Cookie.CACHE).toString();cacheApp=new Map;cachePathUtility;constructor(){this.cachePathUtility=new CachePathUtility(ConfigCache.Paths);let t=new Map,e=sessionStorage.getItem(this.cache_name);e&&Object.entries(JSON.parse(e)).forEach(([e,r])=>t.set(e,r));let r=localStorage.getItem(this.cache_name);r&&Object.entries(JSON.parse(r)).forEach(([e,r])=>t.set(e,r)),this.cacheApp=t}cleanUp(){const t=new Map;for(const e of Array.from(this.cacheApp.keys()))if(!this.cachePathUtility.config(e)){const r=this.cacheApp.get(e);void 0!==r&&t.set(e,r),this.cacheApp.delete(e)}try{const e=sessionStorage.getItem(this.cache_name);if(e){const r=new Map(Object.entries(JSON.parse(e)));let n=!1;for(const e of Array.from(r.keys())){const o=this.cachePathUtility.config(e);o&&o.persistenceType===F.SESSION||(t.set(e,r.get(e)),r.delete(e),n=!0)}n&&(0===r.size?sessionStorage.removeItem(this.cache_name):sessionStorage.setItem(this.cache_name,JSON.stringify(Object.fromEntries(r))))}}catch(t){ConsoleLogsUtility.error(this,"Failed to clean up obsolete items from session storage:",t)}try{const e=localStorage.getItem(this.cache_name);if(e){const r=new Map(Object.entries(JSON.parse(e)));let n=!1;for(const e of Array.from(r.keys())){const o=this.cachePathUtility.config(e);o&&o.persistenceType===F.LOCAL||(t.set(e,r.get(e)),r.delete(e),n=!0)}n&&(0===r.size?localStorage.removeItem(this.cache_name):localStorage.setItem(this.cache_name,JSON.stringify(Object.fromEntries(r))))}}catch(t){ConsoleLogsUtility.error(this,"Failed to clean up obsolete items from local storage:",t)}return t}isValidResponse(t,e){const r=e&&!(Array.isArray(e)&&0===e.length);return r||this.cacheApp.delete(t),r}pass(t,e){return this.isValidResponse(t.url,e)&&this.cachePathUtility.exist(t.url)}get(t){let e=t.url,r=this.cachePathUtility.config(e);if(r&&r.reqPayloadCache&&t.body){let r=btoa(JSON.stringify(t.body));e=e.concat(`#[${r}]`)}if(this.cachePathUtility.existRelationCleanOn(e)){let t=[],r=this.cachePathUtility.relationCleanOnConfig(e);r&&this.cacheApp.forEach((e,n)=>{-1!=n.indexOf(r.pathValue)&&t.push(n)}),t.forEach(t=>{switch(this.cacheApp.delete(t),r?.persistenceType){case F.SESSION:case F.LOCAL:{let e=r.persistenceType===F.LOCAL?localStorage:sessionStorage,n=e.getItem(this.cache_name),o=n?new Map(Object.entries(JSON.parse(n))):new Map;o.delete(t),e.setItem(this.cache_name,JSON.stringify(Object.fromEntries(o)));break}}})}let n=this.cacheApp.get(e);if(r?.encriptType&&r.encriptType!=W.NONE&&"string"==typeof n&&(n=this.decrypt(r,n)),n instanceof Object)return new H({body:ObjectUtils.cloneDeep(n.body),status:n.status,statusText:n.statusText,url:n.url||"",headers:new R({...n.headers})})}set(t,e){let r=t.url,n=e,o=this.cachePathUtility.config(r);if(o?.reqPayloadCache&&t.body){let e=btoa(JSON.stringify(t.body));r=r.concat(`#[${e}]`)}switch(o?.encriptType&&o.encriptType!=W.NONE&&(n=this.encrypt(o,e)),o?.persistenceType){case F.SESSION:case F.LOCAL:try{let t=o.persistenceType===F.LOCAL?localStorage:sessionStorage,e=t.getItem(this.cache_name),a=e?new Map(Object.entries(JSON.parse(e))):new Map;a.set(r,n),t.setItem(this.cache_name,JSON.stringify(Object.fromEntries(a)))}catch(t){ConsoleLogsUtility.error(this,"Failed to persist map cache to storage:",t)}}this.cacheApp.set(r,n)}getCacheKey(t){let e="";switch(t.encriptType){case W.AUTO:{const t=A.MD5(StateConst.Cookie.CACHE_KEY).toString();if(Z.isEmpty(CookieUtils.read(t))){const e=RandomUtils.makeid(StateConst.CMPLX12)+(new Date).getTime(),r=RandomUtils.makeid(StateConst.CMPLX6)+(new Date).getTime(),n=A.AES.encrypt(e,r).toString()+"."+r;CookieUtils.add(t,n,StateConst.Cookie.CACHE_KEY_EXPIRE)}const r=CookieUtils.read(t).split(".");e=A.AES.decrypt(r[0],r[1]).toString(A.enc.Utf8);break}case W.CUSTOM:t.callBackCacheKey&&(e=t.callBackCacheKey())}return e}encrypt(t,e){let r="";return t.encriptType===W.AUTO&&(r=A.AES.encrypt(JSON.stringify(e),this.getCacheKey(t)).toString()),r||e}decrypt(t,e){let r=null;return t.encriptType===W.AUTO&&(r=JSON.parse(A.AES.decrypt(e,this.getCacheKey(t)).toString(A.enc.Utf8))),r||e}getCacheApp(){return this.cacheApp}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});let Q=class CollectionUtils{static isEmpty(t){return null==t||0===t.length}static isNotEmpty(t){return!CollectionUtils.isEmpty(t)}static getFirst(t){if(!CollectionUtils.isEmpty(t))return t[0]}static getLast(t){if(!CollectionUtils.isEmpty(t))return t[t.length-1]}static concat(...t){const e=[];return t.forEach(t=>{CollectionUtils.isNotEmpty(t)&&e.push(...t)}),e}static filter(t,e){return CollectionUtils.isEmpty(t)?[]:t.filter(e)}static map(t,e){return CollectionUtils.isEmpty(t)?[]:t.map(e)}static reduce(t,e,r){return CollectionUtils.isEmpty(t)?r:t.reduce(e,r)}static forEach(t,e){CollectionUtils.isNotEmpty(t)&&t.forEach(e)}static contains(t,e){return!CollectionUtils.isEmpty(t)&&t.includes(e)}static exists(t,e){return!CollectionUtils.isEmpty(t)&&t.some(e)}static removeIf(t,e){if(CollectionUtils.isEmpty(t))return;const r=t.findIndex(e);return-1!==r?t.splice(r,1)[0]:void 0}static shallowCopy(t){return CollectionUtils.isEmpty(t)?[]:[...t]}};class StringUtils{static isEmpty(t){return null==t||0===t.length}static isBlank(t){return null==t||0===t.trim().length}static isNotEmpty(t){return!StringUtils.isEmpty(t)}static isNotBlank(t){return!StringUtils.isBlank(t)}static defaultString(t){return t??""}static defaultIfEmpty(t,e){return StringUtils.isEmpty(t)?e:t}static defaultIfBlank(t,e){return StringUtils.isBlank(t)?e:t}static trim(t){return StringUtils.defaultString(t).trim()}static capitalize(t){if(StringUtils.isBlank(t))return"";const e=t;return e.charAt(0).toUpperCase()+e.slice(1)}static uncapitalize(t){if(StringUtils.isBlank(t))return"";const e=t;return e.charAt(0).toLowerCase()+e.slice(1)}static equals(t,e){return t===e||null!=t&&null!=e&&t===e}static equalsIgnoreCase(t,e){return t===e||null!=t&&null!=e&&t.toLowerCase()===e.toLowerCase()}static contains(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.includes(e)}static startsWith(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.startsWith(e)}static endsWith(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.endsWith(e)}static join(t,e=""){return Q.isEmpty(t)?"":t.filter(t=>null!=t).join(e)}static repeat(t,e){return StringUtils.isEmpty(t)||e<1?"":t.repeat(e)}static countOccurrences(t,e){if(StringUtils.isEmpty(t)||StringUtils.isEmpty(e))return 0;const r=t,n=e;if(0===n.length)return r.length+1;let o=0,a=r.indexOf(n);for(;-1!==a;)o++,a=r.indexOf(n,a+n.length);return o}}class AuthUtility{requestHandler=new HttpRequestHandler({baseApiUrl:ConfigConst.BaseApi});constructor(){}getAuthorization(t){return this.requestHandler.get("auth/flow/"+t)}checkAuthAction(t,e){this.getAuthorization(t).send({next:t=>{StringUtils.equals(t.authorized,X.Ok)?e.authorize(t):e.unAuthorize&&e.unAuthorize(t)},error:t=>{e.unAuthorize&&e.unAuthorize(t)}})}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class BaseMolecule{static className="BaseMolecule";route=e(f);currentMolecule;I18nPath;constructor(){const t=this.route.snapshot.data,e=t.Molecules?.find(t=>t.Molecule.className===this.constructor.className);this.currentMolecule=e,this.I18nPath=e.I18nPath}baseCompViewEnter(){ConsoleLogsUtility.warning(this,"The method baseCompViewEnter() should be implemented.")}baseCompViewLeave(){ConsoleLogsUtility.warning(this,"The method baseCompViewLeave() should be implemented.")}baseMoleculeViewWillEnter(){ConsoleLogsUtility.warning(this,"The method baseMoleculeViewWillEnter() should be implemented.")}baseMoleculeViewWillLeave(){ConsoleLogsUtility.warning(this,"The method baseMoleculeViewWillLeave() should be implemented.")}getClassName(){return this.constructor.className}ngOnInit(){this.baseMoleculeViewWillEnter()}ngOnDestroy(){this.baseMoleculeViewWillLeave()}ionViewWillEnter(){this.baseMoleculeViewWillEnter()}ionViewWillLeave(){this.baseMoleculeViewWillLeave()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseMolecule,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseMolecule,isStandalone:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseMolecule,decorators:[{type:n}],ctorParameters:()=>[]});class BaseComponent{static className="BaseComponent";ChildrenRef;route=e(f);I18nPath;constructor(){const t=this.route.snapshot.data;this.I18nPath=t.Components?.find(t=>t.Component.className===this.constructor.className)?.I18nPath||t.I18nPath}ngOnInit(){this.baseCompViewEnter()}ngOnDestroy(){this.baseCompViewLeave()}ionViewWillEnter(){this.baseCompViewEnter()}ionViewWillLeave(){this.baseCompViewLeave()}baseCompViewEnter(){this.ChildrenRef&&this.ChildrenRef.length>0&&this.ChildrenRef.forEach(t=>t.baseCompViewEnter())}baseCompViewLeave(){this.ChildrenRef&&this.ChildrenRef.length>0&&this.ChildrenRef.forEach(t=>t.baseCompViewLeave())}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseComponent,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseComponent,isStandalone:!0,viewQueries:[{propertyName:"ChildrenRef",predicate:["ChildRef"],descendants:!0}],ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseComponent,decorators:[{type:n}],ctorParameters:()=>[],propDecorators:{ChildrenRef:[{type:o,args:["ChildRef"]}]}});class CollectionUtils{static isEmpty(t){return!t||Array.isArray(t)&&0===t.length}static isNotEmpty(t){return!CollectionUtils.isEmpty(t)}}class StateService{static className="StateService";initialized=!1;containerRoot=[];conf;intervalId;intervalTime=1e3;registryMap=new Map;initialize(t){if(this.initialized)ConsoleLogsUtility.warning(this,"State service already initialized");else{ConsoleLogsUtility.info(this,"Initializing state service with config:",t),this.conf=t||{encryptionType:StateConst.EncryptType.AES,nameType:StateConst.Generate.AUTO,keyType:StateConst.Generate.AUTO,asyncEnabled:!0};const e=sessionStorage.getItem(this.getStateName()),r=localStorage.getItem(this.getStateName());Z.isNotEmpty(e)&&(this.containerRoot.push(...JSON.parse(e)),ConsoleLogsUtility.debug(this,"Loaded session data from storage")),Z.isNotEmpty(r)&&(this.containerRoot.push(...JSON.parse(r)),ConsoleLogsUtility.debug(this,"Loaded persistent data from storage")),this.conf.asyncEnabled&&(this.intervalId=setInterval(()=>{const t=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.SESSION),e=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.LOCAL);CollectionUtils.isNotEmpty(t)&&sessionStorage.setItem(this.getStateName(),JSON.stringify(t)),CollectionUtils.isNotEmpty(e)&&localStorage.setItem(this.getStateName(),JSON.stringify(e))},this.intervalTime)),this.initialized=!0,ConsoleLogsUtility.info(this,"State service initialized successfully")}}async delegateCheckStoreDataSet(){if(!this.conf.asyncEnabled){const t=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.SESSION),e=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.LOCAL);CollectionUtils.isNotEmpty(t)&&sessionStorage.setItem(this.getStateName(),JSON.stringify(t)),CollectionUtils.isNotEmpty(e)&&localStorage.setItem(this.getStateName(),JSON.stringify(e))}}createDataSet(t,e,r){if(!e)return ConsoleLogsUtility.warning(this,`Cannot create dataset "${t}": data is empty`),!1;if(CollectionUtils.isNotEmpty(this.containerRoot)&&Z.isNotEmpty(t)){const e=this.containerRoot.find(e=>e.name===t);if(ObjectUtils.isNotEmpty(e))return ConsoleLogsUtility.warning(this,`Dataset "${t}" already exists. Load current data from storage`),!1}let n=e;r.encrypt&&(n=this.encrypt(e),ConsoleLogsUtility.debug(this,`Dataset "${t}" will be encrypted`));const o={name:t,encrypt:!!r.encrypt,storeType:r.storeType||StateConst.StoreType.SESSION,freeze:!!r.freeze,data:n,lastUpdate:(new Date).getTime(),readCount:0,writeCount:0};return r.freeze&&ConsoleLogsUtility.warning(this,`Dataset "${t}" frozen`),this.containerRoot.push(o),this.delegateCheckStoreDataSet(),ConsoleLogsUtility.info(this,`Dataset "${t}" created successfully`,{storeType:o.storeType,encrypted:o.encrypt}),!0}readDataSet(t){let e=t.split("."),r=null;if(CollectionUtils.isNotEmpty(this.containerRoot))try{if(Array.isArray(e)){const n=this.containerRoot.find(t=>t.name===e[0]);if(ObjectUtils.isNotEmpty(n)){r=n.encrypt?this.decrypt(n.data):n.data;for(let t=1;t<e.length;t++)r=r[e[t]];n.readCount++}else ConsoleLogsUtility.warning(this,`Dataset "${e[0]}" not found for path: ${t}`)}}catch(e){ConsoleLogsUtility.error(this,`Error reading dataset at path: ${t}`,e)}return r}updateDataSet(t,e,r){let n=t.split("."),o=!1;try{if(Array.isArray(n)&&CollectionUtils.isNotEmpty(this.containerRoot)&&Z.isNotEmpty(n[0])){const a=this.containerRoot.find(t=>t.name===n[0]);if(ObjectUtils.isNotEmpty(a)){if(a.freeze)return ConsoleLogsUtility.warning(this,`Cannot update frozen dataset at path: ${t}`),!1;let s=a.encrypt?this.decrypt(a.data):a.data;if(s){let i=s,l=!1;for(let t=1;t<n.length-1;t++)i=i[n[t]];if(ObjectUtils.isNotEmpty(r))switch(r.method){case StateConst.Data.REPLACE:i[n[n.length-1]]=e,l=!0,ConsoleLogsUtility.debug(this,`Replace method used for path: ${t}`);break;case StateConst.Data.MERGE:if(ObjectUtils.isObject(i[n[n.length-1]])&&ObjectUtils.isObject(e)){const r={...i[n[n.length-1]],...e};i[n[n.length-1]]=r,l=!0,ConsoleLogsUtility.debug(this,`Merge method used for path: ${t}`)}}l||(i[n[n.length-1]]=e),a.data=a.encrypt?this.encrypt(s):s,o=!0,a.writeCount++,this.delegateCheckStoreDataSet(),this.triggerChange(t)}}else ConsoleLogsUtility.warning(this,`Dataset "${n[0]}" not found for update at path: ${t}`)}}catch(e){ConsoleLogsUtility.error(this,`Error updating dataset at path: ${t}`,e)}return o}triggerChange(t){if(!t)return;let e=t;for(;e;){let r=!1;const n=new Set;if(this.registryMap.forEach((o,a)=>{const s=a.match(/\[([^\]]+)\]<([^>]+)>;(.+)/);if(s){const[,a,i,l]=s;if(-1!==l.indexOf(e)&&(r=!0,!n.has(a))){n.add(a);const e={[t.split(".")[0]]:{[i]:this.readDataSet(l)}};o.propsIsUpdated(e)}}}),r)break;const o=e.lastIndexOf(".");if(-1===o)break;e=e.substring(0,o)}}deleteRootDataSet(t){if(Z.isString(t)&&Z.isNotEmpty(t)&&CollectionUtils.isNotEmpty(this.containerRoot)){const e=this.containerRoot.find(e=>e.name===t);if(e){const r=this.containerRoot.indexOf(e);this.containerRoot.splice(r,1),ConsoleLogsUtility.info(this,`Dataset "${t}" deleted successfully`)}else ConsoleLogsUtility.warning(this,`Dataset "${t}" not found for deletion`)}}getStateName(){let t="";switch(this.conf.nameType){case StateConst.Generate.AUTO:t=A.MD5(StateConst.Cookie.STATE).toString();break;case StateConst.Generate.CUSTOM:this.conf.callBackStateName&&(t=this.conf.callBackStateName())}return t}getStateKey(){let t="";switch(this.conf.keyType){case StateConst.Generate.AUTO:{const e=A.MD5(StateConst.Cookie.STATE_KEY).toString();if(Z.isEmpty(CookieUtils.read(e))){const t=RandomUtils.makeid(StateConst.CMPLX12)+(new Date).getTime(),r=RandomUtils.makeid(StateConst.CMPLX6)+(new Date).getTime(),n=A.AES.encrypt(t,r).toString()+"."+r;CookieUtils.add(e,n,StateConst.Cookie.STATE_KEY_EXPIRE)}const r=CookieUtils.read(e).split(".");t=A.AES.decrypt(r[0],r[1]).toString(A.enc.Utf8);break}case StateConst.Generate.CUSTOM:this.conf.callBackStateKey&&(t=this.conf.callBackStateKey())}return t}encrypt(t){let e="";return this.conf.encryptionType===StateConst.EncryptType.AES&&(e=A.AES.encrypt(JSON.stringify(t),this.getStateKey()).toString()),e}decrypt(t){let e=null;return this.conf.encryptionType===StateConst.EncryptType.AES&&(e=JSON.parse(A.AES.decrypt(t,this.getStateKey()).toString(A.enc.Utf8))),e}registry(t,e,r){ConsoleLogsUtility.debug(this,`Registering component "${t}" with props:`,e);const n={};return Object.entries(e).forEach(([e,o])=>{let a=`[${t}]<${e}>;${o}`,s=1;for(;this.registryMap.has(a);)a=`[${t}(${s++})]<${e}>;${o}`;this.registryMap.set(a,{propsIsUpdated:r}),n[a]=()=>this.registryMap.delete(a)}),{componentName:t,destroy:()=>{ConsoleLogsUtility.debug(this,`Destroying mapped keys for component "${t}"`),Object.entries(n).forEach(([t,e])=>{e&&e()})}}}resolveProps(t){const e={};Object.entries(t).forEach(([t,r])=>{const n=r.split(".")[0];e[n]||(e[n]=[]),e[n].push({key:t,path:r})});const r={};return Object.entries(e).forEach(([t,e])=>{r[t]={},e.forEach(({key:e,path:n})=>{r[t][e]=this.readDataSet(n)})}),ObjectUtils.cloneDeep(r)}ngOnDestroy(){this.intervalId&&clearInterval(this.intervalId)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,providedIn:"root"})}function BaseHandlerMixin(t){return class StorageHandlerMixinClass extends t{propsStore={};stateService=e(StateService);activatedRoute=e(f);registryElement;constructor(...t){super(...t);const e=this.activatedRoute.snapshot.data;e?.CreateDataSet&&this.stateService.createDataSet(e.CreateDataSet.name,e.CreateDataSet.data||{},e.CreateDataSet.option||{});const r=e.Components?.find(t=>t.Component.className===this.constructor.className)?.ConnectDataSet||e.Molecules?.find(t=>t.Molecule.className===this.constructor.className)?.ConnectDataSet||e.ConnectDataSet;if(r){const t=r?.selectors||{};this.registryElement=this.stateService.registry(this.getClassName(),t,t=>{const e=this.copyPropsStore(t),deepMerge=(t,e)=>{for(const r in e)e.hasOwnProperty(r)&&(e[r]&&"object"==typeof e[r]&&!Array.isArray(e[r])?(t[r]&&"object"==typeof t[r]||(t[r]={}),deepMerge(t[r],e[r])):t[r]=e[r])};deepMerge(this.propsStore,e),this.storageHandlerDataChanges&&this.storageHandlerDataChanges({},{})}),this.propsStore=createReactiveProxy(this.stateService.resolveProps(t),(t,e,r)=>{this.onPropsStoreChange(t,e,r)})}}onPropsStoreChange(t,e,r){ConsoleLogsUtility.debug(this,`Property changed: ${t}`,{from:r,to:e}),this.stateService.updateDataSet(t,e)||ConsoleLogsUtility.warning(this,`Failed to update state for path: ${t}`)}getClassName(){return this.constructor.className}copyPropsStore(t){return JSON.parse(JSON.stringify(t))}}}function deepEqual(t,e){if(t===e)return!0;if(null==t||null==e)return!1;if(typeof t!=typeof e)return!1;if("object"!=typeof t)return!1;const r=Array.isArray(t);if(r!==Array.isArray(e))return!1;if(r){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!deepEqual(t[r],e[r]))return!1;return!0}const n=Object.keys(t),o=Object.keys(e);if(n.length!==o.length)return!1;for(const r of n){if(!e.hasOwnProperty(r))return!1;if(!deepEqual(t[r],e[r]))return!1}return!0}function createReactiveProxy(t,e,r=""){const n=new Map,o=["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"];return new Proxy(t,{get(t,a){const s=t[a];if("symbol"==typeof a)return s;const i=String(a),l=r?`${r}.${i}`:i;if(Array.isArray(t)&&"function"==typeof s&&o.includes(i))return(...o)=>{const a=t.map(t=>t&&"object"==typeof t?{...t}:t),s=Array.prototype[i].apply(t,o);n.clear();const l=[...t];return deepEqual(a,l)||e(r,l,a),s};if(null===s||"object"!=typeof s)return s;const c=n.get(i);if(c&&c.rawValue===s)return c.proxy;const d=createReactiveProxy(s,e,l);return n.set(i,{rawValue:s,proxy:d}),d},set(t,o,a){const s=String(o),i=r?`${r}.${s}`:s,l=t[o];return deepEqual(l,a)||(n.delete(s),t[o]=a,e(i,a,l)),!0},deleteProperty(t,o){if(o in t){const a=String(o),s=r?`${r}.${a}`:a,i=t[o];n.delete(a),delete t[o],e(s,void 0,i)}return!0}})}function createFlattenedReactiveProxy(t){return new Proxy({},{get(e,r){if("symbol"==typeof r)return;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return r[n]}},set(e,r,n){if("symbol"==typeof r)return!1;const o=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&o in r)return r[o]=n,!0}return!1},has(e,r){if("symbol"==typeof r)return!1;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return!0}return!1},ownKeys(){const e=[];for(const r of Object.keys(t)){const n=t[r];n&&"object"==typeof n&&e.push(...Object.keys(n))}return e},getOwnPropertyDescriptor(e,r){if("symbol"==typeof r)return;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return{configurable:!0,enumerable:!0,writable:!0,value:r[n]}}},deleteProperty(e,r){if("symbol"==typeof r)return!1;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return delete r[n],!0}return!1}})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class BaseStorageComponent extends(BaseHandlerMixin(BaseComponent)){get props(){return createFlattenedReactiveProxy(this.propsStore)}baseCompViewLeave(){this.registryElement?.destroy(),super.baseCompViewLeave()}constructor(){super()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageComponent,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseStorageComponent,isStandalone:!0,usesInheritance:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageComponent,decorators:[{type:n}],ctorParameters:()=>[]});class BaseStorageMolecule extends(BaseHandlerMixin(BaseMolecule)){get props(){return createFlattenedReactiveProxy(this.propsStore)}baseCompViewLeave(){this.registryElement?.destroy()}baseMoleculeViewWillLeave(){this.registryElement?.destroy()}constructor(){super()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageMolecule,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseStorageMolecule,isStandalone:!0,usesInheritance:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageMolecule,decorators:[{type:n}],ctorParameters:()=>[]});class NotifyErrorService{static className="NotifyErrorService";dataSubject=new S(null);dataSub=this.dataSubject.asObservable();sub=new Map;send(t){ConsoleLogsUtility.debug(this,`Broadcasting error: ${t.status}`,t),this.dataSubject.next(t)}registry(t,e){ConsoleLogsUtility.debug(this,`Registering subscriber: ${t}`);const r=this.sub.get(t);r&&r.unsubscribe();const n=this.dataSub.subscribe(t=>{t&&e(t.status,t.error)});this.sub.set(t,n)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class MockOrchestratorMapService{static staticRequestMappings=new Map;static registryMethod(t,e){return MockOrchestratorMapService.staticRequestMappings.set(t,e),e}}class MockOrchestratorService{get requestMappings(){return MockOrchestratorMapService.staticRequestMappings}intercept(t,e){for(const[r,n]of this.requestMappings)if(StringUtils.equals(t.url,r.path)&&t.method==r.method){const o=n.value.apply(r.controller,[t,e]);return StringUtils.equals(o.name,"HttpErrorResponse")?T(()=>o):o instanceof Promise?E(o):C(o)}return e.handle(t)}registryController(t,e){for(const[r]of this.requestMappings)-1!=t.indexOf(r.className)&&(r.controller=e)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class AuthGuard{static className="AuthGuard";routingUtility=e(RoutingUtility);authUtility=e(AuthUtility);injector=e(a);canActivate(t,r){const n=t.data;return n.ChildGuard?this.executeAuthCheck(n).pipe(P(o=>o?s(this.injector,()=>{const o=e(n.ChildGuard);return this.normalizeGuardResult(o.canActivate(t,r))}):C(!1))):this.executeAuthCheck(n)}executeAuthCheck(t){return ConsoleLogsUtility.info(this,"AuthGuard checking route",t),t.AuthCheck?this.authUtility.getAuthorization(t.AuthCheck).obs().pipe(D(e=>(ConsoleLogsUtility.debug(this,`Auth result for ${t.AuthCheck}`,e),!!StringUtils.equals(e.authorized,X.Ok)||(StringUtils.equals(e.authorized,X.NotAllow)?(ConsoleLogsUtility.info(this,"Redirecting to UNAUTHORIZED due to NotAllow status"),this.routingUtility.navigate(ConfigConst.Url.UNAUTHORIZED,{}),!1):(ConsoleLogsUtility.info(this,"Redirecting to LOGIN due to missing/expired auth"),this.routingUtility.navigate(ConfigConst.Url.LOGIN,{}),!1))))):C(!0)}normalizeGuardResult(t){return"object"==typeof t&&"redirectTo"in t||t instanceof x?C(t):t instanceof Promise?E(t):O(t)?t:C(t)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,decorators:[{type:r,args:[{providedIn:"root"}]}]});class ErrorInterceptor{static className="ErrorInterceptor";notifyErrorService=e(NotifyErrorService);intercept(t,e){return e.handle(t).pipe(L(e=>(ConsoleLogsUtility.error(this,`HTTP Error ${e.status} at ${t.urlWithParams}: ${e.message}`,e),this.notifyErrorService.send(e),T(e))))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor,decorators:[{type:r}]});class CacheInterceptor{static className="CacheInterceptor";cacheUtility=e(CacheUtility);intercept(t,e){const r=this.cacheUtility.get(t);return r?(ConsoleLogsUtility.info(this,`Serving from cache: ${t.urlWithParams}`),C(r)):e.handle(t).pipe(I(e=>{e instanceof H&&this.cacheUtility.pass(t,e)&&(ConsoleLogsUtility.debug(this,`Caching response for ${t.urlWithParams}`),this.cacheUtility.set(t,e))}))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor,decorators:[{type:r}]});class MockHttpInterceptor{orchestratorService=e(MockOrchestratorService);intercept(t,e){return this.orchestratorService.intercept(t,e)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor,decorators:[{type:r}]});class TranslatePipe{translateUtility=e(TranslateUtility);changeDetectorRef=e(i);lastKey="";translatedValue="";subscription=null;context;constructor(){}transform(t,e=ConfigConst.TranslationUrl.DefaultLanguage){return t!==this.lastKey&&(this.lastKey=t,this.subscription?.unsubscribe(),this.context=this.changeDetectorRef.context,this.subscription=this.translateUtility.getTranslation$(t,this.context?.I18nPath,e).subscribe(t=>{this.translatedValue=t,this.changeDetectorRef.markForCheck()})),this.decodeHtmlEntities(this.translatedValue)||t}decodeHtmlEntities(t){const e=document.createElement("textarea");e.innerHTML=t;const r=e.value;return e.remove(),r}ngOnDestroy(){this.subscription?.unsubscribe()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,deps:[],target:t.ɵɵFactoryTarget.Pipe});static ɵpipe=t.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,isStandalone:!0,name:"translate",pure:!1})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,decorators:[{type:l,args:[{name:"translate",standalone:!0,pure:!1}]}],ctorParameters:()=>[]});class JsonViewComponent{data;key=null;level=0;expandDepth=0;expanded=!1;ngOnInit(){this.level<this.expandDepth&&(this.expanded=!0)}togglebox(){this.expanded=!this.expanded}isObject(t){return null!==t&&"object"==typeof t}isArray(t){return Array.isArray(t)}isString(t){return"string"==typeof t}getKeys(t){return t?Object.keys(t):[]}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonViewComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:JsonViewComponent,isStandalone:!0,selector:"asor-json-view",inputs:{data:"data",key:"key",level:"level",expandDepth:"expandDepth"},ngImport:t,template:'<div class="json-node" [style.padding-left.px]="level * 10">\r\n\t\x3c!-- Primitive Value or Null --\x3e\r\n\t<ng-container *ngIf="!isObject(data)">\r\n\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t<span\r\n\t\t\tclass="json-value"\r\n\t\t\t[ngClass]="{\r\n\t\t\t\tnull: data === null,\r\n\t\t\t\tstring: isString(data),\r\n\t\t\t\tother: !isString(data) && data !== null,\r\n\t\t\t}"\r\n\t\t>\r\n\t\t\t{{ data | json }}\r\n\t\t</span>\r\n\t</ng-container>\r\n\r\n\t\x3c!-- Object or Array --\x3e\r\n\t<ng-container *ngIf="isObject(data)">\r\n\t\t<div class="json-expandable" (click)="togglebox()">\r\n\t\t\t<span class="toggle-icon">{{ expanded ? \'▼\' : \'▶\' }}</span>\r\n\t\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t\t<span class="json-preview" *ngIf="!isArray(data)"> Object </span>\r\n\t\t\t<span class="json-preview" *ngIf="isArray(data)"> Array({{ data.length }}) </span>\r\n\t\t</div>\r\n\r\n\t\t<div class="json-children" *ngIf="expanded">\r\n\t\t\t<ng-container *ngIf="!isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let k of getKeys(data)">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="data[k]"\r\n\t\t\t\t\t\t[key]="k"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf="isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let item of data; let i = index">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="item"\r\n\t\t\t\t\t\t[key]="\'\' + i"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>\r\n',styles:[".json-node{font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;color:#d4d4d4}.json-key{color:#9cdcfe}.json-value.string{color:#ce9178}.json-value.null{color:#569cd6}.json-value.other{color:#b5cea8}.json-expandable{cursor:pointer;display:flex;align-items:center}.json-expandable:hover{background-color:#ffffff0d}.toggle-icon{font-size:10px;margin-right:5px;color:#858585;width:12px;text-align:center}.json-preview{color:#858585;font-style:italic}\n"],dependencies:[{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]},{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"pipe",type:m.JsonPipe,name:"json"}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonViewComponent,decorators:[{type:p,args:[{selector:"asor-json-view",standalone:!0,imports:[w,JsonViewComponent],encapsulation:d.None,template:'<div class="json-node" [style.padding-left.px]="level * 10">\r\n\t\x3c!-- Primitive Value or Null --\x3e\r\n\t<ng-container *ngIf="!isObject(data)">\r\n\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t<span\r\n\t\t\tclass="json-value"\r\n\t\t\t[ngClass]="{\r\n\t\t\t\tnull: data === null,\r\n\t\t\t\tstring: isString(data),\r\n\t\t\t\tother: !isString(data) && data !== null,\r\n\t\t\t}"\r\n\t\t>\r\n\t\t\t{{ data | json }}\r\n\t\t</span>\r\n\t</ng-container>\r\n\r\n\t\x3c!-- Object or Array --\x3e\r\n\t<ng-container *ngIf="isObject(data)">\r\n\t\t<div class="json-expandable" (click)="togglebox()">\r\n\t\t\t<span class="toggle-icon">{{ expanded ? \'▼\' : \'▶\' }}</span>\r\n\t\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t\t<span class="json-preview" *ngIf="!isArray(data)"> Object </span>\r\n\t\t\t<span class="json-preview" *ngIf="isArray(data)"> Array({{ data.length }}) </span>\r\n\t\t</div>\r\n\r\n\t\t<div class="json-children" *ngIf="expanded">\r\n\t\t\t<ng-container *ngIf="!isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let k of getKeys(data)">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="data[k]"\r\n\t\t\t\t\t\t[key]="k"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf="isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let item of data; let i = index">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="item"\r\n\t\t\t\t\t\t[key]="\'\' + i"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>\r\n',styles:[".json-node{font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;color:#d4d4d4}.json-key{color:#9cdcfe}.json-value.string{color:#ce9178}.json-value.null{color:#569cd6}.json-value.other{color:#b5cea8}.json-expandable{cursor:pointer;display:flex;align-items:center}.json-expandable:hover{background-color:#ffffff0d}.toggle-icon{font-size:10px;margin-right:5px;color:#858585;width:12px;text-align:center}.json-preview{color:#858585;font-style:italic}\n"]}]}],propDecorators:{data:[{type:c}],key:[{type:c}],level:[{type:c}],expandDepth:[{type:c}]}});class ConsoleTabComponent{cdr;static className="ConsoleTabComponent";logsContainer;shouldScrollToBottom=!0;availableLevels=["ALL","INFO","DEBUG","WARNING","ERROR"];logs=[];logSub;inspectedObject=null;inspectedObjectMethods=[];inspectedLog=null;constructor(t){this.cdr=t}newClassName="";newClassLevels={};openDropdownClass=null;dropdownTop=0;dropdownLeft=0;selectedConfig=null;mobileExpandedSection=null;searchTerm="";selectedLevels=new Set;get filteredLogs(){let t=this.logs;if(this.selectedLevels.size>0&&(t=t.filter(t=>this.selectedLevels.has(t.level))),!this.searchTerm.trim())return t;const e=this.searchTerm.toLowerCase();return t.filter(t=>t.message.toLowerCase().includes(e)||t.className.toLowerCase().includes(e)||t.level.toLowerCase().includes(e)||t.params&&JSON.stringify(t.params).toLowerCase().includes(e))}get logCounts(){const t={};return this.availableLevels.forEach(e=>{"ALL"!==e&&(t[e]=0)}),this.logs.forEach(e=>{void 0!==t[e.level]?t[e.level]++:t[e.level]=(t[e.level]||0)+1}),t}getClassLogCount(t){return this.logs.filter(e=>e.className===t).length}filterByLevel(t){this.selectedLevels.has(t)?this.selectedLevels.delete(t):this.selectedLevels.add(t)}ngOnInit(){this.logSub=ConsoleLogsUtility.logStream$.subscribe(t=>{this.logs.push(t),this.logs.length>500&&this.logs.shift(),this.shouldScrollToBottom&&(this.cdr.detectChanges(),this.scrollToBottom())}),this.mobileExpandedSection="logs"}ngAfterViewInit(){this.shouldScrollToBottom&&this.scrollToBottom()}scrollToBottom(){try{this.logsContainer&&this.logsContainer.nativeElement&&(this.logsContainer.nativeElement.scrollTop=this.logsContainer.nativeElement.scrollHeight)}catch(t){}}onLogScroll(){const t=this.logsContainer.nativeElement;this.shouldScrollToBottom=t.scrollHeight-t.scrollTop<=t.clientHeight+20}ngOnDestroy(){this.logSub&&this.logSub.unsubscribe()}toggleSection(t){this.mobileExpandedSection=this.mobileExpandedSection===t?null:t}get classConfigs(){return ConsoleLogsConfig.classConfigs}get defaultLevels(){return ConsoleLogsConfig.defaultLevels}toggleSlider(){}clearLogs(){this.logs=[]}inspectObject(t,e){this.inspectedObject=t,this.inspectedLog=e||null,this.inspectedObjectMethods=this.getPrototypeMethods(t)}closeInspector(){this.inspectedObject=null,this.inspectedObjectMethods=[],this.inspectedLog=null,this.replResult=null,this.replError=null,this.hasReplResult=!1}executionCode="";replResult=null;replError=null;hasReplResult=!1;appendToRepl(t){const e=`state.${t}()`;this.executionCode.trim()?this.executionCode+="\n"+e:this.executionCode=e}executeSnippet(){if(this.inspectedObject&&this.executionCode.trim()){this.replResult=null,this.replError=null,this.hasReplResult=!1;try{let t;new Function("state","return "+this.executionCode),new Function("state",`\n try {\n return (function() { \n return ${this.executionCode}; \n })();\n } catch (e) {\n // If it wasn't an expression, maybe it was a statement?\n // But we wrapped it in return...\n // Let's try executing as statements if the first failed or if we prefer statements.\n // But usually console is expression-based.\n throw e; \n }\n `);try{t=new Function("state",`return (${this.executionCode})`)(this.inspectedObject)}catch(e){t=new Function("state",this.executionCode)(this.inspectedObject)}this.replResult=t,this.hasReplResult=!0,ConsoleLogsUtility.info(this,"REPL Execution",{code:this.executionCode,result:t})}catch(t){this.replError=t.message||t,ConsoleLogsUtility.error(this,"REPL Error",t)}}}isObject(t){return null!==t&&"object"==typeof t}getPrototypeMethods(t){if(null===t||"object"!=typeof t)return[];const e=[];let r=t;for(;r&&r!==Object.prototype;)Object.getOwnPropertyNames(r).forEach(t=>{Object.getOwnPropertyDescriptor(r,t),"function"!=typeof r[t]||"constructor"===t||t.startsWith("_")||e.includes(t)||e.push(t)}),r=Object.getPrototypeOf(r);return e.sort()}isLevelEnabled(t,e){return t.levels.includes(e)}updateClassLevel(t,e,r){const n=r.target.checked,o=this.classConfigs.find(e=>e.className===t);if(!o)return;let a=[...o.levels];n?a.includes(e)||a.push(e):a=a.filter(t=>t!==e),ConsoleLogsConfig.setClassLevels(t,a)}removeClass(t){ConsoleLogsConfig.removeClassConfig(t)}toggleDropdown(t,e){e.stopPropagation();const r=t.className;if(this.openDropdownClass===r)return this.openDropdownClass=null,void(this.selectedConfig=null);this.openDropdownClass=r,this.selectedConfig=t;const n=e.currentTarget.getBoundingClientRect();this.dropdownTop=n.bottom+5,this.dropdownLeft=n.left}closeDropdown(){this.openDropdownClass=null,this.selectedConfig=null}getSelectedLevelsLabel(t){return t.levels.length===this.availableLevels.length?"ALL":0===t.levels.length?"None":t.levels.sort((t,e)=>this.availableLevels.indexOf(t)-this.availableLevels.indexOf(e)).join(", ")}toggleNewClassDropdown(t){if(t.stopPropagation(),"__NEW__"===this.openDropdownClass)return void this.closeDropdown();this.openDropdownClass="__NEW__",this.selectedConfig=null;const e=t.currentTarget.getBoundingClientRect();this.dropdownTop=e.bottom+5,this.dropdownLeft=e.left}updateNewClassLevel(t,e){this.newClassLevels[t]=e.target.checked}getNewClassLevelsLabel(){const t=this.availableLevels.filter(t=>this.newClassLevels[t]);return t.length===this.availableLevels.length?"ALL":0===t.length?"None":t.join(", ")}addNewClass(){if(!this.newClassName.trim())return;const t=[];this.availableLevels.forEach(e=>{this.newClassLevels[e]&&t.push(e)}),ConsoleLogsConfig.setClassLevels(this.newClassName.trim(),t),this.newClassName="",this.newClassLevels={}}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ConsoleTabComponent,deps:[{token:t.ChangeDetectorRef}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:ConsoleTabComponent,isStandalone:!0,selector:"asor-console-tab",viewQueries:[{propertyName:"logsContainer",first:!0,predicate:["logsContainer"],descendants:!0}],ngImport:t,template:'<div class="console-tab-container">\r\n\t\x3c!-- Transparent backdrop to close dropdowns --\x3e\r\n\t<div class="dropdown-backdrop" *ngIf="openDropdownClass" (click)="closeDropdown()"></div>\r\n\r\n\t\x3c!-- Root Dropdown Menu --\x3e\r\n\t<div\r\n\t\tclass="dropdown-menu fixed-dropdown"\r\n\t\t*ngIf="openDropdownClass && (selectedConfig || openDropdownClass === \'__NEW__\')"\r\n\t\t[style.top.px]="dropdownTop"\r\n\t\t[style.left.px]="dropdownLeft"\r\n\t\t(click)="$event.stopPropagation()"\r\n\t>\r\n\t\t\x3c!-- Existing Class Mode --\x3e\r\n\t\t<ng-container *ngIf="selectedConfig">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="isLevelEnabled(selectedConfig, level)"\r\n\t\t\t\t\t(change)="updateClassLevel(selectedConfig.className, level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\r\n\t\t\x3c!-- New Class Mode --\x3e\r\n\t\t<ng-container *ngIf="openDropdownClass === \'__NEW__\'">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="newClassLevels[level]"\r\n\t\t\t\t\t(change)="updateNewClassLevel(level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div class="console-grid">\r\n\t\t\x3c!-- LEFT TILE: Configuration --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile config-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'config\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'logs\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'config\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'config\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'config\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Configuration</h4>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="console-summary" *ngIf="mobileExpandedSection !== \'config\'">\r\n\t\t\t\tDefaults levels logs: {{ defaultLevels.join(\', \') || \'NONE/OFF\' }}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class="table-container">\r\n\t\t\t\t<table class="config-table">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<th>Class</th>\r\n\t\t\t\t\t\t\t<th>Levels</th>\r\n\t\t\t\t\t\t\t<th class="actions-col"></th>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor="let config of classConfigs">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t{{ config.className }}\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass="class-count"\r\n\t\t\t\t\t\t\t\t\t*ngIf="getClassLogCount(config.className) > 0"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t({{ getClassLogCount(config.className) }})\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleDropdown(config, $event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetSelectedLevelsLabel(config)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn delete"\r\n\t\t\t\t\t\t\t\t\t(click)="removeClass(config.className)"\r\n\t\t\t\t\t\t\t\t\ttitle="Remove"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t✕\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t\t<tfoot>\r\n\t\t\t\t\t\t<tr class="add-row">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="input-text-small"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="newClassName"\r\n\t\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\t\tplaceholder="New Class..."\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleNewClassDropdown($event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetNewClassLevelsLabel() || \'Select Levels\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn add"\r\n\t\t\t\t\t\t\t\t\t[disabled]="!newClassName"\r\n\t\t\t\t\t\t\t\t\t(click)="addNewClass()"\r\n\t\t\t\t\t\t\t\t\ttitle="Add"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t\x3c!-- RIGHT TILE: Logs --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile logs-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'logs\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'config\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'logs\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'logs\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'logs\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Logs Stream</h4>\r\n\t\t\t\t\t<div class="log-counts">\r\n\t\t\t\t\t\t<ng-container *ngFor="let level of availableLevels">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="count-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="level !== \'ALL\' && logCounts[level]"\r\n\t\t\t\t\t\t\t\t[ngClass]="[\r\n\t\t\t\t\t\t\t\t\tlevel.toLowerCase(),\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level) ? \'selected\' : \'\',\r\n\t\t\t\t\t\t\t\t]"\r\n\t\t\t\t\t\t\t\t[title]="\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level)\r\n\t\t\t\t\t\t\t\t\t\t? \'Clear filter\'\r\n\t\t\t\t\t\t\t\t\t\t: \'Add filter for \' + level\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t(click)="filterByLevel(level)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ level }}: <b>{{ logCounts[level] }}</b>\r\n\t\t\t\t\t\t\t\t<span class="clear-filter-icon" *ngIf="selectedLevels.has(level)"\r\n\t\t\t\t\t\t\t\t\t>✕</span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="search-input"\r\n\t\t\t\t\t\t[(ngModel)]="searchTerm"\r\n\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\tplaceholder="Search logs..."\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="icon-btn clear" (click)="clearLogs()" title="Clear Logs">\r\n\t\t\t\t\t\t✕ Clear\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="logs-container" #logsContainer (scroll)="onLogScroll()">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass="log-entry"\r\n\t\t\t\t\t*ngFor="let log of filteredLogs"\r\n\t\t\t\t\t[ngClass]="log.level.toLowerCase()"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class="log-badge">{{ log.level }}</span>\r\n\t\t\t\t\t<span class="log-time">{{ log.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass="log-class"\r\n\t\t\t\t\t\t[class.clickable]="log.source"\r\n\t\t\t\t\t\t[title]="log.source ? \'Inspect \' + log.className : \'\'"\r\n\t\t\t\t\t\t(click)="log.source ? inspectObject(log.source, log) : null"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t[{{ log.className }}]\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class="log-msg">{{ log.message }}</span>\r\n\r\n\t\t\t\t\t<div class="log-params" *ngIf="log.params.length">\r\n\t\t\t\t\t\t<ng-container *ngFor="let param of log.params">\r\n\t\t\t\t\t\t\t<span class="param-primitive" *ngIf="!isObject(param)">{{\r\n\t\t\t\t\t\t\t\tparam\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="btn-inspect"\r\n\t\t\t\t\t\t\t\t*ngIf="isObject(param)"\r\n\t\t\t\t\t\t\t\t(click)="inspectObject(param)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t🔍 Object\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="empty-logs" *ngIf="logs.length === 0">Waiting for logs...</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t\x3c!-- Inspector Modal/Overlay --\x3e\r\n\t<div class="inspector-overlay" *ngIf="inspectedObject" (click)="closeInspector()">\r\n\t\t<div class="inspector-panel" (click)="$event.stopPropagation()">\r\n\t\t\t<div class="inspector-header">\r\n\t\t\t\t<div class="header-content">\r\n\t\t\t\t\t<h4>Object Inspector</h4>\r\n\t\t\t\t\t<div class="inspector-meta" *ngIf="inspectedLog">\r\n\t\t\t\t\t\t<span class="meta-badge" [ngClass]="inspectedLog.level.toLowerCase()">{{\r\n\t\t\t\t\t\t\tinspectedLog.level\r\n\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t<span class="meta-class">[{{ inspectedLog.className }}]</span>\r\n\t\t\t\t\t\t<span class="meta-time">{{ inspectedLog.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button class="close-btn" (click)="closeInspector()">✕</button>\r\n\t\t\t</div>\r\n\t\t\t<div class="inspector-content">\r\n\t\t\t\t<div class="inspector-split">\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>State</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="inspectedObject" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObjectMethods.length > 0">\r\n\t\t\t\t\t\t<h5>Methods</h5>\r\n\t\t\t\t\t\t<div class="methods-list">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="method-btn"\r\n\t\t\t\t\t\t\t\t*ngFor="let method of inspectedObjectMethods"\r\n\t\t\t\t\t\t\t\t(click)="appendToRepl(method)"\r\n\t\t\t\t\t\t\t\ttitle="Add to REPL"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ method }}()\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>Console REPL</h5>\r\n\t\t\t\t\t\t<div class="repl-container">\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t[(ngModel)]="executionCode"\r\n\t\t\t\t\t\t\t\t(keydown.control.enter)="executeSnippet()"\r\n\t\t\t\t\t\t\t\tplaceholder="Execute code (e.g. state.createDataSet(...))"\r\n\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t<button class="repl-btn" (click)="executeSnippet()">Execute</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="hasReplResult">\r\n\t\t\t\t\t\t<h5>Result</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="replResult" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section error-section" *ngIf="replError">\r\n\t\t\t\t\t\t<h5>Error</h5>\r\n\t\t\t\t\t\t<div class="error-msg">{{ replError }}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".console-tab-container{height:100%;display:flex;flex-direction:column}.console-grid{display:grid;grid-template-columns:400px 1fr;gap:16px;height:100%}.tile{background-color:#252526;border-radius:6px;border:1px solid #333;display:flex;flex-direction:column;overflow:hidden;height:100%}.tile-header{padding:10px 12px;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;background-color:#2d2d2d}.tile-header h4{margin:0;font-size:12px;text-transform:uppercase;color:#999;font-weight:600;letter-spacing:.5px}.tile-header .header-actions,.header-title-group{display:flex;align-items:center;gap:8px}.header-title-group .log-counts{display:flex;gap:6px;margin-left:8px}.header-title-group .log-counts .count-badge{font-size:10px;padding:2px 6px;border-radius:10px;font-weight:600;color:#fff;background-color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.header-title-group .log-counts .count-badge:hover{opacity:.8}.header-title-group .log-counts .count-badge.info{background-color:#0dcaf033;color:#0dcaf0;border:1px solid rgba(13,202,240,.3)}.header-title-group .log-counts .count-badge.debug{background-color:#a855f733;color:#a855f7;border:1px solid rgba(168,85,247,.3)}.header-title-group .log-counts .count-badge.warning{background-color:#f59e0b33;color:#f59e0b;border:1px solid rgba(245,158,11,.3)}.header-title-group .log-counts .count-badge.selected{opacity:1;border:1px solid #fff;box-shadow:0 0 4px #ffffff80}.header-title-group .log-counts .count-badge.selected.info{background-color:#0dcaf0;color:#000}.header-title-group .log-counts .count-badge.selected.debug{background-color:#a855f7;color:#fff}.header-title-group .log-counts .count-badge.selected.warning{background-color:#f59e0b;color:#000}.header-title-group .log-counts .count-badge.selected.error{background-color:#ef4444;color:#fff}.header-title-group .log-counts .count-badge .clear-filter-icon{margin-left:4px;font-size:8px;font-weight:700}.table-container,.logs-container{flex:1;overflow-y:auto}.table-container::-webkit-scrollbar,.logs-container::-webkit-scrollbar{width:10px;height:10px}.table-container::-webkit-scrollbar-track,.logs-container::-webkit-scrollbar-track{background:#1e1e1e}.table-container::-webkit-scrollbar-thumb,.logs-container::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.table-container::-webkit-scrollbar-thumb:hover,.logs-container::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.config-table{width:100%;border-collapse:collapse;font-size:12px}.config-table th,.config-table td{border-bottom:1px solid #333;padding:8px 12px;text-align:left;vertical-align:middle;color:#ccc}.config-table th{background-color:#2d2d2d;font-weight:600;color:#999;text-transform:uppercase;font-size:11px;position:sticky;top:0;z-index:10}.config-table tfoot{background-color:#2d2d2d;position:sticky;bottom:0;z-index:10}.config-table tfoot td{border-top:1px solid #333}.config-table tr:hover td{background-color:#2a2d2e}.config-table .class-count{color:#888;font-size:11px;margin-left:4px}.input-text-small{background-color:#3c3c3c;border:1px solid #3c3c3c;color:#fff;padding:4px 8px;border-radius:3px;width:100%;font-size:12px}.input-text-small:focus{outline:none;border-color:#007acc;background-color:#444}.input-text-small::placeholder{color:#888}.multiselect-container{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 8px;background-color:#3c3c3c;border:1px solid #454545;border-radius:4px;min-width:120px;color:#fff;font-size:11px}.dropdown-trigger:hover{background-color:#444;border-color:#007acc}.dropdown-trigger .selected-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}.dropdown-trigger .arrow{font-size:8px;color:#999}.level-checks{display:flex;gap:10px;flex-wrap:wrap}.level-check{display:flex;align-items:center;gap:4px;cursor:pointer;font-size:11px;color:#bbb;-webkit-user-select:none;user-select:none}.level-check:hover{color:#fff}.level-check input{accent-color:#007acc}.icon-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;transition:all .2s;display:flex;align-items:center;justify-content:center}.icon-btn.delete{color:#f48771}.icon-btn.delete:hover{background-color:#f487711a}.icon-btn.add{color:#89d185;font-size:16px}.icon-btn.add:hover:not(:disabled){background-color:#89d1851a}.icon-btn.add:disabled{color:#555;cursor:not-allowed}.icon-btn.clear{font-size:11px;color:#bbb;border:1px solid #3e3e42;padding:2px 8px}.icon-btn.clear:hover{background-color:#3e3e42;color:#fff}.icon-btn.expand-btn{display:none}@media (max-width: 768px){.icon-btn.expand-btn{display:flex;font-size:10px;color:#999;border:1px solid #3e3e42;width:20px;height:20px;padding:0}.icon-btn.expand-btn:hover{background-color:#3e3e42;color:#fff}}.search-input{background-color:#3c3c3c;border:1px solid #3e3e42;color:#fff;padding:3px 8px;border-radius:4px;font-size:11px;width:150px;transition:all .2s}.search-input:focus{outline:none;border-color:#007acc;background-color:#444;width:180px}.search-input::placeholder{color:#888}.logs-container{background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px;padding:8px 12px}.log-entry{padding:6px 0;border-bottom:1px solid #2d2d2d;display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;line-height:1.4}.log-entry:last-child{border-bottom:none}.log-entry.info .log-badge{background-color:#0dcaf0;color:#000;border-radius:3px;font-weight:700}.log-entry.info .log-msg,.log-entry.info .log-class{color:#0dcaf0}.log-entry.debug .log-badge{background-color:#a855f7;color:#fff;border-radius:3px;font-weight:700}.log-entry.debug .log-msg,.log-entry.debug .log-class{color:#a855f7}.log-entry.warning .log-badge{background-color:#f59e0b;color:#000;border-radius:3px;font-weight:700}.log-entry.warning .log-msg,.log-entry.warning .log-class{color:#f59e0b}.log-entry.error .log-badge{background-color:#ef4444;color:#fff;border-radius:3px;font-weight:700}.log-entry.error .log-msg,.log-entry.error .log-class{color:#ef4444;font-weight:700}.log-time{color:#6a9955;font-size:11px;min-width:60px}.log-badge{font-weight:700;width:60px;font-size:11px;text-align:center}.log-class{color:#569cd6}.log-class.clickable{cursor:pointer;text-decoration:underline}.log-class.clickable:hover{opacity:.8;color:#9cdcfe}.log-msg{color:#ccc;word-break:break-all}.log-params{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-left:8px}.param-primitive{color:#9cdcfe;background:#2a2d2e;padding:0 4px;border-radius:3px}.btn-inspect{background-color:#2d2d2d;border:1px solid #3e3e42;color:#4fc1ff;padding:2px 8px;border-radius:12px;cursor:pointer;font-size:11px;font-family:inherit;transition:all .2s;display:inline-flex;align-items:center;gap:4px}.btn-inspect:hover{background-color:#3e3e42;border-color:#4fc1ff;color:#fff}.empty-logs{color:#666;text-align:center;padding:40px;font-style:italic}.inspector-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;justify-content:center;align-items:center;padding:40px}.inspector-panel{background-color:#252526;border-radius:8px;width:100%;max-width:700px;height:100%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 50px #000000b3;border:1px solid #454545;animation:zoomIn .25s cubic-bezier(.16,1,.3,1)}@keyframes zoomIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.inspector-header{padding:12px 16px;background-color:#2d2d2d;border-bottom:1px solid #333;border-top-left-radius:8px;border-top-right-radius:8px;display:flex;justify-content:space-between;align-items:center}.inspector-header .header-content{display:flex;flex-direction:column;gap:2px}.inspector-header h4{margin:0;color:#eee;font-size:14px;font-weight:600}.inspector-header .inspector-meta{display:flex;gap:8px;align-items:center;font-size:11px;color:#888;font-family:monospace}.inspector-header .inspector-meta .meta-badge{padding:2px 6px;border-radius:3px;font-weight:700;font-size:10px}.inspector-header .inspector-meta .meta-badge.info,.inspector-header .inspector-meta .meta-badge.all{background-color:#0dcaf0;color:#000}.inspector-header .inspector-meta .meta-badge.debug{background-color:#a855f7;color:#fff}.inspector-header .inspector-meta .meta-badge.warning{background-color:#f59e0b;color:#000}.inspector-header .inspector-meta .meta-badge.error{background-color:#ef4444;color:#fff}.inspector-header .inspector-meta .meta-class{color:#569cd6}.inspector-header .inspector-meta .meta-time{color:#6a9955}.inspector-header .close-btn{background:none;border:none;color:#999;font-size:18px;cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.inspector-header .close-btn:hover{background-color:#3e3e42;color:#fff}.inspector-content{flex:1;overflow-y:auto;padding:20px;background-color:#1e1e1e}.inspector-content::-webkit-scrollbar{width:10px;height:10px}.inspector-content::-webkit-scrollbar-track{background:#1e1e1e}.inspector-content::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.inspector-content::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.inspector-split{display:flex;flex-direction:column;gap:20px}.inspector-section h5{margin:0 0 10px;color:#999;font-size:12px;text-transform:uppercase;border-bottom:1px solid #333;padding-bottom:4px}.methods-list{display:flex;flex-wrap:wrap;gap:8px}.method-btn{background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;padding:4px 10px;border-radius:4px;cursor:pointer;font-family:Consolas,monospace;font-size:12px;transition:all .2s}.method-btn:hover{background-color:#3e3e42;border-color:#dcdcaa;color:#fff}.method-btn:active{transform:translateY(1px)}.repl-container{display:flex;flex-direction:column;gap:8px}.repl-container textarea{width:100%;height:80px;background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;font-family:Consolas,monospace;padding:8px;resize:vertical;outline:none}.repl-container textarea:focus{border-color:#007fd4}.repl-container textarea::-webkit-scrollbar{width:8px;height:8px}.repl-container textarea::-webkit-scrollbar-track{background:#2d2d2d}.repl-container textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:4px}.repl-container textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.repl-container .repl-btn{align-self:flex-end;background-color:#0e639c;color:#fff;border:none;padding:6px 12px;cursor:pointer;border-radius:2px}.repl-container .repl-btn:hover{background-color:#17b}.error-section .error-msg{color:#f48771;background-color:#3e3e42;padding:8px;border-left:3px solid #f48771;font-family:monospace;white-space:pre-wrap}.dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;cursor:default}.dropdown-menu.fixed-dropdown{position:fixed;z-index:10000;background-color:#252526;border:1px solid #454545;box-shadow:0 4px 10px #00000080;border-radius:4px;padding:4px 0;min-width:150px;max-height:200px;overflow-y:auto}.dropdown-menu.fixed-dropdown .level-check-item{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;color:#ccc;transition:background-color .1s;-webkit-user-select:none;user-select:none;font-size:11px}.dropdown-menu.fixed-dropdown .level-check-item:hover{background-color:#007acc;color:#fff}.dropdown-menu.fixed-dropdown .level-check-item input{accent-color:#fff}.dropdown-menu.fixed-dropdown::-webkit-scrollbar{width:8px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-track{background:#252526}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb{background:#444;border-radius:4px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb:hover{background:#555}@media (max-width: 768px){.console-grid{display:flex;flex-direction:column;gap:10px;height:100%;overflow:hidden}.tile{transition:all .3s cubic-bezier(.25,.8,.25,1);display:flex;flex-direction:column}.tile.collapsed{flex:0 0 auto;max-height:40px!important;overflow:hidden}.tile.collapsed .table-container,.tile.collapsed .logs-container,.tile.collapsed .console-summary{display:none}.tile.expanded{flex:1 1 auto;max-height:100%!important;height:100%}.tile.config-tile{max-height:40vh}.tile.config-tile.expanded{max-height:100%}.inspector-panel{width:100%;height:100%;max-width:none;max-height:none;border-radius:0}.inspector-header{border-radius:0}.tile-header{flex-direction:column;align-items:flex-start;gap:8px}.tile-header .header-actions{width:100%;display:flex;justify-content:space-between}.tile-header .header-actions .search-input{flex-grow:1;margin-right:8px;width:auto}.tile-header .header-actions .search-input:focus{width:auto}}.console-summary{padding:4px;font-size:11px;color:#888}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ConsoleTabComponent,decorators:[{type:p,args:[{selector:"asor-console-tab",standalone:!0,imports:[w,K,JsonViewComponent],encapsulation:d.None,template:'<div class="console-tab-container">\r\n\t\x3c!-- Transparent backdrop to close dropdowns --\x3e\r\n\t<div class="dropdown-backdrop" *ngIf="openDropdownClass" (click)="closeDropdown()"></div>\r\n\r\n\t\x3c!-- Root Dropdown Menu --\x3e\r\n\t<div\r\n\t\tclass="dropdown-menu fixed-dropdown"\r\n\t\t*ngIf="openDropdownClass && (selectedConfig || openDropdownClass === \'__NEW__\')"\r\n\t\t[style.top.px]="dropdownTop"\r\n\t\t[style.left.px]="dropdownLeft"\r\n\t\t(click)="$event.stopPropagation()"\r\n\t>\r\n\t\t\x3c!-- Existing Class Mode --\x3e\r\n\t\t<ng-container *ngIf="selectedConfig">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="isLevelEnabled(selectedConfig, level)"\r\n\t\t\t\t\t(change)="updateClassLevel(selectedConfig.className, level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\r\n\t\t\x3c!-- New Class Mode --\x3e\r\n\t\t<ng-container *ngIf="openDropdownClass === \'__NEW__\'">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="newClassLevels[level]"\r\n\t\t\t\t\t(change)="updateNewClassLevel(level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div class="console-grid">\r\n\t\t\x3c!-- LEFT TILE: Configuration --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile config-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'config\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'logs\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'config\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'config\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'config\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Configuration</h4>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="console-summary" *ngIf="mobileExpandedSection !== \'config\'">\r\n\t\t\t\tDefaults levels logs: {{ defaultLevels.join(\', \') || \'NONE/OFF\' }}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class="table-container">\r\n\t\t\t\t<table class="config-table">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<th>Class</th>\r\n\t\t\t\t\t\t\t<th>Levels</th>\r\n\t\t\t\t\t\t\t<th class="actions-col"></th>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor="let config of classConfigs">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t{{ config.className }}\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass="class-count"\r\n\t\t\t\t\t\t\t\t\t*ngIf="getClassLogCount(config.className) > 0"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t({{ getClassLogCount(config.className) }})\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleDropdown(config, $event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetSelectedLevelsLabel(config)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn delete"\r\n\t\t\t\t\t\t\t\t\t(click)="removeClass(config.className)"\r\n\t\t\t\t\t\t\t\t\ttitle="Remove"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t✕\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t\t<tfoot>\r\n\t\t\t\t\t\t<tr class="add-row">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="input-text-small"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="newClassName"\r\n\t\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\t\tplaceholder="New Class..."\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleNewClassDropdown($event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetNewClassLevelsLabel() || \'Select Levels\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn add"\r\n\t\t\t\t\t\t\t\t\t[disabled]="!newClassName"\r\n\t\t\t\t\t\t\t\t\t(click)="addNewClass()"\r\n\t\t\t\t\t\t\t\t\ttitle="Add"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t\x3c!-- RIGHT TILE: Logs --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile logs-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'logs\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'config\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'logs\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'logs\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'logs\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Logs Stream</h4>\r\n\t\t\t\t\t<div class="log-counts">\r\n\t\t\t\t\t\t<ng-container *ngFor="let level of availableLevels">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="count-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="level !== \'ALL\' && logCounts[level]"\r\n\t\t\t\t\t\t\t\t[ngClass]="[\r\n\t\t\t\t\t\t\t\t\tlevel.toLowerCase(),\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level) ? \'selected\' : \'\',\r\n\t\t\t\t\t\t\t\t]"\r\n\t\t\t\t\t\t\t\t[title]="\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level)\r\n\t\t\t\t\t\t\t\t\t\t? \'Clear filter\'\r\n\t\t\t\t\t\t\t\t\t\t: \'Add filter for \' + level\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t(click)="filterByLevel(level)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ level }}: <b>{{ logCounts[level] }}</b>\r\n\t\t\t\t\t\t\t\t<span class="clear-filter-icon" *ngIf="selectedLevels.has(level)"\r\n\t\t\t\t\t\t\t\t\t>✕</span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="search-input"\r\n\t\t\t\t\t\t[(ngModel)]="searchTerm"\r\n\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\tplaceholder="Search logs..."\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="icon-btn clear" (click)="clearLogs()" title="Clear Logs">\r\n\t\t\t\t\t\t✕ Clear\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="logs-container" #logsContainer (scroll)="onLogScroll()">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass="log-entry"\r\n\t\t\t\t\t*ngFor="let log of filteredLogs"\r\n\t\t\t\t\t[ngClass]="log.level.toLowerCase()"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class="log-badge">{{ log.level }}</span>\r\n\t\t\t\t\t<span class="log-time">{{ log.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass="log-class"\r\n\t\t\t\t\t\t[class.clickable]="log.source"\r\n\t\t\t\t\t\t[title]="log.source ? \'Inspect \' + log.className : \'\'"\r\n\t\t\t\t\t\t(click)="log.source ? inspectObject(log.source, log) : null"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t[{{ log.className }}]\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class="log-msg">{{ log.message }}</span>\r\n\r\n\t\t\t\t\t<div class="log-params" *ngIf="log.params.length">\r\n\t\t\t\t\t\t<ng-container *ngFor="let param of log.params">\r\n\t\t\t\t\t\t\t<span class="param-primitive" *ngIf="!isObject(param)">{{\r\n\t\t\t\t\t\t\t\tparam\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="btn-inspect"\r\n\t\t\t\t\t\t\t\t*ngIf="isObject(param)"\r\n\t\t\t\t\t\t\t\t(click)="inspectObject(param)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t🔍 Object\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="empty-logs" *ngIf="logs.length === 0">Waiting for logs...</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t\x3c!-- Inspector Modal/Overlay --\x3e\r\n\t<div class="inspector-overlay" *ngIf="inspectedObject" (click)="closeInspector()">\r\n\t\t<div class="inspector-panel" (click)="$event.stopPropagation()">\r\n\t\t\t<div class="inspector-header">\r\n\t\t\t\t<div class="header-content">\r\n\t\t\t\t\t<h4>Object Inspector</h4>\r\n\t\t\t\t\t<div class="inspector-meta" *ngIf="inspectedLog">\r\n\t\t\t\t\t\t<span class="meta-badge" [ngClass]="inspectedLog.level.toLowerCase()">{{\r\n\t\t\t\t\t\t\tinspectedLog.level\r\n\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t<span class="meta-class">[{{ inspectedLog.className }}]</span>\r\n\t\t\t\t\t\t<span class="meta-time">{{ inspectedLog.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button class="close-btn" (click)="closeInspector()">✕</button>\r\n\t\t\t</div>\r\n\t\t\t<div class="inspector-content">\r\n\t\t\t\t<div class="inspector-split">\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>State</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="inspectedObject" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObjectMethods.length > 0">\r\n\t\t\t\t\t\t<h5>Methods</h5>\r\n\t\t\t\t\t\t<div class="methods-list">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="method-btn"\r\n\t\t\t\t\t\t\t\t*ngFor="let method of inspectedObjectMethods"\r\n\t\t\t\t\t\t\t\t(click)="appendToRepl(method)"\r\n\t\t\t\t\t\t\t\ttitle="Add to REPL"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ method }}()\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>Console REPL</h5>\r\n\t\t\t\t\t\t<div class="repl-container">\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t[(ngModel)]="executionCode"\r\n\t\t\t\t\t\t\t\t(keydown.control.enter)="executeSnippet()"\r\n\t\t\t\t\t\t\t\tplaceholder="Execute code (e.g. state.createDataSet(...))"\r\n\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t<button class="repl-btn" (click)="executeSnippet()">Execute</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="hasReplResult">\r\n\t\t\t\t\t\t<h5>Result</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="replResult" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section error-section" *ngIf="replError">\r\n\t\t\t\t\t\t<h5>Error</h5>\r\n\t\t\t\t\t\t<div class="error-msg">{{ replError }}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".console-tab-container{height:100%;display:flex;flex-direction:column}.console-grid{display:grid;grid-template-columns:400px 1fr;gap:16px;height:100%}.tile{background-color:#252526;border-radius:6px;border:1px solid #333;display:flex;flex-direction:column;overflow:hidden;height:100%}.tile-header{padding:10px 12px;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;background-color:#2d2d2d}.tile-header h4{margin:0;font-size:12px;text-transform:uppercase;color:#999;font-weight:600;letter-spacing:.5px}.tile-header .header-actions,.header-title-group{display:flex;align-items:center;gap:8px}.header-title-group .log-counts{display:flex;gap:6px;margin-left:8px}.header-title-group .log-counts .count-badge{font-size:10px;padding:2px 6px;border-radius:10px;font-weight:600;color:#fff;background-color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.header-title-group .log-counts .count-badge:hover{opacity:.8}.header-title-group .log-counts .count-badge.info{background-color:#0dcaf033;color:#0dcaf0;border:1px solid rgba(13,202,240,.3)}.header-title-group .log-counts .count-badge.debug{background-color:#a855f733;color:#a855f7;border:1px solid rgba(168,85,247,.3)}.header-title-group .log-counts .count-badge.warning{background-color:#f59e0b33;color:#f59e0b;border:1px solid rgba(245,158,11,.3)}.header-title-group .log-counts .count-badge.selected{opacity:1;border:1px solid #fff;box-shadow:0 0 4px #ffffff80}.header-title-group .log-counts .count-badge.selected.info{background-color:#0dcaf0;color:#000}.header-title-group .log-counts .count-badge.selected.debug{background-color:#a855f7;color:#fff}.header-title-group .log-counts .count-badge.selected.warning{background-color:#f59e0b;color:#000}.header-title-group .log-counts .count-badge.selected.error{background-color:#ef4444;color:#fff}.header-title-group .log-counts .count-badge .clear-filter-icon{margin-left:4px;font-size:8px;font-weight:700}.table-container,.logs-container{flex:1;overflow-y:auto}.table-container::-webkit-scrollbar,.logs-container::-webkit-scrollbar{width:10px;height:10px}.table-container::-webkit-scrollbar-track,.logs-container::-webkit-scrollbar-track{background:#1e1e1e}.table-container::-webkit-scrollbar-thumb,.logs-container::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.table-container::-webkit-scrollbar-thumb:hover,.logs-container::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.config-table{width:100%;border-collapse:collapse;font-size:12px}.config-table th,.config-table td{border-bottom:1px solid #333;padding:8px 12px;text-align:left;vertical-align:middle;color:#ccc}.config-table th{background-color:#2d2d2d;font-weight:600;color:#999;text-transform:uppercase;font-size:11px;position:sticky;top:0;z-index:10}.config-table tfoot{background-color:#2d2d2d;position:sticky;bottom:0;z-index:10}.config-table tfoot td{border-top:1px solid #333}.config-table tr:hover td{background-color:#2a2d2e}.config-table .class-count{color:#888;font-size:11px;margin-left:4px}.input-text-small{background-color:#3c3c3c;border:1px solid #3c3c3c;color:#fff;padding:4px 8px;border-radius:3px;width:100%;font-size:12px}.input-text-small:focus{outline:none;border-color:#007acc;background-color:#444}.input-text-small::placeholder{color:#888}.multiselect-container{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 8px;background-color:#3c3c3c;border:1px solid #454545;border-radius:4px;min-width:120px;color:#fff;font-size:11px}.dropdown-trigger:hover{background-color:#444;border-color:#007acc}.dropdown-trigger .selected-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}.dropdown-trigger .arrow{font-size:8px;color:#999}.level-checks{display:flex;gap:10px;flex-wrap:wrap}.level-check{display:flex;align-items:center;gap:4px;cursor:pointer;font-size:11px;color:#bbb;-webkit-user-select:none;user-select:none}.level-check:hover{color:#fff}.level-check input{accent-color:#007acc}.icon-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;transition:all .2s;display:flex;align-items:center;justify-content:center}.icon-btn.delete{color:#f48771}.icon-btn.delete:hover{background-color:#f487711a}.icon-btn.add{color:#89d185;font-size:16px}.icon-btn.add:hover:not(:disabled){background-color:#89d1851a}.icon-btn.add:disabled{color:#555;cursor:not-allowed}.icon-btn.clear{font-size:11px;color:#bbb;border:1px solid #3e3e42;padding:2px 8px}.icon-btn.clear:hover{background-color:#3e3e42;color:#fff}.icon-btn.expand-btn{display:none}@media (max-width: 768px){.icon-btn.expand-btn{display:flex;font-size:10px;color:#999;border:1px solid #3e3e42;width:20px;height:20px;padding:0}.icon-btn.expand-btn:hover{background-color:#3e3e42;color:#fff}}.search-input{background-color:#3c3c3c;border:1px solid #3e3e42;color:#fff;padding:3px 8px;border-radius:4px;font-size:11px;width:150px;transition:all .2s}.search-input:focus{outline:none;border-color:#007acc;background-color:#444;width:180px}.search-input::placeholder{color:#888}.logs-container{background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px;padding:8px 12px}.log-entry{padding:6px 0;border-bottom:1px solid #2d2d2d;display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;line-height:1.4}.log-entry:last-child{border-bottom:none}.log-entry.info .log-badge{background-color:#0dcaf0;color:#000;border-radius:3px;font-weight:700}.log-entry.info .log-msg,.log-entry.info .log-class{color:#0dcaf0}.log-entry.debug .log-badge{background-color:#a855f7;color:#fff;border-radius:3px;font-weight:700}.log-entry.debug .log-msg,.log-entry.debug .log-class{color:#a855f7}.log-entry.warning .log-badge{background-color:#f59e0b;color:#000;border-radius:3px;font-weight:700}.log-entry.warning .log-msg,.log-entry.warning .log-class{color:#f59e0b}.log-entry.error .log-badge{background-color:#ef4444;color:#fff;border-radius:3px;font-weight:700}.log-entry.error .log-msg,.log-entry.error .log-class{color:#ef4444;font-weight:700}.log-time{color:#6a9955;font-size:11px;min-width:60px}.log-badge{font-weight:700;width:60px;font-size:11px;text-align:center}.log-class{color:#569cd6}.log-class.clickable{cursor:pointer;text-decoration:underline}.log-class.clickable:hover{opacity:.8;color:#9cdcfe}.log-msg{color:#ccc;word-break:break-all}.log-params{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-left:8px}.param-primitive{color:#9cdcfe;background:#2a2d2e;padding:0 4px;border-radius:3px}.btn-inspect{background-color:#2d2d2d;border:1px solid #3e3e42;color:#4fc1ff;padding:2px 8px;border-radius:12px;cursor:pointer;font-size:11px;font-family:inherit;transition:all .2s;display:inline-flex;align-items:center;gap:4px}.btn-inspect:hover{background-color:#3e3e42;border-color:#4fc1ff;color:#fff}.empty-logs{color:#666;text-align:center;padding:40px;font-style:italic}.inspector-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;justify-content:center;align-items:center;padding:40px}.inspector-panel{background-color:#252526;border-radius:8px;width:100%;max-width:700px;height:100%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 50px #000000b3;border:1px solid #454545;animation:zoomIn .25s cubic-bezier(.16,1,.3,1)}@keyframes zoomIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.inspector-header{padding:12px 16px;background-color:#2d2d2d;border-bottom:1px solid #333;border-top-left-radius:8px;border-top-right-radius:8px;display:flex;justify-content:space-between;align-items:center}.inspector-header .header-content{display:flex;flex-direction:column;gap:2px}.inspector-header h4{margin:0;color:#eee;font-size:14px;font-weight:600}.inspector-header .inspector-meta{display:flex;gap:8px;align-items:center;font-size:11px;color:#888;font-family:monospace}.inspector-header .inspector-meta .meta-badge{padding:2px 6px;border-radius:3px;font-weight:700;font-size:10px}.inspector-header .inspector-meta .meta-badge.info,.inspector-header .inspector-meta .meta-badge.all{background-color:#0dcaf0;color:#000}.inspector-header .inspector-meta .meta-badge.debug{background-color:#a855f7;color:#fff}.inspector-header .inspector-meta .meta-badge.warning{background-color:#f59e0b;color:#000}.inspector-header .inspector-meta .meta-badge.error{background-color:#ef4444;color:#fff}.inspector-header .inspector-meta .meta-class{color:#569cd6}.inspector-header .inspector-meta .meta-time{color:#6a9955}.inspector-header .close-btn{background:none;border:none;color:#999;font-size:18px;cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.inspector-header .close-btn:hover{background-color:#3e3e42;color:#fff}.inspector-content{flex:1;overflow-y:auto;padding:20px;background-color:#1e1e1e}.inspector-content::-webkit-scrollbar{width:10px;height:10px}.inspector-content::-webkit-scrollbar-track{background:#1e1e1e}.inspector-content::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.inspector-content::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.inspector-split{display:flex;flex-direction:column;gap:20px}.inspector-section h5{margin:0 0 10px;color:#999;font-size:12px;text-transform:uppercase;border-bottom:1px solid #333;padding-bottom:4px}.methods-list{display:flex;flex-wrap:wrap;gap:8px}.method-btn{background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;padding:4px 10px;border-radius:4px;cursor:pointer;font-family:Consolas,monospace;font-size:12px;transition:all .2s}.method-btn:hover{background-color:#3e3e42;border-color:#dcdcaa;color:#fff}.method-btn:active{transform:translateY(1px)}.repl-container{display:flex;flex-direction:column;gap:8px}.repl-container textarea{width:100%;height:80px;background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;font-family:Consolas,monospace;padding:8px;resize:vertical;outline:none}.repl-container textarea:focus{border-color:#007fd4}.repl-container textarea::-webkit-scrollbar{width:8px;height:8px}.repl-container textarea::-webkit-scrollbar-track{background:#2d2d2d}.repl-container textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:4px}.repl-container textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.repl-container .repl-btn{align-self:flex-end;background-color:#0e639c;color:#fff;border:none;padding:6px 12px;cursor:pointer;border-radius:2px}.repl-container .repl-btn:hover{background-color:#17b}.error-section .error-msg{color:#f48771;background-color:#3e3e42;padding:8px;border-left:3px solid #f48771;font-family:monospace;white-space:pre-wrap}.dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;cursor:default}.dropdown-menu.fixed-dropdown{position:fixed;z-index:10000;background-color:#252526;border:1px solid #454545;box-shadow:0 4px 10px #00000080;border-radius:4px;padding:4px 0;min-width:150px;max-height:200px;overflow-y:auto}.dropdown-menu.fixed-dropdown .level-check-item{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;color:#ccc;transition:background-color .1s;-webkit-user-select:none;user-select:none;font-size:11px}.dropdown-menu.fixed-dropdown .level-check-item:hover{background-color:#007acc;color:#fff}.dropdown-menu.fixed-dropdown .level-check-item input{accent-color:#fff}.dropdown-menu.fixed-dropdown::-webkit-scrollbar{width:8px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-track{background:#252526}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb{background:#444;border-radius:4px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb:hover{background:#555}@media (max-width: 768px){.console-grid{display:flex;flex-direction:column;gap:10px;height:100%;overflow:hidden}.tile{transition:all .3s cubic-bezier(.25,.8,.25,1);display:flex;flex-direction:column}.tile.collapsed{flex:0 0 auto;max-height:40px!important;overflow:hidden}.tile.collapsed .table-container,.tile.collapsed .logs-container,.tile.collapsed .console-summary{display:none}.tile.expanded{flex:1 1 auto;max-height:100%!important;height:100%}.tile.config-tile{max-height:40vh}.tile.config-tile.expanded{max-height:100%}.inspector-panel{width:100%;height:100%;max-width:none;max-height:none;border-radius:0}.inspector-header{border-radius:0}.tile-header{flex-direction:column;align-items:flex-start;gap:8px}.tile-header .header-actions{width:100%;display:flex;justify-content:space-between}.tile-header .header-actions .search-input{flex-grow:1;margin-right:8px;width:auto}.tile-header .header-actions .search-input:focus{width:auto}}.console-summary{padding:4px;font-size:11px;color:#888}\n"]}]}],ctorParameters:()=>[{type:t.ChangeDetectorRef}],propDecorators:{logsContainer:[{type:g,args:["logsContainer"]}]}});class JsonEditorComponent{set jsonString(t){this._jsonString!==t&&(this._jsonString=t||"",this.initialJsonString=this._jsonString,this.isDirty=!1,this.updateHighlighting())}get jsonString(){return this._jsonString}_jsonString="";jsonStringChange=new h;highlightedHtml="";lineNumbersHtml="1";isExpanded=!1;isDirty=!1;initialJsonString="";backdropElement;textareaElement;lineNumbersElement;toggleExpand(){this.isExpanded=!this.isExpanded}onTextareaChange(t){this._jsonString=t.target.value,this.isDirty=this._jsonString!==this.initialJsonString,this.jsonStringChange.emit(this._jsonString),this.updateHighlighting()}onScroll(t){const e=t.target;this.backdropElement&&(this.backdropElement.nativeElement.scrollTop=e.scrollTop,this.backdropElement.nativeElement.scrollLeft=e.scrollLeft),this.lineNumbersElement&&(this.lineNumbersElement.nativeElement.scrollTop=e.scrollTop)}updateHighlighting(){this.highlightedHtml=this.syntaxHighlight(this._jsonString),this.updateLineNumbers()}updateLineNumbers(){if(!this._jsonString)return void(this.lineNumbersHtml="1");const t=this._jsonString.split("\n").length;this.lineNumbersHtml=Array.from({length:t},(t,e)=>e+1).join("\n")}syntaxHighlight(t){return t?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*")(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,(t,e,r,n)=>{let o="json-value-number";if(/^"/.test(t)){if(n)return'<span class="json-key">'+e+"</span>"+n;o="json-value-string"}else/true|false/.test(t)?o="json-value-boolean":/null/.test(t)&&(o="json-value-null");return'<span class="'+o+'">'+t+"</span>"}):""}handleKeyDown(t){if("Tab"===t.key){t.preventDefault();const e=this.textareaElement.nativeElement,r=e.selectionStart,n=e.selectionEnd,o=e.value;e.value=o.substring(0,r)+" "+o.substring(n),e.selectionStart=e.selectionEnd=r+4,this.onTextareaChange({target:e})}}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonEditorComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:JsonEditorComponent,isStandalone:!0,selector:"asor-json-editor",inputs:{jsonString:"jsonString"},outputs:{jsonStringChange:"jsonStringChange"},viewQueries:[{propertyName:"backdropElement",first:!0,predicate:["backdrop"],descendants:!0},{propertyName:"textareaElement",first:!0,predicate:["textarea"],descendants:!0},{propertyName:"lineNumbersElement",first:!0,predicate:["lineNumbers"],descendants:!0}],ngImport:t,template:'<div class="json-editor-backdrop" *ngIf="isExpanded" (click)="toggleExpand()"></div>\r\n<div class="json-editor-wrapper" [class.expanded]="isExpanded">\r\n\t<div class="editor-toolbar">\r\n\t\t<div class="toolbar-left">\r\n\t\t\t<span\r\n\t\t\t\tclass="status-dot"\r\n\t\t\t\t[class.dirty]="isDirty"\r\n\t\t\t\t[title]="isDirty ? \'JSON Alterato\' : \'JSON Originale\'"\r\n\t\t\t></span>\r\n\t\t\t<span class="editor-title">JSON Editor</span>\r\n\t\t</div>\r\n\t\t<button\r\n\t\t\tclass="expand-btn"\r\n\t\t\t[title]="isExpanded ? \'Collapse\' : \'Expand\'"\r\n\t\t\t(click)="toggleExpand()"\r\n\t\t>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="!isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path>\r\n\t\t\t</svg>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M10 14l-7 7"></path>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\t</div>\r\n\t<div class="editor-main-area">\r\n\t\t<div class="editor-line-numbers-container">\r\n\t\t\t<pre class="editor-line-numbers" #lineNumbers>{{ lineNumbersHtml }}</pre>\r\n\t\t</div>\r\n\t\t<div class="json-editor-container">\r\n\t\t\t<pre\r\n\t\t\t\tclass="editor-backdrop"\r\n\t\t\t\t#backdrop\r\n\t\t\t\taria-hidden="true"\r\n\t\t\t><code [innerHTML]="highlightedHtml"></code></pre>\r\n\t\t\t<textarea\r\n\t\t\t\tclass="editor-textarea"\r\n\t\t\t\t#textarea\r\n\t\t\t\t[value]="jsonString"\r\n\t\t\t\t(input)="onTextareaChange($event)"\r\n\t\t\t\t(scroll)="onScroll($event)"\r\n\t\t\t\t(keydown)="handleKeyDown($event)"\r\n\t\t\t\tspellcheck="false"\r\n\t\t\t>\r\n\t\t\t</textarea>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:["asor-json-editor{display:flex;flex-direction:column;flex:1;width:100%;min-height:200px}.json-editor-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#0009;z-index:99998;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.json-editor-wrapper{position:relative;border:1px solid #3c3c3c;border-radius:4px;background-color:#1e1e1e;flex:1;display:flex;flex-direction:column}.json-editor-wrapper.expanded{position:fixed;top:5vh;left:5vw;width:90vw;height:90vh;z-index:99999;box-shadow:0 10px 40px #00000080;border:1px solid #555}.json-editor-wrapper:focus-within{border-color:#007acc}.json-editor-wrapper .editor-toolbar{display:flex;justify-content:flex-end;align-items:center;background-color:#2d2d2d;border-bottom:1px solid #3c3c3c;padding:2px 6px;min-height:22px}.json-editor-wrapper .toolbar-left{display:flex;align-items:center;margin-right:auto;padding-left:6px;gap:6px}.json-editor-wrapper .status-dot{width:8px;height:8px;border-radius:50%;background-color:#5ea33a;display:inline-block;transition:background-color .2s ease}.json-editor-wrapper .status-dot.dirty{background-color:#d19a66;box-shadow:0 0 4px #d19a6666}.json-editor-wrapper .editor-title{color:#ccc;font-family:inherit;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.json-editor-wrapper .expand-btn{background:transparent;border:none;color:#ccc;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;border-radius:3px}.json-editor-wrapper .expand-btn:hover{background-color:#444;color:#fff}.json-editor-wrapper .editor-main-area{flex:1;display:flex;flex-direction:row;overflow:hidden}.json-editor-wrapper .editor-line-numbers-container{position:relative;width:48px;border-right:1px solid #3c3c3c;background-color:#1e1e1e;overflow:hidden;flex-shrink:0}.json-editor-wrapper .editor-line-numbers{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px 8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;color:#858585;text-align:right;box-sizing:border-box;overflow:hidden;-webkit-user-select:none;user-select:none}.json-editor-wrapper .json-editor-container{position:relative;flex:1;overflow:hidden}.json-editor-wrapper .editor-backdrop,.json-editor-wrapper .editor-textarea{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4;border:none;box-sizing:border-box;overflow:auto}.json-editor-wrapper .editor-backdrop{z-index:1;pointer-events:none;color:#d4d4d4;-ms-overflow-style:none;scrollbar-width:none}.json-editor-wrapper .editor-backdrop::-webkit-scrollbar{display:none}.json-editor-wrapper .editor-textarea{z-index:2;background-color:transparent;color:transparent;caret-color:#d4d4d4;resize:none;outline:none}.json-editor-wrapper .editor-textarea::selection{background-color:#264f7880;color:transparent}.json-editor-wrapper .editor-textarea::-webkit-scrollbar{width:10px;height:10px}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-track{background:#1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.json-editor-wrapper .json-key{color:#9cdcfe}.json-editor-wrapper .json-value-string{color:#ce9178}.json-editor-wrapper .json-value-number{color:#b5cea8}.json-editor-wrapper .json-value-boolean,.json-editor-wrapper .json-value-null{color:#569cd6}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonEditorComponent,decorators:[{type:p,args:[{selector:"asor-json-editor",standalone:!0,imports:[w],encapsulation:d.None,template:'<div class="json-editor-backdrop" *ngIf="isExpanded" (click)="toggleExpand()"></div>\r\n<div class="json-editor-wrapper" [class.expanded]="isExpanded">\r\n\t<div class="editor-toolbar">\r\n\t\t<div class="toolbar-left">\r\n\t\t\t<span\r\n\t\t\t\tclass="status-dot"\r\n\t\t\t\t[class.dirty]="isDirty"\r\n\t\t\t\t[title]="isDirty ? \'JSON Alterato\' : \'JSON Originale\'"\r\n\t\t\t></span>\r\n\t\t\t<span class="editor-title">JSON Editor</span>\r\n\t\t</div>\r\n\t\t<button\r\n\t\t\tclass="expand-btn"\r\n\t\t\t[title]="isExpanded ? \'Collapse\' : \'Expand\'"\r\n\t\t\t(click)="toggleExpand()"\r\n\t\t>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="!isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path>\r\n\t\t\t</svg>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M10 14l-7 7"></path>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\t</div>\r\n\t<div class="editor-main-area">\r\n\t\t<div class="editor-line-numbers-container">\r\n\t\t\t<pre class="editor-line-numbers" #lineNumbers>{{ lineNumbersHtml }}</pre>\r\n\t\t</div>\r\n\t\t<div class="json-editor-container">\r\n\t\t\t<pre\r\n\t\t\t\tclass="editor-backdrop"\r\n\t\t\t\t#backdrop\r\n\t\t\t\taria-hidden="true"\r\n\t\t\t><code [innerHTML]="highlightedHtml"></code></pre>\r\n\t\t\t<textarea\r\n\t\t\t\tclass="editor-textarea"\r\n\t\t\t\t#textarea\r\n\t\t\t\t[value]="jsonString"\r\n\t\t\t\t(input)="onTextareaChange($event)"\r\n\t\t\t\t(scroll)="onScroll($event)"\r\n\t\t\t\t(keydown)="handleKeyDown($event)"\r\n\t\t\t\tspellcheck="false"\r\n\t\t\t>\r\n\t\t\t</textarea>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:["asor-json-editor{display:flex;flex-direction:column;flex:1;width:100%;min-height:200px}.json-editor-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#0009;z-index:99998;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.json-editor-wrapper{position:relative;border:1px solid #3c3c3c;border-radius:4px;background-color:#1e1e1e;flex:1;display:flex;flex-direction:column}.json-editor-wrapper.expanded{position:fixed;top:5vh;left:5vw;width:90vw;height:90vh;z-index:99999;box-shadow:0 10px 40px #00000080;border:1px solid #555}.json-editor-wrapper:focus-within{border-color:#007acc}.json-editor-wrapper .editor-toolbar{display:flex;justify-content:flex-end;align-items:center;background-color:#2d2d2d;border-bottom:1px solid #3c3c3c;padding:2px 6px;min-height:22px}.json-editor-wrapper .toolbar-left{display:flex;align-items:center;margin-right:auto;padding-left:6px;gap:6px}.json-editor-wrapper .status-dot{width:8px;height:8px;border-radius:50%;background-color:#5ea33a;display:inline-block;transition:background-color .2s ease}.json-editor-wrapper .status-dot.dirty{background-color:#d19a66;box-shadow:0 0 4px #d19a6666}.json-editor-wrapper .editor-title{color:#ccc;font-family:inherit;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.json-editor-wrapper .expand-btn{background:transparent;border:none;color:#ccc;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;border-radius:3px}.json-editor-wrapper .expand-btn:hover{background-color:#444;color:#fff}.json-editor-wrapper .editor-main-area{flex:1;display:flex;flex-direction:row;overflow:hidden}.json-editor-wrapper .editor-line-numbers-container{position:relative;width:48px;border-right:1px solid #3c3c3c;background-color:#1e1e1e;overflow:hidden;flex-shrink:0}.json-editor-wrapper .editor-line-numbers{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px 8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;color:#858585;text-align:right;box-sizing:border-box;overflow:hidden;-webkit-user-select:none;user-select:none}.json-editor-wrapper .json-editor-container{position:relative;flex:1;overflow:hidden}.json-editor-wrapper .editor-backdrop,.json-editor-wrapper .editor-textarea{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4;border:none;box-sizing:border-box;overflow:auto}.json-editor-wrapper .editor-backdrop{z-index:1;pointer-events:none;color:#d4d4d4;-ms-overflow-style:none;scrollbar-width:none}.json-editor-wrapper .editor-backdrop::-webkit-scrollbar{display:none}.json-editor-wrapper .editor-textarea{z-index:2;background-color:transparent;color:transparent;caret-color:#d4d4d4;resize:none;outline:none}.json-editor-wrapper .editor-textarea::selection{background-color:#264f7880;color:transparent}.json-editor-wrapper .editor-textarea::-webkit-scrollbar{width:10px;height:10px}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-track{background:#1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.json-editor-wrapper .json-key{color:#9cdcfe}.json-editor-wrapper .json-value-string{color:#ce9178}.json-editor-wrapper .json-value-number{color:#b5cea8}.json-editor-wrapper .json-value-boolean,.json-editor-wrapper .json-value-null{color:#569cd6}\n"]}]}],propDecorators:{jsonString:[{type:c}],jsonStringChange:[{type:b}],backdropElement:[{type:g,args:["backdrop"]}],textareaElement:[{type:g,args:["textarea"]}],lineNumbersElement:[{type:g,args:["lineNumbers"]}]}});class StateWidgetSpyService extends StateService{stateService;constructor(t){super(),this.stateService=t}initialize(t){this.stateService.initialize(t)}createDataSet(t,e,r){return this.stateService.createDataSet(t,e,r)}readDataSet(t){return this.stateService.readDataSet(t)}updateDataSet(t,e,r){return this.stateService.updateDataSet(t,e,r)}deleteRootDataSet(t){this.stateService.deleteRootDataSet(t)}registry(t,e,r){return this.stateService.registry(t,e,r)}resolveProps(t){return this.stateService.resolveProps(t)}getContainerRoot(){return this.stateService.containerRoot}getRegistryMap(){return this.stateService.registryMap}getConf(){return this.stateService.conf}getInitialized(){return this.stateService.initialized}getIntervalId(){return this.stateService.intervalId}getFisicalStorageTypeByJob(){return!(!this.stateService.conf||!this.stateService.conf.asyncEnabled)}getSecretKey(){return this.stateService.getStateKey()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,deps:[{token:StateService}],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:StateService}]});class StorageTabComponent{widgetSpyService;autoRefresh=!1;autoRefreshInterval;containerRoot=[];registryRows=[];registryGroups=[];registrySearchTerm="";config;isInitialized=!1;fisicalStorageTypeByJob=!1;viewMode="list";targetElement=null;viewData=null;sectionsCollapsed={status:!1,containers:!1,registry:!1};editJsonString="";editError=null;inputKey="";decryptError=null;pendingAction=null;constructor(t){this.widgetSpyService=t}toggleSection(t){this.sectionsCollapsed[t]=!this.sectionsCollapsed[t]}ngOnInit(){this.refreshState()}ngOnDestroy(){this.stopAutoRefresh()}toggleAutoRefresh(){this.autoRefresh?this.startAutoRefresh():this.stopAutoRefresh()}startAutoRefresh(){this.stopAutoRefresh(),this.autoRefreshInterval=setInterval(()=>{"list"===this.viewMode&&this.refreshState()},2e3)}stopAutoRefresh(){this.autoRefreshInterval&&(clearInterval(this.autoRefreshInterval),this.autoRefreshInterval=null)}refreshState(){this.isInitialized=this.widgetSpyService.getInitialized(),this.config=this.widgetSpyService.getConf(),this.containerRoot=this.widgetSpyService.getContainerRoot(),this.fisicalStorageTypeByJob=this.widgetSpyService.getFisicalStorageTypeByJob(),this.parseRegistry(this.widgetSpyService.getRegistryMap())}get filteredRegistryGroups(){if(!this.registrySearchTerm||""===this.registrySearchTerm.trim())return this.registryGroups;const t=this.registrySearchTerm.toLowerCase();return this.registryGroups.map(e=>{if(e.component.toLowerCase().includes(t))return e;const r=e.entries.filter(e=>e.prop.toLowerCase().includes(t)||e.path.toLowerCase().includes(t));return r.length>0?{...e,entries:r}:null}).filter(t=>null!==t)}openView(t){this.targetElement=t,t.encrypt?(this.pendingAction="view",this.viewMode="decrypt",this.inputKey=this.widgetSpyService.getSecretKey()||"",this.decryptError=null):(this.viewData=t.data,this.viewMode="view")}startDelete(t){this.targetElement=t,this.viewMode="delete"}confirmDelete(){this.targetElement&&(this.widgetSpyService.deleteRootDataSet(this.targetElement.name),this.cancelAction(),this.refreshState())}startEdit(t){this.targetElement=t,t.encrypt?(this.pendingAction="edit",this.viewMode="decrypt",this.inputKey=this.widgetSpyService.getSecretKey()||"",this.decryptError=null):(this.viewMode="edit",this.editJsonString=JSON.stringify(t.data,null,4),this.editError=null)}verifyKey(){if(this.targetElement&&this.inputKey)try{const t=A.AES.decrypt(this.targetElement.data,this.inputKey).toString(A.enc.Utf8);if(!t)throw new Error("Malformed key or data");const e=JSON.parse(t);"view"===this.pendingAction?(this.viewMode="view",this.viewData=e):(this.viewMode="edit",this.editJsonString=JSON.stringify(e,null,4),this.editError=null)}catch(t){this.decryptError="Invalid Key or Corrupted Data"}}saveEdit(){if(this.targetElement)try{const t=JSON.parse(this.editJsonString);let e=!1;Object.keys(t).forEach(r=>{this.widgetSpyService.updateDataSet(`${this.targetElement.name}.${r}`,t[r])||(e=!0)}),e?this.editError="Failed to update some fields. Please check the console/logs.":(this.cancelAction(),this.refreshState())}catch(t){this.editError="Invalid JSON: "+t.message}}cancelAction(){this.viewMode="list",this.targetElement=null,this.viewData=null,this.editJsonString="",this.editError=null,this.inputKey="",this.decryptError=null,this.pendingAction=null}parseRegistry(t){this.registryRows=[],this.registryGroups=[];const e=new Map;t.forEach((t,r)=>{const n=r.match(/\[([^\]]+)\]<([^>]+)>;(.+)/);let o;o=n?{component:n[1],prop:n[2],path:n[3]}:{component:"Unknown",prop:r,path:"Unknown"},this.registryRows.push(o),e.has(o.component)||e.set(o.component,[]),e.get(o.component).push(o)});const r=Array.from(e.keys()).sort((t,e)=>t.localeCompare(e));this.registryGroups=r.map(t=>({component:t,entries:e.get(t).sort((t,e)=>t.prop.localeCompare(e.prop))})),this.registryRows.sort((t,e)=>t.component.localeCompare(e.component))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StorageTabComponent,deps:[{token:StateWidgetSpyService}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:StorageTabComponent,isStandalone:!0,selector:"asor-storage-tab",ngImport:t,template:'<div class="state-dashboard">\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card" [class.active]="isInitialized">\r\n\t\t\t\t\t<div class="label">Initialized</div>\r\n\t\t\t\t\t<div class="value">{{ isInitialized ? \'YES\' : \'NO\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Sync Interval</div>\r\n\t\t\t\t\t<div class="value">{{ fisicalStorageTypeByJob ? \'Job\' : \'On Change\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card" *ngIf="config">\r\n\t\t\t\t\t<div class="label">Encryption</div>\r\n\t\t\t\t\t<div class="value">{{ config.encryptionType }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Data Elements</div>\r\n\t\t\t\t\t<div class="value">{{ containerRoot.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Registry Entries</div>\r\n\t\t\t\t\t<div class="value">{{ registryRows.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<div class="auto-refresh-toggle" title="Auto Refresh State (5s)">\r\n\t\t\t\t<input\r\n\t\t\t\t\tid="autoRefresh"\r\n\t\t\t\t\t[(ngModel)]="autoRefresh"\r\n\t\t\t\t\t(change)="toggleAutoRefresh()"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t<label for="autoRefresh">Auto Refresh</label>\r\n\t\t\t</div>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshState(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh State"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Data Elements Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'containers\')">\r\n\t\t\t\t\t<span>Data Containers</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.containers"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.containers">\r\n\t\t\t\t\t<ng-container [ngSwitch]="viewMode">\r\n\t\t\t\t\t\t\x3c!-- LIST MODE --\x3e\r\n\t\t\t\t\t\t<ng-container *ngSwitchCase="\'list\'">\r\n\t\t\t\t\t\t\t<div class="data-grid" *ngIf="containerRoot.length > 0; else noData">\r\n\t\t\t\t\t\t\t\t<div class="data-card" *ngFor="let element of containerRoot">\r\n\t\t\t\t\t\t\t\t\t<div class="card-header">\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-left">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="element-name"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Click to Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.name }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]="element.storeType.toLowerCase()"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.storeType }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startDelete(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="card-body"\r\n\t\t\t\t\t\t\t\t\t\t(click)="openView(element)"\r\n\t\t\t\t\t\t\t\t\t\ttitle="Click to View"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view [data]="element.data"></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="card-footer">\r\n\t\t\t\t\t\t\t\t\t\t<span class="update-time"\r\n\t\t\t\t\t\t\t\t\t\t\t>Updated:\r\n\t\t\t\t\t\t\t\t\t\t\t{{ element.lastUpdate | date: \'mediumTime\' }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div class="flags">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Reads"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg read"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.readCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Writes"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg write"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="17 21 17 13 7 13 7 21"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="7 3 7 8 15 8"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.writeCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.encrypt"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Encrypted"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg lock"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Frozen"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="2" x2="22" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="12" y1="2" x2="12" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="22" y1="2" x2="2" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="12" x2="22" y2="12"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t\tNo data elements found in StateService.\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\x3c!-- VIEW MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'view\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tView Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body data-panel">\r\n\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t[data]="viewData"\r\n\t\t\t\t\t\t\t\t\t[expandDepth]="1"\r\n\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Back</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- EDIT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'edit\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tEdit Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<asor-json-editor\r\n\t\t\t\t\t\t\t\t\t[(jsonString)]="editJsonString"\r\n\t\t\t\t\t\t\t\t></asor-json-editor>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="editError">{{ editError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="saveEdit()">Save Changes</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DECRYPT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'decrypt\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tDecrypt Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="instruction">\r\n\t\t\t\t\t\t\t\t\tThis dataset is encrypted. Please enter the key to unlock it.\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="key-input"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="inputKey"\r\n\t\t\t\t\t\t\t\t\t(keydown.enter)="verifyKey()"\r\n\t\t\t\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\t\t\t\tplaceholder="Enter Decryption Key"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="decryptError">{{ decryptError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="verifyKey()">Unlock</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DELETE MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'delete\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>Delete Dataset</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="confirmation-text">\r\n\t\t\t\t\t\t\t\t\tAre you sure you want to delete\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span\r\n\t\t\t\t\t\t\t\t\t>?\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class="warning-text">This action cannot be undone.</p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-delete-confirm" (click)="confirmDelete()">\r\n\t\t\t\t\t\t\t\t\tDelete\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Registry Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'registry\')">\r\n\t\t\t\t\t<span>Component Registry</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.registry"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.registry">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="registrySearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter by component, prop or path..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="registrySearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="registrySearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="registry-table-container">\r\n\t\t\t\t\t\t<ng-container *ngIf="filteredRegistryGroups.length > 0; else emptyRegistry">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass="registry-group"\r\n\t\t\t\t\t\t\t\t*ngFor="let group of filteredRegistryGroups"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.component }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} prop{{\r\n\t\t\t\t\t\t\t\t\t\t\tgroup.entries.length > 1 ? \'s\' : \'\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item" *ngFor="let row of group.entries">\r\n\t\t\t\t\t\t\t\t\t\t<span class="prop-badge">{{ row.prop }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text">{{ row.path }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<ng-template #emptyRegistry>\r\n\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\tregistrySearchTerm\r\n\t\t\t\t\t\t\t\t\t\t? \'No components match the filter.\'\r\n\t\t\t\t\t\t\t\t\t\t: \'No registered components.\'\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card.active .value{color:#4caf50}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-title.mt-4{margin-top:20px}.state-dashboard .dashboard-content .data-grid{overflow-y:auto;flex:1;padding:5px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}.state-dashboard .dashboard-content .data-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;height:max-content;margin:5px}.state-dashboard .dashboard-content .data-card:hover{border-color:#007acc}.state-dashboard .dashboard-content .data-card .card-header{background-color:#252526;padding:8px 12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333}.state-dashboard .dashboard-content .data-card .card-header .element-name{font-weight:600;color:#dcdcaa}.state-dashboard .dashboard-content .data-card .card-header .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}.state-dashboard .dashboard-content .data-card .card-header .store-badge.session{background-color:#0e639c33;color:#4fc1ff}.state-dashboard .dashboard-content .data-card .card-header .store-badge.local{background-color:#60ac3933;color:#b5cea8}.state-dashboard .dashboard-content .data-card .card-body{padding:10px;max-height:200px;overflow-y:auto;font-family:monospace;font-size:12px}.state-dashboard .dashboard-content .data-card .card-footer{padding:6px 12px;background-color:#252526;font-size:11px;color:#666;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #333}.state-dashboard .dashboard-content .data-card .card-footer .flags{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-size:13px;flex:1}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item{display:flex;align-items:flex-start;padding:8px 12px 8px 36px;border-bottom:1px solid #333;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .prop-badge{background-color:#9cdcfe26;color:#9cdcfe;padding:2px 6px;border-radius:4px;font-family:monospace;margin-right:8px;white-space:nowrap;font-weight:600}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .path-text{color:#ce9178;font-family:monospace;word-break:break-all;margin-top:2px}.state-dashboard .dashboard-content .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn:active{background-color:#444;transform:scale(.95)}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-toolbar .auto-refresh-toggle{display:flex;align-items:center;gap:6px;background:#ffffff0d;border:1px solid #444;border-radius:15px;padding:2px 10px;height:30px;margin-right:4px;transition:all .2s}.state-dashboard .header-toolbar .auto-refresh-toggle:hover{background-color:#ffffff1a;border-color:#666}.state-dashboard .header-toolbar .auto-refresh-toggle input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:#007acc;margin:0}.state-dashboard .header-toolbar .auto-refresh-toggle label{font-size:11px;color:#888;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked){border-color:#007acc;background-color:#007acc1a}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked) label{color:#007acc;font-weight:600}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;border-radius:6px;background-color:#1e1e1e;overflow:hidden}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .section-title{display:flex;justify-content:space-between;align-items:center;margin-top:0;margin-bottom:2px}.state-dashboard .section-title .collapse-icon{display:none}.state-dashboard .section-body{padding:5px;flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;opacity:1}.state-dashboard .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .section-title{cursor:pointer;-webkit-user-select:none;user-select:none;padding:8px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .section-title:hover{background-color:#2a2a2a}.state-dashboard .section-title .collapse-icon{display:inline-block;font-size:14px;transition:transform .25s ease}.state-dashboard .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}}.state-dashboard .card-header .header-left{display:flex;align-items:center;gap:8px}.state-dashboard .card-header .header-left .element-name{cursor:pointer}.state-dashboard .card-header .header-left .element-name:hover{text-decoration:underline;color:#4fc1ff}.state-dashboard .card-header .header-actions{display:flex;gap:4px}.state-dashboard .card-header .header-actions .action-btn{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .card-header .header-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .card-header .header-actions .action-btn.delete:hover{background-color:#f4877133}.state-dashboard .card-body{cursor:pointer;transition:background-color .2s}.state-dashboard .card-body:hover{background-color:#252526}.icon-svg{vertical-align:middle}.icon-svg.read{color:#4ec9b0}.icon-svg.write{color:#ce9178}.icon-svg.lock{color:#dcdcaa}.icon-svg.freeze{color:#569cd6}.inline-view{display:flex;flex-direction:column;flex:1;min-height:0;padding:0 16px 16px;background-color:transparent;color:#ccc}.inline-view.centered{align-items:center;justify-content:center;text-align:center}.inline-view .view-header{margin-bottom:16px}.inline-view .view-header h3{margin:0;font-size:1.1rem;color:#d4d4d4}.inline-view .view-header h3 .highlight{color:#4ec9b0;font-family:Consolas,Monaco,monospace}.inline-view .view-body{flex:1;width:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden;margin-bottom:10px}.inline-view .view-body.data-panel{overflow:auto;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.inline-view .view-body .json-editor{flex:1;width:100%;background-color:#1e1e1e;color:#d4d4d4;border:1px solid #3c3c3c;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:13px;resize:none;outline:none}.inline-view .view-body .json-editor:focus{border-color:#007acc}.inline-view .view-body .instruction{margin-bottom:12px;color:#ccc}.inline-view .view-body .key-input{width:100%;max-width:300px;margin:0 auto;padding:8px 12px;background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;font-size:14px}.inline-view .view-body .key-input:focus{border-color:#007acc;outline:none}.inline-view .view-body .confirmation-text{font-size:1.1rem;margin-bottom:8px}.inline-view .view-body .confirmation-text .highlight{color:#ce9178;font-weight:700}.inline-view .view-body .warning-text{color:#d16969;font-size:.9rem}.inline-view .view-body .error-msg{color:#f14c4c;margin-top:8px;font-size:.9em}.inline-view .view-footer{display:flex;justify-content:flex-end;gap:12px}.centered .inline-view .view-footer{justify-content:center}.inline-view .view-footer button{padding:6px 16px;border-radius:4px;border:none;cursor:pointer;font-size:13px;transition:background-color .2s}.inline-view .view-footer button.btn-cancel{background-color:#3c3c3c;color:#ccc}.inline-view .view-footer button.btn-cancel:hover{background-color:#4c4c4c}.inline-view .view-footer button.btn-save{background-color:#007acc;color:#fff}.inline-view .view-footer button.btn-save:hover{background-color:#0062a3}.inline-view .view-footer button.btn-delete-confirm{background-color:#ce9178;color:#1e1e1e;font-weight:500}.inline-view .view-footer button.btn-delete-confirm:hover{background-color:#b87b66}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:m.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:m.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonEditorComponent,selector:"asor-json-editor",inputs:["jsonString"],outputs:["jsonStringChange"]},{kind:"pipe",type:m.DatePipe,name:"date"}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StorageTabComponent,decorators:[{type:p,args:[{selector:"asor-storage-tab",standalone:!0,imports:[w,JsonViewComponent,K,JsonEditorComponent],encapsulation:d.ShadowDom,template:'<div class="state-dashboard">\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card" [class.active]="isInitialized">\r\n\t\t\t\t\t<div class="label">Initialized</div>\r\n\t\t\t\t\t<div class="value">{{ isInitialized ? \'YES\' : \'NO\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Sync Interval</div>\r\n\t\t\t\t\t<div class="value">{{ fisicalStorageTypeByJob ? \'Job\' : \'On Change\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card" *ngIf="config">\r\n\t\t\t\t\t<div class="label">Encryption</div>\r\n\t\t\t\t\t<div class="value">{{ config.encryptionType }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Data Elements</div>\r\n\t\t\t\t\t<div class="value">{{ containerRoot.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Registry Entries</div>\r\n\t\t\t\t\t<div class="value">{{ registryRows.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<div class="auto-refresh-toggle" title="Auto Refresh State (5s)">\r\n\t\t\t\t<input\r\n\t\t\t\t\tid="autoRefresh"\r\n\t\t\t\t\t[(ngModel)]="autoRefresh"\r\n\t\t\t\t\t(change)="toggleAutoRefresh()"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t<label for="autoRefresh">Auto Refresh</label>\r\n\t\t\t</div>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshState(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh State"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Data Elements Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'containers\')">\r\n\t\t\t\t\t<span>Data Containers</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.containers"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.containers">\r\n\t\t\t\t\t<ng-container [ngSwitch]="viewMode">\r\n\t\t\t\t\t\t\x3c!-- LIST MODE --\x3e\r\n\t\t\t\t\t\t<ng-container *ngSwitchCase="\'list\'">\r\n\t\t\t\t\t\t\t<div class="data-grid" *ngIf="containerRoot.length > 0; else noData">\r\n\t\t\t\t\t\t\t\t<div class="data-card" *ngFor="let element of containerRoot">\r\n\t\t\t\t\t\t\t\t\t<div class="card-header">\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-left">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="element-name"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Click to Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.name }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]="element.storeType.toLowerCase()"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.storeType }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startDelete(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="card-body"\r\n\t\t\t\t\t\t\t\t\t\t(click)="openView(element)"\r\n\t\t\t\t\t\t\t\t\t\ttitle="Click to View"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view [data]="element.data"></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="card-footer">\r\n\t\t\t\t\t\t\t\t\t\t<span class="update-time"\r\n\t\t\t\t\t\t\t\t\t\t\t>Updated:\r\n\t\t\t\t\t\t\t\t\t\t\t{{ element.lastUpdate | date: \'mediumTime\' }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div class="flags">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Reads"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg read"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.readCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Writes"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg write"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="17 21 17 13 7 13 7 21"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="7 3 7 8 15 8"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.writeCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.encrypt"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Encrypted"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg lock"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Frozen"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="2" x2="22" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="12" y1="2" x2="12" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="22" y1="2" x2="2" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="12" x2="22" y2="12"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t\tNo data elements found in StateService.\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\x3c!-- VIEW MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'view\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tView Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body data-panel">\r\n\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t[data]="viewData"\r\n\t\t\t\t\t\t\t\t\t[expandDepth]="1"\r\n\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Back</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- EDIT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'edit\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tEdit Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<asor-json-editor\r\n\t\t\t\t\t\t\t\t\t[(jsonString)]="editJsonString"\r\n\t\t\t\t\t\t\t\t></asor-json-editor>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="editError">{{ editError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="saveEdit()">Save Changes</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DECRYPT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'decrypt\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tDecrypt Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="instruction">\r\n\t\t\t\t\t\t\t\t\tThis dataset is encrypted. Please enter the key to unlock it.\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="key-input"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="inputKey"\r\n\t\t\t\t\t\t\t\t\t(keydown.enter)="verifyKey()"\r\n\t\t\t\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\t\t\t\tplaceholder="Enter Decryption Key"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="decryptError">{{ decryptError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="verifyKey()">Unlock</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DELETE MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'delete\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>Delete Dataset</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="confirmation-text">\r\n\t\t\t\t\t\t\t\t\tAre you sure you want to delete\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span\r\n\t\t\t\t\t\t\t\t\t>?\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class="warning-text">This action cannot be undone.</p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-delete-confirm" (click)="confirmDelete()">\r\n\t\t\t\t\t\t\t\t\tDelete\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Registry Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'registry\')">\r\n\t\t\t\t\t<span>Component Registry</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.registry"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.registry">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="registrySearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter by component, prop or path..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="registrySearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="registrySearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="registry-table-container">\r\n\t\t\t\t\t\t<ng-container *ngIf="filteredRegistryGroups.length > 0; else emptyRegistry">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass="registry-group"\r\n\t\t\t\t\t\t\t\t*ngFor="let group of filteredRegistryGroups"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.component }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} prop{{\r\n\t\t\t\t\t\t\t\t\t\t\tgroup.entries.length > 1 ? \'s\' : \'\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item" *ngFor="let row of group.entries">\r\n\t\t\t\t\t\t\t\t\t\t<span class="prop-badge">{{ row.prop }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text">{{ row.path }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<ng-template #emptyRegistry>\r\n\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\tregistrySearchTerm\r\n\t\t\t\t\t\t\t\t\t\t? \'No components match the filter.\'\r\n\t\t\t\t\t\t\t\t\t\t: \'No registered components.\'\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card.active .value{color:#4caf50}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-title.mt-4{margin-top:20px}.state-dashboard .dashboard-content .data-grid{overflow-y:auto;flex:1;padding:5px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}.state-dashboard .dashboard-content .data-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;height:max-content;margin:5px}.state-dashboard .dashboard-content .data-card:hover{border-color:#007acc}.state-dashboard .dashboard-content .data-card .card-header{background-color:#252526;padding:8px 12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333}.state-dashboard .dashboard-content .data-card .card-header .element-name{font-weight:600;color:#dcdcaa}.state-dashboard .dashboard-content .data-card .card-header .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}.state-dashboard .dashboard-content .data-card .card-header .store-badge.session{background-color:#0e639c33;color:#4fc1ff}.state-dashboard .dashboard-content .data-card .card-header .store-badge.local{background-color:#60ac3933;color:#b5cea8}.state-dashboard .dashboard-content .data-card .card-body{padding:10px;max-height:200px;overflow-y:auto;font-family:monospace;font-size:12px}.state-dashboard .dashboard-content .data-card .card-footer{padding:6px 12px;background-color:#252526;font-size:11px;color:#666;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #333}.state-dashboard .dashboard-content .data-card .card-footer .flags{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-size:13px;flex:1}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item{display:flex;align-items:flex-start;padding:8px 12px 8px 36px;border-bottom:1px solid #333;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .prop-badge{background-color:#9cdcfe26;color:#9cdcfe;padding:2px 6px;border-radius:4px;font-family:monospace;margin-right:8px;white-space:nowrap;font-weight:600}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .path-text{color:#ce9178;font-family:monospace;word-break:break-all;margin-top:2px}.state-dashboard .dashboard-content .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn:active{background-color:#444;transform:scale(.95)}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-toolbar .auto-refresh-toggle{display:flex;align-items:center;gap:6px;background:#ffffff0d;border:1px solid #444;border-radius:15px;padding:2px 10px;height:30px;margin-right:4px;transition:all .2s}.state-dashboard .header-toolbar .auto-refresh-toggle:hover{background-color:#ffffff1a;border-color:#666}.state-dashboard .header-toolbar .auto-refresh-toggle input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:#007acc;margin:0}.state-dashboard .header-toolbar .auto-refresh-toggle label{font-size:11px;color:#888;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked){border-color:#007acc;background-color:#007acc1a}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked) label{color:#007acc;font-weight:600}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;border-radius:6px;background-color:#1e1e1e;overflow:hidden}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .section-title{display:flex;justify-content:space-between;align-items:center;margin-top:0;margin-bottom:2px}.state-dashboard .section-title .collapse-icon{display:none}.state-dashboard .section-body{padding:5px;flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;opacity:1}.state-dashboard .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .section-title{cursor:pointer;-webkit-user-select:none;user-select:none;padding:8px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .section-title:hover{background-color:#2a2a2a}.state-dashboard .section-title .collapse-icon{display:inline-block;font-size:14px;transition:transform .25s ease}.state-dashboard .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}}.state-dashboard .card-header .header-left{display:flex;align-items:center;gap:8px}.state-dashboard .card-header .header-left .element-name{cursor:pointer}.state-dashboard .card-header .header-left .element-name:hover{text-decoration:underline;color:#4fc1ff}.state-dashboard .card-header .header-actions{display:flex;gap:4px}.state-dashboard .card-header .header-actions .action-btn{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .card-header .header-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .card-header .header-actions .action-btn.delete:hover{background-color:#f4877133}.state-dashboard .card-body{cursor:pointer;transition:background-color .2s}.state-dashboard .card-body:hover{background-color:#252526}.icon-svg{vertical-align:middle}.icon-svg.read{color:#4ec9b0}.icon-svg.write{color:#ce9178}.icon-svg.lock{color:#dcdcaa}.icon-svg.freeze{color:#569cd6}.inline-view{display:flex;flex-direction:column;flex:1;min-height:0;padding:0 16px 16px;background-color:transparent;color:#ccc}.inline-view.centered{align-items:center;justify-content:center;text-align:center}.inline-view .view-header{margin-bottom:16px}.inline-view .view-header h3{margin:0;font-size:1.1rem;color:#d4d4d4}.inline-view .view-header h3 .highlight{color:#4ec9b0;font-family:Consolas,Monaco,monospace}.inline-view .view-body{flex:1;width:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden;margin-bottom:10px}.inline-view .view-body.data-panel{overflow:auto;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.inline-view .view-body .json-editor{flex:1;width:100%;background-color:#1e1e1e;color:#d4d4d4;border:1px solid #3c3c3c;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:13px;resize:none;outline:none}.inline-view .view-body .json-editor:focus{border-color:#007acc}.inline-view .view-body .instruction{margin-bottom:12px;color:#ccc}.inline-view .view-body .key-input{width:100%;max-width:300px;margin:0 auto;padding:8px 12px;background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;font-size:14px}.inline-view .view-body .key-input:focus{border-color:#007acc;outline:none}.inline-view .view-body .confirmation-text{font-size:1.1rem;margin-bottom:8px}.inline-view .view-body .confirmation-text .highlight{color:#ce9178;font-weight:700}.inline-view .view-body .warning-text{color:#d16969;font-size:.9rem}.inline-view .view-body .error-msg{color:#f14c4c;margin-top:8px;font-size:.9em}.inline-view .view-footer{display:flex;justify-content:flex-end;gap:12px}.centered .inline-view .view-footer{justify-content:center}.inline-view .view-footer button{padding:6px 16px;border-radius:4px;border:none;cursor:pointer;font-size:13px;transition:background-color .2s}.inline-view .view-footer button.btn-cancel{background-color:#3c3c3c;color:#ccc}.inline-view .view-footer button.btn-cancel:hover{background-color:#4c4c4c}.inline-view .view-footer button.btn-save{background-color:#007acc;color:#fff}.inline-view .view-footer button.btn-save:hover{background-color:#0062a3}.inline-view .view-footer button.btn-delete-confirm{background-color:#ce9178;color:#1e1e1e;font-weight:500}.inline-view .view-footer button.btn-delete-confirm:hover{background-color:#b87b66}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}\n"]}]}],ctorParameters:()=>[{type:StateWidgetSpyService}]});class WidgetCacheUtility extends CacheUtility{cacheUtility;constructor(t){super(),this.cacheUtility=t}getEntries(){const t=[];return this.cacheUtility.getCacheApp().forEach((e,r)=>{const n=this.cachePathUtility.config(r);if(n){let o=!1,a=null,s=r,i=0;try{const t=JSON.stringify(e);t&&(i=new Blob([t]).size)}catch(t){}if(r.includes("#[")){o=!0;const t=r.split("#[")[1].replace("]","");try{a=JSON.parse(atob(t))}catch(t){}}t.push({key:s,rulePath:n.pathValue,persistenceType:n.persistenceType,creationDate:new Date,hasPayload:o,payloadData:a,dataSize:i,encriptType:n.encriptType})}}),t.sort((t,e)=>t.key.localeCompare(e.key))}getEntryContent(t,e){const r=this.cachePathUtility.config(t);let n=this.cacheUtility.getCacheApp().get(t);if(r&&n&&"string"==typeof n&&r.encriptType!==W.NONE){if(!e)return{error:"KeyRequired"};try{const t=A.AES.decrypt(n,e).toString(A.enc.Utf8);if(!t)throw new Error("Decryption Failed");n=JSON.parse(t)}catch(t){return{error:"Invalid decryption key or corrupt data."}}}return n&&void 0!==n.body?n.body:n}getAutoCacheKey(t){const e=this.cachePathUtility.config(t);return e&&e.encriptType===W.AUTO?this.getCacheKey(e):null}cleanUp(){return super.cleanUp()}getRules(){return this.cachePathUtility.getPaths()}deleteEntry(t){this.cacheUtility.getCacheApp().delete(t),this.persistStorage()}clearAllCache(){this.cacheUtility.getCacheApp().clear(),sessionStorage.removeItem(this.cache_name),localStorage.removeItem(this.cache_name)}persistStorage(){let t={},e={};this.cacheUtility.getCacheApp().forEach((r,n)=>{const o=this.cachePathUtility.config(n);o&&(o.persistenceType===F.SESSION?t[n]=r:o.persistenceType===F.LOCAL&&(e[n]=r))}),Object.keys(t).length>0?sessionStorage.setItem(this.cache_name,JSON.stringify(t)):sessionStorage.removeItem(this.cache_name),Object.keys(e).length>0?localStorage.setItem(this.cache_name,JSON.stringify(e)):localStorage.removeItem(this.cache_name)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,deps:[{token:CacheUtility}],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:CacheUtility}]});class CacheTabComponent{cacheUtility;cacheEntries=[];activeRules=[];ruleGroups=[];cacheGroups=[];rulesSearchTerm="";entriesSearchTerm="";stats={volatile:0,session:0,local:0,total:0};sizes={volatile:0,session:0,local:0,total:0};CacheType=F;sectionsCollapsed={status:!1,rules:!1,entries:!1};expandedPayloadId=null;expandedContentId=null;currentContent=null;customKeys={};decryptErrors={};isCleanupModalOpen=!1;showCleanUpBanner=!1;cleanedEntries=[];cleanedTotalSize=0;isClearAllModalOpen=!1;showClearAllBanner=!1;constructor(t){this.cacheUtility=t}ngOnInit(){this.refreshCache(),this.activeRules=this.cacheUtility.getRules(),this.groupRules()}groupRules(){const t=new Map;this.activeRules.forEach(e=>{const r=e.persistenceType.toString();t.has(r)||t.set(r,[]),t.get(r).push(e)});const e=Array.from(t.keys()).sort((t,e)=>t.localeCompare(e));this.ruleGroups=e.map(e=>({persistenceType:e,rules:t.get(e).sort((t,e)=>t.pathValue.localeCompare(e.pathValue))}))}refreshCache(){this.cacheEntries=this.cacheUtility.getEntries(),this.calculateStats(),this.groupEntries()}groupEntries(){const t=new Map;this.cacheEntries.forEach(e=>{t.has(e.rulePath)||t.set(e.rulePath,[]),t.get(e.rulePath).push(e)});const e=Array.from(t.keys()).sort((t,e)=>t.localeCompare(e));this.cacheGroups=e.map(e=>({rulePath:e,entries:t.get(e).sort((t,e)=>t.key.localeCompare(e.key))}))}deleteEntry(t){this.cacheUtility.deleteEntry(t),this.refreshCache()}clearAll(){this.isClearAllModalOpen=!0}executeClearAll(){this.cacheUtility.clearAllCache(),this.refreshCache(),this.isClearAllModalOpen=!1,this.showClearAllBanner=!0,setTimeout(()=>{this.showClearAllBanner=!1},3e3)}cleanUpCache(){const t=this.cacheUtility.cleanUp();t&&t.size>0?(this.cleanedEntries=[],this.cleanedTotalSize=0,t.forEach((t,e)=>{const r=new Blob(["string"==typeof t?t:JSON.stringify(t)]).size;this.cleanedTotalSize+=r;const n=this.cacheUtility.cachePathUtility.config(e);this.cleanedEntries.push({key:e,dataSize:r,persistenceType:n?n.persistenceType:F.VOLATILE,encriptType:n?n.encriptType:W.NONE})}),this.isCleanupModalOpen=!0):(this.showCleanUpBanner=!0,setTimeout(()=>{this.showCleanUpBanner=!1},3e3)),this.refreshCache()}toggleSection(t){this.sectionsCollapsed[t]=!this.sectionsCollapsed[t]}togglePayload(t){this.expandedPayloadId=this.expandedPayloadId===t?null:t}openContentModal(t,e){this.expandedContentId=t,this.loadContent(t,e)}closeContentModal(){this.expandedContentId&&this.customKeys[this.expandedContentId]&&(this.customKeys[this.expandedContentId]=""),this.expandedContentId=null,this.currentContent=null,this.decryptErrors={}}loadContent(t,e){if((e===W.CUSTOM||e===W.AUTO)&&!this.customKeys[t]){if(this.currentContent={_requiresKey:!0,encriptType:e},!this.customKeys[t]){const e=this.cacheUtility.getAutoCacheKey(t);e&&(this.customKeys[t]=e)}return}const r=this.cacheUtility.getEntryContent(t,this.customKeys[t]);r&&r.error?(this.decryptErrors[t]=r.error,this.currentContent={_requiresKey:!0}):(this.decryptErrors[t]="",this.currentContent=r)}decryptContent(t){this.loadContent(t,this.currentContent?.encriptType||W.CUSTOM)}get filteredRuleGroups(){if(!this.rulesSearchTerm||""===this.rulesSearchTerm.trim())return this.ruleGroups;const t=this.rulesSearchTerm.toLowerCase();return this.ruleGroups.map(e=>{if(e.persistenceType.toLowerCase().includes(t))return e;const r=e.rules.filter(e=>e.pathValue.toLowerCase().includes(t)||e.persistenceType.toString().toLowerCase().includes(t));return r.length>0?{...e,rules:r}:null}).filter(t=>null!==t)}get filteredCacheGroups(){if(!this.entriesSearchTerm||""===this.entriesSearchTerm.trim())return this.cacheGroups;const t=this.entriesSearchTerm.toLowerCase();return this.cacheGroups.map(e=>{if(e.rulePath.toLowerCase().includes(t))return e;const r=e.entries.filter(e=>e.key.toLowerCase().includes(t)||e.persistenceType.toString().toLowerCase().includes(t));return r.length>0?{...e,entries:r}:null}).filter(t=>null!==t)}formatSize(t){if(!t||0===t)return"0 B";const e=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,e)).toFixed(2))+" "+["B","KB","MB","GB"][e]}getSizeForType(t){const e=t.toLowerCase();return this.formatSize(this.sizes[e]||0)}getGroupSize(t){const e=t.entries.reduce((t,e)=>t+(e.dataSize||0),0);return this.formatSize(e)}calculateStats(){this.stats={volatile:0,session:0,local:0,total:this.cacheEntries.length},this.sizes={volatile:0,session:0,local:0,total:0},this.cacheEntries.forEach(t=>{const e=t.dataSize||0;this.sizes.total+=e,t.persistenceType===F.VOLATILE?(this.stats.volatile++,this.sizes.volatile+=e):t.persistenceType===F.SESSION?(this.stats.session++,this.sizes.session+=e):t.persistenceType===F.LOCAL&&(this.stats.local++,this.sizes.local+=e)})}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheTabComponent,deps:[{token:WidgetCacheUtility}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:CacheTabComponent,isStandalone:!0,selector:"asor-cache-tab",ngImport:t,template:'<div class="state-dashboard">\r\n\t\x3c!-- Cleanup Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showCleanUpBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<circle cx="12" cy="12" r="10"></circle>\r\n\t\t\t<line x1="12" y1="16" x2="12" y2="12"></line>\r\n\t\t\t<line x1="12" y1="8" x2="12.01" y2="8"></line>\r\n\t\t</svg>\r\n\t\t<span>No obsolete cache entries found. Everything is clean!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Clear All Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showClearAllBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<polyline points="20 6 9 17 4 12"></polyline>\r\n\t\t</svg>\r\n\t\t<span>All cache entries have been successfully cleared!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Entries</div>\r\n\t\t\t\t\t<div class="value">{{ stats.total }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Cache Size</div>\r\n\t\t\t\t\t<div class="value">{{ formatSize(sizes.total) }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Volatile Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.volatile > 0">\r\n\t\t\t\t\t\t{{ stats.volatile }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.volatile) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Session Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.session > 0">{{ stats.session }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.session) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Local Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.local > 0">{{ stats.local }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.local) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<button class="circle-c-btn" (click)="cleanUpCache()" title="Clean Up Obsolete Cache">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="16"\r\n\t\t\t\t\theight="16"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d="m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"></path>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.35 2.22 1.45 3.02 1.45 2.26 0 4.14-1.84 4.14-4.11 0-1.66-1.35-3-3.02-3.02z"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn clear-all"\r\n\t\t\t\t(click)="clearAll(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Clear All Cache"\r\n\t\t\t>\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="14"\r\n\t\t\t\t\theight="14"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshCache(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh Cache"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Active Rules Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'rules\')">\r\n\t\t\t\t\t<span>Active Cache Rules</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.rules">▾</span>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.rules">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter rules by path or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="rulesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredRuleGroups.length > 0; else noRules"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredRuleGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.persistenceType }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.rules.length }} rule<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.rules.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetSizeForType(group.persistenceType)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="rules-list" style="padding: 10px">\r\n\t\t\t\t\t\t\t\t<div class="rule-card" *ngFor="let rule of group.rules">\r\n\t\t\t\t\t\t\t\t\t<div class="rule-header">\r\n\t\t\t\t\t\t\t\t\t\t<span class="rule-path">{{ rule.pathValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\trule.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ rule.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="rule-body">\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Payload Cache:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ rule.reqPayloadCache ? \'Enabled\' : \'Disabled\' }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Encryption:</strong> {{ rule.encriptType }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\tclass="rule-detail"\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="rule.clearOn && rule.clearOn.length > 0"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Clear On:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t<ul class="clear-on-list">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li *ngFor="let c of rule.clearOn">{{ c }}</li>\r\n\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noRules>\r\n\t\t\t\t\t\t<div class="empty-state">No cache rules match the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Cache Entries Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'entries\')">\r\n\t\t\t\t\t<span>Cache Entries</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.entries"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.entries">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter entries by key or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="entriesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredCacheGroups.length > 0; else noData"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredCacheGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.rulePath }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} entry<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.entries.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetGroupSize(group)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass="registry-item-container"\r\n\t\t\t\t\t\t\t\t\t*ngFor="let entry of group.entries"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item">\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\tentry.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text" [title]="entry.key">\r\n\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvertical-align: text-top;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: #dcdcaa;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ entry.key }}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-right: 8px">{{\r\n\t\t\t\t\t\t\t\t\t\t\tformatSize(entry.dataSize || 0)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class="item-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedContentId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\topenContentModal(entry.key, entry.encriptType)\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="View Content"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.hasPayload"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="togglePayload(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Toggle Payload Request"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="22 12 18 12 15 21 9 3 6 12 2 12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="deleteEntry(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete Entry"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="payload-content"\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t[data]="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t\t<span class="empty-payload" *ngIf="!entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t>Unable to parse payload request.</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t<div class="empty-state">No items found in cache matching the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Modal Overlay for Content Details --\x3e\r\n<div class="modal-overlay" *ngIf="expandedContentId" (click)="closeContentModal()">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Content Details</h3>\r\n\t\t\t<span class="path-text" [title]="expandedContentId">{{ expandedContentId }}</span>\r\n\t\t\t<button class="close-btn" (click)="closeContentModal()" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body">\r\n\t\t\t<div class="decrypt-prompt" *ngIf="currentContent?._requiresKey">\r\n\t\t\t\t<div class="decrypt-header">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t\t<span>Encrypted Content</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p class="decrypt-desc">Enter the decryption key to view this response.</p>\r\n\t\t\t\t<div class="decrypt-input-group">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t[(ngModel)]="customKeys[expandedContentId]"\r\n\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\tplaceholder="Enter Secret Key"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="decrypt-btn" (click)="decryptContent(expandedContentId)">\r\n\t\t\t\t\t\tDecrypt\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="error-msg" *ngIf="decryptErrors[expandedContentId]">\r\n\t\t\t\t\t{{ decryptErrors[expandedContentId] }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<asor-json-view\r\n\t\t\t\t*ngIf="currentContent && !currentContent._requiresKey"\r\n\t\t\t\t[data]="currentContent"\r\n\t\t\t></asor-json-view>\r\n\t\t\t<span class="empty-payload" *ngIf="!currentContent && currentContent !== null"\r\n\t\t\t\t>Empty content.</span\r\n\t\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Cleanup Results Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isCleanupModalOpen" (click)="isCleanupModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Cleaned Cache Entries</h3>\r\n\t\t\t<span class="path-text">Total recovered size: {{ formatSize(cleanedTotalSize) }}</span>\r\n\t\t\t<button class="close-btn" (click)="isCleanupModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 0">\r\n\t\t\t<div class="cleanup-table">\r\n\t\t\t\t<div class="cleanup-table-header">\r\n\t\t\t\t\t<span class="col-type">Type</span>\r\n\t\t\t\t\t<span class="col-path">Path</span>\r\n\t\t\t\t\t<span class="col-size" style="text-align: right">Size</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="cleanup-table-body">\r\n\t\t\t\t\t<div class="cleanup-table-row" *ngFor="let entry of cleanedEntries">\r\n\t\t\t\t\t\t<span class="col-type">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="entry.persistenceType"\r\n\t\t\t\t\t\t\t\t[ngClass]="entry.persistenceType.toString().toLowerCase()"\r\n\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-path" [title]="entry.key">\r\n\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t*ngIf="entry.encriptType && entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\tstyle="margin-right: 6px; flex-shrink: 0; color: #dcdcaa"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t>{{ entry.key }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-size">{{ formatSize(entry.dataSize) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Clear All Confirmation Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isClearAllModalOpen" (click)="isClearAllModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()" style="max-width: 400px">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Confirm Cache Clear</h3>\r\n\t\t\t<button class="close-btn" (click)="isClearAllModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 20px">\r\n\t\t\t<p style="color: #ccc; margin: 0 0 20px 0; font-size: 14px; line-height: 1.5">\r\n\t\t\t\tAre you sure you want to completely clear the cache? This action cannot be undone.\r\n\t\t\t</p>\r\n\t\t\t<div style="display: flex; justify-content: flex-end; gap: 10px">\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="isClearAllModalOpen = false"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: transparent;\r\n\t\t\t\t\t\tborder: 1px solid #444;\r\n\t\t\t\t\t\tcolor: #ccc;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="executeClearAll()"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: rgba(244, 135, 113, 0.2);\r\n\t\t\t\t\t\tborder: 1px solid #f48771;\r\n\t\t\t\t\t\tcolor: #f48771;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t\tfont-weight: 600;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px;overflow-y:auto}.state-dashboard::-webkit-scrollbar,.state-dashboard .registry-table-container::-webkit-scrollbar,.state-dashboard .payload-content::-webkit-scrollbar,.state-dashboard .rules-list::-webkit-scrollbar{width:10px;height:10px}.state-dashboard::-webkit-scrollbar-track,.state-dashboard .registry-table-container::-webkit-scrollbar-track,.state-dashboard .payload-content::-webkit-scrollbar-track,.state-dashboard .rules-list::-webkit-scrollbar-track{background:#1e1e1e}.state-dashboard::-webkit-scrollbar-thumb,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb,.state-dashboard .payload-content::-webkit-scrollbar-thumb,.state-dashboard .rules-list::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.state-dashboard::-webkit-scrollbar-thumb:hover,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb:hover,.state-dashboard .payload-content::-webkit-scrollbar-thumb:hover,.state-dashboard .rules-list::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card .value.active{color:#4caf50}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn.clear-all:hover{background-color:#f4877133;color:#f48771}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;overflow:hidden;border-radius:6px}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-body{padding:5px;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;display:flex;flex-direction:column;flex:1;min-height:0}.state-dashboard .dashboard-content .section-body.collapsed{padding:0;max-height:0;opacity:0;overflow:hidden}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .rules-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .rules-list .rule-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;padding:10px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header .rule-path{font-family:monospace;color:#dcdcaa;font-weight:700}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body{font-size:12px;color:#9cdcfe}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail{margin-top:4px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail strong{color:#888}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail .clear-on-list{margin:4px 0 0 16px;padding:0;color:#ce9178;font-family:monospace}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-family:monospace;font-size:13px;flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container{border-bottom:1px solid #333;display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item{padding:8px 12px 8px 36px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .store-badge{margin-right:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn{background:none;border:none;color:#ccc;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.delete:hover{background-color:#f4877133;color:#f48771}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.active{background-color:#2a2a2a;color:#4fc1ff}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .payload-content{border-top:1px solid #333;max-height:300px;overflow-y:auto;padding:10px 12px 10px 36px;background:#1e1e1e;color:#d16969;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt{padding:10px 0}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:13px;margin-bottom:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-desc{font-size:12px;color:#888;margin:0 0 10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:6px 10px;font-size:12px;flex:1;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:6px 12px;font-size:12px;cursor:pointer;transition:background-color .2s}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .error-msg{color:#f48771;font-size:11px;margin-top:4px}.state-dashboard .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}:host .cache-dashboard{padding:20px;color:#d4d4d4}:host .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}:host .store-badge.session{background-color:#0e639c33;color:#4fc1ff}:host .store-badge.local{background-color:#60ac3933;color:#b5cea8}:host .store-badge.volatile{background-color:#d7ba7d33;color:#d7ba7d}.cleanup-table{display:flex;flex-direction:column;max-height:400px}.cleanup-table .cleanup-table-header{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;padding:10px 16px;background-color:#252526;border-bottom:1px solid #333;font-size:12px;font-weight:600;color:#888;position:sticky;top:0}.cleanup-table .cleanup-table-body{overflow-y:auto;display:flex;flex-direction:column}.cleanup-table .cleanup-table-body .cleanup-table-row{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;align-items:center;padding:8px 16px;border-bottom:1px solid #333}.cleanup-table .cleanup-table-body .cleanup-table-row:last-child{border-bottom:none}.cleanup-table .cleanup-table-body .cleanup-table-row:hover{background-color:#2a2a2a}.cleanup-table .cleanup-table-body .cleanup-table-row .col-type{display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-path{color:#ce9178;font-family:monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-size{color:#888;font-size:11px;text-align:right;background:#ffffff0d;padding:2px 6px;border-radius:10px}.modal-overlay{position:absolute;inset:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#1e1e1e;border:1px solid #333;border-radius:8px;width:90%;max-width:800px;max-height:90%;display:flex;flex-direction:column;box-shadow:0 10px 30px #00000080}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;background-color:#252526;border-top-left-radius:8px;border-top-right-radius:8px;gap:12px}.modal-content .modal-header h3{margin:0;font-size:14px;color:#ccc;font-weight:600}.modal-content .modal-header .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-content .modal-header .close-btn{background:none;border:none;color:#888;font-size:20px;cursor:pointer;line-height:1;padding:0 4px}.modal-content .modal-header .close-btn:hover{color:#ccc}.modal-content .modal-body{padding:16px;overflow-y:auto;flex:1}.modal-content .modal-body .decrypt-prompt{padding:10px 0}.modal-content .modal-body .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:14px;margin-bottom:10px}.modal-content .modal-body .decrypt-prompt .decrypt-desc{font-size:13px;color:#888;margin:0 0 12px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:8px 12px;font-size:13px;flex:1;font-family:inherit;outline:none}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.modal-content .modal-body .decrypt-prompt .error-msg{color:#f48771;font-size:12px;margin-top:6px}.info-banner{position:absolute;top:20px;left:50%;transform:translate(-50%);background-color:#252526;border:1px solid #4ec9b0;color:#4ec9b0;padding:8px 16px;border-radius:6px;box-shadow:0 4px 12px #00000080;z-index:1001;font-size:13px;display:flex;align-items:center;gap:8px;animation:slideDown .3s ease-out}@keyframes slideDown{0%{top:-40px;opacity:0}to{top:20px;opacity:1}}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheTabComponent,decorators:[{type:p,args:[{selector:"asor-cache-tab",standalone:!0,imports:[w,K,JsonViewComponent],encapsulation:d.ShadowDom,template:'<div class="state-dashboard">\r\n\t\x3c!-- Cleanup Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showCleanUpBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<circle cx="12" cy="12" r="10"></circle>\r\n\t\t\t<line x1="12" y1="16" x2="12" y2="12"></line>\r\n\t\t\t<line x1="12" y1="8" x2="12.01" y2="8"></line>\r\n\t\t</svg>\r\n\t\t<span>No obsolete cache entries found. Everything is clean!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Clear All Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showClearAllBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<polyline points="20 6 9 17 4 12"></polyline>\r\n\t\t</svg>\r\n\t\t<span>All cache entries have been successfully cleared!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Entries</div>\r\n\t\t\t\t\t<div class="value">{{ stats.total }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Cache Size</div>\r\n\t\t\t\t\t<div class="value">{{ formatSize(sizes.total) }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Volatile Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.volatile > 0">\r\n\t\t\t\t\t\t{{ stats.volatile }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.volatile) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Session Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.session > 0">{{ stats.session }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.session) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Local Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.local > 0">{{ stats.local }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.local) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<button class="circle-c-btn" (click)="cleanUpCache()" title="Clean Up Obsolete Cache">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="16"\r\n\t\t\t\t\theight="16"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d="m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"></path>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.35 2.22 1.45 3.02 1.45 2.26 0 4.14-1.84 4.14-4.11 0-1.66-1.35-3-3.02-3.02z"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn clear-all"\r\n\t\t\t\t(click)="clearAll(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Clear All Cache"\r\n\t\t\t>\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="14"\r\n\t\t\t\t\theight="14"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshCache(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh Cache"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Active Rules Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'rules\')">\r\n\t\t\t\t\t<span>Active Cache Rules</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.rules">▾</span>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.rules">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter rules by path or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="rulesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredRuleGroups.length > 0; else noRules"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredRuleGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.persistenceType }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.rules.length }} rule<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.rules.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetSizeForType(group.persistenceType)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="rules-list" style="padding: 10px">\r\n\t\t\t\t\t\t\t\t<div class="rule-card" *ngFor="let rule of group.rules">\r\n\t\t\t\t\t\t\t\t\t<div class="rule-header">\r\n\t\t\t\t\t\t\t\t\t\t<span class="rule-path">{{ rule.pathValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\trule.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ rule.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="rule-body">\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Payload Cache:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ rule.reqPayloadCache ? \'Enabled\' : \'Disabled\' }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Encryption:</strong> {{ rule.encriptType }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\tclass="rule-detail"\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="rule.clearOn && rule.clearOn.length > 0"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Clear On:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t<ul class="clear-on-list">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li *ngFor="let c of rule.clearOn">{{ c }}</li>\r\n\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noRules>\r\n\t\t\t\t\t\t<div class="empty-state">No cache rules match the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Cache Entries Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'entries\')">\r\n\t\t\t\t\t<span>Cache Entries</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.entries"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.entries">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter entries by key or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="entriesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredCacheGroups.length > 0; else noData"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredCacheGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.rulePath }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} entry<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.entries.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetGroupSize(group)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass="registry-item-container"\r\n\t\t\t\t\t\t\t\t\t*ngFor="let entry of group.entries"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item">\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\tentry.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text" [title]="entry.key">\r\n\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvertical-align: text-top;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: #dcdcaa;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ entry.key }}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-right: 8px">{{\r\n\t\t\t\t\t\t\t\t\t\t\tformatSize(entry.dataSize || 0)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class="item-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedContentId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\topenContentModal(entry.key, entry.encriptType)\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="View Content"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.hasPayload"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="togglePayload(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Toggle Payload Request"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="22 12 18 12 15 21 9 3 6 12 2 12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="deleteEntry(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete Entry"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="payload-content"\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t[data]="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t\t<span class="empty-payload" *ngIf="!entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t>Unable to parse payload request.</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t<div class="empty-state">No items found in cache matching the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Modal Overlay for Content Details --\x3e\r\n<div class="modal-overlay" *ngIf="expandedContentId" (click)="closeContentModal()">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Content Details</h3>\r\n\t\t\t<span class="path-text" [title]="expandedContentId">{{ expandedContentId }}</span>\r\n\t\t\t<button class="close-btn" (click)="closeContentModal()" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body">\r\n\t\t\t<div class="decrypt-prompt" *ngIf="currentContent?._requiresKey">\r\n\t\t\t\t<div class="decrypt-header">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t\t<span>Encrypted Content</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p class="decrypt-desc">Enter the decryption key to view this response.</p>\r\n\t\t\t\t<div class="decrypt-input-group">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t[(ngModel)]="customKeys[expandedContentId]"\r\n\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\tplaceholder="Enter Secret Key"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="decrypt-btn" (click)="decryptContent(expandedContentId)">\r\n\t\t\t\t\t\tDecrypt\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="error-msg" *ngIf="decryptErrors[expandedContentId]">\r\n\t\t\t\t\t{{ decryptErrors[expandedContentId] }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<asor-json-view\r\n\t\t\t\t*ngIf="currentContent && !currentContent._requiresKey"\r\n\t\t\t\t[data]="currentContent"\r\n\t\t\t></asor-json-view>\r\n\t\t\t<span class="empty-payload" *ngIf="!currentContent && currentContent !== null"\r\n\t\t\t\t>Empty content.</span\r\n\t\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Cleanup Results Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isCleanupModalOpen" (click)="isCleanupModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Cleaned Cache Entries</h3>\r\n\t\t\t<span class="path-text">Total recovered size: {{ formatSize(cleanedTotalSize) }}</span>\r\n\t\t\t<button class="close-btn" (click)="isCleanupModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 0">\r\n\t\t\t<div class="cleanup-table">\r\n\t\t\t\t<div class="cleanup-table-header">\r\n\t\t\t\t\t<span class="col-type">Type</span>\r\n\t\t\t\t\t<span class="col-path">Path</span>\r\n\t\t\t\t\t<span class="col-size" style="text-align: right">Size</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="cleanup-table-body">\r\n\t\t\t\t\t<div class="cleanup-table-row" *ngFor="let entry of cleanedEntries">\r\n\t\t\t\t\t\t<span class="col-type">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="entry.persistenceType"\r\n\t\t\t\t\t\t\t\t[ngClass]="entry.persistenceType.toString().toLowerCase()"\r\n\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-path" [title]="entry.key">\r\n\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t*ngIf="entry.encriptType && entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\tstyle="margin-right: 6px; flex-shrink: 0; color: #dcdcaa"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t>{{ entry.key }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-size">{{ formatSize(entry.dataSize) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Clear All Confirmation Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isClearAllModalOpen" (click)="isClearAllModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()" style="max-width: 400px">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Confirm Cache Clear</h3>\r\n\t\t\t<button class="close-btn" (click)="isClearAllModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 20px">\r\n\t\t\t<p style="color: #ccc; margin: 0 0 20px 0; font-size: 14px; line-height: 1.5">\r\n\t\t\t\tAre you sure you want to completely clear the cache? This action cannot be undone.\r\n\t\t\t</p>\r\n\t\t\t<div style="display: flex; justify-content: flex-end; gap: 10px">\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="isClearAllModalOpen = false"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: transparent;\r\n\t\t\t\t\t\tborder: 1px solid #444;\r\n\t\t\t\t\t\tcolor: #ccc;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="executeClearAll()"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: rgba(244, 135, 113, 0.2);\r\n\t\t\t\t\t\tborder: 1px solid #f48771;\r\n\t\t\t\t\t\tcolor: #f48771;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t\tfont-weight: 600;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px;overflow-y:auto}.state-dashboard::-webkit-scrollbar,.state-dashboard .registry-table-container::-webkit-scrollbar,.state-dashboard .payload-content::-webkit-scrollbar,.state-dashboard .rules-list::-webkit-scrollbar{width:10px;height:10px}.state-dashboard::-webkit-scrollbar-track,.state-dashboard .registry-table-container::-webkit-scrollbar-track,.state-dashboard .payload-content::-webkit-scrollbar-track,.state-dashboard .rules-list::-webkit-scrollbar-track{background:#1e1e1e}.state-dashboard::-webkit-scrollbar-thumb,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb,.state-dashboard .payload-content::-webkit-scrollbar-thumb,.state-dashboard .rules-list::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.state-dashboard::-webkit-scrollbar-thumb:hover,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb:hover,.state-dashboard .payload-content::-webkit-scrollbar-thumb:hover,.state-dashboard .rules-list::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card .value.active{color:#4caf50}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn.clear-all:hover{background-color:#f4877133;color:#f48771}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;overflow:hidden;border-radius:6px}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-body{padding:5px;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;display:flex;flex-direction:column;flex:1;min-height:0}.state-dashboard .dashboard-content .section-body.collapsed{padding:0;max-height:0;opacity:0;overflow:hidden}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .rules-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .rules-list .rule-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;padding:10px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header .rule-path{font-family:monospace;color:#dcdcaa;font-weight:700}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body{font-size:12px;color:#9cdcfe}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail{margin-top:4px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail strong{color:#888}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail .clear-on-list{margin:4px 0 0 16px;padding:0;color:#ce9178;font-family:monospace}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-family:monospace;font-size:13px;flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container{border-bottom:1px solid #333;display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item{padding:8px 12px 8px 36px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .store-badge{margin-right:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn{background:none;border:none;color:#ccc;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.delete:hover{background-color:#f4877133;color:#f48771}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.active{background-color:#2a2a2a;color:#4fc1ff}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .payload-content{border-top:1px solid #333;max-height:300px;overflow-y:auto;padding:10px 12px 10px 36px;background:#1e1e1e;color:#d16969;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt{padding:10px 0}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:13px;margin-bottom:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-desc{font-size:12px;color:#888;margin:0 0 10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:6px 10px;font-size:12px;flex:1;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:6px 12px;font-size:12px;cursor:pointer;transition:background-color .2s}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .error-msg{color:#f48771;font-size:11px;margin-top:4px}.state-dashboard .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}:host .cache-dashboard{padding:20px;color:#d4d4d4}:host .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}:host .store-badge.session{background-color:#0e639c33;color:#4fc1ff}:host .store-badge.local{background-color:#60ac3933;color:#b5cea8}:host .store-badge.volatile{background-color:#d7ba7d33;color:#d7ba7d}.cleanup-table{display:flex;flex-direction:column;max-height:400px}.cleanup-table .cleanup-table-header{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;padding:10px 16px;background-color:#252526;border-bottom:1px solid #333;font-size:12px;font-weight:600;color:#888;position:sticky;top:0}.cleanup-table .cleanup-table-body{overflow-y:auto;display:flex;flex-direction:column}.cleanup-table .cleanup-table-body .cleanup-table-row{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;align-items:center;padding:8px 16px;border-bottom:1px solid #333}.cleanup-table .cleanup-table-body .cleanup-table-row:last-child{border-bottom:none}.cleanup-table .cleanup-table-body .cleanup-table-row:hover{background-color:#2a2a2a}.cleanup-table .cleanup-table-body .cleanup-table-row .col-type{display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-path{color:#ce9178;font-family:monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-size{color:#888;font-size:11px;text-align:right;background:#ffffff0d;padding:2px 6px;border-radius:10px}.modal-overlay{position:absolute;inset:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#1e1e1e;border:1px solid #333;border-radius:8px;width:90%;max-width:800px;max-height:90%;display:flex;flex-direction:column;box-shadow:0 10px 30px #00000080}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;background-color:#252526;border-top-left-radius:8px;border-top-right-radius:8px;gap:12px}.modal-content .modal-header h3{margin:0;font-size:14px;color:#ccc;font-weight:600}.modal-content .modal-header .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-content .modal-header .close-btn{background:none;border:none;color:#888;font-size:20px;cursor:pointer;line-height:1;padding:0 4px}.modal-content .modal-header .close-btn:hover{color:#ccc}.modal-content .modal-body{padding:16px;overflow-y:auto;flex:1}.modal-content .modal-body .decrypt-prompt{padding:10px 0}.modal-content .modal-body .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:14px;margin-bottom:10px}.modal-content .modal-body .decrypt-prompt .decrypt-desc{font-size:13px;color:#888;margin:0 0 12px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:8px 12px;font-size:13px;flex:1;font-family:inherit;outline:none}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.modal-content .modal-body .decrypt-prompt .error-msg{color:#f48771;font-size:12px;margin-top:6px}.info-banner{position:absolute;top:20px;left:50%;transform:translate(-50%);background-color:#252526;border:1px solid #4ec9b0;color:#4ec9b0;padding:8px 16px;border-radius:6px;box-shadow:0 4px 12px #00000080;z-index:1001;font-size:13px;display:flex;align-items:center;gap:8px;animation:slideDown .3s ease-out}@keyframes slideDown{0%{top:-40px;opacity:0}to{top:20px;opacity:1}}\n"]}]}],ctorParameters:()=>[{type:WidgetCacheUtility}]});class AsorWidgetComponent{mode="on";logoSrc="data:image/png;base64,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";isOpen=!1;activeTab="console";widgetHeight=80;spyActivated=!1;get isVisible(){switch(this.mode){case"off":return!1;case"on":return!0;case"spy":return this.spyActivated}}onKeyDown(t){"spy"===this.mode&&t.ctrlKey&&"i"===t.key.toLowerCase()&&(t.preventDefault(),this.spyActivated=!this.spyActivated,this.spyActivated||(this.isOpen=!1))}toggleSlider(){this.isOpen=!this.isOpen}setHeight(t){this.widgetHeight=t}selectTab(t){this.activeTab=t}onTabChange(t){this.selectTab(t.target.value)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AsorWidgetComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:AsorWidgetComponent,isStandalone:!0,selector:"asor-core-widget",inputs:{mode:"mode"},host:{listeners:{"document:keydown":"onKeyDown($event)"}},ngImport:t,template:'<div class="asor-widget-container" *ngIf="isVisible">\r\n\t<div\r\n\t\tclass="slider"\r\n\t\t[class.open]="isOpen"\r\n\t\t[style.height.%]="widgetHeight"\r\n\t\t[style.bottom.%]="isOpen ? 0 : -widgetHeight"\r\n\t>\r\n\t\t<div class="slider-header">\r\n\t\t\t<div class="header-left">\r\n\t\t\t\t<img class="header-logo" [src]="logoSrc" alt="Asor Logo" />\r\n\t\t\t\t<span class="logo-text">Asor Core</span>\r\n\t\t\t\t<nav class="tabs">\r\n\t\t\t\t\t<button [class.active]="activeTab === \'console\'" (click)="selectTab(\'console\')">\r\n\t\t\t\t\t\tConsole\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'storage\'" (click)="selectTab(\'storage\')">\r\n\t\t\t\t\t\tStorage\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'cache\'" (click)="selectTab(\'cache\')">\r\n\t\t\t\t\t\tCache\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</nav>\r\n\t\t\t\t<div class="mobile-tabs">\r\n\t\t\t\t\t<select [value]="activeTab" (change)="onTabChange($event)">\r\n\t\t\t\t\t\t<option value="console">Console</option>\r\n\t\t\t\t\t\t<option value="storage">Storage</option>\r\n\t\t\t\t\t\t<option value="cache">Cache</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="header-right">\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 20"\r\n\t\t\t\t\t(click)="setHeight(20)"\r\n\t\t\t\t\ttitle="20%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="17" x2="21" y2="17"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 80"\r\n\t\t\t\t\t(click)="setHeight(80)"\r\n\t\t\t\t\ttitle="80%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="7" x2="21" y2="7"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 100"\r\n\t\t\t\t\t(click)="setHeight(100)"\r\n\t\t\t\t\ttitle="100%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button class="close-btn" (click)="toggleSlider()">×</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class="slider-content">\r\n\t\t\t<asor-console-tab class="tab-panel" *ngIf="activeTab === \'console\'"></asor-console-tab>\r\n\t\t\t<asor-storage-tab class="tab-panel" *ngIf="activeTab === \'storage\'"></asor-storage-tab>\r\n\t\t\t<asor-cache-tab class="tab-panel" *ngIf="activeTab === \'cache\'"></asor-cache-tab>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<button class="floating-btn" *ngIf="!isOpen" (click)="toggleSlider()">\r\n\t\t<img [src]="logoSrc" alt="Asor Core Logo" />\r\n\t</button>\r\n</div>\r\n',styles:[":host{display:block}.asor-widget-container{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.asor-widget-container *,.asor-widget-container *:before,.asor-widget-container *:after{box-sizing:border-box}.floating-btn{position:fixed;bottom:20px;right:20px;width:50px;height:50px;border-radius:50%;background-color:#007acc;box-shadow:0 4px 15px #0006;border:none;cursor:pointer;z-index:9999;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.25,.8,.25,1)}.floating-btn:hover{transform:scale(1.1);box-shadow:0 6px 20px #00000080}.floating-btn img{width:60%;height:60%;object-fit:contain;filter:brightness(0) invert(1)}.slider{position:fixed;left:0;right:0;background-color:#1e1e1e;color:#ccc;box-shadow:0 -4px 25px #00000080;z-index:9998;transition:bottom .4s cubic-bezier(.25,.8,.25,1),height .4s cubic-bezier(.25,.8,.25,1);border-top-left-radius:12px;border-top-right-radius:12px;display:flex;flex-direction:column;border-top:1px solid #333;overflow-y:auto;overscroll-behavior:none}.slider .slider-header{padding:0 20px;height:50px;border-bottom:1px solid #333;background-color:#252526;display:flex;justify-content:space-between;align-items:center;border-top-left-radius:12px;border-top-right-radius:12px}.slider .slider-header .header-left{display:flex;align-items:center;gap:12px}.slider .slider-header .header-left .header-logo{height:24px;width:auto;vertical-align:middle}.slider .slider-header .logo-text{font-weight:600;color:#fff;font-size:14px;letter-spacing:.5px}.slider .slider-header .tabs{display:flex;gap:10px;height:100%}@media (max-width: 768px){.slider .slider-header .tabs{display:none}}.slider .slider-header .tabs button{background:none;border:none;height:100%;padding:0 10px;font-size:13px;cursor:pointer;color:#999;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent}.slider .slider-header .tabs button:hover{color:#fff}.slider .slider-header .tabs button.active{color:#fff;border-bottom-color:#007acc}.slider .slider-header .mobile-tabs{display:none;height:100%;align-items:center}.slider .slider-header .mobile-tabs select{background-color:#333;color:#fff;border:1px solid #444;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:13px;outline:none}.slider .slider-header .mobile-tabs select:focus{border-color:#007acc}@media (max-width: 768px){.slider .slider-header .mobile-tabs{display:flex}}.slider .slider-header .header-right{display:flex;align-items:center;gap:4px}.slider .slider-header .header-right .resize-btn,.slider .slider-header .header-right .close-btn{background:none;border:none;cursor:pointer;color:#999;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px}.slider .slider-header .header-right .resize-btn.active,.slider .slider-header .header-right .resize-btn:hover,.slider .slider-header .header-right .close-btn.active,.slider .slider-header .header-right .close-btn:hover{background-color:#333;color:#fff}.slider .slider-header .header-right .close-btn{font-size:20px}.slider .slider-content{flex:1;padding:16px;overflow:hidden;background-color:#1e1e1e}.slider .tab-panel{height:100%;display:block}@media (max-width: 768px){.slider .floating-btn{bottom:16px;right:16px;width:44px;height:44px}.slider .slider.open~.floating-btn{display:none}}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ConsoleTabComponent,selector:"asor-console-tab"},{kind:"component",type:StorageTabComponent,selector:"asor-storage-tab"},{kind:"component",type:CacheTabComponent,selector:"asor-cache-tab"}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AsorWidgetComponent,decorators:[{type:p,args:[{selector:"asor-core-widget",standalone:!0,imports:[w,ConsoleTabComponent,StorageTabComponent,CacheTabComponent],encapsulation:d.ShadowDom,template:'<div class="asor-widget-container" *ngIf="isVisible">\r\n\t<div\r\n\t\tclass="slider"\r\n\t\t[class.open]="isOpen"\r\n\t\t[style.height.%]="widgetHeight"\r\n\t\t[style.bottom.%]="isOpen ? 0 : -widgetHeight"\r\n\t>\r\n\t\t<div class="slider-header">\r\n\t\t\t<div class="header-left">\r\n\t\t\t\t<img class="header-logo" [src]="logoSrc" alt="Asor Logo" />\r\n\t\t\t\t<span class="logo-text">Asor Core</span>\r\n\t\t\t\t<nav class="tabs">\r\n\t\t\t\t\t<button [class.active]="activeTab === \'console\'" (click)="selectTab(\'console\')">\r\n\t\t\t\t\t\tConsole\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'storage\'" (click)="selectTab(\'storage\')">\r\n\t\t\t\t\t\tStorage\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'cache\'" (click)="selectTab(\'cache\')">\r\n\t\t\t\t\t\tCache\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</nav>\r\n\t\t\t\t<div class="mobile-tabs">\r\n\t\t\t\t\t<select [value]="activeTab" (change)="onTabChange($event)">\r\n\t\t\t\t\t\t<option value="console">Console</option>\r\n\t\t\t\t\t\t<option value="storage">Storage</option>\r\n\t\t\t\t\t\t<option value="cache">Cache</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="header-right">\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 20"\r\n\t\t\t\t\t(click)="setHeight(20)"\r\n\t\t\t\t\ttitle="20%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="17" x2="21" y2="17"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 80"\r\n\t\t\t\t\t(click)="setHeight(80)"\r\n\t\t\t\t\ttitle="80%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="7" x2="21" y2="7"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 100"\r\n\t\t\t\t\t(click)="setHeight(100)"\r\n\t\t\t\t\ttitle="100%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button class="close-btn" (click)="toggleSlider()">×</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class="slider-content">\r\n\t\t\t<asor-console-tab class="tab-panel" *ngIf="activeTab === \'console\'"></asor-console-tab>\r\n\t\t\t<asor-storage-tab class="tab-panel" *ngIf="activeTab === \'storage\'"></asor-storage-tab>\r\n\t\t\t<asor-cache-tab class="tab-panel" *ngIf="activeTab === \'cache\'"></asor-cache-tab>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<button class="floating-btn" *ngIf="!isOpen" (click)="toggleSlider()">\r\n\t\t<img [src]="logoSrc" alt="Asor Core Logo" />\r\n\t</button>\r\n</div>\r\n',styles:[":host{display:block}.asor-widget-container{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.asor-widget-container *,.asor-widget-container *:before,.asor-widget-container *:after{box-sizing:border-box}.floating-btn{position:fixed;bottom:20px;right:20px;width:50px;height:50px;border-radius:50%;background-color:#007acc;box-shadow:0 4px 15px #0006;border:none;cursor:pointer;z-index:9999;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.25,.8,.25,1)}.floating-btn:hover{transform:scale(1.1);box-shadow:0 6px 20px #00000080}.floating-btn img{width:60%;height:60%;object-fit:contain;filter:brightness(0) invert(1)}.slider{position:fixed;left:0;right:0;background-color:#1e1e1e;color:#ccc;box-shadow:0 -4px 25px #00000080;z-index:9998;transition:bottom .4s cubic-bezier(.25,.8,.25,1),height .4s cubic-bezier(.25,.8,.25,1);border-top-left-radius:12px;border-top-right-radius:12px;display:flex;flex-direction:column;border-top:1px solid #333;overflow-y:auto;overscroll-behavior:none}.slider .slider-header{padding:0 20px;height:50px;border-bottom:1px solid #333;background-color:#252526;display:flex;justify-content:space-between;align-items:center;border-top-left-radius:12px;border-top-right-radius:12px}.slider .slider-header .header-left{display:flex;align-items:center;gap:12px}.slider .slider-header .header-left .header-logo{height:24px;width:auto;vertical-align:middle}.slider .slider-header .logo-text{font-weight:600;color:#fff;font-size:14px;letter-spacing:.5px}.slider .slider-header .tabs{display:flex;gap:10px;height:100%}@media (max-width: 768px){.slider .slider-header .tabs{display:none}}.slider .slider-header .tabs button{background:none;border:none;height:100%;padding:0 10px;font-size:13px;cursor:pointer;color:#999;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent}.slider .slider-header .tabs button:hover{color:#fff}.slider .slider-header .tabs button.active{color:#fff;border-bottom-color:#007acc}.slider .slider-header .mobile-tabs{display:none;height:100%;align-items:center}.slider .slider-header .mobile-tabs select{background-color:#333;color:#fff;border:1px solid #444;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:13px;outline:none}.slider .slider-header .mobile-tabs select:focus{border-color:#007acc}@media (max-width: 768px){.slider .slider-header .mobile-tabs{display:flex}}.slider .slider-header .header-right{display:flex;align-items:center;gap:4px}.slider .slider-header .header-right .resize-btn,.slider .slider-header .header-right .close-btn{background:none;border:none;cursor:pointer;color:#999;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px}.slider .slider-header .header-right .resize-btn.active,.slider .slider-header .header-right .resize-btn:hover,.slider .slider-header .header-right .close-btn.active,.slider .slider-header .header-right .close-btn:hover{background-color:#333;color:#fff}.slider .slider-header .header-right .close-btn{font-size:20px}.slider .slider-content{flex:1;padding:16px;overflow:hidden;background-color:#1e1e1e}.slider .tab-panel{height:100%;display:block}@media (max-width: 768px){.slider .floating-btn{bottom:16px;right:16px;width:44px;height:44px}.slider .slider.open~.floating-btn{display:none}}\n"]}]}],propDecorators:{mode:[{type:c}],onKeyDown:[{type:u,args:["document:keydown",["$event"]]}]}});export{q as AsorGlobalEnum,J as AsorStorage,AsorWidgetComponent,AuthGuard,AuthUtility,BaseComponent,BaseHandlerMixin,BaseMolecule,BaseStorageComponent,BaseStorageMolecule,CacheInterceptor,CachePathUtility,CacheUtility,CollectionUtils,ConfigCache,ConfigConst,ConsoleLogsConfig,ConsoleLogsUtility,CookieUtils,ErrorInterceptor,HttpRequestHandler,MockHttpInterceptor,MockOrchestratorService,NotifyErrorService,ObjectUtils,RandomUtils,RoutingUtility,StateConst,StateService,Z as StringUtils,TranslatePipe,TranslateUtility,createFlattenedReactiveProxy};
1
+ import*as t from"@angular/core";import{inject as e,Injectable as r,Directive as n,ViewChildren as o,Injector as a,runInInjectionContext as s,ChangeDetectorRef as i,Pipe as l,Input as c,ViewEncapsulation as d,Component as p,ViewChild as g,EventEmitter as h,Output as u,HostListener as b}from"@angular/core";import{ActivatedRoute as f,Router as y,UrlTree as x}from"@angular/router";import*as m from"@angular/common";import{Location as v,CommonModule as w}from"@angular/common";import{ReplaySubject as k,of as C,BehaviorSubject as S,forkJoin as z,throwError as T,from as E,isObservable as O,tap as I}from"rxjs";import{map as D,filter as j,first as M,tap as N,switchMap as P,catchError as L}from"rxjs/operators";import{HttpClient as U,HttpResponse as H,HttpHeaders as R}from"@angular/common/http";import*as A from"crypto-js";import*as V from"@angular/forms";import{FormsModule as K}from"@angular/forms";class ConfigConst{static BaseApi="/api/v1";static SiteBaseUrl="/asor-core";static SiteAssetsUrl="/assets";static _routeBase={NONE:"none",PAGE_UNAUTHORIZED:"unathorized",LOGIN:"login"};static _routeExtensions;static get Route(){return{...this._routeBase,...this._routeExtensions}}static _urlBase={get UNAUTHORIZED(){return ConfigConst.SiteBaseUrl.concat("/unathorized")},get LOGIN(){return ConfigConst.SiteBaseUrl.concat("/login")}};static _urlExtensions;static get Url(){return{UNAUTHORIZED:this._urlBase.UNAUTHORIZED,LOGIN:this._urlBase.LOGIN,...this._urlExtensions}}static _translationUrlBase={DefaultLanguage:"en"};static _translationUrlExtensions;static get TranslationUrl(){return{...this._translationUrlBase,...this._translationUrlExtensions}}static _authCheckBase={PAGE_UNAUTHORIZED:"unathorized"};static _authCheckExtensions;static get AuthCheck(){return{...this._authCheckBase,...this._authCheckExtensions}}static _cacheBase={NONE:""};static _cacheExtensions;static get Cache(){return{...this._cacheBase,...this._cacheExtensions}}static SetConfiguration(t){if(!(t._routeExtensions&&t._urlExtensions&&t._translationUrlExtensions&&t._authCheckExtensions&&t._cacheExtensions))throw new Error("Missing configuration extensions");this.BaseApi=t.BaseApi,this.SiteBaseUrl=t.SiteBaseUrl,this.SiteAssetsUrl=t.SiteAssetsUrl,this._routeExtensions=t._routeExtensions,this._urlExtensions=t._urlExtensions,this._translationUrlExtensions=t._translationUrlExtensions,this._authCheckExtensions=t._authCheckExtensions,this._cacheExtensions=t._cacheExtensions}}class ConfigCache{static _pathsBase=[];static _pathsExtensions;static get Paths(){return[...this._pathsBase,...this._pathsExtensions]}static SetConfiguration(t){if(!t._pathsExtensions)throw new Error("Missing configuration extensions");this._pathsExtensions=t._pathsExtensions}}class ConsoleLogsConfig{static defaultLevels=[];static silent=!1;static classConfigs=[];static isLevelEnabled(t,e){const r=ConsoleLogsConfig.classConfigs.find(e=>e.className===t),n=r&&r.levels&&r.levels.length>0?r.levels:ConsoleLogsConfig.defaultLevels;return n.includes("ALL")||n.includes(e)}static setClassLevels(t,e){const r=ConsoleLogsConfig.classConfigs.find(e=>e.className===t);r?r.levels=e:ConsoleLogsConfig.classConfigs.push({className:t,levels:e})}static removeClassConfig(t){ConsoleLogsConfig.classConfigs=ConsoleLogsConfig.classConfigs.filter(e=>e.className!==t)}static reset(){ConsoleLogsConfig.defaultLevels=["ALL"],ConsoleLogsConfig.classConfigs=[]}}class MockOrchestratorMapService{static staticRequestMappings=new Map;static registryMethod(t,e){return MockOrchestratorMapService.staticRequestMappings.set(t,e),e}}function MockRequestMapping(t){return function(e,r,n){return t={...t,className:e.className},MockOrchestratorMapService.registryMethod(t,n)}}var B,G,X,F,W;!function(t){t.GET="GET",t.POST="POST",t.PUT="PUT",t.DELETE="DELETE",t.PATCH="PATCH",t.HEAD="HEAD",t.OPTIONS="OPTIONS",t.CONNECT="CONNECT",t.TRACE="TRACE"}(B||(B={})),function(t){t[t.Continue=100]="Continue",t[t.SwitchingProtocols=101]="SwitchingProtocols",t[t.Processing=102]="Processing",t[t.OK=200]="OK",t[t.Created=201]="Created",t[t.Accepted=202]="Accepted",t[t.NonAuthoritativeInformation=203]="NonAuthoritativeInformation",t[t.NoContent=204]="NoContent",t[t.ResetContent=205]="ResetContent",t[t.PartialContent=206]="PartialContent",t[t.MultipleChoices=300]="MultipleChoices",t[t.MovedPermanently=301]="MovedPermanently",t[t.Found=302]="Found",t[t.SeeOther=303]="SeeOther",t[t.NotModified=304]="NotModified",t[t.UseProxy=305]="UseProxy",t[t.TemporaryRedirect=307]="TemporaryRedirect",t[t.PermanentRedirect=308]="PermanentRedirect",t[t.BadRequest=400]="BadRequest",t[t.Unauthorized=401]="Unauthorized",t[t.PaymentRequired=402]="PaymentRequired",t[t.Forbidden=403]="Forbidden",t[t.NotFound=404]="NotFound",t[t.MethodNotAllowed=405]="MethodNotAllowed",t[t.NotAcceptable=406]="NotAcceptable",t[t.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",t[t.RequestTimeout=408]="RequestTimeout",t[t.Conflict=409]="Conflict",t[t.Gone=410]="Gone",t[t.LengthRequired=411]="LengthRequired",t[t.PreconditionFailed=412]="PreconditionFailed",t[t.PayloadTooLarge=413]="PayloadTooLarge",t[t.URITooLong=414]="URITooLong",t[t.UnsupportedMediaType=415]="UnsupportedMediaType",t[t.RangeNotSatisfiable=416]="RangeNotSatisfiable",t[t.ExpectationFailed=417]="ExpectationFailed",t[t.UnprocessableEntity=422]="UnprocessableEntity",t[t.Locked=423]="Locked",t[t.FailedDependency=424]="FailedDependency",t[t.UpgradeRequired=426]="UpgradeRequired",t[t.PreconditionRequired=428]="PreconditionRequired",t[t.TooManyRequests=429]="TooManyRequests",t[t.RequestHeaderFieldsTooLarge=431]="RequestHeaderFieldsTooLarge",t[t.UnavailableForLegalReasons=451]="UnavailableForLegalReasons",t[t.InternalServerError=500]="InternalServerError",t[t.NotImplemented=501]="NotImplemented",t[t.BadGateway=502]="BadGateway",t[t.ServiceUnavailable=503]="ServiceUnavailable",t[t.GatewayTimeout=504]="GatewayTimeout",t[t.HTTPVersionNotSupported=505]="HTTPVersionNotSupported",t[t.VariantAlsoNegotiates=506]="VariantAlsoNegotiates",t[t.InsufficientStorage=507]="InsufficientStorage",t[t.LoopDetected=508]="LoopDetected",t[t.NotExtended=510]="NotExtended",t[t.NetworkAuthenticationRequired=511]="NetworkAuthenticationRequired"}(G||(G={})),function(t){t.Ok="ok",t.Retray="re",t.NotAllow="na",t.Expired="ex"}(X||(X={})),function(t){t.VOLATILE="volatile",t.SESSION="session",t.LOCAL="local"}(F||(F={})),function(t){t.NONE="NONE",t.AUTO="AUTO",t.CUSTOM="CUSTOM"}(W||(W={}));var q=Object.freeze({__proto__:null,get AuthStatus(){return X},get CacheEncriptType(){return W},get CacheType(){return F},get IHttpMethod(){return B},get IHttpStatusCode(){return G}});class StateConst{static EncryptType={AES:"AES"};static Generate={AUTO:"AUTO",CUSTOM:"CUSTOM"};static StoreType={VOLATILE:"VOLATILE",SESSION:"SESSION",LOCAL:"LOCAL"};static Data={REPLACE:"REPLACE",MERGE:"MERGE"};static Cookie={CACHE:"asor-cache-utility-asdgtr3648w9sd",CACHE_KEY:"asor-cache-key-rtyuiop789012",CACHE_KEY_EXPIRE:365,STATE:"asor-state-utility-qwezxc123456",STATE_KEY:"asor-secure-key-rtyuiop789012",STATE_KEY_EXPIRE:365};static CMPLX12=12;static CMPLX6=6}var J=Object.freeze({__proto__:null,StateConst});class ConsoleLogsUtility{static logStream$=new k(1e3);static COLORS={INFO:{badge:"background:#0dcaf0;color:#000;border-radius:3px;font-weight:bold",text:"color:#0dcaf0",time:"color:#888"},DEBUG:{badge:"background:#a855f7;color:#fff;border-radius:3px;font-weight:bold",text:"color:#a855f7",time:"color:#888"},WARNING:{badge:"background:#f59e0b;color:#000;border-radius:3px;font-weight:bold",text:"color:#f59e0b",time:"color:#888"},ERROR:{badge:"background:#ef4444;color:#fff;border-radius:3px;font-weight:bold",text:"color:#ef4444;font-weight:bold",time:"color:#888"}};static formatTimestamp(){const t=new Date,pad=(t,e=2)=>String(t).padStart(e,"0");return`${t.getFullYear()}-${pad(t.getMonth()+1)}-${pad(t.getDate())} ${pad(t.getHours())}:${pad(t.getMinutes())}:${pad(t.getSeconds())}.${pad(t.getMilliseconds(),3)}`}static buildLog(t,e,r){const n=e?.className||e?.constructor?.className||e?.constructor?.name||"Unknown";if(!ConsoleLogsConfig.isLevelEnabled(n,t))return;const o=ConsoleLogsUtility.COLORS[t],a=ConsoleLogsUtility.formatTimestamp(),s=r.length>0?r[0]:"",i=r.slice(1);ConsoleLogsUtility.logStream$.next({timestamp:a,level:t,className:n,message:"string"==typeof s?s:JSON.stringify(s),params:i,source:e}),ConsoleLogsConfig.silent||("ERROR"===t?console.error:"WARNING"===t?console.warn:console.log)(`%c ${t} %c %c${a}%c [${n}] ${s}`,o.badge,"",o.time,o.text,...i)}static info(t,...e){ConsoleLogsUtility.buildLog("INFO",t,e)}static debug(t,...e){ConsoleLogsUtility.buildLog("DEBUG",t,e)}static warning(t,...e){ConsoleLogsUtility.buildLog("WARNING",t,e)}static error(t,...e){ConsoleLogsUtility.buildLog("ERROR",t,e)}}class RoutingUtility{static _name="RoutingUtility";route=e(f);router=e(y);location=e(v);constructor(){}getNavParams(t){return this.route.snapshot.queryParams[t]||""}getPathParams(t){return this.route.snapshot.params[t]||""}currentNavPass(t){return-1!=this.router.url.indexOf(t)}navigate(t,e){const r=new URL(`${window.location.origin}${t}`);if(e){const t=new URLSearchParams(e);r.search=t.toString()}this.router.navigateByUrl(r.pathname.concat(r.search||"").replace(ConfigConst.SiteBaseUrl,"")).then(()=>{}).catch(t=>{})}navigateWithStateObj(t,e,r){const n={state:e,queryParams:r};this.router.navigate([t.replace(ConfigConst.SiteBaseUrl,"")],n).then(()=>{}).catch(t=>{ConsoleLogsUtility.error(RoutingUtility._name,t)})}getStateParams(){return this.location.getState()}getBaseRouter(){return this.router}getBaseActivatedRoute(){return this.route}getBaseLocation(){return this.location}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:RoutingUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class HttpRequestHandler{static className="HttpRequestHandler";baseUrl="";http=e(U);constructor(t){try{if(!t)throw new Error("Missing configuration of HttpRequestHandlerconfig");this.baseUrl=t.baseApiUrl}catch(t){ConsoleLogsUtility.error(HttpRequestHandler.name,t)}}get(t,e){const r=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`GET request to ${r}`,e),this.wrapper(()=>this.http.get(r,{params:e}))}post(t,e,r){const n=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`POST request to ${n}`,e),this.wrapper(()=>this.http.post(n,e,{headers:r}))}put(t,e,r){const n=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`PUT request to ${n}`,e),this.wrapper(()=>this.http.put(n,e,{headers:r}))}delete(t){const e=`${this.baseUrl}/${t}`;return ConsoleLogsUtility.debug(this,`DELETE request to ${e}`),this.wrapper(()=>this.http.delete(e))}wrapper(t){let e,r=t();return{send:t=>(e=r.subscribe({...t,error:r=>{try{t.error&&t.error(r)}finally{e&&e.unsubscribe()}},complete:()=>{try{t.complete&&t.complete()}finally{e&&e.unsubscribe()}}}),e),obs:()=>r}}}class TranslateUtility{translations={};translationSubjects={};loading={};requestHandler=new HttpRequestHandler({baseApiUrl:ConfigConst.SiteAssetsUrl});constructor(){}getTranslation$(t,e,r=ConfigConst.TranslationUrl.DefaultLanguage){const n=[];if(0===e.length)return C(t);for(const o of e){const e=`${o}|${r}|${t}`;let a;this.translationSubjects[e]||(this.translationSubjects[e]=new S(this.translations[o]?.[r]?.[t]||t)),a=this.translations[o]?.[r]?C(null):this.loadTranslations(o,r);const s=a.pipe(D(()=>this.translationSubjects[e].value));n.push(s)}return z(n).pipe(D(e=>e.find(e=>e!==t)||t))}loadTranslations(t,e){this.loading[t]||(this.loading[t]={}),this.loading[t][e]||(this.loading[t][e]=new S(!1));const r=this.loading[t][e];return this.translations[t]?.[e]&&!r.value?C(null):r.value?r.asObservable().pipe(j(t=>!t),M(),D(()=>null)):(r.next(!0),this.requestHandler.get(`i18n${t}/${e}.json`).obs().pipe(N(r=>{this.translations[t]=this.translations[t]||{},this.translations[t][e]=r,Object.entries(r).forEach(([r,n])=>{if("string"==typeof n){const o=`${t}|${e}|${r}`,a=this.translationSubjects[o];a?a.next(n):this.translationSubjects[o]=new S(n)}})}),D(()=>(r.next(!1),null))))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslateUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class CachePathUtility{paths=[];RoutingUtility=e(RoutingUtility);constructor(t){this.paths=t}config(t){return this.paths.find(e=>-1!==t.indexOf(e.pathValue))}exist(t){const e=this.paths.find(e=>-1!==t.indexOf(e.pathValue));if(e){if(e?.resctrictRoute==ConfigConst.Route.NONE)return!0;if(this.RoutingUtility.currentNavPass(e?.resctrictRoute||ConfigConst.Route.NONE))return!0}return!1}relationCleanOnConfig(t){return this.paths.find(e=>!!e.clearOn.find(e=>-1!==t.indexOf(e)))}existRelationCleanOn(t){return!!this.paths.find(e=>!!e.clearOn.find(e=>-1!==t.indexOf(e)))}getPaths(){return this.paths}}class CookieUtils{static add(t,e,r){let n="";if(r){const t=new Date;t.setTime(t.getTime()+24*r*60*60*1e3),n="; expires="+t.toUTCString()}document.cookie=t+"="+(e||"")+n+"; path=/"}static read(t){const e=t+"=",r=document.cookie.split(";");for(let t=0;t<r.length;t++){let n=r[t];for(;" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(e))return n.substring(e.length,n.length)}return""}static delete(t){document.cookie=t+"=; Max-Age=-99999999;"}}class ObjectUtils{static isEmpty(t){return null==t||"object"==typeof t&&0===Object.keys(t).length}static isNotEmpty(t){return!ObjectUtils.isEmpty(t)}static isObject(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}static cloneDeep(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>this.cloneDeep(t));const e={};for(const r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=this.cloneDeep(t[r]));return e}}class RandomUtils{static makeid(t){let e="";for(let r=0;r<t;r++)e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(62*Math.random()));return e}}let Z=class StringUtils{static isEmpty(t){return null==t||""===t}static isNotEmpty(t){return!StringUtils.isEmpty(t)}static isString(t){return"string"==typeof t}};class CacheUtility{static className="CacheUtility";cache_name=A.MD5(StateConst.Cookie.CACHE).toString();cacheApp=new Map;cachePathUtility;constructor(){this.cachePathUtility=new CachePathUtility(ConfigCache.Paths);let t=new Map,e=sessionStorage.getItem(this.cache_name);e&&Object.entries(JSON.parse(e)).forEach(([e,r])=>t.set(e,r));let r=localStorage.getItem(this.cache_name);r&&Object.entries(JSON.parse(r)).forEach(([e,r])=>t.set(e,r)),this.cacheApp=t}cleanUp(){const t=new Map;for(const e of Array.from(this.cacheApp.keys()))if(!this.cachePathUtility.config(e)){const r=this.cacheApp.get(e);void 0!==r&&t.set(e,r),this.cacheApp.delete(e)}try{const e=sessionStorage.getItem(this.cache_name);if(e){const r=new Map(Object.entries(JSON.parse(e)));let n=!1;for(const e of Array.from(r.keys())){const o=this.cachePathUtility.config(e);o&&o.persistenceType===F.SESSION||(t.set(e,r.get(e)),r.delete(e),n=!0)}n&&(0===r.size?sessionStorage.removeItem(this.cache_name):sessionStorage.setItem(this.cache_name,JSON.stringify(Object.fromEntries(r))))}}catch(t){ConsoleLogsUtility.error(this,"Failed to clean up obsolete items from session storage:",t)}try{const e=localStorage.getItem(this.cache_name);if(e){const r=new Map(Object.entries(JSON.parse(e)));let n=!1;for(const e of Array.from(r.keys())){const o=this.cachePathUtility.config(e);o&&o.persistenceType===F.LOCAL||(t.set(e,r.get(e)),r.delete(e),n=!0)}n&&(0===r.size?localStorage.removeItem(this.cache_name):localStorage.setItem(this.cache_name,JSON.stringify(Object.fromEntries(r))))}}catch(t){ConsoleLogsUtility.error(this,"Failed to clean up obsolete items from local storage:",t)}return t}isValidResponse(t,e){const r=e&&!(Array.isArray(e)&&0===e.length);return r||this.cacheApp.delete(t),r}pass(t,e){return this.isValidResponse(t.url,e)&&this.cachePathUtility.exist(t.url)}get(t){let e=t.url,r=this.cachePathUtility.config(e);if(r&&r.reqPayloadCache&&t.body){let r=btoa(JSON.stringify(t.body));e=e.concat(`#[${r}]`)}if(this.cachePathUtility.existRelationCleanOn(e)){let t=[],r=this.cachePathUtility.relationCleanOnConfig(e);r&&this.cacheApp.forEach((e,n)=>{-1!=n.indexOf(r.pathValue)&&t.push(n)}),t.forEach(t=>{switch(this.cacheApp.delete(t),r?.persistenceType){case F.SESSION:case F.LOCAL:{let e=r.persistenceType===F.LOCAL?localStorage:sessionStorage,n=e.getItem(this.cache_name),o=n?new Map(Object.entries(JSON.parse(n))):new Map;o.delete(t),e.setItem(this.cache_name,JSON.stringify(Object.fromEntries(o)));break}}})}let n=this.cacheApp.get(e);if(r?.encriptType&&r.encriptType!=W.NONE&&"string"==typeof n&&(n=this.decrypt(r,n)),n instanceof Object)return new H({body:ObjectUtils.cloneDeep(n.body),status:n.status,statusText:n.statusText,url:n.url||"",headers:new R({...n.headers})})}set(t,e){let r=t.url,n=e,o=this.cachePathUtility.config(r);if(o?.reqPayloadCache&&t.body){let e=btoa(JSON.stringify(t.body));r=r.concat(`#[${e}]`)}switch(o?.encriptType&&o.encriptType!=W.NONE&&(n=this.encrypt(o,e)),o?.persistenceType){case F.SESSION:case F.LOCAL:try{let t=o.persistenceType===F.LOCAL?localStorage:sessionStorage,e=t.getItem(this.cache_name),a=e?new Map(Object.entries(JSON.parse(e))):new Map;a.set(r,n),t.setItem(this.cache_name,JSON.stringify(Object.fromEntries(a)))}catch(t){ConsoleLogsUtility.error(this,"Failed to persist map cache to storage:",t)}}this.cacheApp.set(r,n)}getCacheKey(t){let e="";switch(t.encriptType){case W.AUTO:{const t=A.MD5(StateConst.Cookie.CACHE_KEY).toString();if(Z.isEmpty(CookieUtils.read(t))){const e=RandomUtils.makeid(StateConst.CMPLX12)+(new Date).getTime(),r=RandomUtils.makeid(StateConst.CMPLX6)+(new Date).getTime(),n=A.AES.encrypt(e,r).toString()+"."+r;CookieUtils.add(t,n,StateConst.Cookie.CACHE_KEY_EXPIRE)}const r=CookieUtils.read(t).split(".");e=A.AES.decrypt(r[0],r[1]).toString(A.enc.Utf8);break}case W.CUSTOM:t.callBackCacheKey&&(e=t.callBackCacheKey())}return e}encrypt(t,e){let r="";return t.encriptType===W.AUTO&&(r=A.AES.encrypt(JSON.stringify(e),this.getCacheKey(t)).toString()),r||e}decrypt(t,e){let r=null;return t.encriptType===W.AUTO&&(r=JSON.parse(A.AES.decrypt(e,this.getCacheKey(t)).toString(A.enc.Utf8))),r||e}getCacheApp(){return this.cacheApp}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});let Q=class CollectionUtils{static isEmpty(t){return null==t||0===t.length}static isNotEmpty(t){return!CollectionUtils.isEmpty(t)}static getFirst(t){if(!CollectionUtils.isEmpty(t))return t[0]}static getLast(t){if(!CollectionUtils.isEmpty(t))return t[t.length-1]}static concat(...t){const e=[];return t.forEach(t=>{CollectionUtils.isNotEmpty(t)&&e.push(...t)}),e}static filter(t,e){return CollectionUtils.isEmpty(t)?[]:t.filter(e)}static map(t,e){return CollectionUtils.isEmpty(t)?[]:t.map(e)}static reduce(t,e,r){return CollectionUtils.isEmpty(t)?r:t.reduce(e,r)}static forEach(t,e){CollectionUtils.isNotEmpty(t)&&t.forEach(e)}static contains(t,e){return!CollectionUtils.isEmpty(t)&&t.includes(e)}static exists(t,e){return!CollectionUtils.isEmpty(t)&&t.some(e)}static removeIf(t,e){if(CollectionUtils.isEmpty(t))return;const r=t.findIndex(e);return-1!==r?t.splice(r,1)[0]:void 0}static shallowCopy(t){return CollectionUtils.isEmpty(t)?[]:[...t]}};class StringUtils{static isEmpty(t){return null==t||0===t.length}static isBlank(t){return null==t||0===t.trim().length}static isNotEmpty(t){return!StringUtils.isEmpty(t)}static isNotBlank(t){return!StringUtils.isBlank(t)}static defaultString(t){return t??""}static defaultIfEmpty(t,e){return StringUtils.isEmpty(t)?e:t}static defaultIfBlank(t,e){return StringUtils.isBlank(t)?e:t}static trim(t){return StringUtils.defaultString(t).trim()}static capitalize(t){if(StringUtils.isBlank(t))return"";const e=t;return e.charAt(0).toUpperCase()+e.slice(1)}static uncapitalize(t){if(StringUtils.isBlank(t))return"";const e=t;return e.charAt(0).toLowerCase()+e.slice(1)}static equals(t,e){return t===e||null!=t&&null!=e&&t===e}static equalsIgnoreCase(t,e){return t===e||null!=t&&null!=e&&t.toLowerCase()===e.toLowerCase()}static contains(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.includes(e)}static startsWith(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.startsWith(e)}static endsWith(t,e){return!StringUtils.isEmpty(t)&&!StringUtils.isEmpty(e)&&t.endsWith(e)}static join(t,e=""){return Q.isEmpty(t)?"":t.filter(t=>null!=t).join(e)}static repeat(t,e){return StringUtils.isEmpty(t)||e<1?"":t.repeat(e)}static countOccurrences(t,e){if(StringUtils.isEmpty(t)||StringUtils.isEmpty(e))return 0;const r=t,n=e;if(0===n.length)return r.length+1;let o=0,a=r.indexOf(n);for(;-1!==a;)o++,a=r.indexOf(n,a+n.length);return o}}class AuthUtility{requestHandler=new HttpRequestHandler({baseApiUrl:ConfigConst.BaseApi});constructor(){}getAuthorization(t){return this.requestHandler.get("auth/flow/"+t)}checkAuthAction(t,e){this.getAuthorization(t).send({next:t=>{StringUtils.equals(t.authorized,X.Ok)?e.authorize(t):e.unAuthorize&&e.unAuthorize(t)},error:t=>{e.unAuthorize&&e.unAuthorize(t)}})}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[]});class BaseMolecule{static className="BaseMolecule";route=e(f);currentMolecule;I18nPath;constructor(){const t=this.route.snapshot.data,e=t.Molecules?.find(t=>t.Molecule.className===this.constructor.className);this.currentMolecule=e,this.I18nPath=e.I18nPath}baseCompViewEnter(){ConsoleLogsUtility.warning(this,"The method baseCompViewEnter() should be implemented.")}baseCompViewLeave(){ConsoleLogsUtility.warning(this,"The method baseCompViewLeave() should be implemented.")}baseMoleculeViewWillEnter(){ConsoleLogsUtility.warning(this,"The method baseMoleculeViewWillEnter() should be implemented.")}baseMoleculeViewWillLeave(){ConsoleLogsUtility.warning(this,"The method baseMoleculeViewWillLeave() should be implemented.")}getClassName(){return this.constructor.className}ngOnInit(){this.baseMoleculeViewWillEnter()}ngOnDestroy(){this.baseMoleculeViewWillLeave()}ionViewWillEnter(){this.baseMoleculeViewWillEnter()}ionViewWillLeave(){this.baseMoleculeViewWillLeave()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseMolecule,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseMolecule,isStandalone:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseMolecule,decorators:[{type:n}],ctorParameters:()=>[]});class BaseComponent{static className="BaseComponent";ChildrenRef;route=e(f);I18nPath;constructor(){const t=this.route.snapshot.data;this.I18nPath=t.Components?.find(t=>t.Component.className===this.constructor.className)?.I18nPath||t.I18nPath}ngOnInit(){this.baseCompViewEnter()}ngOnDestroy(){this.baseCompViewLeave()}ionViewWillEnter(){this.baseCompViewEnter()}ionViewWillLeave(){this.baseCompViewLeave()}baseCompViewEnter(){this.ChildrenRef&&this.ChildrenRef.length>0&&this.ChildrenRef.forEach(t=>t.baseCompViewEnter())}baseCompViewLeave(){this.ChildrenRef&&this.ChildrenRef.length>0&&this.ChildrenRef.forEach(t=>t.baseCompViewLeave())}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseComponent,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseComponent,isStandalone:!0,viewQueries:[{propertyName:"ChildrenRef",predicate:["ChildRef"],descendants:!0}],ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseComponent,decorators:[{type:n}],ctorParameters:()=>[],propDecorators:{ChildrenRef:[{type:o,args:["ChildRef"]}]}});class CollectionUtils{static isEmpty(t){return!t||Array.isArray(t)&&0===t.length}static isNotEmpty(t){return!CollectionUtils.isEmpty(t)}}class StateService{static className="StateService";initialized=!1;containerRoot=[];conf;intervalId;intervalTime=1e3;registryMap=new Map;initialize(t){if(this.initialized)ConsoleLogsUtility.warning(this,"State service already initialized");else{ConsoleLogsUtility.info(this,"Initializing state service with config:",t),this.conf=t||{encryptionType:StateConst.EncryptType.AES,nameType:StateConst.Generate.AUTO,keyType:StateConst.Generate.AUTO,asyncEnabled:!0};const e=sessionStorage.getItem(this.getStateName()),r=localStorage.getItem(this.getStateName());Z.isNotEmpty(e)&&(this.containerRoot.push(...JSON.parse(e)),ConsoleLogsUtility.debug(this,"Loaded session data from storage")),Z.isNotEmpty(r)&&(this.containerRoot.push(...JSON.parse(r)),ConsoleLogsUtility.debug(this,"Loaded persistent data from storage")),this.conf.asyncEnabled&&(this.intervalId=setInterval(()=>{const t=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.SESSION),e=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.LOCAL);CollectionUtils.isNotEmpty(t)&&sessionStorage.setItem(this.getStateName(),JSON.stringify(t)),CollectionUtils.isNotEmpty(e)&&localStorage.setItem(this.getStateName(),JSON.stringify(e))},this.intervalTime)),this.initialized=!0,ConsoleLogsUtility.info(this,"State service initialized successfully")}}async delegateCheckStoreDataSet(){if(!this.conf.asyncEnabled){const t=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.SESSION),e=this.containerRoot.filter(t=>t.storeType===StateConst.StoreType.LOCAL);CollectionUtils.isNotEmpty(t)&&sessionStorage.setItem(this.getStateName(),JSON.stringify(t)),CollectionUtils.isNotEmpty(e)&&localStorage.setItem(this.getStateName(),JSON.stringify(e))}}createDataSet(t,e,r){if(!e)return ConsoleLogsUtility.warning(this,`Cannot create dataset "${t}": data is empty`),!1;if(CollectionUtils.isNotEmpty(this.containerRoot)&&Z.isNotEmpty(t)){const e=this.containerRoot.find(e=>e.name===t);if(ObjectUtils.isNotEmpty(e))return ConsoleLogsUtility.warning(this,`Dataset "${t}" already exists. Load current data from storage`),!1}let n=e;r.encrypt&&(n=this.encrypt(e),ConsoleLogsUtility.debug(this,`Dataset "${t}" will be encrypted`));const o={name:t,encrypt:!!r.encrypt,storeType:r.storeType||StateConst.StoreType.SESSION,freeze:!!r.freeze,data:n,lastUpdate:(new Date).getTime(),readCount:0,writeCount:0};return r.freeze&&ConsoleLogsUtility.warning(this,`Dataset "${t}" frozen`),this.containerRoot.push(o),this.delegateCheckStoreDataSet(),ConsoleLogsUtility.info(this,`Dataset "${t}" created successfully`,{storeType:o.storeType,encrypted:o.encrypt}),!0}readDataSet(t){let e=t.split("."),r=null;if(CollectionUtils.isNotEmpty(this.containerRoot))try{if(Array.isArray(e)){const n=this.containerRoot.find(t=>t.name===e[0]);if(ObjectUtils.isNotEmpty(n)){r=n.encrypt?this.decrypt(n.data):n.data;for(let t=1;t<e.length;t++)r=r[e[t]];n.readCount++}else ConsoleLogsUtility.warning(this,`Dataset "${e[0]}" not found for path: ${t}`)}}catch(e){ConsoleLogsUtility.error(this,`Error reading dataset at path: ${t}`,e)}return r}updateDataSet(t,e,r){let n=t.split("."),o=!1;try{if(Array.isArray(n)&&CollectionUtils.isNotEmpty(this.containerRoot)&&Z.isNotEmpty(n[0])){const a=this.containerRoot.find(t=>t.name===n[0]);if(ObjectUtils.isNotEmpty(a)){if(a.freeze)return ConsoleLogsUtility.warning(this,`Cannot update frozen dataset at path: ${t}`),!1;let s=a.encrypt?this.decrypt(a.data):a.data;if(s){let i=s,l=!1;for(let t=1;t<n.length-1;t++)i=i[n[t]];if(ObjectUtils.isNotEmpty(r))switch(r.method){case StateConst.Data.REPLACE:i[n[n.length-1]]=e,l=!0,ConsoleLogsUtility.debug(this,`Replace method used for path: ${t}`);break;case StateConst.Data.MERGE:if(ObjectUtils.isObject(i[n[n.length-1]])&&ObjectUtils.isObject(e)){const r={...i[n[n.length-1]],...e};i[n[n.length-1]]=r,l=!0,ConsoleLogsUtility.debug(this,`Merge method used for path: ${t}`)}}l||(i[n[n.length-1]]=e),a.data=a.encrypt?this.encrypt(s):s,o=!0,a.writeCount++,this.delegateCheckStoreDataSet(),this.triggerChange(t)}}else ConsoleLogsUtility.warning(this,`Dataset "${n[0]}" not found for update at path: ${t}`)}}catch(e){ConsoleLogsUtility.error(this,`Error updating dataset at path: ${t}`,e)}return o}triggerChange(t){if(!t)return;let e=t;for(;e;){let r=!1;const n=new Set;if(this.registryMap.forEach((o,a)=>{const s=a.match(/\[([^\]]+)\]<([^>]+)>;(.+)/);if(s){const[,a,i,l]=s;if(-1!==l.indexOf(e)&&(r=!0,!n.has(a))){n.add(a);const e={[t.split(".")[0]]:{[i]:this.readDataSet(l)}};o.propsIsUpdated(e)}}}),r)break;const o=e.lastIndexOf(".");if(-1===o)break;e=e.substring(0,o)}}deleteRootDataSet(t){if(Z.isString(t)&&Z.isNotEmpty(t)&&CollectionUtils.isNotEmpty(this.containerRoot)){const e=this.containerRoot.find(e=>e.name===t);if(e){const r=this.containerRoot.indexOf(e);this.containerRoot.splice(r,1),ConsoleLogsUtility.info(this,`Dataset "${t}" deleted successfully`)}else ConsoleLogsUtility.warning(this,`Dataset "${t}" not found for deletion`)}}getStateName(){let t="";switch(this.conf.nameType){case StateConst.Generate.AUTO:t=A.MD5(StateConst.Cookie.STATE).toString();break;case StateConst.Generate.CUSTOM:this.conf.callBackStateName&&(t=this.conf.callBackStateName())}return t}getStateKey(){let t="";switch(this.conf.keyType){case StateConst.Generate.AUTO:{const e=A.MD5(StateConst.Cookie.STATE_KEY).toString();if(Z.isEmpty(CookieUtils.read(e))){const t=RandomUtils.makeid(StateConst.CMPLX12)+(new Date).getTime(),r=RandomUtils.makeid(StateConst.CMPLX6)+(new Date).getTime(),n=A.AES.encrypt(t,r).toString()+"."+r;CookieUtils.add(e,n,StateConst.Cookie.STATE_KEY_EXPIRE)}const r=CookieUtils.read(e).split(".");t=A.AES.decrypt(r[0],r[1]).toString(A.enc.Utf8);break}case StateConst.Generate.CUSTOM:this.conf.callBackStateKey&&(t=this.conf.callBackStateKey())}return t}encrypt(t){let e="";return this.conf.encryptionType===StateConst.EncryptType.AES&&(e=A.AES.encrypt(JSON.stringify(t),this.getStateKey()).toString()),e}decrypt(t){let e=null;return this.conf.encryptionType===StateConst.EncryptType.AES&&(e=JSON.parse(A.AES.decrypt(t,this.getStateKey()).toString(A.enc.Utf8))),e}registry(t,e,r){ConsoleLogsUtility.debug(this,`Registering component "${t}" with props:`,e);const n={};return Object.entries(e).forEach(([e,o])=>{let a=`[${t}]<${e}>;${o}`,s=1;for(;this.registryMap.has(a);)a=`[${t}(${s++})]<${e}>;${o}`;this.registryMap.set(a,{propsIsUpdated:r}),n[a]=()=>this.registryMap.delete(a)}),{componentName:t,destroy:()=>{ConsoleLogsUtility.debug(this,`Destroying mapped keys for component "${t}"`),Object.entries(n).forEach(([t,e])=>{e&&e()})}}}resolveProps(t){const e={};Object.entries(t).forEach(([t,r])=>{const n=r.split(".")[0];e[n]||(e[n]=[]),e[n].push({key:t,path:r})});const r={};return Object.entries(e).forEach(([t,e])=>{r[t]={},e.forEach(({key:e,path:n})=>{r[t][e]=this.readDataSet(n)})}),ObjectUtils.cloneDeep(r)}ngOnDestroy(){this.intervalId&&clearInterval(this.intervalId)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,providedIn:"root"})}function BaseHandlerMixin(t){return class StorageHandlerMixinClass extends t{propsStore={};stateService=e(StateService);activatedRoute=e(f);registryElement;constructor(...t){super(...t);const e=this.activatedRoute.snapshot.data;e?.CreateDataSet&&this.stateService.createDataSet(e.CreateDataSet.name,e.CreateDataSet.data||{},e.CreateDataSet.option||{});const r=e.Components?.find(t=>t.Component.className===this.constructor.className)?.ConnectDataSet||e.Molecules?.find(t=>t.Molecule.className===this.constructor.className)?.ConnectDataSet||e.ConnectDataSet;if(r){const t=r?.selectors||{};this.registryElement=this.stateService.registry(this.getClassName(),t,t=>{const e=this.copyPropsStore(t),deepMerge=(t,e)=>{for(const r in e)e.hasOwnProperty(r)&&(e[r]&&"object"==typeof e[r]&&!Array.isArray(e[r])?(t[r]&&"object"==typeof t[r]||(t[r]={}),deepMerge(t[r],e[r])):t[r]=e[r])};deepMerge(this.propsStore,e),this.storageHandlerDataChanges&&this.storageHandlerDataChanges({},{})}),this.propsStore=createReactiveProxy(this.stateService.resolveProps(t),(t,e,r)=>{this.onPropsStoreChange(t,e,r)})}}onPropsStoreChange(t,e,r){ConsoleLogsUtility.debug(this,`Property changed: ${t}`,{from:r,to:e}),this.stateService.updateDataSet(t,e)||ConsoleLogsUtility.warning(this,`Failed to update state for path: ${t}`)}getClassName(){return this.constructor.className}copyPropsStore(t){return JSON.parse(JSON.stringify(t))}}}function deepEqual(t,e){if(t===e)return!0;if(null==t||null==e)return!1;if(typeof t!=typeof e)return!1;if("object"!=typeof t)return!1;const r=Array.isArray(t);if(r!==Array.isArray(e))return!1;if(r){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!deepEqual(t[r],e[r]))return!1;return!0}const n=Object.keys(t),o=Object.keys(e);if(n.length!==o.length)return!1;for(const r of n){if(!e.hasOwnProperty(r))return!1;if(!deepEqual(t[r],e[r]))return!1}return!0}function createReactiveProxy(t,e,r=""){const n=new Map,o=["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"];return new Proxy(t,{get(t,a){const s=t[a];if("symbol"==typeof a)return s;const i=String(a),l=r?`${r}.${i}`:i;if(Array.isArray(t)&&"function"==typeof s&&o.includes(i))return(...o)=>{const a=t.map(t=>t&&"object"==typeof t?{...t}:t),s=Array.prototype[i].apply(t,o);n.clear();const l=[...t];return deepEqual(a,l)||e(r,l,a),s};if(null===s||"object"!=typeof s)return s;const c=n.get(i);if(c&&c.rawValue===s)return c.proxy;const d=createReactiveProxy(s,e,l);return n.set(i,{rawValue:s,proxy:d}),d},set(t,o,a){const s=String(o),i=r?`${r}.${s}`:s,l=t[o];return deepEqual(l,a)||(n.delete(s),t[o]=a,e(i,a,l)),!0},deleteProperty(t,o){if(o in t){const a=String(o),s=r?`${r}.${a}`:a,i=t[o];n.delete(a),delete t[o],e(s,void 0,i)}return!0}})}function createFlattenedReactiveProxy(t){return new Proxy({},{get(e,r){if("symbol"==typeof r)return;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return r[n]}},set(e,r,n){if("symbol"==typeof r)return!1;const o=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&o in r)return r[o]=n,!0}return!1},has(e,r){if("symbol"==typeof r)return!1;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return!0}return!1},ownKeys(){const e=[];for(const r of Object.keys(t)){const n=t[r];n&&"object"==typeof n&&e.push(...Object.keys(n))}return e},getOwnPropertyDescriptor(e,r){if("symbol"==typeof r)return;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return{configurable:!0,enumerable:!0,writable:!0,value:r[n]}}},deleteProperty(e,r){if("symbol"==typeof r)return!1;const n=String(r);for(const e of Object.keys(t)){const r=t[e];if(r&&"object"==typeof r&&n in r)return delete r[n],!0}return!1}})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class BaseStorageComponent extends(BaseHandlerMixin(BaseComponent)){get props(){return createFlattenedReactiveProxy(this.propsStore)}baseCompViewLeave(){this.registryElement?.destroy(),super.baseCompViewLeave()}constructor(){super()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageComponent,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseStorageComponent,isStandalone:!0,usesInheritance:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageComponent,decorators:[{type:n}],ctorParameters:()=>[]});class BaseStorageMolecule extends(BaseHandlerMixin(BaseMolecule)){get props(){return createFlattenedReactiveProxy(this.propsStore)}baseCompViewLeave(){this.registryElement?.destroy()}baseMoleculeViewWillLeave(){this.registryElement?.destroy()}constructor(){super()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageMolecule,deps:[],target:t.ɵɵFactoryTarget.Directive});static ɵdir=t.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"20.3.16",type:BaseStorageMolecule,isStandalone:!0,usesInheritance:!0,ngImport:t})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:BaseStorageMolecule,decorators:[{type:n}],ctorParameters:()=>[]});class NotifyErrorService{static className="NotifyErrorService";dataSubject=new S(null);dataSub=this.dataSubject.asObservable();sub=new Map;send(t){ConsoleLogsUtility.debug(this,`Broadcasting error: ${t.status}`,t),this.dataSubject.next(t)}registry(t,e){ConsoleLogsUtility.debug(this,`Registering subscriber: ${t}`);const r=this.sub.get(t);r&&r.unsubscribe();const n=this.dataSub.subscribe(t=>{t&&e(t.status,t.error)});this.sub.set(t,n)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:NotifyErrorService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class MockOrchestratorService{get requestMappings(){return MockOrchestratorMapService.staticRequestMappings}intercept(t,e){for(const[r,n]of this.requestMappings)if(StringUtils.equals(t.url,r.path)&&t.method==r.method){const o=n.value.apply(r.controller,[t,e]);return StringUtils.equals(o.name,"HttpErrorResponse")?T(()=>o):o instanceof Promise?E(o):C(o)}return e.handle(t)}registryController(t,e){for(const[r]of this.requestMappings)-1!=t.indexOf(r.className)&&(r.controller=e)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockOrchestratorService,decorators:[{type:r,args:[{providedIn:"root"}]}]});class AuthGuard{static className="AuthGuard";routingUtility=e(RoutingUtility);authUtility=e(AuthUtility);injector=e(a);canActivate(t,r){const n=t.data;return n.ChildGuard?this.executeAuthCheck(n).pipe(P(o=>o?s(this.injector,()=>{const o=e(n.ChildGuard);return this.normalizeGuardResult(o.canActivate(t,r))}):C(!1))):this.executeAuthCheck(n)}executeAuthCheck(t){return ConsoleLogsUtility.info(this,"AuthGuard checking route",t),t.AuthCheck?this.authUtility.getAuthorization(t.AuthCheck).obs().pipe(D(e=>(ConsoleLogsUtility.debug(this,`Auth result for ${t.AuthCheck}`,e),!!StringUtils.equals(e.authorized,X.Ok)||(StringUtils.equals(e.authorized,X.NotAllow)?(ConsoleLogsUtility.info(this,"Redirecting to UNAUTHORIZED due to NotAllow status"),this.routingUtility.navigate(ConfigConst.Url.UNAUTHORIZED,{}),!1):(ConsoleLogsUtility.info(this,"Redirecting to LOGIN due to missing/expired auth"),this.routingUtility.navigate(ConfigConst.Url.LOGIN,{}),!1))))):C(!0)}normalizeGuardResult(t){return"object"==typeof t&&"redirectTo"in t||t instanceof x?C(t):t instanceof Promise?E(t):O(t)?t:C(t)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AuthGuard,decorators:[{type:r,args:[{providedIn:"root"}]}]});class ErrorInterceptor{static className="ErrorInterceptor";notifyErrorService=e(NotifyErrorService);intercept(t,e){return e.handle(t).pipe(L(e=>(ConsoleLogsUtility.error(this,`HTTP Error ${e.status} at ${t.urlWithParams}: ${e.message}`,e),this.notifyErrorService.send(e),T(e))))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ErrorInterceptor,decorators:[{type:r}]});class CacheInterceptor{static className="CacheInterceptor";cacheUtility=e(CacheUtility);intercept(t,e){const r=this.cacheUtility.get(t);return r?(ConsoleLogsUtility.info(this,`Serving from cache: ${t.urlWithParams}`),C(r)):e.handle(t).pipe(I(e=>{e instanceof H&&this.cacheUtility.pass(t,e)&&(ConsoleLogsUtility.debug(this,`Caching response for ${t.urlWithParams}`),this.cacheUtility.set(t,e))}))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheInterceptor,decorators:[{type:r}]});class MockHttpInterceptor{orchestratorService=e(MockOrchestratorService);intercept(t,e){return this.orchestratorService.intercept(t,e)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor,deps:[],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:MockHttpInterceptor,decorators:[{type:r}]});class TranslatePipe{translateUtility=e(TranslateUtility);changeDetectorRef=e(i);lastKey="";translatedValue="";subscription=null;context;constructor(){}transform(t,e=ConfigConst.TranslationUrl.DefaultLanguage){return t!==this.lastKey&&(this.lastKey=t,this.subscription?.unsubscribe(),this.context=this.changeDetectorRef.context,this.subscription=this.translateUtility.getTranslation$(t,this.context?.I18nPath,e).subscribe(t=>{this.translatedValue=t,this.changeDetectorRef.markForCheck()})),this.decodeHtmlEntities(this.translatedValue)||t}decodeHtmlEntities(t){const e=document.createElement("textarea");e.innerHTML=t;const r=e.value;return e.remove(),r}ngOnDestroy(){this.subscription?.unsubscribe()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,deps:[],target:t.ɵɵFactoryTarget.Pipe});static ɵpipe=t.ɵɵngDeclarePipe({minVersion:"14.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,isStandalone:!0,name:"translate",pure:!1})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:TranslatePipe,decorators:[{type:l,args:[{name:"translate",standalone:!0,pure:!1}]}],ctorParameters:()=>[]});class JsonViewComponent{data;key=null;level=0;expandDepth=0;expanded=!1;ngOnInit(){this.level<this.expandDepth&&(this.expanded=!0)}togglebox(){this.expanded=!this.expanded}isObject(t){return null!==t&&"object"==typeof t}isArray(t){return Array.isArray(t)}isString(t){return"string"==typeof t}getKeys(t){return t?Object.keys(t):[]}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonViewComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:JsonViewComponent,isStandalone:!0,selector:"asor-json-view",inputs:{data:"data",key:"key",level:"level",expandDepth:"expandDepth"},ngImport:t,template:'<div class="json-node" [style.padding-left.px]="level * 10">\r\n\t\x3c!-- Primitive Value or Null --\x3e\r\n\t<ng-container *ngIf="!isObject(data)">\r\n\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t<span\r\n\t\t\tclass="json-value"\r\n\t\t\t[ngClass]="{\r\n\t\t\t\tnull: data === null,\r\n\t\t\t\tstring: isString(data),\r\n\t\t\t\tother: !isString(data) && data !== null,\r\n\t\t\t}"\r\n\t\t>\r\n\t\t\t{{ data | json }}\r\n\t\t</span>\r\n\t</ng-container>\r\n\r\n\t\x3c!-- Object or Array --\x3e\r\n\t<ng-container *ngIf="isObject(data)">\r\n\t\t<div class="json-expandable" (click)="togglebox()">\r\n\t\t\t<span class="toggle-icon">{{ expanded ? \'▼\' : \'▶\' }}</span>\r\n\t\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t\t<span class="json-preview" *ngIf="!isArray(data)"> Object </span>\r\n\t\t\t<span class="json-preview" *ngIf="isArray(data)"> Array({{ data.length }}) </span>\r\n\t\t</div>\r\n\r\n\t\t<div class="json-children" *ngIf="expanded">\r\n\t\t\t<ng-container *ngIf="!isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let k of getKeys(data)">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="data[k]"\r\n\t\t\t\t\t\t[key]="k"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf="isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let item of data; let i = index">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="item"\r\n\t\t\t\t\t\t[key]="\'\' + i"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>\r\n',styles:[".json-node{font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;color:#d4d4d4}.json-key{color:#9cdcfe}.json-value.string{color:#ce9178}.json-value.null{color:#569cd6}.json-value.other{color:#b5cea8}.json-expandable{cursor:pointer;display:flex;align-items:center}.json-expandable:hover{background-color:#ffffff0d}.toggle-icon{font-size:10px;margin-right:5px;color:#858585;width:12px;text-align:center}.json-preview{color:#858585;font-style:italic}\n"],dependencies:[{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]},{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"pipe",type:m.JsonPipe,name:"json"}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonViewComponent,decorators:[{type:p,args:[{selector:"asor-json-view",standalone:!0,imports:[w,JsonViewComponent],encapsulation:d.None,template:'<div class="json-node" [style.padding-left.px]="level * 10">\r\n\t\x3c!-- Primitive Value or Null --\x3e\r\n\t<ng-container *ngIf="!isObject(data)">\r\n\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t<span\r\n\t\t\tclass="json-value"\r\n\t\t\t[ngClass]="{\r\n\t\t\t\tnull: data === null,\r\n\t\t\t\tstring: isString(data),\r\n\t\t\t\tother: !isString(data) && data !== null,\r\n\t\t\t}"\r\n\t\t>\r\n\t\t\t{{ data | json }}\r\n\t\t</span>\r\n\t</ng-container>\r\n\r\n\t\x3c!-- Object or Array --\x3e\r\n\t<ng-container *ngIf="isObject(data)">\r\n\t\t<div class="json-expandable" (click)="togglebox()">\r\n\t\t\t<span class="toggle-icon">{{ expanded ? \'▼\' : \'▶\' }}</span>\r\n\t\t\t<span class="json-key" *ngIf="key">{{ key }}: </span>\r\n\t\t\t<span class="json-preview" *ngIf="!isArray(data)"> Object </span>\r\n\t\t\t<span class="json-preview" *ngIf="isArray(data)"> Array({{ data.length }}) </span>\r\n\t\t</div>\r\n\r\n\t\t<div class="json-children" *ngIf="expanded">\r\n\t\t\t<ng-container *ngIf="!isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let k of getKeys(data)">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="data[k]"\r\n\t\t\t\t\t\t[key]="k"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-container *ngIf="isArray(data)">\r\n\t\t\t\t<div class="json-property" *ngFor="let item of data; let i = index">\r\n\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t[data]="item"\r\n\t\t\t\t\t\t[key]="\'\' + i"\r\n\t\t\t\t\t\t[level]="level + 1"\r\n\t\t\t\t\t\t[expandDepth]="expandDepth"\r\n\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t</div>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</ng-container>\r\n</div>\r\n',styles:[".json-node{font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;color:#d4d4d4}.json-key{color:#9cdcfe}.json-value.string{color:#ce9178}.json-value.null{color:#569cd6}.json-value.other{color:#b5cea8}.json-expandable{cursor:pointer;display:flex;align-items:center}.json-expandable:hover{background-color:#ffffff0d}.toggle-icon{font-size:10px;margin-right:5px;color:#858585;width:12px;text-align:center}.json-preview{color:#858585;font-style:italic}\n"]}]}],propDecorators:{data:[{type:c}],key:[{type:c}],level:[{type:c}],expandDepth:[{type:c}]}});class ConsoleTabComponent{cdr;static className="ConsoleTabComponent";logsContainer;shouldScrollToBottom=!0;availableLevels=["ALL","INFO","DEBUG","WARNING","ERROR"];logs=[];logSub;inspectedObject=null;inspectedObjectMethods=[];inspectedLog=null;constructor(t){this.cdr=t}newClassName="";newClassLevels={};openDropdownClass=null;dropdownTop=0;dropdownLeft=0;selectedConfig=null;mobileExpandedSection=null;searchTerm="";selectedLevels=new Set;get filteredLogs(){let t=this.logs;if(this.selectedLevels.size>0&&(t=t.filter(t=>this.selectedLevels.has(t.level))),!this.searchTerm.trim())return t;const e=this.searchTerm.toLowerCase();return t.filter(t=>t.message.toLowerCase().includes(e)||t.className.toLowerCase().includes(e)||t.level.toLowerCase().includes(e)||t.params&&JSON.stringify(t.params).toLowerCase().includes(e))}get logCounts(){const t={};return this.availableLevels.forEach(e=>{"ALL"!==e&&(t[e]=0)}),this.logs.forEach(e=>{void 0!==t[e.level]?t[e.level]++:t[e.level]=(t[e.level]||0)+1}),t}getClassLogCount(t){return this.logs.filter(e=>e.className===t).length}filterByLevel(t){this.selectedLevels.has(t)?this.selectedLevels.delete(t):this.selectedLevels.add(t)}ngOnInit(){this.logSub=ConsoleLogsUtility.logStream$.subscribe(t=>{this.logs.push(t),this.logs.length>500&&this.logs.shift(),this.shouldScrollToBottom&&(this.cdr.detectChanges(),this.scrollToBottom())}),this.mobileExpandedSection="logs"}ngAfterViewInit(){this.shouldScrollToBottom&&this.scrollToBottom()}scrollToBottom(){try{this.logsContainer&&this.logsContainer.nativeElement&&(this.logsContainer.nativeElement.scrollTop=this.logsContainer.nativeElement.scrollHeight)}catch(t){}}onLogScroll(){const t=this.logsContainer.nativeElement;this.shouldScrollToBottom=t.scrollHeight-t.scrollTop<=t.clientHeight+20}ngOnDestroy(){this.logSub&&this.logSub.unsubscribe()}toggleSection(t){this.mobileExpandedSection=this.mobileExpandedSection===t?null:t}get classConfigs(){return ConsoleLogsConfig.classConfigs}get defaultLevels(){return ConsoleLogsConfig.defaultLevels}toggleSlider(){}clearLogs(){this.logs=[]}inspectObject(t,e){this.inspectedObject=t,this.inspectedLog=e||null,this.inspectedObjectMethods=this.getPrototypeMethods(t)}closeInspector(){this.inspectedObject=null,this.inspectedObjectMethods=[],this.inspectedLog=null,this.replResult=null,this.replError=null,this.hasReplResult=!1}executionCode="";replResult=null;replError=null;hasReplResult=!1;appendToRepl(t){const e=`state.${t}()`;this.executionCode.trim()?this.executionCode+="\n"+e:this.executionCode=e}executeSnippet(){if(this.inspectedObject&&this.executionCode.trim()){this.replResult=null,this.replError=null,this.hasReplResult=!1;try{let t;new Function("state","return "+this.executionCode),new Function("state",`\n try {\n return (function() { \n return ${this.executionCode}; \n })();\n } catch (e) {\n // If it wasn't an expression, maybe it was a statement?\n // But we wrapped it in return...\n // Let's try executing as statements if the first failed or if we prefer statements.\n // But usually console is expression-based.\n throw e; \n }\n `);try{t=new Function("state",`return (${this.executionCode})`)(this.inspectedObject)}catch(e){t=new Function("state",this.executionCode)(this.inspectedObject)}this.replResult=t,this.hasReplResult=!0,ConsoleLogsUtility.info(this,"REPL Execution",{code:this.executionCode,result:t})}catch(t){this.replError=t.message||t,ConsoleLogsUtility.error(this,"REPL Error",t)}}}isObject(t){return null!==t&&"object"==typeof t}getPrototypeMethods(t){if(null===t||"object"!=typeof t)return[];const e=[];let r=t;for(;r&&r!==Object.prototype;)Object.getOwnPropertyNames(r).forEach(t=>{Object.getOwnPropertyDescriptor(r,t),"function"!=typeof r[t]||"constructor"===t||t.startsWith("_")||e.includes(t)||e.push(t)}),r=Object.getPrototypeOf(r);return e.sort()}isLevelEnabled(t,e){return t.levels.includes(e)}updateClassLevel(t,e,r){const n=r.target.checked,o=this.classConfigs.find(e=>e.className===t);if(!o)return;let a=[...o.levels];n?a.includes(e)||a.push(e):a=a.filter(t=>t!==e),ConsoleLogsConfig.setClassLevels(t,a)}removeClass(t){ConsoleLogsConfig.removeClassConfig(t)}toggleDropdown(t,e){e.stopPropagation();const r=t.className;if(this.openDropdownClass===r)return this.openDropdownClass=null,void(this.selectedConfig=null);this.openDropdownClass=r,this.selectedConfig=t;const n=e.currentTarget.getBoundingClientRect();this.dropdownTop=n.bottom+5,this.dropdownLeft=n.left}closeDropdown(){this.openDropdownClass=null,this.selectedConfig=null}getSelectedLevelsLabel(t){return t.levels.length===this.availableLevels.length?"ALL":0===t.levels.length?"None":t.levels.sort((t,e)=>this.availableLevels.indexOf(t)-this.availableLevels.indexOf(e)).join(", ")}toggleNewClassDropdown(t){if(t.stopPropagation(),"__NEW__"===this.openDropdownClass)return void this.closeDropdown();this.openDropdownClass="__NEW__",this.selectedConfig=null;const e=t.currentTarget.getBoundingClientRect();this.dropdownTop=e.bottom+5,this.dropdownLeft=e.left}updateNewClassLevel(t,e){this.newClassLevels[t]=e.target.checked}getNewClassLevelsLabel(){const t=this.availableLevels.filter(t=>this.newClassLevels[t]);return t.length===this.availableLevels.length?"ALL":0===t.length?"None":t.join(", ")}addNewClass(){if(!this.newClassName.trim())return;const t=[];this.availableLevels.forEach(e=>{this.newClassLevels[e]&&t.push(e)}),ConsoleLogsConfig.setClassLevels(this.newClassName.trim(),t),this.newClassName="",this.newClassLevels={}}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ConsoleTabComponent,deps:[{token:t.ChangeDetectorRef}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:ConsoleTabComponent,isStandalone:!0,selector:"asor-console-tab",viewQueries:[{propertyName:"logsContainer",first:!0,predicate:["logsContainer"],descendants:!0}],ngImport:t,template:'<div class="console-tab-container">\r\n\t\x3c!-- Transparent backdrop to close dropdowns --\x3e\r\n\t<div class="dropdown-backdrop" *ngIf="openDropdownClass" (click)="closeDropdown()"></div>\r\n\r\n\t\x3c!-- Root Dropdown Menu --\x3e\r\n\t<div\r\n\t\tclass="dropdown-menu fixed-dropdown"\r\n\t\t*ngIf="openDropdownClass && (selectedConfig || openDropdownClass === \'__NEW__\')"\r\n\t\t[style.top.px]="dropdownTop"\r\n\t\t[style.left.px]="dropdownLeft"\r\n\t\t(click)="$event.stopPropagation()"\r\n\t>\r\n\t\t\x3c!-- Existing Class Mode --\x3e\r\n\t\t<ng-container *ngIf="selectedConfig">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="isLevelEnabled(selectedConfig, level)"\r\n\t\t\t\t\t(change)="updateClassLevel(selectedConfig.className, level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\r\n\t\t\x3c!-- New Class Mode --\x3e\r\n\t\t<ng-container *ngIf="openDropdownClass === \'__NEW__\'">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="newClassLevels[level]"\r\n\t\t\t\t\t(change)="updateNewClassLevel(level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div class="console-grid">\r\n\t\t\x3c!-- LEFT TILE: Configuration --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile config-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'config\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'logs\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'config\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'config\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'config\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Configuration</h4>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="console-summary" *ngIf="mobileExpandedSection !== \'config\'">\r\n\t\t\t\tDefaults levels logs: {{ defaultLevels.join(\', \') || \'NONE/OFF\' }}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class="table-container">\r\n\t\t\t\t<table class="config-table">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<th>Class</th>\r\n\t\t\t\t\t\t\t<th>Levels</th>\r\n\t\t\t\t\t\t\t<th class="actions-col"></th>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor="let config of classConfigs">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t{{ config.className }}\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass="class-count"\r\n\t\t\t\t\t\t\t\t\t*ngIf="getClassLogCount(config.className) > 0"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t({{ getClassLogCount(config.className) }})\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleDropdown(config, $event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetSelectedLevelsLabel(config)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn delete"\r\n\t\t\t\t\t\t\t\t\t(click)="removeClass(config.className)"\r\n\t\t\t\t\t\t\t\t\ttitle="Remove"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t✕\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t\t<tfoot>\r\n\t\t\t\t\t\t<tr class="add-row">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="input-text-small"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="newClassName"\r\n\t\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\t\tplaceholder="New Class..."\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleNewClassDropdown($event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetNewClassLevelsLabel() || \'Select Levels\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn add"\r\n\t\t\t\t\t\t\t\t\t[disabled]="!newClassName"\r\n\t\t\t\t\t\t\t\t\t(click)="addNewClass()"\r\n\t\t\t\t\t\t\t\t\ttitle="Add"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t\x3c!-- RIGHT TILE: Logs --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile logs-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'logs\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'config\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'logs\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'logs\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'logs\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Logs Stream</h4>\r\n\t\t\t\t\t<div class="log-counts">\r\n\t\t\t\t\t\t<ng-container *ngFor="let level of availableLevels">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="count-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="level !== \'ALL\' && logCounts[level]"\r\n\t\t\t\t\t\t\t\t[ngClass]="[\r\n\t\t\t\t\t\t\t\t\tlevel.toLowerCase(),\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level) ? \'selected\' : \'\',\r\n\t\t\t\t\t\t\t\t]"\r\n\t\t\t\t\t\t\t\t[title]="\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level)\r\n\t\t\t\t\t\t\t\t\t\t? \'Clear filter\'\r\n\t\t\t\t\t\t\t\t\t\t: \'Add filter for \' + level\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t(click)="filterByLevel(level)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ level }}: <b>{{ logCounts[level] }}</b>\r\n\t\t\t\t\t\t\t\t<span class="clear-filter-icon" *ngIf="selectedLevels.has(level)"\r\n\t\t\t\t\t\t\t\t\t>✕</span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="search-input"\r\n\t\t\t\t\t\t[(ngModel)]="searchTerm"\r\n\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\tplaceholder="Search logs..."\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="icon-btn clear" (click)="clearLogs()" title="Clear Logs">\r\n\t\t\t\t\t\t✕ Clear\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="logs-container" #logsContainer (scroll)="onLogScroll()">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass="log-entry"\r\n\t\t\t\t\t*ngFor="let log of filteredLogs"\r\n\t\t\t\t\t[ngClass]="log.level.toLowerCase()"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class="log-badge">{{ log.level }}</span>\r\n\t\t\t\t\t<span class="log-time">{{ log.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass="log-class"\r\n\t\t\t\t\t\t[class.clickable]="log.source"\r\n\t\t\t\t\t\t[title]="log.source ? \'Inspect \' + log.className : \'\'"\r\n\t\t\t\t\t\t(click)="log.source ? inspectObject(log.source, log) : null"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t[{{ log.className }}]\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class="log-msg">{{ log.message }}</span>\r\n\r\n\t\t\t\t\t<div class="log-params" *ngIf="log.params.length">\r\n\t\t\t\t\t\t<ng-container *ngFor="let param of log.params">\r\n\t\t\t\t\t\t\t<span class="param-primitive" *ngIf="!isObject(param)">{{\r\n\t\t\t\t\t\t\t\tparam\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="btn-inspect"\r\n\t\t\t\t\t\t\t\t*ngIf="isObject(param)"\r\n\t\t\t\t\t\t\t\t(click)="inspectObject(param)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t🔍 Object\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="empty-logs" *ngIf="logs.length === 0">Waiting for logs...</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t\x3c!-- Inspector Modal/Overlay --\x3e\r\n\t<div class="inspector-overlay" *ngIf="inspectedObject" (click)="closeInspector()">\r\n\t\t<div class="inspector-panel" (click)="$event.stopPropagation()">\r\n\t\t\t<div class="inspector-header">\r\n\t\t\t\t<div class="header-content">\r\n\t\t\t\t\t<h4>Object Inspector</h4>\r\n\t\t\t\t\t<div class="inspector-meta" *ngIf="inspectedLog">\r\n\t\t\t\t\t\t<span class="meta-badge" [ngClass]="inspectedLog.level.toLowerCase()">{{\r\n\t\t\t\t\t\t\tinspectedLog.level\r\n\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t<span class="meta-class">[{{ inspectedLog.className }}]</span>\r\n\t\t\t\t\t\t<span class="meta-time">{{ inspectedLog.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button class="close-btn" (click)="closeInspector()">✕</button>\r\n\t\t\t</div>\r\n\t\t\t<div class="inspector-content">\r\n\t\t\t\t<div class="inspector-split">\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>State</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="inspectedObject" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObjectMethods.length > 0">\r\n\t\t\t\t\t\t<h5>Methods</h5>\r\n\t\t\t\t\t\t<div class="methods-list">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="method-btn"\r\n\t\t\t\t\t\t\t\t*ngFor="let method of inspectedObjectMethods"\r\n\t\t\t\t\t\t\t\t(click)="appendToRepl(method)"\r\n\t\t\t\t\t\t\t\ttitle="Add to REPL"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ method }}()\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>Console REPL</h5>\r\n\t\t\t\t\t\t<div class="repl-container">\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t[(ngModel)]="executionCode"\r\n\t\t\t\t\t\t\t\t(keydown.control.enter)="executeSnippet()"\r\n\t\t\t\t\t\t\t\tplaceholder="Execute code (e.g. state.createDataSet(...))"\r\n\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t<button class="repl-btn" (click)="executeSnippet()">Execute</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="hasReplResult">\r\n\t\t\t\t\t\t<h5>Result</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="replResult" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section error-section" *ngIf="replError">\r\n\t\t\t\t\t\t<h5>Error</h5>\r\n\t\t\t\t\t\t<div class="error-msg">{{ replError }}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".console-tab-container{height:100%;display:flex;flex-direction:column}.console-grid{display:grid;grid-template-columns:400px 1fr;gap:16px;height:100%}.tile{background-color:#252526;border-radius:6px;border:1px solid #333;display:flex;flex-direction:column;overflow:hidden;height:100%}.tile-header{padding:10px 12px;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;background-color:#2d2d2d}.tile-header h4{margin:0;font-size:12px;text-transform:uppercase;color:#999;font-weight:600;letter-spacing:.5px}.tile-header .header-actions,.header-title-group{display:flex;align-items:center;gap:8px}.header-title-group .log-counts{display:flex;gap:6px;margin-left:8px}.header-title-group .log-counts .count-badge{font-size:10px;padding:2px 6px;border-radius:10px;font-weight:600;color:#fff;background-color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.header-title-group .log-counts .count-badge:hover{opacity:.8}.header-title-group .log-counts .count-badge.info{background-color:#0dcaf033;color:#0dcaf0;border:1px solid rgba(13,202,240,.3)}.header-title-group .log-counts .count-badge.debug{background-color:#a855f733;color:#a855f7;border:1px solid rgba(168,85,247,.3)}.header-title-group .log-counts .count-badge.warning{background-color:#f59e0b33;color:#f59e0b;border:1px solid rgba(245,158,11,.3)}.header-title-group .log-counts .count-badge.selected{opacity:1;border:1px solid #fff;box-shadow:0 0 4px #ffffff80}.header-title-group .log-counts .count-badge.selected.info{background-color:#0dcaf0;color:#000}.header-title-group .log-counts .count-badge.selected.debug{background-color:#a855f7;color:#fff}.header-title-group .log-counts .count-badge.selected.warning{background-color:#f59e0b;color:#000}.header-title-group .log-counts .count-badge.selected.error{background-color:#ef4444;color:#fff}.header-title-group .log-counts .count-badge .clear-filter-icon{margin-left:4px;font-size:8px;font-weight:700}.table-container,.logs-container{flex:1;overflow-y:auto}.table-container::-webkit-scrollbar,.logs-container::-webkit-scrollbar{width:10px;height:10px}.table-container::-webkit-scrollbar-track,.logs-container::-webkit-scrollbar-track{background:#1e1e1e}.table-container::-webkit-scrollbar-thumb,.logs-container::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.table-container::-webkit-scrollbar-thumb:hover,.logs-container::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.config-table{width:100%;border-collapse:collapse;font-size:12px}.config-table th,.config-table td{border-bottom:1px solid #333;padding:8px 12px;text-align:left;vertical-align:middle;color:#ccc}.config-table th{background-color:#2d2d2d;font-weight:600;color:#999;text-transform:uppercase;font-size:11px;position:sticky;top:0;z-index:10}.config-table tfoot{background-color:#2d2d2d;position:sticky;bottom:0;z-index:10}.config-table tfoot td{border-top:1px solid #333}.config-table tr:hover td{background-color:#2a2d2e}.config-table .class-count{color:#888;font-size:11px;margin-left:4px}.input-text-small{background-color:#3c3c3c;border:1px solid #3c3c3c;color:#fff;padding:4px 8px;border-radius:3px;width:100%;font-size:12px}.input-text-small:focus{outline:none;border-color:#007acc;background-color:#444}.input-text-small::placeholder{color:#888}.multiselect-container{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 8px;background-color:#3c3c3c;border:1px solid #454545;border-radius:4px;min-width:120px;color:#fff;font-size:11px}.dropdown-trigger:hover{background-color:#444;border-color:#007acc}.dropdown-trigger .selected-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}.dropdown-trigger .arrow{font-size:8px;color:#999}.level-checks{display:flex;gap:10px;flex-wrap:wrap}.level-check{display:flex;align-items:center;gap:4px;cursor:pointer;font-size:11px;color:#bbb;-webkit-user-select:none;user-select:none}.level-check:hover{color:#fff}.level-check input{accent-color:#007acc}.icon-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;transition:all .2s;display:flex;align-items:center;justify-content:center}.icon-btn.delete{color:#f48771}.icon-btn.delete:hover{background-color:#f487711a}.icon-btn.add{color:#89d185;font-size:16px}.icon-btn.add:hover:not(:disabled){background-color:#89d1851a}.icon-btn.add:disabled{color:#555;cursor:not-allowed}.icon-btn.clear{font-size:11px;color:#bbb;border:1px solid #3e3e42;padding:2px 8px}.icon-btn.clear:hover{background-color:#3e3e42;color:#fff}.icon-btn.expand-btn{display:none}@media (max-width: 768px){.icon-btn.expand-btn{display:flex;font-size:10px;color:#999;border:1px solid #3e3e42;width:20px;height:20px;padding:0}.icon-btn.expand-btn:hover{background-color:#3e3e42;color:#fff}}.search-input{background-color:#3c3c3c;border:1px solid #3e3e42;color:#fff;padding:3px 8px;border-radius:4px;font-size:11px;width:150px;transition:all .2s}.search-input:focus{outline:none;border-color:#007acc;background-color:#444;width:180px}.search-input::placeholder{color:#888}.logs-container{background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px;padding:8px 12px}.log-entry{padding:6px 0;border-bottom:1px solid #2d2d2d;display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;line-height:1.4}.log-entry:last-child{border-bottom:none}.log-entry.info .log-badge{background-color:#0dcaf0;color:#000;border-radius:3px;font-weight:700}.log-entry.info .log-msg,.log-entry.info .log-class{color:#0dcaf0}.log-entry.debug .log-badge{background-color:#a855f7;color:#fff;border-radius:3px;font-weight:700}.log-entry.debug .log-msg,.log-entry.debug .log-class{color:#a855f7}.log-entry.warning .log-badge{background-color:#f59e0b;color:#000;border-radius:3px;font-weight:700}.log-entry.warning .log-msg,.log-entry.warning .log-class{color:#f59e0b}.log-entry.error .log-badge{background-color:#ef4444;color:#fff;border-radius:3px;font-weight:700}.log-entry.error .log-msg,.log-entry.error .log-class{color:#ef4444;font-weight:700}.log-time{color:#6a9955;font-size:11px;min-width:60px}.log-badge{font-weight:700;width:60px;font-size:11px;text-align:center}.log-class{color:#569cd6}.log-class.clickable{cursor:pointer;text-decoration:underline}.log-class.clickable:hover{opacity:.8;color:#9cdcfe}.log-msg{color:#ccc;word-break:break-all}.log-params{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-left:8px}.param-primitive{color:#9cdcfe;background:#2a2d2e;padding:0 4px;border-radius:3px}.btn-inspect{background-color:#2d2d2d;border:1px solid #3e3e42;color:#4fc1ff;padding:2px 8px;border-radius:12px;cursor:pointer;font-size:11px;font-family:inherit;transition:all .2s;display:inline-flex;align-items:center;gap:4px}.btn-inspect:hover{background-color:#3e3e42;border-color:#4fc1ff;color:#fff}.empty-logs{color:#666;text-align:center;padding:40px;font-style:italic}.inspector-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;justify-content:center;align-items:center;padding:40px}.inspector-panel{background-color:#252526;border-radius:8px;width:100%;max-width:700px;height:100%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 50px #000000b3;border:1px solid #454545;animation:zoomIn .25s cubic-bezier(.16,1,.3,1)}@keyframes zoomIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.inspector-header{padding:12px 16px;background-color:#2d2d2d;border-bottom:1px solid #333;border-top-left-radius:8px;border-top-right-radius:8px;display:flex;justify-content:space-between;align-items:center}.inspector-header .header-content{display:flex;flex-direction:column;gap:2px}.inspector-header h4{margin:0;color:#eee;font-size:14px;font-weight:600}.inspector-header .inspector-meta{display:flex;gap:8px;align-items:center;font-size:11px;color:#888;font-family:monospace}.inspector-header .inspector-meta .meta-badge{padding:2px 6px;border-radius:3px;font-weight:700;font-size:10px}.inspector-header .inspector-meta .meta-badge.info,.inspector-header .inspector-meta .meta-badge.all{background-color:#0dcaf0;color:#000}.inspector-header .inspector-meta .meta-badge.debug{background-color:#a855f7;color:#fff}.inspector-header .inspector-meta .meta-badge.warning{background-color:#f59e0b;color:#000}.inspector-header .inspector-meta .meta-badge.error{background-color:#ef4444;color:#fff}.inspector-header .inspector-meta .meta-class{color:#569cd6}.inspector-header .inspector-meta .meta-time{color:#6a9955}.inspector-header .close-btn{background:none;border:none;color:#999;font-size:18px;cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.inspector-header .close-btn:hover{background-color:#3e3e42;color:#fff}.inspector-content{flex:1;overflow-y:auto;padding:20px;background-color:#1e1e1e}.inspector-content::-webkit-scrollbar{width:10px;height:10px}.inspector-content::-webkit-scrollbar-track{background:#1e1e1e}.inspector-content::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.inspector-content::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.inspector-split{display:flex;flex-direction:column;gap:20px}.inspector-section h5{margin:0 0 10px;color:#999;font-size:12px;text-transform:uppercase;border-bottom:1px solid #333;padding-bottom:4px}.methods-list{display:flex;flex-wrap:wrap;gap:8px}.method-btn{background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;padding:4px 10px;border-radius:4px;cursor:pointer;font-family:Consolas,monospace;font-size:12px;transition:all .2s}.method-btn:hover{background-color:#3e3e42;border-color:#dcdcaa;color:#fff}.method-btn:active{transform:translateY(1px)}.repl-container{display:flex;flex-direction:column;gap:8px}.repl-container textarea{width:100%;height:80px;background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;font-family:Consolas,monospace;padding:8px;resize:vertical;outline:none}.repl-container textarea:focus{border-color:#007fd4}.repl-container textarea::-webkit-scrollbar{width:8px;height:8px}.repl-container textarea::-webkit-scrollbar-track{background:#2d2d2d}.repl-container textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:4px}.repl-container textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.repl-container .repl-btn{align-self:flex-end;background-color:#0e639c;color:#fff;border:none;padding:6px 12px;cursor:pointer;border-radius:2px}.repl-container .repl-btn:hover{background-color:#17b}.error-section .error-msg{color:#f48771;background-color:#3e3e42;padding:8px;border-left:3px solid #f48771;font-family:monospace;white-space:pre-wrap}.dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;cursor:default}.dropdown-menu.fixed-dropdown{position:fixed;z-index:10000;background-color:#252526;border:1px solid #454545;box-shadow:0 4px 10px #00000080;border-radius:4px;padding:4px 0;min-width:150px;max-height:200px;overflow-y:auto}.dropdown-menu.fixed-dropdown .level-check-item{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;color:#ccc;transition:background-color .1s;-webkit-user-select:none;user-select:none;font-size:11px}.dropdown-menu.fixed-dropdown .level-check-item:hover{background-color:#007acc;color:#fff}.dropdown-menu.fixed-dropdown .level-check-item input{accent-color:#fff}.dropdown-menu.fixed-dropdown::-webkit-scrollbar{width:8px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-track{background:#252526}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb{background:#444;border-radius:4px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb:hover{background:#555}@media (max-width: 768px){.console-grid{display:flex;flex-direction:column;gap:10px;height:100%;overflow:hidden}.tile{transition:all .3s cubic-bezier(.25,.8,.25,1);display:flex;flex-direction:column}.tile.collapsed{flex:0 0 auto;max-height:40px!important;overflow:hidden}.tile.collapsed .table-container,.tile.collapsed .logs-container,.tile.collapsed .console-summary{display:none}.tile.expanded{flex:1 1 auto;max-height:100%!important;height:100%}.tile.config-tile{max-height:40vh}.tile.config-tile.expanded{max-height:100%}.inspector-panel{width:100%;height:100%;max-width:none;max-height:none;border-radius:0}.inspector-header{border-radius:0}.tile-header{flex-direction:column;align-items:flex-start;gap:8px}.tile-header .header-actions{width:100%;display:flex;justify-content:space-between}.tile-header .header-actions .search-input{flex-grow:1;margin-right:8px;width:auto}.tile-header .header-actions .search-input:focus{width:auto}}.console-summary{padding:4px;font-size:11px;color:#888}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:ConsoleTabComponent,decorators:[{type:p,args:[{selector:"asor-console-tab",standalone:!0,imports:[w,K,JsonViewComponent],encapsulation:d.None,template:'<div class="console-tab-container">\r\n\t\x3c!-- Transparent backdrop to close dropdowns --\x3e\r\n\t<div class="dropdown-backdrop" *ngIf="openDropdownClass" (click)="closeDropdown()"></div>\r\n\r\n\t\x3c!-- Root Dropdown Menu --\x3e\r\n\t<div\r\n\t\tclass="dropdown-menu fixed-dropdown"\r\n\t\t*ngIf="openDropdownClass && (selectedConfig || openDropdownClass === \'__NEW__\')"\r\n\t\t[style.top.px]="dropdownTop"\r\n\t\t[style.left.px]="dropdownLeft"\r\n\t\t(click)="$event.stopPropagation()"\r\n\t>\r\n\t\t\x3c!-- Existing Class Mode --\x3e\r\n\t\t<ng-container *ngIf="selectedConfig">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="isLevelEnabled(selectedConfig, level)"\r\n\t\t\t\t\t(change)="updateClassLevel(selectedConfig.className, level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\r\n\t\t\x3c!-- New Class Mode --\x3e\r\n\t\t<ng-container *ngIf="openDropdownClass === \'__NEW__\'">\r\n\t\t\t<label class="level-check-item" *ngFor="let level of availableLevels">\r\n\t\t\t\t<input\r\n\t\t\t\t\t[checked]="newClassLevels[level]"\r\n\t\t\t\t\t(change)="updateNewClassLevel(level, $event)"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t{{ level }}\r\n\t\t\t</label>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<div class="console-grid">\r\n\t\t\x3c!-- LEFT TILE: Configuration --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile config-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'config\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'logs\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'config\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'config\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'config\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Configuration</h4>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="console-summary" *ngIf="mobileExpandedSection !== \'config\'">\r\n\t\t\t\tDefaults levels logs: {{ defaultLevels.join(\', \') || \'NONE/OFF\' }}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class="table-container">\r\n\t\t\t\t<table class="config-table">\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<th>Class</th>\r\n\t\t\t\t\t\t\t<th>Levels</th>\r\n\t\t\t\t\t\t\t<th class="actions-col"></th>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</thead>\r\n\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t<tr *ngFor="let config of classConfigs">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t{{ config.className }}\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass="class-count"\r\n\t\t\t\t\t\t\t\t\t*ngIf="getClassLogCount(config.className) > 0"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t({{ getClassLogCount(config.className) }})\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleDropdown(config, $event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetSelectedLevelsLabel(config)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn delete"\r\n\t\t\t\t\t\t\t\t\t(click)="removeClass(config.className)"\r\n\t\t\t\t\t\t\t\t\ttitle="Remove"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t✕\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tbody>\r\n\t\t\t\t\t<tfoot>\r\n\t\t\t\t\t\t<tr class="add-row">\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="input-text-small"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="newClassName"\r\n\t\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\t\tplaceholder="New Class..."\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t<div class="multiselect-container">\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="dropdown-trigger"\r\n\t\t\t\t\t\t\t\t\t\t(click)="toggleNewClassDropdown($event)"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="selected-label">{{\r\n\t\t\t\t\t\t\t\t\t\t\tgetNewClassLevelsLabel() || \'Select Levels\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="arrow">▼</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t<td class="actions-col">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass="icon-btn add"\r\n\t\t\t\t\t\t\t\t\t[disabled]="!newClassName"\r\n\t\t\t\t\t\t\t\t\t(click)="addNewClass()"\r\n\t\t\t\t\t\t\t\t\ttitle="Add"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t+\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t\x3c!-- RIGHT TILE: Logs --\x3e\r\n\t\t<div\r\n\t\t\tclass="tile logs-tile"\r\n\t\t\t[class.expanded]="mobileExpandedSection === \'logs\'"\r\n\t\t\t[class.collapsed]="mobileExpandedSection === \'config\'"\r\n\t\t>\r\n\t\t\t<div class="tile-header">\r\n\t\t\t\t<div class="header-title-group">\r\n\t\t\t\t\t<button\r\n\t\t\t\t\t\tclass="icon-btn expand-btn"\r\n\t\t\t\t\t\t(click)="toggleSection(\'logs\')"\r\n\t\t\t\t\t\ttitle="{{ mobileExpandedSection === \'logs\' ? \'Collapse\' : \'Expand\' }}"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ mobileExpandedSection === \'logs\' ? \'▼\' : \'►\' }}\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<h4>Logs Stream</h4>\r\n\t\t\t\t\t<div class="log-counts">\r\n\t\t\t\t\t\t<ng-container *ngFor="let level of availableLevels">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="count-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="level !== \'ALL\' && logCounts[level]"\r\n\t\t\t\t\t\t\t\t[ngClass]="[\r\n\t\t\t\t\t\t\t\t\tlevel.toLowerCase(),\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level) ? \'selected\' : \'\',\r\n\t\t\t\t\t\t\t\t]"\r\n\t\t\t\t\t\t\t\t[title]="\r\n\t\t\t\t\t\t\t\t\tselectedLevels.has(level)\r\n\t\t\t\t\t\t\t\t\t\t? \'Clear filter\'\r\n\t\t\t\t\t\t\t\t\t\t: \'Add filter for \' + level\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t(click)="filterByLevel(level)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ level }}: <b>{{ logCounts[level] }}</b>\r\n\t\t\t\t\t\t\t\t<span class="clear-filter-icon" *ngIf="selectedLevels.has(level)"\r\n\t\t\t\t\t\t\t\t\t>✕</span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="search-input"\r\n\t\t\t\t\t\t[(ngModel)]="searchTerm"\r\n\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\tplaceholder="Search logs..."\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="icon-btn clear" (click)="clearLogs()" title="Clear Logs">\r\n\t\t\t\t\t\t✕ Clear\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="logs-container" #logsContainer (scroll)="onLogScroll()">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass="log-entry"\r\n\t\t\t\t\t*ngFor="let log of filteredLogs"\r\n\t\t\t\t\t[ngClass]="log.level.toLowerCase()"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class="log-badge">{{ log.level }}</span>\r\n\t\t\t\t\t<span class="log-time">{{ log.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass="log-class"\r\n\t\t\t\t\t\t[class.clickable]="log.source"\r\n\t\t\t\t\t\t[title]="log.source ? \'Inspect \' + log.className : \'\'"\r\n\t\t\t\t\t\t(click)="log.source ? inspectObject(log.source, log) : null"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t[{{ log.className }}]\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class="log-msg">{{ log.message }}</span>\r\n\r\n\t\t\t\t\t<div class="log-params" *ngIf="log.params.length">\r\n\t\t\t\t\t\t<ng-container *ngFor="let param of log.params">\r\n\t\t\t\t\t\t\t<span class="param-primitive" *ngIf="!isObject(param)">{{\r\n\t\t\t\t\t\t\t\tparam\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="btn-inspect"\r\n\t\t\t\t\t\t\t\t*ngIf="isObject(param)"\r\n\t\t\t\t\t\t\t\t(click)="inspectObject(param)"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t🔍 Object\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="empty-logs" *ngIf="logs.length === 0">Waiting for logs...</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t\x3c!-- Inspector Modal/Overlay --\x3e\r\n\t<div class="inspector-overlay" *ngIf="inspectedObject" (click)="closeInspector()">\r\n\t\t<div class="inspector-panel" (click)="$event.stopPropagation()">\r\n\t\t\t<div class="inspector-header">\r\n\t\t\t\t<div class="header-content">\r\n\t\t\t\t\t<h4>Object Inspector</h4>\r\n\t\t\t\t\t<div class="inspector-meta" *ngIf="inspectedLog">\r\n\t\t\t\t\t\t<span class="meta-badge" [ngClass]="inspectedLog.level.toLowerCase()">{{\r\n\t\t\t\t\t\t\tinspectedLog.level\r\n\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t<span class="meta-class">[{{ inspectedLog.className }}]</span>\r\n\t\t\t\t\t\t<span class="meta-time">{{ inspectedLog.timestamp.split(\' \')[1] }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<button class="close-btn" (click)="closeInspector()">✕</button>\r\n\t\t\t</div>\r\n\t\t\t<div class="inspector-content">\r\n\t\t\t\t<div class="inspector-split">\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>State</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="inspectedObject" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObjectMethods.length > 0">\r\n\t\t\t\t\t\t<h5>Methods</h5>\r\n\t\t\t\t\t\t<div class="methods-list">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="method-btn"\r\n\t\t\t\t\t\t\t\t*ngFor="let method of inspectedObjectMethods"\r\n\t\t\t\t\t\t\t\t(click)="appendToRepl(method)"\r\n\t\t\t\t\t\t\t\ttitle="Add to REPL"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ method }}()\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="inspectedObject">\r\n\t\t\t\t\t\t<h5>Console REPL</h5>\r\n\t\t\t\t\t\t<div class="repl-container">\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t[(ngModel)]="executionCode"\r\n\t\t\t\t\t\t\t\t(keydown.control.enter)="executeSnippet()"\r\n\t\t\t\t\t\t\t\tplaceholder="Execute code (e.g. state.createDataSet(...))"\r\n\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t<button class="repl-btn" (click)="executeSnippet()">Execute</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section" *ngIf="hasReplResult">\r\n\t\t\t\t\t\t<h5>Result</h5>\r\n\t\t\t\t\t\t<asor-json-view [data]="replResult" [expandDepth]="1"></asor-json-view>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="inspector-section error-section" *ngIf="replError">\r\n\t\t\t\t\t\t<h5>Error</h5>\r\n\t\t\t\t\t\t<div class="error-msg">{{ replError }}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".console-tab-container{height:100%;display:flex;flex-direction:column}.console-grid{display:grid;grid-template-columns:400px 1fr;gap:16px;height:100%}.tile{background-color:#252526;border-radius:6px;border:1px solid #333;display:flex;flex-direction:column;overflow:hidden;height:100%}.tile-header{padding:10px 12px;border-bottom:1px solid #333;display:flex;justify-content:space-between;align-items:center;background-color:#2d2d2d}.tile-header h4{margin:0;font-size:12px;text-transform:uppercase;color:#999;font-weight:600;letter-spacing:.5px}.tile-header .header-actions,.header-title-group{display:flex;align-items:center;gap:8px}.header-title-group .log-counts{display:flex;gap:6px;margin-left:8px}.header-title-group .log-counts .count-badge{font-size:10px;padding:2px 6px;border-radius:10px;font-weight:600;color:#fff;background-color:#555;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.header-title-group .log-counts .count-badge:hover{opacity:.8}.header-title-group .log-counts .count-badge.info{background-color:#0dcaf033;color:#0dcaf0;border:1px solid rgba(13,202,240,.3)}.header-title-group .log-counts .count-badge.debug{background-color:#a855f733;color:#a855f7;border:1px solid rgba(168,85,247,.3)}.header-title-group .log-counts .count-badge.warning{background-color:#f59e0b33;color:#f59e0b;border:1px solid rgba(245,158,11,.3)}.header-title-group .log-counts .count-badge.selected{opacity:1;border:1px solid #fff;box-shadow:0 0 4px #ffffff80}.header-title-group .log-counts .count-badge.selected.info{background-color:#0dcaf0;color:#000}.header-title-group .log-counts .count-badge.selected.debug{background-color:#a855f7;color:#fff}.header-title-group .log-counts .count-badge.selected.warning{background-color:#f59e0b;color:#000}.header-title-group .log-counts .count-badge.selected.error{background-color:#ef4444;color:#fff}.header-title-group .log-counts .count-badge .clear-filter-icon{margin-left:4px;font-size:8px;font-weight:700}.table-container,.logs-container{flex:1;overflow-y:auto}.table-container::-webkit-scrollbar,.logs-container::-webkit-scrollbar{width:10px;height:10px}.table-container::-webkit-scrollbar-track,.logs-container::-webkit-scrollbar-track{background:#1e1e1e}.table-container::-webkit-scrollbar-thumb,.logs-container::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.table-container::-webkit-scrollbar-thumb:hover,.logs-container::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.config-table{width:100%;border-collapse:collapse;font-size:12px}.config-table th,.config-table td{border-bottom:1px solid #333;padding:8px 12px;text-align:left;vertical-align:middle;color:#ccc}.config-table th{background-color:#2d2d2d;font-weight:600;color:#999;text-transform:uppercase;font-size:11px;position:sticky;top:0;z-index:10}.config-table tfoot{background-color:#2d2d2d;position:sticky;bottom:0;z-index:10}.config-table tfoot td{border-top:1px solid #333}.config-table tr:hover td{background-color:#2a2d2e}.config-table .class-count{color:#888;font-size:11px;margin-left:4px}.input-text-small{background-color:#3c3c3c;border:1px solid #3c3c3c;color:#fff;padding:4px 8px;border-radius:3px;width:100%;font-size:12px}.input-text-small:focus{outline:none;border-color:#007acc;background-color:#444}.input-text-small::placeholder{color:#888}.multiselect-container{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 8px;background-color:#3c3c3c;border:1px solid #454545;border-radius:4px;min-width:120px;color:#fff;font-size:11px}.dropdown-trigger:hover{background-color:#444;border-color:#007acc}.dropdown-trigger .selected-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}.dropdown-trigger .arrow{font-size:8px;color:#999}.level-checks{display:flex;gap:10px;flex-wrap:wrap}.level-check{display:flex;align-items:center;gap:4px;cursor:pointer;font-size:11px;color:#bbb;-webkit-user-select:none;user-select:none}.level-check:hover{color:#fff}.level-check input{accent-color:#007acc}.icon-btn{background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;transition:all .2s;display:flex;align-items:center;justify-content:center}.icon-btn.delete{color:#f48771}.icon-btn.delete:hover{background-color:#f487711a}.icon-btn.add{color:#89d185;font-size:16px}.icon-btn.add:hover:not(:disabled){background-color:#89d1851a}.icon-btn.add:disabled{color:#555;cursor:not-allowed}.icon-btn.clear{font-size:11px;color:#bbb;border:1px solid #3e3e42;padding:2px 8px}.icon-btn.clear:hover{background-color:#3e3e42;color:#fff}.icon-btn.expand-btn{display:none}@media (max-width: 768px){.icon-btn.expand-btn{display:flex;font-size:10px;color:#999;border:1px solid #3e3e42;width:20px;height:20px;padding:0}.icon-btn.expand-btn:hover{background-color:#3e3e42;color:#fff}}.search-input{background-color:#3c3c3c;border:1px solid #3e3e42;color:#fff;padding:3px 8px;border-radius:4px;font-size:11px;width:150px;transition:all .2s}.search-input:focus{outline:none;border-color:#007acc;background-color:#444;width:180px}.search-input::placeholder{color:#888}.logs-container{background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas,Monaco,Courier New,monospace;font-size:12px;padding:8px 12px}.log-entry{padding:6px 0;border-bottom:1px solid #2d2d2d;display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;line-height:1.4}.log-entry:last-child{border-bottom:none}.log-entry.info .log-badge{background-color:#0dcaf0;color:#000;border-radius:3px;font-weight:700}.log-entry.info .log-msg,.log-entry.info .log-class{color:#0dcaf0}.log-entry.debug .log-badge{background-color:#a855f7;color:#fff;border-radius:3px;font-weight:700}.log-entry.debug .log-msg,.log-entry.debug .log-class{color:#a855f7}.log-entry.warning .log-badge{background-color:#f59e0b;color:#000;border-radius:3px;font-weight:700}.log-entry.warning .log-msg,.log-entry.warning .log-class{color:#f59e0b}.log-entry.error .log-badge{background-color:#ef4444;color:#fff;border-radius:3px;font-weight:700}.log-entry.error .log-msg,.log-entry.error .log-class{color:#ef4444;font-weight:700}.log-time{color:#6a9955;font-size:11px;min-width:60px}.log-badge{font-weight:700;width:60px;font-size:11px;text-align:center}.log-class{color:#569cd6}.log-class.clickable{cursor:pointer;text-decoration:underline}.log-class.clickable:hover{opacity:.8;color:#9cdcfe}.log-msg{color:#ccc;word-break:break-all}.log-params{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-left:8px}.param-primitive{color:#9cdcfe;background:#2a2d2e;padding:0 4px;border-radius:3px}.btn-inspect{background-color:#2d2d2d;border:1px solid #3e3e42;color:#4fc1ff;padding:2px 8px;border-radius:12px;cursor:pointer;font-size:11px;font-family:inherit;transition:all .2s;display:inline-flex;align-items:center;gap:4px}.btn-inspect:hover{background-color:#3e3e42;border-color:#4fc1ff;color:#fff}.empty-logs{color:#666;text-align:center;padding:40px;font-style:italic}.inspector-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10000;display:flex;justify-content:center;align-items:center;padding:40px}.inspector-panel{background-color:#252526;border-radius:8px;width:100%;max-width:700px;height:100%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 50px #000000b3;border:1px solid #454545;animation:zoomIn .25s cubic-bezier(.16,1,.3,1)}@keyframes zoomIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.inspector-header{padding:12px 16px;background-color:#2d2d2d;border-bottom:1px solid #333;border-top-left-radius:8px;border-top-right-radius:8px;display:flex;justify-content:space-between;align-items:center}.inspector-header .header-content{display:flex;flex-direction:column;gap:2px}.inspector-header h4{margin:0;color:#eee;font-size:14px;font-weight:600}.inspector-header .inspector-meta{display:flex;gap:8px;align-items:center;font-size:11px;color:#888;font-family:monospace}.inspector-header .inspector-meta .meta-badge{padding:2px 6px;border-radius:3px;font-weight:700;font-size:10px}.inspector-header .inspector-meta .meta-badge.info,.inspector-header .inspector-meta .meta-badge.all{background-color:#0dcaf0;color:#000}.inspector-header .inspector-meta .meta-badge.debug{background-color:#a855f7;color:#fff}.inspector-header .inspector-meta .meta-badge.warning{background-color:#f59e0b;color:#000}.inspector-header .inspector-meta .meta-badge.error{background-color:#ef4444;color:#fff}.inspector-header .inspector-meta .meta-class{color:#569cd6}.inspector-header .inspector-meta .meta-time{color:#6a9955}.inspector-header .close-btn{background:none;border:none;color:#999;font-size:18px;cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.inspector-header .close-btn:hover{background-color:#3e3e42;color:#fff}.inspector-content{flex:1;overflow-y:auto;padding:20px;background-color:#1e1e1e}.inspector-content::-webkit-scrollbar{width:10px;height:10px}.inspector-content::-webkit-scrollbar-track{background:#1e1e1e}.inspector-content::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.inspector-content::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.inspector-split{display:flex;flex-direction:column;gap:20px}.inspector-section h5{margin:0 0 10px;color:#999;font-size:12px;text-transform:uppercase;border-bottom:1px solid #333;padding-bottom:4px}.methods-list{display:flex;flex-wrap:wrap;gap:8px}.method-btn{background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;padding:4px 10px;border-radius:4px;cursor:pointer;font-family:Consolas,monospace;font-size:12px;transition:all .2s}.method-btn:hover{background-color:#3e3e42;border-color:#dcdcaa;color:#fff}.method-btn:active{transform:translateY(1px)}.repl-container{display:flex;flex-direction:column;gap:8px}.repl-container textarea{width:100%;height:80px;background-color:#2d2d2d;border:1px solid #3e3e42;color:#dcdcaa;font-family:Consolas,monospace;padding:8px;resize:vertical;outline:none}.repl-container textarea:focus{border-color:#007fd4}.repl-container textarea::-webkit-scrollbar{width:8px;height:8px}.repl-container textarea::-webkit-scrollbar-track{background:#2d2d2d}.repl-container textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:4px}.repl-container textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.repl-container .repl-btn{align-self:flex-end;background-color:#0e639c;color:#fff;border:none;padding:6px 12px;cursor:pointer;border-radius:2px}.repl-container .repl-btn:hover{background-color:#17b}.error-section .error-msg{color:#f48771;background-color:#3e3e42;padding:8px;border-left:3px solid #f48771;font-family:monospace;white-space:pre-wrap}.dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;cursor:default}.dropdown-menu.fixed-dropdown{position:fixed;z-index:10000;background-color:#252526;border:1px solid #454545;box-shadow:0 4px 10px #00000080;border-radius:4px;padding:4px 0;min-width:150px;max-height:200px;overflow-y:auto}.dropdown-menu.fixed-dropdown .level-check-item{display:flex;align-items:center;gap:8px;padding:6px 12px;cursor:pointer;color:#ccc;transition:background-color .1s;-webkit-user-select:none;user-select:none;font-size:11px}.dropdown-menu.fixed-dropdown .level-check-item:hover{background-color:#007acc;color:#fff}.dropdown-menu.fixed-dropdown .level-check-item input{accent-color:#fff}.dropdown-menu.fixed-dropdown::-webkit-scrollbar{width:8px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-track{background:#252526}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb{background:#444;border-radius:4px}.dropdown-menu.fixed-dropdown::-webkit-scrollbar-thumb:hover{background:#555}@media (max-width: 768px){.console-grid{display:flex;flex-direction:column;gap:10px;height:100%;overflow:hidden}.tile{transition:all .3s cubic-bezier(.25,.8,.25,1);display:flex;flex-direction:column}.tile.collapsed{flex:0 0 auto;max-height:40px!important;overflow:hidden}.tile.collapsed .table-container,.tile.collapsed .logs-container,.tile.collapsed .console-summary{display:none}.tile.expanded{flex:1 1 auto;max-height:100%!important;height:100%}.tile.config-tile{max-height:40vh}.tile.config-tile.expanded{max-height:100%}.inspector-panel{width:100%;height:100%;max-width:none;max-height:none;border-radius:0}.inspector-header{border-radius:0}.tile-header{flex-direction:column;align-items:flex-start;gap:8px}.tile-header .header-actions{width:100%;display:flex;justify-content:space-between}.tile-header .header-actions .search-input{flex-grow:1;margin-right:8px;width:auto}.tile-header .header-actions .search-input:focus{width:auto}}.console-summary{padding:4px;font-size:11px;color:#888}\n"]}]}],ctorParameters:()=>[{type:t.ChangeDetectorRef}],propDecorators:{logsContainer:[{type:g,args:["logsContainer"]}]}});class JsonEditorComponent{set jsonString(t){this._jsonString!==t&&(this._jsonString=t||"",this.initialJsonString=this._jsonString,this.isDirty=!1,this.updateHighlighting())}get jsonString(){return this._jsonString}_jsonString="";jsonStringChange=new h;highlightedHtml="";lineNumbersHtml="1";isExpanded=!1;isDirty=!1;initialJsonString="";backdropElement;textareaElement;lineNumbersElement;toggleExpand(){this.isExpanded=!this.isExpanded}onTextareaChange(t){this._jsonString=t.target.value,this.isDirty=this._jsonString!==this.initialJsonString,this.jsonStringChange.emit(this._jsonString),this.updateHighlighting()}onScroll(t){const e=t.target;this.backdropElement&&(this.backdropElement.nativeElement.scrollTop=e.scrollTop,this.backdropElement.nativeElement.scrollLeft=e.scrollLeft),this.lineNumbersElement&&(this.lineNumbersElement.nativeElement.scrollTop=e.scrollTop)}updateHighlighting(){this.highlightedHtml=this.syntaxHighlight(this._jsonString),this.updateLineNumbers()}updateLineNumbers(){if(!this._jsonString)return void(this.lineNumbersHtml="1");const t=this._jsonString.split("\n").length;this.lineNumbersHtml=Array.from({length:t},(t,e)=>e+1).join("\n")}syntaxHighlight(t){return t?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*")(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,(t,e,r,n)=>{let o="json-value-number";if(/^"/.test(t)){if(n)return'<span class="json-key">'+e+"</span>"+n;o="json-value-string"}else/true|false/.test(t)?o="json-value-boolean":/null/.test(t)&&(o="json-value-null");return'<span class="'+o+'">'+t+"</span>"}):""}handleKeyDown(t){if("Tab"===t.key){t.preventDefault();const e=this.textareaElement.nativeElement,r=e.selectionStart,n=e.selectionEnd,o=e.value;e.value=o.substring(0,r)+" "+o.substring(n),e.selectionStart=e.selectionEnd=r+4,this.onTextareaChange({target:e})}}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonEditorComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:JsonEditorComponent,isStandalone:!0,selector:"asor-json-editor",inputs:{jsonString:"jsonString"},outputs:{jsonStringChange:"jsonStringChange"},viewQueries:[{propertyName:"backdropElement",first:!0,predicate:["backdrop"],descendants:!0},{propertyName:"textareaElement",first:!0,predicate:["textarea"],descendants:!0},{propertyName:"lineNumbersElement",first:!0,predicate:["lineNumbers"],descendants:!0}],ngImport:t,template:'<div class="json-editor-backdrop" *ngIf="isExpanded" (click)="toggleExpand()"></div>\r\n<div class="json-editor-wrapper" [class.expanded]="isExpanded">\r\n\t<div class="editor-toolbar">\r\n\t\t<div class="toolbar-left">\r\n\t\t\t<span\r\n\t\t\t\tclass="status-dot"\r\n\t\t\t\t[class.dirty]="isDirty"\r\n\t\t\t\t[title]="isDirty ? \'JSON Alterato\' : \'JSON Originale\'"\r\n\t\t\t></span>\r\n\t\t\t<span class="editor-title">JSON Editor</span>\r\n\t\t</div>\r\n\t\t<button\r\n\t\t\tclass="expand-btn"\r\n\t\t\t[title]="isExpanded ? \'Collapse\' : \'Expand\'"\r\n\t\t\t(click)="toggleExpand()"\r\n\t\t>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="!isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path>\r\n\t\t\t</svg>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M10 14l-7 7"></path>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\t</div>\r\n\t<div class="editor-main-area">\r\n\t\t<div class="editor-line-numbers-container">\r\n\t\t\t<pre class="editor-line-numbers" #lineNumbers>{{ lineNumbersHtml }}</pre>\r\n\t\t</div>\r\n\t\t<div class="json-editor-container">\r\n\t\t\t<pre\r\n\t\t\t\tclass="editor-backdrop"\r\n\t\t\t\t#backdrop\r\n\t\t\t\taria-hidden="true"\r\n\t\t\t><code [innerHTML]="highlightedHtml"></code></pre>\r\n\t\t\t<textarea\r\n\t\t\t\tclass="editor-textarea"\r\n\t\t\t\t#textarea\r\n\t\t\t\t[value]="jsonString"\r\n\t\t\t\t(input)="onTextareaChange($event)"\r\n\t\t\t\t(scroll)="onScroll($event)"\r\n\t\t\t\t(keydown)="handleKeyDown($event)"\r\n\t\t\t\tspellcheck="false"\r\n\t\t\t>\r\n\t\t\t</textarea>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:["asor-json-editor{display:flex;flex-direction:column;flex:1;width:100%;min-height:200px}.json-editor-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#0009;z-index:99998;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.json-editor-wrapper{position:relative;border:1px solid #3c3c3c;border-radius:4px;background-color:#1e1e1e;flex:1;display:flex;flex-direction:column}.json-editor-wrapper.expanded{position:fixed;top:5vh;left:5vw;width:90vw;height:90vh;z-index:99999;box-shadow:0 10px 40px #00000080;border:1px solid #555}.json-editor-wrapper:focus-within{border-color:#007acc}.json-editor-wrapper .editor-toolbar{display:flex;justify-content:flex-end;align-items:center;background-color:#2d2d2d;border-bottom:1px solid #3c3c3c;padding:2px 6px;min-height:22px}.json-editor-wrapper .toolbar-left{display:flex;align-items:center;margin-right:auto;padding-left:6px;gap:6px}.json-editor-wrapper .status-dot{width:8px;height:8px;border-radius:50%;background-color:#5ea33a;display:inline-block;transition:background-color .2s ease}.json-editor-wrapper .status-dot.dirty{background-color:#d19a66;box-shadow:0 0 4px #d19a6666}.json-editor-wrapper .editor-title{color:#ccc;font-family:inherit;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.json-editor-wrapper .expand-btn{background:transparent;border:none;color:#ccc;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;border-radius:3px}.json-editor-wrapper .expand-btn:hover{background-color:#444;color:#fff}.json-editor-wrapper .editor-main-area{flex:1;display:flex;flex-direction:row;overflow:hidden}.json-editor-wrapper .editor-line-numbers-container{position:relative;width:48px;border-right:1px solid #3c3c3c;background-color:#1e1e1e;overflow:hidden;flex-shrink:0}.json-editor-wrapper .editor-line-numbers{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px 8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;color:#858585;text-align:right;box-sizing:border-box;overflow:hidden;-webkit-user-select:none;user-select:none}.json-editor-wrapper .json-editor-container{position:relative;flex:1;overflow:hidden}.json-editor-wrapper .editor-backdrop,.json-editor-wrapper .editor-textarea{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4;border:none;box-sizing:border-box;overflow:auto}.json-editor-wrapper .editor-backdrop{z-index:1;pointer-events:none;color:#d4d4d4;-ms-overflow-style:none;scrollbar-width:none}.json-editor-wrapper .editor-backdrop::-webkit-scrollbar{display:none}.json-editor-wrapper .editor-textarea{z-index:2;background-color:transparent;color:transparent;caret-color:#d4d4d4;resize:none;outline:none}.json-editor-wrapper .editor-textarea::selection{background-color:#264f7880;color:transparent}.json-editor-wrapper .editor-textarea::-webkit-scrollbar{width:10px;height:10px}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-track{background:#1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.json-editor-wrapper .json-key{color:#9cdcfe}.json-editor-wrapper .json-value-string{color:#ce9178}.json-editor-wrapper .json-value-number{color:#b5cea8}.json-editor-wrapper .json-value-boolean,.json-editor-wrapper .json-value-null{color:#569cd6}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]}],encapsulation:t.ViewEncapsulation.None})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:JsonEditorComponent,decorators:[{type:p,args:[{selector:"asor-json-editor",standalone:!0,imports:[w],encapsulation:d.None,template:'<div class="json-editor-backdrop" *ngIf="isExpanded" (click)="toggleExpand()"></div>\r\n<div class="json-editor-wrapper" [class.expanded]="isExpanded">\r\n\t<div class="editor-toolbar">\r\n\t\t<div class="toolbar-left">\r\n\t\t\t<span\r\n\t\t\t\tclass="status-dot"\r\n\t\t\t\t[class.dirty]="isDirty"\r\n\t\t\t\t[title]="isDirty ? \'JSON Alterato\' : \'JSON Originale\'"\r\n\t\t\t></span>\r\n\t\t\t<span class="editor-title">JSON Editor</span>\r\n\t\t</div>\r\n\t\t<button\r\n\t\t\tclass="expand-btn"\r\n\t\t\t[title]="isExpanded ? \'Collapse\' : \'Expand\'"\r\n\t\t\t(click)="toggleExpand()"\r\n\t\t>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="!isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path>\r\n\t\t\t</svg>\r\n\t\t\t<svg\r\n\t\t\t\t*ngIf="isExpanded"\r\n\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\twidth="14"\r\n\t\t\t\theight="14"\r\n\t\t\t\tstroke="currentColor"\r\n\t\t\t\tstroke-width="2"\r\n\t\t\t\tfill="none"\r\n\t\t\t\tstroke-linecap="round"\r\n\t\t\t\tstroke-linejoin="round"\r\n\t\t\t>\r\n\t\t\t\t<path d="M4 14h6v6M20 10h-6V4M14 10l7-7M10 14l-7 7"></path>\r\n\t\t\t</svg>\r\n\t\t</button>\r\n\t</div>\r\n\t<div class="editor-main-area">\r\n\t\t<div class="editor-line-numbers-container">\r\n\t\t\t<pre class="editor-line-numbers" #lineNumbers>{{ lineNumbersHtml }}</pre>\r\n\t\t</div>\r\n\t\t<div class="json-editor-container">\r\n\t\t\t<pre\r\n\t\t\t\tclass="editor-backdrop"\r\n\t\t\t\t#backdrop\r\n\t\t\t\taria-hidden="true"\r\n\t\t\t><code [innerHTML]="highlightedHtml"></code></pre>\r\n\t\t\t<textarea\r\n\t\t\t\tclass="editor-textarea"\r\n\t\t\t\t#textarea\r\n\t\t\t\t[value]="jsonString"\r\n\t\t\t\t(input)="onTextareaChange($event)"\r\n\t\t\t\t(scroll)="onScroll($event)"\r\n\t\t\t\t(keydown)="handleKeyDown($event)"\r\n\t\t\t\tspellcheck="false"\r\n\t\t\t>\r\n\t\t\t</textarea>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:["asor-json-editor{display:flex;flex-direction:column;flex:1;width:100%;min-height:200px}.json-editor-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#0009;z-index:99998;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.json-editor-wrapper{position:relative;border:1px solid #3c3c3c;border-radius:4px;background-color:#1e1e1e;flex:1;display:flex;flex-direction:column}.json-editor-wrapper.expanded{position:fixed;top:5vh;left:5vw;width:90vw;height:90vh;z-index:99999;box-shadow:0 10px 40px #00000080;border:1px solid #555}.json-editor-wrapper:focus-within{border-color:#007acc}.json-editor-wrapper .editor-toolbar{display:flex;justify-content:flex-end;align-items:center;background-color:#2d2d2d;border-bottom:1px solid #3c3c3c;padding:2px 6px;min-height:22px}.json-editor-wrapper .toolbar-left{display:flex;align-items:center;margin-right:auto;padding-left:6px;gap:6px}.json-editor-wrapper .status-dot{width:8px;height:8px;border-radius:50%;background-color:#5ea33a;display:inline-block;transition:background-color .2s ease}.json-editor-wrapper .status-dot.dirty{background-color:#d19a66;box-shadow:0 0 4px #d19a6666}.json-editor-wrapper .editor-title{color:#ccc;font-family:inherit;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.json-editor-wrapper .expand-btn{background:transparent;border:none;color:#ccc;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;border-radius:3px}.json-editor-wrapper .expand-btn:hover{background-color:#444;color:#fff}.json-editor-wrapper .editor-main-area{flex:1;display:flex;flex-direction:row;overflow:hidden}.json-editor-wrapper .editor-line-numbers-container{position:relative;width:48px;border-right:1px solid #3c3c3c;background-color:#1e1e1e;overflow:hidden;flex-shrink:0}.json-editor-wrapper .editor-line-numbers{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px 8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;color:#858585;text-align:right;box-sizing:border-box;overflow:hidden;-webkit-user-select:none;user-select:none}.json-editor-wrapper .json-editor-container{position:relative;flex:1;overflow:hidden}.json-editor-wrapper .editor-backdrop,.json-editor-wrapper .editor-textarea{margin:0;position:absolute;top:0;left:0;width:100%;height:100%;padding:12px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px;line-height:1.5;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4;border:none;box-sizing:border-box;overflow:auto}.json-editor-wrapper .editor-backdrop{z-index:1;pointer-events:none;color:#d4d4d4;-ms-overflow-style:none;scrollbar-width:none}.json-editor-wrapper .editor-backdrop::-webkit-scrollbar{display:none}.json-editor-wrapper .editor-textarea{z-index:2;background-color:transparent;color:transparent;caret-color:#d4d4d4;resize:none;outline:none}.json-editor-wrapper .editor-textarea::selection{background-color:#264f7880;color:transparent}.json-editor-wrapper .editor-textarea::-webkit-scrollbar{width:10px;height:10px}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-track{background:#1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.json-editor-wrapper .editor-textarea::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.json-editor-wrapper .json-key{color:#9cdcfe}.json-editor-wrapper .json-value-string{color:#ce9178}.json-editor-wrapper .json-value-number{color:#b5cea8}.json-editor-wrapper .json-value-boolean,.json-editor-wrapper .json-value-null{color:#569cd6}\n"]}]}],propDecorators:{jsonString:[{type:c}],jsonStringChange:[{type:u}],backdropElement:[{type:g,args:["backdrop"]}],textareaElement:[{type:g,args:["textarea"]}],lineNumbersElement:[{type:g,args:["lineNumbers"]}]}});class StateWidgetSpyService extends StateService{stateService;constructor(t){super(),this.stateService=t}initialize(t){this.stateService.initialize(t)}createDataSet(t,e,r){return this.stateService.createDataSet(t,e,r)}readDataSet(t){return this.stateService.readDataSet(t)}updateDataSet(t,e,r){return this.stateService.updateDataSet(t,e,r)}deleteRootDataSet(t){this.stateService.deleteRootDataSet(t)}registry(t,e,r){return this.stateService.registry(t,e,r)}resolveProps(t){return this.stateService.resolveProps(t)}getContainerRoot(){return this.stateService.containerRoot}getRegistryMap(){return this.stateService.registryMap}getConf(){return this.stateService.conf}getInitialized(){return this.stateService.initialized}getIntervalId(){return this.stateService.intervalId}getFisicalStorageTypeByJob(){return!(!this.stateService.conf||!this.stateService.conf.asyncEnabled)}getSecretKey(){return this.stateService.getStateKey()}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,deps:[{token:StateService}],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StateWidgetSpyService,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:StateService}]});class StorageTabComponent{widgetSpyService;autoRefresh=!1;autoRefreshInterval;containerRoot=[];registryRows=[];registryGroups=[];registrySearchTerm="";config;isInitialized=!1;fisicalStorageTypeByJob=!1;viewMode="list";targetElement=null;viewData=null;sectionsCollapsed={status:!1,containers:!1,registry:!1};editJsonString="";editError=null;inputKey="";decryptError=null;pendingAction=null;constructor(t){this.widgetSpyService=t}toggleSection(t){this.sectionsCollapsed[t]=!this.sectionsCollapsed[t]}ngOnInit(){this.refreshState()}ngOnDestroy(){this.stopAutoRefresh()}toggleAutoRefresh(){this.autoRefresh?this.startAutoRefresh():this.stopAutoRefresh()}startAutoRefresh(){this.stopAutoRefresh(),this.autoRefreshInterval=setInterval(()=>{"list"===this.viewMode&&this.refreshState()},2e3)}stopAutoRefresh(){this.autoRefreshInterval&&(clearInterval(this.autoRefreshInterval),this.autoRefreshInterval=null)}refreshState(){this.isInitialized=this.widgetSpyService.getInitialized(),this.config=this.widgetSpyService.getConf(),this.containerRoot=this.widgetSpyService.getContainerRoot(),this.fisicalStorageTypeByJob=this.widgetSpyService.getFisicalStorageTypeByJob(),this.parseRegistry(this.widgetSpyService.getRegistryMap())}get filteredRegistryGroups(){if(!this.registrySearchTerm||""===this.registrySearchTerm.trim())return this.registryGroups;const t=this.registrySearchTerm.toLowerCase();return this.registryGroups.map(e=>{if(e.component.toLowerCase().includes(t))return e;const r=e.entries.filter(e=>e.prop.toLowerCase().includes(t)||e.path.toLowerCase().includes(t));return r.length>0?{...e,entries:r}:null}).filter(t=>null!==t)}openView(t){this.targetElement=t,t.encrypt?(this.pendingAction="view",this.viewMode="decrypt",this.inputKey=this.widgetSpyService.getSecretKey()||"",this.decryptError=null):(this.viewData=t.data,this.viewMode="view")}startDelete(t){this.targetElement=t,this.viewMode="delete"}confirmDelete(){this.targetElement&&(this.widgetSpyService.deleteRootDataSet(this.targetElement.name),this.cancelAction(),this.refreshState())}startEdit(t){this.targetElement=t,t.encrypt?(this.pendingAction="edit",this.viewMode="decrypt",this.inputKey=this.widgetSpyService.getSecretKey()||"",this.decryptError=null):(this.viewMode="edit",this.editJsonString=JSON.stringify(t.data,null,4),this.editError=null)}verifyKey(){if(this.targetElement&&this.inputKey)try{const t=A.AES.decrypt(this.targetElement.data,this.inputKey).toString(A.enc.Utf8);if(!t)throw new Error("Malformed key or data");const e=JSON.parse(t);"view"===this.pendingAction?(this.viewMode="view",this.viewData=e):(this.viewMode="edit",this.editJsonString=JSON.stringify(e,null,4),this.editError=null)}catch(t){this.decryptError="Invalid Key or Corrupted Data"}}saveEdit(){if(this.targetElement)try{const t=JSON.parse(this.editJsonString);let e=!1;Object.keys(t).forEach(r=>{this.widgetSpyService.updateDataSet(`${this.targetElement.name}.${r}`,t[r])||(e=!0)}),e?this.editError="Failed to update some fields. Please check the console/logs.":(this.cancelAction(),this.refreshState())}catch(t){this.editError="Invalid JSON: "+t.message}}cancelAction(){this.viewMode="list",this.targetElement=null,this.viewData=null,this.editJsonString="",this.editError=null,this.inputKey="",this.decryptError=null,this.pendingAction=null}parseRegistry(t){this.registryRows=[],this.registryGroups=[];const e=new Map;t.forEach((t,r)=>{const n=r.match(/\[([^\]]+)\]<([^>]+)>;(.+)/);let o;o=n?{component:n[1],prop:n[2],path:n[3]}:{component:"Unknown",prop:r,path:"Unknown"},this.registryRows.push(o),e.has(o.component)||e.set(o.component,[]),e.get(o.component).push(o)});const r=Array.from(e.keys()).sort((t,e)=>t.localeCompare(e));this.registryGroups=r.map(t=>({component:t,entries:e.get(t).sort((t,e)=>t.prop.localeCompare(e.prop))})),this.registryRows.sort((t,e)=>t.component.localeCompare(e.component))}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StorageTabComponent,deps:[{token:StateWidgetSpyService}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:StorageTabComponent,isStandalone:!0,selector:"asor-storage-tab",ngImport:t,template:'<div class="state-dashboard">\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card" [class.active]="isInitialized">\r\n\t\t\t\t\t<div class="label">Initialized</div>\r\n\t\t\t\t\t<div class="value">{{ isInitialized ? \'YES\' : \'NO\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Sync Interval</div>\r\n\t\t\t\t\t<div class="value">{{ fisicalStorageTypeByJob ? \'Job\' : \'On Change\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card" *ngIf="config">\r\n\t\t\t\t\t<div class="label">Encryption</div>\r\n\t\t\t\t\t<div class="value">{{ config.encryptionType }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Data Elements</div>\r\n\t\t\t\t\t<div class="value">{{ containerRoot.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Registry Entries</div>\r\n\t\t\t\t\t<div class="value">{{ registryRows.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<div class="auto-refresh-toggle" title="Auto Refresh State (5s)">\r\n\t\t\t\t<input\r\n\t\t\t\t\tid="autoRefresh"\r\n\t\t\t\t\t[(ngModel)]="autoRefresh"\r\n\t\t\t\t\t(change)="toggleAutoRefresh()"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t<label for="autoRefresh">Auto Refresh</label>\r\n\t\t\t</div>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshState(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh State"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Data Elements Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'containers\')">\r\n\t\t\t\t\t<span>Data Containers</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.containers"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.containers">\r\n\t\t\t\t\t<ng-container [ngSwitch]="viewMode">\r\n\t\t\t\t\t\t\x3c!-- LIST MODE --\x3e\r\n\t\t\t\t\t\t<ng-container *ngSwitchCase="\'list\'">\r\n\t\t\t\t\t\t\t<div class="data-grid" *ngIf="containerRoot.length > 0; else noData">\r\n\t\t\t\t\t\t\t\t<div class="data-card" *ngFor="let element of containerRoot">\r\n\t\t\t\t\t\t\t\t\t<div class="card-header">\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-left">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="element-name"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Click to Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.name }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]="element.storeType.toLowerCase()"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.storeType }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startDelete(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="card-body"\r\n\t\t\t\t\t\t\t\t\t\t(click)="openView(element)"\r\n\t\t\t\t\t\t\t\t\t\ttitle="Click to View"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view [data]="element.data"></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="card-footer">\r\n\t\t\t\t\t\t\t\t\t\t<span class="update-time"\r\n\t\t\t\t\t\t\t\t\t\t\t>Updated:\r\n\t\t\t\t\t\t\t\t\t\t\t{{ element.lastUpdate | date: \'mediumTime\' }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div class="flags">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Reads"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg read"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.readCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Writes"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg write"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="17 21 17 13 7 13 7 21"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="7 3 7 8 15 8"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.writeCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.encrypt"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Encrypted"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg lock"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Frozen"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="2" x2="22" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="12" y1="2" x2="12" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="22" y1="2" x2="2" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="12" x2="22" y2="12"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t\tNo data elements found in StateService.\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\x3c!-- VIEW MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'view\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tView Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body data-panel">\r\n\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t[data]="viewData"\r\n\t\t\t\t\t\t\t\t\t[expandDepth]="1"\r\n\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Back</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- EDIT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'edit\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tEdit Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<asor-json-editor\r\n\t\t\t\t\t\t\t\t\t[(jsonString)]="editJsonString"\r\n\t\t\t\t\t\t\t\t></asor-json-editor>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="editError">{{ editError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="saveEdit()">Save Changes</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DECRYPT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'decrypt\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tDecrypt Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="instruction">\r\n\t\t\t\t\t\t\t\t\tThis dataset is encrypted. Please enter the key to unlock it.\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="key-input"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="inputKey"\r\n\t\t\t\t\t\t\t\t\t(keydown.enter)="verifyKey()"\r\n\t\t\t\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\t\t\t\tplaceholder="Enter Decryption Key"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="decryptError">{{ decryptError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="verifyKey()">Unlock</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DELETE MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'delete\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>Delete Dataset</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="confirmation-text">\r\n\t\t\t\t\t\t\t\t\tAre you sure you want to delete\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span\r\n\t\t\t\t\t\t\t\t\t>?\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class="warning-text">This action cannot be undone.</p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-delete-confirm" (click)="confirmDelete()">\r\n\t\t\t\t\t\t\t\t\tDelete\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Registry Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'registry\')">\r\n\t\t\t\t\t<span>Component Registry</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.registry"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.registry">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="registrySearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter by component, prop or path..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="registrySearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="registrySearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="registry-table-container">\r\n\t\t\t\t\t\t<ng-container *ngIf="filteredRegistryGroups.length > 0; else emptyRegistry">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass="registry-group"\r\n\t\t\t\t\t\t\t\t*ngFor="let group of filteredRegistryGroups"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.component }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} prop{{\r\n\t\t\t\t\t\t\t\t\t\t\tgroup.entries.length > 1 ? \'s\' : \'\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item" *ngFor="let row of group.entries">\r\n\t\t\t\t\t\t\t\t\t\t<span class="prop-badge">{{ row.prop }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text">{{ row.path }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<ng-template #emptyRegistry>\r\n\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\tregistrySearchTerm\r\n\t\t\t\t\t\t\t\t\t\t? \'No components match the filter.\'\r\n\t\t\t\t\t\t\t\t\t\t: \'No registered components.\'\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card.active .value{color:#4caf50}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-title.mt-4{margin-top:20px}.state-dashboard .dashboard-content .data-grid{overflow-y:auto;flex:1;padding:5px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}.state-dashboard .dashboard-content .data-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;height:max-content;margin:5px}.state-dashboard .dashboard-content .data-card:hover{border-color:#007acc}.state-dashboard .dashboard-content .data-card .card-header{background-color:#252526;padding:8px 12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333}.state-dashboard .dashboard-content .data-card .card-header .element-name{font-weight:600;color:#dcdcaa}.state-dashboard .dashboard-content .data-card .card-header .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}.state-dashboard .dashboard-content .data-card .card-header .store-badge.session{background-color:#0e639c33;color:#4fc1ff}.state-dashboard .dashboard-content .data-card .card-header .store-badge.local{background-color:#60ac3933;color:#b5cea8}.state-dashboard .dashboard-content .data-card .card-body{padding:10px;max-height:200px;overflow-y:auto;font-family:monospace;font-size:12px}.state-dashboard .dashboard-content .data-card .card-footer{padding:6px 12px;background-color:#252526;font-size:11px;color:#666;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #333}.state-dashboard .dashboard-content .data-card .card-footer .flags{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-size:13px;flex:1}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item{display:flex;align-items:flex-start;padding:8px 12px 8px 36px;border-bottom:1px solid #333;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .prop-badge{background-color:#9cdcfe26;color:#9cdcfe;padding:2px 6px;border-radius:4px;font-family:monospace;margin-right:8px;white-space:nowrap;font-weight:600}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .path-text{color:#ce9178;font-family:monospace;word-break:break-all;margin-top:2px}.state-dashboard .dashboard-content .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn:active{background-color:#444;transform:scale(.95)}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-toolbar .auto-refresh-toggle{display:flex;align-items:center;gap:6px;background:#ffffff0d;border:1px solid #444;border-radius:15px;padding:2px 10px;height:30px;margin-right:4px;transition:all .2s}.state-dashboard .header-toolbar .auto-refresh-toggle:hover{background-color:#ffffff1a;border-color:#666}.state-dashboard .header-toolbar .auto-refresh-toggle input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:#007acc;margin:0}.state-dashboard .header-toolbar .auto-refresh-toggle label{font-size:11px;color:#888;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked){border-color:#007acc;background-color:#007acc1a}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked) label{color:#007acc;font-weight:600}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;border-radius:6px;background-color:#1e1e1e;overflow:hidden}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .section-title{display:flex;justify-content:space-between;align-items:center;margin-top:0;margin-bottom:2px}.state-dashboard .section-title .collapse-icon{display:none}.state-dashboard .section-body{padding:5px;flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;opacity:1}.state-dashboard .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .section-title{cursor:pointer;-webkit-user-select:none;user-select:none;padding:8px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .section-title:hover{background-color:#2a2a2a}.state-dashboard .section-title .collapse-icon{display:inline-block;font-size:14px;transition:transform .25s ease}.state-dashboard .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}}.state-dashboard .card-header .header-left{display:flex;align-items:center;gap:8px}.state-dashboard .card-header .header-left .element-name{cursor:pointer}.state-dashboard .card-header .header-left .element-name:hover{text-decoration:underline;color:#4fc1ff}.state-dashboard .card-header .header-actions{display:flex;gap:4px}.state-dashboard .card-header .header-actions .action-btn{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .card-header .header-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .card-header .header-actions .action-btn.delete:hover{background-color:#f4877133}.state-dashboard .card-body{cursor:pointer;transition:background-color .2s}.state-dashboard .card-body:hover{background-color:#252526}.icon-svg{vertical-align:middle}.icon-svg.read{color:#4ec9b0}.icon-svg.write{color:#ce9178}.icon-svg.lock{color:#dcdcaa}.icon-svg.freeze{color:#569cd6}.inline-view{display:flex;flex-direction:column;flex:1;min-height:0;padding:0 16px 16px;background-color:transparent;color:#ccc}.inline-view.centered{align-items:center;justify-content:center;text-align:center}.inline-view .view-header{margin-bottom:16px}.inline-view .view-header h3{margin:0;font-size:1.1rem;color:#d4d4d4}.inline-view .view-header h3 .highlight{color:#4ec9b0;font-family:Consolas,Monaco,monospace}.inline-view .view-body{flex:1;width:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden;margin-bottom:10px}.inline-view .view-body.data-panel{overflow:auto;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.inline-view .view-body .json-editor{flex:1;width:100%;background-color:#1e1e1e;color:#d4d4d4;border:1px solid #3c3c3c;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:13px;resize:none;outline:none}.inline-view .view-body .json-editor:focus{border-color:#007acc}.inline-view .view-body .instruction{margin-bottom:12px;color:#ccc}.inline-view .view-body .key-input{width:100%;max-width:300px;margin:0 auto;padding:8px 12px;background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;font-size:14px}.inline-view .view-body .key-input:focus{border-color:#007acc;outline:none}.inline-view .view-body .confirmation-text{font-size:1.1rem;margin-bottom:8px}.inline-view .view-body .confirmation-text .highlight{color:#ce9178;font-weight:700}.inline-view .view-body .warning-text{color:#d16969;font-size:.9rem}.inline-view .view-body .error-msg{color:#f14c4c;margin-top:8px;font-size:.9em}.inline-view .view-footer{display:flex;justify-content:flex-end;gap:12px}.centered .inline-view .view-footer{justify-content:center}.inline-view .view-footer button{padding:6px 16px;border-radius:4px;border:none;cursor:pointer;font-size:13px;transition:background-color .2s}.inline-view .view-footer button.btn-cancel{background-color:#3c3c3c;color:#ccc}.inline-view .view-footer button.btn-cancel:hover{background-color:#4c4c4c}.inline-view .view-footer button.btn-save{background-color:#007acc;color:#fff}.inline-view .view-footer button.btn-save:hover{background-color:#0062a3}.inline-view .view-footer button.btn-delete-confirm{background-color:#ce9178;color:#1e1e1e;font-weight:500}.inline-view .view-footer button.btn-delete-confirm:hover{background-color:#b87b66}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:m.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:m.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonEditorComponent,selector:"asor-json-editor",inputs:["jsonString"],outputs:["jsonStringChange"]},{kind:"pipe",type:m.DatePipe,name:"date"}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:StorageTabComponent,decorators:[{type:p,args:[{selector:"asor-storage-tab",standalone:!0,imports:[w,JsonViewComponent,K,JsonEditorComponent],encapsulation:d.ShadowDom,template:'<div class="state-dashboard">\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card" [class.active]="isInitialized">\r\n\t\t\t\t\t<div class="label">Initialized</div>\r\n\t\t\t\t\t<div class="value">{{ isInitialized ? \'YES\' : \'NO\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Sync Interval</div>\r\n\t\t\t\t\t<div class="value">{{ fisicalStorageTypeByJob ? \'Job\' : \'On Change\' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card" *ngIf="config">\r\n\t\t\t\t\t<div class="label">Encryption</div>\r\n\t\t\t\t\t<div class="value">{{ config.encryptionType }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Data Elements</div>\r\n\t\t\t\t\t<div class="value">{{ containerRoot.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Registry Entries</div>\r\n\t\t\t\t\t<div class="value">{{ registryRows.length }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<div class="auto-refresh-toggle" title="Auto Refresh State (5s)">\r\n\t\t\t\t<input\r\n\t\t\t\t\tid="autoRefresh"\r\n\t\t\t\t\t[(ngModel)]="autoRefresh"\r\n\t\t\t\t\t(change)="toggleAutoRefresh()"\r\n\t\t\t\t\ttype="checkbox"\r\n\t\t\t\t/>\r\n\t\t\t\t<label for="autoRefresh">Auto Refresh</label>\r\n\t\t\t</div>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshState(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh State"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Data Elements Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'containers\')">\r\n\t\t\t\t\t<span>Data Containers</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.containers"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.containers">\r\n\t\t\t\t\t<ng-container [ngSwitch]="viewMode">\r\n\t\t\t\t\t\t\x3c!-- LIST MODE --\x3e\r\n\t\t\t\t\t\t<ng-container *ngSwitchCase="\'list\'">\r\n\t\t\t\t\t\t\t<div class="data-grid" *ngIf="containerRoot.length > 0; else noData">\r\n\t\t\t\t\t\t\t\t<div class="data-card" *ngFor="let element of containerRoot">\r\n\t\t\t\t\t\t\t\t\t<div class="card-header">\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-left">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="element-name"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Click to Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.name }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]="element.storeType.toLowerCase()"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ element.storeType }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="header-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn edit"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startEdit(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Edit"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="startDelete(element)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="card-body"\r\n\t\t\t\t\t\t\t\t\t\t(click)="openView(element)"\r\n\t\t\t\t\t\t\t\t\t\ttitle="Click to View"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view [data]="element.data"></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="card-footer">\r\n\t\t\t\t\t\t\t\t\t\t<span class="update-time"\r\n\t\t\t\t\t\t\t\t\t\t\t>Updated:\r\n\t\t\t\t\t\t\t\t\t\t\t{{ element.lastUpdate | date: \'mediumTime\' }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<div class="flags">\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Reads"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg read"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.readCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Writes"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 8px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: inline-flex;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\talign-items: center;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg write"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="17 21 17 13 7 13 7 21"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="7 3 7 8 15 8"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{{ element.writeCount || 0 }}\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.encrypt"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Encrypted"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg lock"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="element.freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Frozen"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="display: inline-flex; align-items: center"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass="icon-svg freeze"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="2" x2="22" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="12" y1="2" x2="12" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="22" y1="2" x2="2" y2="22"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line x1="2" y1="12" x2="22" y2="12"></line>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t\tNo data elements found in StateService.\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t\x3c!-- VIEW MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'view\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tView Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body data-panel">\r\n\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t[data]="viewData"\r\n\t\t\t\t\t\t\t\t\t[expandDepth]="1"\r\n\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Back</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- EDIT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view" *ngSwitchCase="\'edit\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tEdit Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<asor-json-editor\r\n\t\t\t\t\t\t\t\t\t[(jsonString)]="editJsonString"\r\n\t\t\t\t\t\t\t\t></asor-json-editor>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="editError">{{ editError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="saveEdit()">Save Changes</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DECRYPT MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'decrypt\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>\r\n\t\t\t\t\t\t\t\t\tDecrypt Dataset:\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span>\r\n\t\t\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="instruction">\r\n\t\t\t\t\t\t\t\t\tThis dataset is encrypted. Please enter the key to unlock it.\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\tclass="key-input"\r\n\t\t\t\t\t\t\t\t\t[(ngModel)]="inputKey"\r\n\t\t\t\t\t\t\t\t\t(keydown.enter)="verifyKey()"\r\n\t\t\t\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\t\t\t\tplaceholder="Enter Decryption Key"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div class="error-msg" *ngIf="decryptError">{{ decryptError }}</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-save" (click)="verifyKey()">Unlock</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\x3c!-- DELETE MODE --\x3e\r\n\t\t\t\t\t\t<div class="inline-view centered" *ngSwitchCase="\'delete\'">\r\n\t\t\t\t\t\t\t<div class="view-header">\r\n\t\t\t\t\t\t\t\t<h3>Delete Dataset</h3>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-body">\r\n\t\t\t\t\t\t\t\t<p class="confirmation-text">\r\n\t\t\t\t\t\t\t\t\tAre you sure you want to delete\r\n\t\t\t\t\t\t\t\t\t<span class="highlight">{{ targetElement?.name }}</span\r\n\t\t\t\t\t\t\t\t\t>?\r\n\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t<p class="warning-text">This action cannot be undone.</p>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="view-footer">\r\n\t\t\t\t\t\t\t\t<button class="btn-cancel" (click)="cancelAction()">Cancel</button>\r\n\t\t\t\t\t\t\t\t<button class="btn-delete-confirm" (click)="confirmDelete()">\r\n\t\t\t\t\t\t\t\t\tDelete\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Registry Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'registry\')">\r\n\t\t\t\t\t<span>Component Registry</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.registry"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.registry">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="registrySearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter by component, prop or path..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="registrySearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="registrySearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class="registry-table-container">\r\n\t\t\t\t\t\t<ng-container *ngIf="filteredRegistryGroups.length > 0; else emptyRegistry">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass="registry-group"\r\n\t\t\t\t\t\t\t\t*ngFor="let group of filteredRegistryGroups"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.component }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} prop{{\r\n\t\t\t\t\t\t\t\t\t\t\tgroup.entries.length > 1 ? \'s\' : \'\'\r\n\t\t\t\t\t\t\t\t\t\t}}</span\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item" *ngFor="let row of group.entries">\r\n\t\t\t\t\t\t\t\t\t\t<span class="prop-badge">{{ row.prop }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text">{{ row.path }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t\t\t<ng-template #emptyRegistry>\r\n\t\t\t\t\t\t\t<div class="empty-state">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\tregistrySearchTerm\r\n\t\t\t\t\t\t\t\t\t\t? \'No components match the filter.\'\r\n\t\t\t\t\t\t\t\t\t\t: \'No registered components.\'\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card.active .value{color:#4caf50}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-title.mt-4{margin-top:20px}.state-dashboard .dashboard-content .data-grid{overflow-y:auto;flex:1;padding:5px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;align-content:start}.state-dashboard .dashboard-content .data-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;height:max-content;margin:5px}.state-dashboard .dashboard-content .data-card:hover{border-color:#007acc}.state-dashboard .dashboard-content .data-card .card-header{background-color:#252526;padding:8px 12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333}.state-dashboard .dashboard-content .data-card .card-header .element-name{font-weight:600;color:#dcdcaa}.state-dashboard .dashboard-content .data-card .card-header .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}.state-dashboard .dashboard-content .data-card .card-header .store-badge.session{background-color:#0e639c33;color:#4fc1ff}.state-dashboard .dashboard-content .data-card .card-header .store-badge.local{background-color:#60ac3933;color:#b5cea8}.state-dashboard .dashboard-content .data-card .card-body{padding:10px;max-height:200px;overflow-y:auto;font-family:monospace;font-size:12px}.state-dashboard .dashboard-content .data-card .card-footer{padding:6px 12px;background-color:#252526;font-size:11px;color:#666;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #333}.state-dashboard .dashboard-content .data-card .card-footer .flags{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-size:13px;flex:1}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item{display:flex;align-items:flex-start;padding:8px 12px 8px 36px;border-bottom:1px solid #333;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .prop-badge{background-color:#9cdcfe26;color:#9cdcfe;padding:2px 6px;border-radius:4px;font-family:monospace;margin-right:8px;white-space:nowrap;font-weight:600}.state-dashboard .dashboard-content .registry-table-container .registry-list .registry-item .path-text{color:#ce9178;font-family:monospace;word-break:break-all;margin-top:2px}.state-dashboard .dashboard-content .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn:active{background-color:#444;transform:scale(.95)}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-toolbar .auto-refresh-toggle{display:flex;align-items:center;gap:6px;background:#ffffff0d;border:1px solid #444;border-radius:15px;padding:2px 10px;height:30px;margin-right:4px;transition:all .2s}.state-dashboard .header-toolbar .auto-refresh-toggle:hover{background-color:#ffffff1a;border-color:#666}.state-dashboard .header-toolbar .auto-refresh-toggle input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:#007acc;margin:0}.state-dashboard .header-toolbar .auto-refresh-toggle label{font-size:11px;color:#888;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked){border-color:#007acc;background-color:#007acc1a}.state-dashboard .header-toolbar .auto-refresh-toggle:has(input:checked) label{color:#007acc;font-weight:600}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;border-radius:6px;background-color:#1e1e1e;overflow:hidden}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .section-title{display:flex;justify-content:space-between;align-items:center;margin-top:0;margin-bottom:2px}.state-dashboard .section-title .collapse-icon{display:none}.state-dashboard .section-body{padding:5px;flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;opacity:1}.state-dashboard .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .section-title{cursor:pointer;-webkit-user-select:none;user-select:none;padding:8px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .section-title:hover{background-color:#2a2a2a}.state-dashboard .section-title .collapse-icon{display:inline-block;font-size:14px;transition:transform .25s ease}.state-dashboard .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}}.state-dashboard .card-header .header-left{display:flex;align-items:center;gap:8px}.state-dashboard .card-header .header-left .element-name{cursor:pointer}.state-dashboard .card-header .header-left .element-name:hover{text-decoration:underline;color:#4fc1ff}.state-dashboard .card-header .header-actions{display:flex;gap:4px}.state-dashboard .card-header .header-actions .action-btn{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:4px;transition:background-color .2s}.state-dashboard .card-header .header-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .card-header .header-actions .action-btn.delete:hover{background-color:#f4877133}.state-dashboard .card-body{cursor:pointer;transition:background-color .2s}.state-dashboard .card-body:hover{background-color:#252526}.icon-svg{vertical-align:middle}.icon-svg.read{color:#4ec9b0}.icon-svg.write{color:#ce9178}.icon-svg.lock{color:#dcdcaa}.icon-svg.freeze{color:#569cd6}.inline-view{display:flex;flex-direction:column;flex:1;min-height:0;padding:0 16px 16px;background-color:transparent;color:#ccc}.inline-view.centered{align-items:center;justify-content:center;text-align:center}.inline-view .view-header{margin-bottom:16px}.inline-view .view-header h3{margin:0;font-size:1.1rem;color:#d4d4d4}.inline-view .view-header h3 .highlight{color:#4ec9b0;font-family:Consolas,Monaco,monospace}.inline-view .view-body{flex:1;width:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden;margin-bottom:10px}.inline-view .view-body.data-panel{overflow:auto;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.inline-view .view-body .json-editor{flex:1;width:100%;background-color:#1e1e1e;color:#d4d4d4;border:1px solid #3c3c3c;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:13px;resize:none;outline:none}.inline-view .view-body .json-editor:focus{border-color:#007acc}.inline-view .view-body .instruction{margin-bottom:12px;color:#ccc}.inline-view .view-body .key-input{width:100%;max-width:300px;margin:0 auto;padding:8px 12px;background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;font-size:14px}.inline-view .view-body .key-input:focus{border-color:#007acc;outline:none}.inline-view .view-body .confirmation-text{font-size:1.1rem;margin-bottom:8px}.inline-view .view-body .confirmation-text .highlight{color:#ce9178;font-weight:700}.inline-view .view-body .warning-text{color:#d16969;font-size:.9rem}.inline-view .view-body .error-msg{color:#f14c4c;margin-top:8px;font-size:.9em}.inline-view .view-footer{display:flex;justify-content:flex-end;gap:12px}.centered .inline-view .view-footer{justify-content:center}.inline-view .view-footer button{padding:6px 16px;border-radius:4px;border:none;cursor:pointer;font-size:13px;transition:background-color .2s}.inline-view .view-footer button.btn-cancel{background-color:#3c3c3c;color:#ccc}.inline-view .view-footer button.btn-cancel:hover{background-color:#4c4c4c}.inline-view .view-footer button.btn-save{background-color:#007acc;color:#fff}.inline-view .view-footer button.btn-save:hover{background-color:#0062a3}.inline-view .view-footer button.btn-delete-confirm{background-color:#ce9178;color:#1e1e1e;font-weight:500}.inline-view .view-footer button.btn-delete-confirm:hover{background-color:#b87b66}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}\n"]}]}],ctorParameters:()=>[{type:StateWidgetSpyService}]});class WidgetCacheUtility extends CacheUtility{cacheUtility;constructor(t){super(),this.cacheUtility=t}getEntries(){const t=[];return this.cacheUtility.getCacheApp().forEach((e,r)=>{const n=this.cachePathUtility.config(r);if(n){let o=!1,a=null,s=r,i=0;try{const t=JSON.stringify(e);t&&(i=new Blob([t]).size)}catch(t){}if(r.includes("#[")){o=!0;const t=r.split("#[")[1].replace("]","");try{a=JSON.parse(atob(t))}catch(t){}}t.push({key:s,rulePath:n.pathValue,persistenceType:n.persistenceType,creationDate:new Date,hasPayload:o,payloadData:a,dataSize:i,encriptType:n.encriptType})}}),t.sort((t,e)=>t.key.localeCompare(e.key))}getEntryContent(t,e){const r=this.cachePathUtility.config(t);let n=this.cacheUtility.getCacheApp().get(t);if(r&&n&&"string"==typeof n&&r.encriptType!==W.NONE){if(!e)return{error:"KeyRequired"};try{const t=A.AES.decrypt(n,e).toString(A.enc.Utf8);if(!t)throw new Error("Decryption Failed");n=JSON.parse(t)}catch(t){return{error:"Invalid decryption key or corrupt data."}}}return n&&void 0!==n.body?n.body:n}getAutoCacheKey(t){const e=this.cachePathUtility.config(t);return e&&e.encriptType===W.AUTO?this.getCacheKey(e):null}cleanUp(){return super.cleanUp()}getRules(){return this.cachePathUtility.getPaths()}deleteEntry(t){this.cacheUtility.getCacheApp().delete(t),this.persistStorage()}clearAllCache(){this.cacheUtility.getCacheApp().clear(),sessionStorage.removeItem(this.cache_name),localStorage.removeItem(this.cache_name)}persistStorage(){let t={},e={};this.cacheUtility.getCacheApp().forEach((r,n)=>{const o=this.cachePathUtility.config(n);o&&(o.persistenceType===F.SESSION?t[n]=r:o.persistenceType===F.LOCAL&&(e[n]=r))}),Object.keys(t).length>0?sessionStorage.setItem(this.cache_name,JSON.stringify(t)):sessionStorage.removeItem(this.cache_name),Object.keys(e).length>0?localStorage.setItem(this.cache_name,JSON.stringify(e)):localStorage.removeItem(this.cache_name)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,deps:[{token:CacheUtility}],target:t.ɵɵFactoryTarget.Injectable});static ɵprov=t.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,providedIn:"root"})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:WidgetCacheUtility,decorators:[{type:r,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:CacheUtility}]});class CacheTabComponent{cacheUtility;cacheEntries=[];activeRules=[];ruleGroups=[];cacheGroups=[];rulesSearchTerm="";entriesSearchTerm="";stats={volatile:0,session:0,local:0,total:0};sizes={volatile:0,session:0,local:0,total:0};CacheType=F;sectionsCollapsed={status:!1,rules:!1,entries:!1};expandedPayloadId=null;expandedContentId=null;currentContent=null;customKeys={};decryptErrors={};isCleanupModalOpen=!1;showCleanUpBanner=!1;cleanedEntries=[];cleanedTotalSize=0;isClearAllModalOpen=!1;showClearAllBanner=!1;constructor(t){this.cacheUtility=t}ngOnInit(){this.refreshCache(),this.activeRules=this.cacheUtility.getRules(),this.groupRules()}groupRules(){const t=new Map;this.activeRules.forEach(e=>{const r=e.persistenceType.toString();t.has(r)||t.set(r,[]),t.get(r).push(e)});const e=Array.from(t.keys()).sort((t,e)=>t.localeCompare(e));this.ruleGroups=e.map(e=>({persistenceType:e,rules:t.get(e).sort((t,e)=>t.pathValue.localeCompare(e.pathValue))}))}refreshCache(){this.cacheEntries=this.cacheUtility.getEntries(),this.calculateStats(),this.groupEntries()}groupEntries(){const t=new Map;this.cacheEntries.forEach(e=>{t.has(e.rulePath)||t.set(e.rulePath,[]),t.get(e.rulePath).push(e)});const e=Array.from(t.keys()).sort((t,e)=>t.localeCompare(e));this.cacheGroups=e.map(e=>({rulePath:e,entries:t.get(e).sort((t,e)=>t.key.localeCompare(e.key))}))}deleteEntry(t){this.cacheUtility.deleteEntry(t),this.refreshCache()}clearAll(){this.isClearAllModalOpen=!0}executeClearAll(){this.cacheUtility.clearAllCache(),this.refreshCache(),this.isClearAllModalOpen=!1,this.showClearAllBanner=!0,setTimeout(()=>{this.showClearAllBanner=!1},3e3)}cleanUpCache(){const t=this.cacheUtility.cleanUp();t&&t.size>0?(this.cleanedEntries=[],this.cleanedTotalSize=0,t.forEach((t,e)=>{const r=new Blob(["string"==typeof t?t:JSON.stringify(t)]).size;this.cleanedTotalSize+=r;const n=this.cacheUtility.cachePathUtility.config(e);this.cleanedEntries.push({key:e,dataSize:r,persistenceType:n?n.persistenceType:F.VOLATILE,encriptType:n?n.encriptType:W.NONE})}),this.isCleanupModalOpen=!0):(this.showCleanUpBanner=!0,setTimeout(()=>{this.showCleanUpBanner=!1},3e3)),this.refreshCache()}toggleSection(t){this.sectionsCollapsed[t]=!this.sectionsCollapsed[t]}togglePayload(t){this.expandedPayloadId=this.expandedPayloadId===t?null:t}openContentModal(t,e){this.expandedContentId=t,this.loadContent(t,e)}closeContentModal(){this.expandedContentId&&this.customKeys[this.expandedContentId]&&(this.customKeys[this.expandedContentId]=""),this.expandedContentId=null,this.currentContent=null,this.decryptErrors={}}loadContent(t,e){if((e===W.CUSTOM||e===W.AUTO)&&!this.customKeys[t]){if(this.currentContent={_requiresKey:!0,encriptType:e},!this.customKeys[t]){const e=this.cacheUtility.getAutoCacheKey(t);e&&(this.customKeys[t]=e)}return}const r=this.cacheUtility.getEntryContent(t,this.customKeys[t]);r&&r.error?(this.decryptErrors[t]=r.error,this.currentContent={_requiresKey:!0}):(this.decryptErrors[t]="",this.currentContent=r)}decryptContent(t){this.loadContent(t,this.currentContent?.encriptType||W.CUSTOM)}get filteredRuleGroups(){if(!this.rulesSearchTerm||""===this.rulesSearchTerm.trim())return this.ruleGroups;const t=this.rulesSearchTerm.toLowerCase();return this.ruleGroups.map(e=>{if(e.persistenceType.toLowerCase().includes(t))return e;const r=e.rules.filter(e=>e.pathValue.toLowerCase().includes(t)||e.persistenceType.toString().toLowerCase().includes(t));return r.length>0?{...e,rules:r}:null}).filter(t=>null!==t)}get filteredCacheGroups(){if(!this.entriesSearchTerm||""===this.entriesSearchTerm.trim())return this.cacheGroups;const t=this.entriesSearchTerm.toLowerCase();return this.cacheGroups.map(e=>{if(e.rulePath.toLowerCase().includes(t))return e;const r=e.entries.filter(e=>e.key.toLowerCase().includes(t)||e.persistenceType.toString().toLowerCase().includes(t));return r.length>0?{...e,entries:r}:null}).filter(t=>null!==t)}formatSize(t){if(!t||0===t)return"0 B";const e=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,e)).toFixed(2))+" "+["B","KB","MB","GB"][e]}getSizeForType(t){const e=t.toLowerCase();return this.formatSize(this.sizes[e]||0)}getGroupSize(t){const e=t.entries.reduce((t,e)=>t+(e.dataSize||0),0);return this.formatSize(e)}calculateStats(){this.stats={volatile:0,session:0,local:0,total:this.cacheEntries.length},this.sizes={volatile:0,session:0,local:0,total:0},this.cacheEntries.forEach(t=>{const e=t.dataSize||0;this.sizes.total+=e,t.persistenceType===F.VOLATILE?(this.stats.volatile++,this.sizes.volatile+=e):t.persistenceType===F.SESSION?(this.stats.session++,this.sizes.session+=e):t.persistenceType===F.LOCAL&&(this.stats.local++,this.sizes.local+=e)})}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheTabComponent,deps:[{token:WidgetCacheUtility}],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:CacheTabComponent,isStandalone:!0,selector:"asor-cache-tab",ngImport:t,template:'<div class="state-dashboard">\r\n\t\x3c!-- Cleanup Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showCleanUpBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<circle cx="12" cy="12" r="10"></circle>\r\n\t\t\t<line x1="12" y1="16" x2="12" y2="12"></line>\r\n\t\t\t<line x1="12" y1="8" x2="12.01" y2="8"></line>\r\n\t\t</svg>\r\n\t\t<span>No obsolete cache entries found. Everything is clean!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Clear All Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showClearAllBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<polyline points="20 6 9 17 4 12"></polyline>\r\n\t\t</svg>\r\n\t\t<span>All cache entries have been successfully cleared!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Entries</div>\r\n\t\t\t\t\t<div class="value">{{ stats.total }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Cache Size</div>\r\n\t\t\t\t\t<div class="value">{{ formatSize(sizes.total) }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Volatile Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.volatile > 0">\r\n\t\t\t\t\t\t{{ stats.volatile }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.volatile) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Session Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.session > 0">{{ stats.session }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.session) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Local Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.local > 0">{{ stats.local }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.local) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<button class="circle-c-btn" (click)="cleanUpCache()" title="Clean Up Obsolete Cache">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="16"\r\n\t\t\t\t\theight="16"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d="m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"></path>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.35 2.22 1.45 3.02 1.45 2.26 0 4.14-1.84 4.14-4.11 0-1.66-1.35-3-3.02-3.02z"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn clear-all"\r\n\t\t\t\t(click)="clearAll(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Clear All Cache"\r\n\t\t\t>\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="14"\r\n\t\t\t\t\theight="14"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshCache(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh Cache"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Active Rules Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'rules\')">\r\n\t\t\t\t\t<span>Active Cache Rules</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.rules">▾</span>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.rules">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter rules by path or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="rulesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredRuleGroups.length > 0; else noRules"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredRuleGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.persistenceType }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.rules.length }} rule<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.rules.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetSizeForType(group.persistenceType)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="rules-list" style="padding: 10px">\r\n\t\t\t\t\t\t\t\t<div class="rule-card" *ngFor="let rule of group.rules">\r\n\t\t\t\t\t\t\t\t\t<div class="rule-header">\r\n\t\t\t\t\t\t\t\t\t\t<span class="rule-path">{{ rule.pathValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\trule.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ rule.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="rule-body">\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Payload Cache:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ rule.reqPayloadCache ? \'Enabled\' : \'Disabled\' }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Encryption:</strong> {{ rule.encriptType }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\tclass="rule-detail"\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="rule.clearOn && rule.clearOn.length > 0"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Clear On:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t<ul class="clear-on-list">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li *ngFor="let c of rule.clearOn">{{ c }}</li>\r\n\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noRules>\r\n\t\t\t\t\t\t<div class="empty-state">No cache rules match the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Cache Entries Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'entries\')">\r\n\t\t\t\t\t<span>Cache Entries</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.entries"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.entries">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter entries by key or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="entriesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredCacheGroups.length > 0; else noData"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredCacheGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.rulePath }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} entry<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.entries.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetGroupSize(group)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass="registry-item-container"\r\n\t\t\t\t\t\t\t\t\t*ngFor="let entry of group.entries"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item">\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\tentry.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text" [title]="entry.key">\r\n\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvertical-align: text-top;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: #dcdcaa;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ entry.key }}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-right: 8px">{{\r\n\t\t\t\t\t\t\t\t\t\t\tformatSize(entry.dataSize || 0)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class="item-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedContentId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\topenContentModal(entry.key, entry.encriptType)\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="View Content"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.hasPayload"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="togglePayload(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Toggle Payload Request"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="22 12 18 12 15 21 9 3 6 12 2 12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="deleteEntry(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete Entry"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="payload-content"\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t[data]="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t\t<span class="empty-payload" *ngIf="!entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t>Unable to parse payload request.</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t<div class="empty-state">No items found in cache matching the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Modal Overlay for Content Details --\x3e\r\n<div class="modal-overlay" *ngIf="expandedContentId" (click)="closeContentModal()">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Content Details</h3>\r\n\t\t\t<span class="path-text" [title]="expandedContentId">{{ expandedContentId }}</span>\r\n\t\t\t<button class="close-btn" (click)="closeContentModal()" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body">\r\n\t\t\t<div class="decrypt-prompt" *ngIf="currentContent?._requiresKey">\r\n\t\t\t\t<div class="decrypt-header">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t\t<span>Encrypted Content</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p class="decrypt-desc">Enter the decryption key to view this response.</p>\r\n\t\t\t\t<div class="decrypt-input-group">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t[(ngModel)]="customKeys[expandedContentId]"\r\n\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\tplaceholder="Enter Secret Key"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="decrypt-btn" (click)="decryptContent(expandedContentId)">\r\n\t\t\t\t\t\tDecrypt\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="error-msg" *ngIf="decryptErrors[expandedContentId]">\r\n\t\t\t\t\t{{ decryptErrors[expandedContentId] }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<asor-json-view\r\n\t\t\t\t*ngIf="currentContent && !currentContent._requiresKey"\r\n\t\t\t\t[data]="currentContent"\r\n\t\t\t></asor-json-view>\r\n\t\t\t<span class="empty-payload" *ngIf="!currentContent && currentContent !== null"\r\n\t\t\t\t>Empty content.</span\r\n\t\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Cleanup Results Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isCleanupModalOpen" (click)="isCleanupModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Cleaned Cache Entries</h3>\r\n\t\t\t<span class="path-text">Total recovered size: {{ formatSize(cleanedTotalSize) }}</span>\r\n\t\t\t<button class="close-btn" (click)="isCleanupModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 0">\r\n\t\t\t<div class="cleanup-table">\r\n\t\t\t\t<div class="cleanup-table-header">\r\n\t\t\t\t\t<span class="col-type">Type</span>\r\n\t\t\t\t\t<span class="col-path">Path</span>\r\n\t\t\t\t\t<span class="col-size" style="text-align: right">Size</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="cleanup-table-body">\r\n\t\t\t\t\t<div class="cleanup-table-row" *ngFor="let entry of cleanedEntries">\r\n\t\t\t\t\t\t<span class="col-type">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="entry.persistenceType"\r\n\t\t\t\t\t\t\t\t[ngClass]="entry.persistenceType.toString().toLowerCase()"\r\n\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-path" [title]="entry.key">\r\n\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t*ngIf="entry.encriptType && entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\tstyle="margin-right: 6px; flex-shrink: 0; color: #dcdcaa"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t>{{ entry.key }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-size">{{ formatSize(entry.dataSize) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Clear All Confirmation Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isClearAllModalOpen" (click)="isClearAllModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()" style="max-width: 400px">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Confirm Cache Clear</h3>\r\n\t\t\t<button class="close-btn" (click)="isClearAllModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 20px">\r\n\t\t\t<p style="color: #ccc; margin: 0 0 20px 0; font-size: 14px; line-height: 1.5">\r\n\t\t\t\tAre you sure you want to completely clear the cache? This action cannot be undone.\r\n\t\t\t</p>\r\n\t\t\t<div style="display: flex; justify-content: flex-end; gap: 10px">\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="isClearAllModalOpen = false"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: transparent;\r\n\t\t\t\t\t\tborder: 1px solid #444;\r\n\t\t\t\t\t\tcolor: #ccc;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="executeClearAll()"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: rgba(244, 135, 113, 0.2);\r\n\t\t\t\t\t\tborder: 1px solid #f48771;\r\n\t\t\t\t\t\tcolor: #f48771;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t\tfont-weight: 600;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px;overflow-y:auto}.state-dashboard::-webkit-scrollbar,.state-dashboard .registry-table-container::-webkit-scrollbar,.state-dashboard .payload-content::-webkit-scrollbar,.state-dashboard .rules-list::-webkit-scrollbar{width:10px;height:10px}.state-dashboard::-webkit-scrollbar-track,.state-dashboard .registry-table-container::-webkit-scrollbar-track,.state-dashboard .payload-content::-webkit-scrollbar-track,.state-dashboard .rules-list::-webkit-scrollbar-track{background:#1e1e1e}.state-dashboard::-webkit-scrollbar-thumb,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb,.state-dashboard .payload-content::-webkit-scrollbar-thumb,.state-dashboard .rules-list::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.state-dashboard::-webkit-scrollbar-thumb:hover,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb:hover,.state-dashboard .payload-content::-webkit-scrollbar-thumb:hover,.state-dashboard .rules-list::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card .value.active{color:#4caf50}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn.clear-all:hover{background-color:#f4877133;color:#f48771}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;overflow:hidden;border-radius:6px}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-body{padding:5px;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;display:flex;flex-direction:column;flex:1;min-height:0}.state-dashboard .dashboard-content .section-body.collapsed{padding:0;max-height:0;opacity:0;overflow:hidden}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .rules-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .rules-list .rule-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;padding:10px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header .rule-path{font-family:monospace;color:#dcdcaa;font-weight:700}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body{font-size:12px;color:#9cdcfe}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail{margin-top:4px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail strong{color:#888}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail .clear-on-list{margin:4px 0 0 16px;padding:0;color:#ce9178;font-family:monospace}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-family:monospace;font-size:13px;flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container{border-bottom:1px solid #333;display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item{padding:8px 12px 8px 36px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .store-badge{margin-right:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn{background:none;border:none;color:#ccc;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.delete:hover{background-color:#f4877133;color:#f48771}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.active{background-color:#2a2a2a;color:#4fc1ff}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .payload-content{border-top:1px solid #333;max-height:300px;overflow-y:auto;padding:10px 12px 10px 36px;background:#1e1e1e;color:#d16969;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt{padding:10px 0}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:13px;margin-bottom:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-desc{font-size:12px;color:#888;margin:0 0 10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:6px 10px;font-size:12px;flex:1;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:6px 12px;font-size:12px;cursor:pointer;transition:background-color .2s}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .error-msg{color:#f48771;font-size:11px;margin-top:4px}.state-dashboard .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}:host .cache-dashboard{padding:20px;color:#d4d4d4}:host .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}:host .store-badge.session{background-color:#0e639c33;color:#4fc1ff}:host .store-badge.local{background-color:#60ac3933;color:#b5cea8}:host .store-badge.volatile{background-color:#d7ba7d33;color:#d7ba7d}.cleanup-table{display:flex;flex-direction:column;max-height:400px}.cleanup-table .cleanup-table-header{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;padding:10px 16px;background-color:#252526;border-bottom:1px solid #333;font-size:12px;font-weight:600;color:#888;position:sticky;top:0}.cleanup-table .cleanup-table-body{overflow-y:auto;display:flex;flex-direction:column}.cleanup-table .cleanup-table-body .cleanup-table-row{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;align-items:center;padding:8px 16px;border-bottom:1px solid #333}.cleanup-table .cleanup-table-body .cleanup-table-row:last-child{border-bottom:none}.cleanup-table .cleanup-table-body .cleanup-table-row:hover{background-color:#2a2a2a}.cleanup-table .cleanup-table-body .cleanup-table-row .col-type{display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-path{color:#ce9178;font-family:monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-size{color:#888;font-size:11px;text-align:right;background:#ffffff0d;padding:2px 6px;border-radius:10px}.modal-overlay{position:absolute;inset:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#1e1e1e;border:1px solid #333;border-radius:8px;width:90%;max-width:800px;max-height:90%;display:flex;flex-direction:column;box-shadow:0 10px 30px #00000080}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;background-color:#252526;border-top-left-radius:8px;border-top-right-radius:8px;gap:12px}.modal-content .modal-header h3{margin:0;font-size:14px;color:#ccc;font-weight:600}.modal-content .modal-header .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-content .modal-header .close-btn{background:none;border:none;color:#888;font-size:20px;cursor:pointer;line-height:1;padding:0 4px}.modal-content .modal-header .close-btn:hover{color:#ccc}.modal-content .modal-body{padding:16px;overflow-y:auto;flex:1}.modal-content .modal-body .decrypt-prompt{padding:10px 0}.modal-content .modal-body .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:14px;margin-bottom:10px}.modal-content .modal-body .decrypt-prompt .decrypt-desc{font-size:13px;color:#888;margin:0 0 12px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:8px 12px;font-size:13px;flex:1;font-family:inherit;outline:none}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.modal-content .modal-body .decrypt-prompt .error-msg{color:#f48771;font-size:12px;margin-top:6px}.info-banner{position:absolute;top:20px;left:50%;transform:translate(-50%);background-color:#252526;border:1px solid #4ec9b0;color:#4ec9b0;padding:8px 16px;border-radius:6px;box-shadow:0 4px 12px #00000080;z-index:1001;font-size:13px;display:flex;align-items:center;gap:8px;animation:slideDown .3s ease-out}@keyframes slideDown{0%{top:-40px;opacity:0}to{top:20px;opacity:1}}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:m.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:K},{kind:"directive",type:V.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:V.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:V.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:JsonViewComponent,selector:"asor-json-view",inputs:["data","key","level","expandDepth"]}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:CacheTabComponent,decorators:[{type:p,args:[{selector:"asor-cache-tab",standalone:!0,imports:[w,K,JsonViewComponent],encapsulation:d.ShadowDom,template:'<div class="state-dashboard">\r\n\t\x3c!-- Cleanup Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showCleanUpBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<circle cx="12" cy="12" r="10"></circle>\r\n\t\t\t<line x1="12" y1="16" x2="12" y2="12"></line>\r\n\t\t\t<line x1="12" y1="8" x2="12.01" y2="8"></line>\r\n\t\t</svg>\r\n\t\t<span>No obsolete cache entries found. Everything is clean!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Clear All Info Banner --\x3e\r\n\t<div class="info-banner" *ngIf="showClearAllBanner">\r\n\t\t<svg\r\n\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\twidth="16"\r\n\t\t\theight="16"\r\n\t\t\tviewBox="0 0 24 24"\r\n\t\t\tfill="none"\r\n\t\t\tstroke="currentColor"\r\n\t\t\tstroke-width="2"\r\n\t\t\tstroke-linecap="round"\r\n\t\t\tstroke-linejoin="round"\r\n\t\t>\r\n\t\t\t<polyline points="20 6 9 17 4 12"></polyline>\r\n\t\t</svg>\r\n\t\t<span>All cache entries have been successfully cleared!</span>\r\n\t</div>\r\n\r\n\t\x3c!-- Header Stats --\x3e\r\n\t<div class="section-container header-section">\r\n\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.status">\r\n\t\t\t<div class="dashboard-header">\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Entries</div>\r\n\t\t\t\t\t<div class="value">{{ stats.total }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Total Cache Size</div>\r\n\t\t\t\t\t<div class="value">{{ formatSize(sizes.total) }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Volatile Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.volatile > 0">\r\n\t\t\t\t\t\t{{ stats.volatile }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.volatile) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Session Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.session > 0">{{ stats.session }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.session) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="stat-card">\r\n\t\t\t\t\t<div class="label">Local Cache</div>\r\n\t\t\t\t\t<div class="value" [class.active]="stats.local > 0">{{ stats.local }}</div>\r\n\t\t\t\t\t<div class="label" style="font-size: 9px; margin-top: 2px">\r\n\t\t\t\t\t\t{{ formatSize(sizes.local) }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class="header-toolbar">\r\n\t\t\t<button class="circle-c-btn" (click)="cleanUpCache()" title="Clean Up Obsolete Cache">\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="16"\r\n\t\t\t\t\theight="16"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d="m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"></path>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.35 2.22 1.45 3.02 1.45 2.26 0 4.14-1.84 4.14-4.11 0-1.66-1.35-3-3.02-3.02z"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn clear-all"\r\n\t\t\t\t(click)="clearAll(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Clear All Cache"\r\n\t\t\t>\r\n\t\t\t\t<svg\r\n\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\twidth="14"\r\n\t\t\t\t\theight="14"\r\n\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\tfill="none"\r\n\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t>\r\n\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t></path>\r\n\t\t\t\t\t<line x1="10" y1="11" x2="10" y2="17"></line>\r\n\t\t\t\t\t<line x1="14" y1="11" x2="14" y2="17"></line>\r\n\t\t\t\t</svg>\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t(click)="refreshCache(); $event.stopPropagation()"\r\n\t\t\t\ttitle="Refresh Cache"\r\n\t\t\t>\r\n\t\t\t\t↻\r\n\t\t\t</button>\r\n\t\t\t<button\r\n\t\t\t\tclass="circle-c-btn"\r\n\t\t\t\t[class.collapsed]="sectionsCollapsed.status"\r\n\t\t\t\t(click)="toggleSection(\'status\')"\r\n\t\t\t\ttitle="Toggle Status"\r\n\t\t\t>\r\n\t\t\t\t▾\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class="dashboard-content">\r\n\t\t<div class="split-view">\r\n\t\t\t\x3c!-- Active Rules Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'rules\')">\r\n\t\t\t\t\t<span>Active Cache Rules</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.rules">▾</span>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.rules">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter rules by path or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="rulesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="rulesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredRuleGroups.length > 0; else noRules"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredRuleGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path>\r\n\t\t\t\t\t\t\t\t\t\t<path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.persistenceType }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.rules.length }} rule<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.rules.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetSizeForType(group.persistenceType)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="rules-list" style="padding: 10px">\r\n\t\t\t\t\t\t\t\t<div class="rule-card" *ngFor="let rule of group.rules">\r\n\t\t\t\t\t\t\t\t\t<div class="rule-header">\r\n\t\t\t\t\t\t\t\t\t\t<span class="rule-path">{{ rule.pathValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\trule.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ rule.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class="rule-body">\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Payload Cache:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ rule.reqPayloadCache ? \'Enabled\' : \'Disabled\' }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class="rule-detail">\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Encryption:</strong> {{ rule.encriptType }}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\t\tclass="rule-detail"\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="rule.clearOn && rule.clearOn.length > 0"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<strong>Clear On:</strong>\r\n\t\t\t\t\t\t\t\t\t\t\t<ul class="clear-on-list">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li *ngFor="let c of rule.clearOn">{{ c }}</li>\r\n\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noRules>\r\n\t\t\t\t\t\t<div class="empty-state">No cache rules match the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t\x3c!-- Cache Entries Section --\x3e\r\n\t\t\t<div class="section-container">\r\n\t\t\t\t<h4 class="section-title" (click)="toggleSection(\'entries\')">\r\n\t\t\t\t\t<span>Cache Entries</span>\r\n\t\t\t\t\t<span class="collapse-icon" [class.collapsed]="sectionsCollapsed.entries"\r\n\t\t\t\t\t\t>▾</span\r\n\t\t\t\t\t>\r\n\t\t\t\t</h4>\r\n\t\t\t\t<div class="section-body" [class.collapsed]="sectionsCollapsed.entries">\r\n\t\t\t\t\t<div class="registry-toolbar">\r\n\t\t\t\t\t\t<div class="search-container">\r\n\t\t\t\t\t\t\t<span class="search-icon">\r\n\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<circle cx="11" cy="11" r="8"></circle>\r\n\t\t\t\t\t\t\t\t\t<line x1="21" y1="21" x2="16.65" y2="16.65"></line>\r\n\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t\t\t[(ngModel)]="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\ttype="text"\r\n\t\t\t\t\t\t\t\tplaceholder="Filter entries by key or type..."\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tclass="clear-search-btn"\r\n\t\t\t\t\t\t\t\t*ngIf="entriesSearchTerm"\r\n\t\t\t\t\t\t\t\t(click)="entriesSearchTerm = \'\'"\r\n\t\t\t\t\t\t\t\ttitle="Clear search"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t×\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass="registry-table-container"\r\n\t\t\t\t\t\t*ngIf="filteredCacheGroups.length > 0; else noData"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div class="registry-group" *ngFor="let group of filteredCacheGroups">\r\n\t\t\t\t\t\t\t<div class="registry-group-header">\r\n\t\t\t\t\t\t\t\t<span class="comp-icon">\r\n\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 17 12 22 22 17"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t<polyline points="2 12 12 17 22 12"></polyline>\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-name">{{ group.rulePath }}</span>\r\n\t\t\t\t\t\t\t\t<span class="comp-count"\r\n\t\t\t\t\t\t\t\t\t>{{ group.entries.length }} entry<ng-container\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="group.entries.length !== 1"\r\n\t\t\t\t\t\t\t\t\t\t>s</ng-container\r\n\t\t\t\t\t\t\t\t\t></span\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-left: auto">{{\r\n\t\t\t\t\t\t\t\t\tgetGroupSize(group)\r\n\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class="registry-list">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\tclass="registry-item-container"\r\n\t\t\t\t\t\t\t\t\t*ngFor="let entry of group.entries"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div class="registry-item">\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]="\r\n\t\t\t\t\t\t\t\t\t\t\t\tentry.persistenceType.toString().toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class="path-text" [title]="entry.key">\r\n\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tmargin-right: 4px;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvertical-align: text-top;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: #dcdcaa;\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<rect\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tx="3"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ty="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="18"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="11"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\trx="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\try="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t></rect>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t{{ entry.key }}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class="comp-count" style="margin-right: 8px">{{\r\n\t\t\t\t\t\t\t\t\t\t\tformatSize(entry.dataSize || 0)\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class="item-actions">\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedContentId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="\r\n\t\t\t\t\t\t\t\t\t\t\t\t\topenContentModal(entry.key, entry.encriptType)\r\n\t\t\t\t\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="View Content"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<circle cx="12" cy="12" r="3"></circle>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn"\r\n\t\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.hasPayload"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[class.active]="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="togglePayload(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Toggle Payload Request"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpoints="22 12 18 12 15 21 9 3 6 12 2 12"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass="action-btn delete"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)="deleteEntry(entry.key)"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttitle="Delete Entry"\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\theight="14"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline points="3 6 5 6 21 6"></polyline>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<path\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2-2v2"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t></path>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass="payload-content"\r\n\t\t\t\t\t\t\t\t\t\t*ngIf="expandedPayloadId === entry.key"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<asor-json-view\r\n\t\t\t\t\t\t\t\t\t\t\t*ngIf="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t[data]="entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t></asor-json-view>\r\n\t\t\t\t\t\t\t\t\t\t<span class="empty-payload" *ngIf="!entry.payloadData"\r\n\t\t\t\t\t\t\t\t\t\t\t>Unable to parse payload request.</span\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<ng-template #noData>\r\n\t\t\t\t\t\t<div class="empty-state">No items found in cache matching the filter.</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Modal Overlay for Content Details --\x3e\r\n<div class="modal-overlay" *ngIf="expandedContentId" (click)="closeContentModal()">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Content Details</h3>\r\n\t\t\t<span class="path-text" [title]="expandedContentId">{{ expandedContentId }}</span>\r\n\t\t\t<button class="close-btn" (click)="closeContentModal()" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body">\r\n\t\t\t<div class="decrypt-prompt" *ngIf="currentContent?._requiresKey">\r\n\t\t\t\t<div class="decrypt-header">\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t\t<span>Encrypted Content</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<p class="decrypt-desc">Enter the decryption key to view this response.</p>\r\n\t\t\t\t<div class="decrypt-input-group">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass="registry-search"\r\n\t\t\t\t\t\t[(ngModel)]="customKeys[expandedContentId]"\r\n\t\t\t\t\t\ttype="password"\r\n\t\t\t\t\t\tplaceholder="Enter Secret Key"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<button class="decrypt-btn" (click)="decryptContent(expandedContentId)">\r\n\t\t\t\t\t\tDecrypt\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="error-msg" *ngIf="decryptErrors[expandedContentId]">\r\n\t\t\t\t\t{{ decryptErrors[expandedContentId] }}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<asor-json-view\r\n\t\t\t\t*ngIf="currentContent && !currentContent._requiresKey"\r\n\t\t\t\t[data]="currentContent"\r\n\t\t\t></asor-json-view>\r\n\t\t\t<span class="empty-payload" *ngIf="!currentContent && currentContent !== null"\r\n\t\t\t\t>Empty content.</span\r\n\t\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Cleanup Results Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isCleanupModalOpen" (click)="isCleanupModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Cleaned Cache Entries</h3>\r\n\t\t\t<span class="path-text">Total recovered size: {{ formatSize(cleanedTotalSize) }}</span>\r\n\t\t\t<button class="close-btn" (click)="isCleanupModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 0">\r\n\t\t\t<div class="cleanup-table">\r\n\t\t\t\t<div class="cleanup-table-header">\r\n\t\t\t\t\t<span class="col-type">Type</span>\r\n\t\t\t\t\t<span class="col-path">Path</span>\r\n\t\t\t\t\t<span class="col-size" style="text-align: right">Size</span>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class="cleanup-table-body">\r\n\t\t\t\t\t<div class="cleanup-table-row" *ngFor="let entry of cleanedEntries">\r\n\t\t\t\t\t\t<span class="col-type">\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tclass="store-badge"\r\n\t\t\t\t\t\t\t\t*ngIf="entry.persistenceType"\r\n\t\t\t\t\t\t\t\t[ngClass]="entry.persistenceType.toString().toLowerCase()"\r\n\t\t\t\t\t\t\t\t>{{ entry.persistenceType }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-path" [title]="entry.key">\r\n\t\t\t\t\t\t\t<svg\r\n\t\t\t\t\t\t\t\t*ngIf="entry.encriptType && entry.encriptType !== \'NONE\'"\r\n\t\t\t\t\t\t\t\txmlns="http://www.w3.org/2000/svg"\r\n\t\t\t\t\t\t\t\twidth="12"\r\n\t\t\t\t\t\t\t\theight="12"\r\n\t\t\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t\t\t\tstyle="margin-right: 6px; flex-shrink: 0; color: #dcdcaa"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t\t\t<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\tstyle="\r\n\t\t\t\t\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\t\t\t\t"\r\n\t\t\t\t\t\t\t\t>{{ entry.key }}</span\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class="col-size">{{ formatSize(entry.dataSize) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n\x3c!-- Clear All Confirmation Modal --\x3e\r\n<div class="modal-overlay" *ngIf="isClearAllModalOpen" (click)="isClearAllModalOpen = false">\r\n\t<div class="modal-content" (click)="$event.stopPropagation()" style="max-width: 400px">\r\n\t\t<div class="modal-header">\r\n\t\t\t<h3>Confirm Cache Clear</h3>\r\n\t\t\t<button class="close-btn" (click)="isClearAllModalOpen = false" title="Close">×</button>\r\n\t\t</div>\r\n\t\t<div class="modal-body" style="padding: 20px">\r\n\t\t\t<p style="color: #ccc; margin: 0 0 20px 0; font-size: 14px; line-height: 1.5">\r\n\t\t\t\tAre you sure you want to completely clear the cache? This action cannot be undone.\r\n\t\t\t</p>\r\n\t\t\t<div style="display: flex; justify-content: flex-end; gap: 10px">\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="isClearAllModalOpen = false"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: transparent;\r\n\t\t\t\t\t\tborder: 1px solid #444;\r\n\t\t\t\t\t\tcolor: #ccc;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\t(click)="executeClearAll()"\r\n\t\t\t\t\tstyle="\r\n\t\t\t\t\t\tpadding: 6px 16px;\r\n\t\t\t\t\t\tbackground: rgba(244, 135, 113, 0.2);\r\n\t\t\t\t\t\tborder: 1px solid #f48771;\r\n\t\t\t\t\t\tcolor: #f48771;\r\n\t\t\t\t\t\tborder-radius: 4px;\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\tfont-size: 13px;\r\n\t\t\t\t\t\tfont-weight: 600;\r\n\t\t\t\t\t"\r\n\t\t\t\t>\r\n\t\t\t\t\tClear All\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n',styles:[".state-dashboard{display:flex;flex-direction:column;height:100%;color:#ccc;font-family:Segoe UI,sans-serif;gap:6px;overflow-y:auto}.state-dashboard::-webkit-scrollbar,.state-dashboard .registry-table-container::-webkit-scrollbar,.state-dashboard .payload-content::-webkit-scrollbar,.state-dashboard .rules-list::-webkit-scrollbar{width:10px;height:10px}.state-dashboard::-webkit-scrollbar-track,.state-dashboard .registry-table-container::-webkit-scrollbar-track,.state-dashboard .payload-content::-webkit-scrollbar-track,.state-dashboard .rules-list::-webkit-scrollbar-track{background:#1e1e1e}.state-dashboard::-webkit-scrollbar-thumb,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb,.state-dashboard .payload-content::-webkit-scrollbar-thumb,.state-dashboard .rules-list::-webkit-scrollbar-thumb{background:#424242;border-radius:5px;border:2px solid #1e1e1e}.state-dashboard::-webkit-scrollbar-thumb:hover,.state-dashboard .registry-table-container::-webkit-scrollbar-thumb:hover,.state-dashboard .payload-content::-webkit-scrollbar-thumb:hover,.state-dashboard .rules-list::-webkit-scrollbar-thumb:hover{background:#4f4f4f}.state-dashboard .dashboard-header{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.state-dashboard .dashboard-header .stat-card{background-color:#252526;border:1px solid #333;border-radius:6px;padding:8px 12px;min-width:100px;display:flex;flex-direction:column;align-items:center}.state-dashboard .dashboard-header .stat-card .label{font-size:10px;color:#888;text-transform:uppercase;letter-spacing:.5px}.state-dashboard .dashboard-header .stat-card .value{font-size:14px;font-weight:600;color:#eee;margin-top:2px}.state-dashboard .dashboard-header .stat-card .value.active{color:#4caf50}.state-dashboard .header-toolbar{display:flex;justify-content:flex-end;gap:6px;padding:4px 8px}.state-dashboard .header-toolbar .circle-c-btn{background:none;border:1px solid #444;color:#ccc;cursor:pointer;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.state-dashboard .header-toolbar .circle-c-btn:hover{background-color:#333}.state-dashboard .header-toolbar .circle-c-btn.clear-all:hover{background-color:#f4877133;color:#f48771}.state-dashboard .header-toolbar .circle-c-btn.collapsed{transform:rotate(-90deg)}.state-dashboard .header-section{flex-shrink:0;display:flex;flex-direction:row;align-items:flex-start;overflow:hidden;border-radius:6px}.state-dashboard .header-section .section-body{flex:1;min-width:0;padding:5px;transition:opacity .25s ease}.state-dashboard .header-section .section-body.collapsed{padding:0;margin:0;max-height:0;opacity:0}@media (max-width: 768px){.state-dashboard .header-section{display:unset}}.state-dashboard .dashboard-content{flex:1;overflow-y:auto;padding-right:5px}.state-dashboard .dashboard-content .split-view{display:flex;gap:20px;height:100%}.state-dashboard .dashboard-content .section-container{display:flex;flex-direction:column;overflow:hidden;border:1px solid #333;border-radius:6px;margin-bottom:20px;flex:1;min-width:0}@media (max-width: 768px){.state-dashboard .dashboard-content .split-view{flex-direction:column;height:auto}.state-dashboard .dashboard-content .section-container{flex:none}}.state-dashboard .dashboard-content .section-title{margin:4px 8px;font-size:13px;color:#888;font-weight:600;display:flex;justify-content:space-between;align-items:center;cursor:pointer;border-radius:4px}.state-dashboard .dashboard-content .section-title:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .section-title .collapse-icon{font-size:14px;transition:transform .25s ease}.state-dashboard .dashboard-content .section-title .collapse-icon.collapsed{transform:rotate(-90deg)}.state-dashboard .dashboard-content .section-body{padding:5px;max-height:2000px;transition:max-height .35s ease,opacity .25s ease;display:flex;flex-direction:column;flex:1;min-height:0}.state-dashboard .dashboard-content .section-body.collapsed{padding:0;max-height:0;opacity:0;overflow:hidden}.state-dashboard .dashboard-content .registry-toolbar{padding:8px 10px;background-color:#252526;border-bottom:1px solid #333;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container{position:relative;display:flex;align-items:center;background-color:#1e1e1e;border:1px solid #3c3c3c;border-radius:4px}.state-dashboard .dashboard-content .registry-toolbar .search-container:focus-within{border-color:#007acc}.state-dashboard .dashboard-content .registry-toolbar .search-container .search-icon{padding:0 8px;color:#888;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search{flex:1;background:transparent;border:none;color:#d4d4d4;padding:6px 0;font-size:13px;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-toolbar .search-container .registry-search::placeholder{color:#666}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn{background:transparent;border:none;color:#888;padding:0 8px;cursor:pointer;font-size:16px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-toolbar .search-container .clear-search-btn:hover{color:#ccc}.state-dashboard .dashboard-content .rules-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .rules-list .rule-card{background-color:#1e1e1e;border:1px solid #333;border-radius:6px;padding:10px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-header .rule-path{font-family:monospace;color:#dcdcaa;font-weight:700}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body{font-size:12px;color:#9cdcfe}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail{margin-top:4px}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail strong{color:#888}.state-dashboard .dashboard-content .rules-list .rule-card .rule-body .rule-detail .clear-on-list{margin:4px 0 0 16px;padding:0;color:#ce9178;font-family:monospace}.state-dashboard .dashboard-content .registry-table-container{overflow-y:auto;flex:1;padding:2px 5px 20px}.state-dashboard .dashboard-content .registry-table-container .registry-group{margin-bottom:16px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header{display:flex;align-items:center;gap:8px;padding:6px 12px;background-color:#252526;border-top:1px solid #333;border-bottom:1px solid #333;border-radius:4px;position:sticky;top:0;z-index:10}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-icon{color:#4ec9b0;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-name{color:#4ec9b0;font-weight:600;font-family:monospace;font-size:13px;flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-group-header .comp-count{font-size:11px;color:#888;background:#ffffff0d;padding:2px 6px;border-radius:10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list{display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container{border-bottom:1px solid #333;display:flex;flex-direction:column}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container:last-child{border-bottom:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item{padding:8px 12px 8px 36px;display:flex;align-items:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item:hover{background-color:#2a2a2a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .store-badge{margin-right:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions{display:flex;gap:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn{background:none;border:none;color:#ccc;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn:hover{background-color:#ffffff1a}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.delete:hover{background-color:#f4877133;color:#f48771}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .registry-item .item-actions .action-btn.active{background-color:#2a2a2a;color:#4fc1ff}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .payload-content{border-top:1px solid #333;max-height:300px;overflow-y:auto;padding:10px 12px 10px 36px;background:#1e1e1e;color:#d16969;font-size:12px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt{padding:10px 0}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:13px;margin-bottom:6px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-desc{font-size:12px;color:#888;margin:0 0 10px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:6px 10px;font-size:12px;flex:1;font-family:inherit;outline:none}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:6px 12px;font-size:12px;cursor:pointer;transition:background-color .2s}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.state-dashboard .dashboard-content .registry-table-container .registry-group .registry-list .registry-item-container .decrypt-prompt .error-msg{color:#f48771;font-size:11px;margin-top:4px}.state-dashboard .empty-state{padding:20px;text-align:center;color:#666;font-style:italic}:host{display:block;height:100%}:host *::-webkit-scrollbar{width:8px;height:8px}:host *::-webkit-scrollbar-track{background:#1e1e1e;border-radius:4px}:host *::-webkit-scrollbar-thumb{background:#444;border-radius:4px}:host *::-webkit-scrollbar-thumb:hover{background:#555}:host .cache-dashboard{padding:20px;color:#d4d4d4}:host .store-badge{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600}:host .store-badge.session{background-color:#0e639c33;color:#4fc1ff}:host .store-badge.local{background-color:#60ac3933;color:#b5cea8}:host .store-badge.volatile{background-color:#d7ba7d33;color:#d7ba7d}.cleanup-table{display:flex;flex-direction:column;max-height:400px}.cleanup-table .cleanup-table-header{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;padding:10px 16px;background-color:#252526;border-bottom:1px solid #333;font-size:12px;font-weight:600;color:#888;position:sticky;top:0}.cleanup-table .cleanup-table-body{overflow-y:auto;display:flex;flex-direction:column}.cleanup-table .cleanup-table-body .cleanup-table-row{display:grid;grid-template-columns:80px 1fr 80px;gap:16px;align-items:center;padding:8px 16px;border-bottom:1px solid #333}.cleanup-table .cleanup-table-body .cleanup-table-row:last-child{border-bottom:none}.cleanup-table .cleanup-table-body .cleanup-table-row:hover{background-color:#2a2a2a}.cleanup-table .cleanup-table-body .cleanup-table-row .col-type{display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-path{color:#ce9178;font-family:monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center}.cleanup-table .cleanup-table-body .cleanup-table-row .col-size{color:#888;font-size:11px;text-align:right;background:#ffffff0d;padding:2px 6px;border-radius:10px}.modal-overlay{position:absolute;inset:0;width:100%;height:100%;background-color:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#1e1e1e;border:1px solid #333;border-radius:8px;width:90%;max-width:800px;max-height:90%;display:flex;flex-direction:column;box-shadow:0 10px 30px #00000080}.modal-content .modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;background-color:#252526;border-top-left-radius:8px;border-top-right-radius:8px;gap:12px}.modal-content .modal-header h3{margin:0;font-size:14px;color:#ccc;font-weight:600}.modal-content .modal-header .path-text{color:#ce9178;font-family:monospace;font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-content .modal-header .close-btn{background:none;border:none;color:#888;font-size:20px;cursor:pointer;line-height:1;padding:0 4px}.modal-content .modal-header .close-btn:hover{color:#ccc}.modal-content .modal-body{padding:16px;overflow-y:auto;flex:1}.modal-content .modal-body .decrypt-prompt{padding:10px 0}.modal-content .modal-body .decrypt-prompt .decrypt-header{display:flex;align-items:center;gap:8px;color:#e2c08d;font-weight:600;font-size:14px;margin-bottom:10px}.modal-content .modal-body .decrypt-prompt .decrypt-desc{font-size:13px;color:#888;margin:0 0 12px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group{display:flex;gap:8px;margin-bottom:8px}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search{background-color:#252526;border:1px solid #3c3c3c;border-radius:4px;color:#d4d4d4;padding:8px 12px;font-size:13px;flex:1;font-family:inherit;outline:none}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .registry-search:focus{border-color:#007acc}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn{background-color:#007acc;color:#fff;border:none;border-radius:4px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .2s}.modal-content .modal-body .decrypt-prompt .decrypt-input-group .decrypt-btn:hover{background-color:#005999}.modal-content .modal-body .decrypt-prompt .error-msg{color:#f48771;font-size:12px;margin-top:6px}.info-banner{position:absolute;top:20px;left:50%;transform:translate(-50%);background-color:#252526;border:1px solid #4ec9b0;color:#4ec9b0;padding:8px 16px;border-radius:6px;box-shadow:0 4px 12px #00000080;z-index:1001;font-size:13px;display:flex;align-items:center;gap:8px;animation:slideDown .3s ease-out}@keyframes slideDown{0%{top:-40px;opacity:0}to{top:20px;opacity:1}}\n"]}]}],ctorParameters:()=>[{type:WidgetCacheUtility}]});class AsorWidgetComponent{mode="on";logoSrc="data:image/png;base64,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";isOpen=!1;activeTab="console";widgetHeight=80;spyActivated=!1;get isVisible(){switch(this.mode){case"off":return!1;case"on":return!0;case"spy":return this.spyActivated}}onKeyDown(t){"spy"===this.mode&&t.ctrlKey&&"i"===t.key.toLowerCase()&&(t.preventDefault(),this.spyActivated=!this.spyActivated,this.spyActivated||(this.isOpen=!1))}toggleSlider(){this.isOpen=!this.isOpen}setHeight(t){this.widgetHeight=t}selectTab(t){this.activeTab=t}onTabChange(t){this.selectTab(t.target.value)}static ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AsorWidgetComponent,deps:[],target:t.ɵɵFactoryTarget.Component});static ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"20.3.16",type:AsorWidgetComponent,isStandalone:!0,selector:"asor-core-widget",inputs:{mode:"mode"},host:{listeners:{"document:keydown":"onKeyDown($event)"}},ngImport:t,template:'<div class="asor-widget-container" *ngIf="isVisible">\r\n\t<div\r\n\t\tclass="slider"\r\n\t\t[class.open]="isOpen"\r\n\t\t[style.height.%]="widgetHeight"\r\n\t\t[style.bottom.%]="isOpen ? 0 : -widgetHeight"\r\n\t>\r\n\t\t<div class="slider-header">\r\n\t\t\t<div class="header-left">\r\n\t\t\t\t<img class="header-logo" [src]="logoSrc" alt="Asor Logo" />\r\n\t\t\t\t<span class="logo-text">Asor Core</span>\r\n\t\t\t\t<nav class="tabs">\r\n\t\t\t\t\t<button [class.active]="activeTab === \'console\'" (click)="selectTab(\'console\')">\r\n\t\t\t\t\t\tConsole\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'storage\'" (click)="selectTab(\'storage\')">\r\n\t\t\t\t\t\tStorage\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'cache\'" (click)="selectTab(\'cache\')">\r\n\t\t\t\t\t\tCache\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</nav>\r\n\t\t\t\t<div class="mobile-tabs">\r\n\t\t\t\t\t<select [value]="activeTab" (change)="onTabChange($event)">\r\n\t\t\t\t\t\t<option value="console">Console</option>\r\n\t\t\t\t\t\t<option value="storage">Storage</option>\r\n\t\t\t\t\t\t<option value="cache">Cache</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="header-right">\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 20"\r\n\t\t\t\t\t(click)="setHeight(20)"\r\n\t\t\t\t\ttitle="20%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="17" x2="21" y2="17"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 80"\r\n\t\t\t\t\t(click)="setHeight(80)"\r\n\t\t\t\t\ttitle="80%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="7" x2="21" y2="7"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 100"\r\n\t\t\t\t\t(click)="setHeight(100)"\r\n\t\t\t\t\ttitle="100%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button class="close-btn" (click)="toggleSlider()">×</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class="slider-content">\r\n\t\t\t<asor-console-tab class="tab-panel" *ngIf="activeTab === \'console\'"></asor-console-tab>\r\n\t\t\t<asor-storage-tab class="tab-panel" *ngIf="activeTab === \'storage\'"></asor-storage-tab>\r\n\t\t\t<asor-cache-tab class="tab-panel" *ngIf="activeTab === \'cache\'"></asor-cache-tab>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<button class="floating-btn" *ngIf="!isOpen" (click)="toggleSlider()">\r\n\t\t<img [src]="logoSrc" alt="Asor Core Logo" />\r\n\t</button>\r\n</div>\r\n',styles:[":host{display:block}.asor-widget-container{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.asor-widget-container *,.asor-widget-container *:before,.asor-widget-container *:after{box-sizing:border-box}.floating-btn{position:fixed;bottom:20px;right:20px;width:50px;height:50px;border-radius:50%;background-color:#007acc;box-shadow:0 4px 15px #0006;border:none;cursor:pointer;z-index:9999;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.25,.8,.25,1)}.floating-btn:hover{transform:scale(1.1);box-shadow:0 6px 20px #00000080}.floating-btn img{width:60%;height:60%;object-fit:contain;filter:brightness(0) invert(1)}.slider{position:fixed;left:0;right:0;background-color:#1e1e1e;color:#ccc;box-shadow:0 -4px 25px #00000080;z-index:9998;transition:bottom .4s cubic-bezier(.25,.8,.25,1),height .4s cubic-bezier(.25,.8,.25,1);border-top-left-radius:12px;border-top-right-radius:12px;display:flex;flex-direction:column;border-top:1px solid #333;overflow-y:auto;overscroll-behavior:none}.slider .slider-header{padding:0 20px;height:50px;border-bottom:1px solid #333;background-color:#252526;display:flex;justify-content:space-between;align-items:center;border-top-left-radius:12px;border-top-right-radius:12px}.slider .slider-header .header-left{display:flex;align-items:center;gap:12px}.slider .slider-header .header-left .header-logo{height:24px;width:auto;vertical-align:middle}.slider .slider-header .logo-text{font-weight:600;color:#fff;font-size:14px;letter-spacing:.5px}.slider .slider-header .tabs{display:flex;gap:10px;height:100%}@media (max-width: 768px){.slider .slider-header .tabs{display:none}}.slider .slider-header .tabs button{background:none;border:none;height:100%;padding:0 10px;font-size:13px;cursor:pointer;color:#999;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent}.slider .slider-header .tabs button:hover{color:#fff}.slider .slider-header .tabs button.active{color:#fff;border-bottom-color:#007acc}.slider .slider-header .mobile-tabs{display:none;height:100%;align-items:center}.slider .slider-header .mobile-tabs select{background-color:#333;color:#fff;border:1px solid #444;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:13px;outline:none}.slider .slider-header .mobile-tabs select:focus{border-color:#007acc}@media (max-width: 768px){.slider .slider-header .mobile-tabs{display:flex}}.slider .slider-header .header-right{display:flex;align-items:center;gap:4px}.slider .slider-header .header-right .resize-btn,.slider .slider-header .header-right .close-btn{background:none;border:none;cursor:pointer;color:#999;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px}.slider .slider-header .header-right .resize-btn.active,.slider .slider-header .header-right .resize-btn:hover,.slider .slider-header .header-right .close-btn.active,.slider .slider-header .header-right .close-btn:hover{background-color:#333;color:#fff}.slider .slider-header .header-right .close-btn{font-size:20px}.slider .slider-content{flex:1;padding:16px;overflow:hidden;background-color:#1e1e1e}.slider .tab-panel{height:100%;display:block}@media (max-width: 768px){.slider .floating-btn{bottom:16px;right:16px;width:44px;height:44px}.slider .slider.open~.floating-btn{display:none}}\n"],dependencies:[{kind:"ngmodule",type:w},{kind:"directive",type:m.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ConsoleTabComponent,selector:"asor-console-tab"},{kind:"component",type:StorageTabComponent,selector:"asor-storage-tab"},{kind:"component",type:CacheTabComponent,selector:"asor-cache-tab"}],encapsulation:t.ViewEncapsulation.ShadowDom})}t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"20.3.16",ngImport:t,type:AsorWidgetComponent,decorators:[{type:p,args:[{selector:"asor-core-widget",standalone:!0,imports:[w,ConsoleTabComponent,StorageTabComponent,CacheTabComponent],encapsulation:d.ShadowDom,template:'<div class="asor-widget-container" *ngIf="isVisible">\r\n\t<div\r\n\t\tclass="slider"\r\n\t\t[class.open]="isOpen"\r\n\t\t[style.height.%]="widgetHeight"\r\n\t\t[style.bottom.%]="isOpen ? 0 : -widgetHeight"\r\n\t>\r\n\t\t<div class="slider-header">\r\n\t\t\t<div class="header-left">\r\n\t\t\t\t<img class="header-logo" [src]="logoSrc" alt="Asor Logo" />\r\n\t\t\t\t<span class="logo-text">Asor Core</span>\r\n\t\t\t\t<nav class="tabs">\r\n\t\t\t\t\t<button [class.active]="activeTab === \'console\'" (click)="selectTab(\'console\')">\r\n\t\t\t\t\t\tConsole\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'storage\'" (click)="selectTab(\'storage\')">\r\n\t\t\t\t\t\tStorage\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button [class.active]="activeTab === \'cache\'" (click)="selectTab(\'cache\')">\r\n\t\t\t\t\t\tCache\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</nav>\r\n\t\t\t\t<div class="mobile-tabs">\r\n\t\t\t\t\t<select [value]="activeTab" (change)="onTabChange($event)">\r\n\t\t\t\t\t\t<option value="console">Console</option>\r\n\t\t\t\t\t\t<option value="storage">Storage</option>\r\n\t\t\t\t\t\t<option value="cache">Cache</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class="header-right">\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 20"\r\n\t\t\t\t\t(click)="setHeight(20)"\r\n\t\t\t\t\ttitle="20%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="17" x2="21" y2="17"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 80"\r\n\t\t\t\t\t(click)="setHeight(80)"\r\n\t\t\t\t\ttitle="80%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t\t<line x1="3" y1="7" x2="21" y2="7"></line>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button\r\n\t\t\t\t\tclass="resize-btn"\r\n\t\t\t\t\t[class.active]="widgetHeight === 100"\r\n\t\t\t\t\t(click)="setHeight(100)"\r\n\t\t\t\t\ttitle="100%"\r\n\t\t\t\t>\r\n\t\t\t\t\t<svg\r\n\t\t\t\t\t\tviewBox="0 0 24 24"\r\n\t\t\t\t\t\twidth="16"\r\n\t\t\t\t\t\theight="16"\r\n\t\t\t\t\t\tstroke="currentColor"\r\n\t\t\t\t\t\tstroke-width="2"\r\n\t\t\t\t\t\tfill="none"\r\n\t\t\t\t\t\tstroke-linecap="round"\r\n\t\t\t\t\t\tstroke-linejoin="round"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>\r\n\t\t\t\t\t</svg>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button class="close-btn" (click)="toggleSlider()">×</button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class="slider-content">\r\n\t\t\t<asor-console-tab class="tab-panel" *ngIf="activeTab === \'console\'"></asor-console-tab>\r\n\t\t\t<asor-storage-tab class="tab-panel" *ngIf="activeTab === \'storage\'"></asor-storage-tab>\r\n\t\t\t<asor-cache-tab class="tab-panel" *ngIf="activeTab === \'cache\'"></asor-cache-tab>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<button class="floating-btn" *ngIf="!isOpen" (click)="toggleSlider()">\r\n\t\t<img [src]="logoSrc" alt="Asor Core Logo" />\r\n\t</button>\r\n</div>\r\n',styles:[":host{display:block}.asor-widget-container{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.asor-widget-container *,.asor-widget-container *:before,.asor-widget-container *:after{box-sizing:border-box}.floating-btn{position:fixed;bottom:20px;right:20px;width:50px;height:50px;border-radius:50%;background-color:#007acc;box-shadow:0 4px 15px #0006;border:none;cursor:pointer;z-index:9999;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.25,.8,.25,1)}.floating-btn:hover{transform:scale(1.1);box-shadow:0 6px 20px #00000080}.floating-btn img{width:60%;height:60%;object-fit:contain;filter:brightness(0) invert(1)}.slider{position:fixed;left:0;right:0;background-color:#1e1e1e;color:#ccc;box-shadow:0 -4px 25px #00000080;z-index:9998;transition:bottom .4s cubic-bezier(.25,.8,.25,1),height .4s cubic-bezier(.25,.8,.25,1);border-top-left-radius:12px;border-top-right-radius:12px;display:flex;flex-direction:column;border-top:1px solid #333;overflow-y:auto;overscroll-behavior:none}.slider .slider-header{padding:0 20px;height:50px;border-bottom:1px solid #333;background-color:#252526;display:flex;justify-content:space-between;align-items:center;border-top-left-radius:12px;border-top-right-radius:12px}.slider .slider-header .header-left{display:flex;align-items:center;gap:12px}.slider .slider-header .header-left .header-logo{height:24px;width:auto;vertical-align:middle}.slider .slider-header .logo-text{font-weight:600;color:#fff;font-size:14px;letter-spacing:.5px}.slider .slider-header .tabs{display:flex;gap:10px;height:100%}@media (max-width: 768px){.slider .slider-header .tabs{display:none}}.slider .slider-header .tabs button{background:none;border:none;height:100%;padding:0 10px;font-size:13px;cursor:pointer;color:#999;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent}.slider .slider-header .tabs button:hover{color:#fff}.slider .slider-header .tabs button.active{color:#fff;border-bottom-color:#007acc}.slider .slider-header .mobile-tabs{display:none;height:100%;align-items:center}.slider .slider-header .mobile-tabs select{background-color:#333;color:#fff;border:1px solid #444;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:13px;outline:none}.slider .slider-header .mobile-tabs select:focus{border-color:#007acc}@media (max-width: 768px){.slider .slider-header .mobile-tabs{display:flex}}.slider .slider-header .header-right{display:flex;align-items:center;gap:4px}.slider .slider-header .header-right .resize-btn,.slider .slider-header .header-right .close-btn{background:none;border:none;cursor:pointer;color:#999;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px}.slider .slider-header .header-right .resize-btn.active,.slider .slider-header .header-right .resize-btn:hover,.slider .slider-header .header-right .close-btn.active,.slider .slider-header .header-right .close-btn:hover{background-color:#333;color:#fff}.slider .slider-header .header-right .close-btn{font-size:20px}.slider .slider-content{flex:1;padding:16px;overflow:hidden;background-color:#1e1e1e}.slider .tab-panel{height:100%;display:block}@media (max-width: 768px){.slider .floating-btn{bottom:16px;right:16px;width:44px;height:44px}.slider .slider.open~.floating-btn{display:none}}\n"]}]}],propDecorators:{mode:[{type:c}],onKeyDown:[{type:b,args:["document:keydown",["$event"]]}]}});export{q as AsorGlobalEnum,J as AsorStorage,AsorWidgetComponent,AuthGuard,AuthUtility,BaseComponent,BaseHandlerMixin,BaseMolecule,BaseStorageComponent,BaseStorageMolecule,CacheInterceptor,CachePathUtility,CacheUtility,CollectionUtils,ConfigCache,ConfigConst,ConsoleLogsConfig,ConsoleLogsUtility,CookieUtils,ErrorInterceptor,HttpRequestHandler,MockHttpInterceptor,MockOrchestratorService,MockRequestMapping,NotifyErrorService,ObjectUtils,RandomUtils,RoutingUtility,StateConst,StateService,Z as StringUtils,TranslatePipe,TranslateUtility,createFlattenedReactiveProxy};