{"version":3,"file":"ngbracket-ngx-layout-core.mjs","sources":["../../../../projects/libs/flex-layout/core/media-change.ts","../../../../projects/libs/flex-layout/core/add-alias.ts","../../../../projects/libs/flex-layout/core/browser-provider.ts","../../../../projects/libs/flex-layout/core/module.ts","../../../../projects/libs/flex-layout/core/stylesheet-map/stylesheet-map.ts","../../../../projects/libs/flex-layout/core/tokens/breakpoint-token.ts","../../../../projects/libs/flex-layout/core/tokens/library-config.ts","../../../../projects/libs/flex-layout/core/tokens/server-token.ts","../../../../projects/libs/flex-layout/core/utils/sort.ts","../../../../projects/libs/flex-layout/core/breakpoints/breakpoint-tools.ts","../../../../projects/libs/flex-layout/core/breakpoints/data/break-points.ts","../../../../projects/libs/flex-layout/core/breakpoints/data/orientation-break-points.ts","../../../../projects/libs/flex-layout/core/breakpoints/break-points-token.ts","../../../../projects/libs/flex-layout/core/breakpoints/break-point-registry.ts","../../../../projects/libs/flex-layout/core/match-media/match-media.ts","../../../../projects/libs/flex-layout/core/media-marshaller/print-hook.ts","../../../../projects/libs/flex-layout/core/media-marshaller/media-marshaller.ts","../../../../projects/libs/flex-layout/core/style-builder/style-builder.ts","../../../../projects/libs/flex-layout/core/style-utils/style-utils.ts","../../../../projects/libs/flex-layout/core/base/base2.ts","../../../../projects/libs/flex-layout/core/match-media/mock/mock-match-media.ts","../../../../projects/libs/flex-layout/core/utils/array.ts","../../../../projects/libs/flex-layout/core/media-observer/media-observer.ts","../../../../projects/libs/flex-layout/core/media-trigger/media-trigger.ts","../../../../projects/libs/flex-layout/core/basis-validator/basis-validator.ts","../../../../projects/libs/flex-layout/core/multiply/multiplier.ts","../../../../projects/libs/flex-layout/core/ngbracket-ngx-layout-core.ts"],"sourcesContent":["export type MediaQuerySubscriber = (changes: MediaChange) => void;\n\n/**\n * Class instances emitted [to observers] for each mql notification\n */\nexport class MediaChange {\n  property: string = '';\n  value: any;\n\n  /**\n   * @param matches whether the mediaQuery is currently activated\n   * @param mediaQuery e.g. (min-width: 600px) and (max-width: 959px)\n   * @param mqAlias e.g. gt-sm, md, gt-lg\n   * @param suffix e.g. GtSM, Md, GtLg\n   * @param priority the priority of activation for the given breakpoint\n   */\n  constructor(\n    public matches = false,\n    public mediaQuery = 'all',\n    public mqAlias = '',\n    public suffix = '',\n    public priority = 0,\n  ) {}\n\n  /** Create an exact copy of the MediaChange */\n  clone(): MediaChange {\n    return new MediaChange(\n      this.matches,\n      this.mediaQuery,\n      this.mqAlias,\n      this.suffix,\n    );\n  }\n}\n","import { OptionalBreakPoint } from './breakpoints';\nimport { MediaChange } from './media-change';\n\n/**\n * For the specified MediaChange, make sure it contains the breakpoint alias\n * and suffix (if available).\n */\nexport function mergeAlias(\n  dest: MediaChange,\n  source: OptionalBreakPoint,\n): MediaChange {\n  dest = dest?.clone() ?? new MediaChange();\n  if (source) {\n    dest.mqAlias = source.alias;\n    dest.mediaQuery = source.mediaQuery;\n    dest.suffix = source.suffix as string;\n    dest.priority = source.priority as number;\n  }\n  return dest;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  APP_BOOTSTRAP_LISTENER,\n  InjectionToken,\n  PLATFORM_ID,\n  DOCUMENT\n} from '@angular/core';\n\n/**\n * Find all of the server-generated stylings, if any, and remove them\n * This will be in the form of inline classes and the style block in the\n * head of the DOM\n */\nexport function removeStyles(_document: Document, platformId: Object) {\n  return () => {\n    if (isPlatformBrowser(platformId)) {\n      const elements = Array.from(\n        _document.querySelectorAll(`[class*=${CLASS_NAME}]`),\n      );\n\n      // RegExp constructor should only be used if passing a variable to the constructor.\n      // When using static regular expression it is more performant to use reg exp literal.\n      // This is also needed to provide Safari 9 compatibility, please see\n      // https://stackoverflow.com/questions/37919802 for more discussion.\n      const classRegex = /\\bflex-layout-.+?\\b/g;\n      elements.forEach((el) => {\n        el.classList.contains(`${CLASS_NAME}ssr`) && el.parentNode\n          ? el.parentNode.removeChild(el)\n          : el.className.replace(classRegex, '');\n      });\n    }\n  };\n}\n\n/**\n *  Provider to remove SSR styles on the browser\n */\nexport const BROWSER_PROVIDER = {\n  provide: <InjectionToken<(() => void)[]>>APP_BOOTSTRAP_LISTENER,\n  useFactory: removeStyles,\n  deps: [DOCUMENT, PLATFORM_ID],\n  multi: true,\n};\n\nexport const CLASS_NAME = 'flex-layout-';\n","import { NgModule } from '@angular/core';\n\nimport { BROWSER_PROVIDER } from './browser-provider';\n\n/**\n * *****************************************************************\n * Define module for common Angular Layout utilities\n * *****************************************************************\n */\n@NgModule({\n  providers: [BROWSER_PROVIDER],\n})\nexport class CoreModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * Utility to emulate a CSS stylesheet\n *\n * This utility class stores all of the styles for a given HTML element\n * as a readonly `stylesheet` map.\n */\n@Injectable({ providedIn: 'root' })\nexport class StylesheetMap {\n  readonly stylesheet = new Map<HTMLElement, Map<string, string | number>>();\n\n  /**\n   * Add an individual style to an HTML element\n   */\n  addStyleToElement(\n    element: HTMLElement,\n    style: string,\n    value: string | number,\n  ) {\n    const stylesheet = this.stylesheet.get(element);\n    if (stylesheet) {\n      stylesheet.set(style, value);\n    } else {\n      this.stylesheet.set(element, new Map([[style, value]]));\n    }\n  }\n\n  /**\n   * Clear the virtual stylesheet\n   */\n  clearStyles() {\n    this.stylesheet.clear();\n  }\n\n  /**\n   * Retrieve a given style for an HTML element\n   */\n  getStyleForElement(el: HTMLElement, styleName: string): string {\n    const styles = this.stylesheet.get(el);\n    let value = '';\n    if (styles) {\n      const style = styles.get(styleName);\n      if (typeof style === 'number' || typeof style === 'string') {\n        value = style + '';\n      }\n    }\n    return value;\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { BreakPoint } from '../breakpoints/break-point';\n\nexport const BREAKPOINT = new InjectionToken<BreakPoint | BreakPoint[] | null>(\n  'Flex Layout token, collect all breakpoints into one provider',\n  {\n    providedIn: 'root',\n    factory: () => null,\n  },\n);\n","import { InjectionToken } from '@angular/core';\nimport { Multiplier } from '../multiply/multiplier';\n\n/** a set of configuration options for FlexLayoutModule */\nexport interface LayoutConfigOptions {\n  addFlexToParent?: boolean;\n  addOrientationBps?: boolean;\n  disableDefaultBps?: boolean;\n  disableVendorPrefixes?: boolean;\n  serverLoaded?: boolean;\n  useColumnBasisZero?: boolean;\n  printWithBreakpoints?: string[];\n  mediaTriggerAutoRestore?: boolean;\n  ssrObserveBreakpoints?: string[];\n  multiplier?: Multiplier;\n  defaultUnit?: string;\n  detectLayoutDisplay?: boolean;\n}\n\nexport const DEFAULT_CONFIG: Required<LayoutConfigOptions> = {\n  addFlexToParent: true,\n  addOrientationBps: false,\n  disableDefaultBps: false,\n  disableVendorPrefixes: false,\n  serverLoaded: false,\n  useColumnBasisZero: true,\n  printWithBreakpoints: [],\n  mediaTriggerAutoRestore: true,\n  ssrObserveBreakpoints: [],\n  // This is disabled by default because otherwise the multiplier would\n  // run for all users, regardless of whether they're using this feature.\n  // Instead, we disable it by default, which requires this ugly cast.\n  multiplier: undefined as unknown as Multiplier,\n  defaultUnit: 'px',\n  detectLayoutDisplay: false,\n};\n\nexport const LAYOUT_CONFIG = new InjectionToken<LayoutConfigOptions>(\n  'Flex Layout token, config options for the library',\n  {\n    providedIn: 'root',\n    factory: () => DEFAULT_CONFIG,\n  },\n);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Token that is provided to tell whether the FlexLayoutServerModule\n * has been included in the bundle\n *\n * NOTE: This can be manually provided to disable styles when using SSR\n */\nexport const SERVER_TOKEN = new InjectionToken<boolean>(\n  'FlexLayoutServerLoaded',\n  {\n    providedIn: 'root',\n    factory: () => false,\n  },\n);\n","interface WithPriority {\n  priority?: number;\n}\n\n/** HOF to sort the breakpoints by descending priority */\nexport function sortDescendingPriority<T extends WithPriority>(\n  a: T | null,\n  b: T | null,\n): number {\n  const priorityA = a ? a.priority || 0 : 0;\n  const priorityB = b ? b.priority || 0 : 0;\n  return priorityB - priorityA;\n}\n\n/** HOF to sort the breakpoints by ascending priority */\nexport function sortAscendingPriority<T extends WithPriority>(\n  a: T,\n  b: T,\n): number {\n  const pA = a.priority || 0;\n  const pB = b.priority || 0;\n  return pA - pB;\n}\n","import { extendObject } from '@ngbracket/ngx-layout/_private-utils';\nimport { BreakPoint } from './break-point';\n\nconst ALIAS_DELIMITERS = /(\\.|-|_)/g;\nfunction firstUpperCase(part: string) {\n  let first = part.length > 0 ? part.charAt(0) : '';\n  let remainder = part.length > 1 ? part.slice(1) : '';\n  return first.toUpperCase() + remainder;\n}\n\n/**\n * Converts snake-case to SnakeCase.\n * @param name Text to UpperCamelCase\n */\nfunction camelCase(name: string): string {\n  return name\n    .replace(ALIAS_DELIMITERS, '|')\n    .split('|')\n    .map(firstUpperCase)\n    .join('');\n}\n\n/**\n * For each breakpoint, ensure that a Suffix is defined;\n * fallback to UpperCamelCase the unique Alias value\n */\nexport function validateSuffixes(list: BreakPoint[]): BreakPoint[] {\n  list.forEach((bp: BreakPoint) => {\n    if (!bp.suffix) {\n      bp.suffix = camelCase(bp.alias); // create Suffix value based on alias\n      bp.overlapping = !!bp.overlapping; // ensure default value\n    }\n  });\n  return list;\n}\n\n/**\n * Merge a custom breakpoint list with the default list based on unique alias values\n *  - Items are added if the alias is not in the default list\n *  - Items are merged with the custom override if the alias exists in the default list\n */\nexport function mergeByAlias(\n  defaults: BreakPoint[],\n  custom: BreakPoint[] = [],\n): BreakPoint[] {\n  const dict: { [key: string]: BreakPoint } = {};\n  defaults.forEach((bp) => {\n    dict[bp.alias] = bp;\n  });\n  // Merge custom breakpoints\n  custom.forEach((bp: BreakPoint) => {\n    if (dict[bp.alias]) {\n      extendObject(dict[bp.alias], bp);\n    } else {\n      dict[bp.alias] = bp;\n    }\n  });\n\n  return validateSuffixes(Object.keys(dict).map((k) => dict[k]));\n}\n","import { BreakPoint } from '../break-point';\n\n/**\n * NOTE: Smaller ranges have HIGHER priority since the match is more specific\n */\nexport const DEFAULT_BREAKPOINTS: BreakPoint[] = [\n  {\n    alias: 'xs',\n    mediaQuery: 'screen and (min-width: 0px) and (max-width: 599.98px)',\n    priority: 1000,\n  },\n  {\n    alias: 'sm',\n    mediaQuery: 'screen and (min-width: 600px) and (max-width: 959.98px)',\n    priority: 900,\n  },\n  {\n    alias: 'md',\n    mediaQuery: 'screen and (min-width: 960px) and (max-width: 1279.98px)',\n    priority: 800,\n  },\n  {\n    alias: 'lg',\n    mediaQuery: 'screen and (min-width: 1280px) and (max-width: 1919.98px)',\n    priority: 700,\n  },\n  {\n    alias: 'xl',\n    mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.98px)',\n    priority: 600,\n  },\n  {\n    alias: 'lt-sm',\n    overlapping: true,\n    mediaQuery: 'screen and (max-width: 599.98px)',\n    priority: 950,\n  },\n  {\n    alias: 'lt-md',\n    overlapping: true,\n    mediaQuery: 'screen and (max-width: 959.98px)',\n    priority: 850,\n  },\n  {\n    alias: 'lt-lg',\n    overlapping: true,\n    mediaQuery: 'screen and (max-width: 1279.98px)',\n    priority: 750,\n  },\n  {\n    alias: 'lt-xl',\n    overlapping: true,\n    priority: 650,\n    mediaQuery: 'screen and (max-width: 1919.98px)',\n  },\n  {\n    alias: 'gt-xs',\n    overlapping: true,\n    mediaQuery: 'screen and (min-width: 600px)',\n    priority: -950,\n  },\n  {\n    alias: 'gt-sm',\n    overlapping: true,\n    mediaQuery: 'screen and (min-width: 960px)',\n    priority: -850,\n  },\n  {\n    alias: 'gt-md',\n    overlapping: true,\n    mediaQuery: 'screen and (min-width: 1280px)',\n    priority: -750,\n  },\n  {\n    alias: 'gt-lg',\n    overlapping: true,\n    mediaQuery: 'screen and (min-width: 1920px)',\n    priority: -650,\n  },\n];\n","import { BreakPoint } from '../break-point';\n\n/* tslint:disable */\nconst HANDSET_PORTRAIT = '(orientation: portrait) and (max-width: 599.98px)';\nconst HANDSET_LANDSCAPE = '(orientation: landscape) and (max-width: 959.98px)';\n\nconst TABLET_PORTRAIT =\n  '(orientation: portrait) and (min-width: 600px) and (max-width: 839.98px)';\nconst TABLET_LANDSCAPE =\n  '(orientation: landscape) and (min-width: 960px) and (max-width: 1279.98px)';\n\nconst WEB_PORTRAIT = '(orientation: portrait) and (min-width: 840px)';\nconst WEB_LANDSCAPE = '(orientation: landscape) and (min-width: 1280px)';\n\nexport const ScreenTypes = {\n  HANDSET: `${HANDSET_PORTRAIT}, ${HANDSET_LANDSCAPE}`,\n  TABLET: `${TABLET_PORTRAIT} , ${TABLET_LANDSCAPE}`,\n  WEB: `${WEB_PORTRAIT}, ${WEB_LANDSCAPE} `,\n\n  HANDSET_PORTRAIT: `${HANDSET_PORTRAIT}`,\n  TABLET_PORTRAIT: `${TABLET_PORTRAIT} `,\n  WEB_PORTRAIT: `${WEB_PORTRAIT}`,\n\n  HANDSET_LANDSCAPE: `${HANDSET_LANDSCAPE}`,\n  TABLET_LANDSCAPE: `${TABLET_LANDSCAPE}`,\n  WEB_LANDSCAPE: `${WEB_LANDSCAPE}`,\n};\n\n/**\n * Extended Breakpoints for handset/tablets with landscape or portrait orientations\n */\nexport const ORIENTATION_BREAKPOINTS: BreakPoint[] = [\n  { alias: 'handset', priority: 2000, mediaQuery: ScreenTypes.HANDSET },\n  {\n    alias: 'handset.landscape',\n    priority: 2000,\n    mediaQuery: ScreenTypes.HANDSET_LANDSCAPE,\n  },\n  {\n    alias: 'handset.portrait',\n    priority: 2000,\n    mediaQuery: ScreenTypes.HANDSET_PORTRAIT,\n  },\n\n  { alias: 'tablet', priority: 2100, mediaQuery: ScreenTypes.TABLET },\n  {\n    alias: 'tablet.landscape',\n    priority: 2100,\n    mediaQuery: ScreenTypes.TABLET_LANDSCAPE,\n  },\n  {\n    alias: 'tablet.portrait',\n    priority: 2100,\n    mediaQuery: ScreenTypes.TABLET_PORTRAIT,\n  },\n\n  {\n    alias: 'web',\n    priority: 2200,\n    mediaQuery: ScreenTypes.WEB,\n    overlapping: true,\n  },\n  {\n    alias: 'web.landscape',\n    priority: 2200,\n    mediaQuery: ScreenTypes.WEB_LANDSCAPE,\n    overlapping: true,\n  },\n  {\n    alias: 'web.portrait',\n    priority: 2200,\n    mediaQuery: ScreenTypes.WEB_PORTRAIT,\n    overlapping: true,\n  },\n];\n","import { inject, InjectionToken } from '@angular/core';\nimport { mergeByAlias } from '../breakpoints/breakpoint-tools';\nimport { DEFAULT_BREAKPOINTS } from '../breakpoints/data/break-points';\nimport { ORIENTATION_BREAKPOINTS } from '../breakpoints/data/orientation-break-points';\nimport { BREAKPOINT } from '../tokens/breakpoint-token';\nimport { LAYOUT_CONFIG } from '../tokens/library-config';\nimport { BreakPoint } from './break-point';\n\n/**\n *  Injection token unique to the flex-layout library.\n *  Use this token when build a custom provider (see below).\n */\nexport const BREAKPOINTS = new InjectionToken<BreakPoint[]>(\n  'Token (@ngbracket/ngx-layout) Breakpoints',\n  {\n    providedIn: 'root',\n    factory: () => {\n      const breakpoints: any = inject(BREAKPOINT);\n      const layoutConfig = inject(LAYOUT_CONFIG);\n      const bpFlattenArray: BreakPoint[] = [].concat.apply(\n        [],\n        (breakpoints || []).map((v: BreakPoint | BreakPoint[]) =>\n          Array.isArray(v) ? v : [v],\n        ),\n      );\n      const builtIns = (\n        layoutConfig.disableDefaultBps ? [] : DEFAULT_BREAKPOINTS\n      ).concat(layoutConfig.addOrientationBps ? ORIENTATION_BREAKPOINTS : []);\n\n      return mergeByAlias(builtIns, bpFlattenArray);\n    },\n  },\n);\n","import { Inject, Injectable } from '@angular/core';\n\nimport { sortAscendingPriority } from '../utils/sort';\nimport { BreakPoint } from './break-point';\nimport { BREAKPOINTS } from './break-points-token';\n\nexport type OptionalBreakPoint = BreakPoint | null;\n\n/**\n * Registry of 1..n MediaQuery breakpoint ranges\n * This is published as a provider and may be overridden from custom, application-specific ranges\n *\n */\n@Injectable({ providedIn: 'root' })\nexport class BreakPointRegistry {\n  readonly items: BreakPoint[];\n\n  constructor(@Inject(BREAKPOINTS) list: BreakPoint[]) {\n    this.items = [...list].sort(sortAscendingPriority);\n  }\n\n  /**\n   * Search breakpoints by alias (e.g. gt-xs)\n   */\n  findByAlias(alias: string): OptionalBreakPoint {\n    return !alias\n      ? null\n      : this.findWithPredicate(alias, (bp) => bp.alias === alias);\n  }\n\n  findByQuery(query: string): OptionalBreakPoint {\n    return this.findWithPredicate(query, (bp) => bp.mediaQuery === query);\n  }\n\n  /**\n   * Get all the breakpoints whose ranges could overlapping `normal` ranges;\n   * e.g. gt-sm overlaps md, lg, and xl\n   */\n  get overlappings(): BreakPoint[] {\n    return this.items.filter((it) => it.overlapping);\n  }\n\n  /**\n   * Get list of all registered (non-empty) breakpoint aliases\n   */\n  get aliases(): string[] {\n    return this.items.map((it) => it.alias);\n  }\n\n  /**\n   * Aliases are mapped to properties using suffixes\n   * e.g.  'gt-sm' for property 'layout'  uses suffix 'GtSm'\n   * for property layoutGtSM.\n   */\n  get suffixes(): string[] {\n    return this.items.map((it) => it?.suffix ?? '');\n  }\n\n  /**\n   * Memoized lookup using custom predicate function\n   */\n  private findWithPredicate(\n    key: string,\n    searchFn: (bp: BreakPoint) => boolean,\n  ): OptionalBreakPoint {\n    let response = this.findByMap.get(key);\n    if (!response) {\n      response = this.items.find(searchFn) ?? null;\n      this.findByMap.set(key, response);\n    }\n    return response ?? null;\n  }\n\n  /**\n   * Memoized BreakPoint Lookups\n   */\n  private readonly findByMap = new Map<String, OptionalBreakPoint>();\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  CSP_NONCE,\n  DOCUMENT,\n  Inject,\n  Injectable,\n  NgZone,\n  OnDestroy,\n  Optional,\n  PLATFORM_ID,\n} from '@angular/core';\nimport { BehaviorSubject, merge, Observable, Observer } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { MediaChange } from '../media-change';\n\n/**\n * MediaMonitor configures listeners to mediaQuery changes and publishes an Observable facade to\n * convert mediaQuery change callbacks to subscriber notifications. These notifications will be\n * performed within the ng Zone to trigger change detections and component updates.\n *\n * NOTE: both mediaQuery activations and de-activations are announced in notifications\n */\n@Injectable({ providedIn: 'root' })\nexport class MatchMedia implements OnDestroy {\n  /** Initialize source with 'all' so all non-responsive APIs trigger style updates */\n  readonly source = new BehaviorSubject<MediaChange>(new MediaChange(true));\n  registry = new Map<string, MediaQueryList>();\n  private readonly pendingRemoveListenerFns: Array<() => void> = [];\n\n  constructor(\n    protected _zone: NgZone,\n    @Inject(PLATFORM_ID) protected _platformId: object,\n    @Inject(DOCUMENT) protected _document: any,\n    @Optional() @Inject(CSP_NONCE) protected _nonce?: string | null,\n  ) {}\n\n  /**\n   * Publish list of all current activations\n   */\n  get activations(): string[] {\n    const results: string[] = [];\n    this.registry.forEach((mql: MediaQueryList, key: string) => {\n      if (mql.matches) {\n        results.push(key);\n      }\n    });\n    return results;\n  }\n\n  /**\n   * For the specified mediaQuery?\n   */\n  isActive(mediaQuery: string): boolean {\n    const mql = this.registry.get(mediaQuery);\n    return (\n      mql?.matches ?? this.registerQuery(mediaQuery).some((m) => m.matches)\n    );\n  }\n\n  /**\n   * External observers can watch for all (or a specific) mql changes.\n   *\n   * If a mediaQuery is not specified, then ALL mediaQuery activations will\n   * be announced.\n   */\n  observe(): Observable<MediaChange>;\n  observe(mediaQueries: string[]): Observable<MediaChange>;\n  observe(\n    mediaQueries: string[],\n    filterOthers: boolean,\n  ): Observable<MediaChange>;\n\n  /**\n   * External observers can watch for all (or a specific) mql changes.\n   * Typically used by the MediaQueryAdaptor; optionally available to components\n   * who wish to use the MediaMonitor as mediaMonitor$ observable service.\n   *\n   * Use deferred registration process to register breakpoints only on subscription\n   * This logic also enforces logic to register all mediaQueries BEFORE notify\n   * subscribers of notifications.\n   */\n  observe(mqList?: string[], filterOthers = false): Observable<MediaChange> {\n    if (mqList && mqList.length) {\n      const matchMedia$: Observable<MediaChange> = this._observable$.pipe(\n        filter((change: MediaChange) =>\n          !filterOthers ? true : mqList.indexOf(change.mediaQuery) > -1,\n        ),\n      );\n      const registration$: Observable<MediaChange> = new Observable(\n        (observer: Observer<MediaChange>) => {\n          // tslint:disable-line:max-line-length\n          const matches: Array<MediaChange> = this.registerQuery(mqList);\n          if (matches.length) {\n            const lastChange = matches.pop()!;\n            matches.forEach((e: MediaChange) => {\n              observer.next(e);\n            });\n            this.source.next(lastChange); // last match is cached\n          }\n          observer.complete();\n        },\n      );\n      return merge(registration$, matchMedia$);\n    }\n\n    return this._observable$;\n  }\n\n  /**\n   * Based on the BreakPointRegistry provider, register internal listeners for each unique\n   * mediaQuery. Each listener emits specific MediaChange data to observers\n   */\n  registerQuery(mediaQuery: string | string[]) {\n    const list = Array.isArray(mediaQuery) ? mediaQuery : [mediaQuery];\n    const matches: MediaChange[] = [];\n\n    buildQueryCss(list, this._document, this._nonce);\n\n    list.forEach((query: string) => {\n      const onMQLEvent = (e: MediaQueryListEvent) => {\n        this._zone.run(() =>\n          this.source.next(new MediaChange(e.matches, query)),\n        );\n      };\n\n      let mql = this.registry.get(query);\n      if (!mql) {\n        mql = this.buildMQL(query);\n        mql.addListener(onMQLEvent);\n        this.pendingRemoveListenerFns.push(() =>\n          mql!.removeListener(onMQLEvent),\n        );\n        this.registry.set(query, mql);\n      }\n\n      if (mql.matches) {\n        matches.push(new MediaChange(true, query));\n      }\n    });\n\n    return matches;\n  }\n\n  ngOnDestroy(): void {\n    let fn;\n    while ((fn = this.pendingRemoveListenerFns.pop())) {\n      fn();\n    }\n  }\n\n  /**\n   * Call window.matchMedia() to build a MediaQueryList; which\n   * supports 0..n listeners for activation/deactivation\n   */\n  protected buildMQL(query: string): MediaQueryList {\n    return constructMql(query, isPlatformBrowser(this._platformId));\n  }\n\n  protected _observable$ = this.source.asObservable();\n}\n\n/**\n * Private global registry for all dynamically-created, injected style tags\n * @see prepare(query)\n */\nconst ALL_STYLES: { [key: string]: any } = {};\n\n/**\n * For Webkit engines that only trigger the MediaQueryList Listener\n * when there is at least one CSS selector for the respective media query.\n *\n * @param mediaQueries\n * @param _document\n */\nfunction buildQueryCss(\n  mediaQueries: string[],\n  _document: Document,\n  _nonce?: string | null,\n) {\n  const list = mediaQueries.filter((it) => !ALL_STYLES[it]);\n  if (list.length > 0) {\n    const query = list.join(', ');\n\n    try {\n      const styleEl = _document.createElement('style');\n\n      styleEl.setAttribute('type', 'text/css');\n      if (_nonce) {\n        styleEl.setAttribute('nonce', _nonce);\n      }\n      if (!(styleEl as any).styleSheet) {\n        const cssText = `\n/*\n  @ngbracket/ngx-layout - workaround for possible browser quirk with mediaQuery listeners\n  see http://bit.ly/2sd4HMP\n*/\n@media ${query} {.fx-query-test{ }}\n`;\n        styleEl.appendChild(_document.createTextNode(cssText));\n      }\n\n      _document.head!.appendChild(styleEl);\n\n      // Store in private global registry\n      list.forEach((mq) => (ALL_STYLES[mq] = styleEl));\n    } catch (e) {\n      console.error(e);\n    }\n  }\n}\n\nfunction buildMockMql(query: string) {\n  const et: any = new EventTarget();\n  et.matches = query === 'all' || query === '';\n  et.media = query;\n  et.addListener = () => {};\n  et.removeListener = () => {};\n  et.addEventListener = () => {};\n  et.dispatchEvent = () => false;\n  et.onchange = null;\n\n  return et as MediaQueryList;\n}\n\nfunction constructMql(query: string, isBrowser: boolean): MediaQueryList {\n  const canListen =\n    isBrowser && !!(<Window>window).matchMedia('all').addListener;\n\n  return canListen ? (<Window>window).matchMedia(query) : buildMockMql(query);\n}\n","import { Inject, Injectable, OnDestroy, DOCUMENT } from '@angular/core';\n\n\nimport { mergeAlias } from '../add-alias';\nimport { BreakPoint } from '../breakpoints/break-point';\nimport {\n  BreakPointRegistry,\n  OptionalBreakPoint,\n} from '../breakpoints/break-point-registry';\nimport { MediaChange } from '../media-change';\nimport { LAYOUT_CONFIG, LayoutConfigOptions } from '../tokens/library-config';\nimport { sortDescendingPriority } from '../utils/sort';\n\n/**\n * Interface to apply PrintHook to call anonymous `target.updateStyles()`\n */\nexport interface HookTarget {\n  activatedBreakpoints: BreakPoint[];\n  updateStyles(): void;\n}\n\nconst PRINT = 'print';\nexport const BREAKPOINT_PRINT = {\n  alias: PRINT,\n  mediaQuery: PRINT,\n  priority: 1000,\n};\n\n/**\n * PrintHook - Use to intercept print MediaQuery activations and force\n *             layouts to render with the specified print alias/breakpoint\n *\n * Used in MediaMarshaller and MediaObserver\n */\n@Injectable({ providedIn: 'root' })\nexport class PrintHook implements OnDestroy {\n  constructor(\n    protected breakpoints: BreakPointRegistry,\n    @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n    @Inject(DOCUMENT) protected _document: any,\n  ) {}\n\n  /** Add 'print' mediaQuery: to listen for matchMedia activations */\n  withPrintQuery(queries: string[]): string[] {\n    return [...queries, PRINT];\n  }\n\n  /** Is the MediaChange event for any 'print' @media */\n  isPrintEvent(e: MediaChange): boolean {\n    return e.mediaQuery.startsWith(PRINT);\n  }\n\n  /** What is the desired mqAlias to use while printing? */\n  get printAlias(): string[] {\n    return [...(this.layoutConfig.printWithBreakpoints ?? [])];\n  }\n\n  /** Lookup breakpoints associated with print aliases. */\n  get printBreakPoints(): BreakPoint[] {\n    return this.printAlias\n      .map((alias) => this.breakpoints.findByAlias(alias))\n      .filter((bp) => bp !== null) as BreakPoint[];\n  }\n\n  /** Lookup breakpoint associated with mediaQuery */\n  getEventBreakpoints({ mediaQuery }: MediaChange): BreakPoint[] {\n    const bp = this.breakpoints.findByQuery(mediaQuery);\n    const list = bp ? [...this.printBreakPoints, bp] : this.printBreakPoints;\n\n    return list.sort(sortDescendingPriority);\n  }\n\n  /** Update event with printAlias mediaQuery information */\n  updateEvent(event: MediaChange): MediaChange {\n    let bp: OptionalBreakPoint = this.breakpoints.findByQuery(event.mediaQuery);\n\n    if (this.isPrintEvent(event)) {\n      // Reset from 'print' to first (highest priority) print breakpoint\n      bp = this.getEventBreakpoints(event)[0];\n      event.mediaQuery = bp?.mediaQuery ?? '';\n    }\n\n    return mergeAlias(event, bp);\n  }\n\n  // registeredBeforeAfterPrintHooks tracks if we registered the `beforeprint`\n  //  and `afterprint` event listeners.\n  private registeredBeforeAfterPrintHooks = false;\n\n  // isPrintingBeforeAfterEvent is used to track if we are printing from within\n  // a `beforeprint` event handler. This prevents the typical `stopPrinting`\n  // form `interceptEvents` so that printing is not stopped while the dialog\n  // is still open. This is an extension of the `isPrinting` property on\n  // browsers which support `beforeprint` and `afterprint` events.\n  private isPrintingBeforeAfterEvent = false;\n\n  private beforePrintEventListeners: Function[] = [];\n  private afterPrintEventListeners: Function[] = [];\n\n  private formerActivations: Array<BreakPoint> | null = null;\n\n  // registerBeforeAfterPrintHooks registers a `beforeprint` event hook so we can\n  // trigger print styles synchronously and apply proper layout styles.\n  // It is a noop if the hooks have already been registered or if the document's\n  // `defaultView` is not available.\n  registerBeforeAfterPrintHooks(target: HookTarget) {\n    // `defaultView` may be null when rendering on the server or in other contexts.\n    if (!this._document.defaultView || this.registeredBeforeAfterPrintHooks) {\n      return;\n    }\n\n    this.registeredBeforeAfterPrintHooks = true;\n\n    const beforePrintListener = () => {\n      // If we aren't already printing, start printing and update the styles as\n      // if there was a regular print `MediaChange`(from matchMedia).\n      if (!this.isPrinting) {\n        this.isPrintingBeforeAfterEvent = true;\n        this.startPrinting(\n          target,\n          this.getEventBreakpoints(new MediaChange(true, PRINT)),\n        );\n        target.updateStyles();\n      }\n    };\n\n    const afterPrintListener = () => {\n      // If we aren't already printing, start printing and update the styles as\n      // if there was a regular print `MediaChange`(from matchMedia).\n      this.isPrintingBeforeAfterEvent = false;\n      if (this.isPrinting) {\n        this.stopPrinting(target);\n        target.updateStyles();\n      }\n    };\n\n    // Could we have teardown logic to remove if there are no print listeners being used?\n    this._document.defaultView.addEventListener(\n      'beforeprint',\n      beforePrintListener,\n    );\n    this._document.defaultView.addEventListener(\n      'afterprint',\n      afterPrintListener,\n    );\n\n    this.beforePrintEventListeners.push(beforePrintListener);\n    this.afterPrintEventListeners.push(afterPrintListener);\n  }\n\n  /**\n   * Prepare RxJS tap operator with partial application\n   * @return pipeable tap predicate\n   */\n  interceptEvents(target: HookTarget) {\n    return (event: MediaChange) => {\n      if (this.isPrintEvent(event)) {\n        if (event.matches && !this.isPrinting) {\n          this.startPrinting(target, this.getEventBreakpoints(event));\n          target.updateStyles();\n        } else if (\n          !event.matches &&\n          this.isPrinting &&\n          !this.isPrintingBeforeAfterEvent\n        ) {\n          this.stopPrinting(target);\n          target.updateStyles();\n        }\n\n        return;\n      }\n\n      this.collectActivations(target, event);\n    };\n  }\n\n  /** Stop mediaChange event propagation in event streams */\n  blockPropagation() {\n    return (event: MediaChange): boolean => {\n      return !(this.isPrinting || this.isPrintEvent(event));\n    };\n  }\n\n  /**\n   * Save current activateBreakpoints (for later restore)\n   * and substitute only the printAlias breakpoint\n   */\n  protected startPrinting(target: HookTarget, bpList: OptionalBreakPoint[]) {\n    this.isPrinting = true;\n    this.formerActivations = target.activatedBreakpoints;\n    target.activatedBreakpoints = this.queue.addPrintBreakpoints(bpList);\n  }\n\n  /** For any print de-activations, reset the entire print queue */\n  protected stopPrinting(target: HookTarget) {\n    target.activatedBreakpoints = this.deactivations;\n    this.deactivations = [];\n    this.formerActivations = null;\n    this.queue.clear();\n    this.isPrinting = false;\n  }\n\n  /**\n   * To restore pre-Print Activations, we must capture the proper\n   * list of breakpoint activations BEFORE print starts. OnBeforePrint()\n   * is supported; so 'print' mediaQuery activations are used as a fallback\n   * in browsers without `beforeprint` support.\n   *\n   * >  But activated breakpoints are deactivated BEFORE 'print' activation.\n   *\n   * Let's capture all de-activations using the following logic:\n   *\n   *  When not printing:\n   *    - clear cache when activating non-print breakpoint\n   *    - update cache (and sort) when deactivating\n   *\n   *  When printing:\n   *    - sort and save when starting print\n   *    - restore as activatedTargets and clear when stop printing\n   */\n  collectActivations(target: HookTarget, event: MediaChange) {\n    if (!this.isPrinting || this.isPrintingBeforeAfterEvent) {\n      if (!this.isPrintingBeforeAfterEvent) {\n        // Only clear deactivations if we aren't printing from a `beforeprint` event.\n        // Otherwise, this will clear before `stopPrinting()` is called to restore\n        // the pre-Print Activations.\n        this.deactivations = [];\n\n        return;\n      }\n\n      if (!event.matches) {\n        const bp = this.breakpoints.findByQuery(event.mediaQuery);\n        // Deactivating a breakpoint\n        if (bp) {\n          const hasFormerBp =\n            this.formerActivations && this.formerActivations.includes(bp);\n          const wasActivated =\n            !this.formerActivations && target.activatedBreakpoints.includes(bp);\n          const shouldDeactivate = hasFormerBp || wasActivated;\n          if (shouldDeactivate) {\n            this.deactivations.push(bp);\n            this.deactivations.sort(sortDescendingPriority);\n          }\n        }\n      }\n    }\n  }\n\n  /** Teardown logic for the service. */\n  ngOnDestroy() {\n    if (this._document.defaultView) {\n      this.beforePrintEventListeners.forEach((l) =>\n        this._document.defaultView.removeEventListener('beforeprint', l),\n      );\n      this.afterPrintEventListeners.forEach((l) =>\n        this._document.defaultView.removeEventListener('afterprint', l),\n      );\n    }\n  }\n\n  // Is this service currently in print mode\n  private isPrinting = false;\n  private queue = new PrintQueue();\n  private deactivations: BreakPoint[] = [];\n}\n\n// ************************************************************************\n// Internal Utility class 'PrintQueue'\n// ************************************************************************\n\n/**\n * Utility class to manage print breakpoints + activatedBreakpoints\n * with correct sorting WHILE printing\n */\nclass PrintQueue {\n  /** Sorted queue with prioritized print breakpoints */\n  printBreakpoints: BreakPoint[] = [];\n\n  addPrintBreakpoints(bpList: OptionalBreakPoint[]): BreakPoint[] {\n    bpList.push(BREAKPOINT_PRINT);\n    bpList.sort(sortDescendingPriority);\n    bpList.forEach((bp) => this.addBreakpoint(bp));\n\n    return this.printBreakpoints;\n  }\n\n  /** Add Print breakpoint to queue */\n  addBreakpoint(bp: OptionalBreakPoint) {\n    if (!!bp) {\n      const bpInList = this.printBreakpoints.find(\n        (it) => it.mediaQuery === bp.mediaQuery,\n      );\n\n      if (bpInList === undefined) {\n        // If this is a `printAlias` breakpoint, then append. If a true 'print' breakpoint,\n        // register as highest priority in the queue\n        this.printBreakpoints = isPrintBreakPoint(bp)\n          ? [bp, ...this.printBreakpoints]\n          : [...this.printBreakpoints, bp];\n      }\n    }\n  }\n\n  /** Restore original activated breakpoints and clear internal caches */\n  clear() {\n    this.printBreakpoints = [];\n  }\n}\n\n// ************************************************************************\n// Internal Utility methods\n// ************************************************************************\n\n/** Only support intercept queueing if the Breakpoint is a print @media query */\nfunction isPrintBreakPoint(bp: OptionalBreakPoint): boolean {\n  return bp?.mediaQuery.startsWith(PRINT) ?? false;\n}\n","import { Injectable } from '@angular/core';\n\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { BreakPoint } from '../breakpoints/break-point';\nimport { BreakPointRegistry } from '../breakpoints/break-point-registry';\nimport { MatchMedia } from '../match-media/match-media';\nimport { MediaChange } from '../media-change';\nimport { sortDescendingPriority } from '../utils/sort';\n\nimport { mergeAlias } from '../add-alias';\nimport { PrintHook } from './print-hook';\n\ntype ClearCallback = () => void;\ntype UpdateCallback = (val: any) => void;\ntype Builder = UpdateCallback | ClearCallback;\n\ntype ValueMap = Map<string, string>;\ntype BreakpointMap = Map<string, ValueMap>;\ntype ElementMap = Map<HTMLElement, BreakpointMap>;\ntype ElementKeyMap = WeakMap<HTMLElement, Set<string>>;\ntype SubscriptionMap = Map<string, Subscription>;\ntype WatcherMap = WeakMap<HTMLElement, SubscriptionMap>;\ntype BuilderMap = WeakMap<HTMLElement, Map<string, Builder>>;\n\nexport interface ElementMatcher {\n  element: HTMLElement;\n  key: string;\n  value: any;\n}\n\n/**\n * MediaMarshaller - register responsive values from directives and\n *                   trigger them based on media query events\n */\n@Injectable({ providedIn: 'root' })\nexport class MediaMarshaller {\n  private _useFallbacks = true;\n  private _activatedBreakpoints: BreakPoint[] = [];\n  private elementMap: ElementMap = new Map();\n  private elementKeyMap: ElementKeyMap = new WeakMap();\n  private watcherMap: WatcherMap = new WeakMap(); // special triggers to update elements\n  private updateMap: BuilderMap = new WeakMap(); // callback functions to update styles\n  private clearMap: BuilderMap = new WeakMap(); // callback functions to clear styles\n\n  private subject: Subject<ElementMatcher> = new Subject();\n\n  get activatedAlias(): string {\n    return this.activatedBreakpoints[0]?.alias ?? '';\n  }\n\n  set activatedBreakpoints(bps: BreakPoint[]) {\n    this._activatedBreakpoints = [...bps];\n  }\n\n  get activatedBreakpoints(): BreakPoint[] {\n    return [...this._activatedBreakpoints];\n  }\n\n  set useFallbacks(value: boolean) {\n    this._useFallbacks = value;\n  }\n\n  constructor(\n    protected matchMedia: MatchMedia,\n    protected breakpoints: BreakPointRegistry,\n    protected hook: PrintHook,\n  ) {\n    this.observeActivations();\n  }\n\n  /**\n   * Update styles on breakpoint activates or deactivates\n   * @param mc\n   */\n  onMediaChange(mc: MediaChange) {\n    const bp: BreakPoint | null = this.findByQuery(mc.mediaQuery);\n\n    if (bp) {\n      mc = mergeAlias(mc, bp);\n\n      const bpIndex = this.activatedBreakpoints.indexOf(bp);\n\n      if (mc.matches && bpIndex === -1) {\n        this._activatedBreakpoints.push(bp);\n        this._activatedBreakpoints.sort(sortDescendingPriority);\n\n        this.updateStyles();\n      } else if (!mc.matches && bpIndex !== -1) {\n        // Remove the breakpoint when it's deactivated\n        this._activatedBreakpoints.splice(bpIndex, 1);\n        this._activatedBreakpoints.sort(sortDescendingPriority);\n\n        this.updateStyles();\n      }\n    }\n  }\n\n  /**\n   * initialize the marshaller with necessary elements for delegation on an element\n   * @param element\n   * @param key\n   * @param updateFn optional callback so that custom bp directives don't have to re-provide this\n   * @param clearFn optional callback so that custom bp directives don't have to re-provide this\n   * @param extraTriggers other triggers to force style updates (e.g. layout, directionality, etc)\n   */\n  init(\n    element: HTMLElement,\n    key: string,\n    updateFn?: UpdateCallback,\n    clearFn?: ClearCallback,\n    extraTriggers: Observable<any>[] = [],\n  ): void {\n    initBuilderMap(this.updateMap, element, key, updateFn);\n    initBuilderMap(this.clearMap, element, key, clearFn);\n\n    this.buildElementKeyMap(element, key);\n    this.watchExtraTriggers(element, key, extraTriggers);\n  }\n\n  /**\n   * get the value for an element and key and optionally a given breakpoint\n   * @param element\n   * @param key\n   * @param bp\n   */\n  getValue(element: HTMLElement, key: string, bp?: string): any {\n    const bpMap = this.elementMap.get(element);\n    if (bpMap) {\n      const values =\n        bp !== undefined ? bpMap.get(bp) : this.getActivatedValues(bpMap, key);\n      if (values) {\n        return values.get(key);\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * whether the element has values for a given key\n   * @param element\n   * @param key\n   */\n  hasValue(element: HTMLElement, key: string): boolean {\n    const bpMap = this.elementMap.get(element);\n    if (bpMap) {\n      const values = this.getActivatedValues(bpMap, key);\n      if (values) {\n        return values.get(key) !== undefined || false;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Set the value for an input on a directive\n   * @param element the element in question\n   * @param key the type of the directive (e.g. flex, layout-gap, etc)\n   * @param bp the breakpoint suffix (empty string = default)\n   * @param val the value for the breakpoint\n   */\n  setValue(element: HTMLElement, key: string, val: any, bp: string): void {\n    let bpMap: BreakpointMap | undefined = this.elementMap.get(element);\n    if (!bpMap) {\n      bpMap = new Map().set(bp, new Map().set(key, val));\n      this.elementMap.set(element, bpMap);\n    } else {\n      const values = (bpMap.get(bp) ?? new Map()).set(key, val);\n      bpMap.set(bp, values);\n      this.elementMap.set(element, bpMap);\n    }\n    const value = this.getValue(element, key);\n    if (value !== undefined) {\n      this.updateElement(element, key, value);\n    }\n  }\n\n  /** Track element value changes for a specific key */\n  trackValue(element: HTMLElement, key: string): Observable<ElementMatcher> {\n    return this.subject\n      .asObservable()\n      .pipe(filter((v) => v.element === element && v.key === key));\n  }\n\n  /** update all styles for all elements on the current breakpoint */\n  updateStyles(): void {\n    this.elementMap.forEach((bpMap, el) => {\n      const keyMap = new Set(this.elementKeyMap.get(el)!);\n      let valueMap = this.getActivatedValues(bpMap);\n\n      if (valueMap) {\n        valueMap.forEach((v, k) => {\n          this.updateElement(el, k, v);\n          keyMap.delete(k);\n        });\n      }\n\n      keyMap.forEach((k) => {\n        valueMap = this.getActivatedValues(bpMap, k);\n        if (valueMap) {\n          const value = valueMap.get(k);\n          this.updateElement(el, k, value);\n        } else {\n          this.clearElement(el, k);\n        }\n      });\n    });\n  }\n\n  /**\n   * clear the styles for a given element\n   * @param element\n   * @param key\n   */\n  clearElement(element: HTMLElement, key: string): void {\n    const builders = this.clearMap.get(element);\n\n    if (builders) {\n      const clearFn: ClearCallback = builders.get(key) as ClearCallback;\n      if (!!clearFn) {\n        clearFn();\n        this.subject.next({ element, key, value: '' });\n      }\n    }\n  }\n\n  /**\n   * update a given element with the activated values for a given key\n   * @param element\n   * @param key\n   * @param value\n   */\n  updateElement(element: HTMLElement, key: string, value: any): void {\n    const builders = this.updateMap.get(element);\n    if (builders) {\n      const updateFn: UpdateCallback = builders.get(key) as UpdateCallback;\n      if (!!updateFn) {\n        updateFn(value);\n        this.subject.next({ element, key, value });\n      }\n    }\n  }\n\n  /**\n   * release all references to a given element\n   * @param element\n   */\n  releaseElement(element: HTMLElement): void {\n    const watcherMap = this.watcherMap.get(element);\n    if (watcherMap) {\n      watcherMap.forEach((s) => s.unsubscribe());\n      this.watcherMap.delete(element);\n    }\n    const elementMap = this.elementMap.get(element);\n    if (elementMap) {\n      elementMap.forEach((_, s) => elementMap.delete(s));\n      this.elementMap.delete(element);\n    }\n  }\n\n  /**\n   * trigger an update for a given element and key (e.g. layout)\n   * @param element\n   * @param key\n   */\n  triggerUpdate(element: HTMLElement, key?: string): void {\n    const bpMap = this.elementMap.get(element);\n    if (bpMap) {\n      const valueMap = this.getActivatedValues(bpMap, key);\n      if (valueMap) {\n        if (key) {\n          this.updateElement(element, key, valueMap.get(key));\n        } else {\n          valueMap.forEach((v, k) => this.updateElement(element, k, v));\n        }\n      }\n    }\n  }\n\n  /** Cross-reference for HTMLElement with directive key */\n  private buildElementKeyMap(element: HTMLElement, key: string) {\n    let keyMap = this.elementKeyMap.get(element);\n    if (!keyMap) {\n      keyMap = new Set();\n      this.elementKeyMap.set(element, keyMap);\n    }\n    keyMap.add(key);\n  }\n\n  /**\n   * Other triggers that should force style updates:\n   * - directionality\n   * - layout changes\n   * - mutationobserver updates\n   */\n  private watchExtraTriggers(\n    element: HTMLElement,\n    key: string,\n    triggers: Observable<any>[],\n  ) {\n    if (triggers && triggers.length) {\n      let watchers = this.watcherMap.get(element);\n      if (!watchers) {\n        watchers = new Map();\n        this.watcherMap.set(element, watchers);\n      }\n      const subscription = watchers.get(key);\n      if (!subscription) {\n        const newSubscription = merge(...triggers).subscribe(() => {\n          const currentValue = this.getValue(element, key);\n          this.updateElement(element, key, currentValue);\n        });\n        watchers.set(key, newSubscription);\n      }\n    }\n  }\n\n  /** Breakpoint locator by mediaQuery */\n  private findByQuery(query: string) {\n    return this.breakpoints.findByQuery(query);\n  }\n\n  /**\n   * get the fallback breakpoint for a given element, starting with the current breakpoint\n   * @param bpMap\n   * @param key\n   */\n  private getActivatedValues(\n    bpMap: BreakpointMap,\n    key?: string,\n  ): ValueMap | undefined {\n    for (let i = 0; i < this.activatedBreakpoints.length; i++) {\n      const activatedBp = this.activatedBreakpoints[i];\n      const valueMap = bpMap.get(activatedBp.alias);\n\n      if (valueMap) {\n        if (\n          key === undefined ||\n          (valueMap.has(key) && valueMap.get(key) != null)\n        ) {\n          return valueMap;\n        }\n      }\n    }\n\n    // On the server, we explicitly have an \"all\" section filled in to begin with.\n    // So we don't need to aggressively find a fallback if no explicit value exists.\n    if (!this._useFallbacks) {\n      return undefined;\n    }\n\n    const lastHope = bpMap.get('');\n    return key === undefined || (lastHope && lastHope.has(key))\n      ? lastHope\n      : undefined;\n  }\n\n  /**\n   * Watch for mediaQuery breakpoint activations\n   */\n  private observeActivations() {\n    const queries = this.breakpoints.items.map((bp) => bp.mediaQuery);\n\n    this.hook.registerBeforeAfterPrintHooks(this);\n    this.matchMedia\n      .observe(this.hook.withPrintQuery(queries))\n      .pipe(\n        tap(this.hook.interceptEvents(this)),\n        filter(this.hook.blockPropagation()),\n      )\n      .subscribe(this.onMediaChange.bind(this));\n  }\n}\n\nfunction initBuilderMap(\n  map: BuilderMap,\n  element: HTMLElement,\n  key: string,\n  input?: Builder,\n): void {\n  if (input !== undefined) {\n    const oldMap = map.get(element) ?? new Map();\n    oldMap.set(key, input);\n    map.set(element, oldMap);\n  }\n}\n","import { StyleDefinition } from '../style-utils/style-utils';\n\n/** A class that encapsulates CSS style generation for common directives */\nexport abstract class StyleBuilder {\n  /** Whether to cache the generated output styles */\n  shouldCache = true;\n\n  /** Build the styles given an input string and configuration object from a host */\n  abstract buildStyles(input: string, parent?: object): StyleDefinition;\n\n  /**\n   * Run a side effect computation given the input string and the computed styles\n   * from the build task and the host configuration object\n   * NOTE: This should be a no-op unless an algorithm is provided in a subclass\n   */\n  sideEffect(_input: string, _styles: StyleDefinition, _parent?: object) {}\n}\n","import { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { applyCssPrefixes } from '@ngbracket/ngx-layout/_private-utils';\nimport { StylesheetMap } from '../stylesheet-map/stylesheet-map';\nimport { LAYOUT_CONFIG, LayoutConfigOptions } from '../tokens/library-config';\nimport { SERVER_TOKEN } from '../tokens/server-token';\n\n@Injectable({ providedIn: 'root' })\nexport class StyleUtils {\n  constructor(\n    private _serverStylesheet: StylesheetMap,\n    @Inject(SERVER_TOKEN) private _serverModuleLoaded: boolean,\n    @Inject(PLATFORM_ID) private _platformId: Object,\n    @Inject(LAYOUT_CONFIG) private layoutConfig: LayoutConfigOptions,\n  ) {}\n\n  /**\n   * Applies styles given via string pair or object map to the directive element\n   */\n  applyStyleToElement(\n    element: HTMLElement,\n    style: StyleDefinition | string,\n    value: string | number | null = null,\n  ) {\n    let styles: StyleDefinition = {};\n    if (typeof style === 'string') {\n      styles[style] = value;\n      style = styles;\n    }\n    styles = this.layoutConfig.disableVendorPrefixes\n      ? style\n      : applyCssPrefixes(style);\n    this._applyMultiValueStyleToElement(styles, element);\n  }\n\n  /**\n   * Applies styles given via string pair or object map to the directive's element\n   */\n  applyStyleToElements(style: StyleDefinition, elements: HTMLElement[] = []) {\n    const styles = this.layoutConfig.disableVendorPrefixes\n      ? style\n      : applyCssPrefixes(style);\n    elements.forEach((el) => {\n      this._applyMultiValueStyleToElement(styles, el);\n    });\n  }\n\n  /**\n   * Determine the DOM element's Flexbox flow (flex-direction)\n   *\n   * Check inline style first then check computed (stylesheet) style\n   */\n  getFlowDirection(target: HTMLElement): [string, string] {\n    const query = 'flex-direction';\n    let value = this.lookupStyle(target, query);\n    const hasInlineValue =\n      this.lookupInlineStyle(target, query) ||\n      (isPlatformServer(this._platformId) && this._serverModuleLoaded)\n        ? value\n        : '';\n\n    return [value || 'row', hasInlineValue];\n  }\n\n  hasWrap(target: HTMLElement): boolean {\n    const query = 'flex-wrap';\n    return this.lookupStyle(target, query) === 'wrap';\n  }\n\n  /**\n   * Find the DOM element's raw attribute value (if any)\n   */\n  lookupAttributeValue(element: HTMLElement, attribute: string): string {\n    return element.getAttribute(attribute) ?? '';\n  }\n\n  /**\n   * Find the DOM element's inline style value (if any)\n   */\n  lookupInlineStyle(element: HTMLElement, styleName: string): string {\n    return isPlatformBrowser(this._platformId)\n      ? element.style.getPropertyValue(styleName)\n      : getServerStyle(element, styleName);\n  }\n\n  /**\n   * Determine the inline or inherited CSS style\n   * NOTE: platform-server has no implementation for getComputedStyle\n   */\n  lookupStyle(\n    element: HTMLElement,\n    styleName: string,\n    inlineOnly = false,\n  ): string {\n    let value = '';\n    if (element) {\n      let immediateValue = (value = this.lookupInlineStyle(element, styleName));\n      if (!immediateValue) {\n        if (isPlatformBrowser(this._platformId)) {\n          if (!inlineOnly) {\n            value = getComputedStyle(element).getPropertyValue(styleName);\n          }\n        } else {\n          if (this._serverModuleLoaded) {\n            value = this._serverStylesheet.getStyleForElement(\n              element,\n              styleName,\n            );\n          }\n        }\n      }\n    }\n\n    // Note: 'inline' is the default of all elements, unless UA stylesheet overrides;\n    //       in which case getComputedStyle() should determine a valid value.\n    return value ? value.trim() : '';\n  }\n\n  /**\n   * Applies the styles to the element. The styles object map may contain an array of values\n   * Each value will be added as element style\n   * Keys are sorted to add prefixed styles (like -webkit-x) first, before the standard ones\n   */\n  private _applyMultiValueStyleToElement(\n    styles: StyleDefinition,\n    element: HTMLElement,\n  ) {\n    Object.keys(styles)\n      .sort()\n      .forEach((key) => {\n        const el = styles[key];\n        const values: (string | number | null)[] = Array.isArray(el)\n          ? el\n          : [el];\n        values.sort();\n        for (let value of values) {\n          value = value ? value + '' : '';\n          if (\n            isPlatformBrowser(this._platformId) ||\n            !this._serverModuleLoaded\n          ) {\n            isPlatformBrowser(this._platformId)\n              ? element.style.setProperty(key, value)\n              : setServerStyle(element, key, value);\n          } else {\n            this._serverStylesheet.addStyleToElement(element, key, value);\n          }\n        }\n      });\n  }\n}\n\nfunction getServerStyle(element: any, styleName: string): string {\n  const styleMap = readStyleAttribute(element);\n  return styleMap[styleName] ?? '';\n}\n\nfunction setServerStyle(\n  element: any,\n  styleName: string,\n  styleValue?: string | null,\n) {\n  styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n  const styleMap = readStyleAttribute(element);\n  styleMap[styleName] = styleValue ?? '';\n  writeStyleAttribute(element, styleMap);\n}\n\nfunction writeStyleAttribute(\n  element: any,\n  styleMap: { [name: string]: string },\n) {\n  let styleAttrValue = '';\n  for (const key in styleMap) {\n    const newValue = styleMap[key];\n    if (newValue) {\n      styleAttrValue += `${key}:${styleMap[key]};`;\n    }\n  }\n  element.setAttribute('style', styleAttrValue);\n}\n\nfunction readStyleAttribute(element: any): { [name: string]: string } {\n  const styleMap: { [name: string]: string } = {};\n  const styleAttribute = element.getAttribute('style');\n  if (styleAttribute) {\n    const styleList = styleAttribute.split(/;+/g);\n    for (let i = 0; i < styleList.length; i++) {\n      const style = styleList[i].trim();\n      if (style.length > 0) {\n        const colonIndex = style.indexOf(':');\n        if (colonIndex === -1) {\n          throw new Error(`Invalid CSS style: ${style}`);\n        }\n        const name = style.substr(0, colonIndex).trim();\n        styleMap[name] = style.substr(colonIndex + 1).trim();\n      }\n    }\n  }\n  return styleMap;\n}\n\n/**\n * Definition of a css style. Either a property name (e.g. \"flex-basis\") or an object\n * map of property name and value (e.g. {display: 'none', flex-order: 5})\n */\nexport type StyleDefinition = { [property: string]: string | number | null };\n","import {\n  Directive,\n  ElementRef,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { buildLayoutCSS } from '@ngbracket/ngx-layout/_private-utils';\nimport { MediaMarshaller } from '../media-marshaller/media-marshaller';\nimport { StyleBuilder } from '../style-builder/style-builder';\nimport { StyleDefinition, StyleUtils } from '../style-utils/style-utils';\n\n@Directive()\nexport abstract class BaseDirective2 implements OnChanges, OnDestroy {\n  protected DIRECTIVE_KEY = '';\n  protected inputs: string[] = [];\n  /** The most recently used styles for the builder */\n  protected mru: StyleDefinition = {};\n  protected destroySubject: Subject<void> = new Subject();\n  protected currentValue: any;\n\n  /** Access to host element's parent DOM node */\n  protected get parentElement(): HTMLElement | null {\n    return this.elementRef.nativeElement.parentElement;\n  }\n\n  /** Access to the HTMLElement for the directive */\n  protected get nativeElement(): HTMLElement {\n    return this.elementRef.nativeElement;\n  }\n\n  /** Access to the activated value for the directive */\n  get activatedValue(): string {\n    return this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY);\n  }\n  set activatedValue(value: string) {\n    this.marshal.setValue(\n      this.nativeElement,\n      this.DIRECTIVE_KEY,\n      value,\n      this.marshal.activatedAlias,\n    );\n  }\n\n  /** Cache map for style computation */\n  protected styleCache: Map<string, StyleDefinition> = new Map();\n\n  protected constructor(\n    protected elementRef: ElementRef,\n    protected styleBuilder: StyleBuilder,\n    protected styler: StyleUtils,\n    protected marshal: MediaMarshaller,\n  ) {}\n\n  /** For @Input changes */\n  ngOnChanges(changes: SimpleChanges) {\n    Object.keys(changes).forEach((key) => {\n      if (this.inputs.indexOf(key) !== -1) {\n        const bp = key.split('.').slice(1).join('.');\n        const val = changes[key].currentValue;\n        this.setValue(val, bp);\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroySubject.next();\n    this.destroySubject.complete();\n    this.marshal.releaseElement(this.nativeElement);\n  }\n\n  /** Register with central marshaller service */\n  protected init(extraTriggers: Observable<any>[] = []): void {\n    this.marshal.init(\n      this.elementRef.nativeElement,\n      this.DIRECTIVE_KEY,\n      this.updateWithValue.bind(this),\n      this.clearStyles.bind(this),\n      extraTriggers,\n    );\n  }\n\n  /** Add styles to the element using predefined style builder */\n  protected addStyles(input: string, parent?: Object) {\n    const builder = this.styleBuilder;\n    const useCache = builder.shouldCache;\n\n    let genStyles: StyleDefinition | undefined = this.styleCache.get(input);\n\n    if (!genStyles || !useCache) {\n      genStyles = builder.buildStyles(input, parent);\n      if (useCache) {\n        this.styleCache.set(input, genStyles);\n      }\n    }\n\n    this.mru = { ...genStyles };\n    this.applyStyleToElement(genStyles);\n    builder.sideEffect(input, genStyles, parent);\n  }\n\n  /** Remove generated styles from an element using predefined style builder */\n  protected clearStyles() {\n    Object.keys(this.mru).forEach((k) => {\n      this.mru[k] = '';\n    });\n    this.applyStyleToElement(this.mru);\n    this.mru = {};\n    this.currentValue = undefined;\n  }\n\n  /** Force trigger style updates on DOM element */\n  protected triggerUpdate() {\n    this.marshal.triggerUpdate(this.nativeElement, this.DIRECTIVE_KEY);\n  }\n\n  /**\n   * Determine the DOM element's Flexbox flow (flex-direction).\n   *\n   * Check inline style first then check computed (stylesheet) style.\n   * And optionally add the flow value to element's inline style.\n   */\n  protected getFlexFlowDirection(\n    target: HTMLElement,\n    addIfMissing = false,\n  ): string {\n    if (target) {\n      const [value, hasInlineValue] = this.styler.getFlowDirection(target);\n\n      if (!hasInlineValue && addIfMissing) {\n        const style = buildLayoutCSS(value);\n        const elements = [target];\n        this.styler.applyStyleToElements(style, elements);\n      }\n\n      return value.trim();\n    }\n\n    return 'row';\n  }\n\n  protected hasWrap(target: HTMLElement): boolean {\n    return this.styler.hasWrap(target);\n  }\n\n  /** Applies styles given via string pair or object map to the directive element */\n  protected applyStyleToElement(\n    style: StyleDefinition,\n    value?: string | number,\n    element: HTMLElement = this.nativeElement,\n  ) {\n    this.styler.applyStyleToElement(element, style, value);\n  }\n\n  protected setValue(val: any, bp: string): void {\n    this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, val, bp);\n  }\n\n  protected updateWithValue(input: string) {\n    if (this.currentValue !== input) {\n      this.addStyles(input);\n      this.currentValue = input;\n    }\n  }\n}\n","\nimport { Inject, Injectable, NgZone, PLATFORM_ID, DOCUMENT } from '@angular/core';\n\nimport { BreakPointRegistry } from '../../breakpoints/break-point-registry';\nimport { MatchMedia } from '../match-media';\n\n/**\n * MockMatchMedia mocks calls to the Window API matchMedia with a build of a simulated\n * MockMediaQueryListener. Methods are available to simulate an activation of a mediaQuery\n * range and to clearAll mediaQuery listeners.\n */\n@Injectable()\nexport class MockMatchMedia extends MatchMedia {\n  autoRegisterQueries = true; // Used for testing BreakPoint registrations\n  useOverlaps = false; // Allow fallback to overlapping mediaQueries\n\n  constructor(\n    _zone: NgZone,\n    @Inject(PLATFORM_ID) _platformId: Object,\n    @Inject(DOCUMENT) public override _document: any,\n    private _breakpoints: BreakPointRegistry,\n  ) {\n    super(_zone, _platformId, _document);\n  }\n\n  /** Easy method to clear all listeners for all mediaQueries */\n  clearAll() {\n    this.registry.forEach((mql: MediaQueryList) => {\n      (mql as MockMediaQueryList).destroy();\n    });\n    this.registry.clear();\n    this.useOverlaps = false;\n  }\n\n  /** Feature to support manual, simulated activation of a mediaQuery. */\n  activate(mediaQuery: string, useOverlaps = this.useOverlaps): boolean {\n    mediaQuery = this._validateQuery(mediaQuery);\n\n    if (useOverlaps || !this.isActive(mediaQuery)) {\n      this._deactivateAll();\n\n      this._registerMediaQuery(mediaQuery);\n      this._activateWithOverlaps(mediaQuery, useOverlaps);\n    }\n\n    return this.hasActivated;\n  }\n\n  setNonce(nonce: string | null) {\n    super._nonce = nonce;\n  }\n  /** Converts an optional mediaQuery alias to a specific, valid mediaQuery */\n  _validateQuery(queryOrAlias: string): string {\n    const bp = this._breakpoints.findByAlias(queryOrAlias);\n    return bp?.mediaQuery ?? queryOrAlias;\n  }\n\n  /**\n   * Manually onMediaChange any overlapping mediaQueries to simulate\n   * similar functionality in the window.matchMedia()\n   */\n  private _activateWithOverlaps(\n    mediaQuery: string,\n    useOverlaps: boolean,\n  ): boolean {\n    if (useOverlaps) {\n      const bp = this._breakpoints.findByQuery(mediaQuery);\n      const alias = bp?.alias ?? 'unknown';\n\n      // Simulate activation of overlapping lt-<XXX> ranges\n      switch (alias) {\n        case 'lg':\n          this._activateByAlias(['lt-xl']);\n          break;\n        case 'md':\n          this._activateByAlias(['lt-xl', 'lt-lg']);\n          break;\n        case 'sm':\n          this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md']);\n          break;\n        case 'xs':\n          this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md', 'lt-sm']);\n          break;\n      }\n\n      // Simulate activation of overlapping gt-<xxxx> mediaQuery ranges\n      switch (alias) {\n        case 'xl':\n          this._activateByAlias(['gt-lg', 'gt-md', 'gt-sm', 'gt-xs']);\n          break;\n        case 'lg':\n          this._activateByAlias(['gt-md', 'gt-sm', 'gt-xs']);\n          break;\n        case 'md':\n          this._activateByAlias(['gt-sm', 'gt-xs']);\n          break;\n        case 'sm':\n          this._activateByAlias(['gt-xs']);\n          break;\n      }\n    }\n\n    // Activate last since the responsiveActivation is watching *this* mediaQuery\n    return this._activateByQuery(mediaQuery);\n  }\n\n  /**\n   *\n   */\n  private _activateByAlias(aliases: string[]) {\n    const activate = (alias: string) => {\n      const bp = this._breakpoints.findByAlias(alias);\n      this._activateByQuery(bp?.mediaQuery ?? alias);\n    };\n    aliases.forEach(activate);\n  }\n\n  /**\n   *\n   */\n  private _activateByQuery(mediaQuery: string) {\n    if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n      this._registerMediaQuery(mediaQuery);\n    }\n    const mql: MockMediaQueryList = this.registry.get(\n      mediaQuery,\n    ) as MockMediaQueryList;\n\n    if (mql && !this.isActive(mediaQuery)) {\n      this.registry.set(mediaQuery, mql.activate());\n    }\n    return this.hasActivated;\n  }\n\n  /** Deactivate all current MQLs and reset the buffer */\n  private _deactivateAll() {\n    this.registry.forEach((it: MediaQueryList) => {\n      (it as MockMediaQueryList).deactivate();\n    });\n    return this;\n  }\n\n  /** Insure the mediaQuery is registered with MatchMedia */\n  private _registerMediaQuery(mediaQuery: string) {\n    if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n      this.registerQuery(mediaQuery);\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): MediaQueryList {\n    return new MockMediaQueryList(query);\n  }\n\n  protected get hasActivated() {\n    return this.activations.length > 0;\n  }\n}\n\n/**\n * Special internal class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class MockMediaQueryList extends EventTarget implements MediaQueryList {\n  private _isActive = false;\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) {\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(): MockMediaQueryList {\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(): MockMediaQueryList {\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 testing environment */\n  removeListener(_: MediaQueryListListener | null) {}\n\n  override dispatchEvent(_: Event): boolean {\n    return false;\n  }\n\n  onchange: MediaQueryListListener = null;\n}\n\n/**\n * Pre-configured provider for MockMatchMedia\n */\n// tslint:disable-next-line:variable-name\nexport const MockMatchMediaProvider = {\n  provide: MatchMedia,\n  useClass: MockMatchMedia,\n};\n\ntype MediaQueryListListener =\n  | ((this: MediaQueryList, ev: MediaQueryListEvent) => any)\n  | null;\n","/** Wraps the provided value in an array, unless the provided value is an array. */\nexport function coerceArray<T>(value: T | T[]): T[] {\n  return Array.isArray(value) ? value : [value];\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { asapScheduler, Observable, of, Subject } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  switchMap,\n  takeUntil,\n} from 'rxjs/operators';\n\nimport { mergeAlias } from '../add-alias';\nimport {\n  BreakPointRegistry,\n  OptionalBreakPoint,\n} from '../breakpoints/break-point-registry';\nimport { MatchMedia } from '../match-media/match-media';\nimport { MediaChange } from '../media-change';\nimport { PrintHook } from '../media-marshaller/print-hook';\n\nimport { coerceArray } from '../utils/array';\nimport { sortDescendingPriority } from '../utils/sort';\n\n/**\n * MediaObserver enables applications to listen for 1..n mediaQuery activations and to determine\n * if a mediaQuery is currently activated.\n *\n * Since a breakpoint change will first deactivate 1...n mediaQueries and then possibly activate\n * 1..n mediaQueries, the MediaObserver will debounce notifications and report ALL *activations*\n * in 1 event notification. The reported activations will be sorted in descending priority order.\n *\n * This class uses the BreakPoint Registry to inject alias information into the raw MediaChange\n * notification. For custom mediaQuery notifications, alias information will not be injected and\n * those fields will be ''.\n *\n * Note: Developers should note that only mediaChange activations (not de-activations)\n *       are announced by the MediaObserver.\n *\n *  @usage\n *\n *  // RxJS\n *  import { filter } from 'rxjs/operators';\n *  import { MediaObserver } from '@ngbracket/ngx-layout';\n *\n *  @Component({ ... })\n *  export class AppComponent {\n *    status: string = '';\n *\n *    constructor(mediaObserver: MediaObserver) {\n *      const media$ = mediaObserver.asObservable().pipe(\n *        filter((changes: MediaChange[]) => true)   // silly noop filter\n *      );\n *\n *      media$.subscribe((changes: MediaChange[]) => {\n *        let status = '';\n *        changes.forEach( change => {\n *          status += `'${change.mqAlias}' = (${change.mediaQuery}) <br/>` ;\n *        });\n *        this.status = status;\n *     });\n *\n *    }\n *  }\n */\n@Injectable({ providedIn: 'root' })\nexport class MediaObserver implements OnDestroy {\n  /** Filter MediaChange notifications for overlapping breakpoints */\n  filterOverlaps = false;\n\n  constructor(\n    protected breakpoints: BreakPointRegistry,\n    protected matchMedia: MatchMedia,\n    protected hook: PrintHook,\n  ) {\n    this._media$ = this.watchActivations();\n  }\n\n  /**\n   * Completes the active subject, signalling to all complete for all\n   * MediaObserver subscribers\n   */\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  // ************************************************\n  // Public Methods\n  // ************************************************\n\n  /**\n   * Observe changes to current activation 'list'\n   */\n  asObservable(): Observable<MediaChange[]> {\n    return this._media$;\n  }\n\n  /**\n   * Allow programmatic query to determine if one or more media query/alias match\n   * the current viewport size.\n   * @param value One or more media queries (or aliases) to check.\n   * @returns Whether any of the media queries match.\n   */\n  isActive(value: string | string[]): boolean {\n    const aliases = splitQueries(coerceArray(value));\n    return aliases.some((alias) => {\n      const query = toMediaQuery(alias, this.breakpoints);\n      return query !== null && this.matchMedia.isActive(query);\n    });\n  }\n\n  // ************************************************\n  // Internal Methods\n  // ************************************************\n\n  /**\n   * Register all the mediaQueries registered in the BreakPointRegistry\n   * This is needed so subscribers can be auto-notified of all standard, registered\n   * mediaQuery activations\n   */\n  private watchActivations() {\n    const queries = this.breakpoints.items.map((bp) => bp.mediaQuery);\n    return this.buildObservable(queries);\n  }\n\n  /**\n   * Only pass/announce activations (not de-activations)\n   *\n   * Since multiple-mediaQueries can be activation in a cycle,\n   * gather all current activations into a single list of changes to observers\n   *\n   * Inject associated (if any) alias information into the MediaChange event\n   * - Exclude mediaQuery activations for overlapping mQs. List bounded mQ ranges only\n   * - Exclude print activations that do not have an associated mediaQuery\n   *\n   * NOTE: the raw MediaChange events [from MatchMedia] do not\n   *       contain important alias information; as such this info\n   *       must be injected into the MediaChange\n   */\n  private buildObservable(mqList: string[]): Observable<MediaChange[]> {\n    const hasChanges = (changes: MediaChange[]) => {\n      const isValidQuery = (change: MediaChange) =>\n        change.mediaQuery.length > 0;\n      return changes.filter(isValidQuery).length > 0;\n    };\n    const excludeOverlaps = (changes: MediaChange[]) => {\n      return !this.filterOverlaps\n        ? changes\n        : changes.filter((change) => {\n            const bp = this.breakpoints.findByQuery(change.mediaQuery);\n            return bp?.overlapping ?? true;\n          });\n    };\n    const ignoreDuplicates = (\n      previous: MediaChange[],\n      current: MediaChange[],\n    ): boolean => {\n      if (previous.length !== current.length) {\n        return false;\n      }\n\n      const previousMqs = previous.map((mc) => mc.mediaQuery);\n      const currentMqs = new Set(current.map((mc) => mc.mediaQuery));\n      const difference = new Set(\n        previousMqs.filter((mq) => !currentMqs.has(mq)),\n      );\n\n      return difference.size === 0;\n    };\n\n    /**\n     */\n    return this.matchMedia.observe(this.hook.withPrintQuery(mqList)).pipe(\n      filter((change: MediaChange) => change.matches),\n      debounceTime(0, asapScheduler),\n      switchMap((_) => of(this.findAllActivations())),\n      map(excludeOverlaps),\n      filter(hasChanges),\n      distinctUntilChanged(ignoreDuplicates),\n      takeUntil(this.destroyed$),\n    );\n  }\n\n  /**\n   * Find all current activations and prepare single list of activations\n   * sorted by descending priority.\n   */\n  private findAllActivations(): MediaChange[] {\n    const mergeMQAlias = (change: MediaChange) => {\n      const bp: OptionalBreakPoint = this.breakpoints.findByQuery(\n        change.mediaQuery,\n      );\n      return mergeAlias(change, bp);\n    };\n    const replaceWithPrintAlias = (change: MediaChange) =>\n      this.hook.isPrintEvent(change) ? this.hook.updateEvent(change) : change;\n\n    return this.matchMedia.activations\n      .map((query) => new MediaChange(true, query))\n      .map(replaceWithPrintAlias)\n      .map(mergeMQAlias)\n      .sort(sortDescendingPriority);\n  }\n\n  private readonly _media$: Observable<MediaChange[]>;\n  private readonly destroyed$ = new Subject<void>();\n}\n\n/**\n * Find associated breakpoint (if any)\n */\nfunction toMediaQuery(\n  query: string,\n  locator: BreakPointRegistry,\n): string | null {\n  const bp = locator.findByAlias(query) ?? locator.findByQuery(query);\n  return bp?.mediaQuery ?? null;\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: string[]): string[] {\n  return queries\n    .flatMap((query) => query.split(','))\n    .map((query) => query.trim());\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID, DOCUMENT } from '@angular/core';\n\nimport { fromEvent, Subscription } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { mergeAlias } from '../add-alias';\nimport {\n  BreakPointRegistry,\n  OptionalBreakPoint,\n} from '../breakpoints/break-point-registry';\nimport { MatchMedia } from '../match-media/match-media';\nimport { MediaChange } from '../media-change';\nimport { LAYOUT_CONFIG, LayoutConfigOptions } from '../tokens/library-config';\nimport { sortDescendingPriority } from '../utils/sort';\n\n/**\n * Class\n */\n@Injectable({ providedIn: 'root' })\nexport class MediaTrigger {\n  constructor(\n    protected breakpoints: BreakPointRegistry,\n    protected matchMedia: MatchMedia,\n    @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n    @Inject(PLATFORM_ID) protected _platformId: Object,\n    @Inject(DOCUMENT) protected _document: any,\n  ) {}\n\n  /**\n   * Manually activate range of breakpoints\n   * @param list array of mediaQuery or alias strings\n   */\n  activate(list: string[]) {\n    list = list.map((it) => it.trim()); // trim queries\n\n    this.saveActivations();\n    this.deactivateAll();\n    this.setActivations(list);\n\n    this.prepareAutoRestore();\n  }\n\n  /**\n   * Restore original, 'real' breakpoints and emit events\n   * to trigger stream notification\n   */\n  restore() {\n    if (this.hasCachedRegistryMatches) {\n      const extractQuery = (change: MediaChange) => change.mediaQuery;\n      const list = this.originalActivations.map(extractQuery);\n      try {\n        this.deactivateAll();\n        this.restoreRegistryMatches();\n        this.setActivations(list);\n      } finally {\n        this.originalActivations = [];\n        if (this.resizeSubscription) {\n          this.resizeSubscription.unsubscribe();\n        }\n      }\n    }\n  }\n\n  // ************************************************\n  // Internal Methods\n  // ************************************************\n\n  /**\n   * Whenever window resizes, immediately auto-restore original\n   * activations (if we are simulating activations)\n   */\n  private prepareAutoRestore() {\n    const isBrowser = isPlatformBrowser(this._platformId) && this._document;\n    const enableAutoRestore =\n      isBrowser && this.layoutConfig.mediaTriggerAutoRestore;\n\n    if (enableAutoRestore) {\n      const resize$ = fromEvent(window, 'resize').pipe(take(1));\n      this.resizeSubscription = resize$.subscribe(this.restore.bind(this));\n    }\n  }\n\n  /**\n   * Notify all matchMedia subscribers of de-activations\n   *\n   * Note: we must force 'matches' updates for\n   *       future matchMedia::activation lookups\n   */\n  private deactivateAll() {\n    const list = this.currentActivations;\n\n    this.forceRegistryMatches(list, false);\n    this.simulateMediaChanges(list, false);\n  }\n\n  /**\n   * Cache current activations as sorted, prioritized list of MediaChanges\n   */\n  private saveActivations() {\n    if (!this.hasCachedRegistryMatches) {\n      const toMediaChange = (query: string) => new MediaChange(true, query);\n      const mergeMQAlias = (change: MediaChange) => {\n        const bp: OptionalBreakPoint = this.breakpoints.findByQuery(\n          change.mediaQuery,\n        );\n        return mergeAlias(change, bp);\n      };\n\n      this.originalActivations = this.currentActivations\n        .map(toMediaChange)\n        .map(mergeMQAlias)\n        .sort(sortDescendingPriority);\n\n      this.cacheRegistryMatches();\n    }\n  }\n\n  /**\n   * Force set manual activations for specified mediaQuery list\n   */\n  private setActivations(list: string[]) {\n    if (!!this.originalRegistry) {\n      this.forceRegistryMatches(list, true);\n    }\n    this.simulateMediaChanges(list);\n  }\n\n  /**\n   * For specified mediaQuery list manually simulate activations or deactivations\n   */\n  private simulateMediaChanges(queries: string[], matches = true) {\n    const toMediaQuery = (query: string) => {\n      const locator = this.breakpoints;\n      const bp = locator.findByAlias(query) || locator.findByQuery(query);\n      return bp ? bp.mediaQuery : query;\n    };\n    const emitChangeEvent = (query: string) =>\n      this.emitChangeEvent(matches, query);\n\n    queries.map(toMediaQuery).forEach(emitChangeEvent);\n  }\n\n  /**\n   * Replace current registry with simulated registry...\n   * Note: this is required since MediaQueryList::matches is 'readOnly'\n   */\n  private forceRegistryMatches(queries: string[], matches: boolean) {\n    const registry = new Map<string, MediaQueryList>();\n    queries.forEach((query) => {\n      registry.set(query, { matches } as MediaQueryList);\n    });\n\n    this.matchMedia.registry = registry;\n  }\n\n  /**\n   * Save current MatchMedia::registry items.\n   */\n  private cacheRegistryMatches() {\n    const target = this.originalRegistry;\n\n    target.clear();\n    this.matchMedia.registry.forEach((value: MediaQueryList, key: string) => {\n      target.set(key, value);\n    });\n    this.hasCachedRegistryMatches = true;\n  }\n\n  /**\n   * Restore original, 'true' registry\n   */\n  private restoreRegistryMatches() {\n    const target = this.matchMedia.registry;\n\n    target.clear();\n    this.originalRegistry.forEach((value: MediaQueryList, key: string) => {\n      target.set(key, value);\n    });\n\n    this.originalRegistry.clear();\n    this.hasCachedRegistryMatches = false;\n  }\n\n  /**\n   * Manually emit a MediaChange event via the MatchMedia to MediaMarshaller and MediaObserver\n   */\n  private emitChangeEvent(matches: boolean, query: string) {\n    this.matchMedia.source.next(new MediaChange(matches, query));\n  }\n\n  private get currentActivations(): string[] {\n    return this.matchMedia.activations;\n  }\n\n  private hasCachedRegistryMatches = false;\n  private originalActivations: MediaChange[] = [];\n  private originalRegistry: Map<string, MediaQueryList> = new Map<\n    string,\n    MediaQueryList\n  >();\n\n  private resizeSubscription!: Subscription;\n}\n","/**\n * The flex API permits 3 or 1 parts of the value:\n *    - `flex-grow flex-shrink flex-basis`, or\n *    - `flex-basis`\n */\nexport function validateBasis(\n  basis: string,\n  grow = '1',\n  shrink = '1',\n): string[] {\n  let parts = [grow, shrink, basis];\n\n  let j = basis.indexOf('calc');\n  if (j > 0) {\n    parts[2] = _validateCalcValue(basis.substring(j).trim());\n    let matches = basis.substr(0, j).trim().split(' ');\n    if (matches.length == 2) {\n      parts[0] = matches[0];\n      parts[1] = matches[1];\n    }\n  } else if (j == 0) {\n    parts[2] = _validateCalcValue(basis.trim());\n  } else {\n    let matches = basis.split(' ');\n    parts = matches.length === 3 ? matches : [grow, shrink, basis];\n  }\n\n  return parts;\n}\n\n/**\n * Calc expressions require whitespace before & after any expression operators\n * This is a simple, crude whitespace padding solution.\n *   - '3 3 calc(15em + 20px)'\n *   - calc(100% / 7 * 2)\n *   - 'calc(15em + 20px)'\n *   - 'calc(15em+20px)'\n *   - '37px'\n *   = '43%'\n */\nfunction _validateCalcValue(calc: string): string {\n  return calc.replace(/[\\s]/g, '').replace(/[\\/\\*\\+\\-]/g, ' $& ');\n}\n","export interface Multiplier {\n  readonly unit: string;\n  readonly value: number;\n}\n\nconst MULTIPLIER_SUFFIX = 'x';\n\nexport function multiply(value: string, multiplier?: Multiplier): string {\n  if (multiplier === undefined) {\n    return value;\n  }\n\n  const transformValue = (possibleValue: string) => {\n    const numberValue = +possibleValue.slice(0, -MULTIPLIER_SUFFIX.length);\n\n    if (value.endsWith(MULTIPLIER_SUFFIX) && !isNaN(numberValue)) {\n      return `${numberValue * multiplier.value}${multiplier.unit}`;\n    }\n\n    return value;\n  };\n\n  return value.includes(' ')\n    ? value.split(' ').map(transformValue).join(' ')\n    : transformValue(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BreakPointRegistry","i1.MatchMedia","i2.BreakPointRegistry","i3.PrintHook","i1.StylesheetMap","i1.StyleBuilder","i2.StyleUtils","i3.MediaMarshaller","i2.MatchMedia"],"mappings":"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"}