var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Component } from '@angular/core';
import { BaseResourceComponent } from '@memberjunction/ng-shared';
import { RegisterClass } from '@memberjunction/global';
import { DevToolsPrefs } from './dev-tools-prefs';
import { buildLazyModuleStatusAgentContext } from './dev-tools-agent-context';
import { validateStringParam } from '../shared/agent-tool-validation';
import * as i0 from "@angular/core";
import * as i1 from "@memberjunction/ng-ui-components";
function LazyModuleStatusComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 4);
    i0.ɵɵelement(1, "i", 5);
    i0.ɵɵelementStart(2, "div")(3, "strong");
    i0.ɵɵtext(4, "Lazy registry not available.");
    i0.ɵɵelementEnd();
    i0.ɵɵtext(5, " The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it. ");
    i0.ɵɵelementEnd()();
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 30);
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 21);
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 38);
    i0.ɵɵtext(1, " Loading ");
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 39);
    i0.ɵɵtext(1, " Load ");
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template(rf, ctx) { if (rf & 1) {
    const _r3 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 37);
    i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const chunk_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnForceLoad(chunk_r4)); });
    i0.ɵɵconditionalCreate(1, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_1_Template, 2, 0)(2, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_2_Template, 2, 0);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const chunk_r4 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵproperty("disabled", chunk_r4.loading);
    i0.ɵɵadvance();
    i0.ɵɵconditional(chunk_r4.loading ? 1 : 2);
} }
function LazyModuleStatusComponent_Conditional_5_For_45_For_13_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span", 35);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const k_r5 = ctx.$implicit;
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(k_r5);
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 41);
    i0.ɵɵtext(1, " Show less ");
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "i", 42);
    i0.ɵɵtext(1);
} if (rf & 2) {
    const chunk_r4 = i0.ɵɵnextContext(2).$implicit;
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate1(" Show all ", chunk_r4.keys.length, " entries ");
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template(rf, ctx) { if (rf & 1) {
    const _r6 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "button", 40);
    i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const chunk_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleChunkExpand(chunk_r4)); });
    i0.ɵɵconditionalCreate(1, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_1_Template, 2, 0)(2, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_2_Template, 2, 1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const chunk_r4 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵadvance();
    i0.ɵɵconditional(chunk_r4.expanded ? 1 : 2);
} }
function LazyModuleStatusComponent_Conditional_5_For_45_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 27)(1, "div", 28)(2, "div", 29);
    i0.ɵɵconditionalCreate(3, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_3_Template, 1, 0, "i", 30)(4, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_4_Template, 1, 0, "i", 21);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(5, "div", 31)(6, "code");
    i0.ɵɵtext(7);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(8, "span", 32);
    i0.ɵɵtext(9);
    i0.ɵɵelementEnd()();
    i0.ɵɵconditionalCreate(10, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template, 3, 2, "button", 33);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(11, "div", 34);
    i0.ɵɵrepeaterCreate(12, LazyModuleStatusComponent_Conditional_5_For_45_For_13_Template, 2, 1, "span", 35, i0.ɵɵrepeaterTrackByIdentity);
    i0.ɵɵelementEnd();
    i0.ɵɵconditionalCreate(14, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template, 3, 1, "button", 36);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const chunk_r4 = ctx.$implicit;
    const ctx_r1 = i0.ɵɵnextContext(2);
    i0.ɵɵclassProp("lz-card--loaded", chunk_r4.loaded);
    i0.ɵɵadvance(2);
    i0.ɵɵclassProp("lz-card-status--loaded", chunk_r4.loaded);
    i0.ɵɵadvance();
    i0.ɵɵconditional(chunk_r4.loaded ? 3 : 4);
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(chunk_r4.label);
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate1("", chunk_r4.keys.length, " entries");
    i0.ɵɵadvance();
    i0.ɵɵconditional(!chunk_r4.loaded ? 10 : -1);
    i0.ɵɵadvance();
    i0.ɵɵclassProp("lz-card-keys--expanded", chunk_r4.expanded);
    i0.ɵɵadvance();
    i0.ɵɵrepeater(ctx_r1.VisibleKeys(chunk_r4));
    i0.ɵɵadvance(2);
    i0.ɵɵconditional(ctx_r1.HiddenCount(chunk_r4) > 0 || chunk_r4.expanded ? 14 : -1);
} }
function LazyModuleStatusComponent_Conditional_5_Conditional_46_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelement(0, "mj-empty-state", 26);
} }
function LazyModuleStatusComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
    const _r1 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 6)(1, "div", 7)(2, "div", 8);
    i0.ɵɵelement(3, "div", 9);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 10)(5, "span", 11);
    i0.ɵɵtext(6);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(7, "span", 12);
    i0.ɵɵtext(8);
    i0.ɵɵelementEnd()()();
    i0.ɵɵelementStart(9, "div", 13)(10, "div", 14)(11, "div", 15);
    i0.ɵɵtext(12);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(13, "div", 16);
    i0.ɵɵtext(14, "Registered keys");
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(15, "div", 14)(16, "div", 15);
    i0.ɵɵtext(17);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(18, "div", 16);
    i0.ɵɵtext(19, "Loaded keys");
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(20, "div", 14)(21, "div", 15);
    i0.ɵɵtext(22);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(23, "div", 16);
    i0.ɵɵtext(24, "Total chunks");
    i0.ɵɵelementEnd()()()();
    i0.ɵɵelementStart(25, "div", 17)(26, "button", 18);
    i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("all")); });
    i0.ɵɵtext(27, " All ");
    i0.ɵɵelementStart(28, "span", 19);
    i0.ɵɵtext(29);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(30, "button", 18);
    i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("loaded")); });
    i0.ɵɵelement(31, "i", 20);
    i0.ɵɵtext(32, " Loaded ");
    i0.ɵɵelementStart(33, "span", 19);
    i0.ɵɵtext(34);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(35, "button", 18);
    i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("not-loaded")); });
    i0.ɵɵelement(36, "i", 21);
    i0.ɵɵtext(37, " Not loaded ");
    i0.ɵɵelementStart(38, "span", 19);
    i0.ɵɵtext(39);
    i0.ɵɵelementEnd()();
    i0.ɵɵelement(40, "span", 22);
    i0.ɵɵelementStart(41, "span", 23);
    i0.ɵɵtext(42);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(43, "div", 24);
    i0.ɵɵrepeaterCreate(44, LazyModuleStatusComponent_Conditional_5_For_45_Template, 15, 11, "div", 25, i0.ɵɵcomponentInstance().TrackByChunk, true);
    i0.ɵɵconditionalCreate(46, LazyModuleStatusComponent_Conditional_5_Conditional_46_Template, 1, 0, "mj-empty-state", 26);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r1 = i0.ɵɵnextContext();
    i0.ɵɵadvance(3);
    i0.ɵɵstyleProp("width", ctx_r1.Stats.percent, "%");
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate1("", ctx_r1.Stats.percent, "%");
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate2("", ctx_r1.Stats.loadedChunks, " of ", ctx_r1.Stats.chunkCount, " chunks loaded");
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.totalKeys);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.loadedKeys);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.chunkCount);
    i0.ɵɵadvance(4);
    i0.ɵɵclassProp("lz-filter--active", ctx_r1.Filter === "all");
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.chunkCount);
    i0.ɵɵadvance();
    i0.ɵɵclassProp("lz-filter--active", ctx_r1.Filter === "loaded");
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.loadedChunks);
    i0.ɵɵadvance();
    i0.ɵɵclassProp("lz-filter--active", ctx_r1.Filter === "not-loaded");
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(ctx_r1.Stats.chunkCount - ctx_r1.Stats.loadedChunks);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate1("Refreshed ", ctx_r1.LastRefreshedLabel);
    i0.ɵɵadvance(2);
    i0.ɵɵrepeater(ctx_r1.FilteredChunks);
    i0.ɵɵadvance(2);
    i0.ɵɵconditional(ctx_r1.FilteredChunks.length === 0 ? 46 : -1);
} }
/** How many entry pills to show in the collapsed card before "Show all". */
const COLLAPSED_KEY_LIMIT = 8;
/**
 * Lazy Module Status — visualizes the Explorer's lazy-loading registry.
 * Shows each chunk, its status (loaded vs not), the registrations it
 * brings in, and offers a "Force Load" button to preload on demand.
 *
 * Reads from the global `__mj_lazy_registry__` published by `LazyModuleRegistry`
 * — no hard package dep on explorer-core.
 */
