blob: 567a1569d468506ad23c224fb25f6338c8f1281e [file] [log] [blame]
{"version":3,"file":"flex-layout-flex.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/lib/utils/layout-validator.ts","../../src/lib/flex/layout-gap/layout-gap.ts","../../src/lib/utils/object-extend.ts","../../src/lib/flex/layout/layout.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","../../src/lib/flex/layout-align/layout-align.ts","../../src/lib/flex/module.ts"],"sourcesContent":["/*! *****************************************************************************\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 */\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 {\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 */\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 {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 {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","/**\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"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","buildLayoutCSS","value","_a","validateValue","buildCSS","toLowerCase","split","direction","wrap","inline","LAYOUT_VALUES","find","x","INLINE","validateWrapValue","isFlowHorizontal","indexOf","display","box-sizing","flex-direction","flex-wrap","buildGridPadding","directionality","paddingRight","paddingBottom","paddingLeft","padding","paddingTop","buildGridMargin","marginRight","marginBottom","marginLeft","margin","marginTop","getMarginType","layout","buildGapCSS","gapValue","parent","key","margins","tslib_1.__assign","CLEAR_MARGIN_CSS","extendObject","dest","sources","_i","arguments","length","TypeError","sources_1","source","hasOwnProperty","setPrototypeOf","__proto__","Array","p","__assign","assign","t","s","i","n","call","apply","LayoutStyleBuilder","_super","tslib_1.__extends","buildStyles","input","type","Injectable","args","providedIn","StyleBuilder","inputs","LayoutDirective","elRef","styleUtils","styleBuilder","marshal","_this","DIRECTIVE_KEY","styleCache","layoutCache","init","ElementRef","StyleUtils","decorators","Optional","MediaMarshaller","BaseDirective2","DefaultLayoutDirective","Directive","selector","Map","margin-left","margin-right","margin-top","margin-bottom","LayoutGapStyleBuilder","_styler","endsWith","GRID_SPECIFIER","slice","sideEffect","_styles","items","paddingStyles","applyStyleToElements","lastItem","pop","gapCss","LayoutGapDirective","zone","observerSubject","Subject","extraTriggers","change","asObservable","trackValue","nativeElement","pipe","takeUntil","destroySubject","subscribe","onLayoutChange","bind","defineProperty","obj","children","buffer","ngAfterContentInit","buildChildObservable","triggerUpdate","ngOnDestroy","observer","disconnect","matcher","updateWithValue","childrenNodes","filter","el","nodeType","willDisplay","sort","a","orderA","styler","lookupStyle","orderB","isNaN","layoutGapCacheRowRtl","layoutGapCacheRowLtr","layoutGapCacheColumnRtl","layoutGapCacheColumnLtr","addStyles","clearStyles","gridMode","keys","mru","childrenStyle","getValue","undefined","runOutsideAngular","MutationObserver","mutations","validatedChanges","it","addedNodes","removedNodes","some","next","observe","childList","NgZone","Directionality","DefaultLayoutGapDirective","FlexStyleBuilder","layoutConfig","grow","shrink","basisParts","basis","join","max","min","hasCalc","String","usingCalc","isPercent","hasUnits","isValue","isFixed","css","max-width","max-height","min-width","min-height","useColumnBasisZero","flex-grow","flex-shrink","flex-basis","flex","hasWrap","Inject","LAYOUT_CONFIG","FlexDirective","flexGrow","flexShrink","parentElement","triggerReflow","layoutParts","addFlexToParent","getFlexFlowDirection","isHorizontal","startsWith","flexRowWrapCache","flexRowCache","flexColumnWrapCache","flexColumnCache","replace","parts","validateBasis","activatedValue","updateElement","Input","DefaultFlexDirective","FlexOrderStyleBuilder","order","parseInt","FlexOrderDirective","flexOrderCache","DefaultFlexOrderDirective","FlexOffsetStyleBuilder","offset","horizontalLayoutKey","isRtl","FlexOffsetDirective","flexOffsetCacheRowRtl","flexOffsetCacheColumnRtl","flexOffsetCacheColumnLtr","flexOffsetCacheRowLtr","DefaultFlexOffsetDirective","FlexAlignStyleBuilder","styles","FlexAlignDirective","flexAlignCache","DefaultFlexAlignDirective","FLEX_FILL_CSS","width","height","FlexFillStyleBuilder","_input","FlexFillDirective","flexFillCache","LayoutAlignStyleBuilder","align","mainAxis","crossAxis","LayoutAlignDirective","layoutAlignHorizontalInlineCache","layoutAlignHorizontalRevInlineCache","layoutAlignVerticalInlineCache","layoutAlignVerticalRevInlineCache","layoutAlignVerticalRevCache","layoutAlignVerticalCache","layoutAlignHorizontalRevCache","layoutAlignHorizontalCache","layoutKeys","includes","DefaultLayoutAlignDirective","ALL_DIRECTIVES","FlexModule","NgModule","imports","CoreModule","BidiModule","declarations","exports"],"mappings":"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"}