{"version":3,"file":"dotglitch-ngx-common-core.mjs","sources":["../../packages/common/core/directives/image-cache.directive.ts","../../packages/common/core/pipes/html-bypass.pipe.ts","../../packages/common/core/pipes/resource-bypass.pipe.ts","../../packages/common/core/pipes/script-bypass.pipe.ts","../../packages/common/core/pipes/style-bypass.pipe.ts","../../packages/common/core/pipes/url-bypass.pipe.ts","../../packages/common/core/utils/index.ts","../../packages/common/core/services/dependency.service.ts","../../packages/common/core/components/lazy-loader/types.ts","../../packages/common/core/components/lazy-loader/lazy-loader.service.ts","../../packages/common/core/components/lazy-loader/lazy-loader.component.ts","../../packages/common/core/components/lazy-loader/lazy-loader.component.html","../../packages/common/core/services/dialog.service.ts","../../packages/common/core/services/fetch.service.ts","../../packages/common/core/services/file.service.ts","../../packages/common/core/services/keyboard.service.ts","../../packages/common/core/services/navigation.service.ts","../../packages/common/core/services/theme.service.ts","../../packages/common/core/components/lazy-loader/lazy-loader.module.ts","../../packages/common/core/components/parallax-card/parallax-card.component.ts","../../packages/common/core/components/parallax-card/parallax-card.component.html","../../packages/common/core/components/types.ts","../../packages/common/core/components/menu/menu.component.ts","../../packages/common/core/components/menu/menu.component.html","../../packages/common/core/directives/utils.ts","../../packages/common/core/components/menu/menu.directive.ts","../../packages/common/core/index.ts","../../packages/common/core/dotglitch-ngx-common-core.ts"],"sourcesContent":["import { Directive, ElementRef, Inject, InjectionToken, Input, Optional } from '@angular/core';\nimport { INDEXEDDB, createInstance } from 'localforage';\n\nconst storage = createInstance({\n    name: \"@dotglitch\",\n    storeName: \"image-cache\",\n    driver: INDEXEDDB,\n    version: 1\n});\n\n\nconst imageCache: {\n    [key: string]: HTMLImageElement;\n} = {};\n\nconst loadingSvg = `data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"32px\" height=\"32px\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\"><circle cx=\"50\" cy=\"50\" fill=\"none\" stroke=\"%2340c4ff\" stroke-width=\"10\" r=\"35\" stroke-dasharray=\"164.93361431346415 56.97787143782138\"><animateTransform attributeName=\"transform\" type=\"rotate\" repeatCount=\"indefinite\" dur=\"1s\" values=\"0 50 50;360 50 50\" keyTimes=\"0;1\"></animateTransform></circle><!-- [ldio] generated by https://loading.io/ --></svg>`;\nconst brokenSvg = `data:image/svg+xml;utf8,<svg width=\"800\" height=\"800\" viewBox=\"0 0 24 24\" version=\"1.1\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:svg=\"http://www.w3.org/2000/svg\"><line x1=\"10.08\" y1=\"8.29\" x2=\"10.18\" y2=\"8.29\" style=\"fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round\" /><path d=\"m 10.51,14.8 5.2,5.2 H 20 a 1,1 0 0 0 1,-1 V 15.73 L 15.29,10 Z M 3,16.71 V 19 a 1,1 0 0 0 1,1 h 11.71 l -8,-8 z M 21,5 v 14 a 1,1 0 0 1 -1,1 H 4 A 1,1 0 0 1 3,19 V 5 A 1,1 0 0 1 4,4 h 16 a 1,1 0 0 1 1,1 z\" style=\"fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\" /><path d=\"M 21.193388,21.193388 2.8066108,2.8066108 m 18.3867772,0 L 2.8066108,21.193388\" style=\"stroke:%23ff0000;stroke-width:2.62668;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1\" /></svg>`;\n\nexport type NgxImageCacheConfig = {\n    /**\n     * Image to use as a placeholder while loading the main image\n     * Recommended to use inlined SVG or a base64 encoded image\n     */\n    loadingPlaceholder?: string,\n    /**\n     * Image to use as a placeholder where images fail to load\n     * Recommended to use inlined SVG or a base64 encoded image\n     */\n    brokenPlaceholder?: string\n}\n\nexport const NGX_IMAGE_CACHE_CONFIG = new InjectionToken<NgxImageCacheConfig>('ngx-image-cache-config');\n\n\nexport type NgxImageCacheConfiguration = {\n    /**\n     * Max age to cache an image in milliseconds.\n     * If set to `0` or a negative number, images will never expire.\n     */\n    maxAge: number,\n    /**\n     * Set to `false` to disable memory caching for the image\n     * If both `cacheInMemory` and `cacheInIndexedDB` are false,\n     * no caching will happen. (You'll still get the loader)\n     */\n    cacheInMemory: boolean,\n    /**\n     * Set to `false` to disable indexedDB caching for the image\n     * If both `cacheInMemory` and `cacheInIndexedDB` are false,\n     * no caching will happen. (You'll still get the loader)\n     */\n    cacheInIndexedDB: boolean\n}\n\n@Directive({\n    selector: 'img[ngx-cache]',\n    standalone: true\n})\nexport class NgxImageCacheDirective {\n\n    @Input(\"source\")\n    @Input(\"ngx-cache\") url: string;\n\n    @Input(\"ngx-cache-config\") configuration: NgxImageCacheConfiguration;\n\n    private get el() { return this.element.nativeElement as HTMLImageElement }\n\n    constructor(\n        private readonly element: ElementRef,\n        @Optional() @Inject(NGX_IMAGE_CACHE_CONFIG) private readonly cacheConfig: NgxImageCacheConfig\n    ) { }\n\n    ngOnChanges() {\n        this.getCachedImage();\n    }\n\n    async getCachedImage() {\n        if (\n            this.el.src?.trim() == this.url?.trim() || // Check that there's an actual change\n            this.url?.trim().length == 0 // Check that there's an actual URL\n        ) return;\n\n        // Check if it's in the memory cache\n        if (imageCache[this.url]) {\n            const image = imageCache[this.url];\n\n            // If the image is currently loading, show the loader\n            // and add it to the reflist\n            if (image['_loading'] == true) {\n                image['_refs'].push(this.el);\n\n                this.el.setAttribute(\"loading\", \"true\");\n                this.el.src = this.cacheConfig?.loadingPlaceholder || loadingSvg;\n            }\n            else {\n                // The image is fully loaded, swap out the src with a data-uri\n                this.el.setAttribute(\"loading\", \"false\");\n                this.el.src = image.src;\n            }\n\n            // If it's already in the image cache, we're going to trust that it loads properly.\n            return;\n        }\n\n        // Check if it's in indexedDB\n        if (this.configuration?.cacheInIndexedDB != false) {\n            const cached = await storage.getItem<any>(this.url);\n            if (cached) {\n                // Attempt to load the base64 data from indexeddb.\n                // If this fails, we'll fall back to attempting to download the image\n                this.el.src = cached.data;\n\n                const evt: Event = await new Promise(res => {\n                    this.el.addEventListener('load', res);\n                    this.el.addEventListener('error', res);\n                });\n\n                // If the event isn't an error\n                if (evt.type == \"load\") {\n                    this.el.setAttribute(\"loading\", \"false\");\n\n                    if (this.configuration?.cacheInMemory != false) {\n                        // Successfully loaded into element\n                        // Create an entry in the memory cache\n                        const image = imageCache[this.url] = new Image();\n                        image.src = cached.data;\n                        image['_createdAt'] = Date.now();\n                    }\n                    return;\n                }\n                else {\n                    // Else, we try to load again.\n                    this.el.src = this.cacheConfig?.loadingPlaceholder || loadingSvg;\n                }\n            }\n        }\n\n        const image = (() => {\n            if (this.configuration?.cacheInMemory != false) {\n                return imageCache[this.url] = new Image();\n            }\n            return new Image();\n        })();\n\n        // const clone = image.cloneNode(true) as HTMLImageElement;\n        image['_refs'] = image['_refs'] ?? [];\n        image['_refs'].push(this.el);\n        image['_loading'] = true;\n        image['_createdAt'] = Date.now();\n\n        // Show a loader while the image downloads.\n        this.el.setAttribute(\"loading\", \"true\");\n        this.el.src = this.cacheConfig?.loadingPlaceholder || loadingSvg;\n\n        // Fetch the image via JS and cache it as base64\n        window.fetch(this.url)\n            .then(response => response.blob())\n            .then(blob => new Promise((resolve, reject) => {\n                const reader = new FileReader();\n                reader.onloadend = () => {\n                    image.src = reader.result as string;\n\n                    storage.setItem(this.url, {\n                        timestamp: Date.now(),\n                        data: reader.result\n                    });\n\n                    image['_refs'].forEach((ref: HTMLImageElement) => {\n                        ref.src = image.src;\n                    });\n\n                    image['_loading'] = false;\n                    resolve(0);\n                };\n                reader.onerror = reject;\n                reader.readAsDataURL(blob);\n            }))\n            .catch(err => {\n                // If a failure occurs, purge this entry from the cache\n                // TODO: Render better \"broken\" image\n                delete imageCache[this.url];\n                image['_refs'].forEach((ref: HTMLImageElement) => {\n                    ref.src = this.cacheConfig?.brokenPlaceholder || brokenSvg;\n                    ref.setAttribute(\"loading\", \"failed\");\n                });\n            });\n    }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Url Sanitizer pipe.\n *\n * This trusts URLs that exist in a safe list defined in our environments.ts file.\n * Any other URLs will NOT be trusted, thus will not be loaded.\n */\n@Pipe({\n    name: 'htmlbypass',\n    standalone: true\n})\nexport class HtmlBypass implements PipeTransform {\n\n    constructor(private sanitizer: DomSanitizer) { }\n\n    public transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustHtml(url);\n    }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Url Sanitizer pipe.\n *\n * This trusts URLs that exist in a safe list defined in our environments.ts file.\n * Any other URLs will NOT be trusted, thus will not be loaded.\n */\n@Pipe({\n    name: 'resourcebypass',\n    standalone: true\n})\nexport class ResourceBypass implements PipeTransform {\n\n    constructor(private sanitizer: DomSanitizer) { }\n\n    public transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n    }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Url Sanitizer pipe.\n *\n * This trusts URLs that exist in a safe list defined in our environments.ts file.\n * Any other URLs will NOT be trusted, thus will not be loaded.\n */\n@Pipe({\n    name: 'scriptbypass',\n    standalone: true\n})\nexport class ScriptBypass implements PipeTransform {\n\n    constructor(private sanitizer: DomSanitizer) { }\n\n    public transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustScript(url);\n    }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Url Sanitizer pipe.\n *\n * This trusts URLs that exist in a safe list defined in our environments.ts file.\n * Any other URLs will NOT be trusted, thus will not be loaded.\n */\n@Pipe({\n    name: 'stylebypass',\n    standalone: true\n})\nexport class StyleBypass implements PipeTransform {\n\n    constructor(private sanitizer: DomSanitizer) { }\n\n    public transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustStyle(url);\n    }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Url Sanitizer pipe.\n *\n * This trusts URLs that exist in a safe list defined in our environments.ts file.\n * Any other URLs will NOT be trusted, thus will not be loaded.\n */\n@Pipe({\n    name: 'urlbypass',\n    standalone: true\n})\nexport class UrlBypass implements PipeTransform {\n\n    constructor(private sanitizer: DomSanitizer) { }\n\n    public transform(url: string): SafeUrl {\n        return this.sanitizer.bypassSecurityTrustUrl(url);\n    }\n}\n","export const sleep = ms => new Promise(r => setTimeout(r, ms));\n\n/**\n * Prompt the user to save a json file of the given object.\n */\nexport const saveObjectAsFile = (name: string, data: Object) => {\n    const a = document.createElement(\"a\");\n    const file = new Blob([JSON.stringify(data)], { type: \"application/json\" });\n    a.href = URL.createObjectURL(file);\n    a.download = name;\n    a.click();\n    a.remove();\n};\n\n/**\n * Convert a string `fooBAR baz_160054''\"1]\"` into a slug: `foobar-baz-1600541`\n */\nexport const stringToSlug = (text: string) =>\n    (text || '')\n        .trim()\n        .toLowerCase()\n        .replace(/[\\-_+ ]/g, '-')\n        .replace(/[^a-z0-9\\-\\/]/g, '');\n\n\n/**\n* Helper to update the page URL.\n* @param page component page ID to load.\n* @param data string or JSON data for query params.\n*/\nexport const updateUrl = (page?: string, data: string | string[][] | Record<string, string | number> | URLSearchParams = {}, replaceState = false) => {\n    const [oldHash, qstring] = location.hash.split('?');\n\n    if (!page)\n        page = oldHash.split('/')[1];\n\n    const hash = `#/${page}`;\n\n    // Convert the data object to JSON.\n    if (data instanceof URLSearchParams) {\n        data = [...(data as any).entries()].map(([k, v]) => ({ [k]: v })).reduce((a, b) => ({ ...a, ...b }), {});\n    }\n\n    const query = new URLSearchParams(data as any) as any;\n    const prevParams = new URLSearchParams(qstring) as any;\n\n    // If the hash is the same, retain params.\n    if (hash == oldHash) {\n        replaceState = true;\n        for (const [key, value] of prevParams.entries())\n            if (!query.has(key))\n                query.set(key, prevParams.get(key));\n    }\n\n    for (const [key, val] of query.entries()) {\n        if (\n            val == null ||\n            val == undefined ||\n            val == '' ||\n            val == 'null' ||\n            Number.isNaN(val) ||\n            val == 'NaN'\n        )\n            query.delete(key);\n    }\n\n    if (!(hash.toLowerCase() == \"#/frame\") || data['id'] == -1)\n        query.delete('id');\n\n\n    const strQuery = query.toString();\n    console.log(data, hash, strQuery);\n    if (replaceState) {\n        window.history.replaceState(data, '', hash + (strQuery ? ('?' + strQuery) : ''));\n    }\n    else {\n        window.history.pushState(data, '', hash + (strQuery ? ('?' + strQuery) : ''));\n    }\n};\n\nexport const getUrlData = (source = window.location.hash) => {\n    const [hash, query] = source.split('?');\n    let data = new URLSearchParams(query) as any;\n    return [...data.entries()].map(([k, v]) => ({ [k]: v })).reduce((a, b) => ({ ...a, ...b }), {});\n};\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, Inject } from '@angular/core';\nimport { sleep } from '../utils';\n\nconst SCRIPT_INIT_TIMEOUT = 500; // ms\n\n/**\n * Service that installs CSS/JS dynamically\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class DependencyService {\n\n    constructor(\n        @Inject(DOCUMENT) private document: Document\n    ) { }\n\n    /**\n     * Install a Javascript file into the webpage on-demand\n     * @param id Unique identifier for the JS script\n     * @param src URL of the script\n     * @param globalkey A global object the script will provide.\n     *  Providing this will ensure a promise only resolves after the\n     *  specified global object is provided, with a timeout of 500ms\n     */\n    loadScript(id: string, src: string, globalkey: string = null): Promise<void> {\n        return new Promise((res, rej) => {\n            if (this.document.getElementById(id)) return res();\n\n            const script = this.document.createElement('script');\n            script.id = id;\n\n            script.setAttribute(\"async\", '');\n            script.setAttribute(\"src\", src);\n\n            script.onload = async () => {\n                if (typeof globalkey == \"string\") {\n                    let i = 0;\n\n                    for (; !window[globalkey] && i < SCRIPT_INIT_TIMEOUT; i += 10)\n                        await sleep(10);\n\n                    if (i >= SCRIPT_INIT_TIMEOUT) {\n                        return rej(new Error(\"Timed out waiting for script to self-initialize.\"));\n                    }\n                }\n\n                res();\n            }\n\n            this.document.body.appendChild(script);\n        })\n    }\n\n    // loadStylesheet(id: string, href: string) {\n    //     let themeLink = this.document.getElementById(id) as HTMLLinkElement;\n    //     if (themeLink) {\n    //         themeLink.href = href;\n    //     }\n    //     else {\n    //         const style = this.document.createElement('link');\n    //         style.id = id;\n    //         style.rel = 'stylesheet';\n    //         style.href = href;\n\n    //         const head = this.document.getElementsByTagName('head')[0];\n\n    //         head.appendChild(style);\n    //     }\n    // }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { TemplateRef } from '@angular/core';\n\nexport enum ComponentResolveStrategy {\n    /**\n     * Match the fist component we find\n     * (best used for standalone components)\n     * @default\n     */\n    PickFirst,\n    /**\n     * Perform an Exact ID to Classname of the Component\n     * case sensitive, zero tolerance.\n     */\n    MatchIdToClassName,\n    /**\n     * Perform a fuzzy ID to classname match\n     * case insensitive, mutes symbols\n     * ignores \"Component\" and \"Module\" postfixes on class\n     * names\n     */\n    FuzzyIdClassName,\n\n    /**\n     * Use a user-provided component match function\n     */\n    Custom\n}\n\nexport type NgxLazyLoaderConfig = Partial<{\n    entries: ComponentRegistration[],\n\n    notFoundTemplate: TemplateRef<any>,\n    notFoundComponent: ComponentType<any>,\n\n    errorTemplate: TemplateRef<any>,\n    errorComponent: ComponentType<any>,\n\n    loaderDistractorTemplate: TemplateRef<any>,\n    loaderDistractorComponent: ComponentType<any>,\n\n    logger: {\n        log: (...args: any) => void,\n        warn: (...args: any) => void,\n        err: (...args: any) => void;\n    },\n    /**\n     * What strategy should be used to resolve components\n     * @default ComponentResolveStrategy.FuzzyIdClassName\n     */\n    componentResolveStrategy: ComponentResolveStrategy,\n    customResolver: (registry: (CompiledComponent | CompiledModule)[]) => Object\n}>;\n\ntype RegistrationConfig = {\n    /**\n     * Specify a group to categorize components. If not specified,\n     * will default to the `default` group.\n     */\n    group?: string,\n    /**\n     * load: () => import('./pages/my-page/my-page.component')\n     */\n    load: () => any,\n\n    /**\n     * Called before a component is loaded.\n     * If it returns `false` the component will not be loaded.\n     */\n    // canActivate: () => boolean\n\n    [key: string]: any\n}\n\nexport type ComponentRegistration = (\n    ({ id: string } & RegistrationConfig) |\n    ({ matcher: string[] | RegExp | ((value: string) => boolean); } & RegistrationConfig)\n);\n\nexport type DynamicRegistrationArgs<T = any> = {\n    id: string,\n    group?: string,\n    matcher?: string[] | RegExp | ((val: string) => boolean),\n    component?: T,\n    load?: () => any;\n}\n\n/**\n * This is roughly a compiled component\n */\nexport type CompiledComponent = {\n    (): CompiledComponent,\n    ɵfac: Function,\n    ɵcmp: {\n        consts;\n        contentQueries;\n        data;\n        declaredInputs;\n        decls;\n        dependencies;\n        directiveDefs;\n        encapsulation;\n        exportAs;\n        factory;\n        features;\n        findHostDirectiveDefs;\n        getStandaloneInjector;\n        hostAttrs;\n        hostBindings;\n        hostDirectives;\n        hostVars;\n        id: string;\n        inputs;\n        ngContentSelectors;\n        onPush: boolean;\n        outputs;\n        pipeDefs;\n        providersResolver;\n        schemas;\n        selectors: string[];\n        setInput;\n        standalone: boolean;\n        styles: string[];\n        tView;\n        template;\n        type: Function;\n        vars: number;\n        viewQuery;\n    };\n};\n\n/**\n * This is roughly a compiled module\n */\nexport type CompiledModule = {\n    (): CompiledModule,\n    ɵfac: Function,\n    ɵinj: {\n        providers: any[],\n        imports: any[];\n    },\n    ɵmod: {\n        bootstrap: any[],\n        declarations: Function[],\n        exports: any[],\n        id: unknown,\n        imports: any[],\n        schemas: unknown,\n        transitiveCompileScopes: unknown,\n        type: Function;\n    };\n};\n\nexport type CompiledBundle = { [key: string]: CompiledComponent | CompiledModule; };\n\n\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { stringToSlug } from '../../utils';\nimport { CompiledComponent, CompiledModule, ComponentRegistration, ComponentResolveStrategy, DynamicRegistrationArgs, NgxLazyLoaderConfig } from './types';\n\n// Monkey-patch the type of these symbols.\nconst $id = Symbol(\"id\") as any as string;\nconst $group = Symbol(\"group\") as any as string;\n\nexport const NGX_LAZY_LOADER_CONFIG = new InjectionToken<NgxLazyLoaderConfig>('lazyloader-config');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class LazyLoaderService {\n    private get err() { return LazyLoaderService.config.logger.err; }\n    private get log() { return LazyLoaderService.config.logger.log; }\n    private get warn() { return LazyLoaderService.config.logger.warn; }\n\n    // A proxied registry that mutates reference keys\n    private static registry: {\n        [key: string]: ComponentRegistration[];\n    } = {};\n\n    public static config: NgxLazyLoaderConfig;\n\n    constructor(@Optional() @Inject(NGX_LAZY_LOADER_CONFIG) config: NgxLazyLoaderConfig = {}) {\n        // Ensure this is singleton and works regardless of special instancing requirements.\n        LazyLoaderService.configure(config);\n    }\n\n    private static configure(config: NgxLazyLoaderConfig) {\n        this.config = {\n            componentResolveStrategy: ComponentResolveStrategy.PickFirst,\n            logger: {\n                log: console.log,\n                warn: console.warn,\n                err: console.error\n            },\n            ...config\n        };\n\n        config?.entries?.forEach(e => this.addComponentToRegistry(e));\n\n        // If a custom resolution strategy is provided but no resolution function is passed,\n        // we throw an error\n        if (\n            this.config.componentResolveStrategy == ComponentResolveStrategy.Custom &&\n            !this.config.customResolver\n        ) {\n            throw new Error(\"Cannot initialize. Configuration specifies a custom resolve matcher but none was provided\");\n        }\n\n        if (this.config.loaderDistractorComponent && this.config.loaderDistractorTemplate)\n            throw new Error(\"Cannot have both a Component and Template for Distractor view.\");\n        if (this.config.errorComponent && this.config.errorTemplate)\n            throw new Error(\"Cannot have both a Component and Template for Error view.\");\n        if (this.config.notFoundComponent && this.config.notFoundTemplate)\n            throw new Error(\"Cannot have both a Component and Template for NotFound view.\");\n\n    }\n\n    private static addComponentToRegistry(registration: ComponentRegistration) {\n        if (!registration)\n            throw new Error(\"Cannot add <undefined> component into registry.\");\n\n        // Clone the object into our repository and transfer the id into a standardized slug format\n\n        const id = stringToSlug(registration.id ?? Date.now().toString()); // purge non-basic ASCII chars\n        const group = registration.group || \"default\";\n\n        registration[$id] = id;\n        registration[$group] = id;\n\n\n        if (!this.registry[group])\n            this.registry[group] = [];\n\n        // Check if we already have a registration for the component\n        // if (this.registry[group] && typeof this.registry[group]['load'] == \"function\") {\n        //     // Warn the developer that the state is problematic\n        //     this.config.logger.warn(\n        //         `A previous entry already exists for ${id}! The old registration will be overridden.` +\n        //         `Please ensure you use groups if you intend to have duplicate component ids. ` +\n        //         `If this was intentional, first remove the old component from the registry before adding a new instance`\n        //     );\n\n        //     // If we're in dev mode, break the loader surface\n        //     if (isDevMode())\n        //         return;\n        // }\n\n        this.registry[group].push(registration);\n    }\n\n    /**\n     * Register an Angular component\n     * @param id identifier that is used to resolve the component\n     * @param group\n     * @param component Angular Component Class constructor\n     */\n    public registerComponent<T extends { new(...args: any[]): InstanceType<T>; }>(args: DynamicRegistrationArgs<T>) {\n        if (this.isComponentRegistered(args.id, args.group)) {\n            this.log(`Will not re-register component '${args.id}' in group '${args.group || 'default'}' `);\n            return;\n        }\n\n        LazyLoaderService.addComponentToRegistry({\n            id: stringToSlug(args.id),\n            matcher: args.matcher,\n            group: stringToSlug(args.group || \"default\"),\n            load: args.load || (() => args.component)\n        });\n    }\n\n    /**\n     *\n     * @param id\n     * @param group\n     */\n    public unregisterComponent(id: string, group = \"default\") {\n        const _id = stringToSlug(id);\n        const _group = stringToSlug(group);\n\n        if (!this.resolveRegistrationEntry(id, group))\n            throw new Error(\"Cannot unregister component ${}! Component is not present in registry\");\n\n        // TODO: handle clearing running instances\n        delete LazyLoaderService.registry[_group][_id];\n    }\n\n\n    /**\n     * Get the registration entry for a component.\n     * Returns null if component is not in the registry.\n     */\n    public resolveRegistrationEntry(value: string, group = \"default\") {\n        const _id = stringToSlug(value);\n        const _group = stringToSlug(group);\n\n        const targetGroup = (LazyLoaderService.registry[_group] || []);\n\n        let items = targetGroup.filter(t => {\n            if (!t) return false;\n\n            // No matcher, check id\n            if (!t.matcher)\n                return t.id == value || t[$id] == _id;\n\n            // Matcher is regex\n            if (t.matcher instanceof RegExp)\n                return t.matcher.test(value) || t.matcher.test(_id);\n\n            // Matcher is string => regex\n            if (typeof t.matcher == 'string') {\n                const rx = new RegExp(t.matcher, 'ui');\n                return rx.test(value) || rx.test(_id);\n            }\n\n            // Matcher is array\n            if (Array.isArray(t.matcher)) {\n                return !!t.matcher.find(e => stringToSlug(e) == _id);\n            }\n\n            // Custom matcher function\n            if (typeof t.matcher == \"function\")\n                return t.matcher(_id);\n\n            return false;\n        });\n\n        if (items.length > 1) {\n            this.warn(\"Resolved multiple components for the provided `[component]` binding. This may cause UI conflicts.\");\n        }\n        if (items.length == 0) {\n            return null;\n        }\n\n        const out = items[0];\n\n        if (out.matcher instanceof RegExp) {\n            const result = value.match(out.matcher) || _id.match(out.matcher);\n\n            return {\n                entry: out,\n                matchGroups: result?.groups\n            };\n        }\n\n        return { entry: out };\n    }\n\n    /**\n     * Check if a component is currently registered\n     * Can be used to validate regex matchers and aliases.\n     */\n    public isComponentRegistered(value: string, group = \"default\") {\n        return !!this.resolveRegistrationEntry(value, group);\n    }\n\n    /**\n     *\n     * @param bundle\n     * @returns The component `Object` if a component was resolved, `null` if no component was found\n     * `false` if the specified strategy was an invalid selection\n     */\n    public resolveComponent(id: string, group: string, modules: (CompiledComponent | CompiledModule)[]): Object | null | false {\n\n        switch (LazyLoaderService.config.componentResolveStrategy) {\n            case ComponentResolveStrategy.PickFirst: {\n\n                return modules[0];\n            }\n\n            // Exact id -> classname match\n            case ComponentResolveStrategy.MatchIdToClassName: {\n                const matches =\n                    modules\n                        .filter(k => k.name == id);\n\n                if (matches.length == 0)\n                    return null;\n\n                return matches[0];\n            }\n            // Fuzzy id -> classname match\n            case ComponentResolveStrategy.FuzzyIdClassName: {\n                const _id = id.replace(/[^a-z0-9_\\-]/ig, '');\n\n                if (_id.length == 0) {\n                    LazyLoaderService.config.logger.err(\"Fuzzy classname matching stripped all symbols from the ID specified!\");\n                    return false;\n                }\n\n                const rx = new RegExp(`^${id}(component|module)?$`, \"i\");\n\n                const matches = modules\n                    .filter(mod => {\n                        let kid = mod.name.replace(/[^a-z0-9_\\-]/ig, '');\n\n                        return rx.test(kid);\n                    });\n\n                if (matches.length > 1) {\n                    LazyLoaderService.config.logger.err(\"Fuzzy classname matching resolved multiple targets!\");\n                    return false;\n                }\n\n                if (matches.length == 0) {\n                    LazyLoaderService.config.logger.err(\"Fuzzy classname matching resolved no targets!\");\n                    return null;\n                }\n\n                return matches[0];\n            }\n            case ComponentResolveStrategy.Custom: {\n                return LazyLoaderService.config.customResolver(modules as any);\n            }\n            default: {\n                return false;\n            }\n        }\n    }\n}\n","import { Input, ViewContainerRef, isDevMode, ComponentRef, EventEmitter, Optional, ViewChild, Component, Inject, Output, NgModule, AfterViewInit, OnInit } from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { MAT_DIALOG_DATA, } from '@angular/material/dialog';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport { BehaviorSubject, debounceTime, Subscription } from 'rxjs';\nimport { LazyLoaderService } from './lazy-loader.service';\nimport { stringToSlug } from '../../utils';\nimport { CompiledBundle, NgxLazyLoaderConfig } from './types';\n\n\n@Component({\n    selector: 'ngx-lazy-loader',\n    templateUrl: './lazy-loader.component.html',\n    styleUrls: [ './lazy-loader.component.scss' ],\n    imports: [ NgComponentOutlet, NgTemplateOutlet ],\n    standalone: true\n})\nexport class LazyLoaderComponent implements AfterViewInit {\n    @ViewChild(\"content\", { read: ViewContainerRef }) targetContainer: ViewContainerRef;\n\n    /**\n     * ! Here be dragons.\n     * Only the bravest of Adventurers can survive the battles below,\n     * and they must be trained and ready for the gruelling journey ahead.\n     * Many a soul has tried to best these Dragons, yet only one has\n     * succeeded since our founding.\n     *\n     * TL;DR -- Don't mess with this unless you know what you're doing.\n     *     This is central to a ton of moving parts -- breaking it will\n     *     cause more collateral damage than you may realize.\n     */\n\n    private _id: string;\n    private originalId: string;\n    /**\n     * The id of the component that will be lazy loaded\n     */\n    @Input(\"component\") set id(data: string) {\n        this.originalId = data;\n        const id = stringToSlug(data);\n\n        // Check if there is a change to the loaded component's id\n        // if it's updated, we destroy and rehydrate the entire container\n        if (this.initialized && this._id != id) {\n            this._id = id;\n            this.ngAfterViewInit();\n        }\n        else {\n            this._id = id;\n        }\n    };\n\n    private _group = \"default\";\n    private originalGroup: string;\n    @Input(\"group\") set group(data: string) {\n        this.originalGroup = data;\n        const group = stringToSlug(data);\n\n        if (typeof group != \"string\" || !group) return;\n\n        // If the group was updated, retry to bootstrap something into the container.\n        if (this.initialized && this._group != group) {\n            this._group = group;\n\n            this.ngAfterViewInit();\n            return;\n        }\n\n        this._group = group;\n    }\n    get group() { return this._group }\n\n    private _matchGroups: { [key: string]: string };\n    private _inputs: { [key: string]: any; };\n    /**\n     * A map of inputs to bind to the child.\n     * Supports change detection. (May fail on deep JSON changes)\n     *\n     * ```html\n     * <lazy-loader component=\"MyLazyComponent\"\n     *       [inputs]=\"{\n     *          prop1: true,\n     *          prop2: false,\n     *          complex: {\n     *              a: true,\n     *              b: 0\n     *          }\n     *       }\"\n     * >\n     * </lazy-loader>\n     * ```\n     */\n    @Input(\"inputs\") set inputs(data: { [key: string]: any; }) {\n        if (data == undefined) return;\n\n        let previous = this._inputs;\n        this._inputs = data;\n        if (data == undefined)\n            console.trace(data);\n\n        if (this.targetComponentFactory) {\n            const { inputs } = this.targetComponentFactory.ɵcmp;\n\n            const currentKeys = Object.keys(inputs);\n\n            const oldKeys = Object.keys(previous).filter(key => currentKeys.includes(key));\n            const newKeys = Object.keys(data).filter(key => currentKeys.includes(key));\n\n            const removed = oldKeys.filter(key => !newKeys.includes(key));\n\n            // ? perhaps set to null or undefined instead\n            removed.forEach(k => this.targetComponentInstance[k] = null);\n\n            this.bindInputs();\n        }\n    }\n\n\n    private outputSubscriptions: { [key: string]: Subscription; } = {};\n    private _outputs: { [key: string]: Function; };\n    /**\n     * A map of outputs to bind from the child.\n     * Should support change detection.\n     * ```html\n     * <lazy-loader component=\"MyLazyComponent\"\n     *       [outputs]=\"{\n     *           prop3: onOutputFire\n     *       }\"\n     * >\n     * </lazy-loader>\n     * ```\n     */\n    @Input(\"outputs\") set outputs(data: { [key: string]: Function; }) {\n        let previous = this._outputs;\n        this._outputs = data;\n\n        if (this.targetComponentFactory) {\n            const { inputs } = this.targetComponentFactory.ɵcmp;\n\n            const currentKeys = Object.keys(inputs);\n            const removed = Object.keys(previous).filter(key => !currentKeys.includes(key));\n\n            removed.forEach(k => {\n                // Unsubscribe from observable\n                this.outputSubscriptions[k]?.unsubscribe();\n                delete this.targetComponentInstance[k];\n            });\n\n            this.bindOutputs();\n        }\n    }\n\n    /**\n     * Emits errors encountered when loading components\n     */\n    @Output() componentLoadError = new EventEmitter();\n\n    /**\n     * Emits when the component is fully constructed\n     * and had it's inputs and outputs bound\n     * > before `OnInit`\n     *\n     * Returns the active class instance of the lazy-loaded component\n     */\n    @Output() componentLoaded = new EventEmitter();\n\n\n    /**\n     * This is an instance of the component that is currently loaded.\n     */\n    public instance: any;\n\n\n    /**\n     * Container that provides the component data\n     */\n    private targetModule: CompiledBundle;\n\n    /**\n     * Component definition\n     */\n    private targetComponentFactory: any;\n\n    /**\n     * Active component container reference\n     */\n    private targetComponentContainerRef: ComponentRef<any>;\n    private targetRef: any;\n    /**\n     * Reference to the component class instance\n     */\n    private targetComponentInstance: any;\n\n    /**\n     * Subscription with true/false state on whether the distractor should be\n     */\n    private distractorSubscription: Subscription;\n\n    public config: NgxLazyLoaderConfig;\n    private err;\n    private warn;\n    private log;\n\n    // Force 500ms delay before revealing the spinner\n    private clearEmitter = new EventEmitter();\n    private clearLoader$ = this.clearEmitter.pipe(debounceTime(300));\n\n    private showEmitter = new EventEmitter();\n    private showLoader$ = this.showEmitter.pipe(debounceTime(1));\n\n    private subscriptions = [\n        this.clearLoader$.subscribe(() => {\n            this.isClearingLoader = true;\n\n            setTimeout(() => {\n                this.renderSpinner = false;\n            }, 300)\n        }),\n        this.showLoader$.subscribe(() => {\n            this.isClearingLoader = false;\n            this.renderSpinner = true;\n        })\n    ];\n\n    public renderSpinner = true; // whether we render the DOM for the spinner\n    public isClearingLoader = false; // should the spinner start fading out\n\n    constructor(\n        private service: LazyLoaderService,\n        @Optional() private viewContainerRef: ViewContainerRef,\n        @Optional() public dialog: DialogRef,\n        @Optional() @Inject(MAT_DIALOG_DATA) public dialogArguments\n    ) {\n        this.config = LazyLoaderService.config;\n        this.err = LazyLoaderService.config.logger.err;\n        this.warn = LazyLoaderService.config.logger.warn;\n        this.log = LazyLoaderService.config.logger.log;\n\n        // First, check for dialog arguments\n        if (this.dialogArguments) {\n            this.inputs = this.dialogArguments.inputs || this.dialogArguments.data;\n            this.outputs = this.dialogArguments.outputs;\n            this.id = this.dialogArguments.id;\n            this.group = this.dialogArguments.group;\n        }\n    }\n\n    private initialized = false;\n    async ngAfterViewInit() {\n        this.ngOnDestroy(false);\n        this.isClearingLoader = false;\n        this.renderSpinner = true;\n        this.initialized = true;\n\n        if (!this._id) {\n            this.warn(\"No component was specified!\");\n            return this.loadDefault();\n        }\n\n        try {\n            const _entry = this.service.resolveRegistrationEntry(this.originalId, this.originalGroup);\n            if (!_entry || !_entry.entry) {\n                this.err(`Failed to find Component '${this._id}' in group '${this._group}' in registry!`);\n                return this.loadDefault();\n            }\n\n            const { entry, matchGroups } = _entry;\n            this._matchGroups = matchGroups;\n\n            // Download the \"module\" (the standalone component)\n            const bundle: CompiledBundle = this.targetModule = await entry.load();\n\n\n            // Check if there is some corruption on the bundle.\n            if (!bundle || typeof bundle != 'object') {\n                this.err(`Failed to load component/module for '${this._id}'! Parsed resource is invalid.`);\n                return this.loadError();\n            }\n\n            const modules = Object.keys(bundle)\n                .map(k => {\n                    const entry = bundle[k];\n\n                    // Strictly check for exported modules or standalone components\n                    if (typeof entry == \"function\" && typeof entry[\"ɵfac\"] == \"function\")\n                        return entry;\n                    return null;\n                })\n                .filter(e => e != null)\n                .filter(entry => {\n                    entry['_isModule'] = !!entry['ɵmod']; // module\n                    entry['_isComponent'] = !!entry['ɵcmp']; // component\n\n                    return (entry['_isModule'] || entry['_isComponent']);\n                });\n\n            if (modules.length == 0) {\n                this.err(`Component/Module loaded for '${this._id}' has no exported components or modules!`);\n                return this.loadError();\n            }\n\n            const component = this.targetComponentFactory = this.service.resolveComponent(this._id, \"default\", modules);\n\n            if (!component) {\n                this.err(`Component '${this._id}' is invalid or corrupted!`);\n                return this.loadError();\n            }\n\n\n            // const componentRef = this.targetComponentContainerRef = createComponent(component as any, {\n            //     environmentInjector: this.appRef.injector,\n            //     elementInjector: this.injector,\n            //     hostElement: this.viewContainerRef.element.nativeElement,\n            //     // projectableNodes:\n            // });\n            // // this.targetRef = this.targetContainer.insert(this.targetComponentContainerRef.hostView);\n            // this.appRef.attachView(componentRef.hostView);\n\n            // Bootstrap the component into the container\n            const componentRef = this.targetComponentContainerRef = this.targetContainer.createComponent(component as any);\n            this.targetRef = this.targetContainer.insert(this.targetComponentContainerRef.hostView);\n\n            const instance: any = this.targetComponentInstance = componentRef['instance'];\n\n            this.bindInputs();\n            this.bindOutputs();\n\n            this.componentLoaded.next(instance);\n            this.instance = instance;\n\n            // Look for an observable called isLoading$ that will make us show/hide\n            // the same distractor that is used on basic loading\n            const isLoading$ = instance['ngxShowDistractor$'] as BehaviorSubject<boolean>;\n\n            if (isLoading$ && typeof isLoading$.subscribe == \"function\") {\n                this.distractorSubscription = isLoading$.subscribe(loading => {\n                    loading ? this.showEmitter.emit() : this.clearEmitter.emit();\n                });\n            }\n            else {\n                this.clearEmitter.emit();\n            }\n\n            const name = Object.keys(bundle)[0];\n            this.log(`Loaded '${name}'`);\n            this.clearEmitter.emit();\n\n            return componentRef;\n        }\n        catch (ex) {\n\n            if (isDevMode()) {\n                console.warn(\"Component DDD \" + this._id + \" threw an error on mount!\");\n                console.warn(\"This will cause you to see a 404 panel.\");\n                console.error(ex);\n            }\n\n            // Network errors throw a toast and return an error component\n            if (ex && !isDevMode()) {\n                console.error(\"Uncaught error when loading component\");\n                throw ex;\n            }\n\n            return this.loadDefault();\n        }\n    }\n\n    ngOnDestroy(clearAll = true) {\n        // unsubscribe from all subscriptions\n        Object.entries(this.outputSubscriptions).forEach(([key, sub]) => {\n            sub.unsubscribe();\n        });\n        this.outputSubscriptions = {};\n\n        // Clear all things\n        if (clearAll) {\n            Object.entries(this.subscriptions).forEach(([key, sub]) => {\n                sub.unsubscribe();\n            });\n        }\n\n        this.distractorSubscription?.unsubscribe();\n\n        // Clear target container\n        this.targetRef?.destroy();\n        this.targetComponentContainerRef?.destroy();\n        this.targetContainer?.clear();\n\n        // Wipe the rest of the state clean\n        this.targetRef = null;\n        this.targetComponentContainerRef = null;\n    }\n\n    /**\n     * Bind the input values to the child component.\n     */\n    private bindInputs() {\n        if (!this._inputs || !this.targetComponentInstance) return;\n\n        // Merge match groups\n        if (typeof this._matchGroups == \"object\") {\n            Object.entries(this._matchGroups).forEach(([key, val]) => {\n                if (typeof this._inputs[key] == 'undefined')\n                    this._inputs[key] = val;\n            });\n        }\n\n        // forward-bind inputs\n        const { inputs } = this.targetComponentFactory.ɵcmp;\n\n        // Returns a list of entries that need to be set\n        // This makes it so that unnecessary setters are not invoked.\n        const updated = Object.entries(inputs).filter(([parentKey, childKey]: [string, string]) => {\n            return this.targetComponentInstance[childKey] != this._inputs[parentKey];\n        });\n\n        updated.forEach(([parentKey, childKey]: [string, string | [string, number, unknown]]) => {\n            if (this._inputs.hasOwnProperty(parentKey)) {\n                // Angular 19.2+\n                if (Array.isArray(childKey)) {\n                    this.targetComponentInstance[childKey[0]] = this._inputs[parentKey];\n                }\n                else {\n                    this.targetComponentInstance[childKey] = this._inputs[parentKey];\n                }\n            }\n        });\n    }\n\n    /**\n     * Bind the output handlers to the loaded child component\n     */\n    private bindOutputs() {\n        if (!this._outputs || !this.targetComponentInstance) return;\n\n        const { outputs } = this.targetComponentFactory.ɵcmp;\n\n        // Get a list of unregistered outputs\n        const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]: [string, string]) => {\n            return !this.outputSubscriptions[parentKey];\n        });\n\n        // Reverse bind via subscription\n        newOutputs.forEach(([parentKey, childKey]: [string, string]) => {\n            if (this._outputs.hasOwnProperty(parentKey)) {\n                const target: EventEmitter<unknown> = this.targetComponentInstance[childKey];\n                const outputs = this._outputs;\n\n                // Angular folks, stop making this so difficult.\n                const ctx = this.viewContainerRef['_hostLView'][8];\n                const sub = target.subscribe(outputs[parentKey].bind(ctx)); // Subscription\n\n                this.outputSubscriptions[parentKey] = sub;\n            }\n        });\n    }\n\n    /**\n     * Load the \"Default\" component (404) screen normally.\n     * This is shown when the component id isn't in the\n     * registry or otherwise doesn't match\n     *\n     * This\n     */\n    private loadDefault() {\n        if (this.config.notFoundComponent)\n            this.targetContainer.createComponent(this.config.notFoundComponent);\n\n        this.clearEmitter.emit();\n    }\n\n    /**\n     * Load the \"Error\" component.\n     * This is shown when we are able to resolve the component\n     * in the registry, but have some issue boostrapping the\n     * component into the viewContainer\n     */\n    private loadError() {\n        if (this.config.errorComponent)\n            this.targetContainer.createComponent(this.config.errorComponent);\n\n        this.clearEmitter.emit();\n    }\n}\n","<ng-container #content></ng-container>\n\n@if (renderSpinner) {\n    <div\n        class=\"ngx-lazy-loader-distractor\"\n        [class.destroying]=\"isClearingLoader\"\n    >\n        @if (config.loaderDistractorComponent) {\n            <ng-container\n                [ngComponentOutlet]=\"config.loaderDistractorComponent\"\n            />\n        }\n        @if (config.loaderDistractorTemplate) {\n            <ng-container\n                [ngTemplateOutlet]=\"config.loaderDistractorTemplate\"\n                [ngTemplateOutletContext]=\"{ '$implicit': inputs }\"\n            />\n        }\n    </div>\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { LazyLoaderComponent } from '../components/lazy-loader/lazy-loader.component';\nimport { LazyLoaderService } from '../components/lazy-loader/lazy-loader.service';\n\nexport type DialogOptions = Partial<Omit<MatDialogConfig<any>, 'data'> & {\n    /**\n     * List of properties to be provided to @Input() injectors\n     */\n    inputs: { [key: string]: any; },\n    /**\n     * List of properties to be provided to @Input() injectors\n     */\n    outputs: { [key: string]: Function; },\n    /**\n     * Context in which to execute callbacks from the `outputs` property via\n     * @Output() event Emitters\n     */\n    parent: any;\n}>;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DialogService {\n\n    private dialogs: MatDialogRef<unknown, any>[] = [];\n\n    constructor(\n        private dialog: MatDialog,\n        private lazyLoader: LazyLoaderService\n    ) {\n    }\n\n    open(name: string);\n    open(name: string, opts: DialogOptions);\n    open(name: string, group: string);\n    open(name: string, group: string, opts: DialogOptions);\n    open(name: string, groupOrOptions?: any, opts: DialogOptions = {}): Promise<any> {\n        const group = typeof groupOrOptions == \"string\" ? groupOrOptions : 'default';\n        if (typeof groupOrOptions == 'object')\n            opts = groupOrOptions;\n\n        return new Promise((resolve, reject) => {\n\n            const registration = this.lazyLoader.resolveRegistrationEntry(name, group);\n            if (!registration)\n                return reject(new Error(\"Cannot open dialog for \" + name + \". Could not find in registry.\"));\n\n\n            const args: MatDialogConfig = {\n                closeOnNavigation: true,\n                restoreFocus: true,\n                width: registration['width'],\n                height: registration['height'],\n                ...opts,\n                data: {\n                    id: name,\n                    inputs: opts.inputs || {},\n                    outputs: opts.outputs || {},\n                    group: group\n                },\n                panelClass: [\n                    \"dialog-\" + name,\n                    ...(Array.isArray(opts.panelClass) ? opts.panelClass : [opts.panelClass])\n                ]\n            };\n\n            let dialog = this.dialog.open(LazyLoaderComponent, args);\n\n            dialog['idx'] = name;\n            this.dialogs.push(dialog);\n\n            dialog.afterClosed().subscribe(result => {\n                console.info(\"Dialog closed \" + name, result);\n                resolve(result);\n            });\n        });\n    }\n\n    // Close all dialogs matching the given name\n    close(name: string) {\n        const dialogs = this.dialogs.filter(d => d['idx'] == name);\n        dialogs.forEach(dialog => dialog.close());\n    }\n\n    /**\n     * Method to close _all_ dialogs.\n     * Should be used sparingly.\n     */\n    clearDialog() {\n        this.dialogs.forEach(dialog => dialog.close());\n    }\n\n    /**\n     * Open a confirmation dialog. Will reject if a cancel occurs.\n     * @param title title of the dialog\n     * @param message main question that a user needs to confirm/deny\n     * @returns\n     */\n    // confirmAction(title: string, message: string): Promise<void> {\n    //     return new Promise((res, rej) => {\n    //         const dialog = this.dialog.open(ConfirmationComponent, {\n    //             maxHeight: \"90vh\",\n    //             maxWidth: \"90vw\",\n    //             panelClass: [\"dialog-confirmation\"],\n    //             closeOnNavigation: true,\n    //             restoreFocus: true,\n    //             data: {title, message}\n    //         });\n\n    //         dialog.afterClosed().subscribe(result => {\n    //             result == true ? res() : rej();\n    //         });\n    //     });\n    // }\n}\n","import { HttpClient, HttpContext, HttpHeaders, HttpParams } from \"@angular/common/http\";\nimport { Injectable, isDevMode } from '@angular/core';\nimport { retry } from 'rxjs/operators';\nimport { of } from 'rxjs';\n\n// Total number of _retries_ if there is a 429 response code.\nconst retryCount = 2;\n\nexport type FetchOptions = {\n    headers?: HttpHeaders | {\n        [header: string]: string | string[];\n    };\n    context?: HttpContext;\n    params?: HttpParams | {\n        [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n    };\n    body?: any,\n    observe?: 'body' | 'events' | 'response';\n    reportProgress?: boolean;\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    withCredentials?: boolean;\n}\n\n@Injectable({\n    providedIn: \"root\"\n})\nexport class Fetch {\n    constructor(\n        private http: HttpClient\n    ) { }\n\n    // Public interface for making AJAX transactions\n    public get<T>(url: string, options: FetchOptions = {}, returnError = false): Promise<T> {\n        return this.request<T>(\"get\", url, options, returnError);\n    }\n    public put<T>(url: string, body: any, options: FetchOptions = {}, returnError = false): Promise<T> {\n        options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};\n        return this.request<T>(\"put\", url, options, returnError);\n    }\n    public post<T>(url: string, body: any, options: FetchOptions = {}, returnError = false): Promise<T> {\n        options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};\n        return this.request<T>(\"post\", url, options, returnError);\n    }\n    public patch<T>(url: string, body: any, options: FetchOptions = {}, returnError = false): Promise<T> {\n        options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {};\n        return this.request<T>(\"patch\", url, options, returnError);\n    }\n    public delete<T>(url: string, options: FetchOptions = {}, returnError = false): Promise<T> {\n        return this.request<T>(\"delete\", url, options, returnError);\n    }\n\n    // Internally, handle the observable as a promise.\n    private request<T>(method: string, url: string, options: FetchOptions = {}, returnError = false): Promise<T> {\n        options.reportProgress = true;\n\n        // Allow support for different response types.\n        // Generally we shouldn't need this to be anything other than JSON.\n        options.responseType = options.responseType || \"json\";\n        options.withCredentials = true;\n\n\n        let abort = false;\n        const p = new Promise((resolve, reject) => {\n            const o = this.http.request(method, url, options)\n                .pipe(retry({\n                    delay(error, retryCount) {\n                        // 429 and 502 are most common for overloaded\n                        // backends -- so we'll retry if we get these errors\n                        if (error.status == 429 || error.status == 502)\n                            return of({});\n\n                        if (error.status == 504 && isDevMode())\n                            alert(\"It looks like you can't reach your development backend anymore\");\n\n                        abort = true;\n\n                        reject(error);\n                        throw error;\n                    },\n                    count: retryCount\n                }))\n                .subscribe(data => {\n                    resolve(data as unknown as T);\n\n                    // provide 3ms slacktime before releasing observable.\n                    setTimeout(() => {\n                        o.unsubscribe();\n                    }, 3);\n                });\n        });\n\n        return p as Promise<T>;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Fetch } from './fetch.service';\n\n\n/**\n * Service that listens for global keyboard events\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class FileService {\n\n    constructor(private fetch: Fetch) { }\n\n    chooseFile = (accept?: string, multiple = false, formMetadata = {}, ) => {\n        return new Promise(r => {\n            const inEl = document.createElement('input');\n            inEl.setAttribute('type', 'file');\n            if (multiple)\n                inEl.setAttribute('multiple', '');\n            if (accept)\n                inEl.setAttribute('accept', accept);\n\n            inEl.click();\n\n            let formData = new FormData();\n\n            inEl.addEventListener('change', () => {\n                Object.keys(inEl.files).forEach(k => {\n                    const file: {\n                        lastModified: number,\n                        lastModifiedDate: Date,\n                        name: string,\n                        size: number,\n                        type: string;\n                    } = inEl.files[k];\n\n                    const name = file.name;\n                    formData.append(name, file as any);\n                });\n                formData.append(\"data\", JSON.stringify(formMetadata));\n                inEl.remove();\n                r(formData);\n            });\n        });\n    };\n\n    // uploadFile = (config: NgxFileManagerConfiguration, currentDirectory: string, targetPath?: string) => {\n    //     return new Promise(r => {\n    //         const inEl = document.createElement('input');\n    //         inEl.setAttribute('type', 'file');\n    //         inEl.setAttribute('multiple', '');\n    //         inEl.click();\n\n    //         let formData = new FormData();\n\n    //         inEl.addEventListener('change', () => {\n    //             Object.keys(inEl.files).forEach(k => {\n    //                 const file: {\n    //                     lastModified: number,\n    //                     lastModifiedDate: Date,\n    //                     name: string,\n    //                     size: number,\n    //                     type: string;\n    //                 } = inEl.files[k];\n\n    //                 const name = file.name;\n    //                 formData.append(name, file as any);\n    //             });\n    //             formData.append(\"data\", JSON.stringify({\n    //                 path: currentDirectory\n    //             }));\n\n    //             const url = config.apiSettings.uploadEntryUrlTemplate\n    //                 ? config.apiSettings.uploadEntryUrlTemplate(targetPath ?? currentDirectory)\n    //                 : config.apiSettings.uploadEntryUrl;\n\n    //             r(this.fetch.post(url, formData).then(res => {\n    //                 inEl.remove();\n    //                 return res;\n    //             }));\n    //         });\n    //     });\n    // };\n}\n","import { Injectable, HostListener } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport type KeyCommand = {\n    /**\n     * The non-modifier key(s) that must be pressed for the event to fire.\n     */\n    key: string | string[],\n    label?: string,\n\n    ctrl?: boolean,\n    alt?: boolean,\n    shift?: boolean,\n    super?: boolean,\n    tab?: boolean,\n\n    /**\n     * Should the handler interrupt default event handling\n     */\n    interrupt?: boolean,\n}\n\n/**\n * Service that listens for global keyboard events\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class KeyboardService {\n\n    private heldKeys: { [key: string]: boolean } = {};\n    public keyCommands: {\n        ctrl?: boolean,\n        alt?: boolean,\n        shift?: boolean,\n        super?: boolean,\n        interrupt?: boolean,\n        label?: string,\n        keys: string[],\n        sub: Subject<KeyboardEvent>\n    }[] = [];\n\n    constructor() {\n        window.addEventListener(\"keydown\", (evt) => this.onKeyDown(evt));\n        window.addEventListener(\"keyup\", (evt) => this.onKeyUp(evt));\n    }\n\n    private onKeyDown(evt: KeyboardEvent) {\n        // console.log(\"keydown\", evt.key)\n        this.heldKeys[evt.key.toLowerCase()] = true;\n\n        // Do a general filter where all of the modifiers must be matched if specified\n        // Then check that the actual keys match what was specified\n        let commands = this.keyCommands\n            .filter(kc =>\n                (kc.ctrl == undefined || kc.ctrl === evt.ctrlKey) &&\n                (kc.alt == undefined || kc.alt === evt.altKey) &&\n                (kc.shift == undefined || kc.shift === evt.shiftKey) &&\n                (kc.super == undefined || kc.super === evt.metaKey) &&\n                kc.keys.length == kc.keys.filter(k => this.heldKeys[k])?.length\n            );\n\n        if (evt.ctrlKey && commands.length > 0 || commands.find(c => c.interrupt)) {\n            evt.stopPropagation();\n            evt.preventDefault();\n        }\n\n        if (evt.key == \"Pause\")\n            debugger;\n\n        commands.forEach(kc => kc.sub.next(evt));\n\n        /**\n         * Prevent CTRL+P and other standard key events from being handled by the browser.\n         * Allow specific combonations:\n         * CTRL+W\n         * CTRL+T\n         * CTRL+F5\n         */\n        // if (evt.ctrlKey && !['w', 't', 'F5'].includes(evt.key)) {\n        //     evt.preventDefault();\n        // }\n    }\n\n    private onKeyUp(evt: KeyboardEvent) {\n        this.heldKeys[evt.key.toLowerCase()] = false;\n    }\n\n    private onKeyPress(evt: KeyboardEvent) {\n        // this.heldKeys[evt.key] = false;\n    }\n\n    /**\n     * Use this to subscribe to keyboard events throughout\n     * the application. This is a passive listener and will\n     * **NOT** interrupt the event chain.\n     */\n    public onKeyCommand(key: KeyCommand) {\n        const sub = new Subject<KeyboardEvent>();\n        let item = {\n            ...key,\n            keys: (Array.isArray(key.key) ? key.key : [key.key]),\n            sub: sub\n        }\n\n        this.keyCommands.push(item);\n\n        return {\n            ...sub,\n            subscribe: ((...args) => {\n                const s = sub.subscribe(...args);\n                return {\n                    ...s,\n                    unsubscribe: () => {\n                        s.unsubscribe();\n\n                        // Remove the keycommand from the list of listeners.\n                        const i = this.keyCommands.findIndex(c => c == item);\n                        this.keyCommands.splice(i, 1);\n                    }\n                };\n            }) as Subject<KeyboardEvent>['subscribe']\n        };\n    }\n\n    /**\n     * Return `true` if shift is currently pressed.\n     */\n    get isShiftPressed() {\n        return !!this.heldKeys[\"shift\"];\n    }\n    /**\n     * Return `true` if ctrl is currently pressed.\n     */\n    get isCtrlPressed() {\n        return !!this.heldKeys[\"control\"];\n    }\n    /**\n     * Return `true` if alt is currently pressed.\n     */\n    get isAltPressed() {\n        return !!this.heldKeys[\"alt\"];\n    }\n    /**\n     * Return `true` if super (mac/linux) or the windows key is currently pressed.\n     */\n    get isSuperPressed() {\n        return !!this.heldKeys[\"super\"];\n    }\n    /**\n     * Return `true` if tab is currently pressed.\n     */\n    get isTabPressed() {\n        return !!this.heldKeys[\"tab\"];\n    }\n\n    @HostListener(\"window:blur\")\n    @HostListener(\"window:resize\")\n    clearKeys() {\n        Object.keys(this.heldKeys).forEach(k => {\n            this.heldKeys[k] = false;\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { LazyLoaderService } from '../components/lazy-loader/lazy-loader.service';\n\ntype NavigationArguments = {\n    root: string,\n    chunks: [string, ...string[]],\n    args: {\n        [key: string]: any;\n    };\n};\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NavigationService {\n    public virtualPath$ = new BehaviorSubject<NavigationArguments>(null);\n\n    constructor(\n        private readonly lazyLoader: LazyLoaderService\n    ) {\n        // @ts-ignore\n        window.onhashchange = () => this.loadRootPageFromUrl();\n        this.loadRootPageFromUrl();\n    }\n\n    private loadRootPageFromUrl() {\n        const hash = location.hash.split(\"?\")[0];\n        const root = hash.replace(/^\\/?#\\//, '');\n\n        // If the URL is imprecisely set, we restore it to the landing page\n        if (!root || !root.trim())\n            return this.loadRootPage(\"#/Landing\");\n\n        this.loadRootPage(location.hash);\n    }\n\n    private loadRootPage(url: string, data: Object = {}) {\n\n        const [path, query] = url.split('?');\n        const hash = path.replace(/^\\/?#\\/?/, '');\n        const chunks = hash.split('/');\n\n        // Get query params and pass them as @Input arguments.\n        const params = query?.split('&')\n            .reduce((pars, par) => {\n                const [key, value] = par.split(\"=\");\n                const decoded = decodeURIComponent(value);\n                pars[key] = decoded;\n                return pars;\n            }, {}) || {};\n\n\n        console.info(`Root page navigate to '${hash}'`, { params, chunks });\n        const root = hash.replace(/^\\/?#\\//, '');\n        this.virtualPath$.next({\n            root: hash,\n            chunks: chunks as any,\n            args: params\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\ntype AppTheme = \"light\" | \"dark\" | 'auto';\n\nconst verifyTheme = (theme) => {\n    if (theme == 'dark' || theme == 'light')\n        return theme;\n    return 'auto';\n};\nconst initialTheme = verifyTheme(localStorage['fiq.theme']);\nconst initialDiscreteTheme = initialTheme != 'auto'\n    ? initialTheme\n    : window.matchMedia('(prefers-color-scheme: dark)').matches\n        ? 'dark'\n        : 'light';\nconst getAutoTheme = () => {\n    return window.matchMedia('(prefers-color-scheme: dark)').matches\n        ? 'dark'\n        : 'light';\n};\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ThemeService {\n\n    readonly themes = [\n        { label: \"Dark\", id: 'dark' },\n        { label: \"Light\", id: 'light' },\n        { label: \"Automatic\", id: 'auto' },\n    ];\n\n    selectedTheme = initialTheme;\n\n    /**\n     * This theme will always only be 'dark' or 'light'.\n     * For use with canvases and similar libraries.\n     */\n    theme = new BehaviorSubject<'dark' | 'light'>(initialDiscreteTheme);\n\n    constructor() {\n\n        this.theme.subscribe(t => {\n            document.body.parentElement.classList.remove(\"theme-dark\");\n            document.body.parentElement.classList.remove(\"theme-light\");\n            document.body.parentElement.classList.add(\"theme-\" + t);\n        });\n\n        // The system theme changed (either due to timed color themes or the user changing the mode)\n        window.matchMedia('(prefers-color-scheme: dark)').addEventListener(\"change\", ev => {\n            if (localStorage['fiq.theme'] == \"auto\")\n                this.theme.next(getAutoTheme());\n        });\n    }\n\n    public setTheme(t: AppTheme) {\n        const theme = verifyTheme(t);\n        localStorage['fiq.theme'] = theme;\n        this.selectedTheme = theme;\n\n        if (theme == 'auto') {\n            this.theme.next(getAutoTheme());\n        }\n        else {\n            this.theme.next(theme);\n        }\n    }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { NgxLazyLoaderConfig } from './types';\nimport { LazyLoaderComponent } from './lazy-loader.component';\nimport { LazyLoaderService, NGX_LAZY_LOADER_CONFIG } from './lazy-loader.service';\n\n@NgModule({\n    imports: [LazyLoaderComponent],\n    exports: [LazyLoaderComponent]\n})\nexport class LazyLoaderModule {\n    public static forRoot(@Optional() config: NgxLazyLoaderConfig): ModuleWithProviders<LazyLoaderModule> {\n        return ({\n            ngModule: LazyLoaderModule,\n            providers: [\n                {\n                    provide: NGX_LAZY_LOADER_CONFIG,\n                    useValue: config\n                },\n                LazyLoaderService\n            ]\n        });\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, ElementRef, EventEmitter, Input, NgZone, Output, TemplateRef } from '@angular/core';\n\ntype CSSUnitString = 'px' | '%' | 'em' | 'in' | '';\ntype CSSUnit = `${number}${CSSUnitString}` | `var(--${string})`;\ntype CSSString = CSSUnit |\n    `calc(${CSSUnit|''}${''|' '}${'+'|'-'|'/'|'*'}${''|' '}${CSSUnit|''})`\n\n@Component({\n    selector: 'ngx-parallax-card',\n    templateUrl: './parallax-card.component.html',\n    styleUrls: ['./parallax-card.component.scss'],\n    imports: [\n        NgTemplateOutlet\n    ],\n    host: {\n        '[style.width]': 'width',\n        '[style.height]': 'height',\n        '[style.--card-bg-inset]': '-bgInset+\"px\"',\n        '[style.--flip-animation-duration]': 'flipAnimationDuration+\"ms\"',\n        '[class.flip]': 'showBackOfCard'\n    },\n    standalone: true\n})\nexport class ParallaxCardComponent {\n\n    // Front of card\n    @ContentChild('content', { read: TemplateRef }) content: TemplateRef<ElementRef>;\n    @ContentChild('background', { read: TemplateRef }) background: TemplateRef<ElementRef>;\n\n    // Back of card\n    @ContentChild('backContent', { read: TemplateRef }) backContent: TemplateRef<ElementRef>;\n    @ContentChild('backBackground', { read: TemplateRef }) backBackground: TemplateRef<ElementRef>;\n\n    /**\n     *\n     */\n    @Output() loaded = new EventEmitter();\n\n    /**\n     * Width of the card\n     * @default `240px`\n     */\n    @Input() width:  CSSString = '240px';\n    /**\n     * Height of the card\n     * @default `320px`\n     */\n    @Input() height: CSSString = '320px';\n    /**\n     * Inset padding of the parallax\n     * @default 80\n     */\n    @Input() bgInset:  number = 80;\n    /**\n     * Duration for the flip animation in ms\n     * @default 1200\n     */\n    @Input() flipAnimationDuration:  number = 1200;\n\n    renderCardFront = true;\n    renderCardBack = true;\n    showBackOfCard = false;\n\n    private get wrapper() { return this.element.nativeElement as HTMLElement; }\n    private get cardFront() { return this.wrapper.querySelector('.card.front') as HTMLElement; }\n    private get cardBack() { return this.wrapper.querySelector('.card.backface') as HTMLElement; }\n    private get backgroundElement() { return this.cardFront.querySelector('.card-bg') as HTMLDivElement; }\n    private get backfaceBackgroundElement() { return this.cardBack.querySelector('.card-bg') as HTMLDivElement; }\n\n    private pointerX = 0;\n    private pointerY = 0;\n    private pointerLeave = 0;\n\n    constructor(\n        private readonly element: ElementRef,\n        private readonly ngZone: NgZone\n    ) { }\n\n    ngAfterViewInit() {\n        const el = this.wrapper;\n\n        this.ngZone.runOutsideAngular(() => {\n            // Directly attach events to the wrapper\n            el.onpointermove = (e) => this.onPointerMove(e);\n            el.onpointerenter = () => this.onPointerEnter();\n            el.onpointerleave = () => this.onPointerLeave();\n        })\n        el.onclick = () => this.onClick();\n\n        this.loaded.emit();\n    }\n\n    onPointerMove(e: PointerEvent) {\n        const { width, height, left, top } = this.wrapper.getBoundingClientRect();\n        this.pointerX = e.pageX - left - (width / 2);\n        this.pointerY = e.pageY - top - (height / 2);\n\n        this.render();\n    }\n\n    onPointerEnter() {\n        clearTimeout(this.pointerLeave);\n    }\n\n    onPointerLeave() {\n        this.pointerLeave = setTimeout(() => {\n            this.pointerX = 0;\n            this.pointerY = 0;\n            this.render();\n        }, 600) as any;\n    }\n\n    // TODO: This can get intercepted in some states\n    onClick() {\n        this.showBackOfCard = !this.showBackOfCard;\n        this.render()\n    }\n\n    render = () => {\n        const { width, height } = this.wrapper.getBoundingClientRect();\n        const mousePX = this.pointerX / width;\n        const mousePY = this.pointerY / height;\n\n        // Rotation factors\n        const rX = mousePX * this.bgInset / 1.75;\n        const rY = mousePY * -this.bgInset / 1.75;\n\n        // Translation factors\n        const tX = mousePX * -this.bgInset * 2;\n        const tY = mousePY * -this.bgInset * 2;\n\n        if (this.renderCardFront) {\n            this.backgroundElement.style.transform = `translateX(${tX}px) translateY(${tY}px)`;\n        }\n        if (this.renderCardBack) {\n            this.backfaceBackgroundElement.style.transform = `translateX(${tX}px) translateY(${tY}px)`;\n        }\n\n        if (this.showBackOfCard) {\n            this.cardFront.style.transform = `rotateY(180deg) rotateX(${-rY}deg)`;\n            this.cardBack.style.transform = `rotateY(${-rX}deg) rotateX(${-rY}deg)`;\n        }\n        else {\n            this.cardFront.style.transform = `rotateY(${rX}deg) rotateX(${rY}deg)`;\n            this.cardBack.style.transform = `rotateY(180deg) rotateX(${-rY}deg)`;\n        }\n    }\n}\n","@if (renderCardBack) {\n    <div class=\"card backface\">\n        <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n            <ng-template [ngTemplateOutlet]=\"backBackground\" />\n        </div>\n        <div class=\"card-content\">\n            <ng-template [ngTemplateOutlet]=\"backContent\" />\n        </div>\n    </div>\n}\n\n@if (renderCardFront) {\n    <div class=\"card front\">\n        <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n            <ng-template [ngTemplateOutlet]=\"background\" />\n        </div>\n        <div class=\"card-content\">\n            @if (content) {\n                <ng-template [ngTemplateOutlet]=\"content\"/>\n            }\n            @else {\n                <ng-content/>\n            }\n        </div>\n    </div>\n}\n\n\n","import { InjectionToken } from '@angular/core';\n\nexport const NGX_WEB_COMPONENTS_CONFIG = new InjectionToken<NgxWebComponentsConfig>('webcomponents-config');\n\nexport type NgxWebComponentsConfig = Partial<{\n    /**\n     * The path that assets will ultimately be served from.\n     * Default `/assets/`\n     */\n    assetPath: string;\n}>;\n\n\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, HostListener, Inject, Input, Optional, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { DomSanitizer, createApplication } from '@angular/platform-browser';\n\nimport { ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { firstValueFrom } from 'rxjs';\nimport { MenuItem, MenuOptions } from './types';\n\ndeclare const Zone: any;\nconst zone = new Zone(Zone.current, { name: \"@dotglitch_menu\", properties: {} });\n\nexport const calcMenuItemBounds = async (menuItems: MenuItem[], dataObj: any) => {\n    const data = {\n        data: dataObj,\n        items: menuItems,\n        config: {},\n        selfCords: { left: \"0px\", top: \"0px\" },\n        ownerCords: { x: 0, y: 0, width: 0, height: 0 },\n        id: null\n    };\n\n    return calcComponentBounds(MenuComponent, data);\n};\n\nconst calcComponentBounds = async (component: Type<any>, data: any) => {\n    return new Promise<DOMRect>((res, rej) => {\n        zone.run(async () => {\n            const app = await createApplication({\n                providers: [\n                    { provide: MAT_DIALOG_DATA, useValue: data }\n                ]\n            });\n\n            const del = document.createElement(\"div\");\n            del.classList.add(\"ngx-menu\");\n            del.style.position = \"absolute\";\n            del.style.left = '-1000vw';\n            document.body.append(del);\n\n            const base = app.bootstrap(component, del);\n            const { instance } = base;\n\n            await firstValueFrom(app.isStable);\n\n            const el: HTMLElement = instance.viewContainer?.element?.nativeElement;\n\n            const rect = el.getBoundingClientRect();\n            app.destroy();\n            del.remove();\n\n            res(rect);\n        });\n    });\n};\n\nconst $data = Symbol(\"data\");\nconst $hover = Symbol(\"hover\");\n\n@Component({\n    selector: 'ngx-menu',\n    templateUrl: './menu.component.html',\n    styleUrls: ['./menu.component.scss'],\n    imports: [\n        NgTemplateOutlet,\n        PortalModule,\n        MatIconModule,\n        MatProgressSpinnerModule\n    ],\n    standalone: true,\n    host: {\n        \"[attr.tx]\": \"targetBounds?.x\",\n        \"[attr.ty]\": \"targetBounds?.y\",\n        \"[attr.th]\": \"targetBounds?.height\",\n        \"[attr.tw]\": \"targetBounds?.width\",\n    }\n})\nexport class MenuComponent {\n\n    @Input() public data: any;\n    @Input() public items: MenuItem[];\n    @Input() public config: MenuOptions;\n    @Input() public id: string;\n    @Input() public overlayOverlap = 32;\n    @Input() public hoverDelay = 400;\n    @Input() public showDebugOverlay = false;\n    @Input() public targetBounds: DOMRect;\n\n    @Input() ownerCords: DOMRect;\n    @Input() selfCords;\n    @Input() parentItem;\n    @Input() parentContext;\n    @Input() isLockedOpen = false;\n\n    public hasBootstrapped = false;\n    public pointerIsOnVoid = false;\n    public pointerHasBeenOverMask = false;\n    parentIsNgxMenu = false;\n\n    coverRectCords = {\n        top: 0,\n        left: 0,\n        height: 0,\n        width: 0\n    };\n\n    // Check if there are any slashes or dots -- that will clearly exclude it from being a mat icon\n    public readonly matIconRx = /[\\/\\.]/i;\n    showIconColumn = true;\n    showShortcutColumn = true;\n\n    template: TemplateRef<any>;\n    templateType: \"template\" | \"component\";\n    componentPortal: ComponentPortal<any>;\n    private childDialogs: MatDialogRef<any>[] = [];\n\n    constructor(\n        public viewContainer: ViewContainerRef,\n        public sanitizer: DomSanitizer,\n        @Optional() @Inject(MAT_DIALOG_DATA) private _data: any,\n        @Optional() public dialog: MatDialog, // optional only for the purpose of estimating dimensions\n        @Optional() public dialogRef: MatDialogRef<any>\n    ) {\n        // Defaults are set before @Input() hooks evaluate\n        this.dialog = this.dialog || this._data?.dialog;\n        this.data = this._data?.data;\n        this.ownerCords = this._data?.ownerCords;\n        this.selfCords = this._data?.selfCords;\n        this.items = this._data?.items;\n        this.config = this._data?.config;\n        this.id = this._data?.id;\n        this.parentItem = this._data?.parentItem;\n        this.parentContext = this._data?.parentContext;\n        this.isLockedOpen = this.isLockedOpen || this._data?.config?.['_isLockedOpen'];\n        this.parentIsNgxMenu = this._data?.parentIsNgxMenu;\n        this.targetBounds = this._data?.targetBounds;\n\n        this.template = this._data?.template;\n\n        this.templateType = this.template instanceof TemplateRef ? \"template\" : \"component\";\n\n        if (this.templateType == \"component\") {\n            this.componentPortal = new ComponentPortal(this.template as any);\n        }\n    }\n\n    ngOnInit() {\n\n        this.items?.forEach(i => {\n            if (typeof i == \"string\") return;\n\n            // Set defaults\n            i['_disabled'] = false;\n            i['_visible'] = true;\n            i['_context'] = (typeof i.context == \"function\")\n                ? i.context(this.data)\n                : i.context;\n\n            if (i.label)\n                try { i['_formattedLabel'] = this.formatLabel(i.label); } catch (e) { console.warn(e); }\n\n            if (typeof i.isDisabled == \"function\")\n                try { i['_disabled'] = i.isDisabled(this.data || {}, i['_context']); } catch (e) { console.warn(e); }\n\n            if (typeof i.isVisible == \"function\")\n                try { i['_visible'] = i.isVisible(this.data || {}, i['_context']); } catch (e) { console.warn(e); }\n\n            if (typeof i.linkTemplate == \"function\")\n                try { i['_link'] = i.linkTemplate(this.data || {}, i['_context']); } catch (e) { console.warn(e); }\n\n            if (typeof i.iconTemplate == \"function\")\n                try { i['_icon'] = i.iconTemplate(this.data || {}, i['_context']); } catch (e) { console.warn(e); }\n        });\n\n        // Show the icon column if there are any items with an icon\n        this.showIconColumn = !!this.items?.find(i =>\n            typeof i == \"object\" &&\n            typeof i['icon'] == \"string\" &&\n            i['icon'].length > 2\n        );\n\n        this.showShortcutColumn = !!this.items?.find(i =>\n            typeof i == \"object\" &&\n            typeof i['shortcut'] == \"string\" &&\n            i['shortcut'].length > 2\n        );\n\n        if (this.ownerCords) {\n            const selfY = parseInt(this.selfCords.top?.replace('px', '') || '0');\n            const selfX = parseInt(this.selfCords.left?.replace('px', '') || '0');\n\n            this.coverRectCords = {\n                top: this.ownerCords.y - selfY - (this.overlayOverlap / 2),\n                left: this.ownerCords.x - selfX - (this.overlayOverlap / 2),\n                height: this.ownerCords.height + this.overlayOverlap,\n                width: this.ownerCords.width + this.overlayOverlap\n            };\n        }\n\n        if (this.config?.stayOpen)\n            this.isLockedOpen = true;\n\n        setTimeout(() => {\n            this.hasBootstrapped = true;\n        }, 200);\n    }\n\n    ngAfterViewInit() {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n        el.addEventListener(\"keydown\", evt => {\n            this.isLockedOpen = true;\n        });\n        el.addEventListener(\"pointerdown\", evt => {\n            this.isLockedOpen = true;\n        });\n        el.addEventListener(\"touch\", evt => {\n            this.isLockedOpen = true;\n        });\n    }\n\n    ngOnDestroy() {\n        //\n        this.childDialogs.forEach(d => d.close({ [$data]: true }));\n    }\n\n    /**\n     *\n     */\n    async onMenuItemClick(item: MenuItem, row: HTMLTableRowElement, keepOpen = false) {\n        if (typeof item == 'string') return null;\n        if (item.separator) return null;\n\n        const context = await item['_context'];\n\n        // If cache is enabled, only load if we don't have any children.\n        const forceLoad = (item.cacheResolvedChildren ? !item.children : true);\n\n        if (item.childrenResolver && forceLoad) {\n            item['_isResolving'] = true;\n            item['_children'] = await item.childrenResolver(this.data, context);\n            item['_isResolving'] = false;\n        }\n        else if (typeof item.children == \"function\" && forceLoad) {\n            item['_isResolving'] = true;\n            item['_children'] = await item.children(this.data, context);\n            item['_isResolving'] = false;\n        }\n        else {\n            item['_children'] = item.children;\n        }\n\n        if (item['_children'] || item.childTemplate)\n            row['_open'] = true;\n\n        if (!item.childTemplate && !item.children) {\n            if (typeof item.action == \"function\") {\n                const res = await item.action(this.data, context);\n                this.close(res === undefined ? true : res);\n                return res;\n            }\n\n            // If no action, this is simply a text item.\n            return null;\n        }\n\n        // Need X pos, Y pos, width and height\n        const bounds = row.getBoundingClientRect();\n\n        const cords = {\n            top: null,\n            left: null,\n            bottom: null,\n            // right: null\n        };\n\n        // Set position coordinates\n        const targetBounds = await (item.childTemplate\n            ? calcComponentBounds(MenuComponent, { template: item.childTemplate })\n            : calcMenuItemBounds(item['_children'], this.data));\n        const { width, height } = targetBounds;\n\n        if (bounds.y + height > window.innerHeight)\n            cords.bottom = \"0px\";\n        if (bounds.x + bounds.width + width > window.innerWidth)\n            cords.left = ((bounds.x - width)) + \"px\";\n\n        if (!cords.bottom) cords.top = bounds.y + \"px\";\n        if (!cords.left) cords.left = bounds.x + bounds.width + \"px\";\n\n\n        const config = structuredClone(this.config);\n        config['_isLockedOpen'] = keepOpen;\n\n        // Do not project in the top left corner -- this scenario\n        // happens when a dialog opens as the parent is killed.\n        if (cords.left == '0px' && cords.top == '0px')\n            return;\n\n        const dialogRef = this.dialog.open(MenuComponent, {\n            position: cords,\n            panelClass: [\"ngx-menu\"].concat(this.config?.customClass || []),\n            backdropClass: \"ngx-menu-backdrop\",\n            hasBackdrop: false,\n            data: {\n                data: this.data,\n                ownerCords: row.getBoundingClientRect(),\n                selfCords: cords,\n                parentItem: item,\n                parentContext: context,\n                items: item['_children'],\n                template: item.childTemplate,\n                config: config,\n                parentIsNgxMenu: true,\n                targetBounds\n            }\n        });\n\n        let _s = dialogRef\n            .afterClosed()\n            .subscribe(async (result) => {\n                // Clicked \"void\" on a submenu\n                if (typeof result == \"object\" && result[$data] == true) {\n                    this.close(result);\n                }\n                // Went back to parent menu -- do not close (same as result == null)\n                else if (typeof result == \"object\" && result[$data] == false) {\n\n                }\n                // Got some other result value\n                else if (result != null) {\n                    // Perform action callback\n                    if (typeof item.action == 'function') {\n                        this.close(await item.action(result, context));\n                    }\n                    // Just close.\n                    else {\n                        this.close();\n                    }\n                }\n\n                row['_open'] = false;\n\n                this.childDialogs.splice(this.childDialogs.indexOf(dialogRef), 1);\n\n                _s.unsubscribe();\n            });\n\n        this.childDialogs.push(dialogRef);\n        return dialogRef;\n    }\n\n    /**\n     *\n     * @param label\n     * @returns\n     */\n    formatLabel(label: string): string {\n        return label.replace(/_([a-z0-9])_/i, (match, group) => `<u>${group}</u>`);\n    }\n\n    /**\n     * Close the context menu under these circumstances\n     */\n    // @HostListener(\"window:resize\", ['event'])\n    // @HostListener(\"window:blur\", ['event'])\n    close(result?) {\n        this.childDialogs.forEach(d => d.close());\n        this.dialogRef?.close(result);\n    }\n\n    closeOnVoid(force = false) {\n        if (!this.isLockedOpen || force) {\n            this.close({ [$data]: force });\n        }\n    }\n\n    startHoverTimer(item, row) {\n\n        // Invert check to make the logic simpler\n        // TL;DR: if (any) of these are true, we will do the hover action\n        if (!(\n            Array.isArray(item.children) && item.children.length > 0 ||\n            typeof item.children == \"function\" ||\n            item.childTemplate ||\n            item.childrenResolver\n        ))\n            return;\n\n        item[$hover] = setTimeout(() => {\n            delete item[$hover];\n\n            if (!this.pointerIsOnVoid) {\n                this.childDialogs.forEach(cd => cd.close());\n                row['_open'] = true;\n                this.onMenuItemClick(item, row);\n            }\n        }, this.hoverDelay);\n    }\n\n    stopHoverTimer(item) {\n        item[$hover] && clearTimeout(item[$hover]);\n        delete item[$hover];\n    }\n\n    private closeTimer: number;\n    startCloseTimer() {\n        this.closeTimer = setTimeout(() => {\n            this.closeOnVoid();\n        }, 500) as any;\n    }\n    stopCloseTimer() {\n        clearTimeout(this.closeTimer);\n    }\n\n    /**\n     * Check if the dialog is clipping offscreen\n     * if so, move it back into view.\n     */\n    @HostListener(\"window:resize\")\n    private onResize() {\n        const el = this.viewContainer?.element?.nativeElement as HTMLElement;\n        if (!el) return;\n\n        const { width, height, x, y } = el.getBoundingClientRect();\n\n        const target = document.querySelector(\".ngx-menu\") as HTMLElement;\n        if (!target) return;\n\n        // Move back into view if we're clipping outside of the bottom\n        if (y + height > window.innerHeight) {\n            const newTop = (window.innerHeight - (height + (this.config.edgePadding || 12))) + \"px\";\n            target.style['margin-top'] = newTop;\n        }\n\n        // Move back into view if we're clipping off the right\n        if (x + width > window.innerWidth) {\n            const newLeft = (window.innerWidth - (width + (this.config.edgePadding || 12))) + \"px\";\n            target.style['margin-left'] = newLeft;\n        }\n    }\n\n    // If the void element gets stuck open, make wheel events pass through.\n    onWheel(evt: WheelEvent) {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n        el.style.display = \"none\";\n        const target = document.elementFromPoint(evt.clientX, evt.clientY);\n        el.style.display = \"block\";\n\n        target.scroll({\n            top: evt.deltaY + target.scrollTop,\n            left: evt.deltaX + target.scrollLeft,\n            behavior: \"smooth\"\n        });\n    }\n}\n","<!-- Mouse event blocker for pointer leave -->\n@if (coverRectCords && !parentIsNgxMenu) {\n    <div\n        class=\"owner-mask\"\n        [style.top]=\"coverRectCords.top + 'px'\"\n        [style.left]=\"coverRectCords.left + 'px'\"\n        [style.height]=\"coverRectCords.height + 'px'\"\n        [style.width]=\"coverRectCords.width + 'px'\"\n        [style.background]=\"showDebugOverlay ? '#f004' : '#0000'\"\n        style=\"z-index: -1\"\n        (pointerenter)=\"pointerHasBeenOverMask=true\"\n        (pointerleave)=\"stopCloseTimer()\"\n        (pointermove)=\"pointerHasBeenOverMask=true\"\n        (click)=\"isLockedOpen = true\"\n    ></div>\n}\n\n@if (!parentIsNgxMenu) {\n    <div class=\"void\"\n        [style.background]=\"showDebugOverlay ? '#00f4' : '#0000'\"\n        (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n        (pointerleave)=\"pointerIsOnVoid = false\"\n        (pointerdown)=\"hasBootstrapped && closeOnVoid(true)\"\n        (pointermove)=\"hasBootstrapped && !isLockedOpen && startCloseTimer()\"\n        (click)=\"closeOnVoid(true)\"\n        (wheel)=\"onWheel($event)\"\n    ></div>\n}\n\n@if (!template) {\n    <table (pointerenter)=\"stopCloseTimer()\">\n        <tbody>\n            @for (item of items; track item) {\n                <!-- A row with a click action -->\n                @if (item != 'separator' && item.separator != true && item['_visible']) {\n                    <tr #row\n                        [class.disabled]=\"item['_disabled']\"\n                        (click)=\"!item['_disabled'] && onMenuItemClick(item, row, true)\"\n                        [class.hover]=\"row['hover']\"\n                        [class.open]=\"row['_open']\"\n                        (pointerenter)=\"row['hover'] = true; startHoverTimer(item, row)\"\n                        (pointerleave)=\"row['hover'] = false; stopHoverTimer(item)\"\n                    >\n\n                        @if (showIconColumn) {\n                            <td class=\"icon\">\n                                @if (matIconRx.test(item['_icon'] ?? item.icon)) {\n                                    <img [src]=\"item['_icon'] ?? item.icon\"/>\n                                }\n                                @else {\n                                    <mat-icon\n                                        [fontIcon]=\"item['_icon'] ?? item.icon\"\n                                        [style.color]=\"item.iconColor\"\n                                    />\n                                }\n                            </td>\n                        }\n\n                        <!-- 'Normal' action based item -->\n                        <td class=\"label\"\n                            [style.padding-left]=\"showIconColumn ? 0 : '16px'\"\n                        >\n                            <a\n                                #anchor\n                                [attr.target]=\"item.linkTarget\"\n                                [attr.href]=\"(item['_link'] || item.link) ? sanitizer.bypassSecurityTrustUrl(item['_link'] || item.link) : undefined\"\n                            >\n                                @if ($any(item.labelTemplate)?.prototype) {\n                                    <ng-container\n                                        [ngTemplateOutlet]=\"$any(item).labelTemplate\"\n                                        [ngTemplateOutletContext]=\"{\n                                            '$implicit': data,\n                                            'dialog': dialogRef,\n                                            'context': item['_context'],\n                                            'item': item,\n                                            'element': anchor,\n                                            'menu': this\n                                        }\"\n                                    />\n                                }\n                                @else {\n                                    @if ($any(item)?.labelTemplate) {\n                                        {{$any(item)?.labelTemplate(data || {})}}\n                                    }\n                                    @else {\n                                        <div [innerHTML]=\"item['_formattedLabel']\"></div>\n                                    }\n                                }\n                            </a>\n                        </td>\n\n                        @if (showShortcutColumn) {\n                            <td class=\"shortcut\">\n                                {{item.shortcutLabel}}\n                            </td>\n                        }\n\n                        <td style=\"min-width: 16px\">\n                            @if ((\n                                    (item['children']?.length > 0) ||\n                                    (item['_children']?.length > 0) ||\n                                    item.childTemplate ||\n                                    item.children?.['call'] ||\n                                    item.childrenResolver\n                                ) &&\n                                !item['_isResolving']\n                            ) {\n                                <mat-icon\n                                    style=\"transform: translateY(2px)\"\n                                >\n                                    chevron_right\n                                </mat-icon>\n                            }\n\n                            @if (item['_isResolving']) {\n                                <mat-progress-spinner\n                                    mode=\"indeterminate\"\n                                    [diameter]=\"20\"\n                                    style=\"margin-right: 4px\"\n                                />\n                            }\n                        </td>\n                    </tr>\n                }\n                @else if (item != 'separator' && item.separator == true) {\n                    <!-- Separator with label -->\n                    <tr\n                        class=\"disabled separator\"\n                    >\n                        <td\n                            class=\"center\"\n                            [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n                        >\n                            <span class=\"hr\">\n                                {{item['label'] || ''}}\n                            </span>\n                        </td>\n                    </tr>\n                }\n                @else if (item == 'separator') {\n                    <!-- Separator -->\n                    <tr\n                        class=\"disabled separator\"\n                    >\n                        <td\n                            [attr.colspan]=\"2 + (showIconColumn ? 1 : 0) + (showShortcutColumn ? 1 : 0)\"\n                        >\n                            <hr/>\n                        </td>\n                    </tr>\n                }\n            }\n        </tbody>\n    </table>\n}\n@else {\n    @if (templateType == 'template') {\n        <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n            <ng-container\n                [ngTemplateOutlet]=\"template\"\n                [ngTemplateOutletContext]=\"{\n                    '$implicit': data,\n                    'dialog': dialogRef,\n                    'context': parentContext,\n                    'item': parentItem,\n                    'element': this.viewContainer?.element?.nativeElement,\n                    'menu': this\n                }\"\n            />\n        </div>\n    }\n    @else {\n        <div style=\"display: contents;\" (pointerenter)=\"stopCloseTimer()\">\n            <ng-container\n                [cdkPortalOutlet]=\"componentPortal\"\n            />\n        </div>\n    }\n}\n\n@if (showDebugOverlay) {\n    <div>\n        <div>hbs: {{hasBootstrapped}}</div>\n        <div>pov: {{pointerIsOnVoid}}</div>\n        <div>ilo: {{isLockedOpen}}</div>\n        <div>hbom: {{pointerHasBeenOverMask}}</div>\n\n        <div>type: {{templateType}}</div>\n    </div>\n}\n","/**\n * This utils file exists outside of the strict angular DI zone\n * This enables opening popups without requiring absolute DI bindings.\n */\n\nexport const getPosition = (el: HTMLElement | PointerEvent, config: any = {}, bounds: DOMRect) => {\n    // Bounds of the popup owner\n    const src: DOMRect = !!el['nodeName']\n                ? (el as HTMLElement).getBoundingClientRect()\n                : {\n                    // It's a pointer event, so we'll take the X and Y from the pointer.\n                    x: el['clientX'],\n                    y: el['clientY'],\n                    // Set a default tiny size, so we don't divide by zero.\n                    width: 0.0001,\n                    height: 0.0001\n                } as DOMRect;\n\n    // Popup bounds\n    const { width, height } = bounds;\n\n    const winh = window.innerHeight;\n    const winw = window.innerWidth;\n\n    const cords = {\n        top: null,\n        left: null\n    };\n\n    if (config?.position == \"left\" || config?.position == \"right\" || !config?.position) {\n        switch (config?.alignment) {\n\n            case \"end\": {\n                // vertically bind to bottom\n                cords.top = src.y + src.height - height;\n                break;\n            }\n            case \"afterend\": {\n                // vertically bind below bottom\n                cords.top = src.y + src.height;\n                break;\n            }\n            case \"beforestart\": {\n                // vertically bind above top\n                cords.top = src.y - height;\n                break;\n            }\n            case \"start\": {\n                // vertically bind to top\n                cords.top = src.y;\n                break;\n            }\n            case \"center\":\n            default: {\n                // vertically center\n                cords.top = (src.y + (src.height / 2)) - (height / 2);\n                break;\n            }\n        }\n\n        // Apply bounds to prevent the dialog from being cut-off screen\n        // Lower bound\n        cords.top = Math.max(config?.edgePadding || 0, cords.top);\n        // Upper bound\n        cords.top = Math.min(winh - height, cords.top);\n\n        if (config?.position == \"left\") {\n            cords.left = src.x - (width + (config?.arrowSize || 0) + (config?.arrowPadding || 0));\n        }\n        if (config?.position == \"right\" || !config?.position) {\n            cords.left = src.x + (src.width + (config?.arrowSize || 0) + (config?.arrowPadding || 0));\n        }\n\n        // Lower bound\n        cords.left = Math.max(config?.edgePadding || 0, cords.left);\n        // Upper bound\n        cords.left = Math.min(winw - width, cords.left);\n    }\n    else if (config?.position == \"top\" || config?.position == \"bottom\") {\n        switch (config?.alignment) {\n            case \"end\": {\n                // vertically bind to right\n                cords.left = src.x + src.width - width;\n                break;\n            }\n            case \"afterend\": {\n                // vertically bind past right\n                cords.left = src.x + src.width;\n                break;\n            }\n            case \"beforestart\": {\n                // vertically bind before left\n                cords.left = src.x - width;\n                break;\n            }\n            case \"start\": {\n                // vertically bind to left\n                cords.left = src.x;\n                break;\n            }\n            case \"center\":\n            default: {\n                // vertically center\n                cords.left = (src.x + (src.width / 2)) - (width / 2);\n                break;\n            }\n        }\n\n        // Apply bounds to prevent the dialog from being cut-off screen\n        // Lower bound\n        cords.left = Math.max(config?.edgePadding || 0, cords.left);\n        // Upper bound\n        cords.left = Math.min(winw - width, cords.left);\n\n\n        if (config?.position == \"top\") {\n            cords.top = src.y - (height + (config?.arrowSize || 0) + (config?.arrowPadding || 0));\n        }\n        if (config?.position == \"bottom\") {\n            cords.top = src.y + (src.height + (config?.arrowSize || 0) + (config?.arrowPadding || 0));\n        }\n\n        // Lower bound\n        cords.top = Math.max(config?.edgePadding || 0, cords.top);\n        // Upper bound\n        cords.top = Math.min(winh - height, cords.top);\n    }\n\n    // Assign unit\n    cords.top = cords.top + 'px';\n    cords.left = cords.left + 'px';\n\n    return cords;\n}\n","import { Directive, HostListener, Input, ViewContainerRef } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { firstValueFrom } from 'rxjs';\nimport { ulid } from 'ulidx';\nimport { getPosition } from '../../directives/utils';\nimport { MenuComponent, calcMenuItemBounds } from './menu.component';\nimport { MenuItem, MenuOptions } from './types';\n\n@Directive({\n    selector: '[ngx-contextmenu],[ngx-menu]',\n    providers: [\n        MatDialog\n    ],\n    standalone: true\n})\nexport class MenuDirective {\n\n    /**\n     * The data representing the item the menu was opened for.\n     */\n    @Input(\"ngx-menu-context\") data: any;\n\n    /**\n     * The items that will be bound to the context menu.\n     */\n    @Input(\"ngx-contextmenu\") ctxMenuItems: MenuItem[];\n\n    /**\n     * The items that will be bound to the menu that pops\n     * up when the user clicks the element.\n     */\n    @Input(\"ngx-menu\") menuItems: MenuItem[];\n\n    /**\n     * Configuration for opening the app menu\n     */\n    @Input(\"ngx-menu-config\") config: MenuOptions = {};\n\n    private triggers: string[] = [];\n\n    constructor(\n        private dialog: MatDialog,\n        private viewContainer: ViewContainerRef\n    ) { }\n\n    ngOnInit() {\n        this.ngOnChanges();\n    }\n\n    ngOnChanges() {\n\n        if (this.config.trigger) {\n            this.triggers = Array.isArray(this.config.trigger) ? this.config.trigger : [this.config.trigger];\n        }\n    }\n\n    ngAfterViewInit() {\n        // const el = this.viewContainer.element.nativeElement as HTMLElement;\n\n        // // Automatically attach context menu items to\n        // // the contextmenu event\n        // if (this.ctxMenuItems) {\n        //     el.addEventListener('contextmenu', (e) => {\n        //         e.preventDefault();\n        //         this.openMenu(e as any, this.ctxMenuItems, true);\n        //     });\n        // }\n\n        // if (this.menuItems?.length > 0) {\n        //     if (!this.config?.trigger) {\n        //         el.addEventListener('click', (e) => {\n        //             this.openMenu(e as any, this.menuItems, true);\n        //         });\n        //     }\n        //     else {\n\n        //         triggers.forEach(t => {\n        //             if ([\"contextmenu\", \"click\"].includes(t)) {\n        //                 el.addEventListener(t, (e) => {\n        //                     e.preventDefault();\n        //                     this.openMenu(e as any, this.ctxMenuItems, true);\n        //                 });\n        //             }\n        //             else {\n        //                 el.addEventListener(t, this.openMenu.bind(this));\n        //             }\n        //         });\n        //     }\n        // }\n    }\n\n    async openMenu(evt: PointerEvent, items = this.menuItems, keepOpen = false) {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n\n        el.classList.add(\"ngx-menu-open\");\n\n        const isCtxEvent = evt.button == 2;\n\n        const config = structuredClone(this.config);\n        config['_isLockedOpen'] = keepOpen;\n\n        return openMenu(\n            this.dialog,\n            items,\n            this.data,\n            evt,\n            this.config,\n            isCtxEvent ? null : el\n        )\n            .then((...res) => {\n                el.classList.remove(\"ngx-menu-open\");\n                return res;\n            })\n            .catch((ex) => {\n                el.classList.remove(\"ngx-menu-open\");\n                throw ex;\n            });\n    }\n\n    @HostListener(\"contextmenu\", ['$event'])\n    onCtxMenu(e) {\n        if (this.ctxMenuItems || this.triggers.includes(\"contextmenu\")) {\n            e.preventDefault();\n            this.openMenu(e as any, this.ctxMenuItems, true);\n        }\n    }\n\n    @HostListener(\"click\", ['$event'])\n    onClick(e) {\n        if (\n            this.menuItems &&\n            (\n                this.triggers.length == 0 ||\n                this.triggers.includes(\"click\")\n            )\n        ) {\n            e.preventDefault();\n            this.openMenu(e as any, this.menuItems, true);\n        }\n    }\n\n    @HostListener(\"dblclick\", ['$event'])\n    onDblClick(e) {\n        if (\n            this.menuItems && this.triggers.length == 0 ||\n            this.menuItems && this.triggers.includes(\"dblclick\")\n        ) {\n            e.preventDefault();\n            this.openMenu(e as any, this.menuItems, true);\n        }\n    }\n}\n\n// Helper to open the menu without using the directive.\nexport const openMenu = async (\n    dialog: MatDialog,\n    menuItems: MenuItem[],\n    data: any,\n    evt: PointerEvent,\n    config: MenuOptions = {},\n    el?: HTMLElement\n) => {\n    // console.log({ dialog, menuItems, data, evt, config, el });\n\n    evt.preventDefault();\n    evt.stopPropagation();\n\n    // Apply defaults.\n    if (!config.alignment)\n        config.alignment = \"start\";\n\n    const initialBounds = await calcMenuItemBounds(menuItems, data);\n    const cords = getPosition(el || evt, config, initialBounds);\n    const specificId = ulid();\n\n    return firstValueFrom(\n        dialog.open(MenuComponent, {\n            data: {\n                dialog,\n                data: data,\n                ownerCords: el?.getBoundingClientRect(),\n                selfCords: cords,\n                items: menuItems,\n                config: config,\n                id: specificId,\n                targetBounds: initialBounds\n            },\n            panelClass: [\"ngx-menu\", 'ngx-' + specificId].concat(config?.customClass || []),\n            position: cords,\n            backdropClass: \"ngx-menu-backdrop\"\n        })\n            .afterClosed());\n};\n",";/*\n * Public API Surface of package\n */\n\n/**\n ** Types\n */\nexport * from './types/popup';\n\n/**\n ** Directives\n */\nexport * from './directives/image-cache.directive';\n\n/**\n ** Pipes\n */\nexport * from './pipes/html-bypass.pipe';\nexport * from './pipes/resource-bypass.pipe';\nexport * from './pipes/script-bypass.pipe';\nexport * from './pipes/style-bypass.pipe';\nexport * from './pipes/url-bypass.pipe';\n\n/**\n** Services\n*/\nexport * from './services/dependency.service';\nexport * from './services/dialog.service';\nexport * from './services/fetch.service';\nexport * from './services/file.service';\nexport * from './services/keyboard.service';\nexport * from './services/navigation.service';\nexport * from './services/theme.service';\n\n/**\n** Lazy loader component & service\n*/\nexport * from './components/lazy-loader/lazy-loader.component';\nexport * from './components/lazy-loader/lazy-loader.module';\nexport * from './components/lazy-loader/lazy-loader.service';\nexport * from './components/lazy-loader/types';\n\n/**\n ** Components\n */\nexport * from './components/parallax-card/parallax-card.component';\nexport * from './components/types';\n\n/**\n ** Menu\n */\nexport * from './components/menu/menu.component';\nexport * from './components/menu/menu.directive';\nexport * from './components/menu/types';\n\nexport * from './directives/utils';\nexport * from './utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.LazyLoaderService","i1.Fetch","i1.LazyLoaderService","i2"],"mappings":"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"}