let LazyModuleStatusComponent = class LazyModuleStatusComponent extends BaseResourceComponent {
    cdr;
    Stats = { totalKeys: 0, loadedKeys: 0, chunkCount: 0, loadedChunks: 0, percent: 0 };
    Chunks = [];
    Available = false;
    Filter = 'all';
    /** Free-text search narrowing chunks by label or registration key. */
    SearchQuery = '';
    LastRefreshed = new Date();
    constructor(cdr) {
        super();
        this.cdr = cdr;
    }
    ngOnInit() {
        const prefs = DevToolsPrefs.Get('lazyModule');
        if (prefs?.filter)
            this.Filter = prefs.filter;
        this.refresh();
        if (prefs?.expanded) {
            for (const c of this.Chunks)
                c.expanded = prefs.expanded.includes(c.chunkId);
        }
        this.NotifyLoadComplete();
    }
    ngAfterViewInit() {
        // Publish initial agent context + register the read-only client tools.
        // Re-emit happens on refresh, filter change, and the search tool.
        this.publishAgentContext();
        this.registerAgentClientTools();
    }
    ngOnDestroy() {
        this.savePrefs();
        super.ngOnDestroy();
    }
    savePrefs() {
        DevToolsPrefs.Save('lazyModule', {
            filter: this.Filter,
            expanded: this.Chunks.filter(c => c.expanded).map(c => c.chunkId)
        });
    }
    async GetResourceDisplayName() { return 'Lazy Loading'; }
    async GetResourceIconClass() { return 'fa-solid fa-puzzle-piece'; }
    refresh() {
        const reg = globalThis.__mj_lazy_registry__;
        if (!reg || typeof reg.GetSnapshot !== 'function') {
            this.Available = false;
            this.cdr.markForCheck();
            return;
        }
        this.Available = true;
        const snap = reg.GetSnapshot();
        // Preserve expansion state across refreshes
        const prevExpansion = new Map(this.Chunks.map(c => [c.chunkId, c.expanded]));
        this.Chunks = snap.chunks.map(c => ({
            label: this.deriveChunkLabel(c.chunkId, c.keys),
            chunkId: c.chunkId,
            loaded: c.loaded,
            keys: c.keys,
            expanded: prevExpansion.get(c.chunkId) ?? false
        })).sort((a, b) => {
            if (a.loaded !== b.loaded)
                return a.loaded ? -1 : 1; // loaded first
            return a.label.localeCompare(b.label);
        });
        const loadedChunks = this.Chunks.filter(c => c.loaded).length;
        this.Stats = {
            totalKeys: snap.registered.length,
            loadedKeys: snap.loaded.length,
            chunkCount: snap.chunks.length,
            loadedChunks,
            percent: snap.chunks.length === 0 ? 0 : Math.round((loadedChunks / snap.chunks.length) * 100)
        };
        this.LastRefreshed = new Date();
        this.cdr.markForCheck();
        this.publishAgentContext();
    }
    OnFilterClick(filter) {
        this.Filter = filter;
        this.savePrefs();
        this.publishAgentContext();
    }
    get FilteredChunks() {
        let list;
        switch (this.Filter) {
            case 'loaded':
                list = this.Chunks.filter(c => c.loaded);
                break;
            case 'not-loaded':
                list = this.Chunks.filter(c => !c.loaded);
                break;
            default:
                list = this.Chunks;
                break;
        }
        const q = this.SearchQuery.trim().toLowerCase();
        if (q) {
            list = list.filter(c => c.label.toLowerCase().includes(q) ||
                c.keys.some(k => k.toLowerCase().includes(q)));
        }
        return list;
    }
    async OnForceLoad(chunk) {
        if (chunk.loaded || chunk.loading)
            return;
        const reg = globalThis.__mj_lazy_registry__;
        if (!reg || chunk.keys.length === 0)
            return;
        chunk.loading = true;
        this.cdr.markForCheck();
        try {
            await reg.ForceLoad(chunk.keys[0]); // any key in the chunk loads the same chunk
            // Re-read snapshot to get authoritative state
            this.refresh();
        }
        catch {
            chunk.loading = false;
            this.cdr.markForCheck();
        }
    }
    get LastRefreshedLabel() {
        return this.LastRefreshed.toLocaleTimeString();
    }
    TrackByChunk = (_i, c) => c.chunkId;
    CollapsedKeyLimit = COLLAPSED_KEY_LIMIT;
    ToggleChunkExpand(chunk) {
        chunk.expanded = !chunk.expanded;
        this.savePrefs();
    }
    VisibleKeys(chunk) {
        return chunk.expanded ? chunk.keys : chunk.keys.slice(0, COLLAPSED_KEY_LIMIT);
    }
    HiddenCount(chunk) {
        return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);
    }
    /**
     * Derive a friendly chunk label from the loader function's source. The
     * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:
     *   () => importFn().then(() => {})
     *   where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`
     * So the chunk id (loader.toString()) usually contains the dynamic import path.
     */
    deriveChunkLabel(chunkId, keys) {
        const m = chunkId.match(/import\(["']([^"']+)["']\)/);
        if (m && m[1]) {
            // Strip the @memberjunction/ prefix for brevity
            return m[1].replace(/^@memberjunction\//, '');
        }
        // Fallback: derive from a representative key
        if (keys.length > 0) {
            const first = keys[0];
            const parts = first.split('::');
            return parts.length === 2 ? parts[1] : first;
        }
        return '(unknown chunk)';
    }
    // ========================================
    // AI AGENT CONTEXT & CLIENT TOOLS
    //
    // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.
    // The Lazy Module Status inspector is a read-only view of the Explorer's
    // lazy-loading registry. Context reports module counts; tools only search the
    // chunk list and refresh the snapshot. No application data is read or mutated.
    // (Note: the existing in-UI "Force Load" button is intentionally NOT exposed
    // as an agent tool — preloading chunks is a user-driven action.)
    // ========================================
    /** Publish the current lazy-module status to the AI agent. */
    publishAgentContext() {
        const visible = this.FilteredChunks;
        const context = buildLazyModuleStatusAgentContext({
            Available: this.Available,
            TotalModules: this.Stats.chunkCount,
            LoadedModules: this.Stats.loadedChunks,
            Filter: this.Filter,
            SearchQuery: this.SearchQuery,
            VisibleModuleCount: visible.length,
            VisibleModuleNames: visible.map(c => c.label),
        });
        this.navigationService.SetAgentContext(this, context);
    }
    /**
     * Register the read-only client tools the AI agent can invoke against the
     * Lazy Module Status inspector: SearchLazyModules, RefreshModuleStatus.
     */
    registerAgentClientTools() {
        this.navigationService.SetAgentClientTools(this, [
            {
                Name: 'SearchLazyModules',
                Description: 'Search lazy modules by label or registration key. Pass an empty string to clear the search.',
                ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },
                Handler: async (params) => this.toolSearch(params),
            },
            {
                Name: 'RefreshModuleStatus',
                Description: 'Re-read the lazy-loading registry snapshot to reflect any modules loaded since the last refresh.',
                ParameterSchema: { type: 'object', properties: {} },
                Handler: async () => {
                    this.refresh();
                    return { Success: true };
                },
            },
        ]);
    }
    /** Apply (or clear, on empty string) the lazy-module search query. */
    toolSearch(params) {
        const validated = validateStringParam(params['query'], 'query');
        if (!validated.ok) {
            return validated.result;
        }
        this.SearchQuery = validated.value;
        this.savePrefs();
        this.publishAgentContext();
        this.cdr.markForCheck();
        return { Success: true };
    }
    static ɵfac = function LazyModuleStatusComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LazyModuleStatusComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
    static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LazyModuleStatusComponent, selectors: [["mj-lazy-module-status"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 2, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Lazy loading inspector", "Title", "Lazy Loading", "Subtitle", "Code-split chunks: registered, loaded, and on-demand"], ["actions", ""], [3, "Clicked", "Loading"], [1, "lz-unavailable"], [1, "fa-solid", "fa-circle-info"], [1, "lz-summary"], [1, "lz-progress"], [1, "lz-progress-bar"], [1, "lz-progress-fill"], [1, "lz-progress-meta"], [1, "lz-progress-pct"], [1, "lz-progress-label"], [1, "lz-summary-stats"], [1, "lz-summary-stat"], [1, "lz-summary-value"], [1, "lz-summary-label"], [1, "lz-filter-bar"], ["type", "button", 1, "lz-filter", 3, "click"], [1, "lz-filter-count"], [1, "fa-solid", "fa-check-circle"], [1, "fa-regular", "fa-circle"], [1, "lz-spacer"], [1, "lz-refreshed"], [1, "lz-grid"], [1, "lz-card", 3, "lz-card--loaded"], ["Variant", "no-results", "Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No chunks match the current filter.", 1, "lz-empty"], [1, "lz-card"], [1, "lz-card-head"], [1, "lz-card-status"], [1, "fa-solid", "fa-circle-check"], [1, "lz-card-title"], [1, "lz-card-kcount"], ["type", "button", "title", "Force-load this chunk now", 1, "lz-load-btn", 3, "disabled"], [1, "lz-card-keys"], [1, "lz-key"], ["type", "button", 1, "lz-card-expand"], ["type", "button", "title", "Force-load this chunk now", 1, "lz-load-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-bolt"], ["type", "button", 1, "lz-card-expand", 3, "click"], [1, "fa-solid", "fa-chevron-up"], [1, "fa-solid", "fa-chevron-down"]], template: function LazyModuleStatusComponent_Template(rf, ctx) { if (rf & 1) {
            i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-header-interior", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
            i0.ɵɵlistener("Clicked", function LazyModuleStatusComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
            i0.ɵɵelementEnd()()();
            i0.ɵɵconditionalCreate(4, LazyModuleStatusComponent_Conditional_4_Template, 6, 0, "div", 4)(5, LazyModuleStatusComponent_Conditional_5_Template, 47, 19);
            i0.ɵɵelementEnd();
        } if (rf & 2) {
            i0.ɵɵadvance(3);
            i0.ɵɵproperty("Loading", false);
            i0.ɵɵadvance();
            i0.ɵɵconditional(!ctx.Available ? 4 : 5);
        } }, dependencies: [i1.MJPageHeaderInteriorComponent, i1.MJRefreshButtonComponent, i1.MJEmptyStateComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.mj-inspector[_ngcontent-%COMP%] {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    min-height: 0;\n    background: var(--mj-bg-page);\n    color: var(--mj-text-primary);\n    font-family: inherit;\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n    flex: 1;\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n    padding: 12px 20px;\n    border-bottom: 1px solid var(--mj-border-subtle);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n    margin: 0;\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n    font-size: 11px;\n    color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n    flex: 1;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%]   mj-code-editor[_ngcontent-%COMP%] {\n    flex: 1;\n    min-height: 0;\n    display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n    flex: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--mj-text-muted);\n    font-size: 13px;\n}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n\n\n\n.lz-unavailable[_ngcontent-%COMP%] {\n    margin: 16px 20px;\n    padding: 14px 18px;\n    background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n    border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n    border-radius: 10px;\n    display: flex;\n    align-items: flex-start;\n    gap: 14px;\n    color: var(--mj-text-secondary);\n    font-size: 13px;\n    line-height: 1.5;\n}\n.lz-unavailable[_ngcontent-%COMP%]   i[_ngcontent-%COMP%] {\n    color: var(--mj-status-warning);\n    font-size: 18px;\n    margin-top: 2px;\n}\n\n\n\n.lz-summary[_ngcontent-%COMP%] {\n    padding: 18px 20px;\n    background: var(--mj-bg-surface);\n    border-bottom: 1px solid var(--mj-border-subtle);\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 24px;\n    align-items: center;\n}\n.lz-progress[_ngcontent-%COMP%] { min-width: 0; }\n.lz-progress-bar[_ngcontent-%COMP%] {\n    height: 10px;\n    background: var(--mj-bg-surface-sunken);\n    border-radius: 100px;\n    overflow: hidden;\n    margin-bottom: 8px;\n}\n.lz-progress-fill[_ngcontent-%COMP%] {\n    height: 100%;\n    background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n    border-radius: 100px;\n    transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta[_ngcontent-%COMP%] {\n    display: flex;\n    align-items: baseline;\n    gap: 10px;\n}\n.lz-progress-pct[_ngcontent-%COMP%] {\n    font-size: 22px;\n    font-weight: 700;\n    color: var(--mj-brand-primary);\n    letter-spacing: -0.5px;\n    line-height: 1;\n}\n.lz-progress-label[_ngcontent-%COMP%] {\n    color: var(--mj-text-muted);\n    font-size: 12.5px;\n}\n\n.lz-summary-stats[_ngcontent-%COMP%] {\n    display: flex;\n    gap: 14px;\n}\n.lz-summary-stat[_ngcontent-%COMP%] {\n    background: var(--mj-bg-surface-card);\n    border: 1px solid var(--mj-border-subtle);\n    border-radius: 10px;\n    padding: 10px 14px;\n    text-align: center;\n    min-width: 88px;\n}\n.lz-summary-value[_ngcontent-%COMP%] {\n    font-size: 18px;\n    font-weight: 700;\n    color: var(--mj-text-primary);\n    letter-spacing: -0.4px;\n    line-height: 1;\n}\n.lz-summary-label[_ngcontent-%COMP%] {\n    font-size: 10px;\n    color: var(--mj-text-muted);\n    text-transform: uppercase;\n    font-weight: 600;\n    letter-spacing: 0.5px;\n    margin-top: 4px;\n}\n\n\n\n.lz-filter-bar[_ngcontent-%COMP%] {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    padding: 10px 20px;\n    border-bottom: 1px solid var(--mj-border-subtle);\n    background: var(--mj-bg-surface);\n}\n.lz-filter[_ngcontent-%COMP%] {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 6px 12px;\n    border-radius: 100px;\n    border: 1px solid var(--mj-border-default);\n    background: var(--mj-bg-surface);\n    color: var(--mj-text-secondary);\n    font-size: 12px;\n    font-weight: 500;\n    font-family: inherit;\n    cursor: pointer;\n    transition: all 0.12s;\n}\n.lz-filter[_ngcontent-%COMP%]:hover {\n    background: var(--mj-bg-surface-hover);\n    border-color: var(--mj-border-strong);\n    color: var(--mj-text-primary);\n}\n.lz-filter--active[_ngcontent-%COMP%] {\n    background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n    border-color: var(--mj-brand-primary);\n    color: var(--mj-brand-primary);\n}\n.lz-filter-count[_ngcontent-%COMP%] {\n    background: var(--mj-bg-surface-sunken);\n    color: var(--mj-text-muted);\n    font-size: 10.5px;\n    padding: 1px 7px;\n    border-radius: 100px;\n    font-weight: 600;\n}\n.lz-filter--active[_ngcontent-%COMP%]   .lz-filter-count[_ngcontent-%COMP%] {\n    background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n    color: var(--mj-brand-primary);\n}\n.lz-spacer[_ngcontent-%COMP%] { flex: 1; }\n.lz-refreshed[_ngcontent-%COMP%] {\n    font-size: 11px;\n    color: var(--mj-text-muted);\n}\n\n\n\n.lz-grid[_ngcontent-%COMP%] {\n    flex: 1;\n    min-height: 0;\n    overflow-y: auto;\n    padding: 16px 20px;\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n    gap: 12px;\n    align-content: start;\n}\n.lz-card[_ngcontent-%COMP%] {\n    background: var(--mj-bg-surface);\n    border: 1px solid var(--mj-border-subtle);\n    border-radius: 10px;\n    padding: 12px 14px;\n    transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card[_ngcontent-%COMP%]:hover {\n    border-color: var(--mj-border-default);\n    transform: translateY(-1px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded[_ngcontent-%COMP%] {\n    background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n    border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head[_ngcontent-%COMP%] {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 10px;\n}\n.lz-card-status[_ngcontent-%COMP%] {\n    width: 22px;\n    height: 22px;\n    color: var(--mj-text-muted);\n    font-size: 16px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n}\n.lz-card-status--loaded[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n\n.lz-card-title[_ngcontent-%COMP%] {\n    flex: 1;\n    min-width: 0;\n}\n.lz-card-title[_ngcontent-%COMP%]   code[_ngcontent-%COMP%] {\n    display: block;\n    font-family: 'SF Mono', Menlo, Consolas, monospace;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: var(--mj-text-primary);\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n.lz-card-kcount[_ngcontent-%COMP%] {\n    font-size: 10.5px;\n    color: var(--mj-text-muted);\n    text-transform: uppercase;\n    letter-spacing: 0.4px;\n    font-weight: 600;\n}\n\n.lz-load-btn[_ngcontent-%COMP%] {\n    background: var(--mj-brand-primary);\n    color: white;\n    border: 1px solid var(--mj-brand-primary);\n    padding: 6px 12px;\n    border-radius: 7px;\n    font-size: 11.5px;\n    font-weight: 600;\n    cursor: pointer;\n    font-family: inherit;\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    transition: background 0.15s, transform 0.1s;\n    flex-shrink: 0;\n}\n.lz-load-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n    background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n    border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn[_ngcontent-%COMP%]:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn[_ngcontent-%COMP%]:disabled {\n    opacity: 0.7;\n    cursor: wait;\n}\n\n.lz-card-keys[_ngcontent-%COMP%] {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 4px;\n    transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded[_ngcontent-%COMP%] {\n    max-height: none;\n}\n.lz-key[_ngcontent-%COMP%] {\n    background: var(--mj-bg-surface-sunken);\n    border: 1px solid var(--mj-border-subtle);\n    color: var(--mj-text-secondary);\n    font-family: 'SF Mono', Menlo, Consolas, monospace;\n    font-size: 10.5px;\n    padding: 2px 7px;\n    border-radius: 5px;\n    line-height: 1.5;\n}\n.lz-card--loaded[_ngcontent-%COMP%]   .lz-key[_ngcontent-%COMP%] {\n    border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand[_ngcontent-%COMP%] {\n    margin-top: 8px;\n    background: transparent;\n    border: 1px dashed var(--mj-border-default);\n    color: var(--mj-text-secondary);\n    padding: 6px 10px;\n    border-radius: 7px;\n    font-size: 11.5px;\n    font-weight: 500;\n    cursor: pointer;\n    font-family: inherit;\n    width: 100%;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    transition: all 0.15s;\n}\n.lz-card-expand[_ngcontent-%COMP%]:hover {\n    border-color: var(--mj-brand-primary);\n    color: var(--mj-brand-primary);\n    background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand[_ngcontent-%COMP%]   i[_ngcontent-%COMP%] { font-size: 10px; }\n\n.lz-empty[_ngcontent-%COMP%] {\n    grid-column: 1 / -1;\n    text-align: center;\n    color: var(--mj-text-muted);\n    font-size: 13px;\n    padding: 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n}\n\n@media (max-width: 700px) {\n    .lz-summary[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n    .lz-summary-stats[_ngcontent-%COMP%] { display: grid; grid-template-columns: repeat(3, 1fr); }\n    .lz-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; padding: 12px 14px; }\n}"] });
};
LazyModuleStatusComponent = __decorate([
    RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')
], LazyModuleStatusComponent);
export { LazyModuleStatusComponent };
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LazyModuleStatusComponent, [{
        type: Component,
        args: [{ standalone: false, selector: 'mj-lazy-module-status', template: "<div class=\"mj-inspector mj-inspector--solo\">\n    <mj-page-header-interior\n        Role=\"region\"\n        AriaLabel=\"Lazy loading inspector\"\n        Title=\"Lazy Loading\"\n        Subtitle=\"Code-split chunks: registered, loaded, and on-demand\">\n        <div actions>\n            <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n        </div>\n    </mj-page-header-interior>\n\n    @if (!Available) {\n        <div class=\"lz-unavailable\">\n            <i class=\"fa-solid fa-circle-info\"></i>\n            <div>\n                <strong>Lazy registry not available.</strong>\n                The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n            </div>\n        </div>\n    } @else {\n        <div class=\"lz-summary\">\n            <div class=\"lz-progress\">\n                <div class=\"lz-progress-bar\">\n                    <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n                </div>\n                <div class=\"lz-progress-meta\">\n                    <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n                    <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n                </div>\n            </div>\n            <div class=\"lz-summary-stats\">\n                <div class=\"lz-summary-stat\">\n                    <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n                    <div class=\"lz-summary-label\">Registered keys</div>\n                </div>\n                <div class=\"lz-summary-stat\">\n                    <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n                    <div class=\"lz-summary-label\">Loaded keys</div>\n                </div>\n                <div class=\"lz-summary-stat\">\n                    <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n                    <div class=\"lz-summary-label\">Total chunks</div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"lz-filter-bar\">\n            <button type=\"button\"\n                    class=\"lz-filter\"\n                    [class.lz-filter--active]=\"Filter === 'all'\"\n                    (click)=\"OnFilterClick('all')\">\n                All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n            </button>\n            <button type=\"button\"\n                    class=\"lz-filter\"\n                    [class.lz-filter--active]=\"Filter === 'loaded'\"\n                    (click)=\"OnFilterClick('loaded')\">\n                <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n            </button>\n            <button type=\"button\"\n                    class=\"lz-filter\"\n                    [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n                    (click)=\"OnFilterClick('not-loaded')\">\n                <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n            </button>\n            <span class=\"lz-spacer\"></span>\n            <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n        </div>\n\n        <div class=\"lz-grid\">\n            @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n                <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n                    <div class=\"lz-card-head\">\n                        <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n                            @if (chunk.loaded) {\n                                <i class=\"fa-solid fa-circle-check\"></i>\n                            } @else {\n                                <i class=\"fa-regular fa-circle\"></i>\n                            }\n                        </div>\n                        <div class=\"lz-card-title\">\n                            <code>{{ chunk.label }}</code>\n                            <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n                        </div>\n                        @if (!chunk.loaded) {\n                            <button type=\"button\"\n                                    class=\"lz-load-btn\"\n                                    [disabled]=\"chunk.loading\"\n                                    (click)=\"OnForceLoad(chunk)\"\n                                    title=\"Force-load this chunk now\">\n                                @if (chunk.loading) {\n                                    <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n                                } @else {\n                                    <i class=\"fa-solid fa-bolt\"></i> Load\n                                }\n                            </button>\n                        }\n                    </div>\n                    <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n                        @for (k of VisibleKeys(chunk); track k) {\n                            <span class=\"lz-key\">{{ k }}</span>\n                        }\n                    </div>\n                    @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n                        <button class=\"lz-card-expand\"\n                                type=\"button\"\n                                (click)=\"ToggleChunkExpand(chunk)\">\n                            @if (chunk.expanded) {\n                                <i class=\"fa-solid fa-chevron-up\"></i> Show less\n                            } @else {\n                                <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n                            }\n                        </button>\n                    }\n                </div>\n            }\n            @if (FilteredChunks.length === 0) {\n                <mj-empty-state class=\"lz-empty\" Variant=\"no-results\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n                    Title=\"No chunks match the current filter.\" />\n            }\n        </div>\n    }\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n/*\n  Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n  chrome (title icon, title, subtitle, action buttons) was previously rendered\n  via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n  in every inspector template. Action buttons now use the mjButton directive\n  (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n  State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n  + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n  favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n  SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n  mode (no sidebar).\n*/\n.mj-inspector {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    min-height: 0;\n    background: var(--mj-bg-page);\n    color: var(--mj-text-primary);\n    font-family: inherit;\n}\n\n/* Content area */\n.mj-inspector__content {\n    flex: 1;\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n    padding: 12px 20px;\n    border-bottom: 1px solid var(--mj-border-subtle);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n    margin: 0;\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n    font-size: 11px;\n    color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n    flex: 1;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n    flex: 1;\n    min-height: 0;\n    display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n    flex: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--mj-text-muted);\n    font-size: 13px;\n}\n\n", ".mj-inspector--solo { background: var(--mj-bg-page); }\n\n/* Unavailable */\n.lz-unavailable {\n    margin: 16px 20px;\n    padding: 14px 18px;\n    background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n    border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n    border-radius: 10px;\n    display: flex;\n    align-items: flex-start;\n    gap: 14px;\n    color: var(--mj-text-secondary);\n    font-size: 13px;\n    line-height: 1.5;\n}\n.lz-unavailable i {\n    color: var(--mj-status-warning);\n    font-size: 18px;\n    margin-top: 2px;\n}\n\n/* Summary */\n.lz-summary {\n    padding: 18px 20px;\n    background: var(--mj-bg-surface);\n    border-bottom: 1px solid var(--mj-border-subtle);\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 24px;\n    align-items: center;\n}\n.lz-progress { min-width: 0; }\n.lz-progress-bar {\n    height: 10px;\n    background: var(--mj-bg-surface-sunken);\n    border-radius: 100px;\n    overflow: hidden;\n    margin-bottom: 8px;\n}\n.lz-progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n    border-radius: 100px;\n    transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta {\n    display: flex;\n    align-items: baseline;\n    gap: 10px;\n}\n.lz-progress-pct {\n    font-size: 22px;\n    font-weight: 700;\n    color: var(--mj-brand-primary);\n    letter-spacing: -0.5px;\n    line-height: 1;\n}\n.lz-progress-label {\n    color: var(--mj-text-muted);\n    font-size: 12.5px;\n}\n\n.lz-summary-stats {\n    display: flex;\n    gap: 14px;\n}\n.lz-summary-stat {\n    background: var(--mj-bg-surface-card);\n    border: 1px solid var(--mj-border-subtle);\n    border-radius: 10px;\n    padding: 10px 14px;\n    text-align: center;\n    min-width: 88px;\n}\n.lz-summary-value {\n    font-size: 18px;\n    font-weight: 700;\n    color: var(--mj-text-primary);\n    letter-spacing: -0.4px;\n    line-height: 1;\n}\n.lz-summary-label {\n    font-size: 10px;\n    color: var(--mj-text-muted);\n    text-transform: uppercase;\n    font-weight: 600;\n    letter-spacing: 0.5px;\n    margin-top: 4px;\n}\n\n/* Filter bar */\n.lz-filter-bar {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    padding: 10px 20px;\n    border-bottom: 1px solid var(--mj-border-subtle);\n    background: var(--mj-bg-surface);\n}\n.lz-filter {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 6px 12px;\n    border-radius: 100px;\n    border: 1px solid var(--mj-border-default);\n    background: var(--mj-bg-surface);\n    color: var(--mj-text-secondary);\n    font-size: 12px;\n    font-weight: 500;\n    font-family: inherit;\n    cursor: pointer;\n    transition: all 0.12s;\n}\n.lz-filter:hover {\n    background: var(--mj-bg-surface-hover);\n    border-color: var(--mj-border-strong);\n    color: var(--mj-text-primary);\n}\n.lz-filter--active {\n    background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n    border-color: var(--mj-brand-primary);\n    color: var(--mj-brand-primary);\n}\n.lz-filter-count {\n    background: var(--mj-bg-surface-sunken);\n    color: var(--mj-text-muted);\n    font-size: 10.5px;\n    padding: 1px 7px;\n    border-radius: 100px;\n    font-weight: 600;\n}\n.lz-filter--active .lz-filter-count {\n    background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n    color: var(--mj-brand-primary);\n}\n.lz-spacer { flex: 1; }\n.lz-refreshed {\n    font-size: 11px;\n    color: var(--mj-text-muted);\n}\n\n/* Grid */\n.lz-grid {\n    flex: 1;\n    min-height: 0;\n    overflow-y: auto;\n    padding: 16px 20px;\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n    gap: 12px;\n    align-content: start;\n}\n.lz-card {\n    background: var(--mj-bg-surface);\n    border: 1px solid var(--mj-border-subtle);\n    border-radius: 10px;\n    padding: 12px 14px;\n    transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card:hover {\n    border-color: var(--mj-border-default);\n    transform: translateY(-1px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded {\n    background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n    border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 10px;\n}\n.lz-card-status {\n    width: 22px;\n    height: 22px;\n    color: var(--mj-text-muted);\n    font-size: 16px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n}\n.lz-card-status--loaded { color: var(--mj-status-success); }\n\n.lz-card-title {\n    flex: 1;\n    min-width: 0;\n}\n.lz-card-title code {\n    display: block;\n    font-family: 'SF Mono', Menlo, Consolas, monospace;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: var(--mj-text-primary);\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n.lz-card-kcount {\n    font-size: 10.5px;\n    color: var(--mj-text-muted);\n    text-transform: uppercase;\n    letter-spacing: 0.4px;\n    font-weight: 600;\n}\n\n.lz-load-btn {\n    background: var(--mj-brand-primary);\n    color: white;\n    border: 1px solid var(--mj-brand-primary);\n    padding: 6px 12px;\n    border-radius: 7px;\n    font-size: 11.5px;\n    font-weight: 600;\n    cursor: pointer;\n    font-family: inherit;\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    transition: background 0.15s, transform 0.1s;\n    flex-shrink: 0;\n}\n.lz-load-btn:hover:not(:disabled) {\n    background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n    border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn:disabled {\n    opacity: 0.7;\n    cursor: wait;\n}\n\n.lz-card-keys {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 4px;\n    transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded {\n    max-height: none;\n}\n.lz-key {\n    background: var(--mj-bg-surface-sunken);\n    border: 1px solid var(--mj-border-subtle);\n    color: var(--mj-text-secondary);\n    font-family: 'SF Mono', Menlo, Consolas, monospace;\n    font-size: 10.5px;\n    padding: 2px 7px;\n    border-radius: 5px;\n    line-height: 1.5;\n}\n.lz-card--loaded .lz-key {\n    border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand {\n    margin-top: 8px;\n    background: transparent;\n    border: 1px dashed var(--mj-border-default);\n    color: var(--mj-text-secondary);\n    padding: 6px 10px;\n    border-radius: 7px;\n    font-size: 11.5px;\n    font-weight: 500;\n    cursor: pointer;\n    font-family: inherit;\n    width: 100%;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    transition: all 0.15s;\n}\n.lz-card-expand:hover {\n    border-color: var(--mj-brand-primary);\n    color: var(--mj-brand-primary);\n    background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand i { font-size: 10px; }\n\n.lz-empty {\n    grid-column: 1 / -1;\n    text-align: center;\n    color: var(--mj-text-muted);\n    font-size: 13px;\n    padding: 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n}\n\n@media (max-width: 700px) {\n    .lz-summary { grid-template-columns: 1fr; }\n    .lz-summary-stats { display: grid; grid-template-columns: repeat(3, 1fr); }\n    .lz-grid { grid-template-columns: 1fr; padding: 12px 14px; }\n}\n"] }]
    }], () => [{ type: i0.ChangeDetectorRef }], null); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LazyModuleStatusComponent, { className: "LazyModuleStatusComponent", filePath: "src/DevTools/lazy-module-status.component.ts", lineNumber: 49 }); })();
//# sourceMappingURL=lazy-module-status.component.js.map