{"version":3,"file":"ngbracket-ngx-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/ngbracket-ngx-layout-server.ts"],"sourcesContent":["\nimport { Inject, Injectable, NgZone, PLATFORM_ID, DOCUMENT } from '@angular/core';\nimport {\n  BreakPoint,\n  BREAKPOINTS,\n  LAYOUT_CONFIG,\n  LayoutConfigOptions,\n  ɵMatchMedia as MatchMedia,\n} from '@ngbracket/ngx-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\n  extends EventTarget\n  implements MediaQueryList\n{\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(\n    private _mediaQuery: string,\n    private _isActive = false,\n  ) {\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 =\n          callback!;\n        cb.call(this, {\n          matches: this.matches,\n          media: this.media,\n        } 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 =\n          callback!;\n        cb.call(this, {\n          matches: this.matches,\n          media: this.media,\n        } 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 =\n        listener!;\n      cb.call(this, {\n        matches: this.matches,\n        media: this.media,\n      } as MediaQueryListEvent);\n    }\n  }\n\n  /** Don't need to remove listeners in the server environment */\n  removeListener() {}\n\n  override addEventListener() {}\n\n  override removeEventListener() {}\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(\n    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  ) {\n    super(_zone, _platformId, _document);\n\n    const serverBps = layoutConfig.ssrObserveBreakpoints;\n    if (serverBps) {\n      this._activeBreakpoints = serverBps.reduce(\n        (acc: BreakPoint[], serverBp: string) => {\n          const foundBp = breakpoints.find((bp) => serverBp === bp.alias);\n          if (!foundBp) {\n            console.warn(\n              `FlexLayoutServerModule: unknown breakpoint alias \"${serverBp}\"`,\n            );\n          } else {\n            acc.push(foundBp);\n          }\n          return acc;\n        },\n        [],\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(\n      bp.mediaQuery,\n    ) 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(\n      bp.mediaQuery,\n    ) 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(\n      (ab) => ab.mediaQuery === query,\n    );\n\n    return new ServerMediaQueryList(query, isActive);\n  }\n}\n\ntype MediaQueryListListener =\n  | ((this: MediaQueryList, ev: MediaQueryListEvent) => any)\n  | null;\n","\nimport { BEFORE_APP_SERIALIZED } from '@angular/platform-server';\nimport {\n  BreakPoint,\n  BREAKPOINTS,\n  CLASS_NAME,\n  ɵMatchMedia as MatchMedia,\n  MediaMarshaller,\n  SERVER_TOKEN,\n  sortAscendingPriority,\n  StylesheetMap,\n} from '@ngbracket/ngx-layout/core';\n\nimport { CSP_NONCE, Inject, Optional, DOCUMENT } from '@angular/core';\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(\n  serverSheet: StylesheetMap,\n  mediaController: ServerMatchMedia,\n  breakpoints: BreakPoint[],\n  mediaMarshaller: MediaMarshaller,\n) {\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(\n  serverSheet: StylesheetMap,\n  mediaController: ServerMatchMedia,\n  _document: Document,\n  breakpoints: BreakPoint[],\n  mediaMarshaller: MediaMarshaller,\n  _nonce?: string,\n) {\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    if (_nonce) {\n      styleTag.setAttribute('nonce', _nonce);\n    }\n    const styleText = generateStaticFlexLayoutStyles(\n      serverSheet,\n      mediaController,\n      breakpoints,\n      mediaMarshaller,\n    );\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      [new Optional(), new Inject(CSP_NONCE)],\n    ],\n    multi: true,\n  },\n  {\n    provide: SERVER_TOKEN,\n    useValue: true,\n  },\n  {\n    provide: MatchMedia,\n    useClass: ServerMatchMedia,\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(\n  stylesheet: StyleSheet,\n  mediaQuery: string,\n  classMap: ClassMap,\n) {\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(\n  element: HTMLElement,\n  classMap: Map<HTMLElement, string>,\n) {\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","import { NgModule } from '@angular/core';\n\nimport { SERVER_PROVIDERS } from './server-provider';\n\n@NgModule({\n  providers: [SERVER_PROVIDERS],\n})\nexport class FlexLayoutServerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MatchMedia"],"mappings":"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"}