blob: fde458d87e8222a73c0d1cc773569e7dc1d6f10f [file] [log] [blame]
{"version":3,"file":"flex-layout.umd.min.js","sources":["../../src/lib/flex/layout-align/layout-align.ts","../../src/lib/flex/module.ts","../../src/lib/grid/grid-align/grid-align.ts","../../src/lib/grid/align-columns/align-columns.ts","../../src/lib/grid/align-rows/align-rows.ts","../../src/lib/grid/area/area.ts","../../src/lib/grid/areas/areas.ts","../../src/lib/grid/auto/auto.ts","../../src/lib/grid/column/column.ts","../../src/lib/grid/columns/columns.ts","../../src/lib/grid/gap/gap.ts","../../src/lib/grid/row/row.ts","../../src/lib/grid/rows/rows.ts","../../src/lib/grid/module.ts","../../src/lib/version.ts","../../src/lib/module.ts","../../src/lib/core/style-builder/style-builder.ts","../../src/lib/core/media-marshaller/media-marshaller.ts","../../src/lib/extended/img-src/img-src.ts","../../src/lib/extended/class/class.ts","../../src/lib/extended/show-hide/show-hide.ts","../../src/lib/extended/style/style-transforms.ts","../../src/lib/extended/style/style.ts","../../src/lib/extended/module.ts","../../src/lib/utils/layout-validator.ts","../../src/lib/flex/layout/layout.ts","../../src/lib/flex/layout-gap/layout-gap.ts","../../src/lib/flex/flex/flex.ts","../../src/lib/flex/flex-order/flex-order.ts","../../src/lib/flex/flex-offset/flex-offset.ts","../../src/lib/flex/flex-align/flex-align.ts","../../src/lib/flex/flex-fill/flex-fill.ts","../../node_modules/tslib/tslib.es6.js","../../src/lib/core/browser-provider.ts","../../src/lib/core/add-alias.ts","../../src/lib/utils/object-extend.ts","../../src/lib/core/breakpoints/breakpoint-tools.ts","../../src/lib/core/utils/sort.ts","../../src/lib/core/match-media/match-media.ts","../../src/lib/core/media-marshaller/print-hook.ts","../../src/lib/core/utils/array.ts","../../src/lib/core/media-observer/media-observer.ts","../../src/lib/utils/auto-prefixer.ts","../../src/lib/core/basis-validator/basis-validator.ts","../../src/lib/core/module.ts","../../src/lib/core/media-change.ts","../../src/lib/core/stylesheet-map/stylesheet-map.ts","../../src/lib/core/tokens/library-config.ts","../../src/lib/core/tokens/server-token.ts","../../src/lib/core/tokens/breakpoint-token.ts","../../src/lib/core/base/base2.ts","../../src/lib/core/breakpoints/data/break-points.ts","../../src/lib/core/breakpoints/data/orientation-break-points.ts","../../src/lib/core/breakpoints/break-points-token.ts","../../src/lib/core/breakpoints/break-point-registry.ts","../../src/lib/core/match-media/mock/mock-match-media.ts","../../src/lib/core/media-trigger/media-trigger.ts","../../src/lib/core/style-utils/style-utils.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Optional, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n MediaMarshaller,\n ElementMatcher,\n} from '@angular/flex-layout/core';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {extendObject} from '../../utils/object-extend';\nimport {LAYOUT_VALUES, isFlowHorizontal} from '../../utils/layout-validator';\n\nexport interface LayoutAlignParent {\n layout: string;\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class LayoutAlignStyleBuilder extends StyleBuilder {\n buildStyles(align: string, parent: LayoutAlignParent) {\n const css: StyleDefinition = {}, [mainAxis, crossAxis] = align.split(' ');\n\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['justify-content'] = 'center';\n break;\n case 'space-around':\n css['justify-content'] = 'space-around';\n break;\n case 'space-between':\n css['justify-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['justify-content'] = 'space-evenly';\n break;\n case 'end':\n case 'flex-end':\n css['justify-content'] = 'flex-end';\n break;\n case 'start':\n case 'flex-start':\n default :\n css['justify-content'] = 'flex-start'; // default main axis\n break;\n }\n\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'flex-start':\n css['align-items'] = css['align-content'] = 'flex-start';\n break;\n case 'center':\n css['align-items'] = css['align-content'] = 'center';\n break;\n case 'end':\n case 'flex-end':\n css['align-items'] = css['align-content'] = 'flex-end';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n css['align-items'] = 'stretch';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n css['align-items'] = 'stretch';\n break;\n case 'baseline':\n css['align-content'] = 'stretch';\n css['align-items'] = 'baseline';\n break;\n case 'stretch':\n default : // 'stretch'\n css['align-items'] = css['align-content'] = 'stretch'; // default cross axis\n break;\n }\n\n return extendObject(css, {\n 'display' : parent.inline ? 'inline-flex' : 'flex',\n 'flex-direction' : parent.layout,\n 'box-sizing' : 'border-box',\n 'max-width': crossAxis === 'stretch' ?\n !isFlowHorizontal(parent.layout) ? '100%' : null : null,\n 'max-height': crossAxis === 'stretch' ?\n isFlowHorizontal(parent.layout) ? '100%' : null : null,\n }) as StyleDefinition;\n }\n}\n\nconst inputs = [\n 'fxLayoutAlign', 'fxLayoutAlign.xs', 'fxLayoutAlign.sm', 'fxLayoutAlign.md',\n 'fxLayoutAlign.lg', 'fxLayoutAlign.xl', 'fxLayoutAlign.lt-sm', 'fxLayoutAlign.lt-md',\n 'fxLayoutAlign.lt-lg', 'fxLayoutAlign.lt-xl', 'fxLayoutAlign.gt-xs', 'fxLayoutAlign.gt-sm',\n 'fxLayoutAlign.gt-md', 'fxLayoutAlign.gt-lg'\n];\nconst selector = `\n [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md],\n [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md],\n [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm],\n [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]\n`;\n\n/**\n * 'layout-align' flexbox styling directive\n * Defines positioning of child elements along main and cross axis in a layout container\n * Optional values: {main-axis} values or {main-axis cross-axis} value pairs\n *\n * @see https://css-tricks.com/almanac/properties/j/justify-content/\n * @see https://css-tricks.com/almanac/properties/a/align-items/\n * @see https://css-tricks.com/almanac/properties/a/align-content/\n */\nexport class LayoutAlignDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'layout-align';\n protected layout = 'row'; // default flex-direction\n protected inline = false; // default inline value\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: LayoutAlignStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n this.marshal.trackValue(this.nativeElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n /**\n *\n */\n protected updateWithValue(value: string) {\n const layout = this.layout || 'row';\n const inline = this.inline;\n if (layout === 'row' && inline) {\n this.styleCache = layoutAlignHorizontalInlineCache;\n } else if (layout === 'row' && !inline) {\n this.styleCache = layoutAlignHorizontalCache;\n } else if (layout === 'row-reverse' && inline) {\n this.styleCache = layoutAlignHorizontalRevInlineCache;\n } else if (layout === 'row-reverse' && !inline) {\n this.styleCache = layoutAlignHorizontalRevCache;\n } else if (layout === 'column' && inline) {\n this.styleCache = layoutAlignVerticalInlineCache;\n } else if (layout === 'column' && !inline) {\n this.styleCache = layoutAlignVerticalCache;\n } else if (layout === 'column-reverse' && inline) {\n this.styleCache = layoutAlignVerticalRevInlineCache;\n } else if (layout === 'column-reverse' && !inline) {\n this.styleCache = layoutAlignVerticalRevCache;\n }\n this.addStyles(value, {layout, inline});\n }\n\n /**\n * Cache the parent container 'flex-direction' and update the 'flex' styles\n */\n protected onLayoutChange(matcher: ElementMatcher) {\n const layoutKeys: string[] = matcher.value.split(' ');\n this.layout = layoutKeys[0];\n this.inline = matcher.value.includes('inline');\n if (!LAYOUT_VALUES.find(x => x === this.layout)) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n}\n\n@Directive({selector, inputs})\nexport class DefaultLayoutAlignDirective extends LayoutAlignDirective {\n protected inputs = inputs;\n}\n\nconst layoutAlignHorizontalCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignVerticalCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignHorizontalRevCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignVerticalRevCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignHorizontalInlineCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignVerticalInlineCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignHorizontalRevInlineCache: Map<string, StyleDefinition> = new Map();\nconst layoutAlignVerticalRevInlineCache: Map<string, StyleDefinition> = new Map();\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {CoreModule} from '@angular/flex-layout/core';\n\nimport {DefaultLayoutDirective} from './layout/layout';\nimport {DefaultLayoutGapDirective} from './layout-gap/layout-gap';\nimport {DefaultFlexDirective} from './flex/flex';\nimport {DefaultFlexOrderDirective} from './flex-order/flex-order';\nimport {DefaultFlexOffsetDirective} from './flex-offset/flex-offset';\nimport {DefaultFlexAlignDirective} from './flex-align/flex-align';\nimport {FlexFillDirective} from './flex-fill/flex-fill';\nimport {DefaultLayoutAlignDirective} from './layout-align/layout-align';\n\n\nconst ALL_DIRECTIVES = [\n DefaultLayoutDirective,\n DefaultLayoutGapDirective,\n DefaultLayoutAlignDirective,\n DefaultFlexOrderDirective,\n DefaultFlexOffsetDirective,\n FlexFillDirective,\n DefaultFlexAlignDirective,\n DefaultFlexDirective,\n];\n\n/**\n * *****************************************************************\n * Define module for the Flex API\n * *****************************************************************\n */\n\n@NgModule({\n imports: [CoreModule, BidiModule],\n declarations: [...ALL_DIRECTIVES],\n exports: [...ALL_DIRECTIVES]\n})\nexport class FlexModule {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Optional} from '@angular/core';\nimport {\n MediaMarshaller,\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\n\nconst ROW_DEFAULT = 'stretch';\nconst COL_DEFAULT = 'stretch';\n\n@Injectable({providedIn: 'root'})\nexport class GridAlignStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n return buildCss(input || ROW_DEFAULT);\n }\n}\n\nexport class GridAlignDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'grid-align';\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAlignStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n protected styleCache = alignCache;\n}\n\nconst alignCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdGridAlign',\n 'gdGridAlign.xs', 'gdGridAlign.sm', 'gdGridAlign.md', 'gdGridAlign.lg', 'gdGridAlign.xl',\n 'gdGridAlign.lt-sm', 'gdGridAlign.lt-md', 'gdGridAlign.lt-lg', 'gdGridAlign.lt-xl',\n 'gdGridAlign.gt-xs', 'gdGridAlign.gt-sm', 'gdGridAlign.gt-md', 'gdGridAlign.gt-lg'\n];\n\nconst selector = `\n [gdGridAlign],\n [gdGridAlign.xs], [gdGridAlign.sm], [gdGridAlign.md], [gdGridAlign.lg],[gdGridAlign.xl],\n [gdGridAlign.lt-sm], [gdGridAlign.lt-md], [gdGridAlign.lt-lg], [gdGridAlign.lt-xl],\n [gdGridAlign.gt-xs], [gdGridAlign.gt-sm], [gdGridAlign.gt-md], [gdGridAlign.gt-lg]\n`;\n\n/**\n * 'align' CSS Grid styling directive for grid children\n * Defines positioning of child elements along row and column axis in a grid container\n * Optional values: {row-axis} values or {row-axis column-axis} value pairs\n *\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-justify-self\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-align-self\n */\n@Directive({selector, inputs})\nexport class DefaultGridAlignDirective extends GridAlignDirective {\n protected inputs = inputs;\n}\n\nfunction buildCss(align: string = '') {\n const css: {[key: string]: string} = {}, [rowAxis, columnAxis] = align.split(' ');\n\n // Row axis\n switch (rowAxis) {\n case 'end':\n css['justify-self'] = 'end';\n break;\n case 'center':\n css['justify-self'] = 'center';\n break;\n case 'stretch':\n css['justify-self'] = 'stretch';\n break;\n case 'start':\n css['justify-self'] = 'start';\n break;\n default:\n css['justify-self'] = ROW_DEFAULT; // default row axis\n break;\n }\n\n // Column axis\n switch (columnAxis) {\n case 'end':\n css['align-self'] = 'end';\n break;\n case 'center':\n css['align-self'] = 'center';\n break;\n case 'stretch':\n css['align-self'] = 'stretch';\n break;\n case 'start':\n css['align-self'] = 'start';\n break;\n default:\n css['align-self'] = COL_DEFAULT; // default column axis\n break;\n }\n\n return css;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Input, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n StyleBuilder,\n StyleDefinition,\n MediaMarshaller,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_MAIN = 'start';\nconst DEFAULT_CROSS = 'stretch';\n\nexport interface GridAlignColumnsParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridAlignColumnsStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridAlignColumnsParent) {\n return buildCss(input || `${DEFAULT_MAIN} ${DEFAULT_CROSS}`, parent.inline);\n }\n}\n\nexport class GridAlignColumnsDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'grid-align-columns';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAlignColumnsStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? alignColumnsInlineCache : alignColumnsCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst alignColumnsCache: Map<string, StyleDefinition> = new Map();\nconst alignColumnsInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdAlignColumns',\n 'gdAlignColumns.xs', 'gdAlignColumns.sm', 'gdAlignColumns.md',\n 'gdAlignColumns.lg', 'gdAlignColumns.xl', 'gdAlignColumns.lt-sm',\n 'gdAlignColumns.lt-md', 'gdAlignColumns.lt-lg', 'gdAlignColumns.lt-xl',\n 'gdAlignColumns.gt-xs', 'gdAlignColumns.gt-sm', 'gdAlignColumns.gt-md',\n 'gdAlignColumns.gt-lg'\n];\nconst selector = `\n [gdAlignColumns],\n [gdAlignColumns.xs], [gdAlignColumns.sm], [gdAlignColumns.md],\n [gdAlignColumns.lg], [gdAlignColumns.xl], [gdAlignColumns.lt-sm],\n [gdAlignColumns.lt-md], [gdAlignColumns.lt-lg], [gdAlignColumns.lt-xl],\n [gdAlignColumns.gt-xs], [gdAlignColumns.gt-sm], [gdAlignColumns.gt-md],\n [gdAlignColumns.gt-lg]\n`;\n\n/**\n * 'column alignment' CSS Grid styling directive\n * Configures the alignment in the column direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-19\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-21\n */\n@Directive({selector, inputs})\nexport class DefaultGridAlignColumnsDirective extends GridAlignColumnsDirective {\n protected inputs = inputs;\n}\n\nfunction buildCss(align: string, inline: boolean): StyleDefinition {\n const css: {[key: string]: string} = {}, [mainAxis, crossAxis] = align.split(' ');\n\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['align-content'] = 'center';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['align-content'] = 'space-evenly';\n break;\n case 'end':\n css['align-content'] = 'end';\n break;\n case 'start':\n css['align-content'] = 'start';\n break;\n case 'stretch':\n css['align-content'] = 'stretch';\n break;\n default:\n css['align-content'] = DEFAULT_MAIN; // default main axis\n break;\n }\n\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n css['align-items'] = 'start';\n break;\n case 'center':\n css['align-items'] = 'center';\n break;\n case 'end':\n css['align-items'] = 'end';\n break;\n case 'stretch':\n css['align-items'] = 'stretch';\n break;\n default : // 'stretch'\n css['align-items'] = DEFAULT_CROSS; // default cross axis\n break;\n }\n\n css['display'] = inline ? 'inline-grid' : 'grid';\n\n return css;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Input, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n StyleBuilder,\n StyleDefinition,\n MediaMarshaller,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_MAIN = 'start';\nconst DEFAULT_CROSS = 'stretch';\n\nexport interface GridAlignRowsParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridAlignRowsStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridAlignRowsParent) {\n return buildCss(input || `${DEFAULT_MAIN} ${DEFAULT_CROSS}`, parent.inline);\n }\n}\n\nexport class GridAlignRowsDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'grid-align-rows';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAlignRowsStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? alignRowsInlineCache : alignRowsCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst alignRowsCache: Map<string, StyleDefinition> = new Map();\nconst alignRowsInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdAlignRows',\n 'gdAlignRows.xs', 'gdAlignRows.sm', 'gdAlignRows.md',\n 'gdAlignRows.lg', 'gdAlignRows.xl', 'gdAlignRows.lt-sm',\n 'gdAlignRows.lt-md', 'gdAlignRows.lt-lg', 'gdAlignRows.lt-xl',\n 'gdAlignRows.gt-xs', 'gdAlignRows.gt-sm', 'gdAlignRows.gt-md',\n 'gdAlignRows.gt-lg'\n];\nconst selector = `\n [gdAlignRows],\n [gdAlignRows.xs], [gdAlignRows.sm], [gdAlignRows.md],\n [gdAlignRows.lg], [gdAlignRows.xl], [gdAlignRows.lt-sm],\n [gdAlignRows.lt-md], [gdAlignRows.lt-lg], [gdAlignRows.lt-xl],\n [gdAlignRows.gt-xs], [gdAlignRows.gt-sm], [gdAlignRows.gt-md],\n [gdAlignRows.gt-lg]\n`;\n\n/**\n * 'row alignment' CSS Grid styling directive\n * Configures the alignment in the row direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-18\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-20\n */\n@Directive({selector, inputs})\nexport class DefaultGridAlignRowsDirective extends GridAlignRowsDirective {\n protected inputs = inputs;\n}\n\nfunction buildCss(align: string, inline: boolean): StyleDefinition {\n const css: {[key: string]: string} = {}, [mainAxis, crossAxis] = align.split(' ');\n\n // Main axis\n switch (mainAxis) {\n case 'center':\n case 'space-around':\n case 'space-between':\n case 'space-evenly':\n case 'end':\n case 'start':\n case 'stretch':\n css['justify-content'] = mainAxis;\n break;\n default:\n css['justify-content'] = DEFAULT_MAIN; // default main axis\n break;\n }\n\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'center':\n case 'end':\n case 'stretch':\n css['justify-items'] = crossAxis;\n break;\n default : // 'stretch'\n css['justify-items'] = DEFAULT_CROSS; // default cross axis\n break;\n }\n\n css['display'] = inline ? 'inline-grid' : 'grid';\n\n return css;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n MediaMarshaller,\n StyleBuilder,\n StyleDefinition,\n} from '@angular/flex-layout/core';\n\nconst DEFAULT_VALUE = 'auto';\n\n@Injectable({providedIn: 'root'})\nexport class GridAreaStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n return {'grid-area': input || DEFAULT_VALUE};\n }\n}\n\nexport class GridAreaDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'grid-area';\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAreaStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n protected styleCache = gridAreaCache;\n}\n\nconst gridAreaCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdArea',\n 'gdArea.xs', 'gdArea.sm', 'gdArea.md', 'gdArea.lg', 'gdArea.xl',\n 'gdArea.lt-sm', 'gdArea.lt-md', 'gdArea.lt-lg', 'gdArea.lt-xl',\n 'gdArea.gt-xs', 'gdArea.gt-sm', 'gdArea.gt-md', 'gdArea.gt-lg'\n];\nconst selector = `\n [gdArea],\n [gdArea.xs], [gdArea.sm], [gdArea.md], [gdArea.lg], [gdArea.xl],\n [gdArea.lt-sm], [gdArea.lt-md], [gdArea.lt-lg], [gdArea.lt-xl],\n [gdArea.gt-xs], [gdArea.gt-sm], [gdArea.gt-md], [gdArea.gt-lg]\n`;\n\n/**\n * 'grid-area' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-27\n */\n@Directive({selector, inputs})\nexport class DefaultGridAreaDirective extends GridAreaDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Input, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n StyleBuilder,\n MediaMarshaller,\n StyleDefinition,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_VALUE = 'none';\nconst DELIMETER = '|';\n\nexport interface GridAreasParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridAreasStyleBuiler extends StyleBuilder {\n buildStyles(input: string, parent: GridAreasParent) {\n const areas = (input || DEFAULT_VALUE).split(DELIMETER).map(v => `\"${v.trim()}\"`);\n\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-template-areas': areas.join(' ')\n };\n }\n}\n\nexport class GridAreasDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'grid-areas';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAreasStyleBuiler,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? areasInlineCache : areasCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst areasCache: Map<string, StyleDefinition> = new Map();\nconst areasInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdAreas',\n 'gdAreas.xs', 'gdAreas.sm', 'gdAreas.md', 'gdAreas.lg', 'gdAreas.xl',\n 'gdAreas.lt-sm', 'gdAreas.lt-md', 'gdAreas.lt-lg', 'gdAreas.lt-xl',\n 'gdAreas.gt-xs', 'gdAreas.gt-sm', 'gdAreas.gt-md', 'gdAreas.gt-lg'\n];\n\nconst selector = `\n [gdAreas],\n [gdAreas.xs], [gdAreas.sm], [gdAreas.md], [gdAreas.lg], [gdAreas.xl],\n [gdAreas.lt-sm], [gdAreas.lt-md], [gdAreas.lt-lg], [gdAreas.lt-xl],\n [gdAreas.gt-xs], [gdAreas.gt-sm], [gdAreas.gt-md], [gdAreas.gt-lg]\n`;\n\n/**\n * 'grid-template-areas' CSS Grid styling directive\n * Configures the names of elements within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-14\n */\n@Directive({selector, inputs})\nexport class DefaultGridAreasDirective extends GridAreasDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Input, Optional, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n StyleBuilder,\n MediaMarshaller,\n StyleDefinition,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_VALUE = 'initial';\n\nexport interface GridAutoParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridAutoStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridAutoParent) {\n let [direction, dense] = (input || DEFAULT_VALUE).split(' ');\n if (direction !== 'column' && direction !== 'row' && direction !== 'dense') {\n direction = 'row';\n }\n\n dense = (dense === 'dense' && direction !== 'dense') ? ' dense' : '';\n\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-flow': direction + dense\n };\n }\n}\n\nexport class GridAutoDirective extends BaseDirective2 {\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n protected DIRECTIVE_KEY = 'grid-auto';\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridAutoStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? autoInlineCache : autoCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst autoCache: Map<string, StyleDefinition> = new Map();\nconst autoInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdAuto',\n 'gdAuto.xs', 'gdAuto.sm', 'gdAuto.md', 'gdAuto.lg', 'gdAuto.xl',\n 'gdAuto.lt-sm', 'gdAuto.lt-md', 'gdAuto.lt-lg', 'gdAuto.lt-xl',\n 'gdAuto.gt-xs', 'gdAuto.gt-sm', 'gdAuto.gt-md', 'gdAuto.gt-lg'\n];\nconst selector = `\n [gdAuto],\n [gdAuto.xs], [gdAuto.sm], [gdAuto.md], [gdAuto.lg], [gdAuto.xl],\n [gdAuto.lt-sm], [gdAuto.lt-md], [gdAuto.lt-lg], [gdAuto.lt-xl],\n [gdAuto.gt-xs], [gdAuto.gt-sm], [gdAuto.gt-md], [gdAuto.gt-lg]\n`;\n\n/**\n * 'grid-auto-flow' CSS Grid styling directive\n * Configures the auto placement algorithm for the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-23\n */\n@Directive({selector, inputs})\nexport class DefaultGridAutoDirective extends GridAutoDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Optional, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n MediaMarshaller,\n StyleBuilder,\n StyleDefinition,\n} from '@angular/flex-layout/core';\n\nconst DEFAULT_VALUE = 'auto';\n\n@Injectable({providedIn: 'root'})\nexport class GridColumnStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n return {'grid-column': input || DEFAULT_VALUE};\n }\n}\n\nexport class GridColumnDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'grid-column';\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridColumnStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n protected styleCache = columnCache;\n}\n\nconst columnCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdColumn',\n 'gdColumn.xs', 'gdColumn.sm', 'gdColumn.md', 'gdColumn.lg', 'gdColumn.xl',\n 'gdColumn.lt-sm', 'gdColumn.lt-md', 'gdColumn.lt-lg', 'gdColumn.lt-xl',\n 'gdColumn.gt-xs', 'gdColumn.gt-sm', 'gdColumn.gt-md', 'gdColumn.gt-lg'\n];\n\nconst selector = `\n [gdColumn],\n [gdColumn.xs], [gdColumn.sm], [gdColumn.md], [gdColumn.lg], [gdColumn.xl],\n [gdColumn.lt-sm], [gdColumn.lt-md], [gdColumn.lt-lg], [gdColumn.lt-xl],\n [gdColumn.gt-xs], [gdColumn.gt-sm], [gdColumn.gt-md], [gdColumn.gt-lg]\n`;\n\n/**\n * 'grid-column' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\n@Directive({selector, inputs})\nexport class DefaultGridColumnDirective extends GridColumnDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Input, Injectable, Optional} from '@angular/core';\nimport {\n MediaMarshaller,\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_VALUE = 'none';\nconst AUTO_SPECIFIER = '!';\n\nexport interface GridColumnsParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridColumnsStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridColumnsParent) {\n input = input || DEFAULT_VALUE;\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER));\n auto = true;\n }\n\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-columns': '',\n 'grid-template-columns': '',\n };\n const key = (auto ? 'grid-auto-columns' : 'grid-template-columns');\n css[key] = input;\n\n return css;\n }\n}\n\nexport class GridColumnsDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'grid-columns';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridColumnsStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? columnsInlineCache : columnsCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst columnsCache: Map<string, StyleDefinition> = new Map();\nconst columnsInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdColumns',\n 'gdColumns.xs', 'gdColumns.sm', 'gdColumns.md', 'gdColumns.lg', 'gdColumns.xl',\n 'gdColumns.lt-sm', 'gdColumns.lt-md', 'gdColumns.lt-lg', 'gdColumns.lt-xl',\n 'gdColumns.gt-xs', 'gdColumns.gt-sm', 'gdColumns.gt-md', 'gdColumns.gt-lg'\n];\n\nconst selector = `\n [gdColumns],\n [gdColumns.xs], [gdColumns.sm], [gdColumns.md], [gdColumns.lg], [gdColumns.xl],\n [gdColumns.lt-sm], [gdColumns.lt-md], [gdColumns.lt-lg], [gdColumns.lt-xl],\n [gdColumns.gt-xs], [gdColumns.gt-sm], [gdColumns.gt-md], [gdColumns.gt-lg]\n`;\n\n/**\n * 'grid-template-columns' CSS Grid styling directive\n * Configures the sizing for the columns in the grid\n * Syntax: <column value> [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\n@Directive({selector, inputs})\nexport class DefaultGridColumnsDirective extends GridColumnsDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Input, Optional, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n MediaMarshaller,\n StyleBuilder,\n StyleDefinition,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_VALUE = '0';\n\nexport interface GridGapParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridGapStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridGapParent) {\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-gap': input || DEFAULT_VALUE\n };\n }\n}\n\nexport class GridGapDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'grid-gap';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridGapStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? gapInlineCache : gapCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst gapCache: Map<string, StyleDefinition> = new Map();\nconst gapInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdGap',\n 'gdGap.xs', 'gdGap.sm', 'gdGap.md', 'gdGap.lg', 'gdGap.xl',\n 'gdGap.lt-sm', 'gdGap.lt-md', 'gdGap.lt-lg', 'gdGap.lt-xl',\n 'gdGap.gt-xs', 'gdGap.gt-sm', 'gdGap.gt-md', 'gdGap.gt-lg'\n];\n\nconst selector = `\n [gdGap],\n [gdGap.xs], [gdGap.sm], [gdGap.md], [gdGap.lg], [gdGap.xl],\n [gdGap.lt-sm], [gdGap.lt-md], [gdGap.lt-lg], [gdGap.lt-xl],\n [gdGap.gt-xs], [gdGap.gt-sm], [gdGap.gt-md], [gdGap.gt-lg]\n`;\n\n/**\n * 'grid-gap' CSS Grid styling directive\n * Configures the gap between items in the grid\n * Syntax: <row gap> [<column-gap>]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-17\n */\n@Directive({selector, inputs})\nexport class DefaultGridGapDirective extends GridGapDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Optional, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleUtils,\n MediaMarshaller,\n StyleBuilder,\n StyleDefinition,\n} from '@angular/flex-layout/core';\n\nconst DEFAULT_VALUE = 'auto';\n\n@Injectable({providedIn: 'root'})\nexport class GridRowStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n return {'grid-row': input || DEFAULT_VALUE};\n }\n}\n\nexport class GridRowDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'grid-row';\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridRowStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n protected styleCache = rowCache;\n}\n\nconst rowCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdRow',\n 'gdRow.xs', 'gdRow.sm', 'gdRow.md', 'gdRow.lg', 'gdRow.xl',\n 'gdRow.lt-sm', 'gdRow.lt-md', 'gdRow.lt-lg', 'gdRow.lt-xl',\n 'gdRow.gt-xs', 'gdRow.gt-sm', 'gdRow.gt-md', 'gdRow.gt-lg'\n];\n\nconst selector = `\n [gdRow],\n [gdRow.xs], [gdRow.sm], [gdRow.md], [gdRow.lg], [gdRow.xl],\n [gdRow.lt-sm], [gdRow.lt-md], [gdRow.lt-lg], [gdRow.lt-xl],\n [gdRow.gt-xs], [gdRow.gt-sm], [gdRow.gt-md], [gdRow.gt-lg]\n`;\n\n/**\n * 'grid-row' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\n@Directive({selector, inputs})\nexport class DefaultGridRowDirective extends GridRowDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Input, Injectable, Optional} from '@angular/core';\nimport {\n MediaMarshaller,\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nconst DEFAULT_VALUE = 'none';\nconst AUTO_SPECIFIER = '!';\n\nexport interface GridRowsParent {\n inline: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class GridRowsStyleBuilder extends StyleBuilder {\n buildStyles(input: string, parent: GridRowsParent) {\n input = input || DEFAULT_VALUE;\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER));\n auto = true;\n }\n\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-rows': '',\n 'grid-template-rows': '',\n };\n const key = (auto ? 'grid-auto-rows' : 'grid-template-rows');\n css[key] = input;\n\n return css;\n }\n}\n\nexport class GridRowsDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'grid-rows';\n\n @Input('gdInline')\n get inline(): boolean { return this._inline; }\n set inline(val: boolean) { this._inline = coerceBooleanProperty(val); }\n protected _inline = false;\n\n constructor(protected elementRef: ElementRef,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: GridRowsStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n protected updateWithValue(value: string) {\n this.styleCache = this.inline ? rowsInlineCache : rowsCache;\n this.addStyles(value, {inline: this.inline});\n }\n}\n\nconst rowsCache: Map<string, StyleDefinition> = new Map();\nconst rowsInlineCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'gdRows',\n 'gdRows.xs', 'gdRows.sm', 'gdRows.md', 'gdRows.lg', 'gdRows.xl',\n 'gdRows.lt-sm', 'gdRows.lt-md', 'gdRows.lt-lg', 'gdRows.lt-xl',\n 'gdRows.gt-xs', 'gdRows.gt-sm', 'gdRows.gt-md', 'gdRows.gt-lg'\n];\n\nconst selector = `\n [gdRows],\n [gdRows.xs], [gdRows.sm], [gdRows.md], [gdRows.lg], [gdRows.xl],\n [gdRows.lt-sm], [gdRows.lt-md], [gdRows.lt-lg], [gdRows.lt-xl],\n [gdRows.gt-xs], [gdRows.gt-sm], [gdRows.gt-md], [gdRows.gt-lg]\n`;\n\n/**\n * 'grid-template-rows' CSS Grid styling directive\n * Configures the sizing for the rows in the grid\n * Syntax: <column value> [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\n@Directive({selector, inputs})\nexport class DefaultGridRowsDirective extends GridRowsDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\nimport {CoreModule} from '@angular/flex-layout/core';\n\nimport {DefaultGridAlignDirective} from './grid-align/grid-align';\nimport {DefaultGridAlignColumnsDirective} from './align-columns/align-columns';\nimport {DefaultGridAlignRowsDirective} from './align-rows/align-rows';\nimport {DefaultGridAreaDirective} from './area/area';\nimport {DefaultGridAreasDirective} from './areas/areas';\nimport {DefaultGridAutoDirective} from './auto/auto';\nimport {DefaultGridColumnDirective} from './column/column';\nimport {DefaultGridColumnsDirective} from './columns/columns';\nimport {DefaultGridGapDirective} from './gap/gap';\nimport {DefaultGridRowDirective} from './row/row';\nimport {DefaultGridRowsDirective} from './rows/rows';\n\n\nconst ALL_DIRECTIVES = [\n DefaultGridAlignDirective,\n DefaultGridAlignColumnsDirective,\n DefaultGridAlignRowsDirective,\n DefaultGridAreaDirective,\n DefaultGridAreasDirective,\n DefaultGridAutoDirective,\n DefaultGridColumnDirective,\n DefaultGridColumnsDirective,\n DefaultGridGapDirective,\n DefaultGridRowDirective,\n DefaultGridRowsDirective,\n];\n\n/**\n * *****************************************************************\n * Define module for the CSS Grid API\n * *****************************************************************\n */\n\n@NgModule({\n imports: [CoreModule],\n declarations: [...ALL_DIRECTIVES],\n exports: [...ALL_DIRECTIVES]\n})\nexport class GridModule {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Flex-Layout. */\nexport const VERSION = new Version('8.0.0-beta.26');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n Inject,\n ModuleWithProviders,\n NgModule,\n Optional,\n PLATFORM_ID,\n} from '@angular/core';\nimport {isPlatformServer} from '@angular/common';\n\nimport {\n SERVER_TOKEN,\n LayoutConfigOptions,\n LAYOUT_CONFIG,\n DEFAULT_CONFIG,\n BreakPoint,\n BREAKPOINT,\n} from '@angular/flex-layout/core';\nimport {ExtendedModule} from '@angular/flex-layout/extended';\nimport {FlexModule} from '@angular/flex-layout/flex';\nimport {GridModule} from '@angular/flex-layout/grid';\n\n/**\n * FlexLayoutModule -- the main import for all utilities in the Angular Layout library\n * * Will automatically provide Flex, Grid, and Extended modules for use in the application\n * * Can be configured using the static withConfig method, options viewable on the Wiki's\n * Configuration page\n */\n@NgModule({\n imports: [FlexModule, ExtendedModule, GridModule],\n exports: [FlexModule, ExtendedModule, GridModule]\n})\nexport class FlexLayoutModule {\n\n /**\n * Initialize the FlexLayoutModule with a set of config options,\n * which sets the corresponding tokens accordingly\n */\n static withConfig(configOptions: LayoutConfigOptions,\n breakpoints: BreakPoint|BreakPoint[] = []): ModuleWithProviders {\n return {\n ngModule: FlexLayoutModule,\n providers: configOptions.serverLoaded ?\n [\n {provide: LAYOUT_CONFIG, useValue: {...DEFAULT_CONFIG, ...configOptions}},\n {provide: BREAKPOINT, useValue: breakpoints, multi: true},\n {provide: SERVER_TOKEN, useValue: true},\n ] : [\n {provide: LAYOUT_CONFIG, useValue: {...DEFAULT_CONFIG, ...configOptions}},\n {provide: BREAKPOINT, useValue: breakpoints, multi: true},\n ]\n };\n }\n\n constructor(@Optional() @Inject(SERVER_TOKEN) serverModuleLoaded: boolean,\n @Inject(PLATFORM_ID) platformId: Object) {\n if (isPlatformServer(platformId) && !serverModuleLoaded) {\n console.warn('Warning: Flex Layout loaded on the server without FlexLayoutServerModule');\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {StyleDefinition} from '../style-utils/style-utils';\n\n/** A class that encapsulates CSS style generation for common directives */\nexport abstract class StyleBuilder {\n\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}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {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 {sortDescendingPriority} from '../utils/sort';\nimport {BreakPointRegistry} from '../breakpoints/break-point-registry';\nimport {MatchMedia} from '../match-media/match-media';\nimport {MediaChange} from '../media-change';\n\nimport {PrintHook, HookTarget} from './print-hook';\nimport {mergeAlias} from '../add-alias';\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 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] ? this.activatedBreakpoints[0].alias : '';\n }\n\n constructor(protected matchMedia: MatchMedia,\n protected breakpoints: BreakPointRegistry,\n protected hook: PrintHook) {\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 if (bp) {\n mc = mergeAlias(mc, bp);\n\n if (mc.matches && this.activatedBreakpoints.indexOf(bp) === -1) {\n this.activatedBreakpoints.push(bp);\n this.activatedBreakpoints.sort(sortDescendingPriority);\n\n this.updateStyles();\n\n } else if (!mc.matches && this.activatedBreakpoints.indexOf(bp) !== -1) {\n // Remove the breakpoint when it's deactivated\n this.activatedBreakpoints.splice(this.activatedBreakpoints.indexOf(bp), 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(element: HTMLElement,\n key: string,\n updateFn?: UpdateCallback,\n clearFn?: ClearCallback,\n extraTriggers: Observable<any>[] = []): void {\n\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 = 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 /**\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 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(element: HTMLElement,\n key: string,\n triggers: Observable<any>[]) {\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(bpMap: BreakpointMap, key?: string): 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 if (valueMap) {\n if (key === undefined || valueMap.has(key)) {\n return valueMap;\n }\n }\n }\n const lastHope = bpMap.get('');\n return (key === undefined || lastHope && lastHope.has(key)) ? lastHope : undefined;\n }\n\n /**\n * Watch for mediaQuery breakpoint activations\n */\n private observeActivations() {\n const target = this as unknown as HookTarget;\n const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n\n this.matchMedia\n .observe(this.hook.withPrintQuery(queries))\n .pipe(\n tap(this.hook.interceptEvents(target)),\n filter(this.hook.blockPropagation())\n )\n .subscribe(this.onMediaChange.bind(this));\n }\n\n}\n\nfunction initBuilderMap(map: BuilderMap,\n element: HTMLElement,\n key: string,\n input?: UpdateCallback | ClearCallback): void {\n if (input !== undefined) {\n let oldMap = map.get(element);\n if (!oldMap) {\n oldMap = new Map();\n map.set(element, oldMap);\n }\n oldMap.set(key, input);\n }\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Inject, PLATFORM_ID, Injectable, Input} from '@angular/core';\nimport {isPlatformServer} from '@angular/common';\nimport {\n MediaMarshaller,\n BaseDirective2,\n SERVER_TOKEN,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\n\n@Injectable({providedIn: 'root'})\nexport class ImgSrcStyleBuilder extends StyleBuilder {\n buildStyles(url: string) {\n return {'content': url ? `url(${url})` : ''};\n }\n}\n\nexport class ImgSrcDirective extends BaseDirective2 {\n protected DIRECTIVE_KEY = 'img-src';\n protected defaultSrc = '';\n\n @Input('src')\n set src(val: string) {\n this.defaultSrc = val;\n this.setValue(this.defaultSrc, '');\n }\n\n constructor(protected elementRef: ElementRef,\n protected styleBuilder: ImgSrcStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller,\n @Inject(PLATFORM_ID) protected platformId: Object,\n @Inject(SERVER_TOKEN) protected serverModuleLoaded: boolean) {\n super(elementRef, styleBuilder, styler, marshal);\n this.init();\n this.setValue(this.nativeElement.getAttribute('src') || '', '');\n if (isPlatformServer(this.platformId) && this.serverModuleLoaded) {\n this.nativeElement.setAttribute('src', '');\n }\n }\n\n /**\n * Use the [responsively] activated input value to update\n * the host img src attribute or assign a default `img.src=''`\n * if the src has not been defined.\n *\n * Do nothing to standard `<img src=\"\">` usages, only when responsive\n * keys are present do we actually call `setAttribute()`\n */\n protected updateWithValue(value?: string) {\n const url = value || this.defaultSrc;\n if (isPlatformServer(this.platformId) && this.serverModuleLoaded) {\n this.addStyles(url);\n } else {\n this.nativeElement.setAttribute('src', url);\n }\n }\n\n protected styleCache = imgSrcCache;\n}\n\nconst imgSrcCache: Map<string, StyleDefinition> = new Map();\n\nconst inputs = [\n 'src.xs', 'src.sm', 'src.md', 'src.lg', 'src.xl',\n 'src.lt-sm', 'src.lt-md', 'src.lt-lg', 'src.lt-xl',\n 'src.gt-xs', 'src.gt-sm', 'src.gt-md', 'src.gt-lg'\n];\n\nconst selector = `\n img[src.xs], img[src.sm], img[src.md], img[src.lg], img[src.xl],\n img[src.lt-sm], img[src.lt-md], img[src.lt-lg], img[src.lt-xl],\n img[src.gt-xs], img[src.gt-sm], img[src.gt-md], img[src.gt-lg]\n`;\n\n/**\n * This directive provides a responsive API for the HTML <img> 'src' attribute\n * and will update the img.src property upon each responsive activation.\n *\n * e.g.\n * <img src=\"defaultScene.jpg\" src.xs=\"mobileScene.jpg\"></img>\n *\n * @see https://css-tricks.com/responsive-images-youre-just-changing-resolutions-use-src/\n */\n@Directive({selector, inputs})\nexport class DefaultImgSrcDirective extends ImgSrcDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, DoCheck, ElementRef, Input, Optional, Self} from '@angular/core';\nimport {NgClass, ɵNgClassImpl, ɵNgClassR2Impl} from '@angular/common';\nimport {BaseDirective2, StyleUtils, MediaMarshaller} from '@angular/flex-layout/core';\n\nexport class ClassDirective extends BaseDirective2 implements DoCheck {\n\n protected DIRECTIVE_KEY = 'ngClass';\n\n /**\n * Capture class assignments so we cache the default classes\n * which are merged with activated styles and used as fallbacks.\n */\n @Input('class')\n set klass(val: string) {\n this.ngClassInstance.klass = val;\n this.setValue(val, '');\n }\n\n constructor(protected elementRef: ElementRef,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller,\n protected delegate: ɵNgClassImpl,\n @Optional() @Self() protected readonly ngClassInstance: NgClass) {\n super(elementRef, null!, styler, marshal);\n if (!this.ngClassInstance) {\n // Create an instance NgClass Directive instance only if `ngClass=\"\"` has NOT been defined on\n // the same host element; since the responsive variations may be defined...\n this.ngClassInstance = new NgClass(this.delegate);\n }\n this.init();\n this.setValue('', '');\n }\n\n protected updateWithValue(value: any) {\n this.ngClassInstance.ngClass = value;\n this.ngClassInstance.ngDoCheck();\n }\n\n // ******************************************************************\n // Lifecycle Hooks\n // ******************************************************************\n\n /**\n * For ChangeDetectionStrategy.onPush and ngOnChanges() updates\n */\n ngDoCheck() {\n this.ngClassInstance.ngDoCheck();\n }\n}\n\nconst inputs = [\n 'ngClass', 'ngClass.xs', 'ngClass.sm', 'ngClass.md', 'ngClass.lg', 'ngClass.xl',\n 'ngClass.lt-sm', 'ngClass.lt-md', 'ngClass.lt-lg', 'ngClass.lt-xl',\n 'ngClass.gt-xs', 'ngClass.gt-sm', 'ngClass.gt-md', 'ngClass.gt-lg'\n];\n\nconst selector = `\n [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl],\n [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl],\n [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]\n`;\n\n// tslint:disable-next-line:variable-name\nexport const LayoutNgClassImplProvider = {\n provide: ɵNgClassImpl,\n useClass: ɵNgClassR2Impl\n};\n\n/**\n * Directive to add responsive support for ngClass.\n * This maintains the core functionality of 'ngClass' and adds responsive API\n * Note: this class is a no-op when rendered on the server\n */\n@Directive({selector, inputs, providers: [LayoutNgClassImplProvider]})\nexport class DefaultClassDirective extends ClassDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n Directive,\n ElementRef,\n OnChanges,\n SimpleChanges,\n Optional,\n Inject,\n PLATFORM_ID,\n Injectable,\n AfterViewInit,\n} from '@angular/core';\nimport {isPlatformServer} from '@angular/common';\nimport {\n BaseDirective2,\n LAYOUT_CONFIG,\n LayoutConfigOptions,\n MediaMarshaller,\n SERVER_TOKEN,\n StyleUtils,\n StyleBuilder,\n} from '@angular/flex-layout/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {takeUntil} from 'rxjs/operators';\n\nexport interface ShowHideParent {\n display: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class ShowHideStyleBuilder extends StyleBuilder {\n buildStyles(show: string, parent: ShowHideParent) {\n const shouldShow = show === 'true';\n return {'display': shouldShow ? parent.display : 'none'};\n }\n}\n\nexport class ShowHideDirective extends BaseDirective2 implements AfterViewInit, OnChanges {\n protected DIRECTIVE_KEY = 'show-hide';\n\n /** Original dom Elements CSS display style */\n protected display: string = '';\n protected hasLayout = false;\n protected hasFlexChild = false;\n\n constructor(protected elementRef: ElementRef,\n protected styleBuilder: ShowHideStyleBuilder,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller,\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n @Inject(PLATFORM_ID) protected platformId: Object,\n @Optional() @Inject(SERVER_TOKEN) protected serverModuleLoaded: boolean) {\n super(elementRef, styleBuilder, styler, marshal);\n }\n\n // *********************************************\n // Lifecycle Methods\n // *********************************************\n\n ngAfterViewInit() {\n this.trackExtraTriggers();\n\n const children = Array.from(this.nativeElement.children);\n for (let i = 0; i < children.length; i++) {\n if (this.marshal.hasValue(children[i] as HTMLElement, 'flex')) {\n this.hasFlexChild = true;\n break;\n }\n }\n\n if (DISPLAY_MAP.has(this.nativeElement)) {\n this.display = DISPLAY_MAP.get(this.nativeElement)!;\n } else {\n this.display = this.getDisplayStyle();\n DISPLAY_MAP.set(this.nativeElement, this.display);\n }\n\n this.init();\n // set the default to show unless explicitly overridden\n const defaultValue = this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY, '');\n if (defaultValue === undefined || defaultValue === '') {\n this.setValue(true, '');\n } else {\n this.triggerUpdate();\n }\n }\n\n /**\n * On changes to any @Input properties...\n * Default to use the non-responsive Input value ('fxShow')\n * Then conditionally override with the mq-activated Input's current value\n */\n ngOnChanges(changes: SimpleChanges) {\n Object.keys(changes).forEach(key => {\n if (this.inputs.indexOf(key) !== -1) {\n const inputKey = key.split('.');\n const bp = inputKey.slice(1).join('.');\n const inputValue = changes[key].currentValue;\n let shouldShow = inputValue !== '' ?\n inputValue !== 0 ? coerceBooleanProperty(inputValue) : false\n : true;\n if (inputKey[0] === 'fxHide') {\n shouldShow = !shouldShow;\n }\n this.setValue(shouldShow, bp);\n }\n });\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n /**\n * Watch for these extra triggers to update fxShow, fxHide stylings\n */\n protected trackExtraTriggers() {\n this.hasLayout = this.marshal.hasValue(this.nativeElement, 'layout');\n\n ['layout', 'layout-align'].forEach(key => {\n this.marshal\n .trackValue(this.nativeElement, key)\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.triggerUpdate.bind(this));\n });\n }\n\n /**\n * Override accessor to the current HTMLElement's `display` style\n * Note: Show/Hide will not change the display to 'flex' but will set it to 'block'\n * unless it was already explicitly specified inline or in a CSS stylesheet.\n */\n protected getDisplayStyle(): string {\n return (this.hasLayout || (this.hasFlexChild && this.layoutConfig.addFlexToParent)) ?\n 'flex' : this.styler.lookupStyle(this.nativeElement, 'display', true);\n }\n\n /** Validate the visibility value and then update the host's inline display style */\n protected updateWithValue(value: boolean | string = true) {\n if (value === '') {\n return;\n }\n this.addStyles(value ? 'true' : 'false', {display: this.display});\n if (isPlatformServer(this.platformId) && this.serverModuleLoaded) {\n this.nativeElement.style.setProperty('display', '');\n }\n this.marshal.triggerUpdate(this.parentElement!, 'layout-gap');\n }\n}\n\nconst DISPLAY_MAP: WeakMap<HTMLElement, string> = new WeakMap();\n\nconst inputs = [\n 'fxShow', 'fxShow.print',\n 'fxShow.xs', 'fxShow.sm', 'fxShow.md', 'fxShow.lg', 'fxShow.xl',\n 'fxShow.lt-sm', 'fxShow.lt-md', 'fxShow.lt-lg', 'fxShow.lt-xl',\n 'fxShow.gt-xs', 'fxShow.gt-sm', 'fxShow.gt-md', 'fxShow.gt-lg',\n 'fxHide', 'fxHide.print',\n 'fxHide.xs', 'fxHide.sm', 'fxHide.md', 'fxHide.lg', 'fxHide.xl',\n 'fxHide.lt-sm', 'fxHide.lt-md', 'fxHide.lt-lg', 'fxHide.lt-xl',\n 'fxHide.gt-xs', 'fxHide.gt-sm', 'fxHide.gt-md', 'fxHide.gt-lg'\n];\n\nconst selector = `\n [fxShow], [fxShow.print],\n [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl],\n [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl],\n [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg],\n [fxHide], [fxHide.print],\n [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl],\n [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl],\n [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]\n`;\n\n/**\n * 'show' Layout API directive\n */\n@Directive({selector, inputs})\nexport class DefaultShowHideDirective extends ShowHideDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport type NgStyleRawList = string[];\nexport type NgStyleMap = {[klass: string]: string};\n// NgStyle selectors accept NgStyleType values\nexport type NgStyleType = string | Set<string> | NgStyleRawList | NgStyleMap;\n\n/**\n * Callback function for SecurityContext.STYLE sanitization\n */\nexport type NgStyleSanitizer = (val: any) => string;\n\n/** NgStyle allowed inputs */\nexport class NgStyleKeyValue {\n constructor(public key: string, public value: string, noQuotes = true) {\n this.key = noQuotes ? key.replace(/['\"]/g, '').trim() : key.trim();\n\n this.value = noQuotes ? value.replace(/['\"]/g, '').trim() : value.trim();\n this.value = this.value.replace(/;/, '');\n }\n}\n\nexport function getType(target: any): string {\n let what = typeof target;\n if (what === 'object') {\n return (target.constructor === Array) ? 'array' :\n (target.constructor === Set) ? 'set' : 'object';\n }\n return what;\n}\n\n/**\n * Split string of key:value pairs into Array of k-v pairs\n * e.g. 'key:value; key:value; key:value;' -> ['key:value',...]\n */\nexport function buildRawList(source: any, delimiter = ';'): NgStyleRawList {\n return String(source)\n .trim()\n .split(delimiter)\n .map((val: string) => val.trim())\n .filter(val => val !== '');\n}\n\n/** Convert array of key:value strings to a iterable map object */\nexport function buildMapFromList(styles: NgStyleRawList, sanitize?: NgStyleSanitizer): NgStyleMap {\n const sanitizeValue = (it: NgStyleKeyValue) => {\n if (sanitize) {\n it.value = sanitize(it.value);\n }\n return it;\n };\n\n return styles\n .map(stringToKeyValue)\n .filter(entry => !!entry)\n .map(sanitizeValue)\n .reduce(keyValuesToMap, {} as NgStyleMap);\n}\n\n/** Convert Set<string> or raw Object to an iterable NgStyleMap */\nexport function buildMapFromSet(source: NgStyleType, sanitize?: NgStyleSanitizer): NgStyleMap {\n let list: string[] = [];\n if (getType(source) === 'set') {\n (source as Set<string>).forEach(entry => list.push(entry));\n } else {\n Object.keys(source).forEach((key: string) => {\n list.push(`${key}:${(source as NgStyleMap)[key]}`);\n });\n }\n return buildMapFromList(list, sanitize);\n}\n\n\n/** Convert 'key:value' -> [key, value] */\nexport function stringToKeyValue(it: string): NgStyleKeyValue {\n const [key, ...vals] = it.split(':');\n return new NgStyleKeyValue(key, vals.join(':'));\n}\n\n/** Convert [ [key,value] ] -> { key : value } */\nexport function keyValuesToMap(map: NgStyleMap, entry: NgStyleKeyValue): NgStyleMap {\n if (!!entry.key) {\n map[entry.key] = entry.value;\n }\n return map;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n Directive,\n DoCheck,\n ElementRef,\n Inject,\n Optional,\n PLATFORM_ID,\n SecurityContext,\n Self,\n} from '@angular/core';\nimport {isPlatformServer, NgStyle, ɵNgStyleImpl, ɵNgStyleR2Impl} from '@angular/common';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {\n BaseDirective2,\n StyleUtils,\n MediaMarshaller,\n SERVER_TOKEN,\n} from '@angular/flex-layout/core';\n\nimport {\n NgStyleRawList,\n NgStyleType,\n NgStyleSanitizer,\n buildRawList,\n getType,\n buildMapFromSet,\n NgStyleMap,\n NgStyleKeyValue,\n stringToKeyValue,\n keyValuesToMap,\n} from './style-transforms';\n\nexport class StyleDirective extends BaseDirective2 implements DoCheck {\n\n protected DIRECTIVE_KEY = 'ngStyle';\n protected fallbackStyles: NgStyleMap;\n protected isServer: boolean;\n\n constructor(protected elementRef: ElementRef,\n protected styler: StyleUtils,\n protected marshal: MediaMarshaller,\n protected delegate: ɵNgStyleImpl,\n protected sanitizer: DomSanitizer,\n @Optional() @Self() private readonly ngStyleInstance: NgStyle,\n @Optional() @Inject(SERVER_TOKEN) serverLoaded: boolean,\n @Inject(PLATFORM_ID) platformId: Object) {\n super(elementRef, null!, styler, marshal);\n if (!this.ngStyleInstance) {\n // Create an instance NgClass Directive instance only if `ngClass=\"\"` has NOT been\n // defined on the same host element; since the responsive variations may be defined...\n this.ngStyleInstance = new NgStyle(this.delegate);\n }\n this.init();\n const styles = this.nativeElement.getAttribute('style') || '';\n this.fallbackStyles = this.buildStyleMap(styles);\n this.isServer = serverLoaded && isPlatformServer(platformId);\n }\n\n /** Add generated styles */\n protected updateWithValue(value: any) {\n const styles = this.buildStyleMap(value);\n this.ngStyleInstance.ngStyle = {...this.fallbackStyles, ...styles};\n if (this.isServer) {\n this.applyStyleToElement(styles);\n }\n this.ngStyleInstance.ngDoCheck();\n }\n\n /** Remove generated styles */\n protected clearStyles() {\n this.ngStyleInstance.ngStyle = this.fallbackStyles;\n this.ngStyleInstance.ngDoCheck();\n }\n\n /**\n * Convert raw strings to ngStyleMap; which is required by ngStyle\n * NOTE: Raw string key-value pairs MUST be delimited by `;`\n * Comma-delimiters are not supported due to complexities of\n * possible style values such as `rgba(x,x,x,x)` and others\n */\n protected buildStyleMap(styles: NgStyleType): NgStyleMap {\n // Always safe-guard (aka sanitize) style property values\n const sanitizer: NgStyleSanitizer = (val: any) =>\n this.sanitizer.sanitize(SecurityContext.STYLE, val) || '';\n if (styles) {\n switch (getType(styles)) {\n case 'string': return buildMapFromList(buildRawList(styles),\n sanitizer);\n case 'array' : return buildMapFromList(styles as NgStyleRawList, sanitizer);\n case 'set' : return buildMapFromSet(styles, sanitizer);\n default : return buildMapFromSet(styles, sanitizer);\n }\n }\n\n return {};\n }\n\n // ******************************************************************\n // Lifecycle Hooks\n // ******************************************************************\n\n /** For ChangeDetectionStrategy.onPush and ngOnChanges() updates */\n ngDoCheck() {\n this.ngStyleInstance.ngDoCheck();\n }\n}\n\nconst inputs = [\n 'ngStyle',\n 'ngStyle.xs', 'ngStyle.sm', 'ngStyle.md', 'ngStyle.lg', 'ngStyle.xl',\n 'ngStyle.lt-sm', 'ngStyle.lt-md', 'ngStyle.lt-lg', 'ngStyle.lt-xl',\n 'ngStyle.gt-xs', 'ngStyle.gt-sm', 'ngStyle.gt-md', 'ngStyle.gt-lg'\n];\n\nconst selector = `\n [ngStyle],\n [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl],\n [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl],\n [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]\n`;\n\n// tslint:disable-next-line:variable-name\nexport const LayoutNgStyleImplProvider = {\n provide: ɵNgStyleImpl,\n useClass: ɵNgStyleR2Impl\n};\n\n/**\n * Directive to add responsive support for ngStyle.\n *\n */\n@Directive({selector, inputs, providers: [LayoutNgStyleImplProvider]})\nexport class DefaultStyleDirective extends StyleDirective implements DoCheck {\n protected inputs = inputs;\n}\n\n/** Build a styles map from a list of styles, while sanitizing bad values first */\nfunction buildMapFromList(styles: NgStyleRawList, sanitize?: NgStyleSanitizer): NgStyleMap {\n const sanitizeValue = (it: NgStyleKeyValue) => {\n if (sanitize) {\n it.value = sanitize(it.value);\n }\n return it;\n };\n\n return styles\n .map(stringToKeyValue)\n .filter(entry => !!entry)\n .map(sanitizeValue)\n .reduce(keyValuesToMap, {} as NgStyleMap);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\nimport {CoreModule} from '@angular/flex-layout/core';\n\nimport {DefaultImgSrcDirective} from './img-src/img-src';\nimport {DefaultClassDirective} from './class/class';\nimport {DefaultShowHideDirective} from './show-hide/show-hide';\nimport {DefaultStyleDirective} from './style/style';\n\n\nconst ALL_DIRECTIVES = [\n DefaultShowHideDirective,\n DefaultClassDirective,\n DefaultStyleDirective,\n DefaultImgSrcDirective\n];\n\n/**\n * *****************************************************************\n * Define module for the Extended API\n * *****************************************************************\n */\n\n@NgModule({\n imports: [CoreModule],\n declarations: [...ALL_DIRECTIVES],\n exports: [...ALL_DIRECTIVES]\n})\nexport class ExtendedModule {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport const INLINE = 'inline';\nexport const LAYOUT_VALUES = ['row', 'column', 'row-reverse', 'column-reverse'];\n\n/**\n * Validate the direction|'direction wrap' value and then update the host's inline flexbox styles\n */\nexport function buildLayoutCSS(value: string) {\n let [direction, wrap, isInline] = validateValue(value);\n return buildCSS(direction, wrap, isInline);\n }\n\n/**\n * Validate the value to be one of the acceptable value options\n * Use default fallback of 'row'\n */\nexport function validateValue(value: string): [string, string, boolean] {\n value = value ? value.toLowerCase() : '';\n let [direction, wrap, inline] = value.split(' ');\n\n // First value must be the `flex-direction`\n if (!LAYOUT_VALUES.find(x => x === direction)) {\n direction = LAYOUT_VALUES[0];\n }\n\n if (wrap === INLINE) {\n wrap = (inline !== INLINE) ? inline : '';\n inline = INLINE;\n }\n\n return [direction, validateWrapValue(wrap), !!inline];\n}\n\n/**\n * Determine if the validated, flex-direction value specifies\n * a horizontal/row flow.\n */\nexport function isFlowHorizontal(value: string): boolean {\n let [flow, ] = validateValue(value);\n return flow.indexOf('row') > -1;\n}\n\n/**\n * Convert layout-wrap='<value>' to expected flex-wrap style\n */\nexport function validateWrapValue(value: string) {\n if (!!value) {\n switch (value.toLowerCase()) {\n case 'reverse':\n case 'wrap-reverse':\n case 'reverse-wrap':\n value = 'wrap-reverse';\n break;\n\n case 'no':\n case 'none':\n case 'nowrap':\n value = 'nowrap';\n break;\n\n // All other values fallback to 'wrap'\n default:\n value = 'wrap';\n break;\n }\n }\n return value;\n}\n\n/**\n * Build the CSS that should be assigned to the element instance\n * BUG:\n * 1) min-height on a column flex container won’t apply to its flex item children in IE 10-11.\n * Use height instead if possible; height : <xxx>vh;\n *\n * This way any padding or border specified on the child elements are\n * laid out and drawn inside that element's specified width and height.\n */\nfunction buildCSS(direction: string, wrap: string | null = null, inline = false) {\n return {\n 'display': inline ? 'inline-flex' : 'flex',\n 'box-sizing': 'border-box',\n 'flex-direction': direction,\n 'flex-wrap': !!wrap ? wrap : null\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, OnChanges, Injectable, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n MediaMarshaller,\n} from '@angular/flex-layout/core';\n\nimport {buildLayoutCSS} from '../../utils/layout-validator';\n\n@Injectable({providedIn: 'root'})\nexport class LayoutStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n return buildLayoutCSS(input);\n }\n}\n\nconst inputs = [\n 'fxLayout', 'fxLayout.xs', 'fxLayout.sm', 'fxLayout.md',\n 'fxLayout.lg', 'fxLayout.xl', 'fxLayout.lt-sm', 'fxLayout.lt-md',\n 'fxLayout.lt-lg', 'fxLayout.lt-xl', 'fxLayout.gt-xs', 'fxLayout.gt-sm',\n 'fxLayout.gt-md', 'fxLayout.gt-lg'\n];\nconst selector = `\n [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md],\n [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md],\n [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm],\n [fxLayout.gt-md], [fxLayout.gt-lg]\n`;\n\n/**\n * 'layout' flexbox styling directive\n * Defines the positioning flow direction for the child elements: row or column\n * Optional values: column or row (default)\n * @see https://css-tricks.com/almanac/properties/f/flex-direction/\n *\n */\nexport class LayoutDirective extends BaseDirective2 implements OnChanges {\n\n protected DIRECTIVE_KEY = 'layout';\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: LayoutStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n protected styleCache = layoutCache;\n}\n\n@Directive({selector, inputs})\nexport class DefaultLayoutDirective extends LayoutDirective {\n protected inputs = inputs;\n}\n\nconst layoutCache: Map<string, StyleDefinition> = new Map();\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n Directive,\n ElementRef,\n Optional,\n OnDestroy,\n NgZone,\n Injectable,\n AfterContentInit,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n MediaMarshaller,\n ElementMatcher,\n} from '@angular/flex-layout/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {LAYOUT_VALUES} from '../../utils/layout-validator';\n\nexport interface LayoutGapParent {\n directionality: string;\n items: HTMLElement[];\n layout: string;\n}\n\nconst CLEAR_MARGIN_CSS = {\n 'margin-left': null,\n 'margin-right': null,\n 'margin-top': null,\n 'margin-bottom': null\n};\n\n@Injectable({providedIn: 'root'})\nexport class LayoutGapStyleBuilder extends StyleBuilder {\n constructor(private _styler: StyleUtils) {\n super();\n }\n\n buildStyles(gapValue: string, parent: LayoutGapParent) {\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n\n // Add the margin to the host element\n return buildGridMargin(gapValue, parent.directionality);\n } else {\n return {};\n }\n }\n\n sideEffect(gapValue: string, _styles: StyleDefinition, parent: LayoutGapParent) {\n const items = parent.items;\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n // For each `element` children, set the padding\n const paddingStyles = buildGridPadding(gapValue, parent.directionality);\n this._styler.applyStyleToElements(paddingStyles, parent.items);\n } else {\n const lastItem = items.pop()!;\n\n // For each `element` children EXCEPT the last,\n // set the margin right/bottom styles...\n const gapCss = buildGapCSS(gapValue, parent);\n this._styler.applyStyleToElements(gapCss, items);\n\n // Clear all gaps for all visible elements\n this._styler.applyStyleToElements(CLEAR_MARGIN_CSS, [lastItem]);\n }\n }\n}\n\nconst inputs = [\n 'fxLayoutGap', 'fxLayoutGap.xs', 'fxLayoutGap.sm', 'fxLayoutGap.md',\n 'fxLayoutGap.lg', 'fxLayoutGap.xl', 'fxLayoutGap.lt-sm', 'fxLayoutGap.lt-md',\n 'fxLayoutGap.lt-lg', 'fxLayoutGap.lt-xl', 'fxLayoutGap.gt-xs', 'fxLayoutGap.gt-sm',\n 'fxLayoutGap.gt-md', 'fxLayoutGap.gt-lg'\n];\nconst selector = `\n [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md],\n [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md],\n [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm],\n [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]\n`;\n\n/**\n * 'layout-padding' styling directive\n * Defines padding of child elements in a layout container\n */\nexport class LayoutGapDirective extends BaseDirective2 implements AfterContentInit, OnDestroy {\n protected layout = 'row'; // default flex-direction\n protected DIRECTIVE_KEY = 'layout-gap';\n protected observerSubject = new Subject<void>();\n\n /** Special accessor to query for all child 'element' nodes regardless of type, class, etc */\n protected get childrenNodes(): HTMLElement[] {\n const obj = this.nativeElement.children;\n const buffer: any[] = [];\n\n // iterate backwards ensuring that length is an UInt32\n for (let i = obj.length; i--;) {\n buffer[i] = obj[i];\n }\n return buffer;\n }\n\n constructor(protected elRef: ElementRef,\n protected zone: NgZone,\n protected directionality: Directionality,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: LayoutGapStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n const extraTriggers = [this.directionality.change, this.observerSubject.asObservable()];\n this.init(extraTriggers);\n this.marshal\n .trackValue(this.nativeElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n }\n\n // *********************************************\n // Lifecycle Methods\n // *********************************************\n\n ngAfterContentInit() {\n this.buildChildObservable();\n this.triggerUpdate();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n /**\n * Cache the parent container 'flex-direction' and update the 'margin' styles\n */\n protected onLayoutChange(matcher: ElementMatcher) {\n const layout: string = matcher.value;\n // Make sure to filter out 'wrap' option\n const direction = layout.split(' ');\n this.layout = direction[0];\n if (!LAYOUT_VALUES.find(x => x === this.layout)) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n\n /**\n *\n */\n protected updateWithValue(value: string) {\n // Gather all non-hidden Element nodes\n const items = this.childrenNodes\n .filter(el => el.nodeType === 1 && this.willDisplay(el))\n .sort((a, b) => {\n const orderA = +this.styler.lookupStyle(a, 'order');\n const orderB = +this.styler.lookupStyle(b, 'order');\n if (isNaN(orderA) || isNaN(orderB) || orderA === orderB) {\n return 0;\n } else {\n return orderA > orderB ? 1 : -1;\n }\n });\n\n if (items.length > 0) {\n const directionality = this.directionality.value;\n const layout = this.layout;\n if (layout === 'row' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheRowRtl;\n } else if (layout === 'row' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheRowLtr;\n } else if (layout === 'column' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheColumnRtl;\n } else if (layout === 'column' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheColumnLtr;\n }\n this.addStyles(value, {directionality, items, layout});\n }\n }\n\n /** We need to override clearStyles because in most cases mru isn't populated */\n protected clearStyles() {\n const gridMode = Object.keys(this.mru).length > 0;\n const childrenStyle = gridMode ? 'padding' :\n getMarginType(this.directionality.value, this.layout);\n\n // If there are styles on the parent remove them\n if (gridMode) {\n super.clearStyles();\n }\n\n // Then remove the children styles too\n this.styleUtils.applyStyleToElements({[childrenStyle]: ''}, this.childrenNodes);\n }\n\n /** Determine if an element will show or hide based on current activation */\n protected willDisplay(source: HTMLElement): boolean {\n const value = this.marshal.getValue(source, 'show-hide');\n return value === true ||\n (value === undefined && this.styleUtils.lookupStyle(source, 'display') !== 'none');\n }\n\n protected buildChildObservable(): void {\n this.zone.runOutsideAngular(() => {\n if (typeof MutationObserver !== 'undefined') {\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\n const validatedChanges = (it: MutationRecord): boolean => {\n return (it.addedNodes && it.addedNodes.length > 0) ||\n (it.removedNodes && it.removedNodes.length > 0);\n };\n\n // update gap styles only for child 'added' or 'removed' events\n if (mutations.some(validatedChanges)) {\n this.observerSubject.next();\n }\n });\n this.observer.observe(this.nativeElement, {childList: true});\n }\n });\n }\n\n protected observer?: MutationObserver;\n}\n\n@Directive({selector, inputs})\nexport class DefaultLayoutGapDirective extends LayoutGapDirective {\n protected inputs = inputs;\n}\n\nconst layoutGapCacheRowRtl: Map<string, StyleDefinition> = new Map();\nconst layoutGapCacheColumnRtl: Map<string, StyleDefinition> = new Map();\nconst layoutGapCacheRowLtr: Map<string, StyleDefinition> = new Map();\nconst layoutGapCacheColumnLtr: Map<string, StyleDefinition> = new Map();\n\nconst GRID_SPECIFIER = ' grid';\n\nfunction buildGridPadding(value: string, directionality: string): StyleDefinition {\n let paddingTop = '0px', paddingRight = '0px', paddingBottom = value, paddingLeft = '0px';\n\n if (directionality === 'rtl') {\n paddingLeft = value;\n } else {\n paddingRight = value;\n }\n\n return {'padding': `${paddingTop} ${paddingRight} ${paddingBottom} ${paddingLeft}`};\n}\n\nfunction buildGridMargin(value: string, directionality: string): StyleDefinition {\n let marginTop = '0px', marginRight = '0px', marginBottom = '-' + value, marginLeft = '0px';\n\n if (directionality === 'rtl') {\n marginLeft = '-' + value;\n } else {\n marginRight = '-' + value;\n }\n\n return {'margin': `${marginTop} ${marginRight} ${marginBottom} ${marginLeft}`};\n}\n\nfunction getMarginType(directionality: string, layout: string) {\n switch (layout) {\n case 'column':\n return 'margin-bottom';\n case 'column-reverse':\n return 'margin-top';\n case 'row':\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n case 'row-reverse':\n return directionality === 'rtl' ? 'margin-right' : 'margin-left';\n default :\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n }\n}\n\nfunction buildGapCSS(gapValue: string,\n parent: {directionality: string, layout: string}): StyleDefinition {\n const key = getMarginType(parent.directionality, parent.layout);\n const margins: {[key: string]: string | null} = {...CLEAR_MARGIN_CSS};\n margins[key] = gapValue;\n return margins;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Inject, Injectable, Input} from '@angular/core';\nimport {\n BaseDirective2,\n LayoutConfigOptions,\n LAYOUT_CONFIG,\n StyleUtils,\n validateBasis,\n StyleBuilder,\n StyleDefinition,\n MediaMarshaller,\n ElementMatcher,\n} from '@angular/flex-layout/core';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {extendObject} from '../../utils/object-extend';\nimport {isFlowHorizontal} from '../../utils/layout-validator';\n\ninterface FlexBuilderParent {\n direction: string;\n hasWrap: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class FlexStyleBuilder extends StyleBuilder {\n constructor(@Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions) {\n super();\n }\n buildStyles(input: string, parent: FlexBuilderParent) {\n let [grow, shrink, ...basisParts]: (string|number)[] = input.split(' ');\n let basis = basisParts.join(' ');\n\n // The flex-direction of this element's flex container. Defaults to 'row'.\n const direction = (parent.direction.indexOf('column') > -1) ? 'column' : 'row';\n\n const max = isFlowHorizontal(direction) ? 'max-width' : 'max-height';\n const min = isFlowHorizontal(direction) ? 'min-width' : 'min-height';\n\n const hasCalc = String(basis).indexOf('calc') > -1;\n const usingCalc = hasCalc || (basis === 'auto');\n const isPercent = String(basis).indexOf('%') > -1 && !hasCalc;\n const hasUnits = String(basis).indexOf('px') > -1 || String(basis).indexOf('rem') > -1 ||\n String(basis).indexOf('em') > -1 || String(basis).indexOf('vw') > -1 ||\n String(basis).indexOf('vh') > -1;\n\n let isValue = (hasCalc || hasUnits);\n\n grow = (grow == '0') ? 0 : grow;\n shrink = (shrink == '0') ? 0 : shrink;\n\n // make box inflexible when shrink and grow are both zero\n // should not set a min when the grow is zero\n // should not set a max when the shrink is zero\n const isFixed = !grow && !shrink;\n\n let css: {[key: string]: string | number | null} = {};\n\n // flex-basis allows you to specify the initial/starting main-axis size of the element,\n // before anything else is computed. It can either be a percentage or an absolute value.\n // It is, however, not the breaking point for flex-grow/shrink properties\n //\n // flex-grow can be seen as this:\n // 0: Do not stretch. Either size to element's content width, or obey 'flex-basis'.\n // 1: (Default value). Stretch; will be the same size to all other flex items on\n // the same row since they have a default value of 1.\n // ≥2 (integer n): Stretch. Will be n times the size of other elements\n // with 'flex-grow: 1' on the same row.\n\n // Use `null` to clear existing styles.\n const clearStyles = {\n 'max-width': null,\n 'max-height': null,\n 'min-width': null,\n 'min-height': null\n };\n switch (basis || '') {\n case '':\n const useColumnBasisZero = this.layoutConfig.useColumnBasisZero !== false;\n basis = direction === 'row' ? '0%' : (useColumnBasisZero ? '0.000000001px' : 'auto');\n break;\n case 'initial': // default\n case 'nogrow':\n grow = 0;\n basis = 'auto';\n break;\n case 'grow':\n basis = '100%';\n break;\n case 'noshrink':\n shrink = 0;\n basis = 'auto';\n break;\n case 'auto':\n break;\n case 'none':\n grow = 0;\n shrink = 0;\n basis = 'auto';\n break;\n default:\n // Defaults to percentage sizing unless `px` is explicitly set\n if (!isValue && !isPercent && !isNaN(basis as any)) {\n basis = basis + '%';\n }\n\n // Fix for issue 280\n if (basis === '0%') {\n isValue = true;\n }\n\n if (basis === '0px') {\n basis = '0%';\n }\n\n // fix issue #5345\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': isValue ? basis : '100%'\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${isValue ? basis : '100%'}`\n });\n }\n\n break;\n }\n\n if (!(css['flex'] || css['flex-grow'])) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n }\n\n // Fix for issues 277, 534, and 728\n if (basis !== '0%' && basis !== '0px' && basis !== '0.000000001px' && basis !== 'auto') {\n css[min] = isFixed || (isValue && grow) ? basis : null;\n css[max] = isFixed || (!usingCalc && shrink) ? basis : null;\n }\n\n // Fix for issue 528\n if (!css[min] && !css[max]) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n } else {\n // Fix for issue 660\n if (parent.hasWrap) {\n css[hasCalc ? 'flex-basis' : 'flex'] = css[max] ?\n (hasCalc ? css[max] : `${grow} ${shrink} ${css[max]}`) :\n (hasCalc ? css[min] : `${grow} ${shrink} ${css[min]}`);\n }\n }\n\n return extendObject(css, {'box-sizing': 'border-box'}) as StyleDefinition;\n }\n}\n\nconst inputs = [\n 'fxFlex', 'fxFlex.xs', 'fxFlex.sm', 'fxFlex.md',\n 'fxFlex.lg', 'fxFlex.xl', 'fxFlex.lt-sm', 'fxFlex.lt-md',\n 'fxFlex.lt-lg', 'fxFlex.lt-xl', 'fxFlex.gt-xs', 'fxFlex.gt-sm',\n 'fxFlex.gt-md', 'fxFlex.gt-lg'\n];\nconst selector = `\n [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md],\n [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md],\n [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm],\n [fxFlex.gt-md], [fxFlex.gt-lg]\n`;\n\n/**\n * Directive to control the size of a flex item using flex-basis, flex-grow, and flex-shrink.\n * Corresponds to the css `flex` shorthand property.\n *\n * @see https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n */\nexport class FlexDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'flex';\n protected direction = '';\n protected wrap = false;\n\n\n @Input('fxShrink')\n get shrink(): string { return this.flexShrink; }\n set shrink(value: string) {\n this.flexShrink = value || '1';\n this.triggerReflow();\n }\n\n @Input('fxGrow')\n get grow(): string { return this.flexGrow; }\n set grow(value: string) {\n this.flexGrow = value || '1';\n this.triggerReflow();\n }\n\n protected flexGrow = '1';\n protected flexShrink = '1';\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n protected styleBuilder: FlexStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n if (this.parentElement) {\n this.marshal.trackValue(this.parentElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n this.marshal.trackValue(this.nativeElement, 'layout-align')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.triggerReflow.bind(this));\n }\n }\n\n /**\n * Caches the parent container's 'flex-direction' and updates the element's style.\n * Used as a handler for layout change events from the parent flex container.\n */\n protected onLayoutChange(matcher: ElementMatcher) {\n const layout: string = matcher.value;\n const layoutParts = layout.split(' ');\n this.direction = layoutParts[0];\n this.wrap = layoutParts[1] !== undefined && layoutParts[1] === 'wrap';\n this.triggerUpdate();\n }\n\n /** Input to this is exclusively the basis input value */\n protected updateWithValue(value: string) {\n const addFlexToParent = this.layoutConfig.addFlexToParent !== false;\n if (!this.direction) {\n this.direction = this.getFlexFlowDirection(this.parentElement!, addFlexToParent);\n }\n const direction = this.direction;\n const isHorizontal = direction.startsWith('row');\n const hasWrap = this.wrap;\n if (isHorizontal && hasWrap) {\n this.styleCache = flexRowWrapCache;\n } else if (isHorizontal && !hasWrap) {\n this.styleCache = flexRowCache;\n } else if (!isHorizontal && hasWrap) {\n this.styleCache = flexColumnWrapCache;\n } else if (!isHorizontal && !hasWrap) {\n this.styleCache = flexColumnCache;\n }\n const basis = String(value).replace(';', '');\n const parts = validateBasis(basis, this.flexGrow, this.flexShrink);\n this.addStyles(parts.join(' '), {direction, hasWrap});\n }\n\n /** Trigger a style reflow, usually based on a shrink/grow input event */\n protected triggerReflow() {\n const activatedValue = this.activatedValue;\n if (activatedValue !== undefined) {\n const parts = validateBasis(activatedValue, this.flexGrow, this.flexShrink);\n this.marshal.updateElement(this.nativeElement, this.DIRECTIVE_KEY, parts.join(' '));\n }\n }\n}\n\n@Directive({inputs, selector})\nexport class DefaultFlexDirective extends FlexDirective {\n protected inputs = inputs;\n}\n\nconst flexRowCache: Map<string, StyleDefinition> = new Map();\nconst flexColumnCache: Map<string, StyleDefinition> = new Map();\nconst flexRowWrapCache: Map<string, StyleDefinition> = new Map();\nconst flexColumnWrapCache: Map<string, StyleDefinition> = new Map();\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, OnChanges, Injectable, Optional} from '@angular/core';\nimport {\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n MediaMarshaller,\n} from '@angular/flex-layout/core';\n\n@Injectable({providedIn: 'root'})\nexport class FlexOrderStyleBuilder extends StyleBuilder {\n buildStyles(value: string) {\n return {order: (value && parseInt(value, 10)) || ''};\n }\n}\n\nconst inputs = [\n 'fxFlexOrder', 'fxFlexOrder.xs', 'fxFlexOrder.sm', 'fxFlexOrder.md',\n 'fxFlexOrder.lg', 'fxFlexOrder.xl', 'fxFlexOrder.lt-sm', 'fxFlexOrder.lt-md',\n 'fxFlexOrder.lt-lg', 'fxFlexOrder.lt-xl', 'fxFlexOrder.gt-xs', 'fxFlexOrder.gt-sm',\n 'fxFlexOrder.gt-md', 'fxFlexOrder.gt-lg'\n];\nconst selector = `\n [fxFlexOrder], [fxFlexOrder.xs], [fxFlexOrder.sm], [fxFlexOrder.md],\n [fxFlexOrder.lg], [fxFlexOrder.xl], [fxFlexOrder.lt-sm], [fxFlexOrder.lt-md],\n [fxFlexOrder.lt-lg], [fxFlexOrder.lt-xl], [fxFlexOrder.gt-xs], [fxFlexOrder.gt-sm],\n [fxFlexOrder.gt-md], [fxFlexOrder.gt-lg]\n`;\n\n/**\n * 'flex-order' flexbox styling directive\n * Configures the positional ordering of the element in a sorted layout container\n * @see https://css-tricks.com/almanac/properties/o/order/\n */\nexport class FlexOrderDirective extends BaseDirective2 implements OnChanges {\n\n protected DIRECTIVE_KEY = 'flex-order';\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: FlexOrderStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n protected styleCache = flexOrderCache;\n}\n\nconst flexOrderCache: Map<string, StyleDefinition> = new Map();\n\n@Directive({selector, inputs})\nexport class DefaultFlexOrderDirective extends FlexOrderDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n Directive,\n ElementRef,\n OnChanges,\n Optional,\n Injectable,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n MediaMarshaller,\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\nimport {takeUntil} from 'rxjs/operators';\n\nimport {isFlowHorizontal} from '../../utils/layout-validator';\n\nexport interface FlexOffsetParent {\n layout: string;\n isRtl: boolean;\n}\n\n@Injectable({providedIn: 'root'})\nexport class FlexOffsetStyleBuilder extends StyleBuilder {\n buildStyles(offset: string, parent: FlexOffsetParent) {\n if (offset === '') {\n offset = '0';\n }\n const isPercent = String(offset).indexOf('%') > -1;\n const isPx = String(offset).indexOf('px') > -1;\n if (!isPx && !isPercent && !isNaN(+offset)) {\n offset = offset + '%';\n }\n const horizontalLayoutKey = parent.isRtl ? 'margin-right' : 'margin-left';\n const styles: StyleDefinition = isFlowHorizontal(parent.layout) ?\n {[horizontalLayoutKey]: `${offset}`} : {'margin-top': `${offset}`};\n\n return styles;\n }\n}\n\nconst inputs = [\n 'fxFlexOffset', 'fxFlexOffset.xs', 'fxFlexOffset.sm', 'fxFlexOffset.md',\n 'fxFlexOffset.lg', 'fxFlexOffset.xl', 'fxFlexOffset.lt-sm', 'fxFlexOffset.lt-md',\n 'fxFlexOffset.lt-lg', 'fxFlexOffset.lt-xl', 'fxFlexOffset.gt-xs', 'fxFlexOffset.gt-sm',\n 'fxFlexOffset.gt-md', 'fxFlexOffset.gt-lg'\n];\nconst selector = `\n [fxFlexOffset], [fxFlexOffset.xs], [fxFlexOffset.sm], [fxFlexOffset.md],\n [fxFlexOffset.lg], [fxFlexOffset.xl], [fxFlexOffset.lt-sm], [fxFlexOffset.lt-md],\n [fxFlexOffset.lt-lg], [fxFlexOffset.lt-xl], [fxFlexOffset.gt-xs], [fxFlexOffset.gt-sm],\n [fxFlexOffset.gt-md], [fxFlexOffset.gt-lg]\n`;\n\n/**\n * 'flex-offset' flexbox styling directive\n * Configures the 'margin-left' of the element in a layout container\n */\nexport class FlexOffsetDirective extends BaseDirective2 implements OnChanges {\n protected DIRECTIVE_KEY = 'flex-offset';\n\n constructor(protected elRef: ElementRef,\n protected directionality: Directionality,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: FlexOffsetStyleBuilder,\n protected marshal: MediaMarshaller,\n protected styler: StyleUtils) {\n super(elRef, styleBuilder, styler, marshal);\n this.init([this.directionality.change]);\n // Parent DOM `layout-gap` with affect the nested child with `flex-offset`\n if (this.parentElement) {\n this.marshal\n .trackValue(this.parentElement, 'layout-gap')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.triggerUpdate.bind(this));\n }\n }\n\n // *********************************************\n // Protected methods\n // *********************************************\n\n /**\n * Using the current fxFlexOffset value, update the inline CSS\n * NOTE: this will assign `margin-left` if the parent flex-direction == 'row',\n * otherwise `margin-top` is used for the offset.\n */\n protected updateWithValue(value: string|number = ''): void {\n // The flex-direction of this element's flex container. Defaults to 'row'.\n const layout = this.getFlexFlowDirection(this.parentElement!, true);\n const isRtl = this.directionality.value === 'rtl';\n if (layout === 'row' && isRtl) {\n this.styleCache = flexOffsetCacheRowRtl;\n } else if (layout === 'row' && !isRtl) {\n this.styleCache = flexOffsetCacheRowLtr;\n } else if (layout === 'column' && isRtl) {\n this.styleCache = flexOffsetCacheColumnRtl;\n } else if (layout === 'column' && !isRtl) {\n this.styleCache = flexOffsetCacheColumnLtr;\n }\n this.addStyles(value + '', {layout, isRtl});\n }\n}\n\n@Directive({selector, inputs})\nexport class DefaultFlexOffsetDirective extends FlexOffsetDirective {\n protected inputs = inputs;\n}\n\nconst flexOffsetCacheRowRtl: Map<string, StyleDefinition> = new Map();\nconst flexOffsetCacheColumnRtl: Map<string, StyleDefinition> = new Map();\nconst flexOffsetCacheRowLtr: Map<string, StyleDefinition> = new Map();\nconst flexOffsetCacheColumnLtr: Map<string, StyleDefinition> = new Map();\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable, Optional} from '@angular/core';\nimport {\n MediaMarshaller,\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n} from '@angular/flex-layout/core';\n\n@Injectable({providedIn: 'root'})\nexport class FlexAlignStyleBuilder extends StyleBuilder {\n buildStyles(input: string) {\n input = input || 'stretch';\n const styles: StyleDefinition = {};\n\n // Cross-axis\n switch (input) {\n case 'start':\n styles['align-self'] = 'flex-start';\n break;\n case 'end':\n styles['align-self'] = 'flex-end';\n break;\n default:\n styles['align-self'] = input;\n break;\n }\n\n return styles;\n }\n}\n\nconst inputs = [\n 'fxFlexAlign', 'fxFlexAlign.xs', 'fxFlexAlign.sm', 'fxFlexAlign.md',\n 'fxFlexAlign.lg', 'fxFlexAlign.xl', 'fxFlexAlign.lt-sm', 'fxFlexAlign.lt-md',\n 'fxFlexAlign.lt-lg', 'fxFlexAlign.lt-xl', 'fxFlexAlign.gt-xs', 'fxFlexAlign.gt-sm',\n 'fxFlexAlign.gt-md', 'fxFlexAlign.gt-lg'\n];\nconst selector = `\n [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md],\n [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md],\n [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm],\n [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]\n`;\n\n/**\n * 'flex-align' flexbox styling directive\n * Allows element-specific overrides for cross-axis alignments in a layout container\n * @see https://css-tricks.com/almanac/properties/a/align-self/\n */\nexport class FlexAlignDirective extends BaseDirective2 {\n\n protected DIRECTIVE_KEY = 'flex-align';\n\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n // NOTE: not actually optional, but we need to force DI without a\n // constructor call\n @Optional() protected styleBuilder: FlexAlignStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.init();\n }\n\n protected styleCache = flexAlignCache;\n}\n\nconst flexAlignCache: Map<string, StyleDefinition> = new Map();\n\n@Directive({selector, inputs})\nexport class DefaultFlexAlignDirective extends FlexAlignDirective {\n protected inputs = inputs;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directive, ElementRef, Injectable} from '@angular/core';\nimport {\n BaseDirective2,\n StyleBuilder,\n StyleDefinition,\n StyleUtils,\n MediaMarshaller,\n} from '@angular/flex-layout/core';\n\nconst FLEX_FILL_CSS = {\n 'margin': 0,\n 'width': '100%',\n 'height': '100%',\n 'min-width': '100%',\n 'min-height': '100%'\n};\n\n@Injectable({providedIn: 'root'})\nexport class FlexFillStyleBuilder extends StyleBuilder {\n buildStyles(_input: string) {\n return FLEX_FILL_CSS;\n }\n}\n\n/**\n * 'fxFill' flexbox styling directive\n * Maximizes width and height of element in a layout container\n *\n * NOTE: fxFill is NOT responsive API!!\n */\n@Directive({selector: `[fxFill], [fxFlexFill]`})\nexport class FlexFillDirective extends BaseDirective2 {\n constructor(protected elRef: ElementRef,\n protected styleUtils: StyleUtils,\n protected styleBuilder: FlexFillStyleBuilder,\n protected marshal: MediaMarshaller) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.addStyles('');\n }\n\n protected styleCache = flexFillCache;\n}\n\nconst flexFillCache: Map<string, StyleDefinition> = new Map();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {APP_BOOTSTRAP_LISTENER, PLATFORM_ID, InjectionToken} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\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(_document.querySelectorAll(`[class*=${CLASS_NAME}]`));\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) : 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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {MediaChange} from './media-change';\nimport {BreakPoint} from './breakpoints/break-point';\n\n/**\n * For the specified MediaChange, make sure it contains the breakpoint alias\n * and suffix (if available).\n */\nexport function mergeAlias(dest: MediaChange, source: BreakPoint | null): MediaChange {\n dest = 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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n *\n * @param dest The object which will have properties copied to it.\n * @param sources The source objects from which properties will be copied.\n */\nexport function extendObject(dest: any, ...sources: any[]): any {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n\n for (let source of sources) {\n if (source != null) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n\n return dest;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {BreakPoint} from './break-point';\nimport {extendObject} from '../../utils/object-extend';\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(defaults: BreakPoint[], custom: BreakPoint[] = []): 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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\ninterface WithPriority {\n priority?: number;\n}\n\n/** HOF to sort the breakpoints by descending priority */\nexport function sortDescendingPriority<T extends WithPriority>(a: T | null, b: T | null): 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>(a: T, b: T): number {\n const pA = a.priority || 0;\n const pB = b.priority || 0;\n return pA - pB;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {BehaviorSubject, Observable, merge, 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 {\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\n constructor(protected _zone: NgZone,\n @Inject(PLATFORM_ID) protected _platformId: Object,\n @Inject(DOCUMENT) protected _document: any) {\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 !!mql ? mql.matches : false;\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(mediaQueries: string[], filterOthers: boolean): 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 return !filterOthers ? true : (mqList.indexOf(change.mediaQuery) > -1);\n })\n );\n const registration$: Observable<MediaChange> = new Observable((observer: Observer<MediaChange>) => { // 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 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);\n\n list.forEach((query: string) => {\n const onMQLEvent = (e: MediaQueryListEvent) => {\n this._zone.run(() => this.source.next(new MediaChange(e.matches, query)));\n };\n\n let mql = this.registry.get(query);\n if (!mql) {\n mql = this.buildMQL(query);\n mql.addListener(onMQLEvent);\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 /**\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(mediaQueries: string[], _document: Document) {\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 (!(styleEl as any).styleSheet) {\n const cssText = `\n/*\n @angular/flex-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\n } catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction constructMql(query: string, isBrowser: boolean): MediaQueryList {\n const canListen = isBrowser && !!(<Window>window).matchMedia('all').addListener;\n\n return canListen ? (<Window>window).matchMedia(query) : {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => {\n },\n removeListener: () => {\n }\n } as unknown as MediaQueryList;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable} from '@angular/core';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {BreakPoint} from '../breakpoints/break-point';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\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 {\n constructor(\n protected breakpoints: BreakPointRegistry,\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions) {\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 if (this.isPrintEvent(event)) {\n // Reset from 'print' to first (highest priority) print breakpoint\n bp = this.getEventBreakpoints(event)[0];\n event.mediaQuery = bp ? bp.mediaQuery : '';\n }\n return mergeAlias(event, bp);\n }\n\n /**\n * Prepare RxJs filter operator with partial application\n * @return pipeable filter 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\n } else if (!event.matches && this.isPrinting) {\n this.stopPrinting(target);\n target.updateStyles();\n }\n } else {\n this.collectActivations(event);\n }\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 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.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 not supported; so 'print' mediaQuery activations must be used.\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(event: MediaChange) {\n if (!this.isPrinting) {\n if (!event.matches) {\n const bp = this.breakpoints.findByQuery(event.mediaQuery);\n if (bp) { // Deactivating a breakpoint\n this.deactivations.push(bp);\n this.deactivations.sort(sortDescendingPriority);\n }\n } else {\n this.deactivations = [];\n }\n }\n }\n\n /** Is this service currently in Print-mode ? */\n private isPrinting = false;\n private queue: PrintQueue = new PrintQueue();\n private deactivations: BreakPoint[] = [];\n\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(it => it.mediaQuery === bp.mediaQuery);\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) ? [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) {\n return bp ? bp.mediaQuery.startsWith(PRINT) : false;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable, OnDestroy} from '@angular/core';\nimport {Subject, asapScheduler, Observable, of} from 'rxjs';\nimport {debounceTime, filter, map, switchMap, takeUntil} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {PrintHook} from '../media-marshaller/print-hook';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\n\nimport {sortDescendingPriority} from '../utils/sort';\nimport {coerceArray} from '../utils/array';\n\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 '@angular/flex-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\n /**\n * @deprecated Use `asObservable()` instead.\n * @breaking-change 8.0.0-beta.25\n * @deletion-target v8.0.0-beta.26\n */\n readonly media$: Observable<MediaChange>;\n\n /** Filter MediaChange notifications for overlapping breakpoints */\n filterOverlaps = false;\n\n constructor(protected breakpoints: BreakPointRegistry,\n protected matchMedia: MatchMedia,\n protected hook: PrintHook) {\n this._media$ = this.watchActivations();\n this.media$ = this._media$.pipe(\n filter((changes: MediaChange[]) => changes.length > 0),\n map((changes: MediaChange[]) => changes[0])\n );\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 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) => (change.mediaQuery.length > 0);\n return (changes.filter(isValidQuery).length > 0);\n };\n const excludeOverlaps = (changes: MediaChange[]) => {\n return !this.filterOverlaps ? changes : changes.filter(change => {\n const bp = this.breakpoints.findByQuery(change.mediaQuery);\n return !bp ? true : !bp.overlapping;\n });\n };\n\n /**\n */\n return this.matchMedia\n .observe(this.hook.withPrintQuery(mqList))\n .pipe(\n filter((change: MediaChange) => change.matches),\n debounceTime(0, asapScheduler),\n switchMap(_ => of(this.findAllActivations())),\n map(excludeOverlaps),\n filter(hasChanges),\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 let bp: OptionalBreakPoint = this.breakpoints.findByQuery(change.mediaQuery);\n return mergeAlias(change, bp);\n };\n const replaceWithPrintAlias = (change: MediaChange) => {\n return this.hook.isPrintEvent(change) ? this.hook.updateEvent(change) : change;\n };\n\n return this.matchMedia\n .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(query: string, locator: BreakPointRegistry) {\n const bp = locator.findByAlias(query) || locator.findByQuery(query);\n return bp ? bp.mediaQuery : query;\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.map((query: string) => query.split(','))\n .reduce((a1: string[], a2: string[]) => a1.concat(a2))\n .map(query => query.trim());\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Applies CSS prefixes to appropriate style keys.\n *\n * Note: `-ms-`, `-moz` and `-webkit-box` are no longer supported. e.g.\n * {\n * display: -webkit-flex; NEW - Safari 6.1+. iOS 7.1+, BB10\n * display: flex; NEW, Spec - Firefox, Chrome, Opera\n * // display: -webkit-box; OLD - iOS 6-, Safari 3.1-6, BB7\n * // display: -ms-flexbox; TWEENER - IE 10\n * // display: -moz-flexbox; OLD - Firefox\n * }\n */\nexport function applyCssPrefixes(target: {[key: string]: any | null}) {\n for (let key in target) {\n let value = target[key] || '';\n\n switch (key) {\n case 'display':\n if (value === 'flex') {\n target['display'] = [\n '-webkit-flex',\n 'flex'\n ];\n } else if (value === 'inline-flex') {\n target['display'] = [\n '-webkit-inline-flex',\n 'inline-flex'\n ];\n } else {\n target['display'] = value;\n }\n break;\n\n case 'align-items':\n case 'align-self':\n case 'align-content':\n case 'flex':\n case 'flex-basis':\n case 'flex-flow':\n case 'flex-grow':\n case 'flex-shrink':\n case 'flex-wrap':\n case 'justify-content':\n target['-webkit-' + key] = value;\n break;\n\n case 'flex-direction':\n value = value || 'row';\n target['-webkit-flex-direction'] = value;\n target['flex-direction'] = value;\n break;\n\n case 'order':\n target['order'] = target['-webkit-' + key] = isNaN(+value) ? '0' : value;\n break;\n }\n }\n return target;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\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(basis: string, grow = '1', shrink = '1'): 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 : [\n grow, shrink, basis\n ];\n }\n\n return parts;\n}\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\n\nimport {BROWSER_PROVIDER} from './browser-provider';\n\n/**\n * *****************************************************************\n * Define module for the MediaQuery API\n * *****************************************************************\n */\n\n@NgModule({\n providers: [BROWSER_PROVIDER]\n})\nexport class CoreModule {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport 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(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(this.matches, this.mediaQuery, this.mqAlias, this.suffix);\n }\n}\n\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {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\n readonly stylesheet = new Map<HTMLElement, Map<string, string|number>>();\n\n /**\n * Add an individual style to an HTML element\n */\n addStyleToElement(element: HTMLElement, style: string, value: string|number) {\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {InjectionToken} from '@angular/core';\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}\n\nexport const DEFAULT_CONFIG: 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};\n\nexport const LAYOUT_CONFIG = new InjectionToken<LayoutConfigOptions>(\n 'Flex Layout token, config options for the library', {\n providedIn: 'root',\n factory: () => DEFAULT_CONFIG\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {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 providedIn: 'root',\n factory: () => false\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {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 providedIn: 'root',\n factory: () => null\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\nimport {StyleDefinition, StyleUtils} from '../style-utils/style-utils';\nimport {StyleBuilder} from '../style-builder/style-builder';\nimport {MediaMarshaller} from '../media-marshaller/media-marshaller';\nimport {buildLayoutCSS} from '../../utils/layout-validator';\n\nexport abstract class BaseDirective2 implements OnChanges, OnDestroy {\n\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\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(this.nativeElement, this.DIRECTIVE_KEY, value,\n this.marshal.activatedAlias);\n }\n\n /** Cache map for style computation */\n protected styleCache: Map<string, StyleDefinition> = new Map();\n\n protected constructor(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 }\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(target: HTMLElement, addIfMissing = false): 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 /** Applies styles given via string pair or object map to the directive element */\n protected applyStyleToElement(style: StyleDefinition,\n value?: string | number,\n element: HTMLElement = this.nativeElement) {\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 this.addStyles(input);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {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.99px)',\n priority: 1000,\n },\n {\n alias: 'sm',\n mediaQuery: 'screen and (min-width: 600px) and (max-width: 959.99px)',\n priority: 900,\n },\n {\n alias: 'md',\n mediaQuery: 'screen and (min-width: 960px) and (max-width: 1279.99px)',\n priority: 800,\n },\n {\n alias: 'lg',\n mediaQuery: 'screen and (min-width: 1280px) and (max-width: 1919.99px)',\n priority: 700,\n },\n {\n alias: 'xl',\n mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.99px)',\n priority: 600,\n },\n {\n alias: 'lt-sm',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 599.99px)',\n priority: 950,\n },\n {\n alias: 'lt-md',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 959.99px)',\n priority: 850,\n },\n {\n alias: 'lt-lg',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 1279.99px)',\n priority: 750,\n },\n {\n alias: 'lt-xl',\n overlapping: true,\n priority: 650,\n mediaQuery: 'screen and (max-width: 1919.99px)',\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 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\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BreakPoint} from '../break-point';\n\n/* tslint:disable */\nconst HANDSET_PORTRAIT = '(orientation: portrait) and (max-width: 599.99px)';\nconst HANDSET_LANDSCAPE = '(orientation: landscape) and (max-width: 959.99px)';\n\nconst TABLET_PORTRAIT = '(orientation: portrait) and (min-width: 600px) and (max-width: 839.99px)';\nconst TABLET_LANDSCAPE = '(orientation: landscape) and (min-width: 960px) and (max-width: 1279.99px)';\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 {'alias': 'handset.landscape', priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_LANDSCAPE},\n {'alias': 'handset.portrait', priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_PORTRAIT},\n\n {'alias': 'tablet', priority: 2100, 'mediaQuery': ScreenTypes.TABLET},\n {'alias': 'tablet.landscape', priority: 2100, 'mediaQuery': ScreenTypes.TABLET},\n {'alias': 'tablet.portrait', priority: 2100, 'mediaQuery': ScreenTypes.TABLET_PORTRAIT},\n\n {'alias': 'web', priority: 2200, 'mediaQuery': ScreenTypes.WEB, overlapping : true },\n {'alias': 'web.landscape', priority: 2200, 'mediaQuery': ScreenTypes.WEB_LANDSCAPE, overlapping : true },\n {'alias': 'web.portrait', priority: 2200, 'mediaQuery': ScreenTypes.WEB_PORTRAIT, overlapping : true }\n];\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken} from '@angular/core';\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINT} from '../tokens/breakpoint-token';\nimport {DEFAULT_BREAKPOINTS} from '../breakpoints/data/break-points';\nimport {ORIENTATION_BREAKPOINTS} from '../breakpoints/data/orientation-break-points';\nimport {mergeByAlias} from '../breakpoints/breakpoint-tools';\nimport {LAYOUT_CONFIG} from '../tokens/library-config';\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 =\n new InjectionToken<BreakPoint[]>('Token (@angular/flex-layout) Breakpoints', {\n providedIn: 'root',\n factory: () => {\n const breakpoints: any = inject(BREAKPOINT);\n const layoutConfig = inject(LAYOUT_CONFIG);\n const bpFlattenArray: BreakPoint[] = [].concat.apply([], (breakpoints || [])\n .map((v: BreakPoint | BreakPoint[]) => Array.isArray(v) ? v : [v]));\n const builtIns = (layoutConfig.disableDefaultBps ? [] : DEFAULT_BREAKPOINTS)\n .concat(layoutConfig.addOrientationBps ? ORIENTATION_BREAKPOINTS : []);\n\n return mergeByAlias(builtIns, bpFlattenArray);\n }\n });\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Injectable, Inject} from '@angular/core';\n\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINTS} from './break-points-token';\nimport {sortAscendingPriority} from '../utils/sort';\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 ? null : 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 == true);\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 ? it.suffix : '');\n }\n\n /**\n * Memoized lookup using custom predicate function\n */\n private findWithPredicate(key: string,\n searchFn: (bp: BreakPoint) => boolean): 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 /**\n * Memoized BreakPoint Lookups\n */\n private readonly findByMap = new Map<String, OptionalBreakPoint>();\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {MatchMedia} from '../match-media';\nimport {BreakPointRegistry} from '../../breakpoints/break-point-registry';\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\n\n autoRegisterQueries = true; // Used for testing BreakPoint registrations\n useOverlaps = false; // Allow fallback to overlapping mediaQueries\n\n constructor(_zone: NgZone,\n @Inject(PLATFORM_ID) _platformId: Object,\n @Inject(DOCUMENT) _document: any,\n private _breakpoints: BreakPointRegistry) {\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 = false): boolean {\n useOverlaps = useOverlaps || this.useOverlaps;\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 /** Converts an optional mediaQuery alias to a specific, valid mediaQuery */\n _validateQuery(queryOrAlias: string) {\n const bp = this._breakpoints.findByAlias(queryOrAlias);\n return (bp && 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(mediaQuery: string, useOverlaps: boolean): boolean {\n if (useOverlaps) {\n const bp = this._breakpoints.findByQuery(mediaQuery);\n const alias = bp ? 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 // 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 ? bp.mediaQuery : alias);\n };\n aliases.split(',').forEach(alias => activate(alias.trim()));\n }\n\n /**\n *\n */\n private _activateByQuery(mediaQuery: string) {\n const mql: MockMediaQueryList = this.registry.get(mediaQuery) 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 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/**\n * Special internal class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class MockMediaQueryList 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 }\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) = callback!;\n cb.call(null, this);\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) = callback!;\n cb.call(null, this);\n });\n }\n return this;\n }\n\n /** Add a listener to our internal list to activate later */\n addListener(listener: MediaQueryListListener) {\n if (this._listeners.indexOf(listener) === -1) {\n this._listeners.push(listener);\n }\n if (this._isActive) {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = listener!;\n cb.call(null, this);\n }\n }\n\n /** Don't need to remove listeners in the testing environment */\n removeListener(_: MediaQueryListListener | null) {\n }\n\n addEventListener<K extends keyof MediaQueryListEventMap>(\n _: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | AddEventListenerOptions): void;\n\n addEventListener(\n _: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | AddEventListenerOptions) {\n }\n\n removeEventListener<K extends keyof MediaQueryListEventMap>(\n _: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | EventListenerOptions): void;\n\n removeEventListener(\n _: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | EventListenerOptions) {\n }\n\n dispatchEvent(_: Event): boolean {\n return false;\n }\n\n onchange: MediaQueryListListener = null;\n}\n\n/**\n * Pre-configured provider for MockMatchMedia\n */\nexport const MockMatchMediaProvider = { // tslint:disable-line:variable-name\n provide: MatchMedia,\n useClass: MockMatchMedia\n};\n\ntype MediaQueryListListener = ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\n\nimport {fromEvent, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\nimport {sortDescendingPriority} from '../utils/sort';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\n\n/**\n * Class\n */\n@Injectable({providedIn: 'root'})\nexport class MediaTrigger {\n\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\n this.deactivateAll();\n this.restoreRegistryMatches();\n this.setActivations(list);\n\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 = 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(change.mediaQuery);\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) => 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: 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() {\n return this.matchMedia.activations;\n }\n\n private hasCachedRegistryMatches = false;\n private originalActivations: MediaChange[] = [];\n private originalRegistry: Map<string, MediaQueryList> = new Map<string, MediaQueryList>();\n\n private resizeSubscription!: Subscription;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Inject, Injectable, Optional, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser, isPlatformServer} from '@angular/common';\n\nimport {applyCssPrefixes} from '../../utils/auto-prefixer';\nimport {StylesheetMap} from '../stylesheet-map/stylesheet-map';\nimport {SERVER_TOKEN} from '../tokens/server-token';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\n\n@Injectable({providedIn: 'root'})\nexport class StyleUtils {\n\n constructor(@Optional() private _serverStylesheet: StylesheetMap,\n @Optional() @Inject(SERVER_TOKEN) private _serverModuleLoaded: boolean,\n @Inject(PLATFORM_ID) private _platformId: Object,\n @Inject(LAYOUT_CONFIG) private layoutConfig: LayoutConfigOptions) {}\n\n /**\n * Applies styles given via string pair or object map to the directive element\n */\n applyStyleToElement(element: HTMLElement,\n style: StyleDefinition | string,\n value: string | number | null = null) {\n let styles: StyleDefinition = {};\n if (typeof style === 'string') {\n styles[style] = value;\n style = styles;\n }\n styles = this.layoutConfig.disableVendorPrefixes ? style : 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 ? style : 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 = this.lookupInlineStyle(target, query) ||\n (isPlatformServer(this._platformId) && this._serverModuleLoaded) ? value : '';\n\n return [value || 'row', hasInlineValue];\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) : this._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(element: HTMLElement, styleName: string, inlineOnly = false): 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(element, styleName);\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(styles: StyleDefinition,\n element: HTMLElement) {\n Object.keys(styles).sort().forEach(key => {\n const el = styles[key];\n const values: (string | number | null)[] = Array.isArray(el) ? el : [el];\n values.sort();\n for (let value of values) {\n value = value ? value + '' : '';\n if (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) {\n isPlatformBrowser(this._platformId) ?\n element.style.setProperty(key, value) : this._setServerStyle(element, key, value);\n } else {\n this._serverStylesheet.addStyleToElement(element, key, value);\n }\n }\n });\n }\n\n private _setServerStyle(element: any, styleName: string, styleValue?: string|null) {\n styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const styleMap = this._readStyleAttribute(element);\n styleMap[styleName] = styleValue || '';\n this._writeStyleAttribute(element, styleMap);\n }\n\n private _getServerStyle(element: any, styleName: string): string {\n const styleMap = this._readStyleAttribute(element);\n return styleMap[styleName] || '';\n }\n\n private _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 private _writeStyleAttribute(element: any, styleMap: {[name: string]: string}) {\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}\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"],"names":["DefaultLayoutAlignDirective","_this","_super","apply","this","arguments","inputs","tslib_1.__extends","type","Directive","args","selector","LayoutAlignDirective","layoutAlignHorizontalCache","Map","layoutAlignVerticalCache","layoutAlignHorizontalRevCache","layoutAlignVerticalRevCache","layoutAlignHorizontalInlineCache","layoutAlignVerticalInlineCache","layoutAlignHorizontalRevInlineCache","layoutAlignVerticalRevInlineCache","ALL_DIRECTIVES","DefaultLayoutDirective","DefaultLayoutGapDirective","DefaultFlexOrderDirective","DefaultFlexOffsetDirective","FlexFillDirective","DefaultFlexAlignDirective","DefaultFlexDirective","FlexModule","NgModule","imports","CoreModule","BidiModule","declarations","slice","exports","ROW_DEFAULT","COL_DEFAULT","GridAlignStyleBuilder","prototype","buildStyles","input","buildCss","Injectable","providedIn","StyleBuilder","GridAlignDirective","elementRef","styleBuilder","styler","marshal","call","DIRECTIVE_KEY","styleCache","alignCache","init","ElementRef","decorators","Optional","StyleUtils","MediaMarshaller","BaseDirective2","DefaultGridAlignDirective","DEFAULT_MAIN","DEFAULT_CROSS","GridAlignColumnsStyleBuilder","parent","inline","GridAlignColumnsDirective","_inline","Object","defineProperty","val","coerceBooleanProperty","updateWithValue","value","alignColumnsInlineCache","alignColumnsCache","addStyles","Input","DefaultGridAlignColumnsDirective","GridAlignRowsStyleBuilder","GridAlignRowsDirective","alignRowsInlineCache","alignRowsCache","DefaultGridAlignRowsDirective","GridAreaStyleBuilder","grid-area","GridAreaDirective","elRef","styleUtils","gridAreaCache","DefaultGridAreaDirective","GridAreasStyleBuiler","areas","split","map","v","trim","display","grid-template-areas","join","GridAreasDirective","areasInlineCache","areasCache","DefaultGridAreasDirective","GridAutoStyleBuilder","_a","direction","dense","grid-auto-flow","GridAutoDirective","autoInlineCache","autoCache","DefaultGridAutoDirective","GridColumnStyleBuilder","grid-column","GridColumnDirective","columnCache","DefaultGridColumnDirective","GridColumnsStyleBuilder","auto","endsWith","substring","indexOf","css","grid-auto-columns","grid-template-columns","GridColumnsDirective","columnsInlineCache","columnsCache","DefaultGridColumnsDirective","GridGapStyleBuilder","grid-gap","GridGapDirective","gapInlineCache","gapCache","DefaultGridGapDirective","GridRowStyleBuilder","grid-row","GridRowDirective","rowCache","DefaultGridRowDirective","GridRowsStyleBuilder","grid-auto-rows","grid-template-rows","GridRowsDirective","rowsInlineCache","rowsCache","DefaultGridRowsDirective","GridModule","VERSION","Version","FlexLayoutModule","serverModuleLoaded","platformId","isPlatformServer","console","warn","withConfig","configOptions","breakpoints","ngModule","providers","serverLoaded","provide","LAYOUT_CONFIG","useValue","tslib_1.__assign","DEFAULT_CONFIG","BREAKPOINT","multi","SERVER_TOKEN","ExtendedModule","Boolean","Inject","PLATFORM_ID","shouldCache","sideEffect","_input","_styles","_parent","matchMedia","hook","activatedBreakpoints","elementMap","elementKeyMap","WeakMap","watcherMap","updateMap","clearMap","subject","Subject","observeActivations","alias","onMediaChange","mc","bp","findByQuery","mediaQuery","mergeAlias","matches","push","sort","sortDescendingPriority","updateStyles","splice","element","key","updateFn","clearFn","extraTriggers","initBuilderMap","buildElementKeyMap","watchExtraTriggers","getValue","bpMap","get","values","undefined","getActivatedValues","hasValue","setValue","set","updateElement","trackValue","asObservable","pipe","filter","forEach","el","keyMap","Set","valueMap","k","delete","clearElement","builders","next","releaseElement","s","unsubscribe","_","triggerUpdate","add","triggers","length","watchers","newSubscription","merge","subscribe","currentValue","query","i","activatedBp","has","lastHope","target","queries","items","observe","withPrintQuery","tap","interceptEvents","blockPropagation","bind","MatchMedia","BreakPointRegistry","PrintHook","ImgSrcStyleBuilder","url","content","ImgSrcDirective","defaultSrc","imgSrcCache","nativeElement","getAttribute","setAttribute","src","DefaultImgSrcDirective","ClassDirective","delegate","ngClassInstance","NgClass","klass","ngClass","ngDoCheck","ɵNgClassImpl","Self","LayoutNgClassImplProvider","useClass","ɵNgClassR2Impl","DefaultClassDirective","ShowHideStyleBuilder","show","ShowHideDirective","layoutConfig","hasLayout","hasFlexChild","ngAfterViewInit","trackExtraTriggers","children","Array","from","DISPLAY_MAP","getDisplayStyle","defaultValue","ngOnChanges","changes","keys","inputKey","inputValue","shouldShow","takeUntil","destroySubject","addFlexToParent","lookupStyle","style","setProperty","DefaultShowHideDirective","NgStyleKeyValue","noQuotes","replace","StyleDirective","sanitizer","ngStyleInstance","NgStyle","styles","fallbackStyles","buildStyleMap","isServer","ngStyle","applyStyleToElement","clearStyles","sanitize","SecurityContext","STYLE","getType","buildMapFromList","buildRawList","buildMapFromSet","ɵNgStyleImpl","DomSanitizer","LayoutNgStyleImplProvider","ɵNgStyleR2Impl","DefaultStyleDirective","INLINE","LAYOUT_VALUES","LayoutStyleBuilder","buildLayoutCSS","LayoutDirective","layoutCache","CLEAR_MARGIN_CSS","margin-left","margin-right","margin-top","margin-bottom","LayoutGapStyleBuilder","_styler","gapValue","GRID_SPECIFIER","buildGridMargin","directionality","paddingStyles","buildGridPadding","applyStyleToElements","lastItem","pop","gapCss","buildGapCSS","LayoutGapDirective","zone","layout","observerSubject","change","onLayoutChange","obj","buffer","ngAfterContentInit","buildChildObservable","ngOnDestroy","observer","disconnect","matcher","find","x","childrenNodes","nodeType","willDisplay","a","b","orderA","orderB","isNaN","layoutGapCacheRowRtl","layoutGapCacheRowLtr","layoutGapCacheColumnRtl","layoutGapCacheColumnLtr","gridMode","mru","childrenStyle","getMarginType","source","runOutsideAngular","MutationObserver","mutations","validatedChanges","it","addedNodes","removedNodes","some","childList","NgZone","Directionality","FlexStyleBuilder","grow","shrink","basisParts","basis","max","isFlowHorizontal","min","hasCalc","String","usingCalc","isPercent","hasUnits","isValue","isFixed","max-width","max-height","min-width","min-height","useColumnBasisZero","extendObject","flex-grow","flex-shrink","flex-basis","flex","hasWrap","box-sizing","FlexDirective","wrap","flexGrow","flexShrink","parentElement","triggerReflow","layoutParts","getFlexFlowDirection","isHorizontal","startsWith","flexRowWrapCache","flexRowCache","flexColumnWrapCache","flexColumnCache","parts","validateBasis","activatedValue","FlexOrderStyleBuilder","order","parseInt","FlexOrderDirective","flexOrderCache","FlexOffsetStyleBuilder","offset","horizontalLayoutKey","isRtl","FlexOffsetDirective","flexOffsetCacheRowRtl","flexOffsetCacheColumnRtl","flexOffsetCacheColumnLtr","flexOffsetCacheRowLtr","FlexAlignStyleBuilder","FlexAlignDirective","flexAlignCache","FLEX_FILL_CSS","margin","width","height","FlexFillStyleBuilder","flexFillCache","LayoutAlignStyleBuilder","align","mainAxis","crossAxis","flex-direction","layoutKeys","includes","__extends","d","__","constructor","extendStatics","create","removeStyles","_document","isPlatformBrowser","classRegex_1","querySelectorAll","CLASS_NAME","classList","contains","parentNode","removeChild","className","dest","clone","MediaChange","mqAlias","suffix","priority","validateValue","buildCSS","toLowerCase","validateWrapValue","flex-wrap","sources","_i","TypeError","sources_1","hasOwnProperty","firstUpperCase","part","first","charAt","remainder","toUpperCase","camelCase","name","ALIAS_DELIMITERS","validateSuffixes","list","overlapping","mergeByAlias","defaults","custom","dict","priorityA","sortAscendingPriority","buildQueryCss","mediaQueries","ALL_STYLES","styleEl_1","createElement","styleSheet","cssText","appendChild","createTextNode","mq","e","error","constructMql","isBrowser","addListener","media","removeListener","isPrintBreakPoint","PRINT","coerceArray","isArray","toMediaQuery","locator","findByAlias","splitQueries","reduce","a1","a2","concat","applyCssPrefixes","j","_validateCalcValue","substr","calc","oldMap","what","delimiter","sanitizeValue","stringToKeyValue","entry","keyValuesToMap","vals","paddingRight","paddingBottom","paddingLeft","padding","paddingTop","marginRight","marginBottom","marginLeft","marginTop","margins","rowAxis","columnAxis","setPrototypeOf","__proto__","p","__assign","assign","t","n","BROWSER_PROVIDER","APP_BOOTSTRAP_LISTENER","useFactory","deps","DOCUMENT","property","StylesheetMap","stylesheet","addStyleToElement","clear","getStyleForElement","styleName","addOrientationBps","disableDefaultBps","disableVendorPrefixes","printWithBreakpoints","mediaTriggerAutoRestore","ssrObserveBreakpoints","InjectionToken","factory","activatedAlias","complete","builder","useCache","genStyles","addIfMissing","getFlowDirection","elements","DEFAULT_BREAKPOINTS","HANDSET_PORTRAIT","TABLET_PORTRAIT","TABLET_LANDSCAPE","WEB_PORTRAIT","WEB_LANDSCAPE","ScreenTypes","HANDSET","TABLET","WEB","HANDSET_LANDSCAPE","ORIENTATION_BREAKPOINTS","BREAKPOINTS","inject","bpFlattenArray","findByMap","findWithPredicate","searchFn","response","_zone","_platformId","BehaviorSubject","registry","_observable$","results","mql","isActive","mqList","filterOthers","matchMedia$","registration$","Observable","registerQuery","lastChange","onMQLEvent","run","buildMQL","MockMatchMedia","_breakpoints","autoRegisterQueries","useOverlaps","clearAll","destroy","activate","_validateQuery","_deactivateAll","_registerMediaQuery","_activateWithOverlaps","hasActivated","queryOrAlias","_activateByAlias","_activateByQuery","aliases","deactivate","MockMediaQueryList","activations","_mediaQuery","_isActive","_listeners","onchange","callback","listener","addEventListener","___","removeEventListener","dispatchEvent","MockMatchMediaProvider","BREAKPOINT_PRINT","isPrinting","queue","PrintQueue","deactivations","isPrintEvent","printAlias","getEventBreakpoints","printBreakPoints","updateEvent","event","startPrinting","stopPrinting","collectActivations","bpList","addPrintBreakpoints","printBreakpoints","addBreakpoint","MediaObserver","filterOverlaps","destroyed$","_media$","watchActivations","media$","buildObservable","hasChanges","isValidQuery","excludeOverlaps","debounceTime","asapScheduler","switchMap","of","findAllActivations","mergeMQAlias","replaceWithPrintAlias","MediaTrigger","hasCachedRegistryMatches","originalActivations","originalRegistry","saveActivations","deactivateAll","setActivations","prepareAutoRestore","restore","extractQuery","restoreRegistryMatches","resizeSubscription","resize$","fromEvent","window","take","currentActivations","forceRegistryMatches","simulateMediaChanges","toMediaChange","cacheRegistryMatches","emitChangeEvent","_serverStylesheet","_serverModuleLoaded","_applyMultiValueStyleToElement","hasInlineValue","lookupInlineStyle","lookupAttributeValue","attribute","getPropertyValue","_getServerStyle","inlineOnly","getComputedStyle","values_1","_setServerStyle","styleValue","styleMap","_readStyleAttribute","_writeStyleAttribute","styleAttribute","styleList","colonIndex","Error","name_1","styleAttrValue"],"mappings":"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"}