{"version":3,"file":"ng-flex-layout-server.mjs","sources":["../../../../projects/libs/flex-layout/server/server-match-media.ts","../../../../projects/libs/flex-layout/server/server-provider.ts","../../../../projects/libs/flex-layout/server/module.ts","../../../../projects/libs/flex-layout/server/public-api.ts","../../../../projects/libs/flex-layout/server/ng-flex-layout-server.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Inject, Injectable, NgZone, PLATFORM_ID, DOCUMENT} from '@angular/core';\nimport {\n    BreakPoint,\n    ɵMatchMedia as MatchMedia,\n    BREAKPOINTS,\n    LAYOUT_CONFIG,\n    LayoutConfigOptions\n} from 'ng-flex-layout/core';\n\n/**\n * Special server-only class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class ServerMediaQueryList extends EventTarget implements MediaQueryList {\n    private _listeners: MediaQueryListListener[] = [];\n\n    get matches(): boolean {\n        return this._isActive;\n    }\n\n    get media(): string {\n        return this._mediaQuery;\n    }\n\n    constructor(private _mediaQuery: string, private _isActive = false) {\n        super();\n    }\n\n    /**\n   * Destroy the current list by deactivating the\n   * listeners and clearing the internal list\n   */\n    destroy() {\n        this.deactivate();\n        this._listeners = [];\n    }\n\n    /** Notify all listeners that 'matches === TRUE' */\n    activate(): ServerMediaQueryList {\n        if (!this._isActive) {\n            this._isActive = true;\n            this._listeners.forEach((callback) => {\n                const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n                cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n            });\n        }\n        return this;\n    }\n\n    /** Notify all listeners that 'matches === false' */\n    deactivate(): ServerMediaQueryList {\n        if (this._isActive) {\n            this._isActive = false;\n            this._listeners.forEach((callback) => {\n                const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n                cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n            });\n        }\n        return this;\n    }\n\n    /** Add a listener to our internal list to activate later */\n    addListener(listener: MediaQueryListListener) {\n        if (this._listeners.indexOf(listener) === -1) {\n            this._listeners.push(listener);\n        }\n        if (this._isActive) {\n            const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = listener!;\n            cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n        }\n    }\n\n    /** Don't need to remove listeners in the server environment */\n    removeListener() {\n    }\n\n    override addEventListener() {\n    }\n\n    override removeEventListener() {\n    }\n\n    override dispatchEvent(_: Event): boolean {\n        return false;\n    }\n\n    onchange: MediaQueryListListener = null;\n}\n\n/**\n * Special server-only implementation of MatchMedia that uses the above\n * ServerMediaQueryList as its internal representation\n *\n * Also contains methods to activate and deactivate breakpoints\n */\n@Injectable()\nexport class ServerMatchMedia extends MatchMedia {\n    private _activeBreakpoints: BreakPoint[] = [];\n\n    constructor(protected override _zone: NgZone,\n        @Inject(PLATFORM_ID) protected override _platformId: Object,\n        @Inject(DOCUMENT) protected override _document: any,\n        @Inject(BREAKPOINTS) protected breakpoints: BreakPoint[],\n        @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions) {\n        super(_zone, _platformId, _document);\n\n        const serverBps = layoutConfig.ssrObserveBreakpoints;\n        if (serverBps) {\n            this._activeBreakpoints = serverBps\n                .reduce((acc: BreakPoint[], serverBp: string) => {\n                    const foundBp = breakpoints.find(bp => serverBp === bp.alias);\n                    if (!foundBp) {\n                        console.warn(`FlexLayoutServerModule: unknown breakpoint alias \"${serverBp}\"`);\n                    } else {\n                        acc.push(foundBp);\n                    }\n                    return acc;\n                }, []);\n        }\n    }\n\n    /** Activate the specified breakpoint if we're on the server, no-op otherwise */\n    activateBreakpoint(bp: BreakPoint) {\n        const lookupBreakpoint = this.registry.get(bp.mediaQuery) as ServerMediaQueryList;\n        if (lookupBreakpoint) {\n            lookupBreakpoint.activate();\n        }\n    }\n\n    /** Deactivate the specified breakpoint if we're on the server, no-op otherwise */\n    deactivateBreakpoint(bp: BreakPoint) {\n        const lookupBreakpoint = this.registry.get(bp.mediaQuery) as ServerMediaQueryList;\n        if (lookupBreakpoint) {\n            lookupBreakpoint.deactivate();\n        }\n    }\n\n    /**\n   * Call window.matchMedia() to build a MediaQueryList; which\n   * supports 0..n listeners for activation/deactivation\n   */\n    protected override buildMQL(query: string): ServerMediaQueryList {\n        const isActive = this._activeBreakpoints.some(ab => ab.mediaQuery === query);\n\n        return new ServerMediaQueryList(query, isActive);\n    }\n}\n\ntype MediaQueryListListener = ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\n","import { DOCUMENT } from '@angular/core';\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BEFORE_APP_SERIALIZED} from '@angular/platform-server';\nimport {\n    BREAKPOINTS,\n    CLASS_NAME,\n    SERVER_TOKEN,\n    BreakPoint,\n    ɵMatchMedia as MatchMedia,\n    StylesheetMap,\n    sortAscendingPriority,\n    MediaMarshaller,\n} from 'ng-flex-layout/core';\n\nimport {ServerMatchMedia} from './server-match-media';\n\n/**\n * Activate all the registered breakpoints in sequence, and then\n * retrieve the associated stylings from the virtual stylesheet\n * @param serverSheet the virtual stylesheet that stores styles for each\n *        element\n * @param mediaController the MatchMedia service to activate/deactivate breakpoints\n * @param breakpoints the registered breakpoints to activate/deactivate\n * @param mediaMarshaller the MediaMarshaller service to disable fallback styles dynamically\n */\nexport function generateStaticFlexLayoutStyles(serverSheet: StylesheetMap,\n    mediaController: ServerMatchMedia,\n    breakpoints: BreakPoint[],\n    mediaMarshaller: MediaMarshaller) {\n    // Store the custom classes in the following map, that way only\n    // one class gets allocated per HTMLElement, and each class can\n    // be referenced in the static media queries\n    const classMap = new Map<HTMLElement, string>();\n\n    // Get the initial stylings for all the directives,\n    // and initialize the fallback block of stylings.\n    const defaultStyles = new Map(serverSheet.stylesheet);\n    // Reset the class counter, otherwise class numbers will\n    // increase with each server render.\n    nextId = 0;\n    let styleText = generateCss(defaultStyles, 'all', classMap);\n    mediaMarshaller.useFallbacks = false;\n\n    [...breakpoints].sort(sortAscendingPriority).forEach((bp) => {\n        serverSheet.clearStyles();\n        mediaController.activateBreakpoint(bp);\n        const stylesheet = new Map(serverSheet.stylesheet);\n        if (stylesheet.size > 0) {\n            styleText += generateCss(stylesheet, bp.mediaQuery, classMap);\n        }\n        mediaController.deactivateBreakpoint(bp);\n    });\n\n    return styleText;\n}\n\n/**\n * Create a style tag populated with the dynamic stylings from Flex\n * components and attach it to the head of the DOM\n */\nexport function FLEX_SSR_SERIALIZER_FACTORY(serverSheet: StylesheetMap,\n    mediaController: ServerMatchMedia,\n    _document: Document,\n    breakpoints: BreakPoint[],\n    mediaMarshaller: MediaMarshaller) {\n    return () => {\n    // This is the style tag that gets inserted into the head of the DOM,\n    // populated with the manual media queries\n        const styleTag = _document.createElement('style');\n        const styleText = generateStaticFlexLayoutStyles(\n            serverSheet, mediaController, breakpoints, mediaMarshaller);\n        styleTag.classList.add(`${CLASS_NAME}ssr`);\n        styleTag.textContent = styleText;\n        _document.head!.appendChild(styleTag);\n    };\n}\n\n/**\n *  Provider to set static styles on the server\n */\nexport const SERVER_PROVIDERS = [\n    {\n        provide: BEFORE_APP_SERIALIZED,\n        useFactory: FLEX_SSR_SERIALIZER_FACTORY,\n        deps: [\n            StylesheetMap,\n            MatchMedia,\n            DOCUMENT,\n            BREAKPOINTS,\n            MediaMarshaller,\n        ],\n        multi: true,\n    },\n    {\n        provide: SERVER_TOKEN,\n        useValue: true\n    },\n    {\n        provide: MatchMedia,\n        useClass: ServerMatchMedia\n    }\n];\n\n\nlet nextId = 0;\nconst IS_DEBUG_MODE = false;\n\nexport type StyleSheet = Map<HTMLElement, Map<string, string|number>>;\nexport type ClassMap = Map<HTMLElement, string>;\n\n/**\n * create @media queries based on a virtual stylesheet\n * * Adds a unique class to each element and stores it\n *   in a shared classMap for later reuse\n * @param stylesheet the virtual stylesheet that stores styles for each\n *        element\n * @param mediaQuery the given @media CSS selector for the current breakpoint\n * @param classMap the map of HTML elements to class names to avoid duplications\n */\nfunction generateCss(stylesheet: StyleSheet, mediaQuery: string, classMap: ClassMap) {\n    let css = '';\n    stylesheet.forEach((styles, el) => {\n        let keyVals = '';\n        let className = getClassName(el, classMap);\n\n        styles.forEach((v, k) => {\n            keyVals += v ? format(`${k}:${v};`) : '';\n        });\n\n        if (keyVals) {\n            // Build list of CSS styles; each with a className\n            css += format(`.${className} {`, keyVals, '}');\n        }\n    });\n\n    // Group 1 or more styles (each with className) in a specific mediaQuery\n    return format(`@media ${mediaQuery} {`, css, '}');\n}\n\n/**\n * For debugging purposes, prefix css segment with linefeed(s) for easy\n  * debugging purposes.\n */\nfunction format(...list: string[]): string {\n    let result = '';\n    list.forEach((css, i) => {\n        result += IS_DEBUG_MODE ? formatSegment(css, i !== 0) : css;\n    });\n    return result;\n}\n\nfunction formatSegment(css: string, asPrefix: boolean = true): string {\n    return asPrefix ? `\\n${css}` : `${css}\\n`;\n}\n\n/**\n * Get className associated with CSS styling\n * If not found, generate global className and set\n * association.\n */\nfunction getClassName(element: HTMLElement, classMap: Map<HTMLElement, string>) {\n    let className = classMap.get(element);\n    if (!className) {\n        className = `${CLASS_NAME}${nextId++}`;\n        classMap.set(element, className);\n    }\n    element.classList.add(className);\n\n    return className;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\n\nimport {SERVER_PROVIDERS} from './server-provider';\n\n@NgModule({\n    providers: [SERVER_PROVIDERS]\n})\nexport class FlexLayoutServerModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './module';\nexport * from './server-provider';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatchMedia"],"mappings":"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"}