{"version":3,"sources":["node_modules/semver/internal/constants.js","node_modules/semver/internal/debug.js","node_modules/semver/internal/re.js","node_modules/semver/internal/parse-options.js","node_modules/semver/internal/identifiers.js","node_modules/semver/classes/semver.js","node_modules/semver/functions/parse.js","node_modules/semver/functions/valid.js","node_modules/semver/functions/clean.js","node_modules/semver/functions/inc.js","node_modules/semver/functions/diff.js","node_modules/semver/functions/major.js","node_modules/semver/functions/minor.js","node_modules/semver/functions/patch.js","node_modules/semver/functions/prerelease.js","node_modules/semver/functions/compare.js","node_modules/semver/functions/rcompare.js","node_modules/semver/functions/compare-loose.js","node_modules/semver/functions/compare-build.js","node_modules/semver/functions/sort.js","node_modules/semver/functions/rsort.js","node_modules/semver/functions/gt.js","node_modules/semver/functions/lt.js","node_modules/semver/functions/eq.js","node_modules/semver/functions/neq.js","node_modules/semver/functions/gte.js","node_modules/semver/functions/lte.js","node_modules/semver/functions/cmp.js","node_modules/semver/functions/coerce.js","node_modules/yallist/iterator.js","node_modules/yallist/yallist.js","node_modules/semver/node_modules/lru-cache/index.js","node_modules/semver/classes/range.js","node_modules/semver/classes/comparator.js","node_modules/semver/functions/satisfies.js","node_modules/semver/ranges/to-comparators.js","node_modules/semver/ranges/max-satisfying.js","node_modules/semver/ranges/min-satisfying.js","node_modules/semver/ranges/min-version.js","node_modules/semver/ranges/valid.js","node_modules/semver/ranges/outside.js","node_modules/semver/ranges/gtr.js","node_modules/semver/ranges/ltr.js","node_modules/semver/ranges/intersects.js","node_modules/semver/ranges/simplify.js","node_modules/semver/ranges/subset.js","node_modules/semver/index.js","node_modules/@angular/cdk/fesm2022/scrolling.mjs","node_modules/@angular/cdk/fesm2022/overlay.mjs","node_modules/@angular/cdk/fesm2022/dialog.mjs","node_modules/@angular/material/fesm2022/dialog.mjs","node_modules/@angular/material/fesm2022/icon.mjs","src/app/shared/components/button/button.component.ts","src/app/shared/components/button/button.component.html","node_modules/@angular/material/fesm2022/menu.mjs","node_modules/@angular/material/fesm2022/divider.mjs","src/app/shared/utilities/state/DatumEither.ts","src/app/core/ngrx/myqq/myqq.lenses.ts","src/app/core/ngrx/myqq/myqq.reducers.ts","src/app/shared/utilities/rxjs.ts","src/app/core/ngrx/myqq/myqq.effects.ts","src/app/core/ngrx/myqq/myqq.chains.ts","src/app/core/services/myqq/myqq.consts.ts","node_modules/jwt-decode/build/jwt-decode.esm.js","src/app/core/services/offline-auth.service.ts","src/app/core/services/myqq/myqq.service.mock.ts","src/app/core/services/myqq/myqq.module.ts","src/app/core/ngrx/myqq/myqq.selectors.ts","src/app/core/ngrx/myqq/myqq.utilities.ts","src/app/shared/pipes/display-vehicle-plate.pipe.ts","src/lib/datum-either.ts","src/app/core/ngrx/myqq/cart/myqq-cart.chains.ts","src/app/core/ngrx/myqq/promo.chains.ts","src/app/core/ngrx/myqq/myqq.module.ts","node_modules/@angular/service-worker/fesm2022/service-worker.mjs","node_modules/@angular/material/fesm2022/snack-bar.mjs","src/app/shared/components/update-app/update-app.component.ts","src/app/shared/components/update-app/update-app.component.html","src/app/shared/services/pwa-update-prompt.service.ts","src/app/shared/services/pwa.service.ts","src/app/shared/services/resize.service.ts","src/app/shared/components/layouts/default-layout.page.ts","src/app/shared/components/layouts/default-layout.page.html","src/app/shared/components/social/social.component.ts","src/app/shared/components/social/social.component.html","src/app/shared/components/social/social.module.ts","src/app/shared/components/footer/footer.component.ts","src/app/shared/components/footer/footer.component.html","src/app/shared/components/footer/footer.module.ts","node_modules/@angular/material/fesm2022/sidenav.mjs","node_modules/@angular/material/fesm2022/list.mjs","node_modules/@angular/material/fesm2022/toolbar.mjs","src/app/shared/components/layouts/desktop-layout/desktop-layout.component.ts","src/app/shared/components/layouts/desktop-layout/desktop-layout.component.html","src/app/shared/components/layouts/mobile-layout/mobile-layout.component.ts","src/app/shared/components/layouts/mobile-layout/mobile-layout.component.html","src/app/shared/components/layouts/layouts.module.ts"],"sourcesContent":["// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0';\nconst MAX_LENGTH = 256;\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */9007199254740991;\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16;\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;\nconst RELEASE_TYPES = ['major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease'];\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010\n};","const debug = typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error('SEMVER', ...args) : () => {};\nmodule.exports = debug;","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH\n} = require('./constants');\nconst debug = require('./debug');\nexports = module.exports = {};\n\n// The actual regexps go on exports.re\nconst re = exports.re = [];\nconst safeRe = exports.safeRe = [];\nconst src = exports.src = [];\nconst t = exports.t = {};\nlet R = 0;\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]';\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [['\\\\s', 1], ['\\\\d', MAX_SAFE_COMPONENT_LENGTH], [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]];\nconst makeSafeRegex = value => {\n for (const [token, max] of safeRegexReplacements) {\n value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n }\n return value;\n};\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value);\n const index = R++;\n debug(name, index, value);\n t[name] = index;\n src[index] = value;\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined);\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined);\n};\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*');\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+');\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` + `(${src[t.NUMERICIDENTIFIER]})\\\\.` + `(${src[t.NUMERICIDENTIFIER]})`);\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})`);\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]}|${src[t.NONNUMERICIDENTIFIER]})`);\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]}|${src[t.NONNUMERICIDENTIFIER]})`);\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`);\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`);\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`);\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`);\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);\ncreateToken('GTLT', '((?:<|>)?=?)');\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`);\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` + `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?` + `)?)?`);\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?` + `)?)?`);\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`);\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`);\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' + '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:$|[^\\\\d])`);\ncreateToken('COERCERTL', src[t.COERCE], true);\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)');\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true);\nexports.tildeTrimReplace = '$1~';\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)');\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true);\nexports.caretTrimReplace = '$1^';\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`);\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`);\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);\nexports.comparatorTrimReplace = '$1$2$3';\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` + `\\\\s+-\\\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\\\s*$`);\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\\\s+-\\\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\\\s*$`);\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*');\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$');\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$');","// parse out just the options we care about\nconst looseOption = Object.freeze({\n loose: true\n});\nconst emptyOpts = Object.freeze({});\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== 'object') {\n return looseOption;\n }\n return options;\n};\nmodule.exports = parseOptions;","const numeric = /^[0-9]+$/;\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a);\n const bnum = numeric.test(b);\n if (anum && bnum) {\n a = +a;\n b = +b;\n }\n return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n};\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers\n};","const debug = require('../internal/debug');\nconst {\n MAX_LENGTH,\n MAX_SAFE_INTEGER\n} = require('../internal/constants');\nconst {\n safeRe: re,\n t\n} = require('../internal/re');\nconst parseOptions = require('../internal/parse-options');\nconst {\n compareIdentifiers\n} = require('../internal/identifiers');\nclass SemVer {\n constructor(version, options) {\n options = parseOptions(options);\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {\n return version;\n } else {\n version = version.version;\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n }\n if (version.length > MAX_LENGTH) {\n throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);\n }\n debug('SemVer', version, options);\n this.options = options;\n this.loose = !!options.loose;\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease;\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n\n // these are actually numbers\n this.major = +m[1];\n this.minor = +m[2];\n this.patch = +m[3];\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version');\n }\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version');\n }\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version');\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m[4].split('.').map(id => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id;\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num;\n }\n }\n return id;\n });\n }\n this.build = m[5] ? m[5].split('.') : [];\n this.format();\n }\n format() {\n this.version = `${this.major}.${this.minor}.${this.patch}`;\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`;\n }\n return this.version;\n }\n toString() {\n return this.version;\n }\n compare(other) {\n debug('SemVer.compare', this.version, this.options, other);\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0;\n }\n other = new SemVer(other, this.options);\n }\n if (other.version === this.version) {\n return 0;\n }\n return this.compareMain(other) || this.comparePre(other);\n }\n compareMain(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n }\n comparePre(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1;\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1;\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0;\n }\n let i = 0;\n do {\n const a = this.prerelease[i];\n const b = other.prerelease[i];\n debug('prerelease compare', i, a, b);\n if (a === undefined && b === undefined) {\n return 0;\n } else if (b === undefined) {\n return 1;\n } else if (a === undefined) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i = 0;\n do {\n const a = this.build[i];\n const b = other.build[i];\n debug('prerelease compare', i, a, b);\n if (a === undefined && b === undefined) {\n return 0;\n } else if (b === undefined) {\n return 1;\n } else if (a === undefined) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc(release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor = 0;\n this.major++;\n this.inc('pre', identifier, identifierBase);\n break;\n case 'preminor':\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor++;\n this.inc('pre', identifier, identifierBase);\n break;\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0;\n this.inc('patch', identifier, identifierBase);\n this.inc('pre', identifier, identifierBase);\n break;\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase);\n }\n this.inc('pre', identifier, identifierBase);\n break;\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {\n this.major++;\n }\n this.minor = 0;\n this.patch = 0;\n this.prerelease = [];\n break;\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++;\n }\n this.patch = 0;\n this.prerelease = [];\n break;\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++;\n }\n this.prerelease = [];\n break;\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n {\n const base = Number(identifierBase) ? 1 : 0;\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty');\n }\n if (this.prerelease.length === 0) {\n this.prerelease = [base];\n } else {\n let i = this.prerelease.length;\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++;\n i = -2;\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists');\n }\n this.prerelease.push(base);\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base];\n if (identifierBase === false) {\n prerelease = [identifier];\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease;\n }\n } else {\n this.prerelease = prerelease;\n }\n }\n break;\n }\n default:\n throw new Error(`invalid increment argument: ${release}`);\n }\n this.raw = this.format();\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`;\n }\n return this;\n }\n}\nmodule.exports = SemVer;","const SemVer = require('../classes/semver');\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version;\n }\n try {\n return new SemVer(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n};\nmodule.exports = parse;","const parse = require('./parse');\nconst valid = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n};\nmodule.exports = valid;","const parse = require('./parse');\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options);\n return s ? s.version : null;\n};\nmodule.exports = clean;","const SemVer = require('../classes/semver');\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof options === 'string') {\n identifierBase = identifier;\n identifier = options;\n options = undefined;\n }\n try {\n return new SemVer(version instanceof SemVer ? version.version : version, options).inc(release, identifier, identifierBase).version;\n } catch (er) {\n return null;\n }\n};\nmodule.exports = inc;","const parse = require('./parse.js');\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true);\n const v2 = parse(version2, null, true);\n const comparison = v1.compare(v2);\n if (comparison === 0) {\n return null;\n }\n const v1Higher = comparison > 0;\n const highVersion = v1Higher ? v1 : v2;\n const lowVersion = v1Higher ? v2 : v1;\n const highHasPre = !!highVersion.prerelease.length;\n const lowHasPre = !!lowVersion.prerelease.length;\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major';\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch';\n }\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor';\n }\n\n // bumping major/minor/patch all have same result\n return 'major';\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : '';\n if (v1.major !== v2.major) {\n return prefix + 'major';\n }\n if (v1.minor !== v2.minor) {\n return prefix + 'minor';\n }\n if (v1.patch !== v2.patch) {\n return prefix + 'patch';\n }\n\n // high and low are preleases\n return 'prerelease';\n};\nmodule.exports = diff;","const SemVer = require('../classes/semver');\nconst major = (a, loose) => new SemVer(a, loose).major;\nmodule.exports = major;","const SemVer = require('../classes/semver');\nconst minor = (a, loose) => new SemVer(a, loose).minor;\nmodule.exports = minor;","const SemVer = require('../classes/semver');\nconst patch = (a, loose) => new SemVer(a, loose).patch;\nmodule.exports = patch;","const parse = require('./parse');\nconst prerelease = (version, options) => {\n const parsed = parse(version, options);\n return parsed && parsed.prerelease.length ? parsed.prerelease : null;\n};\nmodule.exports = prerelease;","const SemVer = require('../classes/semver');\nconst compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));\nmodule.exports = compare;","const compare = require('./compare');\nconst rcompare = (a, b, loose) => compare(b, a, loose);\nmodule.exports = rcompare;","const compare = require('./compare');\nconst compareLoose = (a, b) => compare(a, b, true);\nmodule.exports = compareLoose;","const SemVer = require('../classes/semver');\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose);\n const versionB = new SemVer(b, loose);\n return versionA.compare(versionB) || versionA.compareBuild(versionB);\n};\nmodule.exports = compareBuild;","const compareBuild = require('./compare-build');\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));\nmodule.exports = sort;","const compareBuild = require('./compare-build');\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));\nmodule.exports = rsort;","const compare = require('./compare');\nconst gt = (a, b, loose) => compare(a, b, loose) > 0;\nmodule.exports = gt;","const compare = require('./compare');\nconst lt = (a, b, loose) => compare(a, b, loose) < 0;\nmodule.exports = lt;","const compare = require('./compare');\nconst eq = (a, b, loose) => compare(a, b, loose) === 0;\nmodule.exports = eq;","const compare = require('./compare');\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0;\nmodule.exports = neq;","const compare = require('./compare');\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0;\nmodule.exports = gte;","const compare = require('./compare');\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0;\nmodule.exports = lte;","const eq = require('./eq');\nconst neq = require('./neq');\nconst gt = require('./gt');\nconst gte = require('./gte');\nconst lt = require('./lt');\nconst lte = require('./lte');\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version;\n }\n if (typeof b === 'object') {\n b = b.version;\n }\n return a === b;\n case '!==':\n if (typeof a === 'object') {\n a = a.version;\n }\n if (typeof b === 'object') {\n b = b.version;\n }\n return a !== b;\n case '':\n case '=':\n case '==':\n return eq(a, b, loose);\n case '!=':\n return neq(a, b, loose);\n case '>':\n return gt(a, b, loose);\n case '>=':\n return gte(a, b, loose);\n case '<':\n return lt(a, b, loose);\n case '<=':\n return lte(a, b, loose);\n default:\n throw new TypeError(`Invalid operator: ${op}`);\n }\n};\nmodule.exports = cmp;","const SemVer = require('../classes/semver');\nconst parse = require('./parse');\nconst {\n safeRe: re,\n t\n} = require('../internal/re');\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version;\n }\n if (typeof version === 'number') {\n version = String(version);\n }\n if (typeof version !== 'string') {\n return null;\n }\n options = options || {};\n let match = null;\n if (!options.rtl) {\n match = version.match(re[t.COERCE]);\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next;\n while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) {\n if (!match || next.index + next[0].length !== match.index + match[0].length) {\n match = next;\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1;\n }\n if (match === null) {\n return null;\n }\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options);\n};\nmodule.exports = coerce;","'use strict';\n\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value;\n }\n };\n};","'use strict';\n\nmodule.exports = Yallist;\nYallist.Node = Node;\nYallist.create = Yallist;\nfunction Yallist(list) {\n var self = this;\n if (!(self instanceof Yallist)) {\n self = new Yallist();\n }\n self.tail = null;\n self.head = null;\n self.length = 0;\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item);\n });\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i]);\n }\n }\n return self;\n}\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list');\n }\n var next = node.next;\n var prev = node.prev;\n if (next) {\n next.prev = prev;\n }\n if (prev) {\n prev.next = next;\n }\n if (node === this.head) {\n this.head = next;\n }\n if (node === this.tail) {\n this.tail = prev;\n }\n node.list.length--;\n node.next = null;\n node.prev = null;\n node.list = null;\n return next;\n};\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n var head = this.head;\n node.list = this;\n node.next = head;\n if (head) {\n head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n this.length++;\n};\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n var tail = this.tail;\n node.list = this;\n node.prev = tail;\n if (tail) {\n tail.next = node;\n }\n this.tail = node;\n if (!this.head) {\n this.head = node;\n }\n this.length++;\n};\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i]);\n }\n return this.length;\n};\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i]);\n }\n return this.length;\n};\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined;\n }\n var res = this.tail.value;\n this.tail = this.tail.prev;\n if (this.tail) {\n this.tail.next = null;\n } else {\n this.head = null;\n }\n this.length--;\n return res;\n};\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined;\n }\n var res = this.head.value;\n this.head = this.head.next;\n if (this.head) {\n this.head.prev = null;\n } else {\n this.tail = null;\n }\n this.length--;\n return res;\n};\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this;\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.next;\n }\n};\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this;\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.prev;\n }\n};\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next;\n }\n if (i === n && walker !== null) {\n return walker.value;\n }\n};\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev;\n }\n if (i === n && walker !== null) {\n return walker.value;\n }\n};\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this;\n var res = new Yallist();\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.next;\n }\n return res;\n};\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this;\n var res = new Yallist();\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.prev;\n }\n return res;\n};\nYallist.prototype.reduce = function (fn, initial) {\n var acc;\n var walker = this.head;\n if (arguments.length > 1) {\n acc = initial;\n } else if (this.head) {\n walker = this.head.next;\n acc = this.head.value;\n } else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i);\n walker = walker.next;\n }\n return acc;\n};\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc;\n var walker = this.tail;\n if (arguments.length > 1) {\n acc = initial;\n } else if (this.tail) {\n walker = this.tail.prev;\n acc = this.tail.value;\n } else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i);\n walker = walker.prev;\n }\n return acc;\n};\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length);\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value;\n walker = walker.next;\n }\n return arr;\n};\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length);\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value;\n walker = walker.prev;\n }\n return arr;\n};\nYallist.prototype.slice = function (from, to) {\n to = to || this.length;\n if (to < 0) {\n to += this.length;\n }\n from = from || 0;\n if (from < 0) {\n from += this.length;\n }\n var ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next;\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value);\n }\n return ret;\n};\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length;\n if (to < 0) {\n to += this.length;\n }\n from = from || 0;\n if (from < 0) {\n from += this.length;\n }\n var ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev;\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value);\n }\n return ret;\n};\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1;\n }\n if (start < 0) {\n start = this.length + start;\n }\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next;\n }\n var ret = [];\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value);\n walker = this.removeNode(walker);\n }\n if (walker === null) {\n walker = this.tail;\n }\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev;\n }\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i]);\n }\n return ret;\n};\nYallist.prototype.reverse = function () {\n var head = this.head;\n var tail = this.tail;\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev;\n walker.prev = walker.next;\n walker.next = p;\n }\n this.head = tail;\n this.tail = head;\n return this;\n};\nfunction insert(self, node, value) {\n var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self);\n if (inserted.next === null) {\n self.tail = inserted;\n }\n if (inserted.prev === null) {\n self.head = inserted;\n }\n self.length++;\n return inserted;\n}\nfunction push(self, item) {\n self.tail = new Node(item, self.tail, null, self);\n if (!self.head) {\n self.head = self.tail;\n }\n self.length++;\n}\nfunction unshift(self, item) {\n self.head = new Node(item, null, self.head, self);\n if (!self.tail) {\n self.tail = self.head;\n }\n self.length++;\n}\nfunction Node(value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list);\n }\n this.list = list;\n this.value = value;\n if (prev) {\n prev.next = this;\n this.prev = prev;\n } else {\n this.prev = null;\n }\n if (next) {\n next.prev = this;\n this.next = next;\n } else {\n this.next = null;\n }\n}\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist);\n} catch (er) {}","'use strict';\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist');\nconst MAX = Symbol('max');\nconst LENGTH = Symbol('length');\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator');\nconst ALLOW_STALE = Symbol('allowStale');\nconst MAX_AGE = Symbol('maxAge');\nconst DISPOSE = Symbol('dispose');\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');\nconst LRU_LIST = Symbol('lruList');\nconst CACHE = Symbol('cache');\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');\nconst naiveLength = () => 1;\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor(options) {\n if (typeof options === 'number') options = {\n max: options\n };\n if (!options) options = {};\n if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number');\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity;\n const lc = options.length || naiveLength;\n this[LENGTH_CALCULATOR] = typeof lc !== 'function' ? naiveLength : lc;\n this[ALLOW_STALE] = options.stale || false;\n if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number');\n this[MAX_AGE] = options.maxAge || 0;\n this[DISPOSE] = options.dispose;\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;\n this.reset();\n }\n\n // resize the cache when the max changes.\n set max(mL) {\n if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number');\n this[MAX] = mL || Infinity;\n trim(this);\n }\n get max() {\n return this[MAX];\n }\n set allowStale(allowStale) {\n this[ALLOW_STALE] = !!allowStale;\n }\n get allowStale() {\n return this[ALLOW_STALE];\n }\n set maxAge(mA) {\n if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number');\n this[MAX_AGE] = mA;\n trim(this);\n }\n get maxAge() {\n return this[MAX_AGE];\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator(lC) {\n if (typeof lC !== 'function') lC = naiveLength;\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC;\n this[LENGTH] = 0;\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);\n this[LENGTH] += hit.length;\n });\n }\n trim(this);\n }\n get lengthCalculator() {\n return this[LENGTH_CALCULATOR];\n }\n get length() {\n return this[LENGTH];\n }\n get itemCount() {\n return this[LRU_LIST].length;\n }\n rforEach(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev;\n forEachStep(this, fn, walker, thisp);\n walker = prev;\n }\n }\n forEach(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next;\n forEachStep(this, fn, walker, thisp);\n walker = next;\n }\n }\n keys() {\n return this[LRU_LIST].toArray().map(k => k.key);\n }\n values() {\n return this[LRU_LIST].toArray().map(k => k.value);\n }\n reset() {\n if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));\n }\n this[CACHE] = new Map(); // hash of items by key\n this[LRU_LIST] = new Yallist(); // list of items in order of use recency\n this[LENGTH] = 0; // length of items in the list\n }\n dump() {\n return this[LRU_LIST].map(hit => isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h);\n }\n dumpLru() {\n return this[LRU_LIST];\n }\n set(key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE];\n if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number');\n const now = maxAge ? Date.now() : 0;\n const len = this[LENGTH_CALCULATOR](value, key);\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key));\n return false;\n }\n const node = this[CACHE].get(key);\n const item = node.value;\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value);\n }\n item.now = now;\n item.maxAge = maxAge;\n item.value = value;\n this[LENGTH] += len - item.length;\n item.length = len;\n this.get(key);\n trim(this);\n return true;\n }\n const hit = new Entry(key, value, len, now, maxAge);\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE]) this[DISPOSE](key, value);\n return false;\n }\n this[LENGTH] += hit.length;\n this[LRU_LIST].unshift(hit);\n this[CACHE].set(key, this[LRU_LIST].head);\n trim(this);\n return true;\n }\n has(key) {\n if (!this[CACHE].has(key)) return false;\n const hit = this[CACHE].get(key).value;\n return !isStale(this, hit);\n }\n get(key) {\n return get(this, key, true);\n }\n peek(key) {\n return get(this, key, false);\n }\n pop() {\n const node = this[LRU_LIST].tail;\n if (!node) return null;\n del(this, node);\n return node.value;\n }\n del(key) {\n del(this, this[CACHE].get(key));\n }\n load(arr) {\n // reset the cache\n this.reset();\n const now = Date.now();\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l];\n const expiresAt = hit.e || 0;\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v);else {\n const maxAge = expiresAt - now;\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge);\n }\n }\n }\n }\n prune() {\n this[CACHE].forEach((value, key) => get(this, key, false));\n }\n}\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key);\n if (node) {\n const hit = node.value;\n if (isStale(self, hit)) {\n del(self, node);\n if (!self[ALLOW_STALE]) return undefined;\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now();\n self[LRU_LIST].unshiftNode(node);\n }\n }\n return hit.value;\n }\n};\nconst isStale = (self, hit) => {\n if (!hit || !hit.maxAge && !self[MAX_AGE]) return false;\n const diff = Date.now() - hit.now;\n return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE];\n};\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev;\n del(self, walker);\n walker = prev;\n }\n }\n};\nconst del = (self, node) => {\n if (node) {\n const hit = node.value;\n if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value);\n self[LENGTH] -= hit.length;\n self[CACHE].delete(hit.key);\n self[LRU_LIST].removeNode(node);\n }\n};\nclass Entry {\n constructor(key, value, length, now, maxAge) {\n this.key = key;\n this.value = value;\n this.length = length;\n this.now = now;\n this.maxAge = maxAge || 0;\n }\n}\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value;\n if (isStale(self, hit)) {\n del(self, node);\n if (!self[ALLOW_STALE]) hit = undefined;\n }\n if (hit) fn.call(thisp, hit.value, hit.key, self);\n};\nmodule.exports = LRUCache;","// hoisted class for cyclic dependency\nclass Range {\n constructor(range, options) {\n options = parseOptions(options);\n if (range instanceof Range) {\n if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {\n return range;\n } else {\n return new Range(range.raw, options);\n }\n }\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value;\n this.set = [[range]];\n this.format();\n return this;\n }\n this.options = options;\n this.loose = !!options.loose;\n this.includePrerelease = !!options.includePrerelease;\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().split(/\\s+/).join(' ');\n\n // First, split on ||\n this.set = this.raw.split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length);\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`);\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0];\n this.set = this.set.filter(c => !isNullSet(c[0]));\n if (this.set.length === 0) {\n this.set = [first];\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c];\n break;\n }\n }\n }\n }\n this.format();\n }\n format() {\n this.range = this.set.map(comps => comps.join(' ').trim()).join('||').trim();\n return this.range;\n }\n toString() {\n return this.range;\n }\n parseRange(range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);\n const memoKey = memoOpts + ':' + range;\n const cached = cache.get(memoKey);\n if (cached) {\n return cached;\n }\n const loose = this.options.loose;\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease));\n debug('hyphen replace', range);\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);\n debug('comparator trim', range);\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace);\n debug('tilde trim', range);\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace);\n debug('caret trim', range);\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range.split(' ').map(comp => parseComparator(comp, this.options)).join(' ').split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options));\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options);\n return !!comp.match(re[t.COMPARATORLOOSE]);\n });\n }\n debug('range list', rangeList);\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map();\n const comparators = rangeList.map(comp => new Comparator(comp, this.options));\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp];\n }\n rangeMap.set(comp.value, comp);\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('');\n }\n const result = [...rangeMap.values()];\n cache.set(memoKey, result);\n return result;\n }\n intersects(range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required');\n }\n return this.set.some(thisComparators => {\n return isSatisfiable(thisComparators, options) && range.set.some(rangeComparators => {\n return isSatisfiable(rangeComparators, options) && thisComparators.every(thisComparator => {\n return rangeComparators.every(rangeComparator => {\n return thisComparator.intersects(rangeComparator, options);\n });\n });\n });\n });\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test(version) {\n if (!version) {\n return false;\n }\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options);\n } catch (er) {\n return false;\n }\n }\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true;\n }\n }\n return false;\n }\n}\nmodule.exports = Range;\nconst LRU = require('lru-cache');\nconst cache = new LRU({\n max: 1000\n});\nconst parseOptions = require('../internal/parse-options');\nconst Comparator = require('./comparator');\nconst debug = require('../internal/debug');\nconst SemVer = require('./semver');\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace\n} = require('../internal/re');\nconst {\n FLAG_INCLUDE_PRERELEASE,\n FLAG_LOOSE\n} = require('../internal/constants');\nconst isNullSet = c => c.value === '<0.0.0-0';\nconst isAny = c => c.value === '';\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true;\n const remainingComparators = comparators.slice();\n let testComparator = remainingComparators.pop();\n while (result && remainingComparators.length) {\n result = remainingComparators.every(otherComparator => {\n return testComparator.intersects(otherComparator, options);\n });\n testComparator = remainingComparators.pop();\n }\n return result;\n};\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options);\n comp = replaceCarets(comp, options);\n debug('caret', comp);\n comp = replaceTildes(comp, options);\n debug('tildes', comp);\n comp = replaceXRanges(comp, options);\n debug('xrange', comp);\n comp = replaceStars(comp, options);\n debug('stars', comp);\n return comp;\n};\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*';\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp.trim().split(/\\s+/).map(c => replaceTilde(c, options)).join(' ');\n};\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr);\n let ret;\n if (isX(M)) {\n ret = '';\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;\n } else if (pr) {\n debug('replaceTilde pr', pr);\n ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;\n }\n debug('tilde return', ret);\n return ret;\n });\n};\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp.trim().split(/\\s+/).map(c => replaceCaret(c, options)).join(' ');\n};\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options);\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];\n const z = options.includePrerelease ? '-0' : '';\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr);\n let ret;\n if (isX(M)) {\n ret = '';\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;\n }\n } else if (pr) {\n debug('replaceCaret pr', pr);\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;\n } else {\n ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;\n }\n } else {\n debug('no pr');\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;\n } else {\n ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;\n }\n } else {\n ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;\n }\n }\n debug('caret return', ret);\n return ret;\n });\n};\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options);\n return comp.split(/\\s+/).map(c => replaceXRange(c, options)).join(' ');\n};\nconst replaceXRange = (comp, options) => {\n comp = comp.trim();\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr);\n const xM = isX(M);\n const xm = xM || isX(m);\n const xp = xm || isX(p);\n const anyX = xp;\n if (gtlt === '=' && anyX) {\n gtlt = '';\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : '';\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0';\n } else {\n // nothing is forbidden\n ret = '*';\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0;\n }\n p = 0;\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>=';\n if (xm) {\n M = +M + 1;\n m = 0;\n p = 0;\n } else {\n m = +m + 1;\n p = 0;\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<';\n if (xm) {\n M = +M + 1;\n } else {\n m = +m + 1;\n }\n }\n if (gtlt === '<') {\n pr = '-0';\n }\n ret = `${gtlt + M}.${m}.${p}${pr}`;\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;\n }\n debug('xRange return', ret);\n return ret;\n });\n};\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options);\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[t.STAR], '');\n};\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options);\n return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '');\n};\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = '';\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`;\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`;\n } else if (fpr) {\n from = `>=${from}`;\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`;\n }\n if (isX(tM)) {\n to = '';\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`;\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`;\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`;\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`;\n } else {\n to = `<=${to}`;\n }\n return `${from} ${to}`.trim();\n};\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false;\n }\n }\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver);\n if (set[i].semver === Comparator.ANY) {\n continue;\n }\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver;\n if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {\n return true;\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false;\n }\n return true;\n};","const ANY = Symbol('SemVer ANY');\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY() {\n return ANY;\n }\n constructor(comp, options) {\n options = parseOptions(options);\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp;\n } else {\n comp = comp.value;\n }\n }\n comp = comp.trim().split(/\\s+/).join(' ');\n debug('comparator', comp, options);\n this.options = options;\n this.loose = !!options.loose;\n this.parse(comp);\n if (this.semver === ANY) {\n this.value = '';\n } else {\n this.value = this.operator + this.semver.version;\n }\n debug('comp', this);\n }\n parse(comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];\n const m = comp.match(r);\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`);\n }\n this.operator = m[1] !== undefined ? m[1] : '';\n if (this.operator === '=') {\n this.operator = '';\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY;\n } else {\n this.semver = new SemVer(m[2], this.options.loose);\n }\n }\n toString() {\n return this.value;\n }\n test(version) {\n debug('Comparator.test', version, this.options.loose);\n if (this.semver === ANY || version === ANY) {\n return true;\n }\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options);\n } catch (er) {\n return false;\n }\n }\n return cmp(version, this.operator, this.semver, this.options);\n }\n intersects(comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required');\n }\n if (this.operator === '') {\n if (this.value === '') {\n return true;\n }\n return new Range(comp.value, options).test(this.value);\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true;\n }\n return new Range(this.value, options).test(comp.semver);\n }\n options = parseOptions(options);\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease && (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false;\n }\n if (!options.includePrerelease && (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false;\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true;\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true;\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (this.semver.version === comp.semver.version && this.operator.includes('=') && comp.operator.includes('=')) {\n return true;\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) && this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true;\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) && this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true;\n }\n return false;\n }\n}\nmodule.exports = Comparator;\nconst parseOptions = require('../internal/parse-options');\nconst {\n safeRe: re,\n t\n} = require('../internal/re');\nconst cmp = require('../functions/cmp');\nconst debug = require('../internal/debug');\nconst SemVer = require('./semver');\nconst Range = require('./range');","const Range = require('../classes/range');\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options);\n } catch (er) {\n return false;\n }\n return range.test(version);\n};\nmodule.exports = satisfies;","const Range = require('../classes/range');\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) => new Range(range, options).set.map(comp => comp.map(c => c.value).join(' ').trim().split(' '));\nmodule.exports = toComparators;","const SemVer = require('../classes/semver');\nconst Range = require('../classes/range');\nconst maxSatisfying = (versions, range, options) => {\n let max = null;\n let maxSV = null;\n let rangeObj = null;\n try {\n rangeObj = new Range(range, options);\n } catch (er) {\n return null;\n }\n versions.forEach(v => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v;\n maxSV = new SemVer(max, options);\n }\n }\n });\n return max;\n};\nmodule.exports = maxSatisfying;","const SemVer = require('../classes/semver');\nconst Range = require('../classes/range');\nconst minSatisfying = (versions, range, options) => {\n let min = null;\n let minSV = null;\n let rangeObj = null;\n try {\n rangeObj = new Range(range, options);\n } catch (er) {\n return null;\n }\n versions.forEach(v => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v;\n minSV = new SemVer(min, options);\n }\n }\n });\n return min;\n};\nmodule.exports = minSatisfying;","const SemVer = require('../classes/semver');\nconst Range = require('../classes/range');\nconst gt = require('../functions/gt');\nconst minVersion = (range, loose) => {\n range = new Range(range, loose);\n let minver = new SemVer('0.0.0');\n if (range.test(minver)) {\n return minver;\n }\n minver = new SemVer('0.0.0-0');\n if (range.test(minver)) {\n return minver;\n }\n minver = null;\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i];\n let setMin = null;\n comparators.forEach(comparator => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version);\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++;\n } else {\n compver.prerelease.push(0);\n }\n compver.raw = compver.format();\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver;\n }\n break;\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break;\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`);\n }\n });\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin;\n }\n }\n if (minver && range.test(minver)) {\n return minver;\n }\n return null;\n};\nmodule.exports = minVersion;","const Range = require('../classes/range');\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*';\n } catch (er) {\n return null;\n }\n};\nmodule.exports = validRange;","const SemVer = require('../classes/semver');\nconst Comparator = require('../classes/comparator');\nconst {\n ANY\n} = Comparator;\nconst Range = require('../classes/range');\nconst satisfies = require('../functions/satisfies');\nconst gt = require('../functions/gt');\nconst lt = require('../functions/lt');\nconst lte = require('../functions/lte');\nconst gte = require('../functions/gte');\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options);\n range = new Range(range, options);\n let gtfn, ltefn, ltfn, comp, ecomp;\n switch (hilo) {\n case '>':\n gtfn = gt;\n ltefn = lte;\n ltfn = lt;\n comp = '>';\n ecomp = '>=';\n break;\n case '<':\n gtfn = lt;\n ltefn = gte;\n ltfn = gt;\n comp = '<';\n ecomp = '<=';\n break;\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"');\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false;\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i];\n let high = null;\n let low = null;\n comparators.forEach(comparator => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0');\n }\n high = high || comparator;\n low = low || comparator;\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator;\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator;\n }\n });\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false;\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {\n return false;\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false;\n }\n }\n return true;\n};\nmodule.exports = outside;","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside');\nconst gtr = (version, range, options) => outside(version, range, '>', options);\nmodule.exports = gtr;","const outside = require('./outside');\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options);\nmodule.exports = ltr;","const Range = require('../classes/range');\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options);\n r2 = new Range(r2, options);\n return r1.intersects(r2, options);\n};\nmodule.exports = intersects;","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js');\nconst compare = require('../functions/compare.js');\nmodule.exports = (versions, range, options) => {\n const set = [];\n let first = null;\n let prev = null;\n const v = versions.sort((a, b) => compare(a, b, options));\n for (const version of v) {\n const included = satisfies(version, range, options);\n if (included) {\n prev = version;\n if (!first) {\n first = version;\n }\n } else {\n if (prev) {\n set.push([first, prev]);\n }\n prev = null;\n first = null;\n }\n }\n if (first) {\n set.push([first, null]);\n }\n const ranges = [];\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min);\n } else if (!max && min === v[0]) {\n ranges.push('*');\n } else if (!max) {\n ranges.push(`>=${min}`);\n } else if (min === v[0]) {\n ranges.push(`<=${max}`);\n } else {\n ranges.push(`${min} - ${max}`);\n }\n }\n const simplified = ranges.join(' || ');\n const original = typeof range.raw === 'string' ? range.raw : String(range);\n return simplified.length < original.length ? simplified : range;\n};","const Range = require('../classes/range.js');\nconst Comparator = require('../classes/comparator.js');\nconst {\n ANY\n} = Comparator;\nconst satisfies = require('../functions/satisfies.js');\nconst compare = require('../functions/compare.js');\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true;\n }\n sub = new Range(sub, options);\n dom = new Range(dom, options);\n let sawNonNull = false;\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options);\n sawNonNull = sawNonNull || isSub !== null;\n if (isSub) {\n continue OUTER;\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false;\n }\n }\n return true;\n};\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')];\nconst minimumVersion = [new Comparator('>=0.0.0')];\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true;\n }\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true;\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease;\n } else {\n sub = minimumVersion;\n }\n }\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true;\n } else {\n dom = minimumVersion;\n }\n }\n const eqSet = new Set();\n let gt, lt;\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options);\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options);\n } else {\n eqSet.add(c.semver);\n }\n }\n if (eqSet.size > 1) {\n return null;\n }\n let gtltComp;\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options);\n if (gtltComp > 0) {\n return null;\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null;\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null;\n }\n if (lt && !satisfies(eq, String(lt), options)) {\n return null;\n }\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false;\n }\n }\n return true;\n }\n let higher, lower;\n let hasDomLT, hasDomGT;\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;\n let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false;\n }\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=';\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=';\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false;\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options);\n if (higher === c && higher !== gt) {\n return false;\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false;\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false;\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options);\n if (lower === c && lower !== lt) {\n return false;\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false;\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false;\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false;\n }\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false;\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false;\n }\n return true;\n};\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b;\n }\n const comp = compare(a.semver, b.semver, options);\n return comp > 0 ? a : comp < 0 ? b : b.operator === '>' && a.operator === '>=' ? b : a;\n};\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b;\n }\n const comp = compare(a.semver, b.semver, options);\n return comp < 0 ? a : comp > 0 ? b : b.operator === '<' && a.operator === '<=' ? b : a;\n};\nmodule.exports = subset;","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re');\nconst constants = require('./internal/constants');\nconst SemVer = require('./classes/semver');\nconst identifiers = require('./internal/identifiers');\nconst parse = require('./functions/parse');\nconst valid = require('./functions/valid');\nconst clean = require('./functions/clean');\nconst inc = require('./functions/inc');\nconst diff = require('./functions/diff');\nconst major = require('./functions/major');\nconst minor = require('./functions/minor');\nconst patch = require('./functions/patch');\nconst prerelease = require('./functions/prerelease');\nconst compare = require('./functions/compare');\nconst rcompare = require('./functions/rcompare');\nconst compareLoose = require('./functions/compare-loose');\nconst compareBuild = require('./functions/compare-build');\nconst sort = require('./functions/sort');\nconst rsort = require('./functions/rsort');\nconst gt = require('./functions/gt');\nconst lt = require('./functions/lt');\nconst eq = require('./functions/eq');\nconst neq = require('./functions/neq');\nconst gte = require('./functions/gte');\nconst lte = require('./functions/lte');\nconst cmp = require('./functions/cmp');\nconst coerce = require('./functions/coerce');\nconst Comparator = require('./classes/comparator');\nconst Range = require('./classes/range');\nconst satisfies = require('./functions/satisfies');\nconst toComparators = require('./ranges/to-comparators');\nconst maxSatisfying = require('./ranges/max-satisfying');\nconst minSatisfying = require('./ranges/min-satisfying');\nconst minVersion = require('./ranges/min-version');\nconst validRange = require('./ranges/valid');\nconst outside = require('./ranges/outside');\nconst gtr = require('./ranges/gtr');\nconst ltr = require('./ranges/ltr');\nconst intersects = require('./ranges/intersects');\nconst simplifyRange = require('./ranges/simplify');\nconst subset = require('./ranges/subset');\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers\n};","import { coerceNumberProperty, coerceElement } from '@angular/cdk/coercion';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Directive, Input, Injectable, Optional, Inject, inject, Injector, afterNextRender, booleanAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ElementRef, NgModule } from '@angular/core';\nimport { Subject, of, Observable, fromEvent, animationFrameScheduler, asapScheduler, Subscription, isObservable } from 'rxjs';\nimport { distinctUntilChanged, auditTime, filter, takeUntil, startWith, pairwise, switchMap, shareReplay } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/platform';\nimport { getRtlScrollAxisType, RtlScrollAxisType, supportsScrollBehavior, Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport * as i2 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport * as i2$1 from '@angular/cdk/collections';\nimport { isDataSource, ArrayDataSource, _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';\n\n/** The injection token used to specify the virtual scrolling strategy. */\nconst _c0 = [\"contentWrapper\"];\nconst _c1 = [\"*\"];\nconst VIRTUAL_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('VIRTUAL_SCROLL_STRATEGY');\n\n/** Virtual scrolling strategy for lists with items of known fixed size. */\nclass FixedSizeVirtualScrollStrategy {\n /**\n * @param itemSize The size of the items in the virtually scrolling list.\n * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n */\n constructor(itemSize, minBufferPx, maxBufferPx) {\n this._scrolledIndexChange = new Subject();\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n this.scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());\n /** The attached viewport. */\n this._viewport = null;\n this._itemSize = itemSize;\n this._minBufferPx = minBufferPx;\n this._maxBufferPx = maxBufferPx;\n }\n /**\n * Attaches this scroll strategy to a viewport.\n * @param viewport The viewport to attach this strategy to.\n */\n attach(viewport) {\n this._viewport = viewport;\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** Detaches this scroll strategy from the currently attached viewport. */\n detach() {\n this._scrolledIndexChange.complete();\n this._viewport = null;\n }\n /**\n * Update the item size and buffer size.\n * @param itemSize The size of the items in the virtually scrolling list.\n * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n */\n updateItemAndBufferSize(itemSize, minBufferPx, maxBufferPx) {\n if (maxBufferPx < minBufferPx && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');\n }\n this._itemSize = itemSize;\n this._minBufferPx = minBufferPx;\n this._maxBufferPx = maxBufferPx;\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onContentScrolled() {\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onDataLengthChanged() {\n this._updateTotalContentSize();\n this._updateRenderedRange();\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onContentRendered() {\n /* no-op */\n }\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onRenderedOffsetChanged() {\n /* no-op */\n }\n /**\n * Scroll to the offset for the given index.\n * @param index The index of the element to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling.\n */\n scrollToIndex(index, behavior) {\n if (this._viewport) {\n this._viewport.scrollToOffset(index * this._itemSize, behavior);\n }\n }\n /** Update the viewport's total content size. */\n _updateTotalContentSize() {\n if (!this._viewport) {\n return;\n }\n this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize);\n }\n /** Update the viewport's rendered range. */\n _updateRenderedRange() {\n if (!this._viewport) {\n return;\n }\n const renderedRange = this._viewport.getRenderedRange();\n const newRange = {\n start: renderedRange.start,\n end: renderedRange.end\n };\n const viewportSize = this._viewport.getViewportSize();\n const dataLength = this._viewport.getDataLength();\n let scrollOffset = this._viewport.measureScrollOffset();\n // Prevent NaN as result when dividing by zero.\n let firstVisibleIndex = this._itemSize > 0 ? scrollOffset / this._itemSize : 0;\n // If user scrolls to the bottom of the list and data changes to a smaller list\n if (newRange.end > dataLength) {\n // We have to recalculate the first visible index based on new data length and viewport size.\n const maxVisibleItems = Math.ceil(viewportSize / this._itemSize);\n const newVisibleIndex = Math.max(0, Math.min(firstVisibleIndex, dataLength - maxVisibleItems));\n // If first visible index changed we must update scroll offset to handle start/end buffers\n // Current range must also be adjusted to cover the new position (bottom of new list).\n if (firstVisibleIndex != newVisibleIndex) {\n firstVisibleIndex = newVisibleIndex;\n scrollOffset = newVisibleIndex * this._itemSize;\n newRange.start = Math.floor(firstVisibleIndex);\n }\n newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems));\n }\n const startBuffer = scrollOffset - newRange.start * this._itemSize;\n if (startBuffer < this._minBufferPx && newRange.start != 0) {\n const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize);\n newRange.start = Math.max(0, newRange.start - expandStart);\n newRange.end = Math.min(dataLength, Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize));\n } else {\n const endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize);\n if (endBuffer < this._minBufferPx && newRange.end != dataLength) {\n const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize);\n if (expandEnd > 0) {\n newRange.end = Math.min(dataLength, newRange.end + expandEnd);\n newRange.start = Math.max(0, Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize));\n }\n }\n }\n this._viewport.setRenderedRange(newRange);\n this._viewport.setRenderedContentOffset(this._itemSize * newRange.start);\n this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\n }\n}\n/**\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\n * `FixedSizeVirtualScrollStrategy` from the given directive.\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\n * `FixedSizeVirtualScrollStrategy` from.\n */\nfunction _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir) {\n return fixedSizeDir._scrollStrategy;\n}\n/** A virtual scroll strategy that supports fixed-size items. */\nlet CdkFixedSizeVirtualScroll = /*#__PURE__*/(() => {\n class CdkFixedSizeVirtualScroll {\n constructor() {\n this._itemSize = 20;\n this._minBufferPx = 100;\n this._maxBufferPx = 200;\n /** The scroll strategy used by this directive. */\n this._scrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n /** The size of the items in the list (in pixels). */\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(value) {\n this._itemSize = coerceNumberProperty(value);\n }\n /**\n * The minimum amount of buffer rendered beyond the viewport (in pixels).\n * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.\n */\n get minBufferPx() {\n return this._minBufferPx;\n }\n set minBufferPx(value) {\n this._minBufferPx = coerceNumberProperty(value);\n }\n /**\n * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.\n */\n get maxBufferPx() {\n return this._maxBufferPx;\n }\n set maxBufferPx(value) {\n this._maxBufferPx = coerceNumberProperty(value);\n }\n ngOnChanges() {\n this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n static {\n this.ɵfac = function CdkFixedSizeVirtualScroll_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkFixedSizeVirtualScroll)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkFixedSizeVirtualScroll,\n selectors: [[\"cdk-virtual-scroll-viewport\", \"itemSize\", \"\"]],\n inputs: {\n itemSize: \"itemSize\",\n minBufferPx: \"minBufferPx\",\n maxBufferPx: \"maxBufferPx\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: _fixedSizeVirtualScrollStrategyFactory,\n deps: [forwardRef(() => CdkFixedSizeVirtualScroll)]\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkFixedSizeVirtualScroll;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Time in ms to throttle the scrolling events by default. */\nconst DEFAULT_SCROLL_TIME = 20;\n/**\n * Service contained all registered Scrollable references and emits an event when any one of the\n * Scrollable references emit a scrolled event.\n */\nlet ScrollDispatcher = /*#__PURE__*/(() => {\n class ScrollDispatcher {\n constructor(_ngZone, _platform, document) {\n this._ngZone = _ngZone;\n this._platform = _platform;\n /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n this._scrolled = new Subject();\n /** Keeps track of the global `scroll` and `resize` subscriptions. */\n this._globalSubscription = null;\n /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\n this._scrolledCount = 0;\n /**\n * Map of all the scrollable references that are registered with the service and their\n * scroll event subscriptions.\n */\n this.scrollContainers = new Map();\n this._document = document;\n }\n /**\n * Registers a scrollable instance with the service and listens for its scrolled events. When the\n * scrollable is scrolled, the service emits the event to its scrolled observable.\n * @param scrollable Scrollable instance to be registered.\n */\n register(scrollable) {\n if (!this.scrollContainers.has(scrollable)) {\n this.scrollContainers.set(scrollable, scrollable.elementScrolled().subscribe(() => this._scrolled.next(scrollable)));\n }\n }\n /**\n * De-registers a Scrollable reference and unsubscribes from its scroll event observable.\n * @param scrollable Scrollable instance to be deregistered.\n */\n deregister(scrollable) {\n const scrollableReference = this.scrollContainers.get(scrollable);\n if (scrollableReference) {\n scrollableReference.unsubscribe();\n this.scrollContainers.delete(scrollable);\n }\n }\n /**\n * Returns an observable that emits an event whenever any of the registered Scrollable\n * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\n * to override the default \"throttle\" time.\n *\n * **Note:** in order to avoid hitting change detection for every scroll event,\n * all of the events emitted from this stream will be run outside the Angular zone.\n * If you need to update any data bindings as a result of a scroll event, you have\n * to run the callback using `NgZone.run`.\n */\n scrolled(auditTimeInMs = DEFAULT_SCROLL_TIME) {\n if (!this._platform.isBrowser) {\n return of();\n }\n return new Observable(observer => {\n if (!this._globalSubscription) {\n this._addGlobalListener();\n }\n // In the case of a 0ms delay, use an observable without auditTime\n // since it does add a perceptible delay in processing overhead.\n const subscription = auditTimeInMs > 0 ? this._scrolled.pipe(auditTime(auditTimeInMs)).subscribe(observer) : this._scrolled.subscribe(observer);\n this._scrolledCount++;\n return () => {\n subscription.unsubscribe();\n this._scrolledCount--;\n if (!this._scrolledCount) {\n this._removeGlobalListener();\n }\n };\n });\n }\n ngOnDestroy() {\n this._removeGlobalListener();\n this.scrollContainers.forEach((_, container) => this.deregister(container));\n this._scrolled.complete();\n }\n /**\n * Returns an observable that emits whenever any of the\n * scrollable ancestors of an element are scrolled.\n * @param elementOrElementRef Element whose ancestors to listen for.\n * @param auditTimeInMs Time to throttle the scroll events.\n */\n ancestorScrolled(elementOrElementRef, auditTimeInMs) {\n const ancestors = this.getAncestorScrollContainers(elementOrElementRef);\n return this.scrolled(auditTimeInMs).pipe(filter(target => {\n return !target || ancestors.indexOf(target) > -1;\n }));\n }\n /** Returns all registered Scrollables that contain the provided element. */\n getAncestorScrollContainers(elementOrElementRef) {\n const scrollingContainers = [];\n this.scrollContainers.forEach((_subscription, scrollable) => {\n if (this._scrollableContainsElement(scrollable, elementOrElementRef)) {\n scrollingContainers.push(scrollable);\n }\n });\n return scrollingContainers;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /** Returns true if the element is contained within the provided Scrollable. */\n _scrollableContainsElement(scrollable, elementOrElementRef) {\n let element = coerceElement(elementOrElementRef);\n let scrollableElement = scrollable.getElementRef().nativeElement;\n // Traverse through the element parents until we reach null, checking if any of the elements\n // are the scrollable's element.\n do {\n if (element == scrollableElement) {\n return true;\n }\n } while (element = element.parentElement);\n return false;\n }\n /** Sets up the global scroll listeners. */\n _addGlobalListener() {\n this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n return fromEvent(window.document, 'scroll').subscribe(() => this._scrolled.next());\n });\n }\n /** Cleans up the global scroll listener. */\n _removeGlobalListener() {\n if (this._globalSubscription) {\n this._globalSubscription.unsubscribe();\n this._globalSubscription = null;\n }\n }\n static {\n this.ɵfac = function ScrollDispatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollDispatcher)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.Platform), i0.ɵɵinject(DOCUMENT, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScrollDispatcher,\n factory: ScrollDispatcher.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ScrollDispatcher;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Sends an event when the directive's element is scrolled. Registers itself with the\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\n * can be listened to through the service.\n */\nlet CdkScrollable = /*#__PURE__*/(() => {\n class CdkScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n this.elementRef = elementRef;\n this.scrollDispatcher = scrollDispatcher;\n this.ngZone = ngZone;\n this.dir = dir;\n this._destroyed = new Subject();\n this._elementScrolled = new Observable(observer => this.ngZone.runOutsideAngular(() => fromEvent(this.elementRef.nativeElement, 'scroll').pipe(takeUntil(this._destroyed)).subscribe(observer)));\n }\n ngOnInit() {\n this.scrollDispatcher.register(this);\n }\n ngOnDestroy() {\n this.scrollDispatcher.deregister(this);\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Returns observable that emits when a scroll event is fired on the host element. */\n elementScrolled() {\n return this._elementScrolled;\n }\n /** Gets the ElementRef for the viewport. */\n getElementRef() {\n return this.elementRef;\n }\n /**\n * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo\n * method, since browsers are not consistent about what scrollLeft means in RTL. For this method\n * left and right always refer to the left and right side of the scrolling container irrespective\n * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n * in an RTL context.\n * @param options specified the offsets to scroll to.\n */\n scrollTo(options) {\n const el = this.elementRef.nativeElement;\n const isRtl = this.dir && this.dir.value == 'rtl';\n // Rewrite start & end offsets as right or left offsets.\n if (options.left == null) {\n options.left = isRtl ? options.end : options.start;\n }\n if (options.right == null) {\n options.right = isRtl ? options.start : options.end;\n }\n // Rewrite the bottom offset as a top offset.\n if (options.bottom != null) {\n options.top = el.scrollHeight - el.clientHeight - options.bottom;\n }\n // Rewrite the right offset as a left offset.\n if (isRtl && getRtlScrollAxisType() != RtlScrollAxisType.NORMAL) {\n if (options.left != null) {\n options.right = el.scrollWidth - el.clientWidth - options.left;\n }\n if (getRtlScrollAxisType() == RtlScrollAxisType.INVERTED) {\n options.left = options.right;\n } else if (getRtlScrollAxisType() == RtlScrollAxisType.NEGATED) {\n options.left = options.right ? -options.right : options.right;\n }\n } else {\n if (options.right != null) {\n options.left = el.scrollWidth - el.clientWidth - options.right;\n }\n }\n this._applyScrollToOptions(options);\n }\n _applyScrollToOptions(options) {\n const el = this.elementRef.nativeElement;\n if (supportsScrollBehavior()) {\n el.scrollTo(options);\n } else {\n if (options.top != null) {\n el.scrollTop = options.top;\n }\n if (options.left != null) {\n el.scrollLeft = options.left;\n }\n }\n }\n /**\n * Measures the scroll offset relative to the specified edge of the viewport. This method can be\n * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent\n * about what scrollLeft means in RTL. The values returned by this method are normalized such that\n * left and right always refer to the left and right side of the scrolling container irrespective\n * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n * in an RTL context.\n * @param from The edge to measure from.\n */\n measureScrollOffset(from) {\n const LEFT = 'left';\n const RIGHT = 'right';\n const el = this.elementRef.nativeElement;\n if (from == 'top') {\n return el.scrollTop;\n }\n if (from == 'bottom') {\n return el.scrollHeight - el.clientHeight - el.scrollTop;\n }\n // Rewrite start & end as left or right offsets.\n const isRtl = this.dir && this.dir.value == 'rtl';\n if (from == 'start') {\n from = isRtl ? RIGHT : LEFT;\n } else if (from == 'end') {\n from = isRtl ? LEFT : RIGHT;\n }\n if (isRtl && getRtlScrollAxisType() == RtlScrollAxisType.INVERTED) {\n // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and\n // 0 when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return el.scrollLeft;\n }\n } else if (isRtl && getRtlScrollAxisType() == RtlScrollAxisType.NEGATED) {\n // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and\n // 0 when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollLeft + el.scrollWidth - el.clientWidth;\n } else {\n return -el.scrollLeft;\n }\n } else {\n // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and\n // (scrollWidth - clientWidth) when scrolled all the way right.\n if (from == LEFT) {\n return el.scrollLeft;\n } else {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n }\n }\n }\n static {\n this.ɵfac = function CdkScrollable_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkScrollable)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkScrollable,\n selectors: [[\"\", \"cdk-scrollable\", \"\"], [\"\", \"cdkScrollable\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkScrollable;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Time in ms to throttle the resize events by default. */\nconst DEFAULT_RESIZE_TIME = 20;\n/**\n * Simple utility for getting the bounds of the browser viewport.\n * @docs-private\n */\nlet ViewportRuler = /*#__PURE__*/(() => {\n class ViewportRuler {\n constructor(_platform, ngZone, document) {\n this._platform = _platform;\n /** Stream of viewport change events. */\n this._change = new Subject();\n /** Event listener that will be used to handle the viewport change events. */\n this._changeListener = event => {\n this._change.next(event);\n };\n this._document = document;\n ngZone.runOutsideAngular(() => {\n if (_platform.isBrowser) {\n const window = this._getWindow();\n // Note that bind the events ourselves, rather than going through something like RxJS's\n // `fromEvent` so that we can ensure that they're bound outside of the NgZone.\n window.addEventListener('resize', this._changeListener);\n window.addEventListener('orientationchange', this._changeListener);\n }\n // Clear the cached position so that the viewport is re-measured next time it is required.\n // We don't need to keep track of the subscription, because it is completed on destroy.\n this.change().subscribe(() => this._viewportSize = null);\n });\n }\n ngOnDestroy() {\n if (this._platform.isBrowser) {\n const window = this._getWindow();\n window.removeEventListener('resize', this._changeListener);\n window.removeEventListener('orientationchange', this._changeListener);\n }\n this._change.complete();\n }\n /** Returns the viewport's width and height. */\n getViewportSize() {\n if (!this._viewportSize) {\n this._updateViewportSize();\n }\n const output = {\n width: this._viewportSize.width,\n height: this._viewportSize.height\n };\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null;\n }\n return output;\n }\n /** Gets a DOMRect for the viewport's bounds. */\n getViewportRect() {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition();\n const {\n width,\n height\n } = this.getViewportSize();\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width\n };\n }\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition() {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return {\n top: 0,\n left: 0\n };\n }\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const document = this._document;\n const window = this._getWindow();\n const documentElement = document.documentElement;\n const documentRect = documentElement.getBoundingClientRect();\n const top = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0;\n const left = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0;\n return {\n top,\n left\n };\n }\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * This stream emits outside of the Angular zone.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime = DEFAULT_RESIZE_TIME) {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /** Updates the cached viewport size. */\n _updateViewportSize() {\n const window = this._getWindow();\n this._viewportSize = this._platform.isBrowser ? {\n width: window.innerWidth,\n height: window.innerHeight\n } : {\n width: 0,\n height: 0\n };\n }\n static {\n this.ɵfac = function ViewportRuler_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ViewportRuler)(i0.ɵɵinject(i1.Platform), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(DOCUMENT, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ViewportRuler,\n factory: ViewportRuler.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ViewportRuler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst VIRTUAL_SCROLLABLE = /*#__PURE__*/new InjectionToken('VIRTUAL_SCROLLABLE');\n/**\n * Extending the {@link CdkScrollable} to be used as scrolling container for virtual scrolling.\n */\nlet CdkVirtualScrollable = /*#__PURE__*/(() => {\n class CdkVirtualScrollable extends CdkScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n }\n /**\n * Measure the viewport size for the provided orientation.\n *\n * @param orientation The orientation to measure the size from.\n */\n measureViewportSize(orientation) {\n const viewportEl = this.elementRef.nativeElement;\n return orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;\n }\n static {\n this.ɵfac = function CdkVirtualScrollable_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkVirtualScrollable)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkVirtualScrollable,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkVirtualScrollable;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Checks if the given ranges are equal. */\nfunction rangesEqual(r1, r2) {\n return r1.start == r2.start && r1.end == r2.end;\n}\n/**\n * Scheduler to be used for scroll events. Needs to fall back to\n * something that doesn't rely on requestAnimationFrame on environments\n * that don't support it (e.g. server-side rendering).\n */\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n/** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */\nlet CdkVirtualScrollViewport = /*#__PURE__*/(() => {\n class CdkVirtualScrollViewport extends CdkVirtualScrollable {\n /** The direction the viewport scrolls. */\n get orientation() {\n return this._orientation;\n }\n set orientation(orientation) {\n if (this._orientation !== orientation) {\n this._orientation = orientation;\n this._calculateSpacerSize();\n }\n }\n constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler, scrollable) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n this.elementRef = elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._scrollStrategy = _scrollStrategy;\n this.scrollable = scrollable;\n this._platform = inject(Platform);\n /** Emits when the viewport is detached from a CdkVirtualForOf. */\n this._detachedSubject = new Subject();\n /** Emits when the rendered range changes. */\n this._renderedRangeSubject = new Subject();\n this._orientation = 'vertical';\n /**\n * Whether rendered items should persist in the DOM after scrolling out of view. By default, items\n * will be removed.\n */\n this.appendOnly = false;\n // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll\n // strategy lazily (i.e. only if the user is actually listening to the events). We do this because\n // depending on how the strategy calculates the scrolled index, it may come at a cost to\n // performance.\n /** Emits when the index of the first element visible in the viewport changes. */\n this.scrolledIndexChange = new Observable(observer => this._scrollStrategy.scrolledIndexChange.subscribe(index => Promise.resolve().then(() => this.ngZone.run(() => observer.next(index)))));\n /** A stream that emits whenever the rendered range changes. */\n this.renderedRangeStream = this._renderedRangeSubject;\n /**\n * The total size of all content (in pixels), including content that is not currently rendered.\n */\n this._totalContentSize = 0;\n /** A string representing the `style.width` property value to be used for the spacer element. */\n this._totalContentWidth = '';\n /** A string representing the `style.height` property value to be used for the spacer element. */\n this._totalContentHeight = '';\n /** The currently rendered range of indices. */\n this._renderedRange = {\n start: 0,\n end: 0\n };\n /** The length of the data bound to this viewport (in number of items). */\n this._dataLength = 0;\n /** The size of the viewport (in pixels). */\n this._viewportSize = 0;\n /** The last rendered content offset that was set. */\n this._renderedContentOffset = 0;\n /**\n * Whether the last rendered content offset was to the end of the content (and therefore needs to\n * be rewritten as an offset to the start of the content).\n */\n this._renderedContentOffsetNeedsRewrite = false;\n /** Whether there is a pending change detection cycle. */\n this._isChangeDetectionPending = false;\n /** A list of functions to run after the next change detection cycle. */\n this._runAfterChangeDetection = [];\n /** Subscription to changes in the viewport size. */\n this._viewportChanges = Subscription.EMPTY;\n this._injector = inject(Injector);\n this._isDestroyed = false;\n if (!_scrollStrategy && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.');\n }\n this._viewportChanges = viewportRuler.change().subscribe(() => {\n this.checkViewportSize();\n });\n if (!this.scrollable) {\n // No scrollable is provided, so the virtual-scroll-viewport needs to become a scrollable\n this.elementRef.nativeElement.classList.add('cdk-virtual-scrollable');\n this.scrollable = this;\n }\n }\n ngOnInit() {\n // Scrolling depends on the element dimensions which we can't get during SSR.\n if (!this._platform.isBrowser) {\n return;\n }\n if (this.scrollable === this) {\n super.ngOnInit();\n }\n // It's still too early to measure the viewport at this point. Deferring with a promise allows\n // the Viewport to be rendered with the correct size before we measure. We run this outside the\n // zone to avoid causing more change detection cycles. We handle the change detection loop\n // ourselves instead.\n this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n this._measureViewportSize();\n this._scrollStrategy.attach(this);\n this.scrollable.elementScrolled().pipe(\n // Start off with a fake scroll event so we properly detect our initial position.\n startWith(null),\n // Collect multiple events into one until the next animation frame. This way if\n // there are multiple scroll events in the same frame we only need to recheck\n // our layout once.\n auditTime(0, SCROLL_SCHEDULER),\n // Usually `elementScrolled` is completed when the scrollable is destroyed, but\n // that may not be the case if a `CdkVirtualScrollableElement` is used so we have\n // to unsubscribe here just in case.\n takeUntil(this._destroyed)).subscribe(() => this._scrollStrategy.onContentScrolled());\n this._markChangeDetectionNeeded();\n }));\n }\n ngOnDestroy() {\n this.detach();\n this._scrollStrategy.detach();\n // Complete all subjects\n this._renderedRangeSubject.complete();\n this._detachedSubject.complete();\n this._viewportChanges.unsubscribe();\n this._isDestroyed = true;\n super.ngOnDestroy();\n }\n /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */\n attach(forOf) {\n if (this._forOf && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('CdkVirtualScrollViewport is already attached.');\n }\n // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length\n // changes. Run outside the zone to avoid triggering change detection, since we're managing the\n // change detection loop ourselves.\n this.ngZone.runOutsideAngular(() => {\n this._forOf = forOf;\n this._forOf.dataStream.pipe(takeUntil(this._detachedSubject)).subscribe(data => {\n const newLength = data.length;\n if (newLength !== this._dataLength) {\n this._dataLength = newLength;\n this._scrollStrategy.onDataLengthChanged();\n }\n this._doChangeDetection();\n });\n });\n }\n /** Detaches the current `CdkVirtualForOf`. */\n detach() {\n this._forOf = null;\n this._detachedSubject.next();\n }\n /** Gets the length of the data bound to this viewport (in number of items). */\n getDataLength() {\n return this._dataLength;\n }\n /** Gets the size of the viewport (in pixels). */\n getViewportSize() {\n return this._viewportSize;\n }\n // TODO(mmalerba): This is technically out of sync with what's really rendered until a render\n // cycle happens. I'm being careful to only call it after the render cycle is complete and before\n // setting it to something else, but its error prone and should probably be split into\n // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.\n /** Get the current rendered range of items. */\n getRenderedRange() {\n return this._renderedRange;\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\n }\n /**\n * Sets the total size of all content (in pixels), including content that is not currently\n * rendered.\n */\n setTotalContentSize(size) {\n if (this._totalContentSize !== size) {\n this._totalContentSize = size;\n this._calculateSpacerSize();\n this._markChangeDetectionNeeded();\n }\n }\n /** Sets the currently rendered range of indices. */\n setRenderedRange(range) {\n if (!rangesEqual(this._renderedRange, range)) {\n if (this.appendOnly) {\n range = {\n start: 0,\n end: Math.max(this._renderedRange.end, range.end)\n };\n }\n this._renderedRangeSubject.next(this._renderedRange = range);\n this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered());\n }\n }\n /**\n * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\n */\n getOffsetToRenderedContentStart() {\n return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;\n }\n /**\n * Sets the offset from the start of the viewport to either the start or end of the rendered data\n * (in pixels).\n */\n setRenderedContentOffset(offset, to = 'to-start') {\n // In appendOnly, we always start from the top\n offset = this.appendOnly && to === 'to-start' ? 0 : offset;\n // For a horizontal viewport in a right-to-left language we need to translate along the x-axis\n // in the negative direction.\n const isRtl = this.dir && this.dir.value == 'rtl';\n const isHorizontal = this.orientation == 'horizontal';\n const axis = isHorizontal ? 'X' : 'Y';\n const axisDirection = isHorizontal && isRtl ? -1 : 1;\n let transform = `translate${axis}(${Number(axisDirection * offset)}px)`;\n this._renderedContentOffset = offset;\n if (to === 'to-end') {\n transform += ` translate${axis}(-100%)`;\n // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise\n // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would\n // expand upward).\n this._renderedContentOffsetNeedsRewrite = true;\n }\n if (this._renderedContentTransform != transform) {\n // We know this value is safe because we parse `offset` with `Number()` before passing it\n // into the string.\n this._renderedContentTransform = transform;\n this._markChangeDetectionNeeded(() => {\n if (this._renderedContentOffsetNeedsRewrite) {\n this._renderedContentOffset -= this.measureRenderedContentSize();\n this._renderedContentOffsetNeedsRewrite = false;\n this.setRenderedContentOffset(this._renderedContentOffset);\n } else {\n this._scrollStrategy.onRenderedOffsetChanged();\n }\n });\n }\n }\n /**\n * Scrolls to the given offset from the start of the viewport. Please note that this is not always\n * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\n * direction, this would be the equivalent of setting a fictional `scrollRight` property.\n * @param offset The offset to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n */\n scrollToOffset(offset, behavior = 'auto') {\n const options = {\n behavior\n };\n if (this.orientation === 'horizontal') {\n options.start = offset;\n } else {\n options.top = offset;\n }\n this.scrollable.scrollTo(options);\n }\n /**\n * Scrolls to the offset for the given index.\n * @param index The index of the element to scroll to.\n * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n */\n scrollToIndex(index, behavior = 'auto') {\n this._scrollStrategy.scrollToIndex(index, behavior);\n }\n /**\n * Gets the current scroll offset from the start of the scrollable (in pixels).\n * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\n * in horizontal mode.\n */\n measureScrollOffset(from) {\n // This is to break the call cycle\n let measureScrollOffset;\n if (this.scrollable == this) {\n measureScrollOffset = _from => super.measureScrollOffset(_from);\n } else {\n measureScrollOffset = _from => this.scrollable.measureScrollOffset(_from);\n }\n return Math.max(0, measureScrollOffset(from ?? (this.orientation === 'horizontal' ? 'start' : 'top')) - this.measureViewportOffset());\n }\n /**\n * Measures the offset of the viewport from the scrolling container\n * @param from The edge to measure from.\n */\n measureViewportOffset(from) {\n let fromRect;\n const LEFT = 'left';\n const RIGHT = 'right';\n const isRtl = this.dir?.value == 'rtl';\n if (from == 'start') {\n fromRect = isRtl ? RIGHT : LEFT;\n } else if (from == 'end') {\n fromRect = isRtl ? LEFT : RIGHT;\n } else if (from) {\n fromRect = from;\n } else {\n fromRect = this.orientation === 'horizontal' ? 'left' : 'top';\n }\n const scrollerClientRect = this.scrollable.measureBoundingClientRectWithScrollOffset(fromRect);\n const viewportClientRect = this.elementRef.nativeElement.getBoundingClientRect()[fromRect];\n return viewportClientRect - scrollerClientRect;\n }\n /** Measure the combined size of all of the rendered items. */\n measureRenderedContentSize() {\n const contentEl = this._contentWrapper.nativeElement;\n return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight;\n }\n /**\n * Measure the total combined size of the given range. Throws if the range includes items that are\n * not rendered.\n */\n measureRangeSize(range) {\n if (!this._forOf) {\n return 0;\n }\n return this._forOf.measureRangeSize(range, this.orientation);\n }\n /** Update the viewport dimensions and re-render. */\n checkViewportSize() {\n // TODO: Cleanup later when add logic for handling content resize\n this._measureViewportSize();\n this._scrollStrategy.onDataLengthChanged();\n }\n /** Measure the viewport size. */\n _measureViewportSize() {\n this._viewportSize = this.scrollable.measureViewportSize(this.orientation);\n }\n /** Queue up change detection to run. */\n _markChangeDetectionNeeded(runAfter) {\n if (runAfter) {\n this._runAfterChangeDetection.push(runAfter);\n }\n // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of\n // properties sequentially we only have to run `_doChangeDetection` once at the end.\n if (!this._isChangeDetectionPending) {\n this._isChangeDetectionPending = true;\n this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n this._doChangeDetection();\n }));\n }\n }\n /** Run change detection. */\n _doChangeDetection() {\n if (this._isDestroyed) {\n return;\n }\n this.ngZone.run(() => {\n // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection\n // from the root, since the repeated items are content projected in. Calling `detectChanges`\n // instead does not properly check the projected content.\n this._changeDetectorRef.markForCheck();\n // Apply the content transform. The transform can't be set via an Angular binding because\n // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of\n // string literals, a variable that can only be 'X' or 'Y', and user input that is run through\n // the `Number` function first to coerce it to a numeric value.\n this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform;\n afterNextRender(() => {\n this._isChangeDetectionPending = false;\n const runAfterChangeDetection = this._runAfterChangeDetection;\n this._runAfterChangeDetection = [];\n for (const fn of runAfterChangeDetection) {\n fn();\n }\n }, {\n injector: this._injector\n });\n });\n }\n /** Calculates the `style.width` and `style.height` for the spacer element. */\n _calculateSpacerSize() {\n this._totalContentHeight = this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`;\n this._totalContentWidth = this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '';\n }\n static {\n this.ɵfac = function CdkVirtualScrollViewport_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkVirtualScrollViewport)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(VIRTUAL_SCROLL_STRATEGY, 8), i0.ɵɵdirectiveInject(i2.Directionality, 8), i0.ɵɵdirectiveInject(ScrollDispatcher), i0.ɵɵdirectiveInject(ViewportRuler), i0.ɵɵdirectiveInject(VIRTUAL_SCROLLABLE, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkVirtualScrollViewport,\n selectors: [[\"cdk-virtual-scroll-viewport\"]],\n viewQuery: function CdkVirtualScrollViewport_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._contentWrapper = _t.first);\n }\n },\n hostAttrs: [1, \"cdk-virtual-scroll-viewport\"],\n hostVars: 4,\n hostBindings: function CdkVirtualScrollViewport_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"cdk-virtual-scroll-orientation-horizontal\", ctx.orientation === \"horizontal\")(\"cdk-virtual-scroll-orientation-vertical\", ctx.orientation !== \"horizontal\");\n }\n },\n inputs: {\n orientation: \"orientation\",\n appendOnly: [2, \"appendOnly\", \"appendOnly\", booleanAttribute]\n },\n outputs: {\n scrolledIndexChange: \"scrolledIndexChange\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkScrollable,\n useFactory: (virtualScrollable, viewport) => virtualScrollable || viewport,\n deps: [[new Optional(), new Inject(VIRTUAL_SCROLLABLE)], CdkVirtualScrollViewport]\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 4,\n vars: 4,\n consts: [[\"contentWrapper\", \"\"], [1, \"cdk-virtual-scroll-content-wrapper\"], [1, \"cdk-virtual-scroll-spacer\"]],\n template: function CdkVirtualScrollViewport_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(3, \"div\", 2);\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵstyleProp(\"width\", ctx._totalContentWidth)(\"height\", ctx._totalContentHeight);\n }\n },\n styles: [\"cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return CdkVirtualScrollViewport;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Helper to extract the offset of a DOM Node in a certain direction. */\nfunction getOffset(orientation, direction, node) {\n const el = node;\n if (!el.getBoundingClientRect) {\n return 0;\n }\n const rect = el.getBoundingClientRect();\n if (orientation === 'horizontal') {\n return direction === 'start' ? rect.left : rect.right;\n }\n return direction === 'start' ? rect.top : rect.bottom;\n}\n/**\n * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling\n * container.\n */\nlet CdkVirtualForOf = /*#__PURE__*/(() => {\n class CdkVirtualForOf {\n /** The DataSource to display. */\n get cdkVirtualForOf() {\n return this._cdkVirtualForOf;\n }\n set cdkVirtualForOf(value) {\n this._cdkVirtualForOf = value;\n if (isDataSource(value)) {\n this._dataSourceChanges.next(value);\n } else {\n // If value is an an NgIterable, convert it to an array.\n this._dataSourceChanges.next(new ArrayDataSource(isObservable(value) ? value : Array.from(value || [])));\n }\n }\n /**\n * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and\n * the item and produces a value to be used as the item's identity when tracking changes.\n */\n get cdkVirtualForTrackBy() {\n return this._cdkVirtualForTrackBy;\n }\n set cdkVirtualForTrackBy(fn) {\n this._needsUpdate = true;\n this._cdkVirtualForTrackBy = fn ? (index, item) => fn(index + (this._renderedRange ? this._renderedRange.start : 0), item) : undefined;\n }\n /** The template used to stamp out new elements. */\n set cdkVirtualForTemplate(value) {\n if (value) {\n this._needsUpdate = true;\n this._template = value;\n }\n }\n /**\n * The size of the cache used to store templates that are not being used for re-use later.\n * Setting the cache size to `0` will disable caching. Defaults to 20 templates.\n */\n get cdkVirtualForTemplateCacheSize() {\n return this._viewRepeater.viewCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(size) {\n this._viewRepeater.viewCacheSize = coerceNumberProperty(size);\n }\n constructor(/** The view container to add items to. */\n _viewContainerRef, /** The template to use when stamping out new items. */\n _template, /** The set of available differs. */\n _differs, /** The strategy used to render items in the virtual scroll viewport. */\n _viewRepeater, /** The virtual scrolling viewport that these items are being rendered in. */\n _viewport, ngZone) {\n this._viewContainerRef = _viewContainerRef;\n this._template = _template;\n this._differs = _differs;\n this._viewRepeater = _viewRepeater;\n this._viewport = _viewport;\n /** Emits when the rendered view of the data changes. */\n this.viewChange = new Subject();\n /** Subject that emits when a new DataSource instance is given. */\n this._dataSourceChanges = new Subject();\n /** Emits whenever the data in the current DataSource changes. */\n this.dataStream = this._dataSourceChanges.pipe(\n // Start off with null `DataSource`.\n startWith(null),\n // Bundle up the previous and current data sources so we can work with both.\n pairwise(),\n // Use `_changeDataSource` to disconnect from the previous data source and connect to the\n // new one, passing back a stream of data changes which we run through `switchMap` to give\n // us a data stream that emits the latest data from whatever the current `DataSource` is.\n switchMap(([prev, cur]) => this._changeDataSource(prev, cur)),\n // Replay the last emitted data when someone subscribes.\n shareReplay(1));\n /** The differ used to calculate changes to the data. */\n this._differ = null;\n /** Whether the rendered data should be updated during the next ngDoCheck cycle. */\n this._needsUpdate = false;\n this._destroyed = new Subject();\n this.dataStream.subscribe(data => {\n this._data = data;\n this._onRenderedDataChange();\n });\n this._viewport.renderedRangeStream.pipe(takeUntil(this._destroyed)).subscribe(range => {\n this._renderedRange = range;\n if (this.viewChange.observers.length) {\n ngZone.run(() => this.viewChange.next(this._renderedRange));\n }\n this._onRenderedDataChange();\n });\n this._viewport.attach(this);\n }\n /**\n * Measures the combined size (width for horizontal orientation, height for vertical) of all items\n * in the specified range. Throws an error if the range includes items that are not currently\n * rendered.\n */\n measureRangeSize(range, orientation) {\n if (range.start >= range.end) {\n return 0;\n }\n if ((range.start < this._renderedRange.start || range.end > this._renderedRange.end) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Error: attempted to measure an item that isn't rendered.`);\n }\n // The index into the list of rendered views for the first item in the range.\n const renderedStartIndex = range.start - this._renderedRange.start;\n // The length of the range we're measuring.\n const rangeLen = range.end - range.start;\n // Loop over all the views, find the first and land node and compute the size by subtracting\n // the top of the first node from the bottom of the last one.\n let firstNode;\n let lastNode;\n // Find the first node by starting from the beginning and going forwards.\n for (let i = 0; i < rangeLen; i++) {\n const view = this._viewContainerRef.get(i + renderedStartIndex);\n if (view && view.rootNodes.length) {\n firstNode = lastNode = view.rootNodes[0];\n break;\n }\n }\n // Find the last node by starting from the end and going backwards.\n for (let i = rangeLen - 1; i > -1; i--) {\n const view = this._viewContainerRef.get(i + renderedStartIndex);\n if (view && view.rootNodes.length) {\n lastNode = view.rootNodes[view.rootNodes.length - 1];\n break;\n }\n }\n return firstNode && lastNode ? getOffset(orientation, 'end', lastNode) - getOffset(orientation, 'start', firstNode) : 0;\n }\n ngDoCheck() {\n if (this._differ && this._needsUpdate) {\n // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of\n // this list being rendered (can use simpler algorithm) vs needs update due to data actually\n // changing (need to do this diff).\n const changes = this._differ.diff(this._renderedItems);\n if (!changes) {\n this._updateContext();\n } else {\n this._applyChanges(changes);\n }\n this._needsUpdate = false;\n }\n }\n ngOnDestroy() {\n this._viewport.detach();\n this._dataSourceChanges.next(undefined);\n this._dataSourceChanges.complete();\n this.viewChange.complete();\n this._destroyed.next();\n this._destroyed.complete();\n this._viewRepeater.detach();\n }\n /** React to scroll state changes in the viewport. */\n _onRenderedDataChange() {\n if (!this._renderedRange) {\n return;\n }\n this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end);\n if (!this._differ) {\n // Use a wrapper function for the `trackBy` so any new values are\n // picked up automatically without having to recreate the differ.\n this._differ = this._differs.find(this._renderedItems).create((index, item) => {\n return this.cdkVirtualForTrackBy ? this.cdkVirtualForTrackBy(index, item) : item;\n });\n }\n this._needsUpdate = true;\n }\n /** Swap out one `DataSource` for another. */\n _changeDataSource(oldDs, newDs) {\n if (oldDs) {\n oldDs.disconnect(this);\n }\n this._needsUpdate = true;\n return newDs ? newDs.connect(this) : of();\n }\n /** Update the `CdkVirtualForOfContext` for all views. */\n _updateContext() {\n const count = this._data.length;\n let i = this._viewContainerRef.length;\n while (i--) {\n const view = this._viewContainerRef.get(i);\n view.context.index = this._renderedRange.start + i;\n view.context.count = count;\n this._updateComputedContextProperties(view.context);\n view.detectChanges();\n }\n }\n /** Apply changes to the DOM. */\n _applyChanges(changes) {\n this._viewRepeater.applyChanges(changes, this._viewContainerRef, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record, currentIndex), record => record.item);\n // Update $implicit for any items that had an identity change.\n changes.forEachIdentityChange(record => {\n const view = this._viewContainerRef.get(record.currentIndex);\n view.context.$implicit = record.item;\n });\n // Update the context variables on all items.\n const count = this._data.length;\n let i = this._viewContainerRef.length;\n while (i--) {\n const view = this._viewContainerRef.get(i);\n view.context.index = this._renderedRange.start + i;\n view.context.count = count;\n this._updateComputedContextProperties(view.context);\n }\n }\n /** Update the computed properties on the `CdkVirtualForOfContext`. */\n _updateComputedContextProperties(context) {\n context.first = context.index === 0;\n context.last = context.index === context.count - 1;\n context.even = context.index % 2 === 0;\n context.odd = !context.even;\n }\n _getEmbeddedViewArgs(record, index) {\n // Note that it's important that we insert the item directly at the proper index,\n // rather than inserting it and the moving it in place, because if there's a directive\n // on the same node that injects the `ViewContainerRef`, Angular will insert another\n // comment node which can throw off the move when it's being repeated for all items.\n return {\n templateRef: this._template,\n context: {\n $implicit: record.item,\n // It's guaranteed that the iterable is not \"undefined\" or \"null\" because we only\n // generate views for elements if the \"cdkVirtualForOf\" iterable has elements.\n cdkVirtualForOf: this._cdkVirtualForOf,\n index: -1,\n count: -1,\n first: false,\n last: false,\n odd: false,\n even: false\n },\n index\n };\n }\n static {\n this.ɵfac = function CdkVirtualForOf_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkVirtualForOf)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(_VIEW_REPEATER_STRATEGY), i0.ɵɵdirectiveInject(CdkVirtualScrollViewport, 4), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkVirtualForOf,\n selectors: [[\"\", \"cdkVirtualFor\", \"\", \"cdkVirtualForOf\", \"\"]],\n inputs: {\n cdkVirtualForOf: \"cdkVirtualForOf\",\n cdkVirtualForTrackBy: \"cdkVirtualForTrackBy\",\n cdkVirtualForTemplate: \"cdkVirtualForTemplate\",\n cdkVirtualForTemplateCacheSize: \"cdkVirtualForTemplateCacheSize\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: _VIEW_REPEATER_STRATEGY,\n useClass: _RecycleViewRepeaterStrategy\n }])]\n });\n }\n }\n return CdkVirtualForOf;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Provides a virtual scrollable for the element it is attached to.\n */\nlet CdkVirtualScrollableElement = /*#__PURE__*/(() => {\n class CdkVirtualScrollableElement extends CdkVirtualScrollable {\n constructor(elementRef, scrollDispatcher, ngZone, dir) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from] - this.measureScrollOffset(from);\n }\n static {\n this.ɵfac = function CdkVirtualScrollableElement_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkVirtualScrollableElement)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkVirtualScrollableElement,\n selectors: [[\"\", \"cdkVirtualScrollingElement\", \"\"]],\n hostAttrs: [1, \"cdk-virtual-scrollable\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: VIRTUAL_SCROLLABLE,\n useExisting: CdkVirtualScrollableElement\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkVirtualScrollableElement;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Provides as virtual scrollable for the global / window scrollbar.\n */\nlet CdkVirtualScrollableWindow = /*#__PURE__*/(() => {\n class CdkVirtualScrollableWindow extends CdkVirtualScrollable {\n constructor(scrollDispatcher, ngZone, dir) {\n super(new ElementRef(document.documentElement), scrollDispatcher, ngZone, dir);\n this._elementScrolled = new Observable(observer => this.ngZone.runOutsideAngular(() => fromEvent(document, 'scroll').pipe(takeUntil(this._destroyed)).subscribe(observer)));\n }\n measureBoundingClientRectWithScrollOffset(from) {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\n }\n static {\n this.ɵfac = function CdkVirtualScrollableWindow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkVirtualScrollableWindow)(i0.ɵɵdirectiveInject(ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkVirtualScrollableWindow,\n selectors: [[\"cdk-virtual-scroll-viewport\", \"scrollWindow\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: VIRTUAL_SCROLLABLE,\n useExisting: CdkVirtualScrollableWindow\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkVirtualScrollableWindow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdkScrollableModule = /*#__PURE__*/(() => {\n class CdkScrollableModule {\n static {\n this.ɵfac = function CdkScrollableModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkScrollableModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CdkScrollableModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return CdkScrollableModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @docs-primary-export\n */\nlet ScrollingModule = /*#__PURE__*/(() => {\n class ScrollingModule {\n static {\n this.ɵfac = function ScrollingModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollingModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ScrollingModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [BidiModule, CdkScrollableModule, BidiModule, CdkScrollableModule]\n });\n }\n }\n return ScrollingModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkFixedSizeVirtualScroll, CdkScrollable, CdkScrollableModule, CdkVirtualForOf, CdkVirtualScrollViewport, CdkVirtualScrollable, CdkVirtualScrollableElement, CdkVirtualScrollableWindow, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLLABLE, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory };\n","import * as i1 from '@angular/cdk/scrolling';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nexport { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\nimport * as i6 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, Inject, Optional, untracked, afterRender, afterNextRender, ElementRef, EnvironmentInjector, ApplicationRef, ANIMATION_MODULE_TYPE, InjectionToken, inject, Directive, NgZone, EventEmitter, booleanAttribute, Input, Output, NgModule } from '@angular/core';\nimport { coerceCssPixelValue, coerceArray } from '@angular/cdk/coercion';\nimport * as i1$1 from '@angular/cdk/platform';\nimport { supportsScrollBehavior, _getEventTarget, _isTestEnvironment } from '@angular/cdk/platform';\nimport { filter, takeUntil, takeWhile } from 'rxjs/operators';\nimport * as i5 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { DomPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { Subject, Subscription, merge } from 'rxjs';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nconst scrollBehaviorSupported = /*#__PURE__*/supportsScrollBehavior();\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nclass BlockScrollStrategy {\n constructor(_viewportRuler, document) {\n this._viewportRuler = _viewportRuler;\n this._previousHTMLStyles = {\n top: '',\n left: ''\n };\n this._isEnabled = false;\n this._document = document;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach() {}\n /** Blocks page-level scroll while the attached overlay is open. */\n enable() {\n if (this._canBeEnabled()) {\n const root = this._document.documentElement;\n this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n // Cache the previous inline styles in case the user had set them.\n this._previousHTMLStyles.left = root.style.left || '';\n this._previousHTMLStyles.top = root.style.top || '';\n // Note: we're using the `html` node, instead of the `body`, because the `body` may\n // have the user agent margin, whereas the `html` is guaranteed not to have one.\n root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n root.classList.add('cdk-global-scrollblock');\n this._isEnabled = true;\n }\n }\n /** Unblocks page-level scroll while the attached overlay is open. */\n disable() {\n if (this._isEnabled) {\n const html = this._document.documentElement;\n const body = this._document.body;\n const htmlStyle = html.style;\n const bodyStyle = body.style;\n const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n this._isEnabled = false;\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove('cdk-global-scrollblock');\n // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n // because it can throw off feature detections in `supportsScrollBehavior` which\n // checks for `'scrollBehavior' in documentElement.style`.\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n }\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n _canBeEnabled() {\n // Since the scroll strategies can't be singletons, we have to use a global CSS class\n // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n // scrolling multiple times.\n const html = this._document.documentElement;\n if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n return false;\n }\n const body = this._document.body;\n const viewport = this._viewportRuler.getViewportSize();\n return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\n }\n}\n\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nfunction getMatScrollStrategyAlreadyAttachedError() {\n return Error(`Scroll strategy has already been attached.`);\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nclass CloseScrollStrategy {\n constructor(_scrollDispatcher, _ngZone, _viewportRuler, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._config = _config;\n this._scrollSubscription = null;\n /** Detaches the overlay ref and disables the scroll strategy. */\n this._detach = () => {\n this.disable();\n if (this._overlayRef.hasAttached()) {\n this._ngZone.run(() => this._overlayRef.detach());\n }\n };\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables the closing of the attached overlay on scroll. */\n enable() {\n if (this._scrollSubscription) {\n return;\n }\n const stream = this._scrollDispatcher.scrolled(0).pipe(filter(scrollable => {\n return !scrollable || !this._overlayRef.overlayElement.contains(scrollable.getElementRef().nativeElement);\n }));\n if (this._config && this._config.threshold && this._config.threshold > 1) {\n this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n this._scrollSubscription = stream.subscribe(() => {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config.threshold) {\n this._detach();\n } else {\n this._overlayRef.updatePosition();\n }\n });\n } else {\n this._scrollSubscription = stream.subscribe(this._detach);\n }\n }\n /** Disables the closing the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/** Scroll strategy that doesn't do anything. */\nclass NoopScrollStrategy {\n /** Does nothing, as this scroll strategy is a no-op. */\n enable() {}\n /** Does nothing, as this scroll strategy is a no-op. */\n disable() {}\n /** Does nothing, as this scroll strategy is a no-op. */\n attach() {}\n}\n\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nfunction isElementScrolledOutsideView(element, scrollContainers) {\n return scrollContainers.some(containerBounds => {\n const outsideAbove = element.bottom < containerBounds.top;\n const outsideBelow = element.top > containerBounds.bottom;\n const outsideLeft = element.right < containerBounds.left;\n const outsideRight = element.left > containerBounds.right;\n return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n });\n}\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nfunction isElementClippedByScrolling(element, scrollContainers) {\n return scrollContainers.some(scrollContainerRect => {\n const clippedAbove = element.top < scrollContainerRect.top;\n const clippedBelow = element.bottom > scrollContainerRect.bottom;\n const clippedLeft = element.left < scrollContainerRect.left;\n const clippedRight = element.right > scrollContainerRect.right;\n return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n });\n}\n\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nclass RepositionScrollStrategy {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n this._config = _config;\n this._scrollSubscription = null;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables repositioning of the attached overlay on scroll. */\n enable() {\n if (!this._scrollSubscription) {\n const throttle = this._config ? this._config.scrollThrottle : 0;\n this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n this._overlayRef.updatePosition();\n // TODO(crisbeto): make `close` on by default once all components can handle it.\n if (this._config && this._config.autoClose) {\n const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n const {\n width,\n height\n } = this._viewportRuler.getViewportSize();\n // TODO(crisbeto): include all ancestor scroll containers here once\n // we have a way of exposing the trigger element to the scroll strategy.\n const parentRects = [{\n width,\n height,\n bottom: height,\n right: width,\n top: 0,\n left: 0\n }];\n if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n this.disable();\n this._ngZone.run(() => this._overlayRef.detach());\n }\n }\n });\n }\n }\n /** Disables repositioning of the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\nlet ScrollStrategyOptions = /*#__PURE__*/(() => {\n class ScrollStrategyOptions {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, document) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n /** Do nothing on scroll. */\n this.noop = () => new NoopScrollStrategy();\n /**\n * Close the overlay as soon as the user scrolls.\n * @param config Configuration to be used inside the scroll strategy.\n */\n this.close = config => new CloseScrollStrategy(this._scrollDispatcher, this._ngZone, this._viewportRuler, config);\n /** Block scrolling. */\n this.block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\n /**\n * Update the overlay's position on scroll.\n * @param config Configuration to be used inside the scroll strategy.\n * Allows debouncing the reposition calls.\n */\n this.reposition = config => new RepositionScrollStrategy(this._scrollDispatcher, this._viewportRuler, this._ngZone, config);\n this._document = document;\n }\n static {\n this.ɵfac = function ScrollStrategyOptions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollStrategyOptions)(i0.ɵɵinject(i1.ScrollDispatcher), i0.ɵɵinject(i1.ViewportRuler), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(DOCUMENT));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScrollStrategyOptions,\n factory: ScrollStrategyOptions.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ScrollStrategyOptions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Initial configuration used when creating an overlay. */\nclass OverlayConfig {\n constructor(config) {\n /** Strategy to be used when handling scroll events while the overlay is open. */\n this.scrollStrategy = new NoopScrollStrategy();\n /** Custom class to add to the overlay pane. */\n this.panelClass = '';\n /** Whether the overlay has a backdrop. */\n this.hasBackdrop = false;\n /** Custom class to add to the backdrop */\n this.backdropClass = 'cdk-overlay-dark-backdrop';\n /**\n * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.disposeOnNavigation = false;\n if (config) {\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n const configKeys = Object.keys(config);\n for (const key of configKeys) {\n if (config[key] !== undefined) {\n // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n // as \"I don't know *which* key this is, so the only valid value is the intersection\n // of all the possible values.\" In this case, that happens to be `undefined`. TypeScript\n // is not smart enough to see that the right-hand-side is actually an access of the same\n // exact type with the same exact key, meaning that the value type must be identical.\n // So we use `any` to work around this.\n this[key] = config[key];\n }\n }\n }\n }\n}\n\n/** The points of the origin element and the overlay element to connect. */\nclass ConnectionPositionPair {\n constructor(origin, overlay, /** Offset along the X axis. */\n offsetX, /** Offset along the Y axis. */\n offsetY, /** Class(es) to be applied to the panel while this position is active. */\n panelClass) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.panelClass = panelClass;\n this.originX = origin.originX;\n this.originY = origin.originY;\n this.overlayX = overlay.overlayX;\n this.overlayY = overlay.overlayY;\n }\n}\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n * ----------- -----------\n * | outside | | clipped |\n * | view | --------------------------\n * | | | | | |\n * ---------- | ----------- |\n * -------------------------- | |\n * | | | Scrollable |\n * | | | |\n * | | --------------------------\n * | Scrollable |\n * | |\n * --------------------------\n *\n * @docs-private\n */\nclass ScrollingVisibility {}\n/** The change event emitted by the strategy when a fallback position is used. */\nclass ConnectedOverlayPositionChange {\n constructor(/** The position used as a result of this change. */\n connectionPair, /** @docs-private */\n scrollableViewProperties) {\n this.connectionPair = connectionPair;\n this.scrollableViewProperties = scrollableViewProperties;\n }\n}\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateVerticalPosition(property, value) {\n if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` + `Expected \"top\", \"bottom\" or \"center\".`);\n }\n}\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateHorizontalPosition(property, value) {\n if (value !== 'start' && value !== 'end' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` + `Expected \"start\", \"end\" or \"center\".`);\n }\n}\n\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nlet BaseOverlayDispatcher = /*#__PURE__*/(() => {\n class BaseOverlayDispatcher {\n constructor(document) {\n /** Currently attached overlays in the order they were attached. */\n this._attachedOverlays = [];\n this._document = document;\n }\n ngOnDestroy() {\n this.detach();\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n // Ensure that we don't get the same overlay multiple times.\n this.remove(overlayRef);\n this._attachedOverlays.push(overlayRef);\n }\n /** Remove an overlay from the list of attached overlay refs. */\n remove(overlayRef) {\n const index = this._attachedOverlays.indexOf(overlayRef);\n if (index > -1) {\n this._attachedOverlays.splice(index, 1);\n }\n // Remove the global listener once there are no more overlays.\n if (this._attachedOverlays.length === 0) {\n this.detach();\n }\n }\n static {\n this.ɵfac = function BaseOverlayDispatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseOverlayDispatcher)(i0.ɵɵinject(DOCUMENT));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BaseOverlayDispatcher,\n factory: BaseOverlayDispatcher.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return BaseOverlayDispatcher;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nlet OverlayKeyboardDispatcher = /*#__PURE__*/(() => {\n class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n constructor(document, /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._ngZone = _ngZone;\n /** Keyboard event listener that will be attached to the body. */\n this._keydownListener = event => {\n const overlays = this._attachedOverlays;\n for (let i = overlays.length - 1; i > -1; i--) {\n // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n // We want to target the most recent overlay, rather than trying to match where the event came\n // from, because some components might open an overlay, but keep focus on a trigger element\n // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n // because we don't want overlays that don't handle keyboard events to block the ones below\n // them that do.\n if (overlays[i]._keydownEvents.observers.length > 0) {\n const keydownEvents = overlays[i]._keydownEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => keydownEvents.next(event));\n } else {\n keydownEvents.next(event);\n }\n break;\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Lazily start dispatcher once first overlay is added\n if (!this._isAttached) {\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._document.body.addEventListener('keydown', this._keydownListener));\n } else {\n this._document.body.addEventListener('keydown', this._keydownListener);\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n this._document.body.removeEventListener('keydown', this._keydownListener);\n this._isAttached = false;\n }\n }\n static {\n this.ɵfac = function OverlayKeyboardDispatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OverlayKeyboardDispatcher)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i0.NgZone, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OverlayKeyboardDispatcher,\n factory: OverlayKeyboardDispatcher.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return OverlayKeyboardDispatcher;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nlet OverlayOutsideClickDispatcher = /*#__PURE__*/(() => {\n class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n constructor(document, _platform, /** @breaking-change 14.0.0 _ngZone will be required. */\n _ngZone) {\n super(document);\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._cursorStyleIsSet = false;\n /** Store pointerdown event target to track origin of click. */\n this._pointerDownListener = event => {\n this._pointerDownEventTarget = _getEventTarget(event);\n };\n /** Click event listener that will be attached to the body propagate phase. */\n this._clickListener = event => {\n const target = _getEventTarget(event);\n // In case of a click event, we want to check the origin of the click\n // (e.g. in case where a user starts a click inside the overlay and\n // releases the click outside of it).\n // This is done by using the event target of the preceding pointerdown event.\n // Every click event caused by a pointer device has a preceding pointerdown\n // event, unless the click was programmatically triggered (e.g. in a unit test).\n const origin = event.type === 'click' && this._pointerDownEventTarget ? this._pointerDownEventTarget : target;\n // Reset the stored pointerdown event target, to avoid having it interfere\n // in subsequent events.\n this._pointerDownEventTarget = null;\n // We copy the array because the original may be modified asynchronously if the\n // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n // the for loop.\n const overlays = this._attachedOverlays.slice();\n // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n // We want to target all overlays for which the click could be considered as outside click.\n // As soon as we reach an overlay for which the click is not outside click we break off\n // the loop.\n for (let i = overlays.length - 1; i > -1; i--) {\n const overlayRef = overlays[i];\n if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n continue;\n }\n // If it's a click inside the overlay, just break - we should do nothing\n // If it's an outside click (both origin and target of the click) dispatch the mouse event,\n // and proceed with the next overlay\n if (containsPierceShadowDom(overlayRef.overlayElement, target) || containsPierceShadowDom(overlayRef.overlayElement, origin)) {\n break;\n }\n const outsidePointerEvents = overlayRef._outsidePointerEvents;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.run(() => outsidePointerEvents.next(event));\n } else {\n outsidePointerEvents.next(event);\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Safari on iOS does not generate click events for non-interactive\n // elements. However, we want to receive a click for any element outside\n // the overlay. We can force a \"clickable\" state by setting\n // `cursor: pointer` on the document body. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n if (!this._isAttached) {\n const body = this._document.body;\n /** @breaking-change 14.0.0 _ngZone will be required. */\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(() => this._addEventListeners(body));\n } else {\n this._addEventListeners(body);\n }\n // click event is not fired on iOS. To make element \"clickable\" we are\n // setting the cursor to pointer\n if (this._platform.IOS && !this._cursorStyleIsSet) {\n this._cursorOriginalValue = body.style.cursor;\n body.style.cursor = 'pointer';\n this._cursorStyleIsSet = true;\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n const body = this._document.body;\n body.removeEventListener('pointerdown', this._pointerDownListener, true);\n body.removeEventListener('click', this._clickListener, true);\n body.removeEventListener('auxclick', this._clickListener, true);\n body.removeEventListener('contextmenu', this._clickListener, true);\n if (this._platform.IOS && this._cursorStyleIsSet) {\n body.style.cursor = this._cursorOriginalValue;\n this._cursorStyleIsSet = false;\n }\n this._isAttached = false;\n }\n }\n _addEventListeners(body) {\n body.addEventListener('pointerdown', this._pointerDownListener, true);\n body.addEventListener('click', this._clickListener, true);\n body.addEventListener('auxclick', this._clickListener, true);\n body.addEventListener('contextmenu', this._clickListener, true);\n }\n static {\n this.ɵfac = function OverlayOutsideClickDispatcher_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OverlayOutsideClickDispatcher)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1$1.Platform), i0.ɵɵinject(i0.NgZone, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OverlayOutsideClickDispatcher,\n factory: OverlayOutsideClickDispatcher.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return OverlayOutsideClickDispatcher;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Version of `Element.contains` that transcends shadow DOM boundaries. */\nfunction containsPierceShadowDom(parent, child) {\n const supportsShadowRoot = typeof ShadowRoot !== 'undefined' && ShadowRoot;\n let current = child;\n while (current) {\n if (current === parent) {\n return true;\n }\n current = supportsShadowRoot && current instanceof ShadowRoot ? current.host : current.parentNode;\n }\n return false;\n}\n\n/** Container inside which all overlays will render. */\nlet OverlayContainer = /*#__PURE__*/(() => {\n class OverlayContainer {\n constructor(document, _platform) {\n this._platform = _platform;\n this._document = document;\n }\n ngOnDestroy() {\n this._containerElement?.remove();\n }\n /**\n * This method returns the overlay container element. It will lazily\n * create the element the first time it is called to facilitate using\n * the container in non-browser environments.\n * @returns the container element\n */\n getContainerElement() {\n if (!this._containerElement) {\n this._createContainer();\n }\n return this._containerElement;\n }\n /**\n * Create the overlay container element, which is simply a div\n * with the 'cdk-overlay-container' class on the document body.\n */\n _createContainer() {\n const containerClass = 'cdk-overlay-container';\n // TODO(crisbeto): remove the testing check once we have an overlay testing\n // module or Angular starts tearing down the testing `NgModule`. See:\n // https://github.com/angular/angular/issues/18831\n if (this._platform.isBrowser || _isTestEnvironment()) {\n const oppositePlatformContainers = this._document.querySelectorAll(`.${containerClass}[platform=\"server\"], ` + `.${containerClass}[platform=\"test\"]`);\n // Remove any old containers from the opposite platform.\n // This can happen when transitioning from the server to the client.\n for (let i = 0; i < oppositePlatformContainers.length; i++) {\n oppositePlatformContainers[i].remove();\n }\n }\n const container = this._document.createElement('div');\n container.classList.add(containerClass);\n // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n // To mitigate the problem we made it so that only containers from a different platform are\n // cleared, but the side-effect was that people started depending on the overly-aggressive\n // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n // module which does the cleanup, we try to detect that we're in a test environment and we\n // always clear the container. See #17006.\n // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n if (_isTestEnvironment()) {\n container.setAttribute('platform', 'test');\n } else if (!this._platform.isBrowser) {\n container.setAttribute('platform', 'server');\n }\n this._document.body.appendChild(container);\n this._containerElement = container;\n }\n static {\n this.ɵfac = function OverlayContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OverlayContainer)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1$1.Platform));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OverlayContainer,\n factory: OverlayContainer.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return OverlayContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nclass OverlayRef {\n constructor(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher, _animationsDisabled = false, _injector) {\n this._portalOutlet = _portalOutlet;\n this._host = _host;\n this._pane = _pane;\n this._config = _config;\n this._ngZone = _ngZone;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._document = _document;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._animationsDisabled = _animationsDisabled;\n this._injector = _injector;\n this._backdropElement = null;\n this._backdropClick = new Subject();\n this._attachments = new Subject();\n this._detachments = new Subject();\n this._locationChanges = Subscription.EMPTY;\n this._backdropClickHandler = event => this._backdropClick.next(event);\n this._backdropTransitionendHandler = event => {\n this._disposeBackdrop(event.target);\n };\n /** Stream of keydown events dispatched to this overlay. */\n this._keydownEvents = new Subject();\n /** Stream of mouse outside events dispatched to this overlay. */\n this._outsidePointerEvents = new Subject();\n this._renders = new Subject();\n if (_config.scrollStrategy) {\n this._scrollStrategy = _config.scrollStrategy;\n this._scrollStrategy.attach(this);\n }\n this._positionStrategy = _config.positionStrategy;\n // Users could open the overlay from an `effect`, in which case we need to\n // run the `afterRender` as `untracked`. We don't recommend that users do\n // this, but we also don't want to break users who are doing it.\n this._afterRenderRef = untracked(() => afterRender(() => {\n this._renders.next();\n }, {\n injector: this._injector\n }));\n }\n /** The overlay's HTML element */\n get overlayElement() {\n return this._pane;\n }\n /** The overlay's backdrop HTML element. */\n get backdropElement() {\n return this._backdropElement;\n }\n /**\n * Wrapper around the panel element. Can be used for advanced\n * positioning where a wrapper with specific styling is\n * required around the overlay pane.\n */\n get hostElement() {\n return this._host;\n }\n /**\n * Attaches content, given via a Portal, to the overlay.\n * If the overlay is configured to have a backdrop, it will be created.\n *\n * @param portal Portal instance to which to attach the overlay.\n * @returns The portal attachment result.\n */\n attach(portal) {\n // Insert the host into the DOM before attaching the portal, otherwise\n // the animations module will skip animations on repeat attachments.\n if (!this._host.parentElement && this._previousHostParent) {\n this._previousHostParent.appendChild(this._host);\n }\n const attachResult = this._portalOutlet.attach(portal);\n if (this._positionStrategy) {\n this._positionStrategy.attach(this);\n }\n this._updateStackingOrder();\n this._updateElementSize();\n this._updateElementDirection();\n if (this._scrollStrategy) {\n this._scrollStrategy.enable();\n }\n // We need to clean this up ourselves, because we're passing in an\n // `EnvironmentInjector` below which won't ever be destroyed.\n // Otherwise it causes some callbacks to be retained (see #29696).\n this._afterNextRenderRef?.destroy();\n // Update the position once the overlay is fully rendered before attempting to position it,\n // as the position may depend on the size of the rendered content.\n this._afterNextRenderRef = afterNextRender(() => {\n // The overlay could've been detached before the callback executed.\n if (this.hasAttached()) {\n this.updatePosition();\n }\n }, {\n injector: this._injector\n });\n // Enable pointer events for the overlay pane element.\n this._togglePointerEvents(true);\n if (this._config.hasBackdrop) {\n this._attachBackdrop();\n }\n if (this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, true);\n }\n // Only emit the `attachments` event once all other setup is done.\n this._attachments.next();\n // Track this overlay by the keyboard dispatcher\n this._keyboardDispatcher.add(this);\n if (this._config.disposeOnNavigation) {\n this._locationChanges = this._location.subscribe(() => this.dispose());\n }\n this._outsideClickDispatcher.add(this);\n // TODO(crisbeto): the null check is here, because the portal outlet returns `any`.\n // We should be guaranteed for the result to be `ComponentRef | EmbeddedViewRef`, but\n // `instanceof EmbeddedViewRef` doesn't appear to work at the moment.\n if (typeof attachResult?.onDestroy === 'function') {\n // In most cases we control the portal and we know when it is being detached so that\n // we can finish the disposal process. The exception is if the user passes in a custom\n // `ViewContainerRef` that isn't destroyed through the overlay API. Note that we use\n // `detach` here instead of `dispose`, because we don't know if the user intends to\n // reattach the overlay at a later point. It also has the advantage of waiting for animations.\n attachResult.onDestroy(() => {\n if (this.hasAttached()) {\n // We have to delay the `detach` call, because detaching immediately prevents\n // other destroy hooks from running. This is likely a framework bug similar to\n // https://github.com/angular/angular/issues/46119\n this._ngZone.runOutsideAngular(() => Promise.resolve().then(() => this.detach()));\n }\n });\n }\n return attachResult;\n }\n /**\n * Detaches an overlay from a portal.\n * @returns The portal detachment result.\n */\n detach() {\n if (!this.hasAttached()) {\n return;\n }\n this.detachBackdrop();\n // When the overlay is detached, the pane element should disable pointer events.\n // This is necessary because otherwise the pane element will cover the page and disable\n // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n this._togglePointerEvents(false);\n if (this._positionStrategy && this._positionStrategy.detach) {\n this._positionStrategy.detach();\n }\n if (this._scrollStrategy) {\n this._scrollStrategy.disable();\n }\n const detachmentResult = this._portalOutlet.detach();\n // Only emit after everything is detached.\n this._detachments.next();\n // Remove this overlay from keyboard dispatcher tracking.\n this._keyboardDispatcher.remove(this);\n // Keeping the host element in the DOM can cause scroll jank, because it still gets\n // rendered, even though it's transparent and unclickable which is why we remove it.\n this._detachContentWhenEmpty();\n this._locationChanges.unsubscribe();\n this._outsideClickDispatcher.remove(this);\n return detachmentResult;\n }\n /** Cleans up the overlay from the DOM. */\n dispose() {\n const isAttached = this.hasAttached();\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._disposeScrollStrategy();\n this._disposeBackdrop(this._backdropElement);\n this._locationChanges.unsubscribe();\n this._keyboardDispatcher.remove(this);\n this._portalOutlet.dispose();\n this._attachments.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n this._outsidePointerEvents.complete();\n this._outsideClickDispatcher.remove(this);\n this._host?.remove();\n this._afterNextRenderRef?.destroy();\n this._previousHostParent = this._pane = this._host = null;\n if (isAttached) {\n this._detachments.next();\n }\n this._detachments.complete();\n this._afterRenderRef.destroy();\n this._renders.complete();\n }\n /** Whether the overlay has attached content. */\n hasAttached() {\n return this._portalOutlet.hasAttached();\n }\n /** Gets an observable that emits when the backdrop has been clicked. */\n backdropClick() {\n return this._backdropClick;\n }\n /** Gets an observable that emits when the overlay has been attached. */\n attachments() {\n return this._attachments;\n }\n /** Gets an observable that emits when the overlay has been detached. */\n detachments() {\n return this._detachments;\n }\n /** Gets an observable of keydown events targeted to this overlay. */\n keydownEvents() {\n return this._keydownEvents;\n }\n /** Gets an observable of pointer events targeted outside this overlay. */\n outsidePointerEvents() {\n return this._outsidePointerEvents;\n }\n /** Gets the current overlay configuration, which is immutable. */\n getConfig() {\n return this._config;\n }\n /** Updates the position of the overlay based on the position strategy. */\n updatePosition() {\n if (this._positionStrategy) {\n this._positionStrategy.apply();\n }\n }\n /** Switches to a new position strategy and updates the overlay position. */\n updatePositionStrategy(strategy) {\n if (strategy === this._positionStrategy) {\n return;\n }\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._positionStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n this.updatePosition();\n }\n }\n /** Update the size properties of the overlay. */\n updateSize(sizeConfig) {\n this._config = {\n ...this._config,\n ...sizeConfig\n };\n this._updateElementSize();\n }\n /** Sets the LTR/RTL direction for the overlay. */\n setDirection(dir) {\n this._config = {\n ...this._config,\n direction: dir\n };\n this._updateElementDirection();\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, true);\n }\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, false);\n }\n }\n /**\n * Returns the layout direction of the overlay panel.\n */\n getDirection() {\n const direction = this._config.direction;\n if (!direction) {\n return 'ltr';\n }\n return typeof direction === 'string' ? direction : direction.value;\n }\n /** Switches to a new scroll strategy. */\n updateScrollStrategy(strategy) {\n if (strategy === this._scrollStrategy) {\n return;\n }\n this._disposeScrollStrategy();\n this._scrollStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n strategy.enable();\n }\n }\n /** Updates the text direction of the overlay panel. */\n _updateElementDirection() {\n this._host.setAttribute('dir', this.getDirection());\n }\n /** Updates the size of the overlay element based on the overlay config. */\n _updateElementSize() {\n if (!this._pane) {\n return;\n }\n const style = this._pane.style;\n style.width = coerceCssPixelValue(this._config.width);\n style.height = coerceCssPixelValue(this._config.height);\n style.minWidth = coerceCssPixelValue(this._config.minWidth);\n style.minHeight = coerceCssPixelValue(this._config.minHeight);\n style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n }\n /** Toggles the pointer events for the overlay pane element. */\n _togglePointerEvents(enablePointer) {\n this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n }\n /** Attaches a backdrop for this overlay. */\n _attachBackdrop() {\n const showingClass = 'cdk-overlay-backdrop-showing';\n this._backdropElement = this._document.createElement('div');\n this._backdropElement.classList.add('cdk-overlay-backdrop');\n if (this._animationsDisabled) {\n this._backdropElement.classList.add('cdk-overlay-backdrop-noop-animation');\n }\n if (this._config.backdropClass) {\n this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n }\n // Insert the backdrop before the pane in the DOM order,\n // in order to handle stacked overlays properly.\n this._host.parentElement.insertBefore(this._backdropElement, this._host);\n // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n // action desired when such a click occurs (usually closing the overlay).\n this._backdropElement.addEventListener('click', this._backdropClickHandler);\n // Add class to fade-in the backdrop after one frame.\n if (!this._animationsDisabled && typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._backdropElement) {\n this._backdropElement.classList.add(showingClass);\n }\n });\n });\n } else {\n this._backdropElement.classList.add(showingClass);\n }\n }\n /**\n * Updates the stacking order of the element, moving it to the top if necessary.\n * This is required in cases where one overlay was detached, while another one,\n * that should be behind it, was destroyed. The next time both of them are opened,\n * the stacking will be wrong, because the detached element's pane will still be\n * in its original DOM position.\n */\n _updateStackingOrder() {\n if (this._host.nextSibling) {\n this._host.parentNode.appendChild(this._host);\n }\n }\n /** Detaches the backdrop (if any) associated with the overlay. */\n detachBackdrop() {\n const backdropToDetach = this._backdropElement;\n if (!backdropToDetach) {\n return;\n }\n if (this._animationsDisabled) {\n this._disposeBackdrop(backdropToDetach);\n return;\n }\n backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n this._ngZone.runOutsideAngular(() => {\n backdropToDetach.addEventListener('transitionend', this._backdropTransitionendHandler);\n });\n // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n // In this case we make it unclickable and we try to remove it after a delay.\n backdropToDetach.style.pointerEvents = 'none';\n // Run this outside the Angular zone because there's nothing that Angular cares about.\n // If it were to run inside the Angular zone, every test that used Overlay would have to be\n // either async or fakeAsync.\n this._backdropTimeout = this._ngZone.runOutsideAngular(() => setTimeout(() => {\n this._disposeBackdrop(backdropToDetach);\n }, 500));\n }\n /** Toggles a single CSS class or an array of classes on an element. */\n _toggleClasses(element, cssClasses, isAdd) {\n const classes = coerceArray(cssClasses || []).filter(c => !!c);\n if (classes.length) {\n isAdd ? element.classList.add(...classes) : element.classList.remove(...classes);\n }\n }\n /** Detaches the overlay content next time the zone stabilizes. */\n _detachContentWhenEmpty() {\n // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n // be patched to run inside the zone, which will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => {\n // We can't remove the host here immediately, because the overlay pane's content\n // might still be animating. This stream helps us avoid interrupting the animation\n // by waiting for the pane to become empty.\n const subscription = this._renders.pipe(takeUntil(merge(this._attachments, this._detachments))).subscribe(() => {\n // Needs a couple of checks for the pane and host, because\n // they may have been removed by the time the zone stabilizes.\n if (!this._pane || !this._host || this._pane.children.length === 0) {\n if (this._pane && this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, false);\n }\n if (this._host && this._host.parentElement) {\n this._previousHostParent = this._host.parentElement;\n this._host.remove();\n }\n subscription.unsubscribe();\n }\n });\n });\n }\n /** Disposes of a scroll strategy. */\n _disposeScrollStrategy() {\n const scrollStrategy = this._scrollStrategy;\n if (scrollStrategy) {\n scrollStrategy.disable();\n if (scrollStrategy.detach) {\n scrollStrategy.detach();\n }\n }\n }\n /** Removes a backdrop element from the DOM. */\n _disposeBackdrop(backdrop) {\n if (backdrop) {\n backdrop.removeEventListener('click', this._backdropClickHandler);\n backdrop.removeEventListener('transitionend', this._backdropTransitionendHandler);\n backdrop.remove();\n // It is possible that a new portal has been attached to this overlay since we started\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\n // is still the same instance that we started to remove.\n if (this._backdropElement === backdrop) {\n this._backdropElement = null;\n }\n }\n if (this._backdropTimeout) {\n clearTimeout(this._backdropTimeout);\n this._backdropTimeout = undefined;\n }\n }\n}\n\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nclass FlexibleConnectedPositionStrategy {\n /** Ordered list of preferred positions, from most to least desirable. */\n get positions() {\n return this._preferredPositions;\n }\n constructor(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n this._lastBoundingBoxSize = {\n width: 0,\n height: 0\n };\n /** Whether the overlay was pushed in a previous positioning. */\n this._isPushed = false;\n /** Whether the overlay can be pushed on-screen on the initial open. */\n this._canPush = true;\n /** Whether the overlay can grow via flexible width/height after the initial open. */\n this._growAfterOpen = false;\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n this._hasFlexibleDimensions = true;\n /** Whether the overlay position is locked. */\n this._positionLocked = false;\n /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n this._viewportMargin = 0;\n /** The Scrollable containers used to check scrollable view properties on position change. */\n this._scrollables = [];\n /** Ordered list of preferred positions, from most to least desirable. */\n this._preferredPositions = [];\n /** Subject that emits whenever the position changes. */\n this._positionChanges = new Subject();\n /** Subscription to viewport size changes. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Default offset for the overlay along the x axis. */\n this._offsetX = 0;\n /** Default offset for the overlay along the y axis. */\n this._offsetY = 0;\n /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n this._appliedPanelClasses = [];\n /** Observable sequence of position changes. */\n this.positionChanges = this._positionChanges;\n this.setOrigin(connectedTo);\n }\n /** Attaches this position strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && overlayRef !== this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('This position strategy is already attached to an overlay');\n }\n this._validatePositions();\n overlayRef.hostElement.classList.add(boundingBoxClass);\n this._overlayRef = overlayRef;\n this._boundingBox = overlayRef.hostElement;\n this._pane = overlayRef.overlayElement;\n this._isDisposed = false;\n this._isInitialRender = true;\n this._lastPosition = null;\n this._resizeSubscription.unsubscribe();\n this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n // When the window is resized, we want to trigger the next reposition as if it\n // was an initial render, in order for the strategy to pick a new optimal position,\n // otherwise position locking will cause it to stay at the old one.\n this._isInitialRender = true;\n this.apply();\n });\n }\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin best fits on-screen.\n *\n * The selection of a position goes as follows:\n * - If any positions fit completely within the viewport as-is,\n * choose the first position that does so.\n * - If flexible dimensions are enabled and at least one satisfies the given minimum width/height,\n * choose the position with the greatest available size modified by the positions' weight.\n * - If pushing is enabled, take the position that went off-screen the least and push it\n * on-screen.\n * - If none of the previous criteria were met, use the position that goes off-screen the least.\n * @docs-private\n */\n apply() {\n // We shouldn't do anything if the strategy was disposed or we're on the server.\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n // If the position has been applied already (e.g. when the overlay was opened) and the\n // consumer opted into locking in the position, re-use the old position, in order to\n // prevent the overlay from jumping around.\n if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n this.reapplyLastPosition();\n return;\n }\n this._clearPanelClasses();\n this._resetOverlayElementStyles();\n this._resetBoundingBoxStyles();\n // We need the bounding rects for the origin, the overlay and the container to determine how to position\n // the overlay relative to the origin.\n // We use the viewport rect to determine whether a position would go off-screen.\n this._viewportRect = this._getNarrowedViewportRect();\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._containerRect = this._overlayContainer.getContainerElement().getBoundingClientRect();\n const originRect = this._originRect;\n const overlayRect = this._overlayRect;\n const viewportRect = this._viewportRect;\n const containerRect = this._containerRect;\n // Positions where the overlay will fit with flexible dimensions.\n const flexibleFits = [];\n // Fallback if none of the preferred positions fit within the viewport.\n let fallback;\n // Go through each of the preferred positions looking for a good fit.\n // If a good fit is found, it will be applied immediately.\n for (let pos of this._preferredPositions) {\n // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n let originPoint = this._getOriginPoint(originRect, containerRect, pos);\n // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n // overlay in this position. We use the top-left corner for calculations and later translate\n // this into an appropriate (top, left, bottom, right) style.\n let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n // Calculate how well the overlay would fit into the viewport with this point.\n let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n // If the overlay, without any further work, fits into the viewport, use this position.\n if (overlayFit.isCompletelyWithinViewport) {\n this._isPushed = false;\n this._applyPosition(pos, originPoint);\n return;\n }\n // If the overlay has flexible dimensions, we can use this position\n // so long as there's enough space for the minimum dimensions.\n if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n // Save positions where the overlay will fit with flexible dimensions. We will use these\n // if none of the positions fit *without* flexible dimensions.\n flexibleFits.push({\n position: pos,\n origin: originPoint,\n overlayRect,\n boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos)\n });\n continue;\n }\n // If the current preferred position does not fit on the screen, remember the position\n // if it has more visible area on-screen than we've seen and move onto the next preferred\n // position.\n if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n fallback = {\n overlayFit,\n overlayPoint,\n originPoint,\n position: pos,\n overlayRect\n };\n }\n }\n // If there are any positions where the overlay would fit with flexible dimensions, choose the\n // one that has the greatest area available modified by the position's weight\n if (flexibleFits.length) {\n let bestFit = null;\n let bestScore = -1;\n for (const fit of flexibleFits) {\n const score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n if (score > bestScore) {\n bestScore = score;\n bestFit = fit;\n }\n }\n this._isPushed = false;\n this._applyPosition(bestFit.position, bestFit.origin);\n return;\n }\n // When none of the preferred positions fit within the viewport, take the position\n // that went off-screen the least and attempt to push it on-screen.\n if (this._canPush) {\n // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n this._isPushed = true;\n this._applyPosition(fallback.position, fallback.originPoint);\n return;\n }\n // All options for getting the overlay within the viewport have been exhausted, so go with the\n // position that went off-screen the least.\n this._applyPosition(fallback.position, fallback.originPoint);\n }\n detach() {\n this._clearPanelClasses();\n this._lastPosition = null;\n this._previousPushAmount = null;\n this._resizeSubscription.unsubscribe();\n }\n /** Cleanup after the element gets destroyed. */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n // We can't use `_resetBoundingBoxStyles` here, because it resets\n // some properties to zero, rather than removing them.\n if (this._boundingBox) {\n extendStyles(this._boundingBox.style, {\n top: '',\n left: '',\n right: '',\n bottom: '',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: ''\n });\n }\n if (this._pane) {\n this._resetOverlayElementStyles();\n }\n if (this._overlayRef) {\n this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n }\n this.detach();\n this._positionChanges.complete();\n this._overlayRef = this._boundingBox = null;\n this._isDisposed = true;\n }\n /**\n * This re-aligns the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n */\n reapplyLastPosition() {\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n const lastPosition = this._lastPosition;\n if (lastPosition) {\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._viewportRect = this._getNarrowedViewportRect();\n this._containerRect = this._overlayContainer.getContainerElement().getBoundingClientRect();\n const originPoint = this._getOriginPoint(this._originRect, this._containerRect, lastPosition);\n this._applyPosition(lastPosition, originPoint);\n } else {\n this.apply();\n }\n }\n /**\n * Sets the list of Scrollable containers that host the origin element so that\n * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n * Scrollable must be an ancestor element of the strategy's origin element.\n */\n withScrollableContainers(scrollables) {\n this._scrollables = scrollables;\n return this;\n }\n /**\n * Adds new preferred positions.\n * @param positions List of positions options for this overlay.\n */\n withPositions(positions) {\n this._preferredPositions = positions;\n // If the last calculated position object isn't part of the positions anymore, clear\n // it in order to avoid it being picked up if the consumer tries to re-apply.\n if (positions.indexOf(this._lastPosition) === -1) {\n this._lastPosition = null;\n }\n this._validatePositions();\n return this;\n }\n /**\n * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n * @param margin Required margin between the overlay and the viewport edge in pixels.\n */\n withViewportMargin(margin) {\n this._viewportMargin = margin;\n return this;\n }\n /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n withFlexibleDimensions(flexibleDimensions = true) {\n this._hasFlexibleDimensions = flexibleDimensions;\n return this;\n }\n /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n withGrowAfterOpen(growAfterOpen = true) {\n this._growAfterOpen = growAfterOpen;\n return this;\n }\n /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n withPush(canPush = true) {\n this._canPush = canPush;\n return this;\n }\n /**\n * Sets whether the overlay's position should be locked in after it is positioned\n * initially. When an overlay is locked in, it won't attempt to reposition itself\n * when the position is re-applied (e.g. when the user scrolls away).\n * @param isLocked Whether the overlay should locked in.\n */\n withLockedPosition(isLocked = true) {\n this._positionLocked = isLocked;\n return this;\n }\n /**\n * Sets the origin, relative to which to position the overlay.\n * Using an element origin is useful for building components that need to be positioned\n * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n * used for cases like contextual menus which open relative to the user's pointer.\n * @param origin Reference to the new origin.\n */\n setOrigin(origin) {\n this._origin = origin;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the x-axis.\n * @param offset New offset in the X axis.\n */\n withDefaultOffsetX(offset) {\n this._offsetX = offset;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the y-axis.\n * @param offset New offset in the Y axis.\n */\n withDefaultOffsetY(offset) {\n this._offsetY = offset;\n return this;\n }\n /**\n * Configures that the position strategy should set a `transform-origin` on some elements\n * inside the overlay, depending on the current position that is being applied. This is\n * useful for the cases where the origin of an animation can change depending on the\n * alignment of the overlay.\n * @param selector CSS selector that will be used to find the target\n * elements onto which to set the transform origin.\n */\n withTransformOriginOn(selector) {\n this._transformOriginSelector = selector;\n return this;\n }\n /**\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n */\n _getOriginPoint(originRect, containerRect, pos) {\n let x;\n if (pos.originX == 'center') {\n // Note: when centering we should always use the `left`\n // offset, otherwise the position will be wrong in RTL.\n x = originRect.left + originRect.width / 2;\n } else {\n const startX = this._isRtl() ? originRect.right : originRect.left;\n const endX = this._isRtl() ? originRect.left : originRect.right;\n x = pos.originX == 'start' ? startX : endX;\n }\n // When zooming in Safari the container rectangle contains negative values for the position\n // and we need to re-add them to the calculated coordinates.\n if (containerRect.left < 0) {\n x -= containerRect.left;\n }\n let y;\n if (pos.originY == 'center') {\n y = originRect.top + originRect.height / 2;\n } else {\n y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n }\n // Normally the containerRect's top value would be zero, however when the overlay is attached to an input\n // (e.g. in an autocomplete), mobile browsers will shift everything in order to put the input in the middle\n // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n // otherwise our positioning will be thrown off.\n // Additionally, when zooming in Safari this fixes the vertical position.\n if (containerRect.top < 0) {\n y -= containerRect.top;\n }\n return {\n x,\n y\n };\n }\n /**\n * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n * origin point to which the overlay should be connected.\n */\n _getOverlayPoint(originPoint, overlayRect, pos) {\n // Calculate the (overlayStartX, overlayStartY), the start of the\n // potential overlay position relative to the origin point.\n let overlayStartX;\n if (pos.overlayX == 'center') {\n overlayStartX = -overlayRect.width / 2;\n } else if (pos.overlayX === 'start') {\n overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n } else {\n overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n }\n let overlayStartY;\n if (pos.overlayY == 'center') {\n overlayStartY = -overlayRect.height / 2;\n } else {\n overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n }\n // The (x, y) coordinates of the overlay.\n return {\n x: originPoint.x + overlayStartX,\n y: originPoint.y + overlayStartY\n };\n }\n /** Gets how well an overlay at the given point will fit within the viewport. */\n _getOverlayFit(point, rawOverlayRect, viewport, position) {\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n let {\n x,\n y\n } = point;\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n // Account for the offsets since they could push the overlay out of the viewport.\n if (offsetX) {\n x += offsetX;\n }\n if (offsetY) {\n y += offsetY;\n }\n // How much the overlay would overflow at this position, on each side.\n let leftOverflow = 0 - x;\n let rightOverflow = x + overlay.width - viewport.width;\n let topOverflow = 0 - y;\n let bottomOverflow = y + overlay.height - viewport.height;\n // Visible parts of the element on each axis.\n let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n let visibleArea = visibleWidth * visibleHeight;\n return {\n visibleArea,\n isCompletelyWithinViewport: overlay.width * overlay.height === visibleArea,\n fitsInViewportVertically: visibleHeight === overlay.height,\n fitsInViewportHorizontally: visibleWidth == overlay.width\n };\n }\n /**\n * Whether the overlay can fit within the viewport when it may resize either its width or height.\n * @param fit How well the overlay fits in the viewport at some position.\n * @param point The (x, y) coordinates of the overlay at some position.\n * @param viewport The geometry of the viewport.\n */\n _canFitWithFlexibleDimensions(fit, point, viewport) {\n if (this._hasFlexibleDimensions) {\n const availableHeight = viewport.bottom - point.y;\n const availableWidth = viewport.right - point.x;\n const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n const verticalFit = fit.fitsInViewportVertically || minHeight != null && minHeight <= availableHeight;\n const horizontalFit = fit.fitsInViewportHorizontally || minWidth != null && minWidth <= availableWidth;\n return verticalFit && horizontalFit;\n }\n return false;\n }\n /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occurring on the\n * right and bottom).\n *\n * @param start Starting point from which the overlay is pushed.\n * @param rawOverlayRect Dimensions of the overlay.\n * @param scrollPosition Current viewport scroll position.\n * @returns The point at which to position the overlay after pushing. This is effectively a new\n * originPoint.\n */\n _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) {\n // If the position is locked and we've pushed the overlay already, reuse the previous push\n // amount, rather than pushing it again. If we were to continue pushing, the element would\n // remain in the viewport, which goes against the expectations when position locking is enabled.\n if (this._previousPushAmount && this._positionLocked) {\n return {\n x: start.x + this._previousPushAmount.x,\n y: start.y + this._previousPushAmount.y\n };\n }\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n const viewport = this._viewportRect;\n // Determine how much the overlay goes outside the viewport on each\n // side, which we'll use to decide which direction to push it.\n const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n // Amount by which to push the overlay in each axis such that it remains on-screen.\n let pushX = 0;\n let pushY = 0;\n // If the overlay fits completely within the bounds of the viewport, push it from whichever\n // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n // viewport and allow for the trailing end of the overlay to go out of bounds.\n if (overlay.width <= viewport.width) {\n pushX = overflowLeft || -overflowRight;\n } else {\n pushX = start.x < this._viewportMargin ? viewport.left - scrollPosition.left - start.x : 0;\n }\n if (overlay.height <= viewport.height) {\n pushY = overflowTop || -overflowBottom;\n } else {\n pushY = start.y < this._viewportMargin ? viewport.top - scrollPosition.top - start.y : 0;\n }\n this._previousPushAmount = {\n x: pushX,\n y: pushY\n };\n return {\n x: start.x + pushX,\n y: start.y + pushY\n };\n }\n /**\n * Applies a computed position to the overlay and emits a position change.\n * @param position The position preference\n * @param originPoint The point on the origin element where the overlay is connected.\n */\n _applyPosition(position, originPoint) {\n this._setTransformOrigin(position);\n this._setOverlayElementStyles(originPoint, position);\n this._setBoundingBoxStyles(originPoint, position);\n if (position.panelClass) {\n this._addPanelClasses(position.panelClass);\n }\n // Notify that the position has been changed along with its change properties.\n // We only emit if we've got any subscriptions, because the scroll visibility\n // calculations can be somewhat expensive.\n if (this._positionChanges.observers.length) {\n const scrollVisibility = this._getScrollVisibility();\n // We're recalculating on scroll, but we only want to emit if anything\n // changed since downstream code might be hitting the `NgZone`.\n if (position !== this._lastPosition || !this._lastScrollVisibility || !compareScrollVisibility(this._lastScrollVisibility, scrollVisibility)) {\n const changeEvent = new ConnectedOverlayPositionChange(position, scrollVisibility);\n this._positionChanges.next(changeEvent);\n }\n this._lastScrollVisibility = scrollVisibility;\n }\n // Save the last connected position in case the position needs to be re-calculated.\n this._lastPosition = position;\n this._isInitialRender = false;\n }\n /** Sets the transform origin based on the configured selector and the passed-in position. */\n _setTransformOrigin(position) {\n if (!this._transformOriginSelector) {\n return;\n }\n const elements = this._boundingBox.querySelectorAll(this._transformOriginSelector);\n let xOrigin;\n let yOrigin = position.overlayY;\n if (position.overlayX === 'center') {\n xOrigin = 'center';\n } else if (this._isRtl()) {\n xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n } else {\n xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n }\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n }\n }\n /**\n * Gets the position and size of the overlay's sizing container.\n *\n * This method does no measuring and applies no styles so that we can cheaply compute the\n * bounds for all positions and choose the best fit based on these results.\n */\n _calculateBoundingBoxRect(origin, position) {\n const viewport = this._viewportRect;\n const isRtl = this._isRtl();\n let height, top, bottom;\n if (position.overlayY === 'top') {\n // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n top = origin.y;\n height = viewport.height - top + this._viewportMargin;\n } else if (position.overlayY === 'bottom') {\n // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n // the viewport margin back in, because the viewport rect is narrowed down to remove the\n // margin, whereas the `origin` position is calculated based on its `DOMRect`.\n bottom = viewport.height - origin.y + this._viewportMargin * 2;\n height = viewport.height - bottom + this._viewportMargin;\n } else {\n // If neither top nor bottom, it means that the overlay is vertically centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n // `origin.y - viewport.top`.\n const smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n const previousHeight = this._lastBoundingBoxSize.height;\n height = smallestDistanceToViewportEdge * 2;\n top = origin.y - smallestDistanceToViewportEdge;\n if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n top = origin.y - previousHeight / 2;\n }\n }\n // The overlay is opening 'right-ward' (the content flows to the right).\n const isBoundedByRightViewportEdge = position.overlayX === 'start' && !isRtl || position.overlayX === 'end' && isRtl;\n // The overlay is opening 'left-ward' (the content flows to the left).\n const isBoundedByLeftViewportEdge = position.overlayX === 'end' && !isRtl || position.overlayX === 'start' && isRtl;\n let width, left, right;\n if (isBoundedByLeftViewportEdge) {\n right = viewport.width - origin.x + this._viewportMargin * 2;\n width = origin.x - this._viewportMargin;\n } else if (isBoundedByRightViewportEdge) {\n left = origin.x;\n width = viewport.right - origin.x;\n } else {\n // If neither start nor end, it means that the overlay is horizontally centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.right - origin.x` and\n // `origin.x - viewport.left`.\n const smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x);\n const previousWidth = this._lastBoundingBoxSize.width;\n width = smallestDistanceToViewportEdge * 2;\n left = origin.x - smallestDistanceToViewportEdge;\n if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n left = origin.x - previousWidth / 2;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width,\n height\n };\n }\n /**\n * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n * origin's connection point and stretches to the bounds of the viewport.\n *\n * @param origin The point on the origin element where the overlay is connected.\n * @param position The position preference\n */\n _setBoundingBoxStyles(origin, position) {\n const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n // when applying a new size.\n if (!this._isInitialRender && !this._growAfterOpen) {\n boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n }\n const styles = {};\n if (this._hasExactPosition()) {\n styles.top = styles.left = '0';\n styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n styles.width = styles.height = '100%';\n } else {\n const maxHeight = this._overlayRef.getConfig().maxHeight;\n const maxWidth = this._overlayRef.getConfig().maxWidth;\n styles.height = coerceCssPixelValue(boundingBoxRect.height);\n styles.top = coerceCssPixelValue(boundingBoxRect.top);\n styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n styles.width = coerceCssPixelValue(boundingBoxRect.width);\n styles.left = coerceCssPixelValue(boundingBoxRect.left);\n styles.right = coerceCssPixelValue(boundingBoxRect.right);\n // Push the pane content towards the proper direction.\n if (position.overlayX === 'center') {\n styles.alignItems = 'center';\n } else {\n styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n }\n if (position.overlayY === 'center') {\n styles.justifyContent = 'center';\n } else {\n styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n }\n if (maxHeight) {\n styles.maxHeight = coerceCssPixelValue(maxHeight);\n }\n if (maxWidth) {\n styles.maxWidth = coerceCssPixelValue(maxWidth);\n }\n }\n this._lastBoundingBoxSize = boundingBoxRect;\n extendStyles(this._boundingBox.style, styles);\n }\n /** Resets the styles for the bounding box so that a new positioning can be computed. */\n _resetBoundingBoxStyles() {\n extendStyles(this._boundingBox.style, {\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: ''\n });\n }\n /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n _resetOverlayElementStyles() {\n extendStyles(this._pane.style, {\n top: '',\n left: '',\n bottom: '',\n right: '',\n position: '',\n transform: ''\n });\n }\n /** Sets positioning styles to the overlay element. */\n _setOverlayElementStyles(originPoint, position) {\n const styles = {};\n const hasExactPosition = this._hasExactPosition();\n const hasFlexibleDimensions = this._hasFlexibleDimensions;\n const config = this._overlayRef.getConfig();\n if (hasExactPosition) {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n } else {\n styles.position = 'static';\n }\n // Use a transform to apply the offsets. We do this because the `center` positions rely on\n // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n // off the position. We also can't use margins, because they won't have an effect in some\n // cases where the element doesn't have anything to \"push off of\". Finally, this works\n // better both with flexible and non-flexible positioning.\n let transformString = '';\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n if (offsetX) {\n transformString += `translateX(${offsetX}px) `;\n }\n if (offsetY) {\n transformString += `translateY(${offsetY}px)`;\n }\n styles.transform = transformString.trim();\n // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n // Note that this doesn't apply when we have an exact position, in which case we do want to\n // apply them because they'll be cleared from the bounding box.\n if (config.maxHeight) {\n if (hasExactPosition) {\n styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n } else if (hasFlexibleDimensions) {\n styles.maxHeight = '';\n }\n }\n if (config.maxWidth) {\n if (hasExactPosition) {\n styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n } else if (hasFlexibleDimensions) {\n styles.maxWidth = '';\n }\n }\n extendStyles(this._pane.style, styles);\n }\n /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayY(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the\n // preferred position has changed since the last `apply`.\n let styles = {\n top: '',\n bottom: ''\n };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n // above or below the origin and the direction in which the element will expand.\n if (position.overlayY === 'bottom') {\n // When using `bottom`, we adjust the y position such that it is the distance\n // from the bottom of the viewport rather than the top.\n const documentHeight = this._document.documentElement.clientHeight;\n styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n } else {\n styles.top = coerceCssPixelValue(overlayPoint.y);\n }\n return styles;\n }\n /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayX(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the preferred position has\n // changed since the last `apply`.\n let styles = {\n left: '',\n right: ''\n };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n // or \"after\" the origin, which determines the direction in which the element will expand.\n // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n // page is in RTL or LTR.\n let horizontalStyleProperty;\n if (this._isRtl()) {\n horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n } else {\n horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n }\n // When we're setting `right`, we adjust the x position such that it is the distance\n // from the right edge of the viewport rather than the left edge.\n if (horizontalStyleProperty === 'right') {\n const documentWidth = this._document.documentElement.clientWidth;\n styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n } else {\n styles.left = coerceCssPixelValue(overlayPoint.x);\n }\n return styles;\n }\n /**\n * Gets the view properties of the trigger and overlay, including whether they are clipped\n * or completely outside the view of any of the strategy's scrollables.\n */\n _getScrollVisibility() {\n // Note: needs fresh rects since the position could've changed.\n const originBounds = this._getOriginRect();\n const overlayBounds = this._pane.getBoundingClientRect();\n // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n // every time, we should be able to use the scrollTop of the containers if the size of those\n // containers hasn't changed.\n const scrollContainerBounds = this._scrollables.map(scrollable => {\n return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n });\n return {\n isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds)\n };\n }\n /** Subtracts the amount that an element is overflowing on an axis from its length. */\n _subtractOverflows(length, ...overflows) {\n return overflows.reduce((currentValue, currentOverflow) => {\n return currentValue - Math.max(currentOverflow, 0);\n }, length);\n }\n /** Narrows the given viewport rect by the current _viewportMargin. */\n _getNarrowedViewportRect() {\n // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n // and `innerHeight` that do. This is necessary, because the overlay container uses\n // 100% `width` and `height` which don't include the scrollbar either.\n const width = this._document.documentElement.clientWidth;\n const height = this._document.documentElement.clientHeight;\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n return {\n top: scrollPosition.top + this._viewportMargin,\n left: scrollPosition.left + this._viewportMargin,\n right: scrollPosition.left + width - this._viewportMargin,\n bottom: scrollPosition.top + height - this._viewportMargin,\n width: width - 2 * this._viewportMargin,\n height: height - 2 * this._viewportMargin\n };\n }\n /** Whether the we're dealing with an RTL context */\n _isRtl() {\n return this._overlayRef.getDirection() === 'rtl';\n }\n /** Determines whether the overlay uses exact or flexible positioning. */\n _hasExactPosition() {\n return !this._hasFlexibleDimensions || this._isPushed;\n }\n /** Retrieves the offset of a position along the x or y axis. */\n _getOffset(position, axis) {\n if (axis === 'x') {\n // We don't do something like `position['offset' + axis]` in\n // order to avoid breaking minifiers that rename properties.\n return position.offsetX == null ? this._offsetX : position.offsetX;\n }\n return position.offsetY == null ? this._offsetY : position.offsetY;\n }\n /** Validates that the current position match the expected values. */\n _validatePositions() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._preferredPositions.length) {\n throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n }\n // TODO(crisbeto): remove these once Angular's template type\n // checking is advanced enough to catch these cases.\n this._preferredPositions.forEach(pair => {\n validateHorizontalPosition('originX', pair.originX);\n validateVerticalPosition('originY', pair.originY);\n validateHorizontalPosition('overlayX', pair.overlayX);\n validateVerticalPosition('overlayY', pair.overlayY);\n });\n }\n }\n /** Adds a single CSS class or an array of classes on the overlay panel. */\n _addPanelClasses(cssClasses) {\n if (this._pane) {\n coerceArray(cssClasses).forEach(cssClass => {\n if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n this._appliedPanelClasses.push(cssClass);\n this._pane.classList.add(cssClass);\n }\n });\n }\n }\n /** Clears the classes that the position strategy has applied from the overlay panel. */\n _clearPanelClasses() {\n if (this._pane) {\n this._appliedPanelClasses.forEach(cssClass => {\n this._pane.classList.remove(cssClass);\n });\n this._appliedPanelClasses = [];\n }\n }\n /** Returns the DOMRect of the current origin. */\n _getOriginRect() {\n const origin = this._origin;\n if (origin instanceof ElementRef) {\n return origin.nativeElement.getBoundingClientRect();\n }\n // Check for Element so SVG elements are also supported.\n if (origin instanceof Element) {\n return origin.getBoundingClientRect();\n }\n const width = origin.width || 0;\n const height = origin.height || 0;\n // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n return {\n top: origin.y,\n bottom: origin.y + height,\n left: origin.x,\n right: origin.x + width,\n height,\n width\n };\n }\n}\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n destination[key] = source[key];\n }\n }\n return destination;\n}\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input) {\n if (typeof input !== 'number' && input != null) {\n const [value, units] = input.split(cssUnitPattern);\n return !units || units === 'px' ? parseFloat(value) : null;\n }\n return input || null;\n}\n/**\n * Gets a version of an element's bounding `DOMRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `DOMRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect) {\n return {\n top: Math.floor(clientRect.top),\n right: Math.floor(clientRect.right),\n bottom: Math.floor(clientRect.bottom),\n left: Math.floor(clientRect.left),\n width: Math.floor(clientRect.width),\n height: Math.floor(clientRect.height)\n };\n}\n/** Returns whether two `ScrollingVisibility` objects are identical. */\nfunction compareScrollVisibility(a, b) {\n if (a === b) {\n return true;\n }\n return a.isOriginClipped === b.isOriginClipped && a.isOriginOutsideView === b.isOriginOutsideView && a.isOverlayClipped === b.isOverlayClipped && a.isOverlayOutsideView === b.isOverlayOutsideView;\n}\nconst STANDARD_DROPDOWN_BELOW_POSITIONS = [{\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n}, {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n}, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n}, {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n}];\nconst STANDARD_DROPDOWN_ADJACENT_POSITIONS = [{\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top'\n}, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom'\n}, {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top'\n}, {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom'\n}];\n\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nclass GlobalPositionStrategy {\n constructor() {\n this._cssPosition = 'static';\n this._topOffset = '';\n this._bottomOffset = '';\n this._alignItems = '';\n this._xPosition = '';\n this._xOffset = '';\n this._width = '';\n this._height = '';\n this._isDisposed = false;\n }\n attach(overlayRef) {\n const config = overlayRef.getConfig();\n this._overlayRef = overlayRef;\n if (this._width && !config.width) {\n overlayRef.updateSize({\n width: this._width\n });\n }\n if (this._height && !config.height) {\n overlayRef.updateSize({\n height: this._height\n });\n }\n overlayRef.hostElement.classList.add(wrapperClass);\n this._isDisposed = false;\n }\n /**\n * Sets the top position of the overlay. Clears any previously set vertical position.\n * @param value New top offset.\n */\n top(value = '') {\n this._bottomOffset = '';\n this._topOffset = value;\n this._alignItems = 'flex-start';\n return this;\n }\n /**\n * Sets the left position of the overlay. Clears any previously set horizontal position.\n * @param value New left offset.\n */\n left(value = '') {\n this._xOffset = value;\n this._xPosition = 'left';\n return this;\n }\n /**\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\n * @param value New bottom offset.\n */\n bottom(value = '') {\n this._topOffset = '';\n this._bottomOffset = value;\n this._alignItems = 'flex-end';\n return this;\n }\n /**\n * Sets the right position of the overlay. Clears any previously set horizontal position.\n * @param value New right offset.\n */\n right(value = '') {\n this._xOffset = value;\n this._xPosition = 'right';\n return this;\n }\n /**\n * Sets the overlay to the start of the viewport, depending on the overlay direction.\n * This will be to the left in LTR layouts and to the right in RTL.\n * @param offset Offset from the edge of the screen.\n */\n start(value = '') {\n this._xOffset = value;\n this._xPosition = 'start';\n return this;\n }\n /**\n * Sets the overlay to the end of the viewport, depending on the overlay direction.\n * This will be to the right in LTR layouts and to the left in RTL.\n * @param offset Offset from the edge of the screen.\n */\n end(value = '') {\n this._xOffset = value;\n this._xPosition = 'end';\n return this;\n }\n /**\n * Sets the overlay width and clears any previously set width.\n * @param value New width for the overlay\n * @deprecated Pass the `width` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n width(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({\n width: value\n });\n } else {\n this._width = value;\n }\n return this;\n }\n /**\n * Sets the overlay height and clears any previously set height.\n * @param value New height for the overlay\n * @deprecated Pass the `height` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n height(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({\n height: value\n });\n } else {\n this._height = value;\n }\n return this;\n }\n /**\n * Centers the overlay horizontally with an optional offset.\n * Clears any previously set horizontal position.\n *\n * @param offset Overlay offset from the horizontal center.\n */\n centerHorizontally(offset = '') {\n this.left(offset);\n this._xPosition = 'center';\n return this;\n }\n /**\n * Centers the overlay vertically with an optional offset.\n * Clears any previously set vertical position.\n *\n * @param offset Overlay offset from the vertical center.\n */\n centerVertically(offset = '') {\n this.top(offset);\n this._alignItems = 'center';\n return this;\n }\n /**\n * Apply the position to the element.\n * @docs-private\n */\n apply() {\n // Since the overlay ref applies the strategy asynchronously, it could\n // have been disposed before it ends up being applied. If that is the\n // case, we shouldn't do anything.\n if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parentStyles = this._overlayRef.hostElement.style;\n const config = this._overlayRef.getConfig();\n const {\n width,\n height,\n maxWidth,\n maxHeight\n } = config;\n const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') && (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n const shouldBeFlushVertically = (height === '100%' || height === '100vh') && (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n const xPosition = this._xPosition;\n const xOffset = this._xOffset;\n const isRtl = this._overlayRef.getConfig().direction === 'rtl';\n let marginLeft = '';\n let marginRight = '';\n let justifyContent = '';\n if (shouldBeFlushHorizontally) {\n justifyContent = 'flex-start';\n } else if (xPosition === 'center') {\n justifyContent = 'center';\n if (isRtl) {\n marginRight = xOffset;\n } else {\n marginLeft = xOffset;\n }\n } else if (isRtl) {\n if (xPosition === 'left' || xPosition === 'end') {\n justifyContent = 'flex-end';\n marginLeft = xOffset;\n } else if (xPosition === 'right' || xPosition === 'start') {\n justifyContent = 'flex-start';\n marginRight = xOffset;\n }\n } else if (xPosition === 'left' || xPosition === 'start') {\n justifyContent = 'flex-start';\n marginLeft = xOffset;\n } else if (xPosition === 'right' || xPosition === 'end') {\n justifyContent = 'flex-end';\n marginRight = xOffset;\n }\n styles.position = this._cssPosition;\n styles.marginLeft = shouldBeFlushHorizontally ? '0' : marginLeft;\n styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n styles.marginBottom = this._bottomOffset;\n styles.marginRight = shouldBeFlushHorizontally ? '0' : marginRight;\n parentStyles.justifyContent = justifyContent;\n parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n }\n /**\n * Cleans up the DOM changes from the position strategy.\n * @docs-private\n */\n dispose() {\n if (this._isDisposed || !this._overlayRef) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parent = this._overlayRef.hostElement;\n const parentStyles = parent.style;\n parent.classList.remove(wrapperClass);\n parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop = styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';\n this._overlayRef = null;\n this._isDisposed = true;\n }\n}\n\n/** Builder for overlay position strategy. */\nlet OverlayPositionBuilder = /*#__PURE__*/(() => {\n class OverlayPositionBuilder {\n constructor(_viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n }\n /**\n * Creates a global position strategy.\n */\n global() {\n return new GlobalPositionStrategy();\n }\n /**\n * Creates a flexible position strategy.\n * @param origin Origin relative to which to position the overlay.\n */\n flexibleConnectedTo(origin) {\n return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n }\n static {\n this.ɵfac = function OverlayPositionBuilder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OverlayPositionBuilder)(i0.ɵɵinject(i1.ViewportRuler), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1$1.Platform), i0.ɵɵinject(OverlayContainer));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: OverlayPositionBuilder,\n factory: OverlayPositionBuilder.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return OverlayPositionBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\nlet Overlay = /*#__PURE__*/(() => {\n class Overlay {\n constructor(/** Scrolling strategies that can be used when creating an overlay. */\n scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher, _animationsModuleType) {\n this.scrollStrategies = scrollStrategies;\n this._overlayContainer = _overlayContainer;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._positionBuilder = _positionBuilder;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._injector = _injector;\n this._ngZone = _ngZone;\n this._document = _document;\n this._directionality = _directionality;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._animationsModuleType = _animationsModuleType;\n }\n /**\n * Creates an overlay.\n * @param config Configuration applied to the overlay.\n * @returns Reference to the created overlay.\n */\n create(config) {\n const host = this._createHostElement();\n const pane = this._createPaneElement(host);\n const portalOutlet = this._createPortalOutlet(pane);\n const overlayConfig = new OverlayConfig(config);\n overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher, this._animationsModuleType === 'NoopAnimations', this._injector.get(EnvironmentInjector));\n }\n /**\n * Gets a position builder that can be used, via fluent API,\n * to construct and configure a position strategy.\n * @returns An overlay position builder.\n */\n position() {\n return this._positionBuilder;\n }\n /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @returns Newly-created pane element\n */\n _createPaneElement(host) {\n const pane = this._document.createElement('div');\n pane.id = `cdk-overlay-${nextUniqueId++}`;\n pane.classList.add('cdk-overlay-pane');\n host.appendChild(pane);\n return pane;\n }\n /**\n * Creates the host element that wraps around an overlay\n * and can be used for advanced positioning.\n * @returns Newly-create host element.\n */\n _createHostElement() {\n const host = this._document.createElement('div');\n this._overlayContainer.getContainerElement().appendChild(host);\n return host;\n }\n /**\n * Create a DomPortalOutlet into which the overlay content can be loaded.\n * @param pane The DOM element to turn into a portal outlet.\n * @returns A portal outlet for the given DOM element.\n */\n _createPortalOutlet(pane) {\n // We have to resolve the ApplicationRef later in order to allow people\n // to use overlay-based providers during app initialization.\n if (!this._appRef) {\n this._appRef = this._injector.get(ApplicationRef);\n }\n return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector, this._document);\n }\n static {\n this.ɵfac = function Overlay_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Overlay)(i0.ɵɵinject(ScrollStrategyOptions), i0.ɵɵinject(OverlayContainer), i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(OverlayPositionBuilder), i0.ɵɵinject(OverlayKeyboardDispatcher), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i5.Directionality), i0.ɵɵinject(i6.Location), i0.ɵɵinject(OverlayOutsideClickDispatcher), i0.ɵɵinject(ANIMATION_MODULE_TYPE, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Overlay,\n factory: Overlay.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return Overlay;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList = [{\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n}, {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n}, {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n}, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n}];\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('cdk-connected-overlay-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n }\n});\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\nlet CdkOverlayOrigin = /*#__PURE__*/(() => {\n class CdkOverlayOrigin {\n constructor(/** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n static {\n this.ɵfac = function CdkOverlayOrigin_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkOverlayOrigin)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkOverlayOrigin,\n selectors: [[\"\", \"cdk-overlay-origin\", \"\"], [\"\", \"overlay-origin\", \"\"], [\"\", \"cdkOverlayOrigin\", \"\"]],\n exportAs: [\"cdkOverlayOrigin\"],\n standalone: true\n });\n }\n }\n return CdkOverlayOrigin;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\nlet CdkConnectedOverlay = /*#__PURE__*/(() => {\n class CdkConnectedOverlay {\n /** The offset in pixels for the overlay connection point on the x-axis */\n get offsetX() {\n return this._offsetX;\n }\n set offsetX(offsetX) {\n this._offsetX = offsetX;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** The offset in pixels for the overlay connection point on the y-axis */\n get offsetY() {\n return this._offsetY;\n }\n set offsetY(offsetY) {\n this._offsetY = offsetY;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** Whether the overlay should be disposed of when the user goes backwards/forwards in history. */\n get disposeOnNavigation() {\n return this._disposeOnNavigation;\n }\n set disposeOnNavigation(value) {\n this._disposeOnNavigation = value;\n }\n // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n constructor(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) {\n this._overlay = _overlay;\n this._dir = _dir;\n this._backdropSubscription = Subscription.EMPTY;\n this._attachSubscription = Subscription.EMPTY;\n this._detachSubscription = Subscription.EMPTY;\n this._positionSubscription = Subscription.EMPTY;\n this._disposeOnNavigation = false;\n this._ngZone = inject(NgZone);\n /** Margin between the overlay and the viewport edges. */\n this.viewportMargin = 0;\n /** Whether the overlay is open. */\n this.open = false;\n /** Whether the overlay can be closed by user interaction. */\n this.disableClose = false;\n /** Whether or not the overlay should attach a backdrop. */\n this.hasBackdrop = false;\n /** Whether or not the overlay should be locked when scrolling. */\n this.lockPosition = false;\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n this.flexibleDimensions = false;\n /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n this.growAfterOpen = false;\n /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n this.push = false;\n /** Event emitted when the backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Event emitted when the position has changed. */\n this.positionChange = new EventEmitter();\n /** Event emitted when the overlay has been attached. */\n this.attach = new EventEmitter();\n /** Event emitted when the overlay has been detached. */\n this.detach = new EventEmitter();\n /** Emits when there are keyboard events that are targeted at the overlay. */\n this.overlayKeydown = new EventEmitter();\n /** Emits when there are mouse outside click events that are targeted at the overlay. */\n this.overlayOutsideClick = new EventEmitter();\n this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this.scrollStrategy = this._scrollStrategyFactory();\n }\n /** The associated overlay reference. */\n get overlayRef() {\n return this._overlayRef;\n }\n /** The element's layout direction. */\n get dir() {\n return this._dir ? this._dir.value : 'ltr';\n }\n ngOnDestroy() {\n this._attachSubscription.unsubscribe();\n this._detachSubscription.unsubscribe();\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n }\n ngOnChanges(changes) {\n if (this._position) {\n this._updatePositionStrategy(this._position);\n this._overlayRef.updateSize({\n width: this.width,\n minWidth: this.minWidth,\n height: this.height,\n minHeight: this.minHeight\n });\n if (changes['origin'] && this.open) {\n this._position.apply();\n }\n }\n if (changes['open']) {\n this.open ? this._attachOverlay() : this._detachOverlay();\n }\n }\n /** Creates an overlay */\n _createOverlay() {\n if (!this.positions || !this.positions.length) {\n this.positions = defaultPositionList;\n }\n const overlayRef = this._overlayRef = this._overlay.create(this._buildConfig());\n this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n overlayRef.keydownEvents().subscribe(event => {\n this.overlayKeydown.next(event);\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this._detachOverlay();\n }\n });\n this._overlayRef.outsidePointerEvents().subscribe(event => {\n const origin = this._getOriginElement();\n const target = _getEventTarget(event);\n if (!origin || origin !== target && !origin.contains(target)) {\n this.overlayOutsideClick.next(event);\n }\n });\n }\n /** Builds the overlay config based on the directive's inputs */\n _buildConfig() {\n const positionStrategy = this._position = this.positionStrategy || this._createPositionStrategy();\n const overlayConfig = new OverlayConfig({\n direction: this._dir,\n positionStrategy,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.hasBackdrop,\n disposeOnNavigation: this.disposeOnNavigation\n });\n if (this.width || this.width === 0) {\n overlayConfig.width = this.width;\n }\n if (this.height || this.height === 0) {\n overlayConfig.height = this.height;\n }\n if (this.minWidth || this.minWidth === 0) {\n overlayConfig.minWidth = this.minWidth;\n }\n if (this.minHeight || this.minHeight === 0) {\n overlayConfig.minHeight = this.minHeight;\n }\n if (this.backdropClass) {\n overlayConfig.backdropClass = this.backdropClass;\n }\n if (this.panelClass) {\n overlayConfig.panelClass = this.panelClass;\n }\n return overlayConfig;\n }\n /** Updates the state of a position strategy, based on the values of the directive inputs. */\n _updatePositionStrategy(positionStrategy) {\n const positions = this.positions.map(currentPosition => ({\n originX: currentPosition.originX,\n originY: currentPosition.originY,\n overlayX: currentPosition.overlayX,\n overlayY: currentPosition.overlayY,\n offsetX: currentPosition.offsetX || this.offsetX,\n offsetY: currentPosition.offsetY || this.offsetY,\n panelClass: currentPosition.panelClass || undefined\n }));\n return positionStrategy.setOrigin(this._getOrigin()).withPositions(positions).withFlexibleDimensions(this.flexibleDimensions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition).withTransformOriginOn(this.transformOriginSelector);\n }\n /** Returns the position strategy of the overlay to be set on the overlay config */\n _createPositionStrategy() {\n const strategy = this._overlay.position().flexibleConnectedTo(this._getOrigin());\n this._updatePositionStrategy(strategy);\n return strategy;\n }\n _getOrigin() {\n if (this.origin instanceof CdkOverlayOrigin) {\n return this.origin.elementRef;\n } else {\n return this.origin;\n }\n }\n _getOriginElement() {\n if (this.origin instanceof CdkOverlayOrigin) {\n return this.origin.elementRef.nativeElement;\n }\n if (this.origin instanceof ElementRef) {\n return this.origin.nativeElement;\n }\n if (typeof Element !== 'undefined' && this.origin instanceof Element) {\n return this.origin;\n }\n return null;\n }\n /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n _attachOverlay() {\n if (!this._overlayRef) {\n this._createOverlay();\n } else {\n // Update the overlay size, in case the directive's inputs have changed\n this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n }\n if (!this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._templatePortal);\n }\n if (this.hasBackdrop) {\n this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n this.backdropClick.emit(event);\n });\n } else {\n this._backdropSubscription.unsubscribe();\n }\n this._positionSubscription.unsubscribe();\n // Only subscribe to `positionChanges` if requested, because putting\n // together all the information for it can be expensive.\n if (this.positionChange.observers.length > 0) {\n this._positionSubscription = this._position.positionChanges.pipe(takeWhile(() => this.positionChange.observers.length > 0)).subscribe(position => {\n this._ngZone.run(() => this.positionChange.emit(position));\n if (this.positionChange.observers.length === 0) {\n this._positionSubscription.unsubscribe();\n }\n });\n }\n }\n /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n _detachOverlay() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n }\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n }\n static {\n this.ɵfac = function CdkConnectedOverlay_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkConnectedOverlay)(i0.ɵɵdirectiveInject(Overlay), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(i5.Directionality, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkConnectedOverlay,\n selectors: [[\"\", \"cdk-connected-overlay\", \"\"], [\"\", \"connected-overlay\", \"\"], [\"\", \"cdkConnectedOverlay\", \"\"]],\n inputs: {\n origin: [0, \"cdkConnectedOverlayOrigin\", \"origin\"],\n positions: [0, \"cdkConnectedOverlayPositions\", \"positions\"],\n positionStrategy: [0, \"cdkConnectedOverlayPositionStrategy\", \"positionStrategy\"],\n offsetX: [0, \"cdkConnectedOverlayOffsetX\", \"offsetX\"],\n offsetY: [0, \"cdkConnectedOverlayOffsetY\", \"offsetY\"],\n width: [0, \"cdkConnectedOverlayWidth\", \"width\"],\n height: [0, \"cdkConnectedOverlayHeight\", \"height\"],\n minWidth: [0, \"cdkConnectedOverlayMinWidth\", \"minWidth\"],\n minHeight: [0, \"cdkConnectedOverlayMinHeight\", \"minHeight\"],\n backdropClass: [0, \"cdkConnectedOverlayBackdropClass\", \"backdropClass\"],\n panelClass: [0, \"cdkConnectedOverlayPanelClass\", \"panelClass\"],\n viewportMargin: [0, \"cdkConnectedOverlayViewportMargin\", \"viewportMargin\"],\n scrollStrategy: [0, \"cdkConnectedOverlayScrollStrategy\", \"scrollStrategy\"],\n open: [0, \"cdkConnectedOverlayOpen\", \"open\"],\n disableClose: [0, \"cdkConnectedOverlayDisableClose\", \"disableClose\"],\n transformOriginSelector: [0, \"cdkConnectedOverlayTransformOriginOn\", \"transformOriginSelector\"],\n hasBackdrop: [2, \"cdkConnectedOverlayHasBackdrop\", \"hasBackdrop\", booleanAttribute],\n lockPosition: [2, \"cdkConnectedOverlayLockPosition\", \"lockPosition\", booleanAttribute],\n flexibleDimensions: [2, \"cdkConnectedOverlayFlexibleDimensions\", \"flexibleDimensions\", booleanAttribute],\n growAfterOpen: [2, \"cdkConnectedOverlayGrowAfterOpen\", \"growAfterOpen\", booleanAttribute],\n push: [2, \"cdkConnectedOverlayPush\", \"push\", booleanAttribute],\n disposeOnNavigation: [2, \"cdkConnectedOverlayDisposeOnNavigation\", \"disposeOnNavigation\", booleanAttribute]\n },\n outputs: {\n backdropClick: \"backdropClick\",\n positionChange: \"positionChange\",\n attach: \"attach\",\n detach: \"detach\",\n overlayKeydown: \"overlayKeydown\",\n overlayOutsideClick: \"overlayOutsideClick\"\n },\n exportAs: [\"cdkConnectedOverlay\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkConnectedOverlay;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nfunction CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\nlet OverlayModule = /*#__PURE__*/(() => {\n class OverlayModule {\n static {\n this.ɵfac = function OverlayModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || OverlayModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: OverlayModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [Overlay, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER],\n imports: [BidiModule, PortalModule, ScrollingModule, ScrollingModule]\n });\n }\n }\n return OverlayModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\nlet FullscreenOverlayContainer = /*#__PURE__*/(() => {\n class FullscreenOverlayContainer extends OverlayContainer {\n constructor(_document, platform) {\n super(_document, platform);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._fullScreenEventName && this._fullScreenListener) {\n this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n }\n }\n _createContainer() {\n super._createContainer();\n this._adjustParentForFullscreenChange();\n this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n }\n _adjustParentForFullscreenChange() {\n if (!this._containerElement) {\n return;\n }\n const fullscreenElement = this.getFullscreenElement();\n const parent = fullscreenElement || this._document.body;\n parent.appendChild(this._containerElement);\n }\n _addFullscreenChangeListener(fn) {\n const eventName = this._getEventName();\n if (eventName) {\n if (this._fullScreenListener) {\n this._document.removeEventListener(eventName, this._fullScreenListener);\n }\n this._document.addEventListener(eventName, fn);\n this._fullScreenListener = fn;\n }\n }\n _getEventName() {\n if (!this._fullScreenEventName) {\n const _document = this._document;\n if (_document.fullscreenEnabled) {\n this._fullScreenEventName = 'fullscreenchange';\n } else if (_document.webkitFullscreenEnabled) {\n this._fullScreenEventName = 'webkitfullscreenchange';\n } else if (_document.mozFullScreenEnabled) {\n this._fullScreenEventName = 'mozfullscreenchange';\n } else if (_document.msFullscreenEnabled) {\n this._fullScreenEventName = 'MSFullscreenChange';\n }\n }\n return this._fullScreenEventName;\n }\n /**\n * When the page is put into fullscreen mode, a specific element is specified.\n * Only that element and its children are visible when in fullscreen mode.\n */\n getFullscreenElement() {\n const _document = this._document;\n return _document.fullscreenElement || _document.webkitFullscreenElement || _document.mozFullScreenElement || _document.msFullscreenElement || null;\n }\n static {\n this.ɵfac = function FullscreenOverlayContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || FullscreenOverlayContainer)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1$1.Platform));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FullscreenOverlayContainer,\n factory: FullscreenOverlayContainer.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return FullscreenOverlayContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, STANDARD_DROPDOWN_ADJACENT_POSITIONS, STANDARD_DROPDOWN_BELOW_POSITIONS, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition };\n","import * as i1 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayRef, OverlayModule } from '@angular/cdk/overlay';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, ChangeDetectorRef, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, ViewChild, InjectionToken, TemplateRef, Injectable, SkipSelf, NgModule } from '@angular/core';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, defer, of } from 'rxjs';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { startWith } from 'rxjs/operators';\n\n/** Configuration for opening a modal dialog. */\nfunction CdkDialogContainer_ng_template_0_Template(rf, ctx) {}\nclass DialogConfig {\n constructor() {\n /** The ARIA role of the dialog element. */\n this.role = 'dialog';\n /** Optional CSS class or classes applied to the overlay panel. */\n this.panelClass = '';\n /** Whether the dialog has a backdrop. */\n this.hasBackdrop = true;\n /** Optional CSS class or classes applied to the overlay backdrop. */\n this.backdropClass = '';\n /** Whether the dialog closes with the escape key or pointer events outside the panel element. */\n this.disableClose = false;\n /** Width of the dialog. */\n this.width = '';\n /** Height of the dialog. */\n this.height = '';\n /** Data being injected into the child component. */\n this.data = null;\n /** ID of the element that describes the dialog. */\n this.ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n this.ariaLabelledBy = null;\n /** Dialog label applied via `aria-label` */\n this.ariaLabel = null;\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n this.ariaModal = true;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n this.autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the previously-focused element upon closing.\n * Has the following behavior based on the type that is passed in:\n * - `boolean` - when true, will return focus to the element that was focused before the dialog\n * was opened, otherwise won't restore focus at all.\n * - `string` - focus will be restored to the first element that matches the CSS selector.\n * - `HTMLElement` - focus will be restored to the specific element.\n */\n this.restoreFocus = true;\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history. This does not apply to navigation via anchor element unless using URL-hash based\n * routing (`HashLocationStrategy` in the Angular router).\n */\n this.closeOnNavigation = true;\n /**\n * Whether the dialog should close when the dialog service is destroyed. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead.\n */\n this.closeOnDestroy = true;\n /**\n * Whether the dialog should close when the underlying overlay is detached. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead. E.g. an\n * external detachment can happen as a result of a scroll strategy triggering it or when the\n * browser location changes.\n */\n this.closeOnOverlayDetachments = true;\n }\n}\nfunction throwDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Internal component that wraps user-provided dialog content.\n * @docs-private\n */\nlet CdkDialogContainer = /*#__PURE__*/(() => {\n class CdkDialogContainer extends BasePortalOutlet {\n constructor(_elementRef, _focusTrapFactory, _document, _config, _interactivityChecker, _ngZone, _overlayRef, _focusMonitor) {\n super();\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._config = _config;\n this._interactivityChecker = _interactivityChecker;\n this._ngZone = _ngZone;\n this._overlayRef = _overlayRef;\n this._focusMonitor = _focusMonitor;\n this._platform = inject(Platform);\n /** The class that traps and manages focus within the dialog. */\n this._focusTrap = null;\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n this._elementFocusedBeforeDialogWasOpened = null;\n /**\n * Type of interaction that led to the dialog being closed. This is used to determine\n * whether the focus style will be applied when returning focus to its original location\n * after the dialog is closed.\n */\n this._closeInteractionType = null;\n /**\n * Queue of the IDs of the dialog's label element, based on their definition order. The first\n * ID will be used as the `aria-labelledby` value. We use a queue here to handle the case\n * where there are two or more titles in the DOM at a time and the first one is destroyed while\n * the rest are present.\n */\n this._ariaLabelledByQueue = [];\n this._changeDetectorRef = inject(ChangeDetectorRef);\n this._injector = inject(Injector);\n this._isDestroyed = false;\n /**\n * Attaches a DOM portal to the dialog container.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = portal => {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachDomPortal(portal);\n this._contentAttached();\n return result;\n };\n this._document = _document;\n if (this._config.ariaLabelledBy) {\n this._ariaLabelledByQueue.push(this._config.ariaLabelledBy);\n }\n }\n _addAriaLabelledBy(id) {\n this._ariaLabelledByQueue.push(id);\n this._changeDetectorRef.markForCheck();\n }\n _removeAriaLabelledBy(id) {\n const index = this._ariaLabelledByQueue.indexOf(id);\n if (index > -1) {\n this._ariaLabelledByQueue.splice(index, 1);\n this._changeDetectorRef.markForCheck();\n }\n }\n _contentAttached() {\n this._initializeFocusTrap();\n this._handleBackdropClicks();\n this._captureInitialFocus();\n }\n /**\n * Can be used by child classes to customize the initial focus\n * capturing behavior (e.g. if it's tied to an animation).\n */\n _captureInitialFocus() {\n this._trapFocus();\n }\n ngOnDestroy() {\n this._isDestroyed = true;\n this._restoreFocus();\n }\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._contentAttached();\n return result;\n }\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._contentAttached();\n return result;\n }\n // TODO(crisbeto): this shouldn't be exposed, but there are internal references to it.\n /** Captures focus if it isn't already inside the dialog. */\n _recaptureFocus() {\n if (!this._containsFocus()) {\n this._trapFocus();\n }\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves the focus inside the focus trap. When autoFocus is not set to 'dialog', if focus\n * cannot be moved then focus will go to the dialog container.\n */\n _trapFocus() {\n if (this._isDestroyed) {\n return;\n }\n // If were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait until after the next render.\n afterNextRender(() => {\n const element = this._elementRef.nativeElement;\n switch (this._config.autoFocus) {\n case false:\n case 'dialog':\n // Ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (!this._containsFocus()) {\n element.focus();\n }\n break;\n case true:\n case 'first-tabbable':\n const focusedSuccessfully = this._focusTrap?.focusInitialElement();\n // If we weren't able to find a focusable element in the dialog, then focus the dialog\n // container instead.\n if (!focusedSuccessfully) {\n this._focusDialogContainer();\n }\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this._config.autoFocus);\n break;\n }\n }, {\n injector: this._injector\n });\n }\n /** Restores focus to the element that was focused before the dialog opened. */\n _restoreFocus() {\n const focusConfig = this._config.restoreFocus;\n let focusTargetElement = null;\n if (typeof focusConfig === 'string') {\n focusTargetElement = this._document.querySelector(focusConfig);\n } else if (typeof focusConfig === 'boolean') {\n focusTargetElement = focusConfig ? this._elementFocusedBeforeDialogWasOpened : null;\n } else if (focusConfig) {\n focusTargetElement = focusConfig;\n }\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this._config.restoreFocus && focusTargetElement && typeof focusTargetElement.focus === 'function') {\n const activeElement = _getFocusedElementPierceShadowDom();\n const element = this._elementRef.nativeElement;\n // Make sure that focus is still inside the dialog or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (!activeElement || activeElement === this._document.body || activeElement === element || element.contains(activeElement)) {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(focusTargetElement, this._closeInteractionType);\n this._closeInteractionType = null;\n } else {\n focusTargetElement.focus();\n }\n }\n }\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n /** Focuses the dialog container. */\n _focusDialogContainer() {\n // Note that there is no focus method when rendering on the server.\n if (this._elementRef.nativeElement.focus) {\n this._elementRef.nativeElement.focus();\n }\n }\n /** Returns whether focus is inside the dialog. */\n _containsFocus() {\n const element = this._elementRef.nativeElement;\n const activeElement = _getFocusedElementPierceShadowDom();\n return element === activeElement || element.contains(activeElement);\n }\n /** Sets up the focus trap. */\n _initializeFocusTrap() {\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n // Save the previously focused element. This element will be re-focused\n // when the dialog closes.\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n }\n }\n }\n /** Sets up the listener that handles clicks on the dialog backdrop. */\n _handleBackdropClicks() {\n // Clicking on the backdrop will move focus out of dialog.\n // Recapture it if closing via the backdrop is disabled.\n this._overlayRef.backdropClick().subscribe(() => {\n if (this._config.disableClose) {\n this._recaptureFocus();\n }\n });\n }\n static {\n this.ɵfac = function CdkDialogContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(DialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkDialogContainer,\n selectors: [[\"cdk-dialog-container\"]],\n viewQuery: function CdkDialogContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n }\n },\n hostAttrs: [\"tabindex\", \"-1\", 1, \"cdk-dialog-container\"],\n hostVars: 6,\n hostBindings: function CdkDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx._config.id || null)(\"role\", ctx._config.role)(\"aria-modal\", ctx._config.ariaModal)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkPortalOutlet\", \"\"]],\n template: function CdkDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, CdkDialogContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}\"],\n encapsulation: 2\n });\n }\n }\n return CdkDialogContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nclass DialogRef {\n constructor(overlayRef, config) {\n this.overlayRef = overlayRef;\n this.config = config;\n /** Emits when the dialog has been closed. */\n this.closed = new Subject();\n this.disableClose = config.disableClose;\n this.backdropClick = overlayRef.backdropClick();\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\n this.id = config.id; // By the time the dialog is created we are guaranteed to have an ID.\n this.keydownEvents.subscribe(event => {\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.close(undefined, {\n focusOrigin: 'keyboard'\n });\n }\n });\n this.backdropClick.subscribe(() => {\n if (!this.disableClose) {\n this.close(undefined, {\n focusOrigin: 'mouse'\n });\n }\n });\n this._detachSubscription = overlayRef.detachments().subscribe(() => {\n // Check specifically for `false`, because we want `undefined` to be treated like `true`.\n if (config.closeOnOverlayDetachments !== false) {\n this.close();\n }\n });\n }\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\n */\n close(result, options) {\n if (this.containerInstance) {\n const closedSubject = this.closed;\n this.containerInstance._closeInteractionType = options?.focusOrigin || 'program';\n // Drop the detach subscription first since it can be triggered by the\n // `dispose` call and override the result of this closing sequence.\n this._detachSubscription.unsubscribe();\n this.overlayRef.dispose();\n closedSubject.next(result);\n closedSubject.complete();\n this.componentInstance = this.containerInstance = null;\n }\n }\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition() {\n this.overlayRef.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this.overlayRef.updateSize({\n width,\n height\n });\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this.overlayRef.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this.overlayRef.removePanelClass(classes);\n return this;\n }\n}\n\n/** Injection token for the Dialog's ScrollStrategy. */\nconst DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('DialogScrollStrategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.block();\n }\n});\n/** Injection token for the Dialog's Data. */\nconst DIALOG_DATA = /*#__PURE__*/new InjectionToken('DialogData');\n/** Injection token that can be used to provide default options for the dialog module. */\nconst DEFAULT_DIALOG_CONFIG = /*#__PURE__*/new InjectionToken('DefaultDialogConfig');\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n\n/** Unique id for the created dialog. */\nlet uniqueId = 0;\nlet Dialog = /*#__PURE__*/(() => {\n class Dialog {\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n constructor(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy) {\n this._overlay = _overlay;\n this._injector = _injector;\n this._defaultOptions = _defaultOptions;\n this._parentDialog = _parentDialog;\n this._overlayContainer = _overlayContainer;\n this._openDialogsAtThisLevel = [];\n this._afterAllClosedAtThisLevel = new Subject();\n this._afterOpenedAtThisLevel = new Subject();\n this._ariaHiddenElements = new Map();\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n this._scrollStrategy = scrollStrategy;\n }\n open(componentOrTemplateRef, config) {\n const defaults = this._defaultOptions || new DialogConfig();\n config = {\n ...defaults,\n ...config\n };\n config.id = config.id || `cdk-dialog-${uniqueId++}`;\n if (config.id && this.getDialogById(config.id) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n const overlayConfig = this._getOverlayConfig(config);\n const overlayRef = this._overlay.create(overlayConfig);\n const dialogRef = new DialogRef(overlayRef, config);\n const dialogContainer = this._attachContainer(overlayRef, dialogRef, config);\n dialogRef.containerInstance = dialogContainer;\n this._attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config);\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this._hideNonDialogContentFromAssistiveTechnology();\n }\n this.openDialogs.push(dialogRef);\n dialogRef.closed.subscribe(() => this._removeOpenDialog(dialogRef, true));\n this.afterOpened.next(dialogRef);\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this._openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n if (dialog.config.closeOnDestroy === false) {\n this._removeOpenDialog(dialog, false);\n }\n });\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this._openDialogsAtThisLevel, dialog => dialog.close());\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n this._openDialogsAtThisLevel = [];\n }\n /**\n * Creates an overlay config from a dialog config.\n * @param config The dialog configuration.\n * @returns The overlay configuration.\n */\n _getOverlayConfig(config) {\n const state = new OverlayConfig({\n positionStrategy: config.positionStrategy || this._overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this._scrollStrategy(),\n panelClass: config.panelClass,\n hasBackdrop: config.hasBackdrop,\n direction: config.direction,\n minWidth: config.minWidth,\n minHeight: config.minHeight,\n maxWidth: config.maxWidth,\n maxHeight: config.maxHeight,\n width: config.width,\n height: config.height,\n disposeOnNavigation: config.closeOnNavigation\n });\n if (config.backdropClass) {\n state.backdropClass = config.backdropClass;\n }\n return state;\n }\n /**\n * Attaches a dialog container to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n _attachContainer(overlay, dialogRef, config) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DialogConfig,\n useValue: config\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }, {\n provide: OverlayRef,\n useValue: overlay\n }];\n let containerType;\n if (config.container) {\n if (typeof config.container === 'function') {\n containerType = config.container;\n } else {\n containerType = config.container.type;\n providers.push(...config.container.providers(config));\n }\n } else {\n containerType = CdkDialogContainer;\n }\n const containerPortal = new ComponentPortal(containerType, config.viewContainerRef, Injector.create({\n parent: userInjector || this._injector,\n providers\n }), config.componentFactoryResolver);\n const containerRef = overlay.attach(containerPortal);\n return containerRef.instance;\n }\n /**\n * Attaches the user-provided component to the already-created dialog container.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param config Configuration used to open the dialog.\n */\n _attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config) {\n if (componentOrTemplateRef instanceof TemplateRef) {\n const injector = this._createInjector(config, dialogRef, dialogContainer, undefined);\n let context = {\n $implicit: config.data,\n dialogRef\n };\n if (config.templateContext) {\n context = {\n ...context,\n ...(typeof config.templateContext === 'function' ? config.templateContext() : config.templateContext)\n };\n }\n dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, context, injector));\n } else {\n const injector = this._createInjector(config, dialogRef, dialogContainer, this._injector);\n const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector, config.componentFactoryResolver));\n dialogRef.componentRef = contentRef;\n dialogRef.componentInstance = contentRef.instance;\n }\n }\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param fallbackInjector Injector to use as a fallback when a lookup fails in the custom\n * dialog injector, if the user didn't provide a custom one.\n * @returns The custom injector that can be used inside the dialog.\n */\n _createInjector(config, dialogRef, dialogContainer, fallbackInjector) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DIALOG_DATA,\n useValue: config.data\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }];\n if (config.providers) {\n if (typeof config.providers === 'function') {\n providers.push(...config.providers(dialogRef, config, dialogContainer));\n } else {\n providers.push(...config.providers);\n }\n }\n if (config.direction && (!userInjector || !userInjector.get(Directionality, null, {\n optional: true\n }))) {\n providers.push({\n provide: Directionality,\n useValue: {\n value: config.direction,\n change: of()\n }\n });\n }\n return Injector.create({\n parent: userInjector || fallbackInjector,\n providers\n });\n }\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n * @param emitEvent Whether to emit an event if this is the last dialog.\n */\n _removeOpenDialog(dialogRef, emitEvent) {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenElements.clear();\n if (emitEvent) {\n this._getAfterAllClosed().next();\n }\n }\n }\n }\n /** Hides all of the content that isn't an overlay from assistive technology. */\n _hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this._overlayContainer.getContainerElement();\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n if (sibling !== overlayContainer && sibling.nodeName !== 'SCRIPT' && sibling.nodeName !== 'STYLE' && !sibling.hasAttribute('aria-live')) {\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n static {\n this.ɵfac = function Dialog_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Dialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(DEFAULT_DIALOG_CONFIG, 8), i0.ɵɵinject(Dialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(DIALOG_SCROLL_STRATEGY));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Dialog,\n factory: Dialog.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return Dialog;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach(items, callback) {\n let i = items.length;\n while (i--) {\n callback(items[i]);\n }\n}\nlet DialogModule = /*#__PURE__*/(() => {\n class DialogModule {\n static {\n this.ɵfac = function DialogModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DialogModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: DialogModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [Dialog],\n imports: [OverlayModule, PortalModule, A11yModule,\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule]\n });\n }\n }\n return DialogModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkDialogContainer, DEFAULT_DIALOG_CONFIG, DIALOG_DATA, DIALOG_SCROLL_STRATEGY, DIALOG_SCROLL_STRATEGY_PROVIDER, DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, Dialog, DialogConfig, DialogModule, DialogRef, throwDialogContentAlreadyAttachedError };\n","import * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport * as i2 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, ANIMATION_MODULE_TYPE, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, InjectionToken, inject, Injectable, SkipSelf, Directive, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { CdkDialogContainer, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport { Subject, merge, defer } from 'rxjs';\nimport { filter, take, startWith } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatCommonModule } from '@angular/material/core';\nimport { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nfunction MatDialogContainer_ng_template_2_Template(rf, ctx) {}\nclass MatDialogConfig {\n constructor() {\n /** The ARIA role of the dialog element. */\n this.role = 'dialog';\n /** Custom class for the overlay pane. */\n this.panelClass = '';\n /** Whether the dialog has a backdrop. */\n this.hasBackdrop = true;\n /** Custom class for the backdrop. */\n this.backdropClass = '';\n /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n this.disableClose = false;\n /** Width of the dialog. */\n this.width = '';\n /** Height of the dialog. */\n this.height = '';\n /** Data being injected into the child component. */\n this.data = null;\n /** ID of the element that describes the dialog. */\n this.ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n this.ariaLabelledBy = null;\n /** Aria label to assign to the dialog element. */\n this.ariaLabel = null;\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n this.ariaModal = true;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n this.autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the\n * previously-focused element, after it's closed.\n */\n this.restoreFocus = true;\n /** Whether to wait for the opening animation to finish before trapping focus. */\n this.delayFocusTrap = true;\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.closeOnNavigation = true;\n // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\n }\n}\n\n/** Class added when the dialog is open. */\nconst OPEN_CLASS = 'mdc-dialog--open';\n/** Class added while the dialog is opening. */\nconst OPENING_CLASS = 'mdc-dialog--opening';\n/** Class added while the dialog is closing. */\nconst CLOSING_CLASS = 'mdc-dialog--closing';\n/** Duration of the opening animation in milliseconds. */\nconst OPEN_ANIMATION_DURATION = 150;\n/** Duration of the closing animation in milliseconds. */\nconst CLOSE_ANIMATION_DURATION = 75;\nlet MatDialogContainer = /*#__PURE__*/(() => {\n class MatDialogContainer extends CdkDialogContainer {\n constructor(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, _animationMode, focusMonitor) {\n super(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, focusMonitor);\n this._animationMode = _animationMode;\n /** Emits when an animation state changes. */\n this._animationStateChanged = new EventEmitter();\n /** Whether animations are enabled. */\n this._animationsEnabled = this._animationMode !== 'NoopAnimations';\n /** Number of actions projected in the dialog. */\n this._actionSectionCount = 0;\n /** Host element of the dialog container component. */\n this._hostElement = this._elementRef.nativeElement;\n /** Duration of the dialog open animation. */\n this._enterAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.enterAnimationDuration) ?? OPEN_ANIMATION_DURATION : 0;\n /** Duration of the dialog close animation. */\n this._exitAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.exitAnimationDuration) ?? CLOSE_ANIMATION_DURATION : 0;\n /** Current timer for dialog animations. */\n this._animationTimer = null;\n /**\n * Completes the dialog open by clearing potential animation classes, trapping\n * focus and emitting an opened event.\n */\n this._finishDialogOpen = () => {\n this._clearAnimationClasses();\n this._openAnimationDone(this._enterAnimationDuration);\n };\n /**\n * Completes the dialog close by clearing potential animation classes, restoring\n * focus and emitting a closed event.\n */\n this._finishDialogClose = () => {\n this._clearAnimationClasses();\n this._animationStateChanged.emit({\n state: 'closed',\n totalTime: this._exitAnimationDuration\n });\n };\n }\n _contentAttached() {\n // Delegate to the original dialog-container initialization (i.e. saving the\n // previous element, setting up the focus trap and moving focus to the container).\n super._contentAttached();\n // Note: Usually we would be able to use the MDC dialog foundation here to handle\n // the dialog animation for us, but there are a few reasons why we just leverage\n // their styles and not use the runtime foundation code:\n // 1. Foundation does not allow us to disable animations.\n // 2. Foundation contains unnecessary features we don't need and aren't\n // tree-shakeable. e.g. background scrim, keyboard event handlers for ESC button.\n this._startOpenAnimation();\n }\n /** Starts the dialog open animation if enabled. */\n _startOpenAnimation() {\n this._animationStateChanged.emit({\n state: 'opening',\n totalTime: this._enterAnimationDuration\n });\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._enterAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n // One would expect that the open class is added once the animation finished, but MDC\n // uses the open class in combination with the opening class to start the animation.\n this._requestAnimationFrame(() => this._hostElement.classList.add(OPENING_CLASS, OPEN_CLASS));\n this._waitForAnimationToComplete(this._enterAnimationDuration, this._finishDialogOpen);\n } else {\n this._hostElement.classList.add(OPEN_CLASS);\n // Note: We could immediately finish the dialog opening here with noop animations,\n // but we defer until next tick so that consumers can subscribe to `afterOpened`.\n // Executing this immediately would mean that `afterOpened` emits synchronously\n // on `dialog.open` before the consumer had a change to subscribe to `afterOpened`.\n Promise.resolve().then(() => this._finishDialogOpen());\n }\n }\n /**\n * Starts the exit animation of the dialog if enabled. This method is\n * called by the dialog ref.\n */\n _startExitAnimation() {\n this._animationStateChanged.emit({\n state: 'closing',\n totalTime: this._exitAnimationDuration\n });\n this._hostElement.classList.remove(OPEN_CLASS);\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._exitAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n this._requestAnimationFrame(() => this._hostElement.classList.add(CLOSING_CLASS));\n this._waitForAnimationToComplete(this._exitAnimationDuration, this._finishDialogClose);\n } else {\n // This subscription to the `OverlayRef#backdropClick` observable in the `DialogRef` is\n // set up before any user can subscribe to the backdrop click. The subscription triggers\n // the dialog close and this method synchronously. If we'd synchronously emit the `CLOSED`\n // animation state event if animations are disabled, the overlay would be disposed\n // immediately and all other subscriptions to `DialogRef#backdropClick` would be silently\n // skipped. We work around this by waiting with the dialog close until the next tick when\n // all subscriptions have been fired as expected. This is not an ideal solution, but\n // there doesn't seem to be any other good way. Alternatives that have been considered:\n // 1. Deferring `DialogRef.close`. This could be a breaking change due to a new microtask.\n // Also this issue is specific to the MDC implementation where the dialog could\n // technically be closed synchronously. In the non-MDC one, Angular animations are used\n // and closing always takes at least a tick.\n // 2. Ensuring that user subscriptions to `backdropClick`, `keydownEvents` in the dialog\n // ref are first. This would solve the issue, but has the risk of memory leaks and also\n // doesn't solve the case where consumers call `DialogRef.close` in their subscriptions.\n // Based on the fact that this is specific to the MDC-based implementation of the dialog\n // animations, the defer is applied here.\n Promise.resolve().then(() => this._finishDialogClose());\n }\n }\n /**\n * Updates the number action sections.\n * @param delta Increase/decrease in the number of sections.\n */\n _updateActionSectionCount(delta) {\n this._actionSectionCount += delta;\n this._changeDetectorRef.markForCheck();\n }\n /** Clears all dialog animation classes. */\n _clearAnimationClasses() {\n this._hostElement.classList.remove(OPENING_CLASS, CLOSING_CLASS);\n }\n _waitForAnimationToComplete(duration, callback) {\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n // Note that we want this timer to run inside the NgZone, because we want\n // the related events like `afterClosed` to be inside the zone as well.\n this._animationTimer = setTimeout(callback, duration);\n }\n /** Runs a callback in `requestAnimationFrame`, if available. */\n _requestAnimationFrame(callback) {\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(callback);\n } else {\n callback();\n }\n });\n }\n _captureInitialFocus() {\n if (!this._config.delayFocusTrap) {\n this._trapFocus();\n }\n }\n /**\n * Callback for when the open dialog animation has finished. Intended to\n * be called by sub-classes that use different animation implementations.\n */\n _openAnimationDone(totalTime) {\n if (this._config.delayFocusTrap) {\n this._trapFocus();\n }\n this._animationStateChanged.next({\n state: 'opened',\n totalTime\n });\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n }\n attachComponentPortal(portal) {\n // When a component is passed into the dialog, the host element interrupts\n // the `display:flex` from affecting the dialog title, content, and\n // actions. To fix this, we make the component host `display: contents` by\n // marking its host with the `mat-mdc-dialog-component-host` class.\n //\n // Note that this problem does not exist when a template ref is used since\n // the title, contents, and actions are then nested directly under the\n // dialog surface.\n const ref = super.attachComponentPortal(portal);\n ref.location.nativeElement.classList.add('mat-mdc-dialog-component-host');\n return ref;\n }\n static {\n this.ɵfac = function MatDialogContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(MatDialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDialogContainer,\n selectors: [[\"mat-dialog-container\"]],\n hostAttrs: [\"tabindex\", \"-1\", 1, \"mat-mdc-dialog-container\", \"mdc-dialog\"],\n hostVars: 10,\n hostBindings: function MatDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx._config.id);\n i0.ɵɵattribute(\"aria-modal\", ctx._config.ariaModal)(\"role\", ctx._config.role)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n i0.ɵɵclassProp(\"_mat-animation-noopable\", !ctx._animationsEnabled)(\"mat-mdc-dialog-container-with-actions\", ctx._actionSectionCount > 0);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 0,\n consts: [[1, \"mat-mdc-dialog-inner-container\", \"mdc-dialog__container\"], [1, \"mat-mdc-dialog-surface\", \"mdc-dialog__surface\"], [\"cdkPortalOutlet\", \"\"]],\n template: function MatDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵtemplate(2, MatDialogContainer_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n i0.ɵɵelementEnd()();\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 80vw);min-width:var(--mat-dialog-container-min-width, 0)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, 80vw)}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12));border-radius:var(--mdc-dialog-container-shape, var(--mat-app-corner-extra-large, 4px));background-color:var(--mdc-dialog-container-color, var(--mat-app-surface, white))}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 0 24px 9px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mdc-dialog-subhead-color, var(--mat-app-on-surface, rgba(0, 0, 0, 0.87)));font-family:var(--mdc-dialog-subhead-font, var(--mat-app-headline-small-font, inherit));line-height:var(--mdc-dialog-subhead-line-height, var(--mat-app-headline-small-line-height, 1.5rem));font-size:var(--mdc-dialog-subhead-size, var(--mat-app-headline-small-size, 1rem));font-weight:var(--mdc-dialog-subhead-weight, var(--mat-app-headline-small-weight, 400));letter-spacing:var(--mdc-dialog-subhead-tracking, var(--mat-app-headline-small-tracking, 0.03125em))}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mdc-dialog-supporting-text-color, var(--mat-app-on-surface-variant, rgba(0, 0, 0, 0.6)));font-family:var(--mdc-dialog-supporting-text-font, var(--mat-app-body-medium-font, inherit));line-height:var(--mdc-dialog-supporting-text-line-height, var(--mat-app-body-medium-line-height, 1.5rem));font-size:var(--mdc-dialog-supporting-text-size, var(--mat-app-body-medium-size, 1rem));font-weight:var(--mdc-dialog-supporting-text-weight, var(--mat-app-body-medium-weight, 400));letter-spacing:var(--mdc-dialog-supporting-text-tracking, var(--mat-app-body-medium-tracking, 0.03125em))}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 8px);justify-content:var(--mat-dialog-actions-alignment, start)}.cdk-high-contrast-active .mat-mdc-dialog-actions{border-top-color:CanvasText}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents}\"],\n encapsulation: 2\n });\n }\n }\n return MatDialogContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst TRANSITION_DURATION_PROPERTY = '--mat-dialog-transition-duration';\n// TODO(mmalerba): Remove this function after animation durations are required\n// to be numbers.\n/**\n * Converts a CSS time string to a number in ms. If the given time is already a\n * number, it is assumed to be in ms.\n */\nfunction parseCssTime(time) {\n if (time == null) {\n return null;\n }\n if (typeof time === 'number') {\n return time;\n }\n if (time.endsWith('ms')) {\n return coerceNumberProperty(time.substring(0, time.length - 2));\n }\n if (time.endsWith('s')) {\n return coerceNumberProperty(time.substring(0, time.length - 1)) * 1000;\n }\n if (time === '0') {\n return 0;\n }\n return null; // anything else is invalid.\n}\nvar MatDialogState = /*#__PURE__*/function (MatDialogState) {\n MatDialogState[MatDialogState[\"OPEN\"] = 0] = \"OPEN\";\n MatDialogState[MatDialogState[\"CLOSING\"] = 1] = \"CLOSING\";\n MatDialogState[MatDialogState[\"CLOSED\"] = 2] = \"CLOSED\";\n return MatDialogState;\n}(MatDialogState || {});\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nclass MatDialogRef {\n constructor(_ref, config, _containerInstance) {\n this._ref = _ref;\n this._containerInstance = _containerInstance;\n /** Subject for notifying the user that the dialog has finished opening. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the dialog has started closing. */\n this._beforeClosed = new Subject();\n /** Current state of the dialog. */\n this._state = MatDialogState.OPEN;\n this.disableClose = config.disableClose;\n this.id = _ref.id;\n // Used to target panels specifically tied to dialogs.\n _ref.addPanelClass('mat-mdc-dialog-panel');\n // Emit when opening animation completes\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'opened'), take(1)).subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n // Dispose overlay when closing animation is complete\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closed'), take(1)).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._finishDialogClose();\n });\n _ref.overlayRef.detachments().subscribe(() => {\n this._beforeClosed.next(this._result);\n this._beforeClosed.complete();\n this._finishDialogClose();\n });\n merge(this.backdropClick(), this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)))).subscribe(event => {\n if (!this.disableClose) {\n event.preventDefault();\n _closeDialogVia(this, event.type === 'keydown' ? 'keyboard' : 'mouse');\n }\n });\n }\n /**\n * Close the dialog.\n * @param dialogResult Optional result to return to the dialog opener.\n */\n close(dialogResult) {\n this._result = dialogResult;\n // Transition the backdrop in parallel to the dialog.\n this._containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closing'), take(1)).subscribe(event => {\n this._beforeClosed.next(dialogResult);\n this._beforeClosed.complete();\n this._ref.overlayRef.detachBackdrop();\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(), event.totalTime + 100);\n });\n this._state = MatDialogState.CLOSING;\n this._containerInstance._startExitAnimation();\n }\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n */\n afterOpened() {\n return this._afterOpened;\n }\n /**\n * Gets an observable that is notified when the dialog is finished closing.\n */\n afterClosed() {\n return this._ref.closed;\n }\n /**\n * Gets an observable that is notified when the dialog has started closing.\n */\n beforeClosed() {\n return this._beforeClosed;\n }\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._ref.backdropClick;\n }\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._ref.keydownEvents;\n }\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position) {\n let strategy = this._ref.config.positionStrategy;\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n this._ref.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this._ref.updateSize(width, height);\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this._ref.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this._ref.removePanelClass(classes);\n return this;\n }\n /** Gets the current state of the dialog's lifecycle. */\n getState() {\n return this._state;\n }\n /**\n * Finishes the dialog close by updating the state of the dialog\n * and disposing the overlay.\n */\n _finishDialogClose() {\n this._state = MatDialogState.CLOSED;\n this._ref.close(this._result, {\n focusOrigin: this._closeInteractionType\n });\n this.componentInstance = null;\n }\n}\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nfunction _closeDialogVia(ref, interactionType, result) {\n ref._closeInteractionType = interactionType;\n return ref.close(result);\n}\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nconst MAT_DIALOG_DATA = /*#__PURE__*/new InjectionToken('MatMdcDialogData');\n/** Injection token that can be used to specify default dialog options. */\nconst MAT_DIALOG_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-default-options');\n/** Injection token that determines the scroll handling while the dialog is open. */\nconst MAT_DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.block();\n }\n});\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n/**\n * Service to open Material Design modal dialogs.\n */\nlet MatDialog = /*#__PURE__*/(() => {\n class MatDialog {\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n constructor(_overlay, injector,\n /**\n * @deprecated `_location` parameter to be removed.\n * @breaking-change 10.0.0\n */\n location, _defaultOptions, _scrollStrategy, _parentDialog,\n /**\n * @deprecated No longer used. To be removed.\n * @breaking-change 15.0.0\n */\n _overlayContainer,\n /**\n * @deprecated No longer used. To be removed.\n * @breaking-change 14.0.0\n */\n _animationMode) {\n this._overlay = _overlay;\n this._defaultOptions = _defaultOptions;\n this._scrollStrategy = _scrollStrategy;\n this._parentDialog = _parentDialog;\n this._openDialogsAtThisLevel = [];\n this._afterAllClosedAtThisLevel = new Subject();\n this._afterOpenedAtThisLevel = new Subject();\n this.dialogConfigClass = MatDialogConfig;\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n this._dialog = injector.get(Dialog);\n this._dialogRefConstructor = MatDialogRef;\n this._dialogContainerType = MatDialogContainer;\n this._dialogDataToken = MAT_DIALOG_DATA;\n }\n open(componentOrTemplateRef, config) {\n let dialogRef;\n config = {\n ...(this._defaultOptions || new MatDialogConfig()),\n ...config\n };\n config.id = config.id || `mat-mdc-dialog-${uniqueId++}`;\n config.scrollStrategy = config.scrollStrategy || this._scrollStrategy();\n const cdkRef = this._dialog.open(componentOrTemplateRef, {\n ...config,\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on destroy, because this service cleans up its open dialogs as well.\n // We want to do the cleanup here, rather than the CDK service, because the CDK destroys\n // the dialogs immediately whereas we want it to wait for the animations to finish.\n closeOnDestroy: false,\n // Disable closing on detachments so that we can sync up the animation.\n // The Material dialog ref handles this manually.\n closeOnOverlayDetachments: false,\n container: {\n type: this._dialogContainerType,\n providers: () => [\n // Provide our config as the CDK config as well since it has the same interface as the\n // CDK one, but it contains the actual values passed in by the user for things like\n // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n {\n provide: this.dialogConfigClass,\n useValue: config\n }, {\n provide: DialogConfig,\n useValue: config\n }]\n },\n templateContext: () => ({\n dialogRef\n }),\n providers: (ref, cdkConfig, dialogContainer) => {\n dialogRef = new this._dialogRefConstructor(ref, config, dialogContainer);\n dialogRef.updatePosition(config?.position);\n return [{\n provide: this._dialogContainerType,\n useValue: dialogContainer\n }, {\n provide: this._dialogDataToken,\n useValue: cdkConfig.data\n }, {\n provide: this._dialogRefConstructor,\n useValue: dialogRef\n }];\n }\n });\n // This can't be assigned in the `providers` callback, because\n // the instance hasn't been assigned to the CDK ref yet.\n dialogRef.componentRef = cdkRef.componentRef;\n dialogRef.componentInstance = cdkRef.componentInstance;\n this.openDialogs.push(dialogRef);\n this.afterOpened.next(dialogRef);\n dialogRef.afterClosed().subscribe(() => {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n if (!this.openDialogs.length) {\n this._getAfterAllClosed().next();\n }\n }\n });\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n this._closeDialogs(this.openDialogs);\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Only close the dialogs at this level on destroy\n // since the parent service may still be active.\n this._closeDialogs(this._openDialogsAtThisLevel);\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n _closeDialogs(dialogs) {\n let i = dialogs.length;\n while (i--) {\n dialogs[i].close();\n }\n }\n static {\n this.ɵfac = function MatDialog_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i2.Location, 8), i0.ɵɵinject(MAT_DIALOG_DEFAULT_OPTIONS, 8), i0.ɵɵinject(MAT_DIALOG_SCROLL_STRATEGY), i0.ɵɵinject(MatDialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(ANIMATION_MODULE_TYPE, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatDialog,\n factory: MatDialog.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatDialog;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n/**\n * Button that will close the current dialog.\n */\nlet MatDialogClose = /*#__PURE__*/(() => {\n class MatDialogClose {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n dialogRef, _elementRef, _dialog) {\n this.dialogRef = dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n /** Default to \"button\" to prevents accidental form submits. */\n this.type = 'button';\n }\n ngOnInit() {\n if (!this.dialogRef) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the DialogRef isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the DialogRef by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n }\n ngOnChanges(changes) {\n const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\n _onButtonClick(event) {\n // Determinate the focus origin using the click event, because using the FocusMonitor will\n // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n // dialog, and therefore clicking the button won't result in a focus change. This means that\n // the FocusMonitor won't detect any origin change, and will always output `program`.\n _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n }\n static {\n this.ɵfac = function MatDialogClose_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogClose)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogClose,\n selectors: [[\"\", \"mat-dialog-close\", \"\"], [\"\", \"matDialogClose\", \"\"]],\n hostVars: 2,\n hostBindings: function MatDialogClose_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDialogClose_click_HostBindingHandler($event) {\n return ctx._onButtonClick($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"type\", ctx.type);\n }\n },\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n type: \"type\",\n dialogResult: [0, \"mat-dialog-close\", \"dialogResult\"],\n _matDialogClose: [0, \"matDialogClose\", \"_matDialogClose\"]\n },\n exportAs: [\"matDialogClose\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return MatDialogClose;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDialogLayoutSection = /*#__PURE__*/(() => {\n class MatDialogLayoutSection {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n _dialogRef, _elementRef, _dialog) {\n this._dialogRef = _dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n }\n ngOnInit() {\n if (!this._dialogRef) {\n this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n if (this._dialogRef) {\n Promise.resolve().then(() => {\n this._onAdd();\n });\n }\n }\n ngOnDestroy() {\n // Note: we null check because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n const instance = this._dialogRef?._containerInstance;\n if (instance) {\n Promise.resolve().then(() => {\n this._onRemove();\n });\n }\n }\n static {\n this.ɵfac = function MatDialogLayoutSection_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogLayoutSection)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogLayoutSection,\n standalone: true\n });\n }\n }\n return MatDialogLayoutSection;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nlet MatDialogTitle = /*#__PURE__*/(() => {\n class MatDialogTitle extends MatDialogLayoutSection {\n constructor() {\n super(...arguments);\n this.id = `mat-mdc-dialog-title-${dialogElementUid++}`;\n }\n _onAdd() {\n // Note: we null check the queue, because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id);\n }\n _onRemove() {\n this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogTitle_BaseFactory;\n return function MatDialogTitle_Factory(__ngFactoryType__) {\n return (ɵMatDialogTitle_BaseFactory || (ɵMatDialogTitle_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogTitle)))(__ngFactoryType__ || MatDialogTitle);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogTitle,\n selectors: [[\"\", \"mat-dialog-title\", \"\"], [\"\", \"matDialogTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-title\", \"mdc-dialog__title\"],\n hostVars: 1,\n hostBindings: function MatDialogTitle_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: \"id\"\n },\n exportAs: [\"matDialogTitle\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDialogTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Scrollable content container of a dialog.\n */\nlet MatDialogContent = /*#__PURE__*/(() => {\n class MatDialogContent {\n static {\n this.ɵfac = function MatDialogContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogContent,\n selectors: [[\"\", \"mat-dialog-content\", \"\"], [\"mat-dialog-content\"], [\"\", \"matDialogContent\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-content\", \"mdc-dialog__content\"],\n standalone: true,\n features: [i0.ɵɵHostDirectivesFeature([i3.CdkScrollable])]\n });\n }\n }\n return MatDialogContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nlet MatDialogActions = /*#__PURE__*/(() => {\n class MatDialogActions extends MatDialogLayoutSection {\n _onAdd() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(1);\n }\n _onRemove() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(-1);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogActions_BaseFactory;\n return function MatDialogActions_Factory(__ngFactoryType__) {\n return (ɵMatDialogActions_BaseFactory || (ɵMatDialogActions_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogActions)))(__ngFactoryType__ || MatDialogActions);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogActions,\n selectors: [[\"\", \"mat-dialog-actions\", \"\"], [\"mat-dialog-actions\"], [\"\", \"matDialogActions\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-actions\", \"mdc-dialog__actions\"],\n hostVars: 6,\n hostBindings: function MatDialogActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-dialog-actions-align-start\", ctx.align === \"start\")(\"mat-mdc-dialog-actions-align-center\", ctx.align === \"center\")(\"mat-mdc-dialog-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDialogActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element, openDialogs) {\n let parent = element.nativeElement.parentElement;\n while (parent && !parent.classList.contains('mat-mdc-dialog-container')) {\n parent = parent.parentElement;\n }\n return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;\n}\nconst DIRECTIVES = [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent];\nlet MatDialogModule = /*#__PURE__*/(() => {\n class MatDialogModule {\n static {\n this.ɵfac = function MatDialogModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDialogModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDialogModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatDialog],\n imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatDialogModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Default parameters for the animation for backwards compatibility.\n * @docs-private\n */\nconst _defaultParams = {\n params: {\n enterAnimationDuration: '150ms',\n exitAnimationDuration: '75ms'\n }\n};\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nconst matDialogAnimations = {\n /** Animation that is applied on the dialog container by default. */\n dialogContainer: /*#__PURE__*/trigger('dialogContainer', [\n /*#__PURE__*/\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues.\n state('void, exit', /*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(0.7)'\n })), /*#__PURE__*/state('enter', /*#__PURE__*/style({\n transform: 'none'\n })), /*#__PURE__*/transition('* => enter', /*#__PURE__*/group([/*#__PURE__*/animate('{{enterAnimationDuration}} cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n transform: 'none',\n opacity: 1\n })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), _defaultParams), /*#__PURE__*/transition('* => void, * => exit', /*#__PURE__*/group([/*#__PURE__*/animate('{{exitAnimationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)', /*#__PURE__*/style({\n opacity: 0\n })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), _defaultParams)])\n};\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogState, MatDialogTitle, _closeDialogVia, _defaultParams, matDialogAnimations };\n","import * as i0 from '@angular/core';\nimport { SecurityContext, Injectable, Optional, Inject, SkipSelf, ErrorHandler, InjectionToken, inject, booleanAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, Attribute, Input, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { DOCUMENT } from '@angular/common';\nimport { of, throwError, forkJoin, Subscription } from 'rxjs';\nimport { tap, map, catchError, finalize, share, take } from 'rxjs/operators';\nimport * as i1 from '@angular/common/http';\nimport { HttpClient } from '@angular/common/http';\nimport * as i2 from '@angular/platform-browser';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nconst _c0 = [\"*\"];\nlet policy;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy() {\n if (policy === undefined) {\n policy = null;\n if (typeof window !== 'undefined') {\n const ttWindow = window;\n if (ttWindow.trustedTypes !== undefined) {\n policy = ttWindow.trustedTypes.createPolicy('angular#components', {\n createHTML: s => s\n });\n }\n }\n }\n return policy;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will be interpreted as HTML by a browser, e.g. when assigning to\n * element.innerHTML.\n */\nfunction trustedHTMLFromString(html) {\n return getPolicy()?.createHTML(html) || html;\n}\n\n/**\n * Returns an exception to be thrown in the case when attempting to\n * load an icon with a name that cannot be found.\n * @docs-private\n */\nfunction getMatIconNameNotFoundError(iconName) {\n return Error(`Unable to find icon with the name \"${iconName}\"`);\n}\n/**\n * Returns an exception to be thrown when the consumer attempts to use\n * `` without including @angular/common/http.\n * @docs-private\n */\nfunction getMatIconNoHttpProviderError() {\n return Error('Could not find HttpClient for use with Angular Material icons. ' + 'Please add provideHttpClient() to your providers.');\n}\n/**\n * Returns an exception to be thrown when a URL couldn't be sanitized.\n * @param url URL that was attempted to be sanitized.\n * @docs-private\n */\nfunction getMatIconFailedToSanitizeUrlError(url) {\n return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL ` + `via Angular's DomSanitizer. Attempted URL was \"${url}\".`);\n}\n/**\n * Returns an exception to be thrown when a HTML string couldn't be sanitized.\n * @param literal HTML that was attempted to be sanitized.\n * @docs-private\n */\nfunction getMatIconFailedToSanitizeLiteralError(literal) {\n return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by ` + `Angular's DomSanitizer. Attempted literal was \"${literal}\".`);\n}\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * @docs-private\n */\nclass SvgIconConfig {\n constructor(url, svgText, options) {\n this.url = url;\n this.svgText = svgText;\n this.options = options;\n }\n}\n/**\n * Service to register and display icons used by the `` component.\n * - Registers icon URLs by namespace and name.\n * - Registers icon set URLs by namespace.\n * - Registers aliases for CSS classes, for use with icon fonts.\n * - Loads icons from URLs and extracts individual icons from icon sets.\n */\nlet MatIconRegistry = /*#__PURE__*/(() => {\n class MatIconRegistry {\n constructor(_httpClient, _sanitizer, document, _errorHandler) {\n this._httpClient = _httpClient;\n this._sanitizer = _sanitizer;\n this._errorHandler = _errorHandler;\n /**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n */\n this._svgIconConfigs = new Map();\n /**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n */\n this._iconSetConfigs = new Map();\n /** Cache for icons loaded by direct URLs. */\n this._cachedIconsByUrl = new Map();\n /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\n this._inProgressUrlFetches = new Map();\n /** Map from font identifiers to their CSS class names. Used for icon fonts. */\n this._fontCssClassesByAlias = new Map();\n /** Registered icon resolver functions. */\n this._resolvers = [];\n /**\n * The CSS classes to apply when an `` component has no icon name, url, or font\n * specified. The default 'material-icons' value assumes that the material icon font has been\n * loaded as described at https://google.github.io/material-design-icons/#icon-font-for-the-web\n */\n this._defaultFontSetClass = ['material-icons', 'mat-ligature-font'];\n this._document = document;\n }\n /**\n * Registers an icon by URL in the default namespace.\n * @param iconName Name under which the icon should be registered.\n * @param url\n */\n addSvgIcon(iconName, url, options) {\n return this.addSvgIconInNamespace('', iconName, url, options);\n }\n /**\n * Registers an icon using an HTML string in the default namespace.\n * @param iconName Name under which the icon should be registered.\n * @param literal SVG source of the icon.\n */\n addSvgIconLiteral(iconName, literal, options) {\n return this.addSvgIconLiteralInNamespace('', iconName, literal, options);\n }\n /**\n * Registers an icon by URL in the specified namespace.\n * @param namespace Namespace in which the icon should be registered.\n * @param iconName Name under which the icon should be registered.\n * @param url\n */\n addSvgIconInNamespace(namespace, iconName, url, options) {\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, null, options));\n }\n /**\n * Registers an icon resolver function with the registry. The function will be invoked with the\n * name and namespace of an icon when the registry tries to resolve the URL from which to fetch\n * the icon. The resolver is expected to return a `SafeResourceUrl` that points to the icon,\n * an object with the icon URL and icon options, or `null` if the icon is not supported. Resolvers\n * will be invoked in the order in which they have been registered.\n * @param resolver Resolver function to be registered.\n */\n addSvgIconResolver(resolver) {\n this._resolvers.push(resolver);\n return this;\n }\n /**\n * Registers an icon using an HTML string in the specified namespace.\n * @param namespace Namespace in which the icon should be registered.\n * @param iconName Name under which the icon should be registered.\n * @param literal SVG source of the icon.\n */\n addSvgIconLiteralInNamespace(namespace, iconName, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n // TODO: add an ngDevMode check\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n // Security: The literal is passed in as SafeHtml, and is thus trusted.\n const trustedLiteral = trustedHTMLFromString(cleanLiteral);\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig('', trustedLiteral, options));\n }\n /**\n * Registers an icon set by URL in the default namespace.\n * @param url\n */\n addSvgIconSet(url, options) {\n return this.addSvgIconSetInNamespace('', url, options);\n }\n /**\n * Registers an icon set using an HTML string in the default namespace.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteral(literal, options) {\n return this.addSvgIconSetLiteralInNamespace('', literal, options);\n }\n /**\n * Registers an icon set by URL in the specified namespace.\n * @param namespace Namespace in which to register the icon set.\n * @param url\n */\n addSvgIconSetInNamespace(namespace, url, options) {\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url, null, options));\n }\n /**\n * Registers an icon set using an HTML string in the specified namespace.\n * @param namespace Namespace in which to register the icon set.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteralInNamespace(namespace, literal, options) {\n const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n if (!cleanLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n // Security: The literal is passed in as SafeHtml, and is thus trusted.\n const trustedLiteral = trustedHTMLFromString(cleanLiteral);\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig('', trustedLiteral, options));\n }\n /**\n * Defines an alias for CSS class names to be used for icon fonts. Creating an matIcon\n * component with the alias as the fontSet input will cause the class name to be applied\n * to the `` element.\n *\n * If the registered font is a ligature font, then don't forget to also include the special\n * class `mat-ligature-font` to allow the usage via attribute. So register like this:\n *\n * ```ts\n * iconRegistry.registerFontClassAlias('f1', 'font1 mat-ligature-font');\n * ```\n *\n * And use like this:\n *\n * ```html\n * \n * ```\n *\n * @param alias Alias for the font.\n * @param classNames Class names override to be used instead of the alias.\n */\n registerFontClassAlias(alias, classNames = alias) {\n this._fontCssClassesByAlias.set(alias, classNames);\n return this;\n }\n /**\n * Returns the CSS class name associated with the alias by a previous call to\n * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.\n */\n classNameForFontAlias(alias) {\n return this._fontCssClassesByAlias.get(alias) || alias;\n }\n /**\n * Sets the CSS classes to be used for icon fonts when an `` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n */\n setDefaultFontSetClass(...classNames) {\n this._defaultFontSetClass = classNames;\n return this;\n }\n /**\n * Returns the CSS classes to be used for icon fonts when an `` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n */\n getDefaultFontSetClass() {\n return this._defaultFontSetClass;\n }\n /**\n * Returns an Observable that produces the icon (as an `` DOM element) from the given URL.\n * The response from the URL may be cached so this will not always cause an HTTP request, but\n * the produced element will always be a new copy of the originally fetched icon. (That is,\n * it will not contain any modifications made to elements previously returned).\n *\n * @param safeUrl URL from which to fetch the SVG icon.\n */\n getSvgIconFromUrl(safeUrl) {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n const cachedIcon = this._cachedIconsByUrl.get(url);\n if (cachedIcon) {\n return of(cloneSvg(cachedIcon));\n }\n return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl, null)).pipe(tap(svg => this._cachedIconsByUrl.set(url, svg)), map(svg => cloneSvg(svg)));\n }\n /**\n * Returns an Observable that produces the icon (as an `` DOM element) with the given name\n * and namespace. The icon must have been previously registered with addIcon or addIconSet;\n * if not, the Observable will throw an error.\n *\n * @param name Name of the icon to be retrieved.\n * @param namespace Namespace in which to look for the icon.\n */\n getNamedSvgIcon(name, namespace = '') {\n const key = iconKey(namespace, name);\n let config = this._svgIconConfigs.get(key);\n // Return (copy of) cached icon if possible.\n if (config) {\n return this._getSvgFromConfig(config);\n }\n // Otherwise try to resolve the config from one of the resolver functions.\n config = this._getIconConfigFromResolvers(namespace, name);\n if (config) {\n this._svgIconConfigs.set(key, config);\n return this._getSvgFromConfig(config);\n }\n // See if we have any icon sets registered for the namespace.\n const iconSetConfigs = this._iconSetConfigs.get(namespace);\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n return throwError(getMatIconNameNotFoundError(key));\n }\n ngOnDestroy() {\n this._resolvers = [];\n this._svgIconConfigs.clear();\n this._iconSetConfigs.clear();\n this._cachedIconsByUrl.clear();\n }\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n */\n _getSvgFromConfig(config) {\n if (config.svgText) {\n // We already have the SVG element for this icon, return a copy.\n return of(cloneSvg(this._svgElementFromConfig(config)));\n } else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return this._loadSvgIconFromConfig(config).pipe(map(svg => cloneSvg(svg)));\n }\n }\n /**\n * Attempts to find an icon with the specified name in any of the SVG icon sets.\n * First searches the available cached icons for a nested element with a matching name, and\n * if found copies the element to a new `` element. If not found, fetches all icon sets\n * that have not been cached, and searches again after all fetches are completed.\n * The returned Observable produces the SVG element if possible, and throws\n * an error if no icon with the specified name can be found.\n */\n _getSvgFromIconSetConfigs(name, iconSetConfigs) {\n // For all the icon set SVG elements we've fetched, see if any contain an icon with the\n // requested name.\n const namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n if (namedIcon) {\n // We could cache namedIcon in _svgIconConfigs, but since we have to make a copy every\n // time anyway, there's probably not much advantage compared to just always extracting\n // it from the icon set.\n return of(namedIcon);\n }\n // Not found in any cached icon sets. If there are icon sets with URLs that we haven't\n // fetched, fetch them now and look for iconName in the results.\n const iconSetFetchRequests = iconSetConfigs.filter(iconSetConfig => !iconSetConfig.svgText).map(iconSetConfig => {\n return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(catchError(err => {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n // Swallow errors fetching individual URLs so the\n // combined Observable won't necessarily fail.\n const errorMessage = `Loading icon set URL: ${url} failed: ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n return of(null);\n }));\n });\n // Fetch all the icon set URLs. When the requests complete, every IconSet should have a\n // cached SVG element (unless the request failed), and we can check again for the icon.\n return forkJoin(iconSetFetchRequests).pipe(map(() => {\n const foundIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n // TODO: add an ngDevMode check\n if (!foundIcon) {\n throw getMatIconNameNotFoundError(name);\n }\n return foundIcon;\n }));\n }\n /**\n * Searches the cached SVG elements for the given icon sets for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n */\n _extractIconWithNameFromAnySet(iconName, iconSetConfigs) {\n // Iterate backwards, so icon sets added later have precedence.\n for (let i = iconSetConfigs.length - 1; i >= 0; i--) {\n const config = iconSetConfigs[i];\n // Parsing the icon set's text into an SVG element can be expensive. We can avoid some of\n // the parsing by doing a quick check using `indexOf` to see if there's any chance for the\n // icon to be in the set. This won't be 100% accurate, but it should help us avoid at least\n // some of the parsing.\n if (config.svgText && config.svgText.toString().indexOf(iconName) > -1) {\n const svg = this._svgElementFromConfig(config);\n const foundIcon = this._extractSvgIconFromSet(svg, iconName, config.options);\n if (foundIcon) {\n return foundIcon;\n }\n }\n }\n return null;\n }\n /**\n * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n */\n _loadSvgIconFromConfig(config) {\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText), map(() => this._svgElementFromConfig(config)));\n }\n /**\n * Loads the content of the icon set URL specified in the\n * SvgIconConfig and attaches it to the config.\n */\n _loadSvgIconSetFromConfig(config) {\n if (config.svgText) {\n return of(null);\n }\n return this._fetchIcon(config).pipe(tap(svgText => config.svgText = svgText));\n }\n /**\n * Searches the cached element of the given SvgIconConfig for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n */\n _extractSvgIconFromSet(iconSet, iconName, options) {\n // Use the `id=\"iconName\"` syntax in order to escape special\n // characters in the ID (versus using the #iconName syntax).\n const iconSource = iconSet.querySelector(`[id=\"${iconName}\"]`);\n if (!iconSource) {\n return null;\n }\n // Clone the element and remove the ID to prevent multiple elements from being added\n // to the page with the same ID.\n const iconElement = iconSource.cloneNode(true);\n iconElement.removeAttribute('id');\n // If the icon node is itself an node, clone and return it directly. If not, set it as\n // the content of a new node.\n if (iconElement.nodeName.toLowerCase() === 'svg') {\n return this._setSvgAttributes(iconElement, options);\n }\n // If the node is a , it won't be rendered so we have to convert it into . Note\n // that the same could be achieved by referring to it via , however the \n // tag is problematic on Firefox, because it needs to include the current page path.\n if (iconElement.nodeName.toLowerCase() === 'symbol') {\n return this._setSvgAttributes(this._toSvgElement(iconElement), options);\n }\n // createElement('SVG') doesn't work as expected; the DOM ends up with\n // the correct nodes, but the SVG content doesn't render. Instead we\n // have to create an empty SVG node using innerHTML and append its content.\n // Elements created using DOMParser.parseFromString have the same problem.\n // http://stackoverflow.com/questions/23003278/svg-innerhtml-in-firefox-can-not-display\n const svg = this._svgElementFromString(trustedHTMLFromString(''));\n // Clone the node so we don't remove it from the parent icon set element.\n svg.appendChild(iconElement);\n return this._setSvgAttributes(svg, options);\n }\n /**\n * Creates a DOM element from the given SVG string.\n */\n _svgElementFromString(str) {\n const div = this._document.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg');\n // TODO: add an ngDevMode check\n if (!svg) {\n throw Error(' tag not found');\n }\n return svg;\n }\n /**\n * Converts an element into an SVG node by cloning all of its children.\n */\n _toSvgElement(element) {\n const svg = this._svgElementFromString(trustedHTMLFromString(''));\n const attributes = element.attributes;\n // Copy over all the attributes from the `symbol` to the new SVG, except the id.\n for (let i = 0; i < attributes.length; i++) {\n const {\n name,\n value\n } = attributes[i];\n if (name !== 'id') {\n svg.setAttribute(name, value);\n }\n }\n for (let i = 0; i < element.childNodes.length; i++) {\n if (element.childNodes[i].nodeType === this._document.ELEMENT_NODE) {\n svg.appendChild(element.childNodes[i].cloneNode(true));\n }\n }\n return svg;\n }\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n */\n _setSvgAttributes(svg, options) {\n svg.setAttribute('fit', '');\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.\n if (options && options.viewBox) {\n svg.setAttribute('viewBox', options.viewBox);\n }\n return svg;\n }\n /**\n * Returns an Observable which produces the string contents of the given icon. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n */\n _fetchIcon(iconConfig) {\n const {\n url: safeUrl,\n options\n } = iconConfig;\n const withCredentials = options?.withCredentials ?? false;\n if (!this._httpClient) {\n throw getMatIconNoHttpProviderError();\n }\n // TODO: add an ngDevMode check\n if (safeUrl == null) {\n throw Error(`Cannot fetch icon from URL \"${safeUrl}\".`);\n }\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n // TODO: add an ngDevMode check\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n // Store in-progress fetches to avoid sending a duplicate request for a URL when there is\n // already a request in progress for that URL. It's necessary to call share() on the\n // Observable returned by http.get() so that multiple subscribers don't cause multiple XHRs.\n const inProgressFetch = this._inProgressUrlFetches.get(url);\n if (inProgressFetch) {\n return inProgressFetch;\n }\n const req = this._httpClient.get(url, {\n responseType: 'text',\n withCredentials\n }).pipe(map(svg => {\n // Security: This SVG is fetched from a SafeResourceUrl, and is thus\n // trusted HTML.\n return trustedHTMLFromString(svg);\n }), finalize(() => this._inProgressUrlFetches.delete(url)), share());\n this._inProgressUrlFetches.set(url, req);\n return req;\n }\n /**\n * Registers an icon config by name in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param iconName Name under which to register the config.\n * @param config Config to be registered.\n */\n _addSvgIconConfig(namespace, iconName, config) {\n this._svgIconConfigs.set(iconKey(namespace, iconName), config);\n return this;\n }\n /**\n * Registers an icon set config in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param config Config to be registered.\n */\n _addSvgIconSetConfig(namespace, config) {\n const configNamespace = this._iconSetConfigs.get(namespace);\n if (configNamespace) {\n configNamespace.push(config);\n } else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n return this;\n }\n /** Parses a config's text into an SVG element. */\n _svgElementFromConfig(config) {\n if (!config.svgElement) {\n const svg = this._svgElementFromString(config.svgText);\n this._setSvgAttributes(svg, config.options);\n config.svgElement = svg;\n }\n return config.svgElement;\n }\n /** Tries to create an icon config through the registered resolver functions. */\n _getIconConfigFromResolvers(namespace, name) {\n for (let i = 0; i < this._resolvers.length; i++) {\n const result = this._resolvers[i](name, namespace);\n if (result) {\n return isSafeUrlWithOptions(result) ? new SvgIconConfig(result.url, null, result.options) : new SvgIconConfig(result, null);\n }\n }\n return undefined;\n }\n static {\n this.ɵfac = function MatIconRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatIconRegistry)(i0.ɵɵinject(i1.HttpClient, 8), i0.ɵɵinject(i2.DomSanitizer), i0.ɵɵinject(DOCUMENT, 8), i0.ɵɵinject(i0.ErrorHandler));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatIconRegistry,\n factory: MatIconRegistry.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatIconRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nfunction ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, errorHandler, document) {\n return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document, errorHandler);\n}\n/** @docs-private */\nconst ICON_REGISTRY_PROVIDER = {\n // If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.\n provide: MatIconRegistry,\n deps: [[/*#__PURE__*/new Optional(), /*#__PURE__*/new SkipSelf(), MatIconRegistry], [/*#__PURE__*/new Optional(), HttpClient], DomSanitizer, ErrorHandler, [/*#__PURE__*/new Optional(), DOCUMENT]],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY\n};\n/** Clones an SVGElement while preserving type information. */\nfunction cloneSvg(svg) {\n return svg.cloneNode(true);\n}\n/** Returns the cache key to use for an icon namespace and name. */\nfunction iconKey(namespace, name) {\n return namespace + ':' + name;\n}\nfunction isSafeUrlWithOptions(value) {\n return !!(value.url && value.options);\n}\n\n/** Injection token to be used to override the default options for `mat-icon`. */\nconst MAT_ICON_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_ICON_DEFAULT_OPTIONS');\n/**\n * Injection token used to provide the current location to `MatIcon`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_ICON_LOCATION = /*#__PURE__*/new InjectionToken('mat-icon-location', {\n providedIn: 'root',\n factory: MAT_ICON_LOCATION_FACTORY\n});\n/** @docs-private */\nfunction MAT_ICON_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? _location.pathname + _location.search : ''\n };\n}\n/** SVG attributes that accept a FuncIRI (e.g. `url()`). */\nconst funcIriAttributes = ['clip-path', 'color-profile', 'src', 'cursor', 'fill', 'filter', 'marker', 'marker-start', 'marker-mid', 'marker-end', 'mask', 'stroke'];\n/** Selector that can be used to find all elements that are using a `FuncIRI`. */\nconst funcIriAttributeSelector = /*#__PURE__*/ /*#__PURE__*/funcIriAttributes.map(attr => `[${attr}]`).join(', ');\n/** Regex that can be used to extract the id out of a FuncIRI. */\nconst funcIriPattern = /^url\\(['\"]?#(.*?)['\"]?\\)$/;\n/**\n * Component to display an icon. It can be used in the following ways:\n *\n * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the\n * addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of\n * MatIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format\n * \"[namespace]:[name]\", if not the value will be the name of an icon in the default namespace.\n * Examples:\n * `\n * `\n *\n * - Use a font ligature as an icon by putting the ligature text in the `fontIcon` attribute or the\n * content of the `` component. If you register a custom font class, don't forget to also\n * include the special class `mat-ligature-font`. It is recommended to use the attribute alternative\n * to prevent the ligature text to be selectable and to appear in search engine results.\n * By default, the Material icons font is used as described at\n * http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an\n * alternate font by setting the fontSet input to either the CSS class to apply to use the\n * desired font, or to an alias previously registered with MatIconRegistry.registerFontClassAlias.\n * Examples:\n * `\n * home\n * \n * sun`\n *\n * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the\n * font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a\n * CSS class which causes the glyph to be displayed via a :before selector, as in\n * https://fontawesome-v4.github.io/examples/\n * Example:\n * ``\n */\nlet MatIcon = /*#__PURE__*/(() => {\n class MatIcon {\n /**\n * Theme color of the icon. This API is supported in M2 themes only, it\n * has no effect in M3 themes.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/theming#using-component-color-variants.\n */\n get color() {\n return this._color || this._defaultColor;\n }\n set color(value) {\n this._color = value;\n }\n /** Name of the icon in the SVG icon set. */\n get svgIcon() {\n return this._svgIcon;\n }\n set svgIcon(value) {\n if (value !== this._svgIcon) {\n if (value) {\n this._updateSvgIcon(value);\n } else if (this._svgIcon) {\n this._clearSvgElement();\n }\n this._svgIcon = value;\n }\n }\n /** Font set that the icon is a part of. */\n get fontSet() {\n return this._fontSet;\n }\n set fontSet(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontSet) {\n this._fontSet = newValue;\n this._updateFontIconClasses();\n }\n }\n /** Name of an icon within a font set. */\n get fontIcon() {\n return this._fontIcon;\n }\n set fontIcon(value) {\n const newValue = this._cleanupFontValue(value);\n if (newValue !== this._fontIcon) {\n this._fontIcon = newValue;\n this._updateFontIconClasses();\n }\n }\n constructor(_elementRef, _iconRegistry, ariaHidden, _location, _errorHandler, defaults) {\n this._elementRef = _elementRef;\n this._iconRegistry = _iconRegistry;\n this._location = _location;\n this._errorHandler = _errorHandler;\n /**\n * Whether the icon should be inlined, automatically sizing the icon to match the font size of\n * the element the icon is contained in.\n */\n this.inline = false;\n this._previousFontSetClass = [];\n /** Subscription to the current in-progress SVG icon request. */\n this._currentIconFetch = Subscription.EMPTY;\n if (defaults) {\n if (defaults.color) {\n this.color = this._defaultColor = defaults.color;\n }\n if (defaults.fontSet) {\n this.fontSet = defaults.fontSet;\n }\n }\n // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is\n // the right thing to do for the majority of icon use-cases.\n if (!ariaHidden) {\n _elementRef.nativeElement.setAttribute('aria-hidden', 'true');\n }\n }\n /**\n * Splits an svgIcon binding value into its icon set and icon name components.\n * Returns a 2-element array of [(icon set), (icon name)].\n * The separator for the two fields is ':'. If there is no separator, an empty\n * string is returned for the icon set and the entire value is returned for\n * the icon name. If the argument is falsy, returns an array of two empty strings.\n * Throws an error if the name contains two or more ':' separators.\n * Examples:\n * `'social:cake' -> ['social', 'cake']\n * 'penguin' -> ['', 'penguin']\n * null -> ['', '']\n * 'a:b:c' -> (throws Error)`\n */\n _splitIconName(iconName) {\n if (!iconName) {\n return ['', ''];\n }\n const parts = iconName.split(':');\n switch (parts.length) {\n case 1:\n return ['', parts[0]];\n // Use default namespace.\n case 2:\n return parts;\n default:\n throw Error(`Invalid icon name: \"${iconName}\"`);\n // TODO: add an ngDevMode check\n }\n }\n ngOnInit() {\n // Update font classes because ngOnChanges won't be called if none of the inputs are present,\n // e.g. arrow In this case we need to add a CSS class for the default font.\n this._updateFontIconClasses();\n }\n ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n if (cachedElements && cachedElements.size) {\n const newPath = this._location.getPathname();\n // We need to check whether the URL has changed on each change detection since\n // the browser doesn't have an API that will let us react on link clicks and\n // we can't depend on the Angular router. The references need to be updated,\n // because while most browsers don't care whether the URL is correct after\n // the first render, Safari will break if the user navigates to a different\n // page and the SVG isn't re-rendered.\n if (newPath !== this._previousPath) {\n this._previousPath = newPath;\n this._prependPathToReferences(newPath);\n }\n }\n }\n ngOnDestroy() {\n this._currentIconFetch.unsubscribe();\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n _usingFontIcon() {\n return !this.svgIcon;\n }\n _setSvgElement(svg) {\n this._clearSvgElement();\n // Note: we do this fix here, rather than the icon registry, because the\n // references have to point to the URL at the time that the icon was created.\n const path = this._location.getPathname();\n this._previousPath = path;\n this._cacheChildrenWithExternalReferences(svg);\n this._prependPathToReferences(path);\n this._elementRef.nativeElement.appendChild(svg);\n }\n _clearSvgElement() {\n const layoutElement = this._elementRef.nativeElement;\n let childCount = layoutElement.childNodes.length;\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n // Remove existing non-element child nodes and SVGs, and add the new SVG element. Note that\n // we can't use innerHTML, because IE will throw if the element has a data binding.\n while (childCount--) {\n const child = layoutElement.childNodes[childCount];\n // 1 corresponds to Node.ELEMENT_NODE. We remove all non-element nodes in order to get rid\n // of any loose text nodes, as well as any SVG elements in order to remove any old icons.\n if (child.nodeType !== 1 || child.nodeName.toLowerCase() === 'svg') {\n child.remove();\n }\n }\n }\n _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n const elem = this._elementRef.nativeElement;\n const fontSetClasses = (this.fontSet ? this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/) : this._iconRegistry.getDefaultFontSetClass()).filter(className => className.length > 0);\n this._previousFontSetClass.forEach(className => elem.classList.remove(className));\n fontSetClasses.forEach(className => elem.classList.add(className));\n this._previousFontSetClass = fontSetClasses;\n if (this.fontIcon !== this._previousFontIconClass && !fontSetClasses.includes('mat-ligature-font')) {\n if (this._previousFontIconClass) {\n elem.classList.remove(this._previousFontIconClass);\n }\n if (this.fontIcon) {\n elem.classList.add(this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\n /**\n * Cleans up a value to be used as a fontIcon or fontSet.\n * Since the value ends up being assigned as a CSS class, we\n * have to trim the value and omit space-separated values.\n */\n _cleanupFontValue(value) {\n return typeof value === 'string' ? value.trim().split(' ')[0] : value;\n }\n /**\n * Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`\n * reference. This is required because WebKit browsers require references to be prefixed with\n * the current path, if the page has a `base` tag.\n */\n _prependPathToReferences(path) {\n const elements = this._elementsWithExternalReferences;\n if (elements) {\n elements.forEach((attrs, element) => {\n attrs.forEach(attr => {\n element.setAttribute(attr.name, `url('${path}#${attr.value}')`);\n });\n });\n }\n }\n /**\n * Caches the children of an SVG element that have `url()`\n * references that we need to prefix with the current path.\n */\n _cacheChildrenWithExternalReferences(element) {\n const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);\n const elements = this._elementsWithExternalReferences = this._elementsWithExternalReferences || new Map();\n for (let i = 0; i < elementsWithFuncIri.length; i++) {\n funcIriAttributes.forEach(attr => {\n const elementWithReference = elementsWithFuncIri[i];\n const value = elementWithReference.getAttribute(attr);\n const match = value ? value.match(funcIriPattern) : null;\n if (match) {\n let attributes = elements.get(elementWithReference);\n if (!attributes) {\n attributes = [];\n elements.set(elementWithReference, attributes);\n }\n attributes.push({\n name: attr,\n value: match[1]\n });\n }\n });\n }\n }\n /** Sets a new SVG icon with a particular name. */\n _updateSvgIcon(rawName) {\n this._svgNamespace = null;\n this._svgName = null;\n this._currentIconFetch.unsubscribe();\n if (rawName) {\n const [namespace, iconName] = this._splitIconName(rawName);\n if (namespace) {\n this._svgNamespace = namespace;\n }\n if (iconName) {\n this._svgName = iconName;\n }\n this._currentIconFetch = this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe(svg => this._setSvgElement(svg), err => {\n const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;\n this._errorHandler.handleError(new Error(errorMessage));\n });\n }\n }\n static {\n this.ɵfac = function MatIcon_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatIcon)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatIconRegistry), i0.ɵɵinjectAttribute('aria-hidden'), i0.ɵɵdirectiveInject(MAT_ICON_LOCATION), i0.ɵɵdirectiveInject(i0.ErrorHandler), i0.ɵɵdirectiveInject(MAT_ICON_DEFAULT_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatIcon,\n selectors: [[\"mat-icon\"]],\n hostAttrs: [\"role\", \"img\", 1, \"mat-icon\", \"notranslate\"],\n hostVars: 10,\n hostBindings: function MatIcon_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"data-mat-icon-type\", ctx._usingFontIcon() ? \"font\" : \"svg\")(\"data-mat-icon-name\", ctx._svgName || ctx.fontIcon)(\"data-mat-icon-namespace\", ctx._svgNamespace || ctx.fontSet)(\"fontIcon\", ctx._usingFontIcon() ? ctx.fontIcon : null);\n i0.ɵɵclassMap(ctx.color ? \"mat-\" + ctx.color : \"\");\n i0.ɵɵclassProp(\"mat-icon-inline\", ctx.inline)(\"mat-icon-no-color\", ctx.color !== \"primary\" && ctx.color !== \"accent\" && ctx.color !== \"warn\");\n }\n },\n inputs: {\n color: \"color\",\n inline: [2, \"inline\", \"inline\", booleanAttribute],\n svgIcon: \"svgIcon\",\n fontSet: \"fontSet\",\n fontIcon: \"fontIcon\"\n },\n exportAs: [\"matIcon\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatIcon_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\"mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatIcon;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatIconModule = /*#__PURE__*/(() => {\n class MatIconModule {\n static {\n this.ɵfac = function MatIconModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatIconModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatIconModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatIconModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ICON_REGISTRY_PROVIDER, ICON_REGISTRY_PROVIDER_FACTORY, MAT_ICON_DEFAULT_OPTIONS, MAT_ICON_LOCATION, MAT_ICON_LOCATION_FACTORY, MatIcon, MatIconModule, MatIconRegistry, getMatIconFailedToSanitizeLiteralError, getMatIconFailedToSanitizeUrlError, getMatIconNameNotFoundError, getMatIconNoHttpProviderError };\n","import { FocusableOption, FocusMonitor, FocusOrigin } from \"@angular/cdk/a11y\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n@Component({\n selector: \"button[myqq-button]\",\n exportAs: \"myqqButton\",\n // tslint:disable-next-line: no-host-metadata-property\n host: {\n \"[attr.disabled]\": \"disabled || null\",\n // Add a class for disabled button styling instead of the using attribute\n // selector or pseudo-selector. This allows users to create focusabled\n // disabled buttons without recreating the styles.\n \"[class.myqq-button-disabled]\": \"disabled\",\n \"[class.myqq-button]\": \"true\",\n },\n templateUrl: \"./button.component.html\",\n styleUrls: [\"./button.component.scss\"],\n // tslint:disable-next-line: use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n// tslint:disable-next-line: component-class-suffix\nexport class MyqqButton implements AfterViewInit, OnDestroy, FocusableOption {\n constructor(\n private _elementRef: ElementRef,\n private _focusMonitor: FocusMonitor\n ) {}\n\n @Input() color?: string;\n @Input() iconColor?: string;\n @Input() matIcon?: string;\n @Input() svgIcon?: string;\n\n private _disabled = false;\n @Input()\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Focuses the button. */\n focus(origin: FocusOrigin = \"program\", options?: FocusOptions): void {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n }\n\n private _getHostElement() {\n return this._elementRef.nativeElement;\n }\n}\n","\n {{ matIcon }}\n\n\n\n\n\n \n\n","import * as i0 from '@angular/core';\nimport { InjectionToken, booleanAttribute, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Optional, Input, Directive, QueryList, EventEmitter, inject, Injector, afterNextRender, TemplateRef, ContentChildren, ViewChild, ContentChild, Output, ChangeDetectorRef, Self, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { FocusKeyManager, isFakeTouchstartFromScreenReader, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, ESCAPE, hasModifierKey, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { Subject, merge, Subscription, of, asapScheduler } from 'rxjs';\nimport { startWith, switchMap, takeUntil, filter, take, delay } from 'rxjs/operators';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { TemplatePortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i3 from '@angular/cdk/bidi';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nconst _c0 = [\"mat-menu-item\", \"\"];\nconst _c1 = [[[\"mat-icon\"], [\"\", \"matMenuItemIcon\", \"\"]], \"*\"];\nconst _c2 = [\"mat-icon, [matMenuItemIcon]\", \"*\"];\nfunction MatMenuItem_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"svg\", 2);\n i0.ɵɵelement(1, \"polygon\", 3);\n i0.ɵɵelementEnd();\n }\n}\nconst _c3 = [\"*\"];\nfunction MatMenu_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵlistener(\"keydown\", function MatMenu_ng_template_0_Template_div_keydown_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._handleKeydown($event));\n })(\"click\", function MatMenu_ng_template_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.closed.emit(\"click\"));\n })(\"@transformMenu.start\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_start_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onAnimationStart($event));\n })(\"@transformMenu.done\", function MatMenu_ng_template_0_Template_div_animation_transformMenu_done_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onAnimationDone($event));\n });\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassMap(ctx_r1._classList);\n i0.ɵɵproperty(\"id\", ctx_r1.panelId)(\"@transformMenu\", ctx_r1._panelAnimationState);\n i0.ɵɵattribute(\"aria-label\", ctx_r1.ariaLabel || null)(\"aria-labelledby\", ctx_r1.ariaLabelledby || null)(\"aria-describedby\", ctx_r1.ariaDescribedby || null);\n }\n}\nconst MAT_MENU_PANEL = /*#__PURE__*/new InjectionToken('MAT_MENU_PANEL');\n\n/**\n * Single item inside a `mat-menu`. Provides the menu item styling and accessibility treatment.\n */\nlet MatMenuItem = /*#__PURE__*/(() => {\n class MatMenuItem {\n constructor(_elementRef, _document, _focusMonitor, _parentMenu, _changeDetectorRef) {\n this._elementRef = _elementRef;\n this._document = _document;\n this._focusMonitor = _focusMonitor;\n this._parentMenu = _parentMenu;\n this._changeDetectorRef = _changeDetectorRef;\n /** ARIA role for the menu item. */\n this.role = 'menuitem';\n /** Whether the menu item is disabled. */\n this.disabled = false;\n /** Whether ripples are disabled on the menu item. */\n this.disableRipple = false;\n /** Stream that emits when the menu item is hovered. */\n this._hovered = new Subject();\n /** Stream that emits when the menu item is focused. */\n this._focused = new Subject();\n /** Whether the menu item is highlighted. */\n this._highlighted = false;\n /** Whether the menu item acts as a trigger for a sub-menu. */\n this._triggersSubmenu = false;\n _parentMenu?.addItem?.(this);\n }\n /** Focuses the menu item. */\n focus(origin, options) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n } else {\n this._getHostElement().focus(options);\n }\n this._focused.next(this);\n }\n ngAfterViewInit() {\n if (this._focusMonitor) {\n // Start monitoring the element, so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n this._focusMonitor.monitor(this._elementRef, false);\n }\n }\n ngOnDestroy() {\n if (this._focusMonitor) {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n if (this._parentMenu && this._parentMenu.removeItem) {\n this._parentMenu.removeItem(this);\n }\n this._hovered.complete();\n this._focused.complete();\n }\n /** Used to set the `tabindex`. */\n _getTabIndex() {\n return this.disabled ? '-1' : '0';\n }\n /** Returns the host DOM element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Prevents the default element actions if it is disabled. */\n _checkDisabled(event) {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /** Emits to the hover stream. */\n _handleMouseEnter() {\n this._hovered.next(this);\n }\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel() {\n const clone = this._elementRef.nativeElement.cloneNode(true);\n const icons = clone.querySelectorAll('mat-icon, .material-icons');\n // Strip away icons, so they don't show up in the text.\n for (let i = 0; i < icons.length; i++) {\n icons[i].remove();\n }\n return clone.textContent?.trim() || '';\n }\n _setHighlighted(isHighlighted) {\n // We need to mark this for check for the case where the content is coming from a\n // `matMenuContent` whose change detection tree is at the declaration position,\n // not the insertion position. See #23175.\n // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n this._highlighted = isHighlighted;\n this._changeDetectorRef?.markForCheck();\n }\n _setTriggersSubmenu(triggersSubmenu) {\n // @breaking-change 12.0.0 Remove null check for `_changeDetectorRef`.\n this._triggersSubmenu = triggersSubmenu;\n this._changeDetectorRef?.markForCheck();\n }\n _hasFocus() {\n return this._document && this._document.activeElement === this._getHostElement();\n }\n static {\n this.ɵfac = function MatMenuItem_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatMenuItem)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMenuItem,\n selectors: [[\"\", \"mat-menu-item\", \"\"]],\n hostAttrs: [1, \"mat-mdc-menu-item\", \"mat-mdc-focus-indicator\"],\n hostVars: 8,\n hostBindings: function MatMenuItem_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatMenuItem_click_HostBindingHandler($event) {\n return ctx._checkDisabled($event);\n })(\"mouseenter\", function MatMenuItem_mouseenter_HostBindingHandler() {\n return ctx._handleMouseEnter();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"role\", ctx.role)(\"tabindex\", ctx._getTabIndex())(\"aria-disabled\", ctx.disabled)(\"disabled\", ctx.disabled || null);\n i0.ɵɵclassProp(\"mat-mdc-menu-item-highlighted\", ctx._highlighted)(\"mat-mdc-menu-item-submenu-trigger\", ctx._triggersSubmenu);\n }\n },\n inputs: {\n role: \"role\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute]\n },\n exportAs: [\"matMenuItem\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n attrs: _c0,\n ngContentSelectors: _c2,\n decls: 5,\n vars: 3,\n consts: [[1, \"mat-mdc-menu-item-text\"], [\"matRipple\", \"\", 1, \"mat-mdc-menu-ripple\", 3, \"matRippleDisabled\", \"matRippleTrigger\"], [\"viewBox\", \"0 0 5 10\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 1, \"mat-mdc-menu-submenu-icon\"], [\"points\", \"0,0 5,5 0,10\"]],\n template: function MatMenuItem_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"span\", 0);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(3, \"div\", 1);\n i0.ɵɵtemplate(4, MatMenuItem_Conditional_4_Template, 2, 0, \":svg:svg\", 2);\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵproperty(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleTrigger\", ctx._getHostElement());\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._triggersSubmenu ? 4 : -1);\n }\n },\n dependencies: [MatRipple],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatMenuItem;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionX() {\n throw Error(`xPosition value must be either 'before' or after'.\n Example: `);\n}\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nfunction throwMatMenuInvalidPositionY() {\n throw Error(`yPosition value must be either 'above' or below'.\n Example: `);\n}\n/**\n * Throws an exception for the case when a menu is assigned\n * to a trigger that is placed inside the same menu.\n * @docs-private\n */\nfunction throwMatMenuRecursiveError() {\n throw Error(`matMenuTriggerFor: menu cannot contain its own trigger. Assign a menu that is ` + `not a parent of the trigger or move the trigger outside of the menu.`);\n}\n\n/**\n * Injection token that can be used to reference instances of `MatMenuContent`. It serves\n * as alternative token to the actual `MatMenuContent` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_MENU_CONTENT = /*#__PURE__*/new InjectionToken('MatMenuContent');\n/** Menu content that will be rendered lazily once the menu is opened. */\nlet MatMenuContent = /*#__PURE__*/(() => {\n class MatMenuContent {\n constructor(_template, _componentFactoryResolver, _appRef, _injector, _viewContainerRef, _document, _changeDetectorRef) {\n this._template = _template;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._document = _document;\n this._changeDetectorRef = _changeDetectorRef;\n /** Emits when the menu content has been attached. */\n this._attached = new Subject();\n }\n /**\n * Attaches the content with a particular context.\n * @docs-private\n */\n attach(context = {}) {\n if (!this._portal) {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n }\n this.detach();\n if (!this._outlet) {\n this._outlet = new DomPortalOutlet(this._document.createElement('div'), this._componentFactoryResolver, this._appRef, this._injector);\n }\n const element = this._template.elementRef.nativeElement;\n // Because we support opening the same menu from different triggers (which in turn have their\n // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n // risk it staying attached to a pane that's no longer in the DOM.\n element.parentNode.insertBefore(this._outlet.outletElement, element);\n // When `MatMenuContent` is used in an `OnPush` component, the insertion of the menu\n // content via `createEmbeddedView` does not cause the content to be seen as \"dirty\"\n // by Angular. This causes the `@ContentChildren` for menu items within the menu to\n // not be updated by Angular. By explicitly marking for check here, we tell Angular that\n // it needs to check for new menu items and update the `@ContentChild` in `MatMenu`.\n // @breaking-change 9.0.0 Make change detector ref required\n this._changeDetectorRef?.markForCheck();\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n /**\n * Detaches the content.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\n ngOnDestroy() {\n if (this._outlet) {\n this._outlet.dispose();\n }\n }\n static {\n this.ɵfac = function MatMenuContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatMenuContent)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatMenuContent,\n selectors: [[\"ng-template\", \"matMenuContent\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_MENU_CONTENT,\n useExisting: MatMenuContent\n }])]\n });\n }\n }\n return MatMenuContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n * @docs-private\n */\nconst matMenuAnimations = {\n /**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n transformMenu: /*#__PURE__*/trigger('transformMenu', [/*#__PURE__*/state('void', /*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(0.8)'\n })), /*#__PURE__*/transition('void => enter', /*#__PURE__*/animate('120ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n opacity: 1,\n transform: 'scale(1)'\n }))), /*#__PURE__*/transition('* => void', /*#__PURE__*/animate('100ms 25ms linear', /*#__PURE__*/style({\n opacity: 0\n })))]),\n /**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\n fadeInItems: /*#__PURE__*/trigger('fadeInItems', [\n /*#__PURE__*/\n // TODO(crisbeto): this is inside the `transformMenu`\n // now. Remove next time we do breaking changes.\n state('showing', /*#__PURE__*/style({\n opacity: 1\n })), /*#__PURE__*/transition('void => *', [/*#__PURE__*/style({\n opacity: 0\n }), /*#__PURE__*/animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])\n};\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst fadeInItems = matMenuAnimations.fadeInItems;\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nconst transformMenu = matMenuAnimations.transformMenu;\nlet menuPanelUid = 0;\n/** Injection token to be used to override the default options for `mat-menu`. */\nconst MAT_MENU_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-menu-default-options', {\n providedIn: 'root',\n factory: MAT_MENU_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\nfunction MAT_MENU_DEFAULT_OPTIONS_FACTORY() {\n return {\n overlapTrigger: false,\n xPosition: 'after',\n yPosition: 'below',\n backdropClass: 'cdk-overlay-transparent-backdrop'\n };\n}\nlet MatMenu = /*#__PURE__*/(() => {\n class MatMenu {\n /** Position of the menu in the X axis. */\n get xPosition() {\n return this._xPosition;\n }\n set xPosition(value) {\n if (value !== 'before' && value !== 'after' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuInvalidPositionX();\n }\n this._xPosition = value;\n this.setPositionClasses();\n }\n /** Position of the menu in the Y axis. */\n get yPosition() {\n return this._yPosition;\n }\n set yPosition(value) {\n if (value !== 'above' && value !== 'below' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuInvalidPositionY();\n }\n this._yPosition = value;\n this.setPositionClasses();\n }\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @param classes list of class names\n */\n set panelClass(classes) {\n const previousPanelClass = this._previousPanelClass;\n const newClassList = {\n ...this._classList\n };\n if (previousPanelClass && previousPanelClass.length) {\n previousPanelClass.split(' ').forEach(className => {\n newClassList[className] = false;\n });\n }\n this._previousPanelClass = classes;\n if (classes && classes.length) {\n classes.split(' ').forEach(className => {\n newClassList[className] = true;\n });\n this._elementRef.nativeElement.className = '';\n }\n this._classList = newClassList;\n }\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @deprecated Use `panelClass` instead.\n * @breaking-change 8.0.0\n */\n get classList() {\n return this.panelClass;\n }\n set classList(classes) {\n this.panelClass = classes;\n }\n constructor(_elementRef,\n /**\n * @deprecated Unused param, will be removed.\n * @breaking-change 19.0.0\n */\n _unusedNgZone, defaultOptions,\n // @breaking-change 15.0.0 `_changeDetectorRef` to become a required parameter.\n _changeDetectorRef) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._elevationPrefix = 'mat-elevation-z';\n this._baseElevation = null;\n /** Only the direct descendant menu items. */\n this._directDescendantItems = new QueryList();\n /** Classes to be applied to the menu panel. */\n this._classList = {};\n /** Current state of the panel animation. */\n this._panelAnimationState = 'void';\n /** Emits whenever an animation on the menu completes. */\n this._animationDone = new Subject();\n /** Event emitted when the menu is closed. */\n this.closed = new EventEmitter();\n /**\n * Event emitted when the menu is closed.\n * @deprecated Switch to `closed` instead\n * @breaking-change 8.0.0\n */\n this.close = this.closed;\n this.panelId = `mat-menu-panel-${menuPanelUid++}`;\n this._injector = inject(Injector);\n this.overlayPanelClass = defaultOptions.overlayPanelClass || '';\n this._xPosition = defaultOptions.xPosition;\n this._yPosition = defaultOptions.yPosition;\n this.backdropClass = defaultOptions.backdropClass;\n this.overlapTrigger = defaultOptions.overlapTrigger;\n this.hasBackdrop = defaultOptions.hasBackdrop;\n }\n ngOnInit() {\n this.setPositionClasses();\n }\n ngAfterContentInit() {\n this._updateDirectDescendants();\n this._keyManager = new FocusKeyManager(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd();\n this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n // If a user manually (programmatically) focuses a menu item, we need to reflect that focus\n // change back to the key manager. Note that we don't need to unsubscribe here because _focused\n // is internal and we know that it gets completed on destroy.\n this._directDescendantItems.changes.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._focused)))).subscribe(focusedItem => this._keyManager.updateActiveItem(focusedItem));\n this._directDescendantItems.changes.subscribe(itemsList => {\n // Move focus to another item, if the active item is removed from the list.\n // We need to debounce the callback, because multiple items might be removed\n // in quick succession.\n const manager = this._keyManager;\n if (this._panelAnimationState === 'enter' && manager.activeItem?._hasFocus()) {\n const items = itemsList.toArray();\n const index = Math.max(0, Math.min(items.length - 1, manager.activeItemIndex || 0));\n if (items[index] && !items[index].disabled) {\n manager.setActiveItem(index);\n } else {\n manager.setNextItemActive();\n }\n }\n });\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._directDescendantItems.destroy();\n this.closed.complete();\n this._firstItemFocusRef?.destroy();\n }\n /** Stream that emits whenever the hovered menu item changes. */\n _hovered() {\n // Coerce the `changes` property because Angular types it as `Observable`\n const itemChanges = this._directDescendantItems.changes;\n return itemChanges.pipe(startWith(this._directDescendantItems), switchMap(items => merge(...items.map(item => item._hovered))));\n }\n /*\n * Registers a menu item with the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n addItem(_item) {}\n /**\n * Removes an item from the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n removeItem(_item) {}\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n case LEFT_ARROW:\n if (this.parentMenu && this.direction === 'ltr') {\n this.closed.emit('keydown');\n }\n break;\n case RIGHT_ARROW:\n if (this.parentMenu && this.direction === 'rtl') {\n this.closed.emit('keydown');\n }\n break;\n default:\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n manager.setFocusOrigin('keyboard');\n }\n manager.onKeydown(event);\n return;\n }\n // Don't allow the event to propagate if we've already handled it, or it may\n // end up reaching other overlays that were opened earlier (see #22694).\n event.stopPropagation();\n }\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin = 'program') {\n // Wait for `afterNextRender` to ensure iOS VoiceOver screen reader focuses the first item (#24735).\n this._firstItemFocusRef?.destroy();\n this._firstItemFocusRef = afterNextRender(() => {\n let menuPanel = null;\n if (this._directDescendantItems.length) {\n // Because the `mat-menuPanel` is at the DOM insertion point, not inside the overlay, we don't\n // have a nice way of getting a hold of the menuPanel panel. We can't use a `ViewChild` either\n // because the panel is inside an `ng-template`. We work around it by starting from one of\n // the items and walking up the DOM.\n menuPanel = this._directDescendantItems.first._getHostElement().closest('[role=\"menu\"]');\n }\n // If an item in the menuPanel is already focused, avoid overriding the focus.\n if (!menuPanel || !menuPanel.contains(document.activeElement)) {\n const manager = this._keyManager;\n manager.setFocusOrigin(origin).setFirstItemActive();\n // If there's no active item at this point, it means that all the items are disabled.\n // Move focus to the menuPanel panel so keyboard events like Escape still work. Also this will\n // give _some_ feedback to screen readers.\n if (!manager.activeItem && menuPanel) {\n menuPanel.focus();\n }\n }\n }, {\n injector: this._injector\n });\n }\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem() {\n this._keyManager.setActiveItem(-1);\n }\n /**\n * Sets the menu panel elevation.\n * @param depth Number of parent menus that come before the menu.\n */\n setElevation(depth) {\n // The base elevation depends on which version of the spec\n // we're running so we have to resolve it at runtime.\n if (this._baseElevation === null) {\n const styles = typeof getComputedStyle === 'function' ? getComputedStyle(this._elementRef.nativeElement) : null;\n const value = styles?.getPropertyValue('--mat-menu-base-elevation-level') || '8';\n this._baseElevation = parseInt(value);\n }\n // The elevation starts at the base and increases by one for each level.\n // Capped at 24 because that's the maximum elevation defined in the Material design spec.\n const elevation = Math.min(this._baseElevation + depth, 24);\n const newElevation = `${this._elevationPrefix}${elevation}`;\n const customElevation = Object.keys(this._classList).find(className => {\n return className.startsWith(this._elevationPrefix);\n });\n if (!customElevation || customElevation === this._previousElevation) {\n const newClassList = {\n ...this._classList\n };\n if (this._previousElevation) {\n newClassList[this._previousElevation] = false;\n }\n newClassList[newElevation] = true;\n this._previousElevation = newElevation;\n this._classList = newClassList;\n }\n }\n /**\n * Adds classes to the menu panel based on its position. Can be used by\n * consumers to add specific styling based on the position.\n * @param posX Position of the menu along the x axis.\n * @param posY Position of the menu along the y axis.\n * @docs-private\n */\n setPositionClasses(posX = this.xPosition, posY = this.yPosition) {\n this._classList = {\n ...this._classList,\n ['mat-menu-before']: posX === 'before',\n ['mat-menu-after']: posX === 'after',\n ['mat-menu-above']: posY === 'above',\n ['mat-menu-below']: posY === 'below'\n };\n // @breaking-change 15.0.0 Remove null check for `_changeDetectorRef`.\n this._changeDetectorRef?.markForCheck();\n }\n /** Starts the enter animation. */\n _startAnimation() {\n // @breaking-change 8.0.0 Combine with _resetAnimation.\n this._panelAnimationState = 'enter';\n }\n /** Resets the panel animation to its initial state. */\n _resetAnimation() {\n // @breaking-change 8.0.0 Combine with _startAnimation.\n this._panelAnimationState = 'void';\n }\n /** Callback that is invoked when the panel animation completes. */\n _onAnimationDone(event) {\n this._animationDone.next(event);\n this._isAnimating = false;\n }\n _onAnimationStart(event) {\n this._isAnimating = true;\n // Scroll the content element to the top as soon as the animation starts. This is necessary,\n // because we move focus to the first item while it's still being animated, which can throw\n // the browser off when it determines the scroll position. Alternatively we can move focus\n // when the animation is done, however moving focus asynchronously will interrupt screen\n // readers which are in the process of reading out the menu already. We take the `element`\n // from the `event` since we can't use a `ViewChild` to access the pane.\n if (event.toState === 'enter' && this._keyManager.activeItemIndex === 0) {\n event.element.scrollTop = 0;\n }\n }\n /**\n * Sets up a stream that will keep track of any newly-added menu items and will update the list\n * of direct descendants. We collect the descendants this way, because `_allItems` can include\n * items that are part of child menus, and using a custom way of registering items is unreliable\n * when it comes to maintaining the item order.\n */\n _updateDirectDescendants() {\n this._allItems.changes.pipe(startWith(this._allItems)).subscribe(items => {\n this._directDescendantItems.reset(items.filter(item => item._parentMenu === this));\n this._directDescendantItems.notifyOnChanges();\n });\n }\n static {\n this.ɵfac = function MatMenu_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatMenu)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(MAT_MENU_DEFAULT_OPTIONS), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMenu,\n selectors: [[\"mat-menu\"]],\n contentQueries: function MatMenu_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MAT_MENU_CONTENT, 5);\n i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 5);\n i0.ɵɵcontentQuery(dirIndex, MatMenuItem, 4);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.lazyContent = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allItems = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.items = _t);\n }\n },\n viewQuery: function MatMenu_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(TemplateRef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateRef = _t.first);\n }\n },\n hostVars: 3,\n hostBindings: function MatMenu_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n }\n },\n inputs: {\n backdropClass: \"backdropClass\",\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n ariaDescribedby: [0, \"aria-describedby\", \"ariaDescribedby\"],\n xPosition: \"xPosition\",\n yPosition: \"yPosition\",\n overlapTrigger: [2, \"overlapTrigger\", \"overlapTrigger\", booleanAttribute],\n hasBackdrop: [2, \"hasBackdrop\", \"hasBackdrop\", value => value == null ? null : booleanAttribute(value)],\n panelClass: [0, \"class\", \"panelClass\"],\n classList: \"classList\"\n },\n outputs: {\n closed: \"closed\",\n close: \"close\"\n },\n exportAs: [\"matMenu\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_MENU_PANEL,\n useExisting: MatMenu\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 1,\n vars: 0,\n consts: [[\"tabindex\", \"-1\", \"role\", \"menu\", 1, \"mat-mdc-menu-panel\", \"mat-mdc-elevation-specific\", 3, \"keydown\", \"click\", \"id\"], [1, \"mat-mdc-menu-content\"]],\n template: function MatMenu_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, MatMenu_ng_template_0_Template, 3, 7, \"ng-template\");\n }\n },\n styles: [\"mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;outline:0}.mat-mdc-menu-content,.mat-mdc-menu-content .mat-mdc-menu-item .mat-mdc-menu-item-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;flex:1;white-space:normal;font-family:var(--mat-menu-item-label-text-font, var(--mat-app-label-large-font));line-height:var(--mat-menu-item-label-text-line-height, var(--mat-app-label-large-line-height));font-size:var(--mat-menu-item-label-text-size, var(--mat-app-label-large-size));letter-spacing:var(--mat-menu-item-label-text-tracking, var(--mat-app-label-large-tracking));font-weight:var(--mat-menu-item-label-text-weight, var(--mat-app-label-large-weight))}.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;outline:0;border-radius:var(--mat-menu-container-shape, var(--mat-app-corner-extra-small));background-color:var(--mat-menu-container-color, var(--mat-app-surface-container));will-change:transform,opacity}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.mat-mdc-menu-panel.ng-animating:has(.mat-mdc-menu-content:empty){display:none}.cdk-high-contrast-active .mat-mdc-menu-panel{outline:solid 1px}.mat-mdc-menu-panel .mat-divider{color:var(--mat-menu-divider-color, var(--mat-app-surface-variant));margin-bottom:var(--mat-menu-divider-bottom-spacing);margin-top:var(--mat-menu-divider-top-spacing)}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mat-menu-item-leading-spacing);padding-right:var(--mat-menu-item-trailing-spacing);-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px}[dir=rtl] .mat-mdc-menu-item{padding-right:var(--mat-menu-item-leading-spacing);padding-left:var(--mat-menu-item-trailing-spacing)}.mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-left:var(--mat-menu-item-with-icon-leading-spacing);padding-right:var(--mat-menu-item-with-icon-trailing-spacing)}[dir=rtl] .mat-mdc-menu-item:has(.material-icons,mat-icon,[matButtonIcon]){padding-right:var(--mat-menu-item-with-icon-leading-spacing);padding-left:var(--mat-menu-item-with-icon-trailing-spacing)}.mat-mdc-menu-item::-moz-focus-inner{border:0}.mat-mdc-menu-item,.mat-mdc-menu-item:visited,.mat-mdc-menu-item:link{color:var(--mat-menu-item-label-text-color, var(--mat-app-on-surface))}.mat-mdc-menu-item .mat-icon-no-color,.mat-mdc-menu-item .mat-mdc-menu-submenu-icon{color:var(--mat-menu-item-icon-color, var(--mat-app-on-surface-variant))}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:\\\"\\\";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item:focus{outline:0}.mat-mdc-menu-item .mat-icon{flex-shrink:0;margin-right:var(--mat-menu-item-spacing);height:var(--mat-menu-item-icon-size);width:var(--mat-menu-item-icon-size)}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:var(--mat-menu-item-spacing)}.mat-mdc-menu-item:not([disabled]):hover{background-color:var(--mat-menu-item-hover-state-layer-color)}.mat-mdc-menu-item:not([disabled]).cdk-program-focused,.mat-mdc-menu-item:not([disabled]).cdk-keyboard-focused,.mat-mdc-menu-item:not([disabled]).mat-mdc-menu-item-highlighted{background-color:var(--mat-menu-item-focus-state-layer-color)}.cdk-high-contrast-active .mat-mdc-menu-item{margin-top:1px}.mat-mdc-menu-submenu-icon{width:var(--mat-menu-item-icon-size);height:10px;fill:currentColor;padding-left:var(--mat-menu-item-spacing)}[dir=rtl] .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-left:0}[dir=rtl] .mat-mdc-menu-submenu-icon polygon{transform:scaleX(-1);transform-origin:center}.cdk-high-contrast-active .mat-mdc-menu-submenu-icon{fill:CanvasText}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\"],\n encapsulation: 2,\n data: {\n animation: [matMenuAnimations.transformMenu, matMenuAnimations.fadeInItems]\n },\n changeDetection: 0\n });\n }\n }\n return MatMenu;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that determines the scroll handling while the menu is open. */\nconst MAT_MENU_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-menu-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n }\n});\n/** @docs-private */\nfunction MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_MENU_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_MENU_SCROLL_STRATEGY_FACTORY\n};\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true\n});\n/**\n * Default top padding of the menu panel.\n * @deprecated No longer being used. Will be removed.\n * @breaking-change 15.0.0\n */\nconst MENU_PANEL_TOP_PADDING = 8;\n/** Directive applied to an element that should trigger a `mat-menu`. */\nlet MatMenuTrigger = /*#__PURE__*/(() => {\n class MatMenuTrigger {\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n get _deprecatedMatMenuTriggerFor() {\n return this.menu;\n }\n set _deprecatedMatMenuTriggerFor(v) {\n this.menu = v;\n }\n /** References the menu instance that the trigger is associated with. */\n get menu() {\n return this._menu;\n }\n set menu(menu) {\n if (menu === this._menu) {\n return;\n }\n this._menu = menu;\n this._menuCloseSubscription.unsubscribe();\n if (menu) {\n if (menu === this._parentMaterialMenu && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatMenuRecursiveError();\n }\n this._menuCloseSubscription = menu.close.subscribe(reason => {\n this._destroyMenu(reason);\n // If a click closed the menu, we should close the entire chain of nested menus.\n if ((reason === 'click' || reason === 'tab') && this._parentMaterialMenu) {\n this._parentMaterialMenu.closed.emit(reason);\n }\n });\n }\n this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu());\n }\n constructor(_overlay, _element, _viewContainerRef, scrollStrategy, parentMenu,\n // `MatMenuTrigger` is commonly used in combination with a `MatMenuItem`.\n // tslint:disable-next-line: lightweight-tokens\n _menuItemInstance, _dir, _focusMonitor, _ngZone) {\n this._overlay = _overlay;\n this._element = _element;\n this._viewContainerRef = _viewContainerRef;\n this._menuItemInstance = _menuItemInstance;\n this._dir = _dir;\n this._focusMonitor = _focusMonitor;\n this._ngZone = _ngZone;\n this._overlayRef = null;\n this._menuOpen = false;\n this._closingActionsSubscription = Subscription.EMPTY;\n this._hoverSubscription = Subscription.EMPTY;\n this._menuCloseSubscription = Subscription.EMPTY;\n this._changeDetectorRef = inject(ChangeDetectorRef);\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n this._handleTouchStart = event => {\n if (!isFakeTouchstartFromScreenReader(event)) {\n this._openedBy = 'touch';\n }\n };\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n this._openedBy = undefined;\n /**\n * Whether focus should be restored when the menu is closed.\n * Note that disabling this option can have accessibility implications\n * and it's up to you to manage focus, if you decide to turn it off.\n */\n this.restoreFocus = true;\n /** Event emitted when the associated menu is opened. */\n this.menuOpened = new EventEmitter();\n /**\n * Event emitted when the associated menu is opened.\n * @deprecated Switch to `menuOpened` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n this.onMenuOpen = this.menuOpened;\n /** Event emitted when the associated menu is closed. */\n this.menuClosed = new EventEmitter();\n /**\n * Event emitted when the associated menu is closed.\n * @deprecated Switch to `menuClosed` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n this.onMenuClose = this.menuClosed;\n this._scrollStrategy = scrollStrategy;\n this._parentMaterialMenu = parentMenu instanceof MatMenu ? parentMenu : undefined;\n _element.nativeElement.addEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n }\n ngAfterContentInit() {\n this._handleHover();\n }\n ngOnDestroy() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n this._element.nativeElement.removeEventListener('touchstart', this._handleTouchStart, passiveEventListenerOptions);\n this._menuCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n this._hoverSubscription.unsubscribe();\n }\n /** Whether the menu is open. */\n get menuOpen() {\n return this._menuOpen;\n }\n /** The text direction of the containing app. */\n get dir() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Whether the menu triggers a sub-menu or a top-level one. */\n triggersSubmenu() {\n return !!(this._menuItemInstance && this._parentMaterialMenu && this.menu);\n }\n /** Toggles the menu between the open and closed states. */\n toggleMenu() {\n return this._menuOpen ? this.closeMenu() : this.openMenu();\n }\n /** Opens the menu. */\n openMenu() {\n const menu = this.menu;\n if (this._menuOpen || !menu) {\n return;\n }\n const overlayRef = this._createOverlay(menu);\n const overlayConfig = overlayRef.getConfig();\n const positionStrategy = overlayConfig.positionStrategy;\n this._setPosition(menu, positionStrategy);\n overlayConfig.hasBackdrop = menu.hasBackdrop == null ? !this.triggersSubmenu() : menu.hasBackdrop;\n overlayRef.attach(this._getPortal(menu));\n if (menu.lazyContent) {\n menu.lazyContent.attach(this.menuData);\n }\n this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n this._initMenu(menu);\n if (menu instanceof MatMenu) {\n menu._startAnimation();\n menu._directDescendantItems.changes.pipe(takeUntil(menu.close)).subscribe(() => {\n // Re-adjust the position without locking when the amount of items\n // changes so that the overlay is allowed to pick a new optimal position.\n positionStrategy.withLockedPosition(false).reapplyLastPosition();\n positionStrategy.withLockedPosition(true);\n });\n }\n }\n /** Closes the menu. */\n closeMenu() {\n this.menu?.close.emit();\n }\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin, options) {\n if (this._focusMonitor && origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n /**\n * Updates the position of the menu to ensure that it fits all options within the viewport.\n */\n updatePosition() {\n this._overlayRef?.updatePosition();\n }\n /** Closes the menu and does the necessary cleanup. */\n _destroyMenu(reason) {\n if (!this._overlayRef || !this.menuOpen) {\n return;\n }\n const menu = this.menu;\n this._closingActionsSubscription.unsubscribe();\n this._overlayRef.detach();\n // Always restore focus if the user is navigating using the keyboard or the menu was opened\n // programmatically. We don't restore for non-root triggers, because it can prevent focus\n // from making it back to the root trigger when closing a long chain of menus by clicking\n // on the backdrop.\n if (this.restoreFocus && (reason === 'keydown' || !this._openedBy || !this.triggersSubmenu())) {\n this.focus(this._openedBy);\n }\n this._openedBy = undefined;\n if (menu instanceof MatMenu) {\n menu._resetAnimation();\n if (menu.lazyContent) {\n // Wait for the exit animation to finish before detaching the content.\n menu._animationDone.pipe(filter(event => event.toState === 'void'), take(1),\n // Interrupt if the content got re-attached.\n takeUntil(menu.lazyContent._attached)).subscribe({\n next: () => menu.lazyContent.detach(),\n // No matter whether the content got re-attached, reset the menu.\n complete: () => this._setIsMenuOpen(false)\n });\n } else {\n this._setIsMenuOpen(false);\n }\n } else {\n this._setIsMenuOpen(false);\n menu?.lazyContent?.detach();\n }\n }\n /**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n */\n _initMenu(menu) {\n menu.parentMenu = this.triggersSubmenu() ? this._parentMaterialMenu : undefined;\n menu.direction = this.dir;\n this._setMenuElevation(menu);\n menu.focusFirstItem(this._openedBy || 'program');\n this._setIsMenuOpen(true);\n }\n /** Updates the menu elevation based on the amount of parent menus that it has. */\n _setMenuElevation(menu) {\n if (menu.setElevation) {\n let depth = 0;\n let parentMenu = menu.parentMenu;\n while (parentMenu) {\n depth++;\n parentMenu = parentMenu.parentMenu;\n }\n menu.setElevation(depth);\n }\n }\n // set state rather than toggle to support triggers sharing a menu\n _setIsMenuOpen(isOpen) {\n if (isOpen !== this._menuOpen) {\n this._menuOpen = isOpen;\n this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n if (this.triggersSubmenu()) {\n this._menuItemInstance._setHighlighted(isOpen);\n }\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * This method creates the overlay from the provided menu's template and saves its\n * OverlayRef so that it can be attached to the DOM when openMenu is called.\n */\n _createOverlay(menu) {\n if (!this._overlayRef) {\n const config = this._getOverlayConfig(menu);\n this._subscribeToPositions(menu, config.positionStrategy);\n this._overlayRef = this._overlay.create(config);\n // Consume the `keydownEvents` in order to prevent them from going to another overlay.\n // Ideally we'd also have our keyboard event logic in here, however doing so will\n // break anybody that may have implemented the `MatMenuPanel` themselves.\n this._overlayRef.keydownEvents().subscribe();\n }\n return this._overlayRef;\n }\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n * @returns OverlayConfig\n */\n _getOverlayConfig(menu) {\n return new OverlayConfig({\n positionStrategy: this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),\n backdropClass: menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n panelClass: menu.overlayPanelClass,\n scrollStrategy: this._scrollStrategy(),\n direction: this._dir\n });\n }\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the menu based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n _subscribeToPositions(menu, position) {\n if (menu.setPositionClasses) {\n position.positionChanges.subscribe(change => {\n const posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n const posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n // @breaking-change 15.0.0 Remove null check for `ngZone`.\n // `positionChanges` fires outside of the `ngZone` and `setPositionClasses` might be\n // updating something in the view so we need to bring it back in.\n if (this._ngZone) {\n this._ngZone.run(() => menu.setPositionClasses(posX, posY));\n } else {\n menu.setPositionClasses(posX, posY);\n }\n });\n }\n }\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n _setPosition(menu, positionStrategy) {\n let [originX, originFallbackX] = menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n let [overlayY, overlayFallbackY] = menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let offsetY = 0;\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX = menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n if (this._parentMaterialMenu) {\n if (this._parentInnerPadding == null) {\n const firstItem = this._parentMaterialMenu.items.first;\n this._parentInnerPadding = firstItem ? firstItem._getHostElement().offsetTop : 0;\n }\n offsetY = overlayY === 'bottom' ? this._parentInnerPadding : -this._parentInnerPadding;\n }\n } else if (!menu.overlapTrigger) {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n positionStrategy.withPositions([{\n originX,\n originY,\n overlayX,\n overlayY,\n offsetY\n }, {\n originX: originFallbackX,\n originY,\n overlayX: overlayFallbackX,\n overlayY,\n offsetY\n }, {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }, {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }]);\n }\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n _menuClosingActions() {\n const backdrop = this._overlayRef.backdropClick();\n const detachments = this._overlayRef.detachments();\n const parentClose = this._parentMaterialMenu ? this._parentMaterialMenu.closed : of();\n const hover = this._parentMaterialMenu ? this._parentMaterialMenu._hovered().pipe(filter(active => active !== this._menuItemInstance), filter(() => this._menuOpen)) : of();\n return merge(backdrop, parentClose, hover, detachments);\n }\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : undefined;\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu()) {\n event.preventDefault();\n }\n }\n }\n /** Handles key presses on the trigger. */\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n // Pressing enter on the trigger will trigger the click handler later.\n if (keyCode === ENTER || keyCode === SPACE) {\n this._openedBy = 'keyboard';\n }\n if (this.triggersSubmenu() && (keyCode === RIGHT_ARROW && this.dir === 'ltr' || keyCode === LEFT_ARROW && this.dir === 'rtl')) {\n this._openedBy = 'keyboard';\n this.openMenu();\n }\n }\n /** Handles click events on the trigger. */\n _handleClick(event) {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n /** Handles the cases where the user hovers over the trigger. */\n _handleHover() {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n if (!this.triggersSubmenu() || !this._parentMaterialMenu) {\n return;\n }\n this._hoverSubscription = this._parentMaterialMenu._hovered()\n // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n // with different data and triggers), we have to delay it by a tick to ensure that\n // it won't be closed immediately after it is opened.\n .pipe(filter(active => active === this._menuItemInstance && !active.disabled), delay(0, asapScheduler)).subscribe(() => {\n this._openedBy = 'mouse';\n // If the same menu is used between multiple triggers, it might still be animating\n // while the new trigger tries to re-open it. Wait for the animation to finish\n // before doing so. Also interrupt if the user moves to another item.\n if (this.menu instanceof MatMenu && this.menu._isAnimating) {\n // We need the `delay(0)` here in order to avoid\n // 'changed after checked' errors in some cases. See #12194.\n this.menu._animationDone.pipe(take(1), delay(0, asapScheduler), takeUntil(this._parentMaterialMenu._hovered())).subscribe(() => this.openMenu());\n } else {\n this.openMenu();\n }\n });\n }\n /** Gets the portal that should be attached to the overlay. */\n _getPortal(menu) {\n // Note that we can avoid this check by keeping the portal on the menu panel.\n // While it would be cleaner, we'd have to introduce another required method on\n // `MatMenuPanel`, making it harder to consume.\n if (!this._portal || this._portal.templateRef !== menu.templateRef) {\n this._portal = new TemplatePortal(menu.templateRef, this._viewContainerRef);\n }\n return this._portal;\n }\n static {\n this.ɵfac = function MatMenuTrigger_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatMenuTrigger)(i0.ɵɵdirectiveInject(i1$1.Overlay), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(MAT_MENU_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(MAT_MENU_PANEL, 8), i0.ɵɵdirectiveInject(MatMenuItem, 10), i0.ɵɵdirectiveInject(i3.Directionality, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatMenuTrigger,\n selectors: [[\"\", \"mat-menu-trigger-for\", \"\"], [\"\", \"matMenuTriggerFor\", \"\"]],\n hostAttrs: [1, \"mat-mdc-menu-trigger\"],\n hostVars: 3,\n hostBindings: function MatMenuTrigger_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatMenuTrigger_click_HostBindingHandler($event) {\n return ctx._handleClick($event);\n })(\"mousedown\", function MatMenuTrigger_mousedown_HostBindingHandler($event) {\n return ctx._handleMousedown($event);\n })(\"keydown\", function MatMenuTrigger_keydown_HostBindingHandler($event) {\n return ctx._handleKeydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-haspopup\", ctx.menu ? \"menu\" : null)(\"aria-expanded\", ctx.menuOpen)(\"aria-controls\", ctx.menuOpen ? ctx.menu.panelId : null);\n }\n },\n inputs: {\n _deprecatedMatMenuTriggerFor: [0, \"mat-menu-trigger-for\", \"_deprecatedMatMenuTriggerFor\"],\n menu: [0, \"matMenuTriggerFor\", \"menu\"],\n menuData: [0, \"matMenuTriggerData\", \"menuData\"],\n restoreFocus: [0, \"matMenuTriggerRestoreFocus\", \"restoreFocus\"]\n },\n outputs: {\n menuOpened: \"menuOpened\",\n onMenuOpen: \"onMenuOpen\",\n menuClosed: \"menuClosed\",\n onMenuClose: \"onMenuClose\"\n },\n exportAs: [\"matMenuTrigger\"],\n standalone: true\n });\n }\n }\n return MatMenuTrigger;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatMenuModule = /*#__PURE__*/(() => {\n class MatMenuModule {\n static {\n this.ɵfac = function MatMenuModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatMenuModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatMenuModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER],\n imports: [CommonModule, MatRippleModule, MatCommonModule, OverlayModule, CdkScrollableModule, MatCommonModule]\n });\n }\n }\n return MatMenuModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_MENU_CONTENT, MAT_MENU_DEFAULT_OPTIONS, MAT_MENU_PANEL, MAT_MENU_SCROLL_STRATEGY, MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER, MENU_PANEL_TOP_PADDING, MatMenu, MatMenuContent, MatMenuItem, MatMenuModule, MatMenuTrigger, fadeInItems, matMenuAnimations, transformMenu };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from '@angular/material/core';\nlet MatDivider = /*#__PURE__*/(() => {\n class MatDivider {\n constructor() {\n this._vertical = false;\n this._inset = false;\n }\n /** Whether the divider is vertically aligned. */\n get vertical() {\n return this._vertical;\n }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** Whether the divider is an inset divider. */\n get inset() {\n return this._inset;\n }\n set inset(value) {\n this._inset = coerceBooleanProperty(value);\n }\n static {\n this.ɵfac = function MatDivider_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDivider)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDivider,\n selectors: [[\"mat-divider\"]],\n hostAttrs: [\"role\", \"separator\", 1, \"mat-divider\"],\n hostVars: 7,\n hostBindings: function MatDivider_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n i0.ɵɵclassProp(\"mat-divider-vertical\", ctx.vertical)(\"mat-divider-horizontal\", !ctx.vertical)(\"mat-divider-inset\", ctx.inset);\n }\n },\n inputs: {\n vertical: \"vertical\",\n inset: \"inset\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function MatDivider_Template(rf, ctx) {},\n styles: [\".mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-app-outline));border-top-width:var(--mat-divider-width)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-app-outline));border-right-width:var(--mat-divider-width)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDivider;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDividerModule = /*#__PURE__*/(() => {\n class MatDividerModule {\n static {\n this.ɵfac = function MatDividerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDividerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDividerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatDividerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatDivider, MatDividerModule };\n","import { DatumEither, map, sequenceTuple } from \"@nll/datum/DatumEither\";\n\nimport { pipe } from \"fp-ts/es6/pipeable\";\nimport { Lens } from \"./Optics\";\n\n/**\n * Lens within a datumEither\n */\nexport const mapLens = (\n lens: Lens\n): Lens, DatumEither> =>\n new Lens(map(lens.get), (a) => (s) =>\n pipe(\n sequenceTuple(a, s),\n map(([o, d]) => lens.set(o)(d))\n )\n );\n","import { pipe } from \"fp-ts/es6/pipeable\";\nimport { Lens } from \"src/app/shared/utilities/state/Optics\";\nimport * as DE from \"@nll/datum/DatumEither\";\nimport { notNil } from \"@qqcw/qqsystem-util\";\nimport { GetProfileResponse } from \"src/app/core/services/myqq\";\n\nimport { MyQQState } from \"./myqq.models\";\nimport { mapLens } from \"src/app/shared/utilities/state/DatumEither\";\n\n/**\n * Lenses are functional getter/setters against a known data structure.\n * Here we use a helper function called 'fromProp' and give it an interface.\n * fromProp returns a function that takes a key from the interface and returns\n * a new lens for that key. In this example the personLens can take a MyQQState\n * object and get, set, or modify the value at the 'person' key without changing\n * the rest of the object.\n *\n * @example\n * // personLens has type Lens\n * const personLens = Lens.fromProp()('person');\n *\n * You use a lens in three ways:\n * 1. Get: personLens.get({ person: initial }) will return initial\n * 2. Set: personLens.set(pending)({ person: initial }) will return { person: pending }\n * 3. Modify:\n * personLens\n * .modify(person => isRefreshing(person) ? person : toRefresh(person))\n * ({ person: initial })\n * will return { person: pending }\n *\n * The real power in using lenses is that they are composable. If you have a lens from\n * MyQQState to person and a lens from DatumEither to personId you can\n * compose them:\n *\n * @example\n * const MyQQStateToPersonIdLens = personLens.composeOptional(personIdOptional);\n *\n * Here we used a special type of lens called an Optional. Since data might not be\n * populated, we might not have a personId yet, so an Optional lens signifies data\n * that may or may not exist. It has the same set, and modify methods but in the\n * case of get it instead has getOption, which returns an Option type.\n */\nconst myqqStateProps = Lens.fromProp();\n\n/**\n * Profile Helper Lenses\n */\ntype Membership = GetProfileResponse[\"membership\"];\n\n/**\n * Maps Valued to Valued if membership is non-null.\n * Otherwise it returns failure. This is a somewhat interesting pattern that should\n * be revisited later.\n */\nconst membershipL = new Lens<\n DE.DatumEither<{ error: string }, GetProfileResponse>,\n DE.DatumEither<{ error: string }, Membership>\n>(\n DE.chain((profile) =>\n notNil(profile.membership)\n ? DE.success(profile.membership)\n : DE.failure({ error: \"No membership exists on this account.\" })\n ),\n (membershipDE) => (profileDE) =>\n pipe(\n DE.sequenceTuple(membershipDE, profileDE),\n DE.map(([membership, profile]) => ({ ...profile, membership }))\n )\n);\nconst membershipProps = Lens.fromProp();\nconst accountL = membershipProps(\"account\");\nconst vehiclesL = membershipProps(\"vehicles\");\nconst activeCouponsL = membershipProps(\"activeCoupons\");\n\n/**\n * Selector Lenses\n */\nexport const initialLoadLens = myqqStateProps(\"initialLoad\");\n\nexport const accountInfoLens = myqqStateProps(\"accountInfo\");\nexport const profileLens = myqqStateProps(\"profile\");\nexport const membershipLens = profileLens.compose(membershipL);\nexport const accountLens = membershipLens.compose(mapLens(accountL));\nexport const newAccountLens = myqqStateProps(\"newAccount\");\nexport const updateAccountLens = myqqStateProps(\"updateAccount\");\nexport const vehiclesLens = membershipLens.compose(mapLens(vehiclesL));\nexport const couponsLens = membershipLens.compose(mapLens(activeCouponsL));\nexport const storesLens = myqqStateProps(\"stores\");\nexport const regionsLens = myqqStateProps(\"regions\");\nexport const subscriptionLens = myqqStateProps(\"subscription\");\nexport const ordersLens = myqqStateProps(\"orders\");\nexport const paymentMethodsLens = myqqStateProps(\"paymentMethods\");\nexport const priceTableLens = myqqStateProps(\"priceTable\");\nexport const postPaymentMethodLens = myqqStateProps(\"postPaymentMethod\");\nexport const payInvoiceLens = myqqStateProps(\"payInvoice\");\n\nexport const addVehicleLens = myqqStateProps(\"addVehicle\");\nexport const getVehiclesLens = myqqStateProps(\"getVehicles\");\nexport const editVehicleLens = myqqStateProps(\"editVehicle\");\nexport const removeVehicleLens = myqqStateProps(\"removeVehicle\");\n\nexport const accountLookupLens = myqqStateProps(\"accountLookupResponse\");\nexport const linkAccountLens = myqqStateProps(\"accountLinkResponse\");\n\nexport const getOrderByIdLens = myqqStateProps(\"getOrder\");\nexport const pendingOrderLens = myqqStateProps(\"pendingOrder\");\nexport const calculateOrderLens = myqqStateProps(\"calculateOrder\");\nexport const submitOrderLens = myqqStateProps(\"submitOrder\");\nexport const checkPromoCodeLens = myqqStateProps(\"checkPromo\");\nexport const modifySubscriptionPlanLens = myqqStateProps(\n \"modifySubscriptionPlan\"\n);\nexport const membershipPurchaseLens = myqqStateProps(\"membershipPurchase\");\nexport const promoDetailsLens = myqqStateProps(\"promoDetails\");\nexport const companyWidePromoDetailsLens = myqqStateProps(\n \"companyWidePromoDetails\"\n);\nexport const swapReasonsLens = myqqStateProps(\"swapReasons\");\nexport const accountQuotaLens = myqqStateProps(\"accountQuota\");\nexport const swapMembershipLens = myqqStateProps(\"swapMembership\");\nexport const editVehicleIdentifierLens = myqqStateProps(\n \"editVehicleIdentifier\"\n);\nexport const cancelMembershipLens = myqqStateProps(\"cancelMembership\");\nexport const checkEligibilityForRetentionOfferLens = myqqStateProps(\n \"checkEligibilityForRetentionOffer\"\n);\nexport const acceptRetentionOfferLens = myqqStateProps(\"acceptRetentionOffer\");\nexport const cancelReasonsLens = myqqStateProps(\"cancelReasons\");\nexport const b2bBenefitLens = myqqStateProps(\"b2bBenefit\");\nexport const linkB2CLens = myqqStateProps(\"linkB2C\");\n\n/**\n * Id Lenses\n */\nexport const getOrderIdLens = new Lens(\n (s: string) => s,\n (s) => (_) => s\n);\n\nexport const appMinVersionLens = myqqStateProps(\"appMinVersion\");\nexport const vehiclesOnOrderLens = myqqStateProps(\"vehiclesOnOrder\");\n\nexport const marketingContentLens = myqqStateProps(\"marketingContent\");\n","import * as O from \"fp-ts/es6/Option\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { actionCreatorFactory } from \"src/app/shared/utilities/state/Actions\";\nimport * as DE from \"@nll/datum/DatumEither\";\nimport * as MS from \"src/app/core/services/myqq\";\nimport {\n asyncEntityFactory,\n asyncReducerFactory,\n caseFn,\n reducerDefaultFn,\n} from \"src/app/shared/utilities/state/Reducers\";\n\nimport {\n MyQQState,\n AddFlockOrder,\n RemoveFlockOrder,\n ChangeMembershipOrder,\n AddMembershipOrder,\n} from \"./myqq.models\";\nimport * as LS from \"./myqq.lenses\";\nimport { notNil, RequireSome } from \"@qqcw/qqsystem-util\";\nimport { ResultsPage } from \"src/app/shared/utilities/types\";\n\nexport const myqqFeatureKey = \"MYQQ\";\n\nexport const myqqAction = actionCreatorFactory(myqqFeatureKey);\n\nexport const INITIAL_STATE: MyQQState = {\n initialLoad: true,\n accountInfo: DE.initial,\n profile: DE.initial,\n stores: DE.initial,\n regions: DE.initial,\n subscription: DE.initial,\n orders: DE.initial,\n paymentMethods: DE.initial,\n priceTable: DE.initial,\n\n postPaymentMethod: DE.initial,\n payInvoice: DE.initial,\n\n getVehicles: DE.initial,\n addVehicle: DE.initial,\n editVehicle: DE.initial,\n removeVehicle: DE.initial,\n\n accountLookupResponse: DE.initial,\n accountLinkResponse: DE.initial,\n\n newAccount: DE.initial,\n updateAccount: DE.initial,\n\n getOrder: {},\n\n pendingOrder: O.none,\n calculateOrder: DE.initial,\n submitOrder: DE.initial,\n checkPromo: DE.initial,\n modifySubscriptionPlan: null,\n membershipPurchase: O.none,\n\n promoDetails: DE.initial,\n companyWidePromoDetails: DE.initial,\n accountQuota: DE.initial,\n swapReasons: DE.initial,\n swapMembership: DE.initial,\n editVehicleIdentifier: DE.initial,\n cancelMembership: DE.initial,\n checkEligibilityForRetentionOffer: DE.initial,\n acceptRetentionOffer: DE.initial,\n cancelReasons: DE.initial,\n\n appMinVersion: DE.initial,\n vehiclesOnOrder: [],\n marketingContent: DE.initial,\n b2bBenefit: DE.initial,\n linkB2C: DE.initial,\n};\n/**\n * Track if this is the first route load. Used to handle redirects by InitialRouteGuard\n */\nexport const setInitialLoad = myqqAction.simple(\"SET_INITIAL_LOAD_FLAG\");\nconst setInitialLoadReducer = caseFn(\n setInitialLoad,\n LS.initialLoadLens.set(false)\n);\n/**\n * Get AccountInfo\n */\nexport const getAccountInfo = myqqAction.async(\n \"GET_ACCOUNT_INFO\"\n);\nconst getAccountInfoReducer = asyncReducerFactory(\n getAccountInfo,\n LS.accountInfoLens\n);\n\nexport const clearAccountInfo = myqqAction.simple(\n \"CLEAR_ACCOUNT_INFO\"\n);\n\nconst clearAccountInfoReducer = caseFn(\n clearAccountInfo,\n LS.accountInfoLens.set(DE.initial)\n);\n\n/**\n * Get Profile\n */\nexport const getProfile = myqqAction.async<\n { track: boolean } | null,\n MS.GetProfileResponse\n>(\"GET_PROFILE\");\nconst getProfileReducer = asyncReducerFactory(getProfile, LS.profileLens);\n\nexport const clearProfile = myqqAction.simple(\"CLEAR_PROFILE\");\nconst clearProfileReducer = caseFn(\n clearProfile,\n LS.accountLens.set(DE.initial)\n);\n\n/**\n * New Account\n */\nexport const newAccount = myqqAction.async(\n \"NEW_ACCOUNT\"\n);\nconst newAccountReducer = asyncReducerFactory(newAccount, LS.newAccountLens);\n\nexport const clearNewAccount = myqqAction.simple(\"CLEAR_NEW_ACCOUNT\");\nconst clearNewAccountReducer = caseFn(\n clearNewAccount,\n LS.newAccountLens.set(DE.initial)\n);\n\n/**\n * Update Account\n */\nexport const updateAccount = myqqAction.async(\n \"UPDATE_ACCOUNT\"\n);\nconst updateAccountReducer = asyncReducerFactory(\n updateAccount,\n LS.updateAccountLens\n);\n\nexport const clearUpdateAccount = myqqAction.simple(\"CLEAR_UPDATE_ACCOUNT\");\nconst clearUpdateAccountReducer = caseFn(\n clearUpdateAccount,\n LS.updateAccountLens.set(DE.initial)\n);\n\n/**\n * Get All Regions\n */\nexport const getAllRegions = myqqAction.async(\n \"GET_ALL_REGIONS\"\n);\nconst getAllRegionsReducer = asyncReducerFactory(getAllRegions, LS.regionsLens);\n\n/**\n * Add Vehicle\n */\nexport const getVehicles = myqqAction.async(\"GET_VEHICLES\");\nconst getVehiclesReducer = asyncReducerFactory(getVehicles, LS.getVehiclesLens);\n\nexport const addVehicle = myqqAction.async, MS.Vehicle>(\n \"ADD_VEHICLE\"\n);\nconst addVehicleReducer = asyncReducerFactory(addVehicle, LS.addVehicleLens);\n// Adds vehicle to vehicles cache on add success (instead of chaining another call)\n// const addVehicleSuccessReducer = caseFn(\n// addVehicle.success,\n// (state: MyQQState, { value: { result } }) =>\n// LS.vehiclesLens.modify(DE.map((vs) => vs.concat(result)))(state)\n// );\nexport const clearAddVehicle = myqqAction.simple(\"CLEAR_ADD_VEHICLE\");\nconst clearAddVehicleReducer = caseFn(\n clearAddVehicle,\n LS.addVehicleLens.set(DE.initial)\n);\n/**\n * Edit Vehicle\n */\nexport const editVehicle = myqqAction.async(\n \"EDIT_VEHICLE\"\n);\nconst editVehicleReducer = asyncReducerFactory(editVehicle, LS.editVehicleLens);\n\nexport const clearEditVehicle = myqqAction.simple(\"CLEAR_EDIT_VEHICLE\");\nconst clearEditVehicleReducer = caseFn(\n clearEditVehicle,\n LS.editVehicleLens.set(DE.initial)\n);\n\n/**\n * Remove Vehicle\n */\nexport const removeVehicle = myqqAction.async(\n \"REMOVE_VEHICLE\"\n);\nconst removeVehicleReduce = asyncReducerFactory(\n removeVehicle,\n LS.removeVehicleLens\n);\n\n/**\n * Clear post/put calls for vehicle\n */\nexport const clearVehiclePostPut = myqqAction.simple(\"CLEAR_VEHICLE_POST_PUT\");\nconst clearVehiclePostPutReducer = caseFn(\n clearVehiclePostPut,\n (state: MyQQState) => ({\n ...state,\n addVehicle: DE.initial,\n editVehicle: DE.initial,\n })\n);\n\n/**\n * Get Orders By Person Id\n */\nexport const getMyOrders = myqqAction.async(\n \"GET_ORDERS_BY_PERSON_ID\"\n);\nconst getMyOrdersReducer = asyncReducerFactory(getMyOrders, LS.ordersLens);\n\n/**\n * Get Order\n */\nexport const getOrderById = myqqAction.async(\"GET_ORDER\");\nconst getOrderByIdReducer = asyncEntityFactory(\n getOrderById,\n LS.getOrderByIdLens,\n LS.getOrderIdLens\n);\n\n/**\n * Get Payment Methods By Person Id\n */\nexport const getMyPaymentMethods = myqqAction.async<\n void,\n MS.CustomerPaymentMethod[]\n>(\"GET_PAYMENT_METHODS\");\nconst getMyPaymentMethodsReducer = asyncReducerFactory(\n getMyPaymentMethods,\n LS.paymentMethodsLens\n);\n\n/**\n * Account Linking Calls\n */\nexport const accountLookup = myqqAction.async<\n MS.AccountCheckRequest,\n MS.AccountCheckResponse\n>(\"ACCOUNT_LOOKUP\");\nconst accountLookupReducer = asyncReducerFactory(\n accountLookup,\n LS.accountLookupLens\n);\n\nexport const accountLookupLast4Plate = myqqAction.async<\n MS.AccountCheckLast4PlateRequest,\n MS.AccountCheckResponse\n>(\"ACCOUNT_LOOKUP_LAST4\");\nconst accountLookupLast4PlateReducer = asyncReducerFactory(\n accountLookupLast4Plate,\n LS.accountLookupLens\n);\n\nexport const clearAccountLookup = myqqAction.simple(\"CLEAR_ACCOUNT_LOOKUP\");\nconst clearAccountLookupReducer = caseFn(\n clearAccountLookup,\n LS.accountLookupLens.set(DE.initial)\n);\n\nexport const accountRelink = myqqAction.async(\n \"ACCOUNT_RELINK\"\n);\nconst accountRelinkReducer = asyncReducerFactory(\n accountRelink,\n LS.linkAccountLens\n);\n\nexport const accountLink = myqqAction.async(\n \"ACCOUNT_LINK\"\n);\nconst accountLinkReducer = asyncReducerFactory(accountLink, LS.linkAccountLens);\n\nexport const getAllStores = myqqAction.async(\n \"GET_ALL_STORES\"\n);\nconst getAllStoresReducer = asyncReducerFactory(getAllStores, LS.storesLens);\n\n/**\n * Pricing Endpoint\n */\nexport const getPriceTable = myqqAction.async(\n \"PRICE_TABLE_LOOKUP\"\n);\nconst getPriceTableReducer = asyncReducerFactory(\n getPriceTable,\n LS.priceTableLens\n);\n\nexport const getPriceTableByZip = myqqAction.async(\n \"PRICE_TABLE_LOOKUP_BY_ZIP\"\n);\nconst getPriceTableByZipReducer = asyncReducerFactory(\n getPriceTableByZip,\n LS.priceTableLens\n);\n\nexport const clearPriceTable = myqqAction.simple(\"CLEAR_PRICE_TABLE_LOOKUP\");\nconst clearPriceTableByZipReducer = caseFn(\n clearPriceTable,\n LS.priceTableLens.set(DE.initial)\n);\n\n/**\n * Order Calculate\n */\nexport const calculateOrder = myqqAction.async<\n MS.PostCalculateOrderRequest,\n MS.PostCalculateOrderResponse\n>(\"CALCULATE_ORDER\");\nconst calculateOrderReducer = asyncReducerFactory(\n calculateOrder,\n LS.calculateOrderLens\n);\n\n/**\n * Order Submt\n */\nexport const submitOrder = myqqAction.async<\n MS.PostSubmitOrderRequest,\n MS.PostSubmitOrderResponse\n>(\"SUBMIT_ORDER\");\nconst submitOrderReducer = asyncReducerFactory(submitOrder, LS.submitOrderLens);\n\n/**\n * Clear submit order\n */\nexport const clearSubmitOrder = myqqAction.simple(\"CLEAR_SUBMIT_ORDER\");\nconst clearSubmitOrderReducer = caseFn(\n clearSubmitOrder,\n LS.submitOrderLens.set(DE.initial)\n);\n\n/**\n * Clear submit order and generate newOrderId for new order\n */\nexport const clearSubmitOrderAndGenerateNewOrderId = myqqAction.simple(\n \"CLEAR_SUBMIT_ORDER_GENERATE_NEW_ID\"\n);\nconst clearSubmitOrderAndGenerateNewOrderIdReducer = caseFn(\n clearSubmitOrderAndGenerateNewOrderId,\n (s: MyQQState) => ({\n ...s,\n pendingOrder: O.isSome(s.pendingOrder)\n ? O.some({ ...s.pendingOrder.value, orderId: uuid() })\n : O.none,\n submitOrder: DE.initial,\n })\n);\n\n/**\n * Clear Order Slices\n */\nexport const clearOrderProgress = myqqAction.simple(\"CLEAR_ORDER\");\nconst clearOrderProgressReducer = caseFn(\n clearOrderProgress,\n (s: MyQQState) => ({\n ...s,\n pendingOrder: O.none,\n calculateOrder: DE.initial,\n submitOrder: DE.initial,\n })\n);\n\n/**\n * Get Subscriptions By Person Id\n */\nexport const getMySubscriptions = myqqAction.async<\n void,\n MS.GetSubscriptionResponse\n>(\"GET_SUBSCRIPTION\");\nconst getMySubscriptionReducer = asyncReducerFactory(\n getMySubscriptions,\n LS.subscriptionLens\n);\n// This is used to clear subscription for return to membership after purchase\nexport const clearMySubscription = myqqAction.simple(\"CLEAR_SUBSCRIPTION\");\nconst clearMySubscriptionReducer = caseFn(\n clearMySubscription,\n LS.subscriptionLens.set(DE.initial)\n);\n\n/**\n * Add Payment Method\n */\nexport const postPaymentMethod = myqqAction.async<\n string,\n [MS.CustomerPaymentMethod]\n>(\"POST_PAYMENT_METHOD\");\nconst postPaymentMethodReducer = asyncReducerFactory(\n postPaymentMethod,\n LS.postPaymentMethodLens\n);\n\nexport const clearPostPaymentMethod = myqqAction.simple(\n \"CLEAR_POST_PAYMENT_METHOD\"\n);\nconst clearPostPaymentMethodReducer = caseFn(\n clearPostPaymentMethod,\n LS.postPaymentMethodLens.set(DE.initial)\n);\n\n/**\n * Pending Order actions\n *\n * Helper actions for set/clear pending Order, Promo Code, and Payment Method\n */\nexport const setPendingOrder = myqqAction.simple<\n RequireSome\n>(\"SET_PENDING_ORDER\");\nconst setPendingOrderReducer = caseFn(\n setPendingOrder,\n (s: MyQQState, { value }) =>\n // Populate pending order with a new orderId (if necessary) and a customerId if we have one\n LS.pendingOrderLens.set(\n O.some({\n ...value,\n submissionAt: new Date().toISOString(), // TODO REMOVE\n orderId: notNil(value.orderId) ? value.orderId : uuid(),\n customerId: DE.isSuccess(s.profile)\n ? s.profile.value.right.membership?.account.personId\n : DE.isSuccess(s.accountInfo)\n ? s.accountInfo.value.right.profile.info.qsysAccount\n : null,\n })\n )(s)\n);\n\nexport const clearPendingOrder = myqqAction.simple(\"CLEAR_PENDING_ORDER\");\nconst clearPendingOrderReducer = caseFn(\n clearPendingOrder,\n LS.pendingOrderLens.set(O.none)\n);\n\n/**\n * Pending Order actions\n *\n * Helper actions for set/clear pending Order, Promo Code, and Payment Method\n */\nexport const setModifySubscriptionPlan = myqqAction.simple(\n \"SET_MODIFY_SUBSCRIPTION_TYPE\"\n);\nconst setModifySubscriptionPlanReducer = caseFn(\n setModifySubscriptionPlan,\n (currentState: MyQQState, { value }) =>\n LS.modifySubscriptionPlanLens.set(value)(currentState)\n);\n\nexport const clearModifySubscriptionPlan = myqqAction.simple(\n \"CLEAR_MODIFY_SUBSCRIPTION_TYPE\"\n);\nconst clearModifySubscriptionPlanReducer = caseFn(\n clearModifySubscriptionPlan,\n LS.modifySubscriptionPlanLens.set(null)\n);\n\nexport const setMembershipPurchase = myqqAction.simple<\n O.Option\n>(\"SET_MEMBERSHIP_PURCHASE\");\nconst setMembershipPurchaseReducer = caseFn(\n setMembershipPurchase,\n (currentState: MyQQState, { value }) =>\n LS.membershipPurchaseLens.set(value)(currentState)\n);\n\nexport const clearMembershipPurchase = myqqAction.simple(\n \"CLEAR_MEMBERSHIP_PURCHASE\"\n);\nconst clearMembershipPurchaseReducer = caseFn(\n clearMembershipPurchase,\n LS.membershipPurchaseLens.set(O.none)\n);\n\nexport const setPaymentMethod = myqqAction.simple(\n \"SET_PAYMENT_METHOD\"\n);\nconst setPaymentMethodReducer = caseFn(\n setPaymentMethod,\n (s: MyQQState, { value }) =>\n LS.pendingOrderLens.modify(\n O.map((order) => ({ ...order, payments: [value] }))\n )(s)\n);\n\nexport const clearPaymentMethod = myqqAction.simple(\"CLEAR_PAYMENT_METHOD\");\nconst clearPaymentMethodReducer = caseFn(\n clearPaymentMethod,\n LS.pendingOrderLens.modify(O.map((order) => ({ ...order, payments: [] })))\n);\n\nexport const setPendingOrderPromoCode = myqqAction.simple<\n Partial\n>(\"SET_PENDING_ORDER_PROMO_CODE\");\nconst setPendingPromoCodeReducer = caseFn(\n setPendingOrderPromoCode,\n (s: MyQQState, { value }) =>\n LS.pendingOrderLens.modify(\n O.map((order) => ({ ...order, markDowns: [value] }))\n )(s)\n);\n\nexport const clearPromoCode = myqqAction.simple(\"CLEAR_PROMO_CODE\");\nconst clearPromoCodeReducer = caseFn(\n clearPromoCode,\n LS.pendingOrderLens.modify(\n O.map((order) => ({ ...order, waiveUpgradeFee: false, markDowns: [] }))\n )\n);\n\nexport const setOrderReason = myqqAction.simple(\"SET_ORDER_REASON\");\nconst setOrderReasonReducer = caseFn(\n setOrderReason,\n (s: MyQQState, { value }) =>\n LS.pendingOrderLens.modify(\n O.map((order) => ({ ...order, createReasonCode: value }))\n )(s)\n);\n\n/**\n * Order Builder Actions\n * These actions are chained to setPendingOrder actions via chain effects\n * in myqq.chains.ts\n */\nexport const addFlockOrder = myqqAction.simple(\"ADD_FLOCK\");\nexport const removeFlockOrder = myqqAction.simple(\n \"REMOVE_FLOCK\"\n);\nexport const changeMembershipOrder = myqqAction.simple(\n \"CHANGE_MEMBERSHIP\"\n);\nexport const addMembershipOrder = myqqAction.simple(\n \"ADD_MEMBERSHIP\"\n);\n\n/**\n * Promo code check\n */\nexport const checkPromoCode = myqqAction.async(\n \"CHECK_PROMO_CODE\"\n);\nconst checkPromoCodeReducer = asyncReducerFactory(\n checkPromoCode,\n LS.checkPromoCodeLens\n);\n\n/**\n * Pay Invoice\n */\nexport interface PayFailedInvoice {\n paymentMethodId: string;\n invoiceId: string;\n}\n\nexport const payFailedInvoice = myqqAction.async<\n PayFailedInvoice,\n MS.PayInvoiceResponse\n>(\"PAY_FAILED_INVOICE\");\nconst payInvoiceReducer = asyncReducerFactory(\n payFailedInvoice,\n LS.payInvoiceLens\n);\n\nexport const clearPayFailedInvoice = myqqAction.simple(\n \"CLEAR_PAY_FAILED_INVOICE\"\n);\nconst clearPayFailedInvoiceReducer = caseFn(\n clearPayFailedInvoice,\n LS.payInvoiceLens.set(DE.initial)\n);\n\nexport const getPromoDetails = myqqAction.async(\n \"PROMO_DETAILS\"\n);\nconst getPromoDetailsReducer = asyncReducerFactory(\n getPromoDetails,\n LS.promoDetailsLens\n);\n\nexport const getCompanyWidePromoDetails = myqqAction.async<\n null,\n MS.PromoDetails\n>(\"COMPANY_WIDE_PROMO_CODE\");\nconst getCompanyWidePromoDetailsReducer = asyncReducerFactory(\n getCompanyWidePromoDetails,\n LS.companyWidePromoDetailsLens\n);\n\nexport const emptyPromoDetails = myqqAction.simple(\"CLEAR_PROMO_DETAILS\");\nconst emptyPromoDetailsReducer = caseFn(\n emptyPromoDetails,\n LS.promoDetailsLens.set(DE.success({} as MS.PromoDetails))\n);\n\nexport const clearFailedPromoCheck = myqqAction.simple(\n \"CLEAR_FAILED_PROMO_CHECK\"\n);\nconst clearFailedPromoCheckReducer = caseFn(\n clearFailedPromoCheck,\n LS.checkPromoCodeLens.set(DE.initial)\n);\n\n/**\n * Swap membership or edit license plate or VIN\n */\nexport const getAccountQuota = myqqAction.async(\n \"GET_ACCOUNT_QUOTA\"\n);\nconst getAccountQuotaReducer = asyncReducerFactory(\n getAccountQuota,\n LS.accountQuotaLens\n);\n\nexport const clearAccountQuota = myqqAction.simple(\"CLEAR_ACCOUNT_QUOTA\");\nconst clearAccountQuotaReducer = caseFn(\n clearAccountQuota,\n LS.accountQuotaLens.set(DE.initial)\n);\n\nexport const getSwapReasons = myqqAction.async(\n \"GET_SWAP_REASONS\"\n);\nconst getSwapReasonsReducer = asyncReducerFactory(\n getSwapReasons,\n LS.swapReasonsLens\n);\n\nexport const swapMembership = myqqAction.async<\n MS.VehicleSwapRequest,\n MS.VehicleSwapResponse\n>(\"SWAP_MEMBERSHIP\");\nconst swapMembershipReducer = asyncReducerFactory(\n swapMembership,\n LS.swapMembershipLens\n);\n\nexport const clearSwapMembership = myqqAction.simple(\"CLEAR_SWAP_MEMBERSHIP\");\nconst clearSwapMembershipReducer = caseFn(\n clearSwapMembership,\n LS.swapMembershipLens.set(DE.initial)\n);\n\nexport const editVehicleIdentifier = myqqAction.async(\n \"EDIT_VEHICLE_IDENTIFIER\"\n);\nconst editVehicleIdentifierReducer = asyncReducerFactory(\n editVehicleIdentifier,\n LS.editVehicleIdentifierLens\n);\n\nexport const clearEditVehicleIdentifier = myqqAction.simple(\n \"CLEAR_EDIT_VEHICLE_IDENTIFIER\"\n);\nconst clearEditVehicleIdentifierReducer = caseFn(\n clearEditVehicleIdentifier,\n LS.editVehicleIdentifierLens.set(DE.initial)\n);\n\n/**\n * Cancel Membership\n */\nexport const cancelMembership = myqqAction.async<\n MS.CancelMembershipRequest,\n MS.CancelMembershipResponse\n>(\"CANCEL_MEMBERSHIP\");\nconst cancelMembershipReducer = asyncReducerFactory(\n cancelMembership,\n LS.cancelMembershipLens\n);\n\nexport const clearCancelMembership = myqqAction.simple(\n \"CLEAR_CANCEL_MEMBERSHIP\"\n);\nconst clearCancelMembershipReducer = caseFn(\n clearCancelMembership,\n LS.cancelMembershipLens.set(DE.initial)\n);\n\nexport const checkEligibilityForRetentionOffer = myqqAction.async<\n number,\n MS.CheckEligibilityForRetentionOfferResponse\n>(\"CHECK_ELIGIBILITY_FOR_RETENTION_OFFER\");\n\nconst checkEligibilityForRetentionOfferReducer = asyncReducerFactory(\n checkEligibilityForRetentionOffer,\n LS.checkEligibilityForRetentionOfferLens\n);\n\nexport const clearCheckEligibilityForRetentionOffer = myqqAction.simple(\n \"CLEAR_CHECK_ELIGIBILITY_FOR_RETENTION_OFFER\"\n);\nconst clearCheckEligibilityForRetentionOfferReducer = caseFn(\n clearCheckEligibilityForRetentionOffer,\n LS.checkEligibilityForRetentionOfferLens.set(DE.initial)\n);\n\nexport const acceptRetentionOffer = myqqAction.async<\n null,\n MS.AcceptRetentionOfferResponse\n>(\"ACCEPT_RETENTION_OFFER\");\nconst acceptRetentionOfferReducer = asyncReducerFactory(\n acceptRetentionOffer,\n LS.acceptRetentionOfferLens\n);\n\nexport const getCancelReasons = myqqAction.async(\n \"GET_CANCEL_REASONS\"\n);\nconst getCancelReasonsReducer = asyncReducerFactory(\n getCancelReasons,\n LS.cancelReasonsLens\n);\n\nexport const getAppMinVersion = myqqAction.async(\n \"GET_APP_MIN_VERSION\"\n);\nconst getAppMinVersionReducer = asyncReducerFactory(\n getAppMinVersion,\n LS.appMinVersionLens\n);\n\nexport const setVehiclesOnOrder = myqqAction.simple(\n \"SET_VEHICLES_ON_ORDER\"\n);\nconst setVehiclesOnOrderReducer = caseFn(\n setVehiclesOnOrder,\n (s: MyQQState, { value }) => LS.vehiclesOnOrderLens.set(value)(s)\n);\n\nexport const getMarketingContent = myqqAction.async<\n null,\n MS.MarketingContent[]\n>(\"GET_MARKETING_CONTENT\");\nconst getMarketingContentReducer = asyncReducerFactory(\n getMarketingContent,\n LS.marketingContentLens\n);\n\n/**\n * B2B\n */\n\nexport const getB2bBenefit = myqqAction.async(\n \"GET_B2B_BENEFIT\"\n);\nconst getB2bReducer = asyncReducerFactory(getB2bBenefit, LS.b2bBenefitLens);\n\nexport const linkB2C = myqqAction.async<\n MS.LinkB2CAccountRequest,\n MS.LinkB2CAccountResponse\n>(\"LINK_B2C\");\nconst linkB2CReducer = asyncReducerFactory(linkB2C, LS.linkB2CLens);\n\n/**\n * MyQQ Reducer\n *\n * This composes all of the individual reducers with each other.\n */\n\nexport const myqqReducer = reducerDefaultFn(\n INITIAL_STATE,\n setInitialLoadReducer,\n\n getAccountInfoReducer,\n clearAccountInfoReducer,\n getProfileReducer,\n clearProfileReducer,\n newAccountReducer,\n clearNewAccountReducer,\n updateAccountReducer,\n clearUpdateAccountReducer,\n clearAccountLookupReducer,\n\n getAllRegionsReducer,\n\n getMyOrdersReducer,\n getMyPaymentMethodsReducer,\n getMySubscriptionReducer,\n clearMySubscriptionReducer,\n getPriceTableReducer,\n getPriceTableByZipReducer,\n clearPriceTableByZipReducer,\n\n postPaymentMethodReducer,\n clearPostPaymentMethodReducer,\n payInvoiceReducer,\n clearPayFailedInvoiceReducer,\n\n getVehiclesReducer,\n addVehicleReducer,\n editVehicleReducer,\n clearAddVehicleReducer,\n clearEditVehicleReducer,\n removeVehicleReduce,\n\n clearVehiclePostPutReducer,\n accountLookupReducer,\n accountLookupLast4PlateReducer,\n accountLinkReducer,\n accountRelinkReducer,\n getAllStoresReducer,\n\n getOrderByIdReducer,\n calculateOrderReducer,\n submitOrderReducer,\n clearSubmitOrderReducer,\n clearSubmitOrderAndGenerateNewOrderIdReducer,\n clearOrderProgressReducer,\n\n setPendingOrderReducer,\n clearPendingOrderReducer,\n setPaymentMethodReducer,\n clearPaymentMethodReducer,\n setPendingPromoCodeReducer,\n clearPromoCodeReducer,\n checkPromoCodeReducer,\n setOrderReasonReducer,\n setModifySubscriptionPlanReducer,\n clearModifySubscriptionPlanReducer,\n setMembershipPurchaseReducer,\n clearMembershipPurchaseReducer,\n\n getPromoDetailsReducer,\n getCompanyWidePromoDetailsReducer,\n emptyPromoDetailsReducer,\n\n clearFailedPromoCheckReducer,\n\n getAccountQuotaReducer,\n clearAccountQuotaReducer,\n getSwapReasonsReducer,\n swapMembershipReducer,\n clearSwapMembershipReducer,\n\n editVehicleIdentifierReducer,\n clearEditVehicleIdentifierReducer,\n\n cancelMembershipReducer,\n clearCancelMembershipReducer,\n checkEligibilityForRetentionOfferReducer,\n clearCheckEligibilityForRetentionOfferReducer,\n acceptRetentionOfferReducer,\n getCancelReasonsReducer,\n\n getAppMinVersionReducer,\n setVehiclesOnOrderReducer,\n getMarketingContentReducer,\n getB2bReducer,\n linkB2CReducer\n);\n","import { Observable, throwError } from \"rxjs\";\nimport { catchError } from \"rxjs/operators\";\n\nexport const mapError = (fn: (error: unknown) => unknown) => (\n obs: Observable\n): Observable =>\n obs.pipe(\n catchError((error) => {\n return throwError(fn(error));\n })\n );\n","import { Injectable } from \"@angular/core\";\nimport { Actions, createEffect } from \"@ngrx/effects\";\nimport { catchError, filter, switchMap, map, tap } from \"rxjs/operators\";\nimport { of } from \"rxjs\";\n\nimport { asyncExhaustMap } from \"src/app/shared/utilities/state/Operators\";\nimport { MyQQService } from \"src/app/core/services/myqq/myqq.service\";\n\nimport * as crm from \"./myqq.reducers\";\nimport { mapError } from \"src/app/shared/utilities/rxjs\";\n/**\n * This service encapsulates \"side effects\". This is to say that events that\n * are not synchronous, rely on data outside of the app, or can fail are linked\n * up here.\n *\n * The asyncExhaustMap rxjs operator effectively bookends asynchronous events.\n * For example, the crm.updatePerson async action package has pending, success, and\n * failure actions. asyncExhaustMap will listen for updatePerson.pending, when that\n * action happens it will pull out the value inside the action (in this case a person\n * object) and pass it to the http service that updates a person on the backend. If\n * the http call is successful it will take the result and wrap it in\n * updatePerson.success and pass it back into the application. If an error is thrown\n * in the observable error channel (ie. 404, 503, or anything else) it will\n * wrap the error in updatePerson.failure and pass it back into the applcation.\n *\n * In this way the beginning and end of each request becomes a single action\n * in the application.\n */\n@Injectable()\nexport class MyQQEffects {\n /**\n * Person Effects\n */\n getAccountInfo$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getAccountInfo, () => this.myqqSvc.accountInfo())\n )\n );\n\n getProfile$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getProfile, () => this.myqqSvc.getMyProfile())\n )\n );\n\n newAccount$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.newAccount, (person) =>\n this.myqqSvc.newAccount(person)\n )\n )\n );\n\n updateAccount$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.updateAccount, (person) =>\n this.myqqSvc.updateAccount(person)\n )\n )\n );\n\n /**\n * Region Effects\n */\n getAllRegions$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getAllRegions, () => this.myqqSvc.getAllRegions())\n )\n );\n\n /**\n * Vehicle Effects\n */\n getVehicles$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getVehicles, () => this.myqqSvc.getVehicles())\n )\n );\n addVehicle$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.addVehicle, (vehicle) =>\n this.myqqSvc.postVehicle(vehicle)\n )\n )\n );\n editVehicle$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.editVehicle, (vehicle) =>\n this.myqqSvc.patchVehicle(vehicle)\n )\n )\n );\n\n removeVehicle$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.removeVehicle, (req) =>\n this.myqqSvc.removeVehicle(req)\n )\n )\n );\n /**\n * Order Effects\n */\n getMyOrders$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getMyOrders, (page) => this.myqqSvc.getMyOrders(page))\n )\n );\n\n getOrderById$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getOrderById, (orderId) =>\n this.myqqSvc.getOrderById(orderId)\n )\n )\n );\n\n /**\n * Payment Method Effects\n */\n getMyPaymentMethods$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getMyPaymentMethods, () =>\n this.myqqSvc.getMyPaymentMethods()\n )\n )\n );\n\n /**\n * Post Payment Method Effects\n */\n postPaymentMethod$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.postPaymentMethod, (paymentMethodId) =>\n this.myqqSvc.newPaymentMethod({ paymentMethodId })\n )\n )\n );\n\n /**\n * Account Linking Effects\n */\n accountLookup$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.accountLookup, (token) =>\n this.myqqSvc.accountLookup(token)\n )\n )\n );\n\n accountLookupLast4Plate = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.accountLookupLast4Plate, (token) =>\n this.myqqSvc.accountLookupLast4Plate(token)\n )\n )\n );\n\n accountLink$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.accountLink, (personId) =>\n this.myqqSvc.linkAccount(personId)\n )\n )\n );\n accountRelink$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.accountRelink, (personId) =>\n this.myqqSvc.relinkAccount(personId)\n )\n )\n );\n /**\n * Get Price Table Effects\n */\n getPriceTable$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getPriceTable, () => this.myqqSvc.getPriceTable())\n )\n );\n\n getPriceTableByZip$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getPriceTableByZip, (zip) =>\n this.myqqSvc.getPriceTableByZip(zip)\n )\n )\n );\n\n /**\n * Calculate Order Effect\n */\n calculateOrder$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.calculateOrder, (order) =>\n this.myqqSvc.calculateOrder(order).pipe(\n tap((result) => {\n result.items = result.items.filter(\n (item) => item.sku !== \"FLOCK-PRORATION\"\n );\n })\n )\n )\n )\n );\n\n /**\n * Submit Order Effect\n */\n submitOrder$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.submitOrder, (order) =>\n this.myqqSvc.submitOrder(order)\n )\n )\n );\n\n /**\n * Check Promo Code Effect\n */\n checkPromo$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.checkPromoCode, (serialNum) =>\n this.myqqSvc.checkPromoCode(serialNum)\n )\n )\n );\n\n /**\n * Subscriptions Effects\n */\n getMySubscriptions$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getMySubscriptions, () =>\n this.myqqSvc.getMySubscriptions()\n )\n )\n );\n\n /**\n * Pay Failed Invoice Effects\n *\n * This is a compound action that is composed of first updating\n * the payment method on the account and then asking myqq-api to\n * retry the stripe payment with the new payment method.\n */\n payFailedInvoice$ = createEffect(() =>\n this.actions$.pipe(\n filter(crm.payFailedInvoice.pending.match),\n switchMap(({ value: params }) =>\n this.myqqSvc\n .newPaymentMethod({\n paymentMethodId: params.paymentMethodId,\n createReason: \"FAILEDINVOICE\",\n })\n .pipe(\n mapError((error) => ({\n message: \"Unable to add new payment method\",\n error,\n })),\n switchMap(() => this.myqqSvc.payInvoice(params.invoiceId)),\n mapError((error) => ({\n message: \"Unable to pay invoice with new paymentMethod\",\n error,\n })),\n map(() => crm.payFailedInvoice.success({ params, result: null })),\n catchError((error) =>\n of(crm.payFailedInvoice.failure({ params, error }))\n )\n )\n )\n )\n );\n\n /**\n * Store Effects\n */\n getAllStores$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getAllStores, () => this.myqqSvc.getAllStores())\n )\n );\n\n /**\n * Get details about promotions from myqq-api\n */\n getPromoDetails$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getPromoDetails, (promoCode) =>\n this.myqqSvc.getPromoDetails(promoCode)\n )\n )\n );\n\n /**\n * Get details about autoapply promotions from myqq-api\n */\n getCompanyWidePromoDetails$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getCompanyWidePromoDetails, () =>\n this.myqqSvc.getCompanyWidePromoDetails()\n )\n )\n );\n\n /**\n * Swap/Edit LP Effects\n */\n\n getAccountQuota$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getAccountQuota, () => this.myqqSvc.getAccountQuota())\n )\n );\n getSwapReasons$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getSwapReasons, () => this.myqqSvc.getSwapReasons())\n )\n );\n swapVehicle$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.swapMembership, (swapRequest) =>\n this.myqqSvc.swapVehicleOnMembership(swapRequest)\n )\n )\n );\n editVehicleIdentifier$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.editVehicleIdentifier, (vehicle) =>\n this.myqqSvc.patchVehicle(vehicle)\n )\n )\n );\n\n /**\n * Cancel membership effects\n */\n cancelMembership$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.cancelMembership, (cancelRequest) =>\n this.myqqSvc.cancelMembership(cancelRequest)\n )\n )\n );\n\n checkEligibityForRetentionOffer$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(\n crm.checkEligibilityForRetentionOffer,\n (createTimestamp) =>\n this.myqqSvc.checkEligibilityForRetentionOffer(createTimestamp)\n )\n )\n );\n\n acceptRetentionOffer$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.acceptRetentionOffer, () =>\n this.myqqSvc.acceptRetentionOffer()\n )\n )\n );\n\n getCancelReasons$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getCancelReasons, () =>\n this.myqqSvc.getCancelReasons()\n )\n )\n );\n\n getAppMinVersion$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getAppMinVersion, () =>\n this.myqqSvc.getAppMinVersion()\n )\n )\n );\n\n getMarketingContent$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getMarketingContent, () =>\n this.myqqSvc.getMarketingContents()\n )\n )\n );\n\n /**\n * B2b Effects\n */\n\n getB2bBenefit$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.getB2bBenefit, () => this.myqqSvc.getB2bBenefit())\n )\n );\n\n linkB2CEffects$ = createEffect(() =>\n this.actions$.pipe(\n asyncExhaustMap(crm.linkB2C, (linkRequest) =>\n this.myqqSvc.linkB2cWithCode(linkRequest)\n )\n )\n );\n\n constructor(private actions$: Actions, private myqqSvc: MyQQService) {}\n}\n","import { take as _take, sortBy as _sortBy } from \"lodash-es\";\nimport { Injectable } from \"@angular/core\";\nimport { Actions, createEffect } from \"@ngrx/effects\";\nimport { distinctUntilChanged, filter, map } from \"rxjs/operators\";\nimport * as O from \"fp-ts/es6/Option\";\n\nimport { notNil } from \"@qqcw/qqsystem-util\";\n\nimport { filterActions } from \"src/app/shared/utilities/state/Operators\";\nimport {\n accountLink,\n addVehicle,\n cancelMembership,\n clearAccountQuota,\n editVehicle,\n editVehicleIdentifier,\n getAccountInfo,\n getMarketingContent,\n getMyPaymentMethods,\n getMySubscriptions,\n getPriceTableByZip,\n getProfile,\n getVehicles,\n newAccount,\n postPaymentMethod,\n removeVehicle,\n setVehiclesOnOrder,\n submitOrder,\n swapMembership,\n updateAccount,\n} from \"./myqq.reducers\";\n\nimport { setDefaultPlans } from \"../ui\";\nimport { UnleashService } from \"src/app/shared/services/unleash.service\";\n\n/**\n * This service contains chaining side effects. For example, when we get a profile we\n * might also want to get the persons vehicles and coupons from other endpoints without\n * explicitely chaining those calls in the ui. This service contains those cascading\n * events.\n */\n@Injectable()\nexport class MyQQChainEffects {\n /**\n * Refresh profile data after:\n * * Creating a new account\n * * Adding new vehicle\n */\n refreshProfileChains$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(\n addVehicle.success,\n editVehicle.success,\n updateAccount.success,\n cancelMembership.success\n ),\n map(() => getProfile.pending(null))\n )\n );\n refreshProfileChainsNewAccount$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(newAccount.success, accountLink.success),\n map(() => getProfile.pending({ track: true }))\n )\n );\n\n updateUnleashOnAccountInfoChange$ = createEffect(\n () =>\n this.actions$.pipe(\n filter(getAccountInfo.success.match),\n map(({ value: { result } }) => result),\n distinctUntilChanged(),\n map((accountInfo) =>\n this.unleashService.updateUnleashContextOnGetAccount(accountInfo)\n )\n ),\n { dispatch: false }\n );\n\n updateUnleashOnSubscriptionSuccess$ = createEffect(\n () =>\n this.actions$.pipe(\n filter(getMySubscriptions.success.match),\n map(({ value: { result } }) => result),\n filter(O.isSome),\n map(({ value }) => value),\n distinctUntilChanged(),\n map((subscription) =>\n this.unleashService.updateUnleashContextOnGetSubscription(\n subscription\n )\n )\n ),\n { dispatch: false }\n );\n\n refreshAccountChain$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(\n newAccount.success,\n accountLink.success,\n cancelMembership.success\n ),\n map(() => {\n return getAccountInfo.pending(null);\n })\n )\n );\n\n /**\n * Get payment methods after postPaymentMethod success\n */\n getPaymentMethodsOnPostSuccess$ = createEffect(() =>\n this.actions$.pipe(\n filter(postPaymentMethod.success.match),\n map(() => getMyPaymentMethods.pending(null))\n )\n );\n\n /**\n * Currently, orders always affect the subscription object so\n * we should refresh the subscription state whenever a submit\n * order completes successfully.\n */\n refreshSubscriptionChains$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(\n submitOrder.success,\n cancelMembership.success,\n accountLink.success\n ),\n map(() => getMySubscriptions.pending(null))\n )\n );\n\n refreshAccountOnOrderComplete$ = createEffect(() =>\n this.actions$.pipe(\n filter(submitOrder.success.match),\n map(() => getAccountInfo.pending(null))\n )\n );\n\n /**\n * Refresh vehicle list when one is added, edited, removed from the account or the membership\n */\n refreshVehiclesOnVehiclesAndMembershipChange$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(\n removeVehicle.success,\n addVehicle.success,\n editVehicle.success,\n submitOrder.success,\n swapMembership.success,\n editVehicleIdentifier.success\n ),\n map(() => getVehicles.pending(null))\n )\n );\n\n clearAccountQuotaOnSwapAndEditLPVIN$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(swapMembership.success, editVehicleIdentifier.success),\n map(() => clearAccountQuota(null))\n )\n );\n\n // temp workaround for handling cases where we don't want to initiate an order right after adding a vehicle\n // need to figure out how pass in more params in\n clearVehiclesOnOrderOnSwapSuccess$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(swapMembership.success),\n map(() => setVehiclesOnOrder([]))\n )\n );\n\n setDefaultPlansOnGetPriceSuccess$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(getPriceTableByZip.success),\n map(({ value: { result: value } }) => value),\n filter(notNil),\n map((value) => {\n return setDefaultPlans(value);\n })\n )\n );\n\n refreshMarketingContent$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(\n submitOrder.success,\n cancelMembership.success,\n accountLink.success\n ),\n map(() => getMarketingContent.pending(null))\n )\n );\n\n constructor(\n readonly actions$: Actions,\n readonly unleashService: UnleashService\n ) {}\n}\n","import { StoreAndMarker } from \"src/app/pages/locations/locations.models\";\nimport Stripe from \"stripe\";\nimport {\n Account,\n AccountCheckResponse,\n AccountInfoResponse,\n AccountQuota,\n CancelReason,\n CustomerPaymentMethod,\n GetProfileResponse,\n Order,\n OrderHeader,\n OrderItem,\n OrderTypesEnum,\n PromoDetails,\n QsysProfile,\n Store,\n RegionMenu,\n StripeStatusEnum,\n SubscriptionDetail,\n SubscriptionItemTypeEnum,\n SwapReason,\n Vehicle,\n VehicleSwapResponse,\n} from \"./myqq.models\";\nexport const MockGoodWashLevelName = \"good\";\nexport const MockBetterWashLevelName = \"better\";\nexport const MockBestWashLevelName = \"best\";\nexport const MockCeramicWashLevelName = \"ceramic\";\n\nexport const MockPlansPromoSvg = `\n\n\n\n\n\n\n\n\n`;\n\nexport const MOCK_STORE: Store = {\n storeId: \"MOCK_STORE_ID\",\n regionId: \"MOCK_REGION_ID\",\n regionNumber: \"0\",\n storeNumber: \"0\",\n name: \"West Sacramento\",\n addressLine1: \"111 West Sac Drive\",\n city: \"West Sacramento\",\n state: \"CA\",\n zipCode: \"95616\",\n phoneNumber: \"5308675309\",\n defaultLaneNumber: 1,\n timeZone: \"PST\",\n connectAccountId: \"MOCK_CONNECT_ACCOUNT_ID\",\n};\n\nexport const MOCK_STOREANDMARKER: StoreAndMarker = [\n {\n storeId: \"MOCK_STORE_ID\",\n regionId: \"MOCK_REGION_ID\",\n regionNumber: \"0\",\n storeNumber: \"0\",\n name: \"West Sacramento\",\n addressLine1: \"111 West Sac Drive\",\n city: \"West Sacramento\",\n state: \"CA\",\n zipCode: \"95616\",\n phoneNumber: \"5308675309\",\n defaultLaneNumber: 1,\n timeZone: \"PST\",\n connectAccountId: \"MOCK_CONNECT_ACCOUNT_ID\",\n },\n null,\n];\n\nexport const MOCK_VEHICLES: Vehicle[] = [\n {\n vehicleId: \"f43bf551-a149-4dc0-9790-ab58758f5317\",\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n license: \"YMENT\",\n state: \"PA\",\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:17:15.381719Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:17:15.431017Z\",\n make: \"FORD\",\n model: \"RANGER\",\n year: \"2020\",\n vin: \"WP0AB2A86EK190719\",\n hasMembership: true,\n expiring: false,\n isVerified: true,\n isTemporaryIdentifier: true,\n verificationCode: \"\",\n },\n {\n vehicleId: \"92a7c406-7ded-4fee-8b69-0c8ae8ce5745\",\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n license: \"YPAL\",\n state: \"PA\",\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:15:09.822015Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:15:11.418668Z\",\n hasMembership: false,\n isVerified: false,\n isTemporaryIdentifier: false,\n verificationCode: \"\",\n },\n {\n vehicleId: \"f43bf551-a149-4dc0-9790-ab58758f5319\",\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n license: \"\",\n state: \"\",\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:17:15.381719Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:17:15.431017Z\",\n make: \"Ram\",\n model: \"1500 Laramie Longhorn Crew Cab\",\n year: \"2013\",\n vin: \"WP0AB2A86QZ120783\",\n hasMembership: true,\n isVerified: false,\n isTemporaryIdentifier: true,\n verificationCode: \"\",\n },\n {\n vehicleId: \"0BAC7999-C921-4DE1-9F8E-4BD6546D98FA\",\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n license: \"12345\",\n state: \"TN\",\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:17:15.381719Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:17:15.431017Z\",\n hasMembership: true,\n isVerified: true,\n isTemporaryIdentifier: false,\n verificationCode: \"\",\n },\n];\n\nexport const MOCK_ACCOUNT: Account = {\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n xrefId: null,\n firstName: null,\n lastName: null,\n memberSince: null,\n birthDate: null,\n gender: null,\n email: null,\n primaryPh: null,\n secondaryPh: null,\n stripeCustomer: \"cus_HWLEyB0xAiQLjj\",\n homeStoreId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n street1: null,\n street2: null,\n city: null,\n state: null,\n countryId: null,\n zipCode: null,\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:15:10.635814Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:16:33.964509Z\",\n regionNumber: \"72\",\n};\n\nexport const MOCK_QSYS_ACCOUNT: QsysProfile = {\n userName: \"awesometest@gmail.com\",\n name: \"Awesome Test\",\n info: {\n address: \"5001 Lexington Street\",\n gender: \"∅\",\n height: 187,\n qsysAccount: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n },\n};\n\nexport const MOCK_ACTIVE_COUPONS = [\n {\n couponIssuedId: \"a8525ef8-050c-4a6d-b4d7-2ccae34ff91c\",\n orderItemId: \"64c014ee-1028-4bd3-a8ea-65ccc81542fa\",\n couponId: \"3e184456-fe92-527b-8af2-fad8ea8f9c56\",\n personId: \"d92c06bf-af49-48c3-9550-cfc5c7aceabd\",\n vehicleId: \"92a7c406-7ded-4fee-8b69-0c8ae8ce5745\",\n storeId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n employeeId: \"29421a23-1403-404e-8669-f6b53c55563f\",\n stripePlanId: \"plan_HKJFyx1A1Jf9uG\",\n isActive: true,\n effectiveAt: \"2020-06-23T20:16:26Z\",\n expiresAt: \"2020-07-24T07:00:00Z\",\n createdBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n createdIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n createdAt: \"2020-06-23T20:16:33.411979Z\",\n updatedBy: \"29421a23-1403-404e-8669-f6b53c55563f\",\n updatedIn: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n updatedAt: \"2020-06-23T20:16:33.471662Z\",\n },\n];\n\nexport const MOCK_PROFILE: GetProfileResponse = {\n profile: MOCK_QSYS_ACCOUNT,\n membership: {\n account: MOCK_ACCOUNT,\n vehicles: MOCK_VEHICLES,\n activeCoupons: MOCK_ACTIVE_COUPONS,\n },\n};\n\nexport const MOCK_ORDER_HEADER_1: OrderHeader = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n storeNumber: \"0701\",\n storeState: \"CO\",\n storeCity: \"Colorado Springs\",\n regionId: \"2cbc6b9c-d22f-5c12-a509-682e77c6f8d4\",\n regionNumber: \"07\",\n customerId: \"9ee34fbe-8a3f-4b81-b042-afc7dfa3001f\",\n custFirstName: \"Sub\",\n custLastName: \"1 flock\",\n cashierId: \"f0a218b7-6ac4-57ca-ad99-997f707e353b\",\n cashierFirstName: \"Admin\",\n cashierLastName: \"Site Master\",\n deviceId: \"f4d55b53-ee4d-42bc-8361-bc1b2a719fc8\",\n lane: 1,\n orderType: OrderTypesEnum.STORE,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isEmployee: false,\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"21.49\",\n orderTotal: \"21.49\",\n submissionAt: \"2020-06-16T00:00:00Z\",\n submissionTime: \"2020-06-16T17:29:04Z\",\n vehicleVin: \"\",\n vehicleState: \"TN\",\n vehicleLicense: \"ABC123\",\n laneType: \"\",\n washType: MockGoodWashLevelName,\n description: \"Carwash Purchase\",\n};\n\nexport const MOCK_ORDER_HEADER_2: OrderHeader = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n storeNumber: \"0701\",\n storeState: \"CO\",\n storeCity: \"Colorado Springs\",\n regionId: \"2cbc6b9c-d22f-5c12-a509-682e77c6f8d4\",\n regionNumber: \"07\",\n customerId: \"9ee34fbe-8a3f-4b81-b042-afc7dfa3001f\",\n custFirstName: \"Sub\",\n custLastName: \"1 flock\",\n cashierId: \"f0a218b7-6ac4-57ca-ad99-997f707e353b\",\n cashierFirstName: \"Admin\",\n cashierLastName: \"Site Master\",\n deviceId: \"f4d55b53-ee4d-42bc-8361-bc1b2a719fc8\",\n lane: 1,\n orderType: OrderTypesEnum.STORE,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isEmployee: false,\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"21.49\",\n orderTotal: \"21.49\",\n submissionAt: \"2020-06-16T00:00:00Z\",\n submissionTime: \"2020-06-16T17:29:04Z\",\n laneType: \"\",\n washType: MockBetterWashLevelName,\n description: \"Carwash Purchase\",\n};\n\nexport const MOCK_ORDER_HEADER_3: OrderHeader = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n storeNumber: \"0701\",\n storeState: \"CO\",\n storeCity: \"Colorado Springs\",\n regionId: \"2cbc6b9c-d22f-5c12-a509-682e77c6f8d4\",\n regionNumber: \"07\",\n customerId: \"9ee34fbe-8a3f-4b81-b042-afc7dfa3001f\",\n custFirstName: \"Sub\",\n custLastName: \"1 flock\",\n cashierId: \"f0a218b7-6ac4-57ca-ad99-997f707e353b\",\n cashierFirstName: \"Admin\",\n cashierLastName: \"Site Master\",\n deviceId: \"f4d55b53-ee4d-42bc-8361-bc1b2a719fc8\",\n lane: 1,\n orderType: OrderTypesEnum.STORE,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isEmployee: false,\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"21.49\",\n orderTotal: \"21.49\",\n submissionAt: \"2020-06-16T00:00:00Z\",\n submissionTime: \"2020-06-16T17:29:04Z\",\n laneType: \"\",\n washType: MockBestWashLevelName,\n description: \"Carwash Purchase\",\n};\n\nexport const MOCK_ORDER_HEADER_4: OrderHeader = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"7c411b5e-9d3f-50b5-9c28-62096e41c4ed\",\n storeNumber: \"0701\",\n storeState: \"CO\",\n storeCity: \"Colorado Springs\",\n regionId: \"2cbc6b9c-d22f-5c12-a509-682e77c6f8d4\",\n regionNumber: \"07\",\n customerId: \"9ee34fbe-8a3f-4b81-b042-afc7dfa3001f\",\n custFirstName: \"Sub\",\n custLastName: \"1 flock\",\n cashierId: \"f0a218b7-6ac4-57ca-ad99-997f707e353b\",\n cashierFirstName: \"Admin\",\n cashierLastName: \"Site Master\",\n deviceId: \"f4d55b53-ee4d-42bc-8361-bc1b2a719fc8\",\n lane: 1,\n orderType: OrderTypesEnum.STORE,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isEmployee: false,\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"21.49\",\n orderTotal: \"21.49\",\n submissionAt: \"2020-06-16T00:00:00Z\",\n submissionTime: \"2020-06-16T17:29:04Z\",\n laneType: \"\",\n description: \"Carwash Purchase\",\n};\n\nexport const MOCK_ORDER_ITEM_1: OrderItem = {\n orderItemId: \"3ff77ab8-ee67-4454-9471-a3aa7b38c306\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n itemId: \"adde9d6f-0e5d-52d9-bd2a-8738f8e157b5\",\n name: \"Clean Membership Flock - Auto Pay\",\n sku: \"SUB-FLOCK-MB-C-030\",\n vehicleId: \"f43bf551-a149-4dc0-9790-ab58758f5317\",\n orderedQty: \"1\",\n unitPrice: \"15\",\n totalTaxable: \"0\",\n taxRate: \"0\",\n priceInclTax: false,\n totalMarkDowns: \"0\",\n subTotal: \"15\",\n grossTotal: \"15\",\n taxTotal: \"0\",\n lineTotal: \"15\",\n};\n\nexport const MOCK_ORDER_ITEM_2 = {\n orderItemId: \"6c99cc19-7d5e-4782-aa16-e28790506599\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n itemId: \"adde9d6f-0e5d-52d9-bd2a-8738f8e157b5\",\n name: \"Clean Membership Flock - Auto Pay\",\n sku: \"SUB-FLOCK-MB-C-030\",\n vehicleId: \"92a7c406-7ded-4fee-8b69-0c8ae8ce5745\",\n orderedQty: \"1\",\n unitPrice: \"15\",\n totalTaxable: \"0\",\n taxRate: \"0\",\n priceInclTax: false,\n totalMarkDowns: \"0\",\n subTotal: \"15\",\n grossTotal: \"15\",\n taxTotal: \"0\",\n lineTotal: \"15\",\n};\n\nexport const MOCK_ORDER_ITEM_3: OrderItem = {\n orderItemId: \"6f18a66c-8937-4536-9eb0-fd2f43b194e8\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n itemId: \"adde9d6f-0e5d-52d9-bd2a-8738f8e157b5\",\n name: \"Clean Membership Flock - Auto Pay\",\n sku: \"SUB-FLOCK-MB-C-030\",\n vehicleId: \"f43bf551-a149-4dc0-9790-ab58758f5319\",\n orderedQty: \"1\",\n totalTaxable: \"0\",\n taxRate: \"0\",\n priceInclTax: false,\n totalMarkDowns: \"0\",\n subTotal: \"15\",\n grossTotal: \"15\",\n taxTotal: \"0\",\n lineTotal: \"15\",\n};\n\nexport const MOCK_ORDER_ITEM_4: OrderItem = {\n orderItemId: \"1642a9e7-63d1-4f60-9416-78b259df985d\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n itemId: \"9a3f1c27-6dac-574e-bec2-2579e8920fcb\",\n name: \"Clean Membership - Auto Pay\",\n sku: \"SUB-MB-C-030\",\n vehicleId: \"0BAC7999-C921-4DE1-9F8E-4BD6546D98FA\",\n orderedQty: \"1\",\n unitPrice: \"22.99\",\n totalTaxable: \"0\",\n taxRate: \"0\",\n priceInclTax: false,\n totalMarkDowns: \"0\",\n subTotal: \"22.99\",\n grossTotal: \"22.99\",\n taxTotal: \"0\",\n lineTotal: \"22.99\",\n};\n\nexport const MOCK_ORDER_1: Order = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"4b166dbe-d99d-5091-abdd-95b83330ed3a\",\n regionId: \"408e52a1-b0bc-5dcc-a589-5ea95caf56dc\",\n customerId: \"ae648167-a7c0-429e-b06b-cba9166a9c35\",\n cashierId: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n deviceId: \"96897aa3-94e3-42e3-823f-be2dadb361e0\",\n membershipId: \"6777bdcb-4ae8-5cc2-a995-02d7c3271509\",\n stripeCustomerId: \"cus_H5gU3Y4wKYA2sj\",\n mbrCouponIssuedId: \"5914ad0c-007a-4241-a657-eb9c04f43282\",\n nextBillingAmount: \"67.99\",\n createReasonCode: \"SALES\",\n lane: 1,\n laneType: \"\",\n vehicleId: \"3143854b-8808-43ce-8d4a-ae30843500ed\",\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isNewMember: false,\n isNewVehicle: true,\n isEmployee: false,\n isRewash: false,\n totalManualDiscount: \"0\",\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"67.99\",\n taxTotal: \"0\",\n orderTotal: \"67.99\",\n submissionAt: \"2020-07-22T16:37:53.586-06:00\",\n submissionTime: \"2020-07-22T16:37:53.586-06:00\",\n createdBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n createdIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n createdAt: \"2020-07-22T15:37:58.71368645-07:00\",\n updatedBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n updatedIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n updatedAt: \"2020-07-22T15:37:58.713686377-07:00\",\n holds: [],\n items: [\n MOCK_ORDER_ITEM_1,\n MOCK_ORDER_ITEM_2,\n MOCK_ORDER_ITEM_3,\n MOCK_ORDER_ITEM_4,\n ],\n markDowns: [],\n markUps: [],\n payments: [\n {\n orderPaymentId: \"2f9da02f-6fce-48c5-80ba-7854b2678d3d\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 1,\n paymentStatus: \"PAID\",\n paymentId: \"pi_1HAJcWD1Fv1TB63CckfJzeEY\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n {\n orderPaymentId: \"ee8af4f1-e409-446b-adb9-5d0a33023d53\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 0,\n paymentStatus: \"PAID\",\n paymentId: \"pm_1HAJcSD1Fv1TB63C1UD5WqD8\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n ],\n};\n\nexport const MOCK_ORDER_2: Order = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"4b166dbe-d99d-5091-abdd-95b83330ed3a\",\n regionId: \"408e52a1-b0bc-5dcc-a589-5ea95caf56dc\",\n customerId: \"ae648167-a7c0-429e-b06b-cba9166a9c35\",\n cashierId: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n deviceId: \"96897aa3-94e3-42e3-823f-be2dadb361e0\",\n membershipId: \"6777bdcb-4ae8-5cc2-a995-02d7c3271509\",\n stripeCustomerId: \"cus_H5gU3Y4wKYA2sj\",\n mbrCouponIssuedId: \"5914ad0c-007a-4241-a657-eb9c04f43282\",\n nextBillingAmount: \"67.99\",\n createReasonCode: \"SALES\",\n lane: 1,\n laneType: \"\",\n vehicleId: \"3143854b-8808-43ce-8d4a-ae30843500ed\",\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isNewMember: false,\n isNewVehicle: true,\n isEmployee: false,\n isRewash: false,\n totalManualDiscount: \"0\",\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"67.99\",\n taxTotal: \"0\",\n orderTotal: \"67.99\",\n submissionAt: \"2020-07-22T16:37:53.586-06:00\",\n submissionTime: \"2020-07-22T16:37:53.586-06:00\",\n createdBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n createdIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n createdAt: \"2020-07-22T15:37:58.71368645-07:00\",\n updatedBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n updatedIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n updatedAt: \"2020-07-22T15:37:58.713686377-07:00\",\n holds: [],\n items: [\n MOCK_ORDER_ITEM_1,\n MOCK_ORDER_ITEM_2,\n MOCK_ORDER_ITEM_3,\n MOCK_ORDER_ITEM_4,\n ],\n markDowns: [],\n markUps: [],\n payments: [\n {\n orderPaymentId: \"2f9da02f-6fce-48c5-80ba-7854b2678d3d\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 1,\n paymentStatus: \"PAID\",\n paymentId: \"pi_1HAJcWD1Fv1TB63CckfJzeEY\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n {\n orderPaymentId: \"ee8af4f1-e409-446b-adb9-5d0a33023d53\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 0,\n paymentStatus: \"PAID\",\n paymentId: \"pm_1HAJcSD1Fv1TB63C1UD5WqD8\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n ],\n};\n\nexport const MOCK_ORDER_3: Order = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"4b166dbe-d99d-5091-abdd-95b83330ed3a\",\n regionId: \"408e52a1-b0bc-5dcc-a589-5ea95caf56dc\",\n customerId: \"ae648167-a7c0-429e-b06b-cba9166a9c35\",\n cashierId: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n deviceId: \"96897aa3-94e3-42e3-823f-be2dadb361e0\",\n membershipId: \"6777bdcb-4ae8-5cc2-a995-02d7c3271509\",\n stripeCustomerId: \"cus_H5gU3Y4wKYA2sj\",\n mbrCouponIssuedId: \"5914ad0c-007a-4241-a657-eb9c04f43282\",\n nextBillingAmount: \"67.99\",\n createReasonCode: \"SALES\",\n lane: 1,\n laneType: \"\",\n vehicleId: \"3143854b-8808-43ce-8d4a-ae30843500ed\",\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isNewMember: false,\n isNewVehicle: true,\n isEmployee: false,\n isRewash: false,\n totalManualDiscount: \"0\",\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"67.99\",\n taxTotal: \"0\",\n orderTotal: \"67.99\",\n submissionAt: \"2020-07-22T16:37:53.586-06:00\",\n submissionTime: \"2020-07-22T16:37:53.586-06:00\",\n createdBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n createdIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n createdAt: \"2020-07-22T15:37:58.71368645-07:00\",\n updatedBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n updatedIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n updatedAt: \"2020-07-22T15:37:58.713686377-07:00\",\n holds: [],\n items: [\n MOCK_ORDER_ITEM_1,\n MOCK_ORDER_ITEM_2,\n MOCK_ORDER_ITEM_3,\n MOCK_ORDER_ITEM_4,\n ],\n markDowns: [],\n markUps: [],\n payments: [\n {\n orderPaymentId: \"2f9da02f-6fce-48c5-80ba-7854b2678d3d\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 1,\n paymentStatus: \"PAID\",\n paymentId: \"pi_1HAJcWD1Fv1TB63CckfJzeEY\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n {\n orderPaymentId: \"ee8af4f1-e409-446b-adb9-5d0a33023d53\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 0,\n paymentStatus: \"PAID\",\n paymentId: \"pm_1HAJcSD1Fv1TB63C1UD5WqD8\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n ],\n};\n\nexport const MOCK_ORDER_4: Order = {\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n storeId: \"4b166dbe-d99d-5091-abdd-95b83330ed3a\",\n regionId: \"408e52a1-b0bc-5dcc-a589-5ea95caf56dc\",\n customerId: \"ae648167-a7c0-429e-b06b-cba9166a9c35\",\n cashierId: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n deviceId: \"96897aa3-94e3-42e3-823f-be2dadb361e0\",\n membershipId: \"6777bdcb-4ae8-5cc2-a995-02d7c3271509\",\n stripeCustomerId: \"cus_H5gU3Y4wKYA2sj\",\n mbrCouponIssuedId: \"5914ad0c-007a-4241-a657-eb9c04f43282\",\n nextBillingAmount: \"67.99\",\n createReasonCode: \"SALES\",\n lane: 1,\n laneType: \"\",\n vehicleId: \"3143854b-8808-43ce-8d4a-ae30843500ed\",\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n orderStatus: \"COMPLETED\",\n isNewCustomer: false,\n isNewMember: false,\n isNewVehicle: true,\n isEmployee: false,\n isRewash: false,\n totalManualDiscount: \"0\",\n totalTaxable: \"0\",\n totalMarkDowns: \"0\",\n totalMarkUps: \"0\",\n subTotal: \"67.99\",\n taxTotal: \"0\",\n orderTotal: \"67.99\",\n submissionAt: \"2020-07-22T16:37:53.586-06:00\",\n submissionTime: \"2020-07-22T16:37:53.586-06:00\",\n createdBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n createdIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n createdAt: \"2020-07-22T15:37:58.71368645-07:00\",\n updatedBy: \"f5dcc5f3-502e-5801-9e47-cdbfb972080c\",\n updatedIn: \"005694ea-dc67-67e6-fa8b-b05759853830\",\n updatedAt: \"2020-07-22T15:37:58.713686377-07:00\",\n holds: [],\n items: [\n MOCK_ORDER_ITEM_1,\n MOCK_ORDER_ITEM_2,\n MOCK_ORDER_ITEM_3,\n MOCK_ORDER_ITEM_4,\n ],\n markDowns: [],\n markUps: [],\n payments: [\n {\n orderPaymentId: \"2f9da02f-6fce-48c5-80ba-7854b2678d3d\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 1,\n paymentStatus: \"PAID\",\n paymentId: \"pi_1HAJcWD1Fv1TB63CckfJzeEY\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n {\n orderPaymentId: \"ee8af4f1-e409-446b-adb9-5d0a33023d53\",\n orderId: \"e22d16b6-e3ca-453c-88a4-d1f3087f2bd2\",\n paymentAmount: 0,\n paymentStatus: \"PAID\",\n paymentId: \"pm_1HAJcSD1Fv1TB63C1UD5WqD8\",\n paymentType: \"CREDIT\",\n last4: \"4444\",\n expiresMonth: \"12\",\n expiresYear: \"2022\",\n },\n ],\n};\n\nexport const MOCK_CUSTOMER_PAYMENT_METHOD: CustomerPaymentMethod = {\n customerPaymentId: \"B1751D64-5F9B-49F8-B24E-5E9453C0BDA7\",\n // id: \"B1751D64-5F9B-49F8-B24E-5E9453C0BDA7\",\n brand: \"visa\",\n expMonth: \"04\",\n expYear: \"2024\",\n last4: \"0987\",\n isDefault: true,\n};\n\nexport const MOCK_PRICE_TABLE: RegionMenu = {\n storeId: \"MOCK_STORE_ID\",\n plans: [\n {\n base: {\n itemId: \"GOOD_BASE_ID\",\n myQQName: \"Good - Auto Renew\",\n sku: \"GOOD_SKU\",\n price: \"19.99\",\n },\n flock: {\n itemId: \"GOOD_FLOCK_ID\",\n myQQName: \"Good - Flock Auto Renew\",\n sku: \"GOOD_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockGoodWashLevelName,\n features: [\"Bug Breakdown\", \"Foam Wash\", \"Power Blow Dry\"],\n position: 3,\n washHierarchy: 100,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"BETTER_BASE_ID\",\n myQQName: \"Better - Auto Renew\",\n sku: \"BETTER_SKU\",\n price: \"29.99\",\n },\n flock: {\n itemId: \"BETTER_FLOCK_ID\",\n myQQName: \"Better - Flock Auto Renew\",\n sku: \"BETTER_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockBetterWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n ],\n position: 2,\n washHierarchy: 200,\n availableForPurchase: false,\n washLevelId: \"65c60175-f52b-47a7-8260-a614f9584d8b\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"BEST_BASE_ID\",\n myQQName: \"Best - Auto Renew\",\n sku: \"BEST_SKU\",\n price: \"39.99\",\n },\n flock: {\n itemId: \"BEST_FLOCK_ID\",\n name: \"Best Flock- Auto Renew\",\n myQQName: \"Best Flock - Auto Renew\",\n sku: \"BEST_FLOCK_SKU\",\n price: \"19.99\",\n },\n myQQShortDisplayName: MockBestWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n \"3-Step Paint Sealant Process\",\n \"Duck Bath\",\n \"Ultra Shine\",\n \"Wax to seal\",\n ],\n position: 1,\n washHierarchy: 300,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"CERAMIC_BASE_ID\",\n myQQName: \"Ceramic - Auto Renew\",\n sku: \"CERAMIC_SKU\",\n price: \"49.99\",\n },\n flock: {\n itemId: \"CERAMIC_FLOCK_ID\",\n name: \"CERAMIC Flock- Auto Renew\",\n myQQName: \"Ceramic Flock - Auto Renew\",\n sku: \"CERAMIC_FLOCK_SKU\",\n price: \"19.99\",\n },\n myQQShortDisplayName: MockCeramicWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n \"3-Step Paint Sealant Process\",\n \"Duck Bath\",\n \"Ultra Shine\",\n \"Wax to seal\",\n \"Ceramic\",\n ],\n position: 0,\n washHierarchy: 400,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n ],\n};\n\nexport const MOCK_PRICE_TABLE_WITHOUT_PRICE: RegionMenu = {\n storeId: \"MOCK_STORE_ID\",\n plans: [\n {\n base: {\n itemId: \"GOOD_BASE_ID\",\n myQQName: \"Good - Auto Renew\",\n sku: \"GOOD_SKU\",\n },\n flock: {\n itemId: \"GOOD_FLOCK_ID\",\n myQQName: \"Good - Flock Auto Renew\",\n sku: \"GOOD_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockGoodWashLevelName,\n features: [\"Bug Breakdown\", \"Foam Wash\", \"Power Blow Dry\"],\n position: 3,\n washHierarchy: 100,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"BETTER_BASE_ID\",\n myQQName: \"Better - Auto Renew\",\n sku: \"BETTER_SKU\",\n },\n flock: {\n itemId: \"BETTER_FLOCK_ID\",\n myQQName: \"Better - Flock Auto Renew\",\n sku: \"BETTER_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockBetterWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n ],\n position: 2,\n washHierarchy: 200,\n availableForPurchase: false,\n washLevelId: \"65c60175-f52b-47a7-8260-a614f9584d8b\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"BEST_BASE_ID\",\n myQQName: \"Best - Auto Renew\",\n sku: \"BEST_SKU\",\n },\n flock: {\n itemId: \"BEST_FLOCK_ID\",\n name: \"Best Flock- Auto Renew\",\n myQQName: \"Best Flock - Auto Renew\",\n sku: \"BEST_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockBestWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n \"3-Step Paint Sealant Process\",\n \"Duck Bath\",\n \"Ultra Shine\",\n \"Wax to seal\",\n ],\n position: 1,\n washHierarchy: 300,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n {\n base: {\n itemId: \"CERAMIC_BASE_ID\",\n myQQName: \"Ceramic - Auto Renew\",\n sku: \"CERAMIC_SKU\",\n },\n flock: {\n itemId: \"CERAMIC_FLOCK_ID\",\n name: \"CERAMIC Flock- Auto Renew\",\n myQQName: \"Ceramic Flock - Auto Renew\",\n sku: \"CERAMIC_FLOCK_SKU\",\n },\n myQQShortDisplayName: MockCeramicWashLevelName,\n features: [\n \"Bug Breakdown\",\n \"Foam Wash\",\n \"Power Blow Dry\",\n \"Triple Foam Wash\",\n \"Rain Repellent\",\n \"Wheel Bright & Tire Shine\",\n \"Undercarriage Rust Inhibitor\",\n \"3-Step Paint Sealant Process\",\n \"Duck Bath\",\n \"Ultra Shine\",\n \"Wax to seal\",\n \"Ceramic\",\n ],\n position: 0,\n washHierarchy: 400,\n availableForPurchase: true,\n washLevelId: \"\",\n backgroundImageUrl: \"\",\n washLevelImageUrl: \"\",\n },\n ],\n};\n\nexport const MOCK_PROMO = {\n couponId: \"d6766937-f0e9-408c-a7d5-ae78a59f6c02\",\n couponType: \"TRIAL SUBSCRIPTION\",\n serialNo: \"8001739\",\n name: \"600 | Entertainment Book Offer (Half Off ANY Single)\",\n markDownId: \"487277fa-ade7-4fd1-af7e-5d297a51853b\",\n singleUse: false,\n totalIssued: 0,\n maxRedemptions: 0,\n remainingRedemptions: 0,\n limitRedemptions: false,\n durationQty: 30,\n isActive: true,\n effectiveAt: \"2020-06-02T17:00:00-07:00\",\n expiresAt: \"2020-09-01T01:00:00-07:00\",\n};\n\nexport const MOCK_SUBSCRIPTION: SubscriptionDetail = {\n renewalDate: \"2020-07-21T01:06:52.783Z\",\n renewalAmount: \"19.99\",\n discountAmount: \"0.00\",\n renewalAmountBeforeDiscount: \"19.99\",\n subscriptionItems: [\n {\n itemId: \"3368999f-28e4-5c19-bc60-98c6a24f71cd\",\n name: \"Better 30 Day Subscription\",\n sku: \"SUB-MB-P-030\",\n amount: \"24.99\",\n quantity: 1,\n itemType: SubscriptionItemTypeEnum.base,\n },\n {\n itemId: \"0f64bb6c-325e-5c7f-a0bc-335e60c938d1\",\n name: \"Better 30 Day Subscription Flock\",\n sku: \"SUB-FLOCK-MB-P-030\",\n amount: \"15\",\n quantity: 1,\n itemType: SubscriptionItemTypeEnum.flock,\n },\n ],\n vehicles: MOCK_VEHICLES,\n status: \"past_due\",\n stripeSubscription: {\n cancel_at_period_end: false,\n cancel_at: null,\n } as Stripe.Subscription,\n washLevelId: \"65c60175-f52b-47a7-8260-a614f9584d8b\",\n myQQShortDisplayName: \"better\",\n regionNumber: \"72\",\n};\n\nexport const MOCK_REGIONS = [\n {\n regionId: \"e8497eef-cd28-5a60-ba47-6ec9531e2025\",\n regionNumber: \"06\",\n name: \"CA - Sacramento\",\n state: \"CA\",\n timeZone: \"America/Los_Angeles\",\n createdAt: \"2019-05-24T05:29:44.686118Z\",\n updatedAt: \"2019-05-24T05:29:44.686118Z\",\n },\n {\n regionId: \"5fd2aa8a-71f5-5f40-993c-c41d79ac2ed8\",\n regionNumber: \"99\",\n name: \"Service Center\",\n state: \"CA\",\n timeZone: \"America/Los_Angeles\",\n createdAt: \"2019-05-24T05:29:44.616884Z\",\n updatedAt: \"2019-05-24T05:29:44.616884Z\",\n },\n {\n regionId: \"7f6d7bae-f35d-5846-9f0f-5b87644b6a94\",\n regionNumber: \"03\",\n name: \"CA - Coachella Valley\",\n state: \"CA\",\n timeZone: \"America/Los_Angeles\",\n createdAt: \"2019-05-24T05:29:44.686094Z\",\n updatedAt: \"2019-05-24T05:29:44.686094Z\",\n },\n {\n regionId: \"408e52a1-b0bc-5dcc-a589-5ea95caf56dc\",\n regionNumber: \"01\",\n name: \"TX - Amarillo\",\n state: \"TX\",\n timeZone: \"America/Chicago\",\n createdAt: \"2019-05-24T05:29:44.686056Z\",\n updatedAt: \"2019-05-24T05:29:44.686056Z\",\n },\n {\n regionId: \"ca5b1793-e4e1-524d-bc76-e3938ec24601\",\n regionNumber: \"02\",\n name: \"TX - Houston\",\n state: \"TX\",\n timeZone: \"America/Chicago\",\n createdAt: \"2019-05-24T05:29:44.686031Z\",\n updatedAt: \"2019-05-24T05:29:44.686031Z\",\n },\n {\n regionId: \"52d1a192-8401-5400-96e8-3012cc81865c\",\n regionNumber: \"04\",\n name: \"CA - Inland Empire\",\n state: \"CA\",\n timeZone: \"America/Los_Angeles\",\n createdAt: \"2019-05-24T05:29:44.686212Z\",\n updatedAt: \"2019-05-24T05:29:44.686212Z\",\n },\n {\n regionId: \"e16d92de-07ad-53f2-8ec1-9838dd12205d\",\n regionNumber: \"05\",\n name: \"UT - Utah\",\n state: \"UT\",\n timeZone: \"America/Denver\",\n createdAt: \"2019-05-24T05:29:44.68616Z\",\n updatedAt: \"2019-05-24T05:29:44.686161Z\",\n },\n {\n regionId: \"2cbc6b9c-d22f-5c12-a509-682e77c6f8d4\",\n regionNumber: \"07\",\n name: \"CO - Colorado Springs\",\n state: \"CO\",\n timeZone: \"America/Denver\",\n createdAt: \"2019-05-24T05:29:44.686072Z\",\n updatedAt: \"2019-05-24T05:29:44.686072Z\",\n },\n {\n regionId: \"bc6141e0-8428-5f97-a237-b5e237bb41b5\",\n regionNumber: \"08\",\n name: \"CA - Bay Area\",\n state: \"CA\",\n timeZone: \"America/Los_Angeles\",\n createdAt: \"2019-05-24T05:29:44.686197Z\",\n updatedAt: \"2019-05-24T05:29:44.686197Z\",\n },\n {\n regionId: \"8e96af37-2996-5471-a339-aeb81ebe90fd\",\n regionNumber: \"11\",\n name: \"TX - Lubbock\",\n state: \"TX\",\n timeZone: \"America/Chicago\",\n createdAt: \"2019-05-24T05:29:44.686008Z\",\n updatedAt: \"2019-05-24T05:29:44.686008Z\",\n },\n {\n regionId: \"1d2f37a3-973f-5dc8-8e67-5b715d74ff99\",\n regionNumber: \"09\",\n name: \"AZ - Arizona\",\n state: \"AZ\",\n timeZone: \"America/Chicago\",\n createdAt: \"2019-05-24T05:29:44.686176Z\",\n updatedAt: \"2019-05-24T05:29:44.686176Z\",\n },\n {\n regionId: \"a8f37ee3-f2c0-02bf-e67e-7d5892ed171a\",\n regionNumber: \"12\",\n name: \"Corpus Christi\",\n state: \"TX\",\n timeZone: \"America/Chicago\",\n createdBy: \"8afb0866-19f1-4691-a302-78c64781c459\",\n createdAt: \"2020-01-30T21:23:55.031658Z\",\n updatedBy: \"8afb0866-19f1-4691-a302-78c64781c459\",\n updatedAt: \"2020-01-30T21:23:55.039514Z\",\n },\n];\n\nexport const MOCK_ACCOUNT_CHECK: AccountCheckResponse = {\n type: \"found_one_no_link\",\n ...MOCK_PROFILE,\n stripeSubscription: MOCK_SUBSCRIPTION,\n};\n\n/**\n * Account Info\n */\nexport const MOCK_ACCOUNT_INFO: AccountInfoResponse = {\n account: {\n account: MOCK_ACCOUNT,\n activeCoupons: MOCK_ACTIVE_COUPONS,\n vehicles: MOCK_VEHICLES,\n stripeSubscription: {\n currentPeriodEnd: \"0\",\n currentPeriodStart: \"0\",\n invoiceAmount: \"19.99\",\n invoiceId: \"FAKE\",\n status: StripeStatusEnum.ACTIVE,\n stripeVehicles: MOCK_VEHICLES,\n upcomingInvoice: null,\n cancelAtPeriodEnd: false,\n },\n },\n profile: MOCK_PROFILE.profile,\n};\n\n// URI prefixes for social media sites\nexport const SOCIAL_MEDIA_LINKS = {\n instagram: \"https://www.instagram.com/\",\n facebook: \"https://www.facebook.com/\",\n snapchat: \"https://www.snapchat.com/add/\",\n twitter: \"https://www.twitter.com/\",\n youtube: \"https://www.youtube.com/user/\",\n};\n\nexport const MOCK_PROMO_DETAILS = {\n code: \"promo\",\n} as PromoDetails;\n\nexport const MOCK_PLAN_SPECIFIC_UPGRADE_DETAILS = {\n code: \"\",\n autoApplyOrderTypes: [\"UPGRADESUBSCRIPTION\"],\n planSpecificOverride: [\n {\n position: 0,\n type: \"CERAMIC\",\n svg: MockPlansPromoSvg,\n serialNo: \"FREECERAMICUPGRADE\",\n sku: \"SUB-MB-R-030\",\n },\n ],\n companyWidePromo: true,\n autoApplyEffectiveAt: \"2023-05-01T00:00:00-07:00\",\n autoApplyExpiresAt: \"2023-08-14T23:59:59-07:00\",\n};\n\nexport const MOCK_ACCOUNT_QUOTA: AccountQuota = {\n quotaAllowed: 2,\n quotaConsumed: 0,\n};\n\nexport const MOCK_SWAP_REASONS: SwapReason[] = [\n {\n id: \"f30a2a23-6918-4575-9cac-b2c2710c6fbc\",\n name: \"Received new plates\",\n description: \"\",\n quotaConsumed: 1,\n },\n {\n id: \"b1e59eea-6a9a-4fd7-887c-1b265daf0c1f\",\n name: \"Bought new car\",\n description: \"\",\n quotaConsumed: 1,\n },\n {\n id: \"8c9c36c7-4ec9-4526-abc9-dc7430a08618\",\n name: \"Transfer membership to another car\",\n description: \"\",\n quotaConsumed: 1,\n },\n];\n\nexport const MOCK_VEHICLE_SWAP_RESPONSE: VehicleSwapResponse = {\n currentVehicleId: \"f43bf551-a149-4dc0-9790-ab58758f5317\",\n newVehicleId: \"92a7c406-7ded-4fee-8b69-0c8ae8ce5745\",\n quotaConsumed: {\n quotaAllowed: 2,\n quotaConsumed: 1,\n },\n};\n\nexport const MOCK_CANCEL_REASONS: CancelReason[] = [\n { message: \"I moved\", code: \"MOVED\" },\n { message: \"I no longer use the membership on this car\", code: \"NONUSE\" },\n { message: \"I sold this car\", code: \"SOLDCAR\" },\n { message: \"This car is damaged\", code: \"DAMAGED\" },\n { message: \"This car has been modified \", code: \"INCOMPATIBLE\" },\n { message: \"Weather has kept me from using the wash\", code: \"WEATHER\" },\n { message: \"I’m unsatisfied with my wash experience\", code: \"UNSATISFIED\" },\n { message: \"This is too expensive\", code: \"FINANCIAL\" },\n { message: \"I added this car by mistake\", code: \"SIGNUPERROR\" },\n { message: \"Other\", code: \"OTHER\" },\n];\n\nexport const MOCK_GRANDOPENING_PROMO = {\n code: \"COSPRINGS\",\n disclaimer:\n \"Requires $1 activation fee. Valid at participating locations only. Requires autopay. After 30 days, card will be charged regular membership rate based on the plan selected. Early termination fee may apply. Offer subject to change, see email for expiration date.\",\n customOverride: MockPlansPromoSvg,\n grandOpening: true,\n grandOpeningHomeStoreId: \"3817533e-1950-4636-982b-f8972b52e7bb\",\n autoApplyOrderTypes: [OrderTypesEnum.NEWMEMBERSHIP],\n crossOutDefaultPrice: true,\n planSpecificOverride: [\n {\n position: 0,\n type: \"good\",\n serialNo: \"COSPRINGS\",\n fixedBasePrice: \"1\",\n fixedFlockPrice: \"1\",\n sku: \"SUB-MB-S-030\",\n },\n {\n position: 0,\n type: \"better\",\n serialNo: \"COSPRINGS\",\n fixedBasePrice: \"1\",\n fixedFlockPrice: \"1\",\n sku: \"SUB-MB-P-030\",\n },\n {\n position: 0,\n type: \"best\",\n serialNo: \"COSPRINGS\",\n fixedBasePrice: \"1\",\n fixedFlockPrice: \"1\",\n sku: \"SUB-MB-T-030\",\n },\n {\n position: 0,\n type: \"ceramic\",\n serialNo: \"COSPRINGS\",\n fixedBasePrice: \"1\",\n fixedFlockPrice: \"1\",\n sku: \"SUB-MB-R-030\",\n },\n ],\n companyWidePromo: true,\n autoApplyEffectiveAt: null,\n autoApplyExpiresAt: null,\n};\n\nexport const MOCK_FLOCK_ONLY_PROMO = {\n code: \"QQFAST\",\n disclaimer: \"\",\n autoApplyOrderTypes: [OrderTypesEnum.ADDMEMBERSHIP],\n crossOutDefaultPrice: false,\n VehiclePageSvg: MockPlansPromoSvg,\n planSpecificOverride: [\n {\n position: 0,\n type: \"good\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-S-030\",\n },\n {\n position: 0,\n type: \"better\",\n serialNo: \"QQFAST\",\n\n sku: \"SUB-MB-P-030\",\n },\n {\n position: 0,\n type: \"best\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-T-030\",\n },\n {\n position: 0,\n type: \"ceramic\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-R-030\",\n },\n ],\n companyWidePromo: true,\n autoApplyEffectiveAt: null,\n autoApplyExpiresAt: null,\n};\n\nexport const MOCK_FLOCK_AND_NEW_MEMBERSHIP_PROMO = {\n code: \"QQFAST\",\n disclaimer: \"\",\n customOverride: MockPlansPromoSvg,\n autoApplyOrderTypes: [OrderTypesEnum.ADDMEMBERSHIP],\n crossOutDefaultPrice: false,\n VehiclePageSvg: MockPlansPromoSvg,\n planSpecificOverride: [\n {\n position: 0,\n type: \"good\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-S-030\",\n },\n {\n position: 0,\n type: \"better\",\n serialNo: \"QQFAST\",\n\n sku: \"SUB-MB-P-030\",\n },\n {\n position: 0,\n type: \"best\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-T-030\",\n },\n {\n position: 0,\n type: \"ceramic\",\n serialNo: \"QQFAST\",\n sku: \"SUB-MB-R-030\",\n },\n ],\n companyWidePromo: true,\n autoApplyEffectiveAt: null,\n autoApplyExpiresAt: null,\n};\n\nexport const MOCK_B2B_BENEFIT = {\n companyName: \"Corwin Inc\",\n contractDescription: \"50% off 1 vehicle\",\n planSpecificBenefit: [\n {\n benefitDescription: \"\",\n contractId: \"\",\n crossOutBasePrice: true,\n itemId: \"\",\n sku: \"\",\n },\n ],\n};\n","function e(e) {\n this.message = e;\n}\ne.prototype = new Error(), e.prototype.name = \"InvalidCharacterError\";\nvar r = \"undefined\" != typeof window && window.atob && window.atob.bind(window) || function (r) {\n var t = String(r).replace(/=+$/, \"\");\n if (t.length % 4 == 1) throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n for (var n, o, a = 0, i = 0, c = \"\"; o = t.charAt(i++); ~o && (n = a % 4 ? 64 * n + o : o, a++ % 4) ? c += String.fromCharCode(255 & n >> (-2 * a & 6)) : 0) o = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);\n return c;\n};\nfunction t(e) {\n var t = e.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (t.length % 4) {\n case 0:\n break;\n case 2:\n t += \"==\";\n break;\n case 3:\n t += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n try {\n return function (e) {\n return decodeURIComponent(r(e).replace(/(.)/g, function (e, r) {\n var t = r.charCodeAt(0).toString(16).toUpperCase();\n return t.length < 2 && (t = \"0\" + t), \"%\" + t;\n }));\n }(t);\n } catch (e) {\n return r(t);\n }\n}\nfunction n(e) {\n this.message = e;\n}\nfunction o(e, r) {\n if (\"string\" != typeof e) throw new n(\"Invalid token specified\");\n var o = !0 === (r = r || {}).header ? 0 : 1;\n try {\n return JSON.parse(t(e.split(\".\")[o]));\n } catch (e) {\n throw new n(\"Invalid token specified: \" + e.message);\n }\n}\nn.prototype = new Error(), n.prototype.name = \"InvalidTokenError\";\nexport default o;\nexport { n as InvalidTokenError };\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Router, RouterStateSnapshot } from \"@angular/router\";\nimport { Store } from \"@ngrx/store\";\nimport { BehaviorSubject, fromEvent, merge, of, timer } from \"rxjs\";\nimport {\n distinctUntilChanged,\n filter,\n map,\n mapTo,\n skip,\n switchMap,\n take,\n} from \"rxjs/operators\";\n\nimport jwt_decode from \"jwt-decode\";\nimport { KeycloakTokenParsed, KeycloakInstance } from \"keycloak-js\";\nimport { KeycloakService } from \"keycloak-angular\";\n\nimport { environment } from \"src/environments/environment\";\nimport { WINDOW } from \"./window.service\";\nimport { selectKeycloakInitialized } from \"../ngrx/ui\";\n\nconst refreshTokenKey = environment.refreshTokenKey;\ntype Status = \"online\" | \"offline\" | \"login\" | \"logout\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class OfflineAuthService {\n private _online$: BehaviorSubject = new BehaviorSubject(\n this.window?.navigator?.onLine\n );\n private _access$: BehaviorSubject = new BehaviorSubject(null);\n private _auth$: BehaviorSubject = new BehaviorSubject(null).pipe(\n skip(1)\n ) as BehaviorSubject;\n state: RouterStateSnapshot;\n\n keycloakInstance: KeycloakInstance;\n\n private keycloakInitialized = true;\n\n constructor(\n private keycloak: KeycloakService,\n private router: Router,\n private store$: Store,\n @Inject(WINDOW) private window: Window\n ) {\n merge(\n this.store$.select(selectKeycloakInitialized).pipe(\n filter((init) => init !== null),\n take(1)\n ),\n timer(5000).pipe(mapTo(false))\n )\n .pipe(take(1))\n .subscribe((init) => {\n this.keycloakInstance = keycloak.getKeycloakInstance();\n this.keycloakInitialized = init || !!this.keycloakInstance;\n if (this.keycloakInitialized) {\n this.afterGettingKeycloakInstance();\n } else {\n // handle rare case where keycloak is not fully initialized before this service is created.\n let timeout = 1;\n let retries = 0;\n const retryKeycloak = () =>\n setTimeout(() => {\n this.keycloakInstance = keycloak.getKeycloakInstance();\n if (this.keycloakInstance) {\n this.keycloakInitialized = true;\n this.afterGettingKeycloakInstance();\n } else if (retries++ < 3) {\n timeout *= 10;\n retryKeycloak();\n }\n }, timeout);\n\n retryKeycloak();\n }\n });\n this.state = this.router.routerState.snapshot;\n\n // Monitor online status\n merge(\n fromEvent(this.window, \"online\").pipe(mapTo(true)),\n fromEvent(this.window, \"offline\").pipe(mapTo(false))\n ).subscribe((online) => this._online$.next(online));\n\n // Monitor keycloak & online status changes\n merge(\n this.store$.select(selectKeycloakInitialized).pipe(\n filter((init) => init),\n switchMap(() =>\n of(this.keycloak.isLoggedIn()).pipe(\n map((loggedIn) => (loggedIn ? \"login\" : \"logout\"))\n )\n )\n ),\n\n this._auth$.pipe(\n distinctUntilChanged(),\n map((loggedIn) => (loggedIn ? \"login\" : \"logout\"))\n ),\n this._online$.pipe(\n skip(1),\n distinctUntilChanged(),\n map((online) => (online ? \"online\" : \"offline\"))\n )\n ).subscribe((status: Status) => this.handleAllowAccessStatusChange(status));\n }\n\n afterGettingKeycloakInstance() {\n if (this.keycloakInstance.authenticated) {\n this._auth$.next(true);\n }\n this.handleKeycloakCallbacks();\n }\n\n handleKeycloakCallbacks() {\n // onAuthRefreshError was already assigned in keycloak init\n // override but keep base function.\n const baseOnAuthRefreshError = this.keycloakInstance.onAuthRefreshError;\n this.keycloakInstance.onAuthRefreshError = () => {\n this.handleAuthRefreshFailure();\n\n return baseOnAuthRefreshError();\n };\n this.keycloakInstance.onAuthSuccess = () => this._auth$.next(true);\n this.keycloakInstance.onAuthError = () => this._auth$.next(false);\n this.keycloakInstance.onAuthLogout = () => this._auth$.next(false);\n }\n\n handleAllowAccessStatusChange(status: Status) {\n // When online status changes or a login/logout event happens, reset allowAccess$ accordingly`\n if (!this.keycloakInitialized) {\n // Handle the case where we skipped keycloak initialization because the app was offline\n this.attemptReauth();\n }\n if (status === \"login\") {\n this._access$.next(true);\n\n return;\n }\n this.loggedIn\n .then((loggedIn) => {\n if (loggedIn) {\n this._access$.next(true);\n\n return;\n }\n\n switch (status) {\n case \"offline\":\n this._access$.next(\n this.savedRefreshToken.exists &&\n !this.isRefreshTokenExpired(this.savedRefreshToken.parsed)\n );\n\n break;\n case \"online\":\n this.attemptReauth().then(() => {\n this._access$.next(this.keycloak.isLoggedIn());\n });\n\n break;\n case \"logout\":\n this._access$.next(false);\n\n break;\n }\n })\n .catch((e) => {\n this._access$.next(\n !this._online$.value &&\n this.savedRefreshToken.exists &&\n !this.isRefreshTokenExpired(this.savedRefreshToken.parsed)\n );\n });\n }\n\n handleAuthRefreshFailure() {\n if (\n !this._online$.value &&\n this.keycloakInstance?.refreshToken &&\n !this.isRefreshTokenExpired(this.keycloakInstance?.refreshTokenParsed)\n ) {\n this.window.sessionStorage?.setItem?.(\n refreshTokenKey,\n this.keycloakInstance.refreshToken\n );\n }\n }\n\n get online$(): BehaviorSubject {\n return this._online$;\n }\n\n get loggedIn(): Promise {\n return new Promise(() => {\n this.keycloak.isLoggedIn();\n });\n }\n\n get allowAccess$(): BehaviorSubject {\n return this._access$;\n }\n\n get savedRefreshToken() {\n const rt: string = this.window?.sessionStorage?.getItem?.(refreshTokenKey);\n\n const ret: {\n exists: boolean;\n raw?: string;\n parsed?: KeycloakTokenParsed;\n } = { exists: !!rt };\n\n if (ret.exists) {\n ret.raw = rt;\n ret.parsed = jwt_decode(rt);\n }\n\n return ret;\n }\n\n async attemptReauth(): Promise {\n if (this._online$.value || !this.keycloakInitialized) {\n const updated = await this.keycloak.updateToken(-1).catch(() => false);\n return !!updated;\n }\n\n return false;\n }\n\n isRefreshTokenExpired(parsedToken: KeycloakTokenParsed) {\n if (!parsedToken?.iat) {\n return true;\n }\n\n const issued = new Date(parsedToken.iat);\n const expires = new Date();\n expires.setDate(\n issued.getDate() + environment.keycloak.offlineTokenDuration\n );\n\n const expired = expires < new Date();\n\n if (expired) {\n this.window?.sessionStorage?.removeItem(refreshTokenKey);\n }\n\n return expired;\n }\n\n isSavedTokenValid() {\n return (\n this.savedRefreshToken.exists &&\n !this.isRefreshTokenExpired(this.savedRefreshToken.parsed)\n );\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { Router } from \"@angular/router\";\n\nimport { Store as NgrxStore } from \"@ngrx/store\";\n\nimport { EMPTY, Observable, of, throwError } from \"rxjs\";\nimport { delay } from \"rxjs/operators\";\nimport { some, none } from \"fp-ts/es6/Option\";\nimport { Decoder } from \"io-ts/lib/Decoder\";\n\nimport { environment } from \"src/environments/environment\";\nimport { shortid } from \"@qqcw/qqsystem-util\";\n\nimport { MyQQService } from \"./myqq.service\";\nimport {\n Vehicle,\n Order,\n OrderHeader,\n CustomerPaymentMethod,\n GetProfileResponse,\n QsysProfile,\n Account,\n PostCalculateOrderRequest,\n PostCalculateOrderResponse,\n PostSubmitOrderRequest,\n PostSubmitOrderResponse,\n GetSubscriptionResponse,\n Promo,\n Region,\n AccountCheckResponse,\n AccountInfoResponse,\n PayInvoiceResponse,\n PostPaymentMethodResponse,\n PostPaymentMethodRequest,\n AccountCheckLast4PlateRequest,\n Store,\n PromoDetails,\n AccountQuota,\n SwapReason,\n VehicleSwapRequest,\n VehicleSwapResponse,\n RegionMenu,\n AppVersion,\n OrderSearchResult,\n MarketingContent,\n B2bBenefit,\n KustomerResponse,\n} from \"./myqq.models\";\nimport {\n MOCK_STORE,\n MOCK_ORDER_HEADER_1,\n MOCK_ORDER_HEADER_2,\n MOCK_ORDER_HEADER_3,\n MOCK_ORDER_HEADER_4,\n MOCK_ORDER_1,\n MOCK_CUSTOMER_PAYMENT_METHOD,\n MOCK_VEHICLES,\n MOCK_ACCOUNT,\n MOCK_QSYS_ACCOUNT,\n MOCK_PRICE_TABLE,\n MOCK_SUBSCRIPTION,\n MOCK_PROMO,\n MOCK_REGIONS,\n MOCK_ACCOUNT_INFO,\n MOCK_PROMO_DETAILS,\n MOCK_ACCOUNT_QUOTA,\n MOCK_SWAP_REASONS,\n MOCK_VEHICLE_SWAP_RESPONSE,\n MOCK_CANCEL_REASONS,\n MOCK_PRICE_TABLE_WITHOUT_PRICE,\n MOCK_GRANDOPENING_PROMO,\n MOCK_B2B_BENEFIT,\n} from \"./myqq.consts\";\nimport { PaymentMethod } from \"src/app/shared/modules/stripe/stripe-definitions/payment-method\";\nimport { WINDOW } from \"../window.service\";\nimport { OfflineAuthService } from \"../offline-auth.service\";\n\n/**\n * Local Cache\n */\nconst orders: OrderHeader[] = [\n MOCK_ORDER_HEADER_1,\n MOCK_ORDER_HEADER_2,\n MOCK_ORDER_HEADER_3,\n MOCK_ORDER_HEADER_4,\n MOCK_ORDER_HEADER_1,\n MOCK_ORDER_HEADER_2,\n {\n ...MOCK_ORDER_HEADER_1,\n submissionAt: \"2020-07-16T00:00:00Z\",\n submissionTime: \"2020-07-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_2,\n submissionAt: \"2020-07-16T00:00:00Z\",\n submissionTime: \"2020-07-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_3,\n submissionAt: \"2020-07-16T00:00:00Z\",\n submissionTime: \"2020-07-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_4,\n submissionAt: \"2020-07-16T00:00:00Z\",\n submissionTime: \"2020-07-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_1,\n submissionAt: \"2020-08-16T00:00:00Z\",\n submissionTime: \"2020-08-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_2,\n submissionAt: \"2020-08-16T00:00:00Z\",\n submissionTime: \"2020-08-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_3,\n submissionAt: \"2020-08-16T00:00:00Z\",\n submissionTime: \"2020-08-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_4,\n submissionAt: \"2020-08-16T00:00:00Z\",\n submissionTime: \"2020-08-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_1,\n submissionAt: \"2020-10-16T00:00:00Z\",\n submissionTime: \"2020-10-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_2,\n submissionAt: \"2020-10-16T00:00:00Z\",\n submissionTime: \"2020-10-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_3,\n submissionAt: \"2020-10-16T00:00:00Z\",\n submissionTime: \"2020-10-16T17:29:04Z\",\n },\n {\n ...MOCK_ORDER_HEADER_4,\n submissionAt: \"2020-10-16T00:00:00Z\",\n submissionTime: \"2020-10-16T17:29:04Z\",\n },\n];\n\nconst profile: QsysProfile = MOCK_QSYS_ACCOUNT;\nlet account: Account = MOCK_ACCOUNT;\nlet vehicles: Vehicle[] = MOCK_VEHICLES;\nlet b2bBenefit: B2bBenefit = MOCK_B2B_BENEFIT;\nlet paymentMethods: CustomerPaymentMethod[] = [MOCK_CUSTOMER_PAYMENT_METHOD];\n// let paymentMethods: CustomerPaymentMethod[] = [];\nlet linked = true;\nconst hasMembership = true;\n\nconst getMembership = () =>\n linked\n ? {\n account,\n vehicles,\n activeCoupons: [],\n }\n : undefined;\n\nconst getProfile: () => GetProfileResponse = () => ({\n profile,\n membership: getMembership(),\n});\n\nfunction ofDelay(t: T, delayTimeInMs: number = 500) {\n return of(t).pipe(delay(delayTimeInMs));\n}\n\n/**\n * A Mock Service to Test against\n */\n@Injectable()\nexport class MyQQMockService implements MyQQService {\n readonly url = environment.URLs.MyQQ;\n decodeMap: ({\n decode,\n }: Decoder) => (obs: Observable) => Observable;\n throwAndLogError = (err: any) => err;\n\n handleOfflineGet = () => EMPTY;\n async offlineError() {\n return Promise.resolve();\n }\n\n constructor(\n readonly http: HttpClient,\n readonly router: Router,\n readonly dialogController: MatDialog,\n readonly offlineAuth: OfflineAuthService,\n readonly store$: NgrxStore,\n @Inject(WINDOW) readonly window: Window\n ) {}\n\n /**\n * Profile Endpoints\n */\n getMyProfile(): Observable {\n return ofDelay(getProfile());\n }\n\n newAccount(p: Account) {\n account = p;\n return ofDelay(account);\n }\n\n updateAccount(p: Account): Observable {\n account = { ...account, ...p };\n return ofDelay(account);\n }\n\n /**\n * Region Endpoints\n */\n getAllRegions(): Observable[]> {\n return ofDelay(MOCK_REGIONS);\n }\n\n /**\n * Vehicle Endpoints\n */\n getVehicles(): Observable {\n return ofDelay(vehicles);\n }\n\n postVehicle(vehicle: Partial): Observable {\n const newVehicle = {\n ...vehicle,\n isActive: false,\n vehicleId: shortid(),\n hasMembership: false,\n isTemporaryIdentifier: false,\n verificationCode: \"\",\n };\n vehicles = vehicles.concat(newVehicle);\n return ofDelay(newVehicle);\n }\n\n removeVehicle(req: Vehicle): Observable {\n vehicles = vehicles.filter(({ vehicleId }) => vehicleId !== req.vehicleId);\n return ofDelay(undefined);\n }\n\n /**\n * Stripe Subscription\n */\n getMySubscriptions(): Observable {\n return ofDelay(hasMembership ? some(MOCK_SUBSCRIPTION) : none);\n }\n\n /**\n * Orders\n */\n getMyOrders(): Observable {\n return ofDelay({\n orders: [...orders],\n recordCount: 1,\n offset: 0,\n pageSize: 20,\n pageCount: 1,\n pageNo: 1,\n });\n }\n\n getOrderById(orderId: string): Observable {\n return orderId === MOCK_ORDER_1.orderId\n ? ofDelay(MOCK_ORDER_1)\n : throwError(new Error(\"Bad Request\"));\n }\n\n /**\n * Payment Methods\n */\n getMyPaymentMethods(): Observable {\n return ofDelay(paymentMethods);\n }\n postPaymentMethod(\n method: CustomerPaymentMethod\n ): Observable {\n paymentMethods = paymentMethods.concat(method);\n return ofDelay(method);\n }\n newPaymentMethod(\n _: PostPaymentMethodRequest\n ): Observable {\n throw new Error(\"Not Implemented\");\n }\n\n /**\n * Account Linking Methods\n */\n accountLookup(_: PaymentMethod): Observable {\n linked = true;\n return ofDelay({ type: \"found_one_no_link\", ...getProfile() });\n }\n accountLookupLast4Plate(\n _: AccountCheckLast4PlateRequest\n ): Observable {\n linked = true;\n return ofDelay({ type: \"found_one_no_link\", ...getProfile() });\n }\n\n linkAccount(): Observable {\n throw new Error(\"Not implemented!\");\n }\n\n relinkAccount(): Observable {\n throw new Error(\"Not implemented!\");\n }\n /**\n * Get price table\n */\n getPriceTable(): Observable {\n return ofDelay(MOCK_PRICE_TABLE);\n }\n getPriceTableByZip(zip: string): Observable {\n if (!zip || zip == \"\") {\n zip = \"default\";\n return ofDelay(MOCK_PRICE_TABLE_WITHOUT_PRICE);\n }\n return ofDelay(MOCK_PRICE_TABLE);\n }\n\n /**\n * Check if promo code exists\n */\n checkPromoCode(serialNo: string): Observable {\n return ofDelay(serialNo === \"12345\" ? (MOCK_PROMO as Promo) : null);\n }\n\n /**\n * Order Calculate\n */\n calculateOrder(\n _: PostCalculateOrderRequest\n ): Observable {\n return ofDelay(MOCK_ORDER_1);\n }\n\n /**\n * Order Submit\n */\n submitOrder(_: PostSubmitOrderRequest): Observable {\n return throwError(\n new Error(\"Not Implemented: MyQQMockService#submitOrder\")\n );\n }\n\n /**\n * Get AccountInfo New\n */\n accountInfo(): Observable {\n return ofDelay(MOCK_ACCOUNT_INFO);\n }\n\n /*\n * Pay invoice\n */\n payInvoice(_: string): Observable {\n return throwError(new Error(\"Not Implemented: MyQQMockService#payInvoice\"));\n }\n\n /**\n * Store Endpoints\n */\n getAllStores(): Observable {\n return ofDelay([MOCK_STORE]);\n }\n\n /**\n * Promo code Endpoint\n */\n getPromoDetails(_: string): Observable {\n return ofDelay(MOCK_PROMO_DETAILS);\n }\n\n getCompanyWidePromoDetails(): Observable {\n return ofDelay(MOCK_GRANDOPENING_PROMO);\n }\n\n getAccountQuota(): Observable {\n return ofDelay(MOCK_ACCOUNT_QUOTA);\n }\n\n getSwapReasons(): Observable {\n return ofDelay(MOCK_SWAP_REASONS);\n }\n\n swapVehicleOnMembership(\n swapRequest: VehicleSwapRequest\n ): Observable {\n return ofDelay(MOCK_VEHICLE_SWAP_RESPONSE);\n }\n\n patchVehicle(vehicle: Vehicle): Observable {\n return ofDelay(vehicle);\n }\n\n cancelMembership(cancelRequest: {\n cancelReason: \"BLAH\";\n }): Observable<{ subscriptionId: string }> {\n return ofDelay({ subscriptionId: \"e7c95c4d-1845-4447-9e2d-31d4637ba1a5\" });\n }\n\n checkEligibilityForRetentionOffer(\n startTimestamp: number\n ): Observable<{ eligible: boolean }> {\n return ofDelay({ eligible: true });\n }\n\n acceptRetentionOffer(): Observable<{ success: boolean }> {\n return ofDelay({ success: true });\n }\n\n getCancelReasons(): Observable<{ message: string; code: string }[]> {\n return ofDelay(MOCK_CANCEL_REASONS);\n }\n\n getAppMinVersion(): Observable {\n return ofDelay({\n api: \"MISSING\",\n ios: {\n minimum: \"1.0.0\",\n },\n android: {\n minimum: \"1.0.0\",\n },\n web: {\n minimum: \"1.0.0\",\n },\n });\n }\n\n getMarketingContents(): Observable {\n return ofDelay([\n {\n vehiclesPageCardImage:\n \"https://cdn.sanity.io/images/srielb7g/production/4c9aee2de2a39f8226231b87c053adc2bffe6907-680x96.png\",\n isDismissable: true,\n showIfUnauth: false,\n link: \"/vehicles\",\n layout: \"Layout 1\",\n homePageCardImage:\n \"https://cdn.sanity.io/images/srielb7g/production/46421bf45b75997adc1e33f775b202662e801abd-1435x1256.png\",\n },\n ]);\n }\n\n /**\n * B2B Endpoints\n */\n\n getB2bBenefit(): Observable {\n return ofDelay(b2bBenefit);\n }\n\n linkB2cWithCode(): Observable {\n return ofDelay({\n personId: \"1231654\",\n signUpCode: \"33333\",\n });\n }\n\n /**\n * Kustomer Endpoints\n */\n\n sendContactForm(): Observable {\n return ofDelay({\n data: { id: \"\", type: \"\" },\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport {\n provideHttpClient,\n withInterceptorsFromDi,\n} from \"@angular/common/http\";\n\nimport { MyQQService } from \"./myqq.service\";\nimport { environment } from \"src/environments/environment\";\nimport { MyQQMockService } from \"./myqq.service.mock\";\n\n/**\n * This module provides the raw http calls to the myqq api microservice.\n */\n@NgModule({\n exports: [],\n declarations: [],\n imports: [],\n providers: [\n {\n provide: MyQQService,\n useClass: environment.useMockHttpServices ? MyQQMockService : MyQQService,\n },\n provideHttpClient(withInterceptorsFromDi()),\n ],\n})\nexport class MyQQServiceModule {}\n","import { createFeatureSelector, createSelector } from \"@ngrx/store\";\nimport { notNil } from \"@qqcw/qqsystem-util\";\nimport * as O from \"fp-ts/es6/Option\";\nimport * as DE from \"@nll/datum/DatumEither\";\n\nimport { StripeStatusEnum, Vehicle } from \"src/app/core/services/myqq\";\n\nimport { AccountAndMembershipStatus, MyQQState } from \"./myqq.models\";\nimport { myqqFeatureKey } from \"./myqq.reducers\";\nimport * as LS from \"./myqq.lenses\";\nimport { environment } from \"src/environments/environment\";\n\nexport const selectMyQQState = createFeatureSelector(myqqFeatureKey);\n\n/**\n * This are selectors. They are effectively just the get part of a lens. The use\n * of createSelector is for memoization purposes. It's likely not necessary, but\n * can be considered good practice.\n */\nexport const selectInitialLoad = createSelector(\n selectMyQQState,\n LS.initialLoadLens.get\n);\n\nexport const selectAccountInfo = createSelector(\n selectMyQQState,\n LS.accountInfoLens.get\n);\nexport const selectProfile = createSelector(\n selectMyQQState,\n LS.profileLens.get\n);\nexport const selectMembership = createSelector(\n selectMyQQState,\n LS.membershipLens.get\n);\nexport const selectMembershipVehicles = createSelector(\n selectMembership,\n DE.map((membership) => membership.vehicles)\n);\nexport const selectAccount = createSelector(\n selectMyQQState,\n LS.accountLens.get\n);\nexport const selectNewAccount = createSelector(\n selectMyQQState,\n LS.newAccountLens.get\n);\nexport const selectUpdateAccount = createSelector(\n selectMyQQState,\n LS.updateAccountLens.get\n);\nexport const selectStores = createSelector(selectMyQQState, LS.storesLens.get);\nexport const selectRegions = createSelector(\n selectMyQQState,\n LS.regionsLens.get\n);\nexport const selectMySubscription = createSelector(\n selectMyQQState,\n LS.subscriptionLens.get\n);\nexport const selectOrders = createSelector(selectMyQQState, LS.ordersLens.get);\nexport const selectPriceTable = createSelector(\n selectMyQQState,\n LS.priceTableLens.get\n);\n\nexport const selectPaymentMethods = createSelector(\n selectMyQQState,\n LS.paymentMethodsLens.get\n);\nexport const selectPostPaymentMethod = createSelector(\n selectMyQQState,\n LS.postPaymentMethodLens.get\n);\nexport const selectVehicles = createSelector(\n selectMyQQState,\n LS.getVehiclesLens.get\n);\n\nexport const selectVehiclesWithTemporaryIdentifier = createSelector(\n selectVehicles,\n DE.map((vehicles) =>\n vehicles.filter((vehicle) => vehicle.isTemporaryIdentifier)\n )\n);\n\nexport const selectAddVehicle = createSelector(\n selectMyQQState,\n LS.addVehicleLens.get\n);\nexport const selectEditVehicle = createSelector(\n selectMyQQState,\n LS.editVehicleLens.get\n);\n\nexport const selectGetOrderById = createSelector(\n selectMyQQState,\n LS.getOrderByIdLens.get\n);\n\nexport const selectOrderById = (id: string) =>\n createSelector(selectGetOrderById, (record) => record[id] ?? DE.initial);\n\nexport const selectAccountLookup = createSelector(\n selectMyQQState,\n LS.accountLookupLens.get\n);\n\nexport const selectLinkAccount = createSelector(\n selectMyQQState,\n LS.linkAccountLens.get\n);\n\nexport const selectCalculateOrder = createSelector(\n selectMyQQState,\n LS.calculateOrderLens.get\n);\n\nexport const selectSubmitOrder = createSelector(\n selectMyQQState,\n LS.submitOrderLens.get\n);\n\nexport const selectPendingOrder = createSelector(\n selectMyQQState,\n LS.pendingOrderLens.get\n);\n\nexport const selectModifySubscriptionPlan = createSelector(\n selectMyQQState,\n LS.modifySubscriptionPlanLens.get\n);\n\nexport const selectMembershipPurchase = createSelector(\n selectMyQQState,\n LS.membershipPurchaseLens.get\n);\n\nexport const selectCheckPromo = createSelector(\n selectMyQQState,\n LS.checkPromoCodeLens.get\n);\n\nexport const selectPayFailedInvoice = createSelector(\n selectMyQQState,\n LS.payInvoiceLens.get\n);\n\n/**\n * Select Stripe Subscription\n */\nexport const selectStripeSubscription = createSelector(\n selectAccountInfo,\n DE.map((accountInfo) =>\n O.fromNullable(accountInfo?.account?.stripeSubscription)\n )\n);\n\n/**\n * Regions, Stores, and LookupByZip\n */\n\n/**\n * Combines the asynchronous calls for person, vehicles, and coupons.\n */\nexport const selectPersonData = createSelector(\n selectProfile,\n selectOrders,\n selectPaymentMethods,\n selectMySubscription,\n (profile, orders, paymentMethods, subscription) =>\n DE.sequenceStruct({ profile, orders, paymentMethods, subscription })\n);\n\n/**\n * Combines MyProfile and MySubscriptions\n */\nexport const selectProfileAndSubscription = createSelector(\n selectProfile,\n selectMySubscription,\n (profile, subscription) => DE.sequenceStruct({ profile, subscription })\n);\n\n/**\n * Gets a vehicle by id from the vehicle array\n */\nexport const selectVehicleById = (id: string) =>\n createSelector(selectMembershipVehicles, (vehiclesDatumEither) => {\n return DE.chain((vehicles: Vehicle[]) => {\n const foundVehicle = vehicles.find((v) => v.vehicleId === id);\n if (notNil(foundVehicle)) {\n return DE.success(foundVehicle);\n }\n return DE.failure({\n error: `Vehicle with id ${id} does not exist in account.`,\n } as any);\n })(vehiclesDatumEither);\n });\n\n/**\n * Gets the user's first and/or last name\n */\nexport const selectUserFullName = createSelector(\n selectProfile,\n DE.map(({ profile, membership }) => {\n if (\n notNil(membership?.account?.firstName) ||\n notNil(membership?.account?.lastName)\n ) {\n return [membership.account.firstName, membership.account.lastName].join(\n \" \"\n );\n }\n return profile.name;\n })\n);\n\n/**\n * Gets some sort of name for the user\n */\n\nexport const selectUsername = createSelector(\n selectProfile,\n DE.map(({ profile, membership }) => {\n if (notNil(membership?.account?.firstName)) {\n return membership?.account.firstName;\n }\n\n if (notNil(membership?.account?.lastName)) {\n return membership.account.lastName;\n }\n\n return profile.name;\n })\n);\n\n/**\n * Select default payment method\n *\n * Tries to find payment method with isDefault true, otherwise chooses\n * the first payment method in the list, if none exists defaults to undefined.\n * DatumEither\n * => DatumEither\n */\nexport const selectDefaultPaymentMethod = createSelector(\n selectPaymentMethods,\n DE.map(\n (paymentMethods) =>\n paymentMethods.find((pm) => pm.isDefault) ?? paymentMethods[0]\n )\n);\n\n/**\n * Select Membership Information\n */\nexport const selectMembershipInfo = createSelector(\n selectMySubscription,\n selectAccountInfo,\n selectPriceTable,\n (subscription, account, menu) =>\n DE.sequenceStruct({\n subscription,\n account,\n menu,\n })\n);\n\n/**\n * Select accountLinked is used to determine if a qsys account\n * has been linked to a keycloak account. Only returns true\n * if the geteMyProfile request is complete and the membership\n * property is defined.\n */\nexport const selectAccountLinked = createSelector(\n selectMembership,\n DE.squash(\n () => false,\n () => false,\n () => true\n )\n);\n\n/**\n * Select failed invoice information\n */\nexport const selectFailedInvoice = createSelector(\n selectAccountInfo,\n DE.map((account) => {\n const stripeSubscription = account?.account?.stripeSubscription;\n return stripeSubscription?.status === StripeStatusEnum.PAST_DUE\n ? {\n title: \"Failed Payment\",\n description: `We tried to charge your card for $${stripeSubscription?.invoiceAmount} but failed. Would you like to tap here to update your payment method?`,\n amount: stripeSubscription.invoiceAmount,\n invoiceId: stripeSubscription.invoiceId,\n route: [{ outlets: { modal: \"failed-payment-method\" } }],\n }\n : null;\n })\n);\n\n/**\n * Select soft cancel status information\n */\nexport const selectSoftCancel = createSelector(\n selectAccountInfo,\n DE.map((account) =>\n !!account?.account?.stripeSubscription?.cancelAtPeriodEnd\n ? {\n title: \"Cancellation Pending\",\n description: `Your membership is expiring soon. Please click here to contact us via ${environment.supportEmail} if you wish to reactivate.`,\n }\n : null\n )\n);\n\nexport const selectAllStores = createSelector(\n selectMyQQState,\n LS.storesLens.get\n);\n\nexport const selectPromoDetails = createSelector(\n selectMyQQState,\n LS.promoDetailsLens.get\n);\n\nexport const selectCompanyWidePromo = createSelector(\n selectMyQQState,\n LS.companyWidePromoDetailsLens.get\n);\n\nexport const selectAccountAndMembershipStatus = createSelector(\n selectAccountInfo,\n DE.map((profileAndAccount) => {\n let status: AccountAndMembershipStatus = {\n hasAccount: false,\n hasMembership: false,\n };\n if (!!profileAndAccount?.profile?.info?.qsysAccount) {\n status.hasAccount = true;\n }\n const stripeStatus = profileAndAccount?.account?.stripeSubscription?.status;\n if (\n stripeStatus === StripeStatusEnum.ACTIVE ||\n stripeStatus === StripeStatusEnum.PAST_DUE ||\n stripeStatus === StripeStatusEnum.TRIALING\n ) {\n status.hasMembership = true;\n }\n return status;\n })\n);\n\nexport const selectStayAndSaveSubscriptionDiscount = createSelector(\n selectAccountInfo,\n DE.map((profileAndAccount) => {\n const discount = profileAndAccount?.subscription?.discount?.stayAndSave;\n return !!discount ? discount : null;\n })\n);\n/**\n * Swap membership\n */\nexport const selectAccountQuota = createSelector(\n selectMyQQState,\n LS.accountQuotaLens.get\n);\n\nexport const selectSwapReasons = createSelector(\n selectMyQQState,\n LS.swapReasonsLens.get\n);\n\nexport const selectSwapMembership = createSelector(\n selectMyQQState,\n LS.swapMembershipLens.get\n);\n\nexport const selectNonMemberVehicles = createSelector(\n selectVehicles,\n DE.map((vehicles) =>\n vehicles.filter((vehicle) => !vehicle.hasMembership && !vehicle.expiring)\n )\n);\n\nexport const selectEditVehicleIdentifier = createSelector(\n selectMyQQState,\n LS.editVehicleIdentifierLens.get\n);\n\n/**\n * Cancel membership\n */\n\nexport const selectCancelMembership = createSelector(\n selectMyQQState,\n LS.cancelMembershipLens.get\n);\n\nexport const selectIsEligibleForRetentionOffer = createSelector(\n selectMyQQState,\n LS.checkEligibilityForRetentionOfferLens.get\n);\n\nexport const selectRetentionOfferAcceptance = createSelector(\n selectMyQQState,\n LS.acceptRetentionOfferLens.get\n);\n\nexport const selectCancelReasons = createSelector(\n selectMyQQState,\n LS.cancelReasonsLens.get\n);\n\nexport const selectAppMinVersion = createSelector(\n selectMyQQState,\n LS.appMinVersionLens.get\n);\n\nexport const selectVehiclesOnOrder = createSelector(\n selectMyQQState,\n LS.vehiclesOnOrderLens.get\n);\n\nexport const selectMarketingContents = createSelector(\n selectMyQQState,\n LS.marketingContentLens.get\n);\n\nexport const selectB2bBenefit = createSelector(\n selectMyQQState,\n LS.b2bBenefitLens.get\n);\n\nexport const selectLinkB2C = createSelector(\n selectMyQQState,\n LS.linkB2CLens.get\n);\n","import { RequireSome } from \"@qqcw/qqsystem-util\";\nimport {\n MenuPair,\n MenuItem,\n OrderItem,\n PostCalculateOrderRequest,\n Order,\n OrderTypesEnum,\n Vehicle,\n SubscriptionPlan,\n} from \"src/app/core/services/myqq\";\n\n/**\n * Given a subscription detail and a price menu, return the price menu for\n * the current subscription.\n */\nexport const findMenuPair = (subscriptionPlan: SubscriptionPlan): MenuPair => {\n return {\n base: subscriptionPlan.base,\n flock: subscriptionPlan.flock,\n };\n};\n\n/**\n * Creates order items from a menuItem and a list of vehicles\n */\nexport const vehiclesToOrderItems = (\n { itemId }: MenuItem,\n vehicles: { vehicleId: string }[],\n orderedQty: number = 1\n): RequireSome[] =>\n vehicles.map(({ vehicleId }) => ({ itemId, orderedQty, vehicleId }));\n\n/**\n * Compares current and target subscription type and returns\n * the appropriate orderType\n */\nexport const getOrderType = (\n currentSubscription: SubscriptionPlan,\n targetSubscription: SubscriptionPlan\n): Order[\"orderType\"] => {\n return targetSubscription.washHierarchy > currentSubscription.washHierarchy\n ? OrderTypesEnum.UPGRADESUBSCRIPTION\n : OrderTypesEnum.DOWNGRADESUBSCRIPTION;\n};\n\n/**\n * Build Membership Items from menuPair and vehicle list.\n * Optionally set orderedQty (for removals with value -1)\n */\nexport const buildMembershipItems = (\n { base, flock }: MenuPair,\n vehicles: { vehicleId: string }[],\n orderedQty: number = 1\n): RequireSome[] => {\n const clone = [...vehicles]; // Clone array since we mutate it.\n const baseItems = vehiclesToOrderItems(base, [clone.shift()], orderedQty);\n const flockItems = vehiclesToOrderItems(flock, clone, orderedQty);\n return [...baseItems, ...flockItems];\n};\n\n/**\n * Creates a pending order from a current subscription, the price menu,\n * and a target subscription type\n */\nexport const buildChangeOrder = (\n vehicles: Vehicle[],\n currentSubscription: SubscriptionPlan,\n targetSubscription: SubscriptionPlan\n): RequireSome => {\n const current = findMenuPair(currentSubscription);\n const target = findMenuPair(targetSubscription);\n const orderType = getOrderType(currentSubscription, targetSubscription);\n const removedItems = buildMembershipItems(current, vehicles, -1);\n const addedItems = buildMembershipItems(target, vehicles);\n\n const items = [...removedItems, ...addedItems];\n return { orderType, items };\n};\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { Vehicle } from \"src/app/core/services/myqq\";\n\n// todo: replace with actual enum\ntype StateCode = string;\n\nexport interface VehiclePlate {\n license?: string;\n state?: StateCode;\n vin?: string;\n}\n\nexport interface OrderVehiclePlate {\n vehicleLicense?: string;\n vehicleState?: StateCode;\n vehicleVin?: string;\n}\n\n@Pipe({\n name: \"displayVehiclePlate\",\n})\nexport class DisplayVehiclePlatePipe implements PipeTransform {\n transform(vehicleInfo: Vehicle): any {\n return displayVehiclePlate(vehicleInfo as VehiclePlate);\n }\n}\n\n// tslint:disable-next-line: max-classes-per-file\n@Pipe({\n name: \"displayOrderVehiclePlate\",\n})\nexport class DisplayOrderVehiclePlatePipe implements PipeTransform {\n transform(vehicleInfo: Vehicle): any {\n return displayVehiclePlate(vehicleInfo as VehiclePlate);\n }\n}\n\nexport function displayVehiclePlate(\n vehicle: VehiclePlate & { vehicleKey?: string },\n { separator = \" · \" } = {}\n): string {\n return vehicle?.state && vehicle?.license\n ? `${vehicle.state}${separator}${vehicle.license}`\n : vehicle?.vin\n ? `VIN${separator}${vehicle.vin}`\n : reformatVehicleKey(vehicle?.vehicleKey) || \"\";\n}\n\nexport function displayOrderVehiclePlate(\n order: OrderVehiclePlate & { vehicleKey?: string },\n { separator = \" · \" } = {}\n): string {\n return order?.vehicleState && order?.vehicleLicense\n ? `${order.vehicleState}${separator}${order.vehicleLicense}`\n : order?.vehicleVin\n ? `VIN${separator}${order.vehicleVin}`\n : reformatVehicleKey(order?.vehicleKey) || \"\";\n}\n\nexport function reformatVehicleKey(\n vehicleKey: string,\n separator = \" · \"\n): string {\n if (vehicleKey && vehicleKey.includes(\"-\")) {\n return vehicleKey.replace(/-/gi, separator);\n } else {\n return vehicleKey;\n }\n}\n","import { fromPairs as _fromPairs, pick as _pick, zip as _zip } from \"lodash-es\";\nimport { Replete } from \"@nll/datum/Datum\";\nimport {\n datumEither,\n DatumEither,\n failure,\n isSuccess,\n pending,\n success,\n toRefresh,\n} from \"@nll/datum/DatumEither\";\nimport { sequenceS, sequenceT } from \"fp-ts/es6/Apply\";\nimport { Either } from \"fp-ts/es6/Either\";\nimport { combineLatest, isObservable, Observable, of } from \"rxjs\";\nimport {\n catchError,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n} from \"rxjs/operators\";\n\nexport const withDatumEither = (\n start?: Replete>\n): ((obs: Observable) => Observable>) => (\n obs: Observable\n) =>\n obs.pipe(\n map((result) => success(result)),\n startWith(start ? toRefresh(start) : pending),\n catchError((e: E) => of(failure(e)))\n );\n\nexport const filterSuccessMapToRightValue = (\n obs: Observable>\n) =>\n obs.pipe(\n filter(isSuccess),\n map((de) => de.value.right)\n );\n\nexport const chainSwitchMap = (\n fn: (a: A) => Observable>\n) => (obs: Observable>): Observable> =>\n obs.pipe(\n switchMap((de) =>\n isSuccess(de) ? fn(de.value.right) : of(de as DatumEither)\n )\n );\n\nexport const sequenceDES = sequenceS(datumEither);\nexport const sequenceDET = sequenceT(datumEither);\n\ntype ToResult = T extends Observable>\n ? R\n : never;\n\nexport const combineS = <\n T extends Record>>\n>(\n data: T\n) =>\n }>>>(\n combineLatest(\n Object.values(data).filter((value) => isObservable(value))\n ).pipe(map((DEs) => sequenceDES(_fromPairs(_zip(Object.keys(data), DEs)))))\n );\n\nexport type PickAndCombine<\n T extends Record>>,\n K extends keyof T\n> = Observable }, K>>>;\n\nexport const pickAndCombineS = <\n T extends Record>>,\n K extends keyof T\n>(\n data: T,\n ...fields: K[]\n): PickAndCombine =>\n combineS(_pick(data, ...fields)).pipe(distinctUntilChanged());\n","import { take as _take, sortBy as _sortBy } from \"lodash-es\";\nimport { Injectable } from \"@angular/core\";\nimport { Store } from \"@ngrx/store\";\nimport { Actions, createEffect } from \"@ngrx/effects\";\nimport { Router } from \"@angular/router\";\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n delay,\n switchMap,\n first,\n tap,\n} from \"rxjs/operators\";\nimport * as O from \"fp-ts/es6/Option\";\nimport { combineLatest } from \"rxjs\";\nimport { getSpecificWashLevel } from \"src/lib/util\";\n\nimport {\n addFlockOrder,\n addMembershipOrder,\n addVehicle,\n calculateOrder,\n changeMembershipOrder,\n checkPromoCode,\n getMySubscriptions,\n getPriceTable,\n getVehicles,\n removeFlockOrder,\n setMembershipPurchase,\n setModifySubscriptionPlan,\n setPendingOrder,\n setPendingOrderPromoCode,\n setVehiclesOnOrder,\n} from \"../myqq.reducers\";\nimport {\n selectCompanyWidePromo,\n selectMembershipPurchase,\n selectMySubscription,\n selectPendingOrder,\n selectPriceTable,\n selectPromoDetails,\n selectVehicles,\n selectVehiclesOnOrder,\n} from \"../myqq.selectors\";\nimport {\n findMenuPair,\n vehiclesToOrderItems,\n buildChangeOrder,\n buildMembershipItems,\n} from \"../myqq.utilities\";\nimport {\n MembershipPurchase,\n MenuPair,\n OrderTypesEnum,\n PostCalculateOrderRequest,\n PromoDetails,\n SubscriptionDetail,\n SubscriptionPlan,\n Vehicle,\n} from \"../../../services/myqq\";\nimport { environment } from \"src/environments/environment\";\nimport {\n displayOrderVehiclePlate,\n displayVehiclePlate,\n} from \"src/app/shared/pipes/display-vehicle-plate.pipe\";\nimport { isInitial, isSuccess } from \"@nll/datum/DatumEither\";\nimport { getSpecificPlanOverride } from \"src/lib/util\";\nimport { filterSuccessMapToRightValue } from \"src/lib/datum-either\";\nimport { notNil } from \"@qqcw/qqsystem-util\";\nimport { selectPromoCode } from \"../../ui\";\n\n/**\n * This service contains chaining side effects. For example, when we get a profile we\n * might also want to get the persons vehicles and coupons from other endpoints without\n * explicitely chaining those calls in the ui. This service contains those cascading\n * events.\n */\n@Injectable()\nexport class MyQQOrderChainEffects {\n /**\n * Set promo code on promo code valid response\n */\n setPendingOrderPromoCodeOnCheckPromoSuccess$ = createEffect(() =>\n this.actions$.pipe(\n filter(checkPromoCode.success.match),\n filter(\n ({\n value: {\n result: { expiresAt },\n },\n }) => new Date(expiresAt) > new Date()\n ),\n filter(\n ({\n value: {\n result: { effectiveAt },\n },\n }) => new Date(effectiveAt) < new Date()\n ),\n map(({ value: { params } }) =>\n setPendingOrderPromoCode({ serialNo: params })\n )\n )\n );\n\n setPendingOrderOnAddVehicleSuccess$ = createEffect(() =>\n this.actions$.pipe(\n filter(addVehicle.success.match),\n map(({ value: { result } }) => result),\n switchMap((newVehicle) => {\n const orderInfo = combineLatest([\n this.store$.select(selectPendingOrder),\n this.store$.select(selectMembershipPurchase),\n this.store$.select(selectVehiclesOnOrder),\n this.store$.select(selectMySubscription).pipe(\n tap((subscription) => {\n if (isInitial(subscription)) {\n this.store$.dispatch(getMySubscriptions.pending());\n }\n }),\n filterSuccessMapToRightValue\n ),\n\n this.store$.select(selectPriceTable).pipe(\n tap((priceTable) => {\n if (isInitial(priceTable)) {\n this.store$.dispatch(getPriceTable.pending(null));\n }\n }),\n filterSuccessMapToRightValue\n ),\n this.store$.select(selectVehicles).pipe(\n tap((vehicles) => {\n if (isInitial(vehicles)) {\n this.store$.dispatch(getVehicles.pending(null));\n }\n }),\n filterSuccessMapToRightValue\n ),\n ]);\n return orderInfo.pipe(\n first(),\n map(\n ([\n pendingOrderOption,\n membershipPurchaseOption,\n vehiclesOnOrder,\n subscriptionOption,\n priceTable,\n vehicles,\n ]) =>\n this.handleAddVehicleToOrder(\n pendingOrderOption,\n membershipPurchaseOption,\n vehiclesOnOrder,\n subscriptionOption,\n priceTable,\n vehicles,\n newVehicle\n )\n )\n );\n }),\n filter(notNil),\n distinctUntilKeyChanged(\"vehicles\"),\n map(({ orderType, wash, subscriptionPlan, vehicles }) => {\n return orderType === OrderTypesEnum.NEWMEMBERSHIP\n ? addMembershipOrder({ wash, vehicles })\n : addFlockOrder({ subscriptionPlan, vehicles });\n })\n )\n );\n\n setVehiclesOnOrderOnAddFlockOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(addFlockOrder.match),\n map(({ value: { vehicles } }) => {\n return setVehiclesOnOrder(vehicles);\n })\n )\n );\n\n setVehiclesOnOrderOnAddmembershipOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(addMembershipOrder.match),\n map(({ value: { vehicles } }) => {\n return setVehiclesOnOrder(vehicles);\n })\n )\n );\n\n /**\n * Submit calculate order when pendingOrder changes; apply any promos returned by\n */\n i = 0;\n calculateOrderOnPendingOrderChange$ = createEffect(() =>\n this.store$.select(selectPendingOrder).pipe(\n filter(O.isSome), // Only emit if order is not none\n distinctUntilChanged(), // Only emit when order object changes\n\n delay(0), // Prevents order from being stuck in Refresh when recalculating immediately after deleting a promo\n map((order) => calculateOrder.pending(order.value)) // Map to calculateOrder pending action\n )\n );\n\n /**\n * Set Order Chains\n */\n public deletedPromo: boolean; // Flag so we don't immediately reapply the promo when user removes it.\n\n addFlockOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(addFlockOrder.match),\n switchMap((val) => {\n const orderPromo = val.value.promo;\n const orderType = OrderTypesEnum.ADDMEMBERSHIP;\n return combineLatest([\n this.store$.select(selectPromoDetails),\n this.store$.select(selectCompanyWidePromo),\n this.store$.select(selectPromoCode),\n ]).pipe(\n map(([specificPromoDetail, companyWidePromo, urlPromo]) => {\n if (\n isSuccess(specificPromoDetail) &&\n !!specificPromoDetail.value.right.code\n ) {\n return specificPromoDetail.value.right;\n } else if (!!urlPromo && urlPromo !== \"\") {\n return { code: urlPromo } as PromoDetails;\n } else if (isSuccess(companyWidePromo)) {\n return companyWidePromo.value.right;\n } else {\n return {} as PromoDetails;\n }\n }),\n first(),\n map((promoDetails) => {\n return {\n ...val,\n value: {\n ...val.value,\n promo: this.autoApplyPromo(\n promoDetails,\n orderPromo,\n val.value.subscriptionPlan.base.sku,\n orderType\n ),\n },\n };\n })\n );\n }),\n map(({ value: { subscriptionPlan, vehicles, promo } }) => {\n const menuPair = findMenuPair(subscriptionPlan);\n const items = vehiclesToOrderItems(menuPair.flock, vehicles);\n return setPendingOrder({\n items,\n orderType: OrderTypesEnum.ADDMEMBERSHIP,\n markDowns: promo ? [{ serialNo: promo }] : [],\n });\n })\n )\n );\n\n removeFlockOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(removeFlockOrder.match),\n map(({ value: { subscriptionPlan, vehicles, reasonCode } }) => {\n const menuPair = findMenuPair(subscriptionPlan);\n const items = vehiclesToOrderItems(menuPair.flock, vehicles, -1);\n return setPendingOrder({\n items,\n orderType: OrderTypesEnum.REMOVESUBVEHICLE,\n createReasonCode: reasonCode,\n });\n })\n )\n );\n\n setModifySubscriptionPlan$ = createEffect(() =>\n this.actions$.pipe(\n filter(changeMembershipOrder.match),\n map(({ value: { targetSubscription } }) =>\n setModifySubscriptionPlan(targetSubscription)\n )\n )\n );\n\n changeMembershipOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(changeMembershipOrder.match),\n switchMap((val) => {\n const orderType = OrderTypesEnum.UPGRADESUBSCRIPTION;\n return combineLatest([\n this.store$.select(selectPromoDetails),\n this.store$.select(selectCompanyWidePromo),\n ]).pipe(\n map(([specificPromoDetail, companyWidePromo]) => {\n if (\n isSuccess(specificPromoDetail) &&\n !!specificPromoDetail.value.right.code\n ) {\n return specificPromoDetail.value.right;\n } else if (isSuccess(companyWidePromo)) {\n return companyWidePromo.value.right;\n } else {\n return {} as PromoDetails;\n }\n }),\n first(),\n map((promoDetails) => {\n const promo = this.autoApplyPromo(\n promoDetails,\n null,\n val.value.targetSubscription.base.sku,\n orderType\n );\n return {\n ...val,\n value: {\n ...val.value,\n promo,\n },\n };\n })\n );\n }),\n map(\n ({\n value: { vehicles, targetSubscription, currentSubscription, promo },\n }) =>\n setPendingOrder({\n ...buildChangeOrder(\n vehicles,\n currentSubscription,\n targetSubscription\n ),\n waiveUpgradeFee: !!promo,\n })\n )\n )\n );\n\n setMembershipPurchase$ = createEffect(() =>\n this.actions$.pipe(\n filter(addMembershipOrder.match),\n map(({ value: { wash, vehicles } }) =>\n setMembershipPurchase(O.some({ wash, vehicles }))\n )\n )\n );\n\n addMembership$ = createEffect(() =>\n this.actions$.pipe(\n filter(addMembershipOrder.match),\n switchMap((val) => {\n const orderPromo = val.value.promo;\n const sku = val.value.wash?.base?.sku;\n const orderType = OrderTypesEnum.NEWMEMBERSHIP;\n return combineLatest([\n this.store$.select(selectPromoDetails),\n this.store$.select(selectCompanyWidePromo),\n this.store$.select(selectPromoCode),\n ]).pipe(\n map(([specificPromoDetail, companyWidePromo, urlPromo]) => {\n if (\n isSuccess(specificPromoDetail) &&\n !!specificPromoDetail.value.right.code\n ) {\n return specificPromoDetail.value.right;\n } else if (!!urlPromo && urlPromo !== \"\") {\n return { code: urlPromo } as PromoDetails;\n } else if (isSuccess(companyWidePromo)) {\n return companyWidePromo.value.right;\n } else {\n return {} as PromoDetails;\n }\n }),\n first(),\n map((promoDetails) => {\n return {\n ...val,\n value: {\n ...val.value,\n promo: this.autoApplyPromo(\n promoDetails,\n orderPromo,\n sku,\n orderType\n ),\n },\n };\n })\n );\n }),\n map(({ value: { wash, vehicles, promo } }) => {\n const menuPair: MenuPair = {\n base: wash.base,\n flock: wash.flock,\n };\n return setPendingOrder({\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n items: buildMembershipItems(\n menuPair,\n _take(\n _sortBy(vehicles, displayOrderVehiclePlate),\n environment.limits.maxVehiclesOnSubscription\n )\n ),\n markDowns: promo ? [{ serialNo: promo }] : [],\n });\n })\n )\n );\n\n private autoApplyPromo(\n promoDetails: PromoDetails,\n orderPromo: string | null,\n sku: string,\n orderType: OrderTypesEnum\n ): string | null {\n let finalPromoCode = orderPromo;\n if (!environment.unleash.enable || this.deletedPromo) {\n return null;\n }\n // promo exists in order, promo could be user override, or auto applied promo\n if (\n promoDetails?.planSpecificOverride?.length > 0 &&\n ![\n OrderTypesEnum.DOWNGRADESUBSCRIPTION,\n OrderTypesEnum.REMOVESUBVEHICLE,\n ].includes(orderType) &&\n (!promoDetails.autoApplyOrderTypes?.length || // No whitelist of order types => apply to all\n promoDetails.autoApplyOrderTypes?.includes(orderType)) // Whitelist of order types => only apply if order type is in whitelist\n ) {\n const planSpecificPromoCode = getSpecificPlanOverride(\n sku,\n promoDetails?.planSpecificOverride\n )?.serialNo;\n finalPromoCode = orderPromo || planSpecificPromoCode;\n } else if (\n !!promoDetails.code &&\n (!promoDetails?.planSpecificOverride ||\n promoDetails?.planSpecificOverride?.length == 0)\n ) {\n finalPromoCode = promoDetails.code;\n }\n return finalPromoCode;\n }\n\n private handleAddVehicleToOrder(\n pendingOrderOption: O.Option,\n membershipPurchaseOption: O.Option,\n vehiclesOnOrder: Vehicle[],\n subscriptionOption: O.Option,\n priceTable,\n vehicles: Vehicle[],\n newVehicle: Vehicle\n ) {\n const currentSubscriptionPlan: SubscriptionPlan = O.isSome(\n subscriptionOption\n )\n ? getSpecificWashLevel(\n subscriptionOption.value.washLevelId,\n priceTable.plans\n )\n : null;\n\n const pendingOrderPromo: string =\n O.isSome(pendingOrderOption) &&\n pendingOrderOption.value?.markDowns?.length > 0\n ? pendingOrderOption.value?.markDowns[0]?.serialNo\n : null;\n // handle max vehicles subscription for existing and new membership: don't do anything.\n const vehiclesWithExistingMembership = vehicles?.filter(\n (v) => v.hasMembership\n );\n if (\n vehiclesWithExistingMembership?.length + vehiclesOnOrder?.length >=\n environment.limits.maxVehiclesOnSubscription\n ) {\n return;\n }\n // handle existing pending order is upgrade, downgrade, removeVehicle: create add flock order\n // also handle existing pending order is addmembership: add vehicle to flock order\n if (\n O.isSome(pendingOrderOption) &&\n [\n OrderTypesEnum.DOWNGRADESUBSCRIPTION,\n OrderTypesEnum.UPGRADESUBSCRIPTION,\n OrderTypesEnum.REMOVESUBVEHICLE,\n OrderTypesEnum.ADDMEMBERSHIP,\n ].includes(pendingOrderOption.value.orderType) &&\n O.isSome(subscriptionOption)\n ) {\n return {\n orderType: OrderTypesEnum.ADDMEMBERSHIP,\n vehicles: _sortBy(\n [...vehiclesOnOrder, newVehicle],\n displayVehiclePlate\n ),\n subscriptionPlan: currentSubscriptionPlan,\n promo: pendingOrderPromo,\n };\n }\n // handle existing pending order is newMembership: add vehicle to new membership order\n if (\n O.isSome(pendingOrderOption) &&\n pendingOrderOption.value.orderType == OrderTypesEnum.NEWMEMBERSHIP &&\n O.isSome(membershipPurchaseOption)\n ) {\n return {\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n wash: membershipPurchaseOption.value.wash,\n vehicles: _sortBy(\n [...vehiclesOnOrder, newVehicle],\n displayVehiclePlate\n ),\n promo: pendingOrderPromo,\n };\n }\n // handle add vehicle to existing membership\n if (O.isNone(pendingOrderOption) && O.isSome(subscriptionOption)) {\n return {\n orderType: OrderTypesEnum.ADDMEMBERSHIP,\n vehicles: [newVehicle],\n subscriptionPlan: currentSubscriptionPlan,\n promo: pendingOrderPromo,\n };\n }\n //handle new membership order\n if (\n O.isNone(pendingOrderOption) &&\n O.isNone(subscriptionOption) &&\n O.isSome(membershipPurchaseOption)\n ) {\n return {\n orderType: OrderTypesEnum.NEWMEMBERSHIP,\n wash: membershipPurchaseOption.value.wash,\n vehicles: _sortBy(\n [...vehiclesOnOrder, newVehicle],\n displayVehiclePlate\n ),\n promo: pendingOrderPromo,\n };\n }\n }\n constructor(\n readonly actions$: Actions,\n readonly store$: Store,\n readonly router: Router\n ) {}\n}\n","import { take as _take, sortBy as _sortBy } from \"lodash-es\";\nimport { Injectable } from \"@angular/core\";\nimport { Actions, createEffect } from \"@ngrx/effects\";\nimport { Router } from \"@angular/router\";\nimport { filter, map, distinctUntilKeyChanged } from \"rxjs/operators\";\n\nimport { notNil } from \"@qqcw/qqsystem-util\";\n\nimport { filterActions } from \"src/app/shared/utilities/state/Operators\";\nimport {\n clearFailedPromoCheck,\n clearPromoCode,\n getPromoDetails,\n} from \"./myqq.reducers\";\n\nimport { setLocation, setUIPromoCode } from \"../ui\";\n\n/**\n * This service contains chaining side effects. For example, when we get a profile we\n * might also want to get the persons vehicles and coupons from other endpoints without\n * explicitely chaining those calls in the ui. This service contains those cascading\n * events.\n */\n@Injectable()\nexport class MyQQPromoChainEffects {\n setLocationOnGetPromoDetails$ = createEffect(() =>\n this.actions$.pipe(\n filter(getPromoDetails.success.match),\n map(\n ({\n value: {\n result: { location },\n },\n }) => location\n ),\n filter(notNil),\n map((location) => setLocation(location))\n )\n );\n\n removePromoOnPromoDetailsFailure$ = createEffect(() =>\n this.actions$.pipe(\n filterActions(getPromoDetails.failure),\n map(() => setUIPromoCode(null))\n )\n );\n\n getPromoDetailsOnSetUIPromo$ = createEffect(() =>\n this.actions$.pipe(\n filter(setUIPromoCode.match),\n distinctUntilKeyChanged(\"value\"),\n map(({ value }) => getPromoDetails.pending(value))\n )\n );\n\n clearCheckedPromoOnClearPromoFromOrder$ = createEffect(() =>\n this.actions$.pipe(\n filter(clearPromoCode.match),\n map(() => clearFailedPromoCheck(null))\n )\n );\n\n constructor(readonly actions$: Actions, readonly router: Router) {}\n}\n","import { NgModule } from \"@angular/core\";\nimport { StoreModule } from \"@ngrx/store\";\nimport { EffectsModule } from \"@ngrx/effects\";\n\nimport { MyQQEffects } from \"./myqq.effects\";\nimport { MyQQChainEffects } from \"./myqq.chains\";\nimport { myqqFeatureKey, myqqReducer } from \"./myqq.reducers\";\nimport { MyQQServiceModule } from \"../../services/myqq/myqq.module\";\nimport { MyQQOrderChainEffects } from \"./cart/myqq-cart.chains\";\nimport { MyQQPromoChainEffects } from \"./promo.chains\";\n\n@NgModule({\n imports: [\n StoreModule.forFeature(myqqFeatureKey, myqqReducer),\n EffectsModule.forFeature([\n MyQQEffects,\n MyQQChainEffects,\n MyQQOrderChainEffects,\n MyQQPromoChainEffects,\n ]),\n MyQQServiceModule,\n ],\n})\nexport class NgrxMyQQModule {}\n","/**\n * @license Angular v18.2.13\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, NgZone, ApplicationRef, makeEnvironmentProviders, PLATFORM_ID, APP_INITIALIZER, Injector, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { defer, throwError, fromEvent, of, concat, Subject, NEVER, merge, from } from 'rxjs';\nimport { map, filter, switchMap, publish, take, tap, delay } from 'rxjs/operators';\nconst ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';\nfunction errorObservable(message) {\n return defer(() => throwError(new Error(message)));\n}\n/**\n * @publicApi\n */\nclass NgswCommChannel {\n constructor(serviceWorker) {\n this.serviceWorker = serviceWorker;\n if (!serviceWorker) {\n this.worker = this.events = this.registration = errorObservable(ERR_SW_NOT_SUPPORTED);\n } else {\n const controllerChangeEvents = fromEvent(serviceWorker, 'controllerchange');\n const controllerChanges = controllerChangeEvents.pipe(map(() => serviceWorker.controller));\n const currentController = defer(() => of(serviceWorker.controller));\n const controllerWithChanges = concat(currentController, controllerChanges);\n this.worker = controllerWithChanges.pipe(filter(c => !!c));\n this.registration = this.worker.pipe(switchMap(() => serviceWorker.getRegistration()));\n const rawEvents = fromEvent(serviceWorker, 'message');\n const rawEventPayload = rawEvents.pipe(map(event => event.data));\n const eventsUnconnected = rawEventPayload.pipe(filter(event => event && event.type));\n const events = eventsUnconnected.pipe(publish());\n events.connect();\n this.events = events;\n }\n }\n postMessage(action, payload) {\n return this.worker.pipe(take(1), tap(sw => {\n sw.postMessage({\n action,\n ...payload\n });\n })).toPromise().then(() => undefined);\n }\n postMessageWithOperation(type, payload, operationNonce) {\n const waitForOperationCompleted = this.waitForOperationCompleted(operationNonce);\n const postMessage = this.postMessage(type, payload);\n return Promise.all([postMessage, waitForOperationCompleted]).then(([, result]) => result);\n }\n generateNonce() {\n return Math.round(Math.random() * 10000000);\n }\n eventsOfType(type) {\n let filterFn;\n if (typeof type === 'string') {\n filterFn = event => event.type === type;\n } else {\n filterFn = event => type.includes(event.type);\n }\n return this.events.pipe(filter(filterFn));\n }\n nextEventOfType(type) {\n return this.eventsOfType(type).pipe(take(1));\n }\n waitForOperationCompleted(nonce) {\n return this.eventsOfType('OPERATION_COMPLETED').pipe(filter(event => event.nonce === nonce), take(1), map(event => {\n if (event.result !== undefined) {\n return event.result;\n }\n throw new Error(event.error);\n })).toPromise();\n }\n get isEnabled() {\n return !!this.serviceWorker;\n }\n}\n\n/**\n * Subscribe and listen to\n * [Web Push\n * Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices) through\n * Angular Service Worker.\n *\n * @usageNotes\n *\n * You can inject a `SwPush` instance into any component or service\n * as a dependency.\n *\n * \n *\n * To subscribe, call `SwPush.requestSubscription()`, which asks the user for permission.\n * The call returns a `Promise` with a new\n * [`PushSubscription`](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * instance.\n *\n * \n *\n * A request is rejected if the user denies permission, or if the browser\n * blocks or does not support the Push API or ServiceWorkers.\n * Check `SwPush.isEnabled` to confirm status.\n *\n * Invoke Push Notifications by pushing a message with the following payload.\n *\n * ```ts\n * {\n * \"notification\": {\n * \"actions\": NotificationAction[],\n * \"badge\": USVString,\n * \"body\": DOMString,\n * \"data\": any,\n * \"dir\": \"auto\"|\"ltr\"|\"rtl\",\n * \"icon\": USVString,\n * \"image\": USVString,\n * \"lang\": DOMString,\n * \"renotify\": boolean,\n * \"requireInteraction\": boolean,\n * \"silent\": boolean,\n * \"tag\": DOMString,\n * \"timestamp\": DOMTimeStamp,\n * \"title\": DOMString,\n * \"vibrate\": number[]\n * }\n * }\n * ```\n *\n * Only `title` is required. See `Notification`\n * [instance\n * properties](https://developer.mozilla.org/en-US/docs/Web/API/Notification#Instance_properties).\n *\n * While the subscription is active, Service Worker listens for\n * [PushEvent](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent)\n * occurrences and creates\n * [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification)\n * instances in response.\n *\n * Unsubscribe using `SwPush.unsubscribe()`.\n *\n * An application can subscribe to `SwPush.notificationClicks` observable to be notified when a user\n * clicks on a notification. For example:\n *\n * \n *\n * You can read more on handling notification clicks in the [Service worker notifications\n * guide](ecosystem/service-workers/push-notifications).\n *\n * @see [Push Notifications](https://developers.google.com/web/fundamentals/codelabs/push-notifications/)\n * @see [Angular Push Notifications](https://blog.angular-university.io/angular-push-notifications/)\n * @see [MDN: Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)\n * @see [MDN: Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)\n * @see [MDN: Web Push API Notifications best practices](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n *\n * @publicApi\n */\nlet SwPush = /*#__PURE__*/(() => {\n class SwPush {\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n constructor(sw) {\n this.sw = sw;\n this.pushManager = null;\n this.subscriptionChanges = new Subject();\n if (!sw.isEnabled) {\n this.messages = NEVER;\n this.notificationClicks = NEVER;\n this.subscription = NEVER;\n return;\n }\n this.messages = this.sw.eventsOfType('PUSH').pipe(map(message => message.data));\n this.notificationClicks = this.sw.eventsOfType('NOTIFICATION_CLICK').pipe(map(message => message.data));\n this.pushManager = this.sw.registration.pipe(map(registration => registration.pushManager));\n const workerDrivenSubscriptions = this.pushManager.pipe(switchMap(pm => pm.getSubscription()));\n this.subscription = merge(workerDrivenSubscriptions, this.subscriptionChanges);\n }\n /**\n * Subscribes to Web Push Notifications,\n * after requesting and receiving user permission.\n *\n * @param options An object containing the `serverPublicKey` string.\n * @returns A Promise that resolves to the new subscription object.\n */\n requestSubscription(options) {\n if (!this.sw.isEnabled || this.pushManager === null) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const pushOptions = {\n userVisibleOnly: true\n };\n let key = this.decodeBase64(options.serverPublicKey.replace(/_/g, '/').replace(/-/g, '+'));\n let applicationServerKey = new Uint8Array(new ArrayBuffer(key.length));\n for (let i = 0; i < key.length; i++) {\n applicationServerKey[i] = key.charCodeAt(i);\n }\n pushOptions.applicationServerKey = applicationServerKey;\n return this.pushManager.pipe(switchMap(pm => pm.subscribe(pushOptions)), take(1)).toPromise().then(sub => {\n this.subscriptionChanges.next(sub);\n return sub;\n });\n }\n /**\n * Unsubscribes from Service Worker push notifications.\n *\n * @returns A Promise that is resolved when the operation succeeds, or is rejected if there is no\n * active subscription or the unsubscribe operation fails.\n */\n unsubscribe() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const doUnsubscribe = sub => {\n if (sub === null) {\n throw new Error('Not subscribed to push notifications.');\n }\n return sub.unsubscribe().then(success => {\n if (!success) {\n throw new Error('Unsubscribe failed!');\n }\n this.subscriptionChanges.next(null);\n });\n };\n return this.subscription.pipe(take(1), switchMap(doUnsubscribe)).toPromise();\n }\n decodeBase64(input) {\n return atob(input);\n }\n static {\n this.ɵfac = function SwPush_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SwPush)(i0.ɵɵinject(NgswCommChannel));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SwPush,\n factory: SwPush.ɵfac\n });\n }\n }\n return SwPush;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Subscribe to update notifications from the Service Worker, trigger update\n * checks, and forcibly activate updates.\n *\n * @see {@link ecosystem/service-workers/communications Service worker communication guide}\n *\n * @publicApi\n */\nlet SwUpdate = /*#__PURE__*/(() => {\n class SwUpdate {\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n constructor(sw) {\n this.sw = sw;\n if (!sw.isEnabled) {\n this.versionUpdates = NEVER;\n this.unrecoverable = NEVER;\n return;\n }\n this.versionUpdates = this.sw.eventsOfType(['VERSION_DETECTED', 'VERSION_INSTALLATION_FAILED', 'VERSION_READY', 'NO_NEW_VERSION_DETECTED']);\n this.unrecoverable = this.sw.eventsOfType('UNRECOVERABLE_STATE');\n }\n /**\n * Checks for an update and waits until the new version is downloaded from the server and ready\n * for activation.\n *\n * @returns a promise that\n * - resolves to `true` if a new version was found and is ready to be activated.\n * - resolves to `false` if no new version was found\n * - rejects if any error occurs\n */\n checkForUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('CHECK_FOR_UPDATES', {\n nonce\n }, nonce);\n }\n /**\n * Updates the current client (i.e. browser tab) to the latest version that is ready for\n * activation.\n *\n * In most cases, you should not use this method and instead should update a client by reloading\n * the page.\n *\n *
\n *\n * Updating a client without reloading can easily result in a broken application due to a version\n * mismatch between the application shell and other page resources,\n * such as lazy-loaded chunks, whose filenames may change between\n * versions.\n *\n * Only use this method, if you are certain it is safe for your specific use case.\n *\n *
\n *\n * @returns a promise that\n * - resolves to `true` if an update was activated successfully\n * - resolves to `false` if no update was available (for example, the client was already on the\n * latest version).\n * - rejects if any error occurs\n */\n activateUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('ACTIVATE_UPDATE', {\n nonce\n }, nonce);\n }\n static {\n this.ɵfac = function SwUpdate_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SwUpdate)(i0.ɵɵinject(NgswCommChannel));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SwUpdate,\n factory: SwUpdate.ɵfac\n });\n }\n }\n return SwUpdate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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.dev/license\n */\nconst SCRIPT = /*#__PURE__*/new InjectionToken(ngDevMode ? 'NGSW_REGISTER_SCRIPT' : '');\nfunction ngswAppInitializer(injector, script, options, platformId) {\n return () => {\n if (!(isPlatformBrowser(platformId) && 'serviceWorker' in navigator && options.enabled !== false)) {\n return;\n }\n const ngZone = injector.get(NgZone);\n const appRef = injector.get(ApplicationRef);\n // Set up the `controllerchange` event listener outside of\n // the Angular zone to avoid unnecessary change detections,\n // as this event has no impact on view updates.\n ngZone.runOutsideAngular(() => {\n // Wait for service worker controller changes, and fire an INITIALIZE action when a new SW\n // becomes active. This allows the SW to initialize itself even if there is no application\n // traffic.\n const sw = navigator.serviceWorker;\n const onControllerChange = () => sw.controller?.postMessage({\n action: 'INITIALIZE'\n });\n sw.addEventListener('controllerchange', onControllerChange);\n appRef.onDestroy(() => {\n sw.removeEventListener('controllerchange', onControllerChange);\n });\n });\n let readyToRegister$;\n if (typeof options.registrationStrategy === 'function') {\n readyToRegister$ = options.registrationStrategy();\n } else {\n const [strategy, ...args] = (options.registrationStrategy || 'registerWhenStable:30000').split(':');\n switch (strategy) {\n case 'registerImmediately':\n readyToRegister$ = of(null);\n break;\n case 'registerWithDelay':\n readyToRegister$ = delayWithTimeout(+args[0] || 0);\n break;\n case 'registerWhenStable':\n const whenStable$ = from(injector.get(ApplicationRef).whenStable());\n readyToRegister$ = !args[0] ? whenStable$ : merge(whenStable$, delayWithTimeout(+args[0]));\n break;\n default:\n // Unknown strategy.\n throw new Error(`Unknown ServiceWorker registration strategy: ${options.registrationStrategy}`);\n }\n }\n // Don't return anything to avoid blocking the application until the SW is registered.\n // Also, run outside the Angular zone to avoid preventing the app from stabilizing (especially\n // given that some registration strategies wait for the app to stabilize).\n // Catch and log the error if SW registration fails to avoid uncaught rejection warning.\n ngZone.runOutsideAngular(() => readyToRegister$.pipe(take(1)).subscribe(() => navigator.serviceWorker.register(script, {\n scope: options.scope\n }).catch(err => console.error('Service worker registration failed with:', err))));\n };\n}\nfunction delayWithTimeout(timeout) {\n return of(null).pipe(delay(timeout));\n}\nfunction ngswCommChannelFactory(opts, platformId) {\n return new NgswCommChannel(isPlatformBrowser(platformId) && opts.enabled !== false ? navigator.serviceWorker : undefined);\n}\n/**\n * Token that can be used to provide options for `ServiceWorkerModule` outside of\n * `ServiceWorkerModule.register()`.\n *\n * You can use this token to define a provider that generates the registration options at runtime,\n * for example via a function call:\n *\n * {@example service-worker/registration-options/module.ts region=\"registration-options\"\n * header=\"app.module.ts\"}\n *\n * @publicApi\n */\nclass SwRegistrationOptions {}\n/**\n * @publicApi\n *\n * Sets up providers to register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n *\n * Example usage:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideServiceWorker('ngsw-worker.js')\n * ],\n * });\n * ```\n */\nfunction provideServiceWorker(script, options = {}) {\n return makeEnvironmentProviders([SwPush, SwUpdate, {\n provide: SCRIPT,\n useValue: script\n }, {\n provide: SwRegistrationOptions,\n useValue: options\n }, {\n provide: NgswCommChannel,\n useFactory: ngswCommChannelFactory,\n deps: [SwRegistrationOptions, PLATFORM_ID]\n }, {\n provide: APP_INITIALIZER,\n useFactory: ngswAppInitializer,\n deps: [Injector, SCRIPT, SwRegistrationOptions, PLATFORM_ID],\n multi: true\n }]);\n}\n\n/**\n * @publicApi\n */\nlet ServiceWorkerModule = /*#__PURE__*/(() => {\n class ServiceWorkerModule {\n /**\n * Register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n */\n static register(script, options = {}) {\n return {\n ngModule: ServiceWorkerModule,\n providers: [provideServiceWorker(script, options)]\n };\n }\n static {\n this.ɵfac = function ServiceWorkerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ServiceWorkerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ServiceWorkerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [SwPush, SwUpdate]\n });\n }\n }\n return ServiceWorkerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ServiceWorkerModule, SwPush, SwRegistrationOptions, SwUpdate, provideServiceWorker };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, inject, ViewChild, Injector, TemplateRef, Injectable, Optional, SkipSelf, NgModule } from '@angular/core';\nimport { MatButton, MatButtonModule } from '@angular/material/button';\nimport { Subject } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport * as i1 from '@angular/cdk/platform';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/layout';\nimport { Breakpoints } from '@angular/cdk/layout';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { takeUntil } from 'rxjs/operators';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\nfunction SimpleSnackBar_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"button\", 2);\n i0.ɵɵlistener(\"click\", function SimpleSnackBar_Conditional_2_Template_button_click_1_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.action());\n });\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\" \", ctx_r1.data.action, \" \");\n }\n}\nconst _c0 = [\"label\"];\nfunction MatSnackBarContainer_ng_template_4_Template(rf, ctx) {}\nconst MAX_TIMEOUT = /*#__PURE__*/Math.pow(2, 31) - 1;\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nclass MatSnackBarRef {\n constructor(containerInstance, _overlayRef) {\n this._overlayRef = _overlayRef;\n /** Subject for notifying the user that the snack bar has been dismissed. */\n this._afterDismissed = new Subject();\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the snack bar action was called. */\n this._onAction = new Subject();\n /** Whether the snack bar was dismissed using the action button. */\n this._dismissedByAction = false;\n this.containerInstance = containerInstance;\n containerInstance._onExit.subscribe(() => this._finishDismiss());\n }\n /** Dismisses the snack bar. */\n dismiss() {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n }\n /** Marks the snackbar action clicked. */\n dismissWithAction() {\n if (!this._onAction.closed) {\n this._dismissedByAction = true;\n this._onAction.next();\n this._onAction.complete();\n this.dismiss();\n }\n clearTimeout(this._durationTimeoutId);\n }\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * @breaking-change 8.0.0\n */\n closeWithAction() {\n this.dismissWithAction();\n }\n /** Dismisses the snack bar after some duration */\n _dismissAfter(duration) {\n // Note that we need to cap the duration to the maximum value for setTimeout, because\n // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n }\n /** Marks the snackbar as opened */\n _open() {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n }\n /** Cleans up the DOM after closing. */\n _finishDismiss() {\n this._overlayRef.dispose();\n if (!this._onAction.closed) {\n this._onAction.complete();\n }\n this._afterDismissed.next({\n dismissedByAction: this._dismissedByAction\n });\n this._afterDismissed.complete();\n this._dismissedByAction = false;\n }\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed() {\n return this._afterDismissed;\n }\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened() {\n return this.containerInstance._onEnter;\n }\n /** Gets an observable that is notified when the snack bar action is called. */\n onAction() {\n return this._onAction;\n }\n}\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nconst MAT_SNACK_BAR_DATA = /*#__PURE__*/new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n */\nclass MatSnackBarConfig {\n constructor() {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n this.politeness = 'assertive';\n /**\n * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n * component or template, the announcement message will default to the specified message.\n */\n this.announcementMessage = '';\n /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n this.duration = 0;\n /** Data being injected into the child component. */\n this.data = null;\n /** The horizontal position to place the snack bar. */\n this.horizontalPosition = 'center';\n /** The vertical position to place the snack bar. */\n this.verticalPosition = 'bottom';\n }\n}\n\n/** Directive that should be applied to the text element to be rendered in the snack bar. */\nlet MatSnackBarLabel = /*#__PURE__*/(() => {\n class MatSnackBarLabel {\n static {\n this.ɵfac = function MatSnackBarLabel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBarLabel)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarLabel,\n selectors: [[\"\", \"matSnackBarLabel\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-label\", \"mdc-snackbar__label\"],\n standalone: true\n });\n }\n }\n return MatSnackBarLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Directive that should be applied to the element containing the snack bar's action buttons. */\nlet MatSnackBarActions = /*#__PURE__*/(() => {\n class MatSnackBarActions {\n static {\n this.ɵfac = function MatSnackBarActions_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBarActions)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarActions,\n selectors: [[\"\", \"matSnackBarActions\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-actions\", \"mdc-snackbar__actions\"],\n standalone: true\n });\n }\n }\n return MatSnackBarActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Directive that should be applied to each of the snack bar's action buttons. */\nlet MatSnackBarAction = /*#__PURE__*/(() => {\n class MatSnackBarAction {\n static {\n this.ɵfac = function MatSnackBarAction_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBarAction)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarAction,\n selectors: [[\"\", \"matSnackBarAction\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-action\", \"mdc-snackbar__action\"],\n standalone: true\n });\n }\n }\n return MatSnackBarAction;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SimpleSnackBar = /*#__PURE__*/(() => {\n class SimpleSnackBar {\n constructor(snackBarRef, data) {\n this.snackBarRef = snackBarRef;\n this.data = data;\n }\n /** Performs the action on the snack bar. */\n action() {\n this.snackBarRef.dismissWithAction();\n }\n /** If the action button should be shown. */\n get hasAction() {\n return !!this.data.action;\n }\n static {\n this.ɵfac = function SimpleSnackBar_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SimpleSnackBar)(i0.ɵɵdirectiveInject(MatSnackBarRef), i0.ɵɵdirectiveInject(MAT_SNACK_BAR_DATA));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: SimpleSnackBar,\n selectors: [[\"simple-snack-bar\"]],\n hostAttrs: [1, \"mat-mdc-simple-snack-bar\"],\n exportAs: [\"matSnackBar\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 2,\n consts: [[\"matSnackBarLabel\", \"\"], [\"matSnackBarActions\", \"\"], [\"mat-button\", \"\", \"matSnackBarAction\", \"\", 3, \"click\"]],\n template: function SimpleSnackBar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(2, SimpleSnackBar_Conditional_2_Template, 3, 1, \"div\", 1);\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.data.message, \"\\n\");\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.hasAction ? 2 : -1);\n }\n },\n dependencies: [MatButton, MatSnackBarLabel, MatSnackBarActions, MatSnackBarAction],\n styles: [\".mat-mdc-simple-snack-bar{display:flex}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return SimpleSnackBar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\nconst matSnackBarAnimations = {\n /** Animation that shows and hides a snack bar. */\n snackBarState: /*#__PURE__*/trigger('state', [/*#__PURE__*/state('void, hidden', /*#__PURE__*/style({\n transform: 'scale(0.8)',\n opacity: 0\n })), /*#__PURE__*/state('visible', /*#__PURE__*/style({\n transform: 'scale(1)',\n opacity: 1\n })), /*#__PURE__*/transition('* => visible', /*#__PURE__*/animate('150ms cubic-bezier(0, 0, 0.2, 1)')), /*#__PURE__*/transition('* => void, * => hidden', /*#__PURE__*/animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', /*#__PURE__*/style({\n opacity: 0\n })))])\n};\nlet uniqueId = 0;\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\nlet MatSnackBarContainer = /*#__PURE__*/(() => {\n class MatSnackBarContainer extends BasePortalOutlet {\n constructor(_ngZone, _elementRef, _changeDetectorRef, _platform, /** The snack bar configuration. */\n snackBarConfig) {\n super();\n this._ngZone = _ngZone;\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._platform = _platform;\n this.snackBarConfig = snackBarConfig;\n this._document = inject(DOCUMENT);\n this._trackedModals = new Set();\n /** The number of milliseconds to wait before announcing the snack bar's content. */\n this._announceDelay = 150;\n /** Whether the component has been destroyed. */\n this._destroyed = false;\n /** Subject for notifying that the snack bar has announced to screen readers. */\n this._onAnnounce = new Subject();\n /** Subject for notifying that the snack bar has exited from view. */\n this._onExit = new Subject();\n /** Subject for notifying that the snack bar has finished entering the view. */\n this._onEnter = new Subject();\n /** The state of the snack bar animations. */\n this._animationState = 'void';\n /** Unique ID of the aria-live element. */\n this._liveElementId = `mat-snack-bar-container-live-${uniqueId++}`;\n /**\n * Attaches a DOM portal to the snack bar container.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = portal => {\n this._assertNotAttached();\n const result = this._portalOutlet.attachDomPortal(portal);\n this._afterPortalAttached();\n return result;\n };\n // Use aria-live rather than a live role like 'alert' or 'status'\n // because NVDA and JAWS have show inconsistent behavior with live roles.\n if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n this._live = 'assertive';\n } else if (snackBarConfig.politeness === 'off') {\n this._live = 'off';\n } else {\n this._live = 'polite';\n }\n // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n if (this._platform.FIREFOX) {\n if (this._live === 'polite') {\n this._role = 'status';\n }\n if (this._live === 'assertive') {\n this._role = 'alert';\n }\n }\n }\n /** Attach a component portal as content to this snack bar container. */\n attachComponentPortal(portal) {\n this._assertNotAttached();\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._afterPortalAttached();\n return result;\n }\n /** Attach a template portal as content to this snack bar container. */\n attachTemplatePortal(portal) {\n this._assertNotAttached();\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._afterPortalAttached();\n return result;\n }\n /** Handle end of animations, updating the state of the snackbar. */\n onAnimationEnd(event) {\n const {\n fromState,\n toState\n } = event;\n if (toState === 'void' && fromState !== 'void' || toState === 'hidden') {\n this._completeExit();\n }\n if (toState === 'visible') {\n // Note: we shouldn't use `this` inside the zone callback,\n // because it can cause a memory leak.\n const onEnter = this._onEnter;\n this._ngZone.run(() => {\n onEnter.next();\n onEnter.complete();\n });\n }\n }\n /** Begin animation of snack bar entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n // _animationState lives in host bindings and `detectChanges` does not refresh host bindings\n // so we have to call `markForCheck` to ensure the host view is refreshed eventually.\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n this._screenReaderAnnounce();\n }\n }\n /** Begin animation of the snack bar exiting from view. */\n exit() {\n // It's common for snack bars to be opened by random outside calls like HTTP requests or\n // errors. Run inside the NgZone to ensure that it functions correctly.\n this._ngZone.run(() => {\n // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n // `MatSnackBar.open`).\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n // Mark this element with an 'exit' attribute to indicate that the snackbar has\n // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n // test harness.\n this._elementRef.nativeElement.setAttribute('mat-exit', '');\n // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n // long enough to visually read it either, so clear the timeout for announcing.\n clearTimeout(this._announceTimeoutId);\n });\n return this._onExit;\n }\n /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n ngOnDestroy() {\n this._destroyed = true;\n this._clearFromModals();\n this._completeExit();\n }\n /**\n * Removes the element in a microtask. Helps prevent errors where we end up\n * removing an element which is in the middle of an animation.\n */\n _completeExit() {\n queueMicrotask(() => {\n this._onExit.next();\n this._onExit.complete();\n });\n }\n /**\n * Called after the portal contents have been attached. Can be\n * used to modify the DOM once it's guaranteed to be in place.\n */\n _afterPortalAttached() {\n const element = this._elementRef.nativeElement;\n const panelClasses = this.snackBarConfig.panelClass;\n if (panelClasses) {\n if (Array.isArray(panelClasses)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClasses.forEach(cssClass => element.classList.add(cssClass));\n } else {\n element.classList.add(panelClasses);\n }\n }\n this._exposeToModals();\n // Check to see if the attached component or template uses the MDC template structure,\n // specifically the MDC label. If not, the container should apply the MDC label class to this\n // component's label container, which will apply MDC's label styles to the attached view.\n const label = this._label.nativeElement;\n const labelClass = 'mdc-snackbar__label';\n label.classList.toggle(labelClass, !label.querySelector(`.${labelClass}`));\n }\n /**\n * Some browsers won't expose the accessibility node of the live element if there is an\n * `aria-modal` and the live element is outside of it. This method works around the issue by\n * pointing the `aria-owns` of all modals to the live element.\n */\n _exposeToModals() {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with the\n // `LiveAnnouncer` and any other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const id = this._liveElementId;\n const modals = this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal=\"true\"]');\n for (let i = 0; i < modals.length; i++) {\n const modal = modals[i];\n const ariaOwns = modal.getAttribute('aria-owns');\n this._trackedModals.add(modal);\n if (!ariaOwns) {\n modal.setAttribute('aria-owns', id);\n } else if (ariaOwns.indexOf(id) === -1) {\n modal.setAttribute('aria-owns', ariaOwns + ' ' + id);\n }\n }\n }\n /** Clears the references to the live element from any modals it was added to. */\n _clearFromModals() {\n this._trackedModals.forEach(modal => {\n const ariaOwns = modal.getAttribute('aria-owns');\n if (ariaOwns) {\n const newValue = ariaOwns.replace(this._liveElementId, '').trim();\n if (newValue.length > 0) {\n modal.setAttribute('aria-owns', newValue);\n } else {\n modal.removeAttribute('aria-owns');\n }\n }\n });\n this._trackedModals.clear();\n }\n /** Asserts that no content is already attached to the container. */\n _assertNotAttached() {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempting to attach snack bar content after content is already attached');\n }\n }\n /**\n * Starts a timeout to move the snack bar content to the live region so screen readers will\n * announce it.\n */\n _screenReaderAnnounce() {\n if (!this._announceTimeoutId) {\n this._ngZone.runOutsideAngular(() => {\n this._announceTimeoutId = setTimeout(() => {\n const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n if (inertElement && liveElement) {\n // If an element in the snack bar content is focused before being moved\n // track it and restore focus after moving to the live region.\n let focusedElement = null;\n if (this._platform.isBrowser && document.activeElement instanceof HTMLElement && inertElement.contains(document.activeElement)) {\n focusedElement = document.activeElement;\n }\n inertElement.removeAttribute('aria-hidden');\n liveElement.appendChild(inertElement);\n focusedElement?.focus();\n this._onAnnounce.next();\n this._onAnnounce.complete();\n }\n }, this._announceDelay);\n });\n }\n }\n static {\n this.ɵfac = function MatSnackBarContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBarContainer)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(MatSnackBarConfig));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSnackBarContainer,\n selectors: [[\"mat-snack-bar-container\"]],\n viewQuery: function MatSnackBarContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n i0.ɵɵviewQuery(_c0, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._label = _t.first);\n }\n },\n hostAttrs: [1, \"mdc-snackbar\", \"mat-mdc-snack-bar-container\"],\n hostVars: 1,\n hostBindings: function MatSnackBarContainer_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵsyntheticHostListener(\"@state.done\", function MatSnackBarContainer_animation_state_done_HostBindingHandler($event) {\n return ctx.onAnimationEnd($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵsyntheticHostProperty(\"@state\", ctx._animationState);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 6,\n vars: 3,\n consts: [[\"label\", \"\"], [1, \"mdc-snackbar__surface\", \"mat-mdc-snackbar-surface\"], [1, \"mat-mdc-snack-bar-label\"], [\"aria-hidden\", \"true\"], [\"cdkPortalOutlet\", \"\"]],\n template: function MatSnackBarContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2, 0)(3, \"div\", 3);\n i0.ɵɵtemplate(4, MatSnackBarContainer_ng_template_4_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(5, \"div\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(5);\n i0.ɵɵattribute(\"aria-live\", ctx._live)(\"role\", ctx._role)(\"id\", ctx._liveElementId);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}.cdk-high-contrast-active .mat-mdc-snackbar-surface{outline:solid 1px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mdc-snackbar-supporting-text-color, var(--mat-app-inverse-on-surface));border-radius:var(--mdc-snackbar-container-shape, var(--mat-app-corner-extra-small));background-color:var(--mdc-snackbar-container-color, var(--mat-app-inverse-surface))}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mdc-snackbar-supporting-text-font, var(--mat-app-body-medium-font));font-size:var(--mdc-snackbar-supporting-text-size, var(--mat-app-body-medium-size));font-weight:var(--mdc-snackbar-supporting-text-weight, var(--mat-app-body-medium-weight));line-height:var(--mdc-snackbar-supporting-text-line-height, var(--mat-app-body-medium-line-height))}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){--mat-text-button-state-layer-color:currentColor;--mat-text-button-ripple-color:currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled).mat-unthemed{color:var(--mat-snack-bar-button-color, var(--mat-app-inverse-primary))}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1}\"],\n encapsulation: 2,\n data: {\n animation: [matSnackBarAnimations.snackBarState]\n }\n });\n }\n }\n return MatSnackBarContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** @docs-private */\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n return new MatSnackBarConfig();\n}\n/** Injection token that can be used to specify default snack bar. */\nconst MAT_SNACK_BAR_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-snack-bar-default-options', {\n providedIn: 'root',\n factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY\n});\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nlet MatSnackBar = /*#__PURE__*/(() => {\n class MatSnackBar {\n /** Reference to the currently opened snackbar at *any* level. */\n get _openedSnackBarRef() {\n const parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n }\n set _openedSnackBarRef(value) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n } else {\n this._snackBarRefAtThisLevel = value;\n }\n }\n constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n this._overlay = _overlay;\n this._live = _live;\n this._injector = _injector;\n this._breakpointObserver = _breakpointObserver;\n this._parentSnackBar = _parentSnackBar;\n this._defaultConfig = _defaultConfig;\n /**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\n this._snackBarRefAtThisLevel = null;\n /** The component that should be rendered as the snack bar's simple component. */\n this.simpleSnackBarComponent = SimpleSnackBar;\n /** The container component that attaches the provided template or component. */\n this.snackBarContainerComponent = MatSnackBarContainer;\n /** The CSS class to apply for handset mode. */\n this.handsetCssClass = 'mat-mdc-snack-bar-handset';\n }\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @param component Component to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromComponent(component, config) {\n return this._attach(component, config);\n }\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param template Template to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromTemplate(template, config) {\n return this._attach(template, config);\n }\n /**\n * Opens a snackbar with a message and an optional action.\n * @param message The message to show in the snackbar.\n * @param action The label for the snackbar action.\n * @param config Additional configuration options for the snackbar.\n */\n open(message, action = '', config) {\n const _config = {\n ...this._defaultConfig,\n ...config\n };\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = {\n message,\n action\n };\n // Since the snack bar has `role=\"alert\"`, we don't\n // want to announce the same message twice.\n if (_config.announcementMessage === message) {\n _config.announcementMessage = undefined;\n }\n return this.openFromComponent(this.simpleSnackBarComponent, _config);\n }\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss() {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n ngOnDestroy() {\n // Only dismiss the snack bar at the current level on destroy.\n if (this._snackBarRefAtThisLevel) {\n this._snackBarRefAtThisLevel.dismiss();\n }\n }\n /**\n * Attaches the snack bar container component to the overlay.\n */\n _attachSnackBarContainer(overlayRef, config) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{\n provide: MatSnackBarConfig,\n useValue: config\n }]\n });\n const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n const containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n }\n /**\n * Places a new component or a template as the content of the snack bar container.\n */\n _attach(content, userConfig) {\n const config = {\n ...new MatSnackBarConfig(),\n ...this._defaultConfig,\n ...userConfig\n };\n const overlayRef = this._createOverlay(config);\n const container = this._attachSnackBarContainer(overlayRef, config);\n const snackBarRef = new MatSnackBarRef(container, overlayRef);\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null, {\n $implicit: config.data,\n snackBarRef\n });\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n }\n // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n // appropriate. This class is applied to the overlay element because the overlay must expand to\n // fill the width of the screen for full width snackbars.\n this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {\n overlayRef.overlayElement.classList.toggle(this.handsetCssClass, state.matches);\n });\n if (config.announcementMessage) {\n // Wait until the snack bar contents have been announced then deliver this message.\n container._onAnnounce.subscribe(() => {\n this._live.announce(config.announcementMessage, config.politeness);\n });\n }\n this._animateSnackBar(snackBarRef, config);\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n }\n /** Animates the old snack bar out and the new one in. */\n _animateSnackBar(snackBarRef, config) {\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(() => {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (this._openedSnackBarRef == snackBarRef) {\n this._openedSnackBarRef = null;\n }\n if (config.announcementMessage) {\n this._live.clear();\n }\n });\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(() => {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n } else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (config.duration && config.duration > 0) {\n snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));\n }\n }\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified snack bar config.\n */\n _createOverlay(config) {\n const overlayConfig = new OverlayConfig();\n overlayConfig.direction = config.direction;\n let positionStrategy = this._overlay.position().global();\n // Set horizontal position.\n const isRtl = config.direction === 'rtl';\n const isLeft = config.horizontalPosition === 'left' || config.horizontalPosition === 'start' && !isRtl || config.horizontalPosition === 'end' && isRtl;\n const isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n } else if (isRight) {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n overlayConfig.positionStrategy = positionStrategy;\n return this._overlay.create(overlayConfig);\n }\n /**\n * Creates an injector to be used inside of a snack bar component.\n * @param config Config that was used to create the snack bar.\n * @param snackBarRef Reference to the snack bar.\n */\n _createInjector(config, snackBarRef) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [{\n provide: MatSnackBarRef,\n useValue: snackBarRef\n }, {\n provide: MAT_SNACK_BAR_DATA,\n useValue: config.data\n }]\n });\n }\n static {\n this.ɵfac = function MatSnackBar_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBar)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i2.LiveAnnouncer), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i3.BreakpointObserver), i0.ɵɵinject(MatSnackBar, 12), i0.ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatSnackBar,\n factory: MatSnackBar.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatSnackBar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DIRECTIVES = [MatSnackBarContainer, MatSnackBarLabel, MatSnackBarActions, MatSnackBarAction];\nlet MatSnackBarModule = /*#__PURE__*/(() => {\n class MatSnackBarModule {\n static {\n this.ɵfac = function MatSnackBarModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSnackBarModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatSnackBarModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatSnackBar],\n imports: [OverlayModule, PortalModule, MatButtonModule, MatCommonModule, SimpleSnackBar, MatCommonModule]\n });\n }\n }\n return MatSnackBarModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SNACK_BAR_DATA, MAT_SNACK_BAR_DEFAULT_OPTIONS, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MatSnackBar, MatSnackBarAction, MatSnackBarActions, MatSnackBarConfig, MatSnackBarContainer, MatSnackBarLabel, MatSnackBarModule, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };\n","import { Component, OnInit } from \"@angular/core\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\nimport { environment } from \"src/environments/environment\";\n\n@Component({\n templateUrl: \"./update-app.component.html\",\n styleUrls: [\"./update-app.component.scss\"],\n})\nexport class UpdateAppComponent implements OnInit {\n cdnHost = environment.cdnHost;\n\n constructor(public dialogRef: MatDialogRef) {}\n\n ngOnInit(): void {\n this.dialogRef.addPanelClass(\"myqq-update-dialog\");\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","
\n

Looks Like myQQ Needs An Update!

\n
\n\n\n

To use this app, please update to the latest version.

\n \n
\n \n Update\n \n
\n
\n","import { Inject, Injectable } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { Router } from \"@angular/router\";\nimport { SwUpdate } from \"@angular/service-worker\";\n\nimport { switchMap } from \"rxjs/operators\";\n\nimport { WINDOW } from \"src/app/core/services/window.service\";\nimport { UpdateAppComponent } from \"../components/update-app/update-app.component\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class PwaUpdatePromptService {\n constructor(\n private matSnackBar: MatSnackBar,\n private swUpdate: SwUpdate,\n private router: Router,\n private dialog: MatDialog,\n @Inject(WINDOW) private window: Window\n ) {}\n\n promptForUpdate() {\n this.matSnackBar\n .open(\"An update is available for myQQ!\", \"Update\")\n .onAction()\n .pipe(switchMap(() => this.swUpdate.activateUpdate()))\n .subscribe(() => {\n this.router.navigate([\"/\"]).then(() => this.window.location.reload());\n });\n }\n\n promptForAndroidDownload() {\n this.matSnackBar\n .open(\"Download our new and improved Android app!\", \"Download\")\n .onAction()\n .subscribe(() => {\n this.downloadAndroidApp();\n });\n }\n\n downloadAndroidApp() {\n window.open(\n \"https://play.google.com/store/apps/details?id=com.dontdrivedirty.myqq.twa\",\n \"_blank\"\n );\n }\n\n forceUpdate() {\n const dialog = this.dialog.open(UpdateAppComponent, {\n disableClose: true,\n });\n\n dialog\n .afterClosed()\n .pipe(switchMap(() => this.swUpdate.activateUpdate()))\n .subscribe(() => {\n this.router.navigate([\"/\"]).then(() => this.window.location.reload());\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\nimport { Platform } from \"@angular/cdk/platform\";\nimport { Router } from \"@angular/router\";\nimport { SwUpdate } from \"@angular/service-worker\";\n\nimport { Store } from \"@ngrx/store\";\nimport { interval, Observable } from \"rxjs\";\n\nimport { log, LogAction, LogLevels } from \"src/app/core/ngrx/logger\";\nimport { WINDOW } from \"src/app/core/services/window.service\";\nimport { environment } from \"src/environments/environment\";\n\nimport { PwaUpdatePromptService } from \"./pwa-update-prompt.service\";\nimport { isReplete } from \"@nll/datum/Datum\";\nimport { isSuccess } from \"@nll/datum/DatumEither\";\nimport { getAppMinVersion, selectAppMinVersion } from \"src/app/core/ngrx/myqq\";\nimport { filter, skip, take } from \"rxjs/operators\";\nimport { version } from \"src/environments/version\";\nimport * as semver from \"semver\";\nimport { UnleashService } from \"./unleash.service\";\n\ninterface RelatedApp {\n id: string;\n platform: string;\n url?: string;\n}\n\nconst pwaMode = environment.pwaMode;\nconst twaId = environment.twaId;\nconst checkUpdateInterval = 1; // Hours\n\n/**\n * This service handles various ancillary PWA-related tasks, such as:\n * - Prompt users to install, as appropriate for device, in not-too-naggy intervals\n * - Check for updates and prompt to reload if using an old version\n * - Try to determine if myQQ is running as a PWA/TWA (=== in standalone mode) and if the TWA binary is installed on the device.\n *\n * @todo unit test\n */\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class PwaService {\n public pwaMode: string;\n public isInStandaloneMode: boolean;\n public isMobile: boolean;\n public device: \"ios\" | \"android\" | \"unknown\";\n public isInstalled: boolean = null; // Is the TWA installed on this device, regardless of whether it is being used now?\n\n constructor(\n private swUpdate: SwUpdate,\n private platform: Platform,\n private store$: Store,\n private pwaUpdatePrompt: PwaUpdatePromptService,\n private router: Router,\n private unleashService: UnleashService,\n @Inject(WINDOW) private window: Window\n ) {\n this.isInStandaloneMode =\n (pwaMode in (this.window?.navigator ?? {}) &&\n this.window?.navigator?.[pwaMode]) || // iOS only\n this.window?.matchMedia?.(`(display-mode: ${pwaMode})`)?.matches; // Chrome\n\n // Handle the case where user changes display mode after launching app\n this.window?.sessionStorage?.setItem?.(\n \"wasInStandaloneMode\",\n this.isInStandaloneMode ? \"true\" : \"false\"\n );\n\n this.isMobile = this.platform.IOS || this.platform.ANDROID;\n\n this.device = this.platform.IOS\n ? \"ios\"\n : this.platform.ANDROID\n ? \"android\"\n : \"unknown\";\n\n // getInstalledRelatedApps will return a list of native apps installed on the device IF:\n // - The app id is specified in the website manifest\n // - The website domain is specified in the native app strings.xml\n // See https://medium.com/dev-channel/detect-if-your-native-app-is-installed-from-your-web-site-2e690b7cb6fb\n if (\n twaId &&\n typeof (this.window?.navigator as any)?.getInstalledRelatedApps ===\n \"function\"\n ) {\n (this.window.navigator as any)\n .getInstalledRelatedApps()\n .then((apps: RelatedApp[]) => {\n this.isInstalled =\n Array.isArray(apps) && apps.map((app) => app.id).includes(twaId);\n });\n }\n }\n\n readonly enableAndroidFlag$: Observable = this.unleashService\n .enableAndroidRelease$;\n\n public initPwaService() {\n this.handleCheckUpdates();\n }\n\n public get standalone() {\n return (\n this.isInStandaloneMode ||\n this.window?.sessionStorage?.getItem?.(\"wasInStandaloneMode\") === \"true\"\n );\n }\n\n public get installed() {\n return this.isInstalled;\n }\n\n handleCheckUpdates() {\n this.store$.dispatch(getAppMinVersion.pending(null));\n // When the service worker detects an update, prompt user to reload the application\n this.swUpdate.versionUpdates.subscribe((evt) => {\n switch (evt.type) {\n case \"VERSION_DETECTED\":\n this.pwaLog(`Downloading new app version: ${evt.version.hash}`);\n break;\n case \"VERSION_READY\":\n this.pwaLog(\n `Current app version: ${evt.currentVersion.hash}, ${evt.latestVersion.hash}`\n );\n this.store$\n .select(selectAppMinVersion)\n .pipe(filter(isReplete))\n .subscribe((resp) => {\n this.enableAndroidFlag$\n .pipe(skip(1), take(1))\n .subscribe((androidFlag) => {\n if (androidFlag && this.device == \"android\") {\n this.pwaUpdatePrompt.promptForAndroidDownload();\n } else {\n if (\n isSuccess(resp) &&\n semver.lt(version.version, resp.value.right?.web?.minimum)\n ) {\n this.pwaLog(\n `Forced Update: ${version.version}, ${resp.value.right?.web?.minimum}`\n );\n this.pwaUpdatePrompt.forceUpdate();\n } else {\n this.pwaLog(`Optional Update: ${version.version}`);\n //This will show when flag is off\n this.pwaUpdatePrompt.promptForUpdate();\n }\n }\n });\n });\n break;\n case \"VERSION_INSTALLATION_FAILED\":\n this.pwaLog(\n `Failed to install app version '${evt.version.hash}': ${evt.error}`\n );\n break;\n }\n });\n\n // Poll for updates.\n interval(checkUpdateInterval * 60 * 1000).subscribe(() => {\n this.swUpdate.checkForUpdate().catch((e) => {\n this.pwaLog(\"Failed to check for update.\", e, LogLevels.WARNING);\n });\n });\n }\n\n pwaLog(msg: string, error?: Error, level: LogLevels = LogLevels.INFO) {\n const logContents: LogAction = {\n level: level,\n message: msg,\n actionType: {\n name: \"PWA_SERVICE\",\n type: [LogLevels.ERROR, LogLevels.WARNING, LogLevels.FATAL].includes(\n level\n )\n ? \"FAILURE\"\n : \"SUCCESS\",\n namespace: \"MYQQ\",\n },\n };\n\n if (error) {\n logContents.data = {\n error: error,\n };\n }\n\n this.store$.dispatch(log(logContents));\n }\n\n public updateAndReload() {\n this.swUpdate\n .checkForUpdate()\n .then(() => {\n return this.swUpdate.activateUpdate();\n })\n .then(() => this.router.navigate([\"/\"]))\n .then(() => this.window.location.reload())\n .catch((e) => {\n this.pwaLog(\"Failed to update and reload\", e, LogLevels.ERROR);\n this.router.navigate([\"/\"]);\n });\n }\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport { fromEvent, animationFrameScheduler, BehaviorSubject } from \"rxjs\";\nimport { throttleTime } from \"rxjs/operators\";\n\nimport { WINDOW } from \"src/app/core/services/window.service\";\nimport { environment } from \"src/environments/environment\";\n\ntype ResizeListener = (event: Event) => void;\n\n/**\n * Service to add/remove listeners to resize events.\n * Include a default isMobile listener.\n */\n@Injectable({\n providedIn: \"root\",\n})\nexport class ResizeService {\n constructor(@Inject(WINDOW) private window: Window) {\n fromEvent(this.window, \"resize\")\n .pipe(throttleTime(0, animationFrameScheduler))\n .subscribe(this.runListeners.bind(this));\n }\n\n _isMobile$ = new BehaviorSubject(\n this.window.innerWidth < environment.mobileBreakpoint\n );\n\n checkMobile = (_) => {\n if (\n this.isMobile$.value !==\n this.window.innerWidth < environment.mobileBreakpoint\n ) {\n this._isMobile$.next(!this.isMobile$.value);\n }\n };\n\n // tslint:disable-next-line:member-ordering\n listeners: ResizeListener[] = [this.checkMobile];\n\n get isMobile$() {\n return this._isMobile$;\n }\n\n addListener(listener: ResizeListener): void {\n this.listeners.push(listener);\n }\n\n removeListener(listener: ResizeListener): void {\n this.listeners = this.listeners.filter((l) => l !== listener);\n }\n\n runListeners(event: Event): void {\n this.listeners.forEach((listener) => listener(event));\n }\n}\n","import { Component, Inject, Input, OnInit } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { Store } from \"@ngrx/store\";\n\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { environment } from \"src/environments/environment\";\nimport { KeycloakService } from \"keycloak-angular\";\n\nimport { selectAccountLinked } from \"src/app/core/ngrx/myqq\";\n\nimport { WINDOW } from \"src/app/core/services/window.service\";\nimport { OfflineAuthService } from \"src/app/core/services/offline-auth.service\";\nimport { PwaService } from \"src/app/shared/services/pwa.service\";\nimport { ResizeService } from \"../../services/resize.service\";\nimport { getRedirectUri } from \"src/app/core/keycloak/keycloak.utils\";\nimport { UnleashService } from \"../../services/unleash.service\";\n\nexport interface Link {\n url: string;\n title: string;\n classes?: string;\n allowUnauth: boolean;\n allowWithoutAccount: boolean;\n icon?: {\n svg: boolean;\n name: string;\n noText: boolean;\n };\n}\n\n@Component({\n selector: \"myqq-default-layout\",\n templateUrl: \"./default-layout.page.html\",\n})\nexport class DefaultLayoutComponent implements OnInit {\n @Input()\n pageTitle = \"myQQ\";\n @Input()\n greenBackground: boolean;\n @Input()\n loginRedirectUri?: string;\n @Input()\n logoutRedirectUri?: string;\n @Input()\n registerRedirectUri?: string;\n\n isMobile: BehaviorSubject;\n\n readonly accountLinked$ = this.store$.select(selectAccountLinked);\n readonly enableFriendBuy$: Observable = this.unleashService\n .enableFriendBuy$;\n\n readonly homeLink: Link = {\n title: \"Home\",\n url: \"\",\n classes: \"mainlogo\",\n allowUnauth: true,\n allowWithoutAccount: true,\n icon: {\n svg: true,\n name: \"home\",\n noText: false,\n },\n };\n\n readonly referralLink: Link = {\n title: \"Referrals\",\n url: \"/refer\",\n allowUnauth: true,\n allowWithoutAccount: true,\n icon: {\n svg: true,\n name: \"people\",\n noText: false,\n },\n };\n\n readonly profileLink: Link = {\n title: \"Account\",\n url: \"/account\",\n allowUnauth: false,\n allowWithoutAccount: false,\n icon: {\n svg: true,\n name: \"account_circle\",\n noText: false,\n },\n };\n\n readonly accountLinks: Link[] = [\n {\n title: \"Vehicles\",\n url: \"/vehicles\",\n allowUnauth: false,\n allowWithoutAccount: false,\n icon: {\n svg: true,\n name: \"directions_car\",\n noText: false,\n },\n },\n {\n title: \"Wallet\",\n url: \"/membership\",\n allowUnauth: false,\n allowWithoutAccount: false,\n icon: {\n svg: true,\n name: \"wallet\",\n noText: false,\n },\n },\n {\n title: \"Location\",\n url: \"/locations\",\n allowUnauth: true,\n allowWithoutAccount: true,\n icon: {\n svg: true,\n name: \"place\",\n noText: false,\n },\n },\n ];\n\n readonly mobileAccountLinks: Link[] = [\n this.profileLink,\n ...this.accountLinks,\n ];\n\n allowAccess$: BehaviorSubject;\n online$: Observable;\n\n constructor(\n readonly keycloakSvc: KeycloakService,\n readonly offlineAuth: OfflineAuthService,\n readonly store$: Store,\n readonly promptService: PwaService,\n private titleService: Title,\n private resize: ResizeService,\n private unleashService: UnleashService,\n @Inject(WINDOW) private window: Window\n ) {\n this.isMobile = this.resize.isMobile$;\n this.allowAccess$ = this.offlineAuth.allowAccess$;\n this.online$ = this.offlineAuth.online$;\n }\n\n ngOnInit() {\n this.titleService.setTitle(`${this.pageTitle} | myQQ`);\n }\n\n handleAuthentication(loggedIn: boolean) {\n const { redirectUri } = getRedirectUri();\n\n if (loggedIn) {\n this.keycloakSvc.logout(\n this.logoutRedirectUri ?? this.window.location.origin\n );\n } else {\n const options = environment.keycloak.loginOptions;\n options.redirectUri = this.loginRedirectUri || redirectUri;\n this.keycloakSvc.login(options);\n }\n }\n\n handleRegister() {\n const { redirectUri } = getRedirectUri();\n this.keycloakSvc.register({\n redirectUri: this.registerRedirectUri || redirectUri,\n });\n }\n}\n","\n \n\n\n \n\n\n\n \n\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { SOCIAL_MEDIA_LINKS } from \"src/app/core/services/myqq/myqq.consts\";\n\n@Component({\n selector: \"myqq-social\",\n templateUrl: \"./social.component.html\",\n styleUrls: [\"./social.component.scss\"],\n})\nexport class SocialComponent implements OnInit {\n @Input() instagram: string;\n @Input() facebook: string;\n @Input() snapchat: string;\n @Input() twitter: string;\n @Input() youtube: string;\n\n @Input() color: string;\n\n accounts: {\n instagram: string;\n facebook: string;\n snapchat: string;\n twitter: string;\n youtube: string;\n };\n\n readonly uri = SOCIAL_MEDIA_LINKS;\n\n constructor() {}\n\n ngOnInit(): void {\n this.accounts = {\n instagram: this.instagram,\n facebook: this.facebook,\n snapchat: this.snapchat,\n twitter: this.twitter,\n youtube: this.youtube,\n };\n }\n}\n","\n {{ account.key }}\n\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\nimport { SocialComponent } from \"./social.component\";\n\n@NgModule({\n declarations: [SocialComponent],\n imports: [CommonModule, MatIconModule],\n exports: [SocialComponent],\n})\nexport class SocialModule {}\n","import { Component, Input } from \"@angular/core\";\nimport { environment } from \"src/environments/environment\";\n\n@Component({\n selector: \"myqq-footer\",\n templateUrl: \"./footer.component.html\",\n styleUrls: [\"./footer.component.scss\"],\n})\nexport class FooterComponent {\n @Input()\n public showBadge: boolean = true;\n\n readonly copyrightNotice = `© ${new Date()\n .getFullYear()\n .toString()} Quick Quack Car Wash. All rights reserved.`;\n\n readonly links = [\n {\n title: \"Terms of Use\",\n url: environment.termsOfUse,\n id: \"terms\",\n },\n {\n title: \"Privacy Policy\",\n url: environment.privacyPolicy,\n id: \"privacy\",\n },\n {\n title: \"CCPA (CA Consumers)\",\n url: environment.ccpa,\n id: \"ccpa\",\n },\n ];\n}\n","
\n \n \n\n \n\n

\n {{ copyrightNotice }}\n

\n
\n\n
\n

\n Download the App:\n

\n
\n \n \n \n \n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { SocialModule } from \"../social/social.module\";\nimport { FooterComponent } from \"./footer.component\";\n\n@NgModule({\n declarations: [FooterComponent],\n imports: [CommonModule, SocialModule],\n exports: [FooterComponent],\n})\nexport class FooterModule {}\n","import * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, EventEmitter, inject, Injector, ChangeDetectorRef, afterNextRender, Optional, Input, Output, ViewChild, QueryList, AfterRenderPhase, ANIMATION_MODULE_TYPE, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nconst _c0 = [\"*\"];\nconst _c1 = [\"content\"];\nconst _c2 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c3 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatDrawerContainer_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1);\n i0.ɵɵlistener(\"click\", function MatDrawerContainer_Conditional_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onBackdropClicked());\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r1._isShowingBackdrop());\n }\n}\nfunction MatDrawerContainer_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-drawer-content\");\n i0.ɵɵprojection(1, 2);\n i0.ɵɵelementEnd();\n }\n}\nconst _c4 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c5 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nfunction MatSidenavContainer_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1);\n i0.ɵɵlistener(\"click\", function MatSidenavContainer_Conditional_0_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._onBackdropClicked());\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r1._isShowingBackdrop());\n }\n}\nfunction MatSidenavContainer_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-sidenav-content\");\n i0.ɵɵprojection(1, 2);\n i0.ɵɵelementEnd();\n }\n}\nconst _c6 = \".mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-app-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-app-background));box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color)}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-app-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow);background-color:var(--mat-sidenav-container-background-color, var(--mat-app-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));width:var(--mat-sidenav-container-width);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\";\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: /*#__PURE__*/trigger('transform', [\n /*#__PURE__*/\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', /*#__PURE__*/style({\n 'transform': 'none',\n 'visibility': 'visible'\n })), /*#__PURE__*/state('void', /*#__PURE__*/style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden'\n })), /*#__PURE__*/transition('void => open-instant', /*#__PURE__*/animate('0ms')), /*#__PURE__*/transition('void <=> open, open-instant => void', /*#__PURE__*/animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))])\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = /*#__PURE__*/new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = /*#__PURE__*/new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nlet MatDrawerContent = /*#__PURE__*/(() => {\n class MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n static {\n this.ɵfac = function MatDrawerContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawerContent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawerContent,\n selectors: [[\"mat-drawer-content\"]],\n hostAttrs: [1, \"mat-drawer-content\"],\n hostVars: 4,\n hostBindings: function MatDrawerContent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkScrollable,\n useExisting: MatDrawerContent\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatDrawerContent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDrawerContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nlet MatDrawer = /*#__PURE__*/(() => {\n class MatDrawer {\n /** The side that the drawer is attached to. */\n get position() {\n return this._position;\n }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value !== this._position) {\n // Static inputs in Ivy are set before the element is in the DOM.\n if (this._isAttached) {\n this._updatePositionInParent(value);\n }\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() {\n return this._disableClose;\n }\n set disableClose(value) {\n this._disableClose = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n * instead.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n // because we don't know how the sidenav is being used, but in some cases it still makes\n // sense to do it. The consumer can explicitly set `autoFocus`.\n if (value == null) {\n if (this.mode === 'side') {\n return 'dialog';\n } else {\n return 'first-tabbable';\n }\n }\n return value;\n }\n set autoFocus(value) {\n if (value === 'true' || value === 'false' || value == null) {\n value = coerceBooleanProperty(value);\n }\n this._autoFocus = value;\n }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n this.toggle(coerceBooleanProperty(value));\n }\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._interactivityChecker = _interactivityChecker;\n this._doc = _doc;\n this._container = _container;\n this._focusTrap = null;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this._injector = inject(Injector);\n this._changeDetectorRef = inject(ChangeDetectorRef);\n this.openedChange.pipe(takeUntil(this._destroyed)).subscribe(opened => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n } else if (this._isFocusWithinDrawer()) {\n this._restoreFocus(this._openedVia || 'program');\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n this._animationEnd.subscribe(event => {\n const {\n fromState,\n toState\n } = event;\n if (toState.indexOf('open') === 0 && fromState === 'void' || toState === 'void' && fromState.indexOf('open') === 0) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this._focusTrap) {\n return;\n }\n const element = this._elementRef.nativeElement;\n // When autoFocus is not on the sidenav, if the element cannot be focused or does\n // not exist, focus the sidenav itself so the keyboard navigation still works.\n // We need to check that `focus` is a function due to Universal.\n switch (this.autoFocus) {\n case false:\n case 'dialog':\n return;\n case true:\n case 'first-tabbable':\n afterNextRender(() => {\n const hasMovedFocus = this._focusTrap.focusInitialElement();\n if (!hasMovedFocus && typeof element.focus === 'function') {\n element.focus();\n }\n }, {\n injector: this._injector\n });\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.autoFocus);\n break;\n }\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus(focusOrigin) {\n if (this.autoFocus === 'dialog') {\n return;\n }\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n } else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n const activeEl = this._doc.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterViewInit() {\n this._isAttached = true;\n // Only update the DOM position when the sidenav is positioned at\n // the end since we project the sidenav before the content by default.\n if (this._position === 'end') {\n this._updatePositionInParent('end');\n }\n // Needs to happen after the position is updated\n // so the focus trap anchors are in the right place.\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n this._focusTrap?.destroy();\n this._anchor?.remove();\n this._anchor = null;\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurs the active element.\n return this._setOpen(/* isOpen */false, /* restoreFocus */true, 'mouse');\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n if (isOpen && openedVia) {\n this._openedVia = openedVia;\n }\n const result = this._setOpen(isOpen, /* restoreFocus */!isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');\n if (!isOpen) {\n this._openedVia = null;\n }\n return result;\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param focusOrigin Origin to use when restoring focus.\n */\n _setOpen(isOpen, restoreFocus, focusOrigin) {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n } else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus(focusOrigin);\n }\n }\n // Needed to ensure that the closing sequence fires off correctly.\n this._changeDetectorRef.markForCheck();\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? this._elementRef.nativeElement.offsetWidth || 0 : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // Trap focus only if the backdrop is enabled. Otherwise, allow end user to interact with the\n // sidenav content.\n this._focusTrap.enabled = !!this._container?.hasBackdrop && this.opened;\n }\n }\n /**\n * Updates the position of the drawer in the DOM. We need to move the element around ourselves\n * when it's in the `end` position so that it comes after the content and the visual order\n * matches the tab order. We also need to be able to move it back to `start` if the sidenav\n * started off as `end` and was changed to `start`.\n */\n _updatePositionInParent(newPosition) {\n // Don't move the DOM node around on the server, because it can throw off hydration.\n if (!this._platform.isBrowser) {\n return;\n }\n const element = this._elementRef.nativeElement;\n const parent = element.parentNode;\n if (newPosition === 'end') {\n if (!this._anchor) {\n this._anchor = this._doc.createComment('mat-drawer-anchor');\n parent.insertBefore(this._anchor, element);\n }\n parent.appendChild(element);\n } else if (this._anchor) {\n this._anchor.parentNode.insertBefore(element, this._anchor);\n }\n }\n static {\n this.ɵfac = function MatDrawer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.FocusTrapFactory), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i3.Platform), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.InteractivityChecker), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawer,\n selectors: [[\"mat-drawer\"]],\n viewQuery: function MatDrawer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c1, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n }\n },\n hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"],\n hostVars: 12,\n hostBindings: function MatDrawer_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) {\n return ctx._animationStarted.next($event);\n })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) {\n return ctx._animationEnd.next($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n }\n },\n inputs: {\n position: \"position\",\n mode: \"mode\",\n disableClose: \"disableClose\",\n autoFocus: \"autoFocus\",\n opened: \"opened\"\n },\n outputs: {\n openedChange: \"openedChange\",\n _openedStream: \"opened\",\n openedStart: \"openedStart\",\n _closedStream: \"closed\",\n closedStart: \"closedStart\",\n onPositionChanged: \"positionChanged\"\n },\n exportAs: [\"matDrawer\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 0,\n consts: [[\"content\", \"\"], [\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]],\n template: function MatDrawer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n dependencies: [CdkScrollable],\n encapsulation: 2,\n data: {\n animation: [matDrawerAnimations.transformDrawer]\n },\n changeDetection: 0\n });\n }\n }\n return MatDrawer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nlet MatDrawerContainer = /*#__PURE__*/(() => {\n class MatDrawerContainer {\n /** The drawer child with the `start` position. */\n get start() {\n return this._start;\n }\n /** The drawer child with the `end` position. */\n get end() {\n return this._end;\n }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() {\n return this._autosize;\n }\n set autosize(value) {\n this._autosize = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n return this._drawerHasBackdrop(this._start) || this._drawerHasBackdrop(this._end);\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = {\n left: null,\n right: null\n };\n this._contentMarginChanges = new Subject();\n this._injector = inject(Injector);\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change().pipe(takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n ngAfterContentInit() {\n this._allDrawers.changes.pipe(startWith(this._allDrawers), takeUntil(this._destroyed)).subscribe(drawer => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach(drawer => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length || this._isDrawerOpen(this._start) || this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(debounceTime(10),\n // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n } else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n } else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {\n left,\n right\n };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted.pipe(filter(event => event.fromState !== event.toState), takeUntil(this._drawers.changes)).subscribe(event => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n afterNextRender(() => {\n this._validateDrawers();\n }, {\n injector: this._injector,\n phase: AfterRenderPhase.Read\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed))).subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return this._isDrawerOpen(this._start) && this._start.mode != 'over' || this._isDrawerOpen(this._end) && this._end.mode != 'over';\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end].filter(drawer => drawer && !drawer.disableClose && this._drawerHasBackdrop(drawer)).forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return this._isDrawerOpen(this._start) && this._drawerHasBackdrop(this._start) || this._isDrawerOpen(this._end) && this._drawerHasBackdrop(this._end);\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n // Whether argument drawer should have a backdrop when it opens\n _drawerHasBackdrop(drawer) {\n if (this._backdropOverride == null) {\n return !!drawer && drawer.mode !== 'side';\n }\n return this._backdropOverride;\n }\n static {\n this.ɵfac = function MatDrawerContainer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatDrawerContainer)(i0.ɵɵdirectiveInject(i4.Directionality, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ViewportRuler), i0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDrawerContainer,\n selectors: [[\"mat-drawer-container\"]],\n contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatDrawerContent, 5);\n i0.ɵɵcontentQuery(dirIndex, MatDrawer, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n }\n },\n viewQuery: function MatDrawerContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatDrawerContent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n }\n },\n hostAttrs: [1, \"mat-drawer-container\"],\n hostVars: 2,\n hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n }\n },\n inputs: {\n autosize: \"autosize\",\n hasBackdrop: \"hasBackdrop\"\n },\n outputs: {\n backdropClick: \"backdropClick\"\n },\n exportAs: [\"matDrawerContainer\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }]), i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 4,\n vars: 2,\n consts: [[1, \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]],\n template: function MatDrawerContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c2);\n i0.ɵɵtemplate(0, MatDrawerContainer_Conditional_0_Template, 1, 2, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵtemplate(3, MatDrawerContainer_Conditional_3_Template, 2, 0, \"mat-drawer-content\");\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx.hasBackdrop ? 0 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(!ctx._content ? 3 : -1);\n }\n },\n dependencies: [MatDrawerContent],\n styles: [\".mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-app-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-app-background));box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color)}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-app-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow);background-color:var(--mat-sidenav-container-background-color, var(--mat-app-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));width:var(--mat-sidenav-container-width);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-app-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDrawerContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavContent = /*#__PURE__*/(() => {\n class MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n static {\n this.ɵfac = function MatSidenavContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSidenavContent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ScrollDispatcher), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenavContent,\n selectors: [[\"mat-sidenav-content\"]],\n hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"],\n hostVars: 4,\n hostBindings: function MatSidenavContent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkScrollable,\n useExisting: MatSidenavContent\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatSidenavContent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatSidenavContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenav = /*#__PURE__*/(() => {\n class MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() {\n return this._fixedInViewport;\n }\n set fixedInViewport(value) {\n this._fixedInViewport = coerceBooleanProperty(value);\n }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() {\n return this._fixedTopGap;\n }\n set fixedTopGap(value) {\n this._fixedTopGap = coerceNumberProperty(value);\n }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() {\n return this._fixedBottomGap;\n }\n set fixedBottomGap(value) {\n this._fixedBottomGap = coerceNumberProperty(value);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatSidenav_BaseFactory;\n return function MatSidenav_Factory(__ngFactoryType__) {\n return (ɵMatSidenav_BaseFactory || (ɵMatSidenav_BaseFactory = i0.ɵɵgetInheritedFactory(MatSidenav)))(__ngFactoryType__ || MatSidenav);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenav,\n selectors: [[\"mat-sidenav\"]],\n hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"],\n hostVars: 17,\n hostBindings: function MatSidenav_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n i0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n }\n },\n inputs: {\n fixedInViewport: \"fixedInViewport\",\n fixedTopGap: \"fixedTopGap\",\n fixedBottomGap: \"fixedBottomGap\"\n },\n exportAs: [\"matSidenav\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 3,\n vars: 0,\n consts: [[\"content\", \"\"], [\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]],\n template: function MatSidenav_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelementEnd();\n }\n },\n dependencies: [CdkScrollable],\n encapsulation: 2,\n data: {\n animation: [matDrawerAnimations.transformDrawer]\n },\n changeDetection: 0\n });\n }\n }\n return MatSidenav;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavContainer = /*#__PURE__*/(() => {\n class MatSidenavContainer extends MatDrawerContainer {\n constructor() {\n super(...arguments);\n this._allDrawers = undefined;\n // We need an initializer here to avoid a TS error.\n this._content = undefined;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatSidenavContainer_BaseFactory;\n return function MatSidenavContainer_Factory(__ngFactoryType__) {\n return (ɵMatSidenavContainer_BaseFactory || (ɵMatSidenavContainer_BaseFactory = i0.ɵɵgetInheritedFactory(MatSidenavContainer)))(__ngFactoryType__ || MatSidenavContainer);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSidenavContainer,\n selectors: [[\"mat-sidenav-container\"]],\n contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatSidenavContent, 5);\n i0.ɵɵcontentQuery(dirIndex, MatSidenav, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._content = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n }\n },\n hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"],\n hostVars: 2,\n hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n }\n },\n exportAs: [\"matSidenavContainer\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c5,\n decls: 4,\n vars: 2,\n consts: [[1, \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]],\n template: function MatSidenavContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c4);\n i0.ɵɵtemplate(0, MatSidenavContainer_Conditional_0_Template, 1, 2, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵtemplate(3, MatSidenavContainer_Conditional_3_Template, 2, 0, \"mat-sidenav-content\");\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx.hasBackdrop ? 0 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵconditional(!ctx._content ? 3 : -1);\n }\n },\n dependencies: [MatSidenavContent],\n styles: [_c6],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatSidenavContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSidenavModule = /*#__PURE__*/(() => {\n class MatSidenavModule {\n static {\n this.ɵfac = function MatSidenavModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatSidenavModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatSidenavModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CdkScrollableModule, CdkScrollableModule, MatCommonModule]\n });\n }\n }\n return MatSidenavModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Optional, Inject, inject, Input, ANIMATION_MODULE_TYPE, ContentChildren, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, EventEmitter, Output, forwardRef, ChangeDetectorRef, NgModule } from '@angular/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { RippleRenderer, MAT_RIPPLE_GLOBAL_OPTIONS, MatCommonModule, MatRippleModule, MatPseudoCheckboxModule } from '@angular/material/core';\nimport { Subscription, merge, Subject } from 'rxjs';\nimport { CdkObserveContent, ObserversModule } from '@angular/cdk/observers';\nimport { NgTemplateOutlet, CommonModule } from '@angular/common';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ENTER, SPACE, A, hasModifierKey } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Injection token that can be used to reference instances of an `ListOption`. It serves\n * as alternative token to an actual implementation which could result in undesired\n * retention of the class or circular references breaking runtime execution.\n * @docs-private\n */\nconst _c0 = [\"*\"];\nconst _c1 = \".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mdc-list-list-item-container-color);border-radius:var(--mdc-list-list-item-container-shape, var(--mat-app-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mdc-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mdc-list-list-item-one-line-container-height)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mdc-list-list-item-two-line-container-height)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mdc-list-list-item-three-line-container-height)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.cdk-high-contrast-active .mdc-list-item.mdc-list-item--selected::before,.cdk-high-contrast-active .mdc-list-item.mdc-list-item--selected:focus::before,.cdk-high-contrast-active .mdc-list-item:not(.mdc-list-item--selected):focus::before{border-color:CanvasText}.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item.mdc-list-item--selected::before{border-width:3px;border-style:double}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mdc-list-list-item-leading-icon-color, var(--mat-app-on-surface-variant));width:var(--mdc-list-list-item-leading-icon-size);height:var(--mdc-list-list-item-leading-icon-size);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mdc-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mdc-list-list-item-leading-avatar-size);height:var(--mdc-list-list-item-leading-avatar-size);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mdc-list-list-item-trailing-supporting-text-font, var(--mat-app-label-small-font));line-height:var(--mdc-list-list-item-trailing-supporting-text-line-height, var(--mat-app-label-small-line-height));font-size:var(--mdc-list-list-item-trailing-supporting-text-size, var(--mat-app-label-small-size));font-weight:var(--mdc-list-list-item-trailing-supporting-text-weight, var(--mat-app-label-small-weight));letter-spacing:var(--mdc-list-list-item-trailing-supporting-text-tracking, var(--mat-app-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mdc-list-list-item-trailing-icon-color, var(--mat-app-on-surface-variant));width:var(--mdc-list-list-item-trailing-icon-size);height:var(--mdc-list-list-item-trailing-icon-size)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mdc-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mdc-list-list-item-trailing-supporting-text-color, var(--mat-app-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mdc-list-list-item-selected-trailing-icon-color, var(--mat-app-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mdc-list-list-item-label-text-color, var(--mat-app-on-surface));font-family:var(--mdc-list-list-item-label-text-font, var(--mat-app-body-large-font));line-height:var(--mdc-list-list-item-label-text-line-height, var(--mat-app-body-large-line-height));font-size:var(--mdc-list-list-item-label-text-size, var(--mat-app-body-large-size));font-weight:var(--mdc-list-list-item-label-text-weight, var(--mat-app-body-large-weight));letter-spacing:var(--mdc-list-list-item-label-text-tracking, var(--mat-app-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mdc-list-list-item-hover-label-text-color, var(--mat-app-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mdc-list-list-item-focus-label-text-color, var(--mat-app-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mdc-list-list-item-supporting-text-color, var(--mat-app-on-surface-variant));font-family:var(--mdc-list-list-item-supporting-text-font, var(--mat-app-body-medium-font));line-height:var(--mdc-list-list-item-supporting-text-line-height, var(--mat-app-body-medium-line-height));font-size:var(--mdc-list-list-item-supporting-text-size, var(--mat-app-body-medium-size));font-weight:var(--mdc-list-list-item-supporting-text-weight, var(--mat-app-body-medium-weight));letter-spacing:var(--mdc-list-list-item-supporting-text-tracking, var(--mat-app-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mdc-list-list-item-disabled-label-text-opacity)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mdc-list-list-item-disabled-leading-icon-color, var(--mat-app-on-surface));opacity:var(--mdc-list-list-item-disabled-leading-icon-opacity)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mdc-list-list-item-disabled-trailing-icon-color, var(--mat-app-on-surface));opacity:var(--mdc-list-list-item-disabled-trailing-icon-opacity)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mdc-list-list-item-disabled-label-text-color, var(--mat-app-on-surface))}.mdc-list-item:hover::before{background-color:var(--mdc-list-list-item-hover-state-layer-color, var(--mat-app-on-surface));opacity:var(--mdc-list-list-item-hover-state-layer-opacity, var(--mat-app-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mdc-list-list-item-disabled-state-layer-color, var(--mat-app-on-surface));opacity:var(--mdc-list-list-item-disabled-state-layer-opacity, var(--mat-app-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mdc-list-list-item-focus-state-layer-color, var(--mat-app-on-surface));opacity:var(--mdc-list-list-item-focus-state-layer-opacity, var(--mat-app-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mdc-list-list-item-disabled-label-text-opacity)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mdc-list-list-item-leading-avatar-shape, var(--mat-app-corner-full));background-color:var(--mdc-list-list-item-leading-avatar-color, var(--mat-app-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mdc-list-list-item-leading-icon-size)}.cdk-high-contrast-active a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none}.mat-mdc-list-item>.mat-mdc-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-mdc-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-app-corner-full));--mat-mdc-focus-indicator-border-radius:var(--mat-list-active-indicator-shape, var(--mat-app-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-app-secondary-container))}\";\nconst _c2 = [\"unscopedContent\"];\nconst _c3 = [\"text\"];\nconst _c4 = [[[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]], [[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"\", \"matListItemMeta\", \"\"]], [[\"mat-divider\"]]];\nconst _c5 = [\"[matListItemAvatar],[matListItemIcon]\", \"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"[matListItemMeta]\", \"mat-divider\"];\nconst _c6 = [[[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"mat-divider\"]], [[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]]];\nconst _c7 = [\"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"mat-divider\", \"[matListItemAvatar],[matListItemIcon]\"];\nfunction MatListOption_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0, 4);\n }\n}\nfunction MatListOption_ng_template_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 11);\n i0.ɵɵelement(1, \"input\", 12);\n i0.ɵɵelementStart(2, \"div\", 13);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(3, \"svg\", 14);\n i0.ɵɵelement(4, \"path\", 15);\n i0.ɵɵelementEnd();\n i0.ɵɵnamespaceHTML();\n i0.ɵɵelement(5, \"div\", 16);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mdc-checkbox--disabled\", ctx_r1.disabled);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n }\n}\nfunction MatListOption_ng_template_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 17);\n i0.ɵɵelement(1, \"input\", 18);\n i0.ɵɵelementStart(2, \"div\", 19);\n i0.ɵɵelement(3, \"div\", 20)(4, \"div\", 21);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mdc-radio--disabled\", ctx_r1.disabled);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n }\n}\nfunction MatListOption_Conditional_6_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 4);\n i0.ɵɵtemplate(1, MatListOption_Conditional_6_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const checkbox_r3 = i0.ɵɵreference(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n }\n}\nfunction MatListOption_Conditional_7_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 5);\n i0.ɵɵtemplate(1, MatListOption_Conditional_7_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const radio_r4 = i0.ɵɵreference(5);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n }\n}\nfunction MatListOption_Conditional_8_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatListOption_Conditional_8_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const icons_r5 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n }\n}\nfunction MatListOption_Conditional_15_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_15_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵtemplate(1, MatListOption_Conditional_15_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const checkbox_r3 = i0.ɵɵreference(3);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n }\n}\nfunction MatListOption_Conditional_16_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_16_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 9);\n i0.ɵɵtemplate(1, MatListOption_Conditional_16_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const radio_r4 = i0.ɵɵreference(5);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n }\n}\nfunction MatListOption_Conditional_17_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_17_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatListOption_Conditional_17_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const icons_r5 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n }\n}\nconst LIST_OPTION = /*#__PURE__*/new InjectionToken('ListOption');\n\n/**\n * Directive capturing the title of a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content for the title never wraps. There can only be a single title per list item.\n */\nlet MatListItemTitle = /*#__PURE__*/(() => {\n class MatListItemTitle {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n static {\n this.ɵfac = function MatListItemTitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemTitle)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemTitle,\n selectors: [[\"\", \"matListItemTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-title\", \"mdc-list-item__primary-text\"],\n standalone: true\n });\n }\n }\n return MatListItemTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive capturing a line in a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content inside a line never wraps. There can be at maximum two lines per list item.\n */\nlet MatListItemLine = /*#__PURE__*/(() => {\n class MatListItemLine {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n static {\n this.ɵfac = function MatListItemLine_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemLine)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemLine,\n selectors: [[\"\", \"matListItemLine\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-line\", \"mdc-list-item__secondary-text\"],\n standalone: true\n });\n }\n }\n return MatListItemLine;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional meta section for list items.\n *\n * List items can reserve space at the end of an item to display a control,\n * button or additional text content.\n */\nlet MatListItemMeta = /*#__PURE__*/(() => {\n class MatListItemMeta {\n static {\n this.ɵfac = function MatListItemMeta_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListItemMeta)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemMeta,\n selectors: [[\"\", \"matListItemMeta\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-meta\", \"mdc-list-item__end\"],\n standalone: true\n });\n }\n }\n return MatListItemMeta;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @docs-private\n *\n * MDC uses the very intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n * position content such as icons or checkboxes/radios that comes either before or after the text\n * content respectively. This directive detects the placement of the checkbox/radio and applies the\n * correct MDC class to position the icon/avatar on the opposite side.\n */\nlet _MatListItemGraphicBase = /*#__PURE__*/(() => {\n class _MatListItemGraphicBase {\n constructor(_listOption) {\n this._listOption = _listOption;\n }\n _isAlignedAtStart() {\n // By default, in all list items the graphic is aligned at start. In list options,\n // the graphic is only aligned at start if the checkbox/radio is at the end.\n return !this._listOption || this._listOption?._getTogglePosition() === 'after';\n }\n static {\n this.ɵfac = function _MatListItemGraphicBase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || _MatListItemGraphicBase)(i0.ɵɵdirectiveInject(LIST_OPTION, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: _MatListItemGraphicBase,\n hostVars: 4,\n hostBindings: function _MatListItemGraphicBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-list-item__start\", ctx._isAlignedAtStart())(\"mdc-list-item__end\", !ctx._isAlignedAtStart());\n }\n },\n standalone: true\n });\n }\n }\n return _MatListItemGraphicBase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional avatar within a list item.\n *\n * List items can reserve space at the beginning of an item to display an avatar.\n */\nlet MatListItemAvatar = /*#__PURE__*/(() => {\n class MatListItemAvatar extends _MatListItemGraphicBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatListItemAvatar_BaseFactory;\n return function MatListItemAvatar_Factory(__ngFactoryType__) {\n return (ɵMatListItemAvatar_BaseFactory || (ɵMatListItemAvatar_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemAvatar)))(__ngFactoryType__ || MatListItemAvatar);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemAvatar,\n selectors: [[\"\", \"matListItemAvatar\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-avatar\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatListItemAvatar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional icon within a list item.\n *\n * List items can reserve space at the beginning of an item to display an icon.\n */\nlet MatListItemIcon = /*#__PURE__*/(() => {\n class MatListItemIcon extends _MatListItemGraphicBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatListItemIcon_BaseFactory;\n return function MatListItemIcon_Factory(__ngFactoryType__) {\n return (ɵMatListItemIcon_BaseFactory || (ɵMatListItemIcon_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemIcon)))(__ngFactoryType__ || MatListItemIcon);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListItemIcon,\n selectors: [[\"\", \"matListItemIcon\", \"\"]],\n hostAttrs: [1, \"mat-mdc-list-item-icon\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatListItemIcon;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that can be used to provide the default options for the list module. */\nconst MAT_LIST_CONFIG = /*#__PURE__*/new InjectionToken('MAT_LIST_CONFIG');\n\n/** @docs-private */\nlet MatListBase = /*#__PURE__*/(() => {\n class MatListBase {\n constructor() {\n this._isNonInteractive = true;\n this._disableRipple = false;\n this._disabled = false;\n this._defaultOptions = inject(MAT_LIST_CONFIG, {\n optional: true\n });\n }\n /** Whether ripples for all list items is disabled. */\n get disableRipple() {\n return this._disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n /**\n * Whether the entire list is disabled. When disabled, the list itself and each of its list items\n * are disabled.\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n static {\n this.ɵfac = function MatListBase_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatListBase)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatListBase,\n hostVars: 1,\n hostBindings: function MatListBase_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-disabled\", ctx.disabled);\n }\n },\n inputs: {\n disableRipple: \"disableRipple\",\n disabled: \"disabled\"\n },\n standalone: true\n });\n }\n }\n return MatListBase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nlet MatListItemBase = /*#__PURE__*/(() => {\n class MatListItemBase {\n /**\n * The number of lines this list item should reserve space for. If not specified,\n * lines are inferred based on the projected content.\n *\n * Explicitly specifying the number of lines is useful if you want to acquire additional\n * space and enable the wrapping of text. The unscoped text content of a list item will\n * always be able to take up the remaining space of the item, unless it represents the title.\n *\n * A maximum of three lines is supported as per the Material Design specification.\n */\n set lines(lines) {\n this._explicitLines = coerceNumberProperty(lines, null);\n this._updateItemLines(false);\n }\n /** Whether ripples for list items are disabled. */\n get disableRipple() {\n return this.disabled || this._disableRipple || this._noopAnimations || !!this._listBase?.disableRipple;\n }\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n }\n /** Whether the list-item is disabled. */\n get disabled() {\n return this._disabled || !!this._listBase?.disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n /**\n * Implemented as part of `RippleTarget`.\n * @docs-private\n */\n get rippleDisabled() {\n return this.disableRipple || !!this.rippleConfig.disabled;\n }\n constructor(_elementRef, _ngZone, _listBase, _platform, globalRippleOptions, animationMode) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._listBase = _listBase;\n this._platform = _platform;\n this._explicitLines = null;\n this._disableRipple = false;\n this._disabled = false;\n this._subscriptions = new Subscription();\n this._rippleRenderer = null;\n /** Whether the list item has unscoped text content. */\n this._hasUnscopedTextContent = false;\n this.rippleConfig = globalRippleOptions || {};\n this._hostElement = this._elementRef.nativeElement;\n this._isButtonElement = this._hostElement.nodeName.toLowerCase() === 'button';\n this._noopAnimations = animationMode === 'NoopAnimations';\n if (_listBase && !_listBase._isNonInteractive) {\n this._initInteractiveListItem();\n }\n // If no type attribute is specified for a host `\n\n \n Create Account\n \n \n \n \n Account\n \n \n \n \n
\n
\n \n
\n

\n You are currently offline. You can still use myQQ, but your\n information may be out of date and some features will be\n unavailable.\n

\n
\n
\n
\n \n \n \n \n \n \n \n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { Link } from \"../default-layout.page\";\n\nimport { environment } from \"src/environments/environment\";\n\n@Component({\n selector: \"myqq-mobile-layout\",\n templateUrl: \"./mobile-layout.component.html\",\n styleUrls: [\"./mobile-layout.component.scss\"],\n})\nexport class MobileLayoutComponent implements OnInit {\n @Input() homeLink: Link[];\n @Input() locationsLink: Link;\n @Input() accountLinks: Link[];\n @Input() referralLink?: Link;\n @Input() accountLinked: BehaviorSubject;\n @Input() authenticated: BehaviorSubject;\n @Input() online = true;\n @Input() greenBackground = false;\n @Input() showQuickQuackHeader = false;\n\n @Output() authenticate: EventEmitter = new EventEmitter();\n @Output() register: EventEmitter = new EventEmitter(null);\n\n readonly termsLink = environment.termsOfUse;\n readonly privacyLink = environment.privacyPolicy;\n readonly ccpaLink = environment.ccpa;\n readonly cdnHost = environment.cdnHost;\n\n copyYear: string;\n\n constructor() {}\n\n handleAuthentication(loggedIn): void {\n this.authenticate.emit(loggedIn);\n }\n\n handleRegister() {\n this.register.emit();\n }\n\n ngOnInit(): void {\n this.copyYear = new Date().getFullYear().toString();\n }\n}\n","\n \n cancel\n\n \n \n
\n \n
\n
\n \n Create Account\n \n
\n
\n \n Log In\n \n
\n
\n \n
\n
\n \n

\n myQQ \n \n \n \n Logout\n \n \n

\n
\n \n
\n
\n \n {{ homeLink.title }}{{\n homeLink.icon.name\n }}\n \n
\n\n
\n \n
\n {{ link.title }}\n {{ link.icon.name }}\n \n\n {{ referralLink.title }}\n {{\n referralLink.icon.name\n }}\n \n
\n\n \n \n
\n\n \n
\n \n
\n \n menu\n \n
\n
\n \n \n \n
\n\n
\n \n Log In\n \n
\n \n\n
\n
\n
\n \n
\n

\n You are currently offline. You can still use myQQ, but your\n information may be out of date and some features will be\n unavailable.\n

\n
\n
\n
\n \n
\n
\n
\n
\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatSidenavModule } from \"@angular/material/sidenav\";\nimport { MatListModule } from \"@angular/material/list\";\nimport { MatToolbarModule } from \"@angular/material/toolbar\";\n\nimport { DefaultLayoutComponent } from \"./default-layout.page\";\nimport { DesktopLayoutComponent } from \"./desktop-layout/desktop-layout.component\";\nimport { MobileLayoutComponent } from \"./mobile-layout/mobile-layout.component\";\n\nimport { FooterModule } from \"../footer/footer.module\";\nimport { SocialModule } from \"../social/social.module\";\n\nexport const COMPONENTS = [\n DefaultLayoutComponent,\n DesktopLayoutComponent,\n MobileLayoutComponent,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n FooterModule,\n MatButtonModule,\n MatIconModule,\n MatListModule,\n MatMenuModule,\n MatSidenavModule,\n MatToolbarModule,\n RouterModule,\n SocialModule,\n ],\n exports: [...COMPONENTS],\n declarations: [...COMPONENTS],\n providers: [],\n})\nexport class LayoutsModule {}\n"],"mappings":"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","names":["require_constants","__commonJSMin","exports","module","SEMVER_SPEC_VERSION","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","require_debug","__commonJSMin","exports","module","debug","args","require_re","__commonJSMin","exports","module","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","debug","re","safeRe","src","t","R","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","value","token","max","createToken","name","isGlobal","safe","index","require_parse_options","__commonJSMin","exports","module","looseOption","emptyOpts","parseOptions","options","require_identifiers","__commonJSMin","exports","module","numeric","compareIdentifiers","a","b","anum","bnum","rcompareIdentifiers","require_semver","__commonJSMin","exports","module","debug","MAX_LENGTH","MAX_SAFE_INTEGER","re","t","parseOptions","compareIdentifiers","SemVer","_SemVer","version","options","m","id","num","other","i","a","b","release","identifier","identifierBase","base","prerelease","require_parse","__commonJSMin","exports","module","SemVer","parse","version","options","throwErrors","er","require_valid","__commonJSMin","exports","module","parse","valid","version","options","v","require_clean","__commonJSMin","exports","module","parse","clean","version","options","s","require_inc","__commonJSMin","exports","module","SemVer","inc","version","release","options","identifier","identifierBase","require_diff","__commonJSMin","exports","module","parse","diff","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","prefix","require_major","__commonJSMin","exports","module","SemVer","major","a","loose","require_minor","__commonJSMin","exports","module","SemVer","minor","a","loose","require_patch","__commonJSMin","exports","module","SemVer","patch","a","loose","require_prerelease","__commonJSMin","exports","module","parse","prerelease","version","options","parsed","require_compare","__commonJSMin","exports","module","SemVer","compare","a","b","loose","require_rcompare","__commonJSMin","exports","module","compare","rcompare","a","b","loose","require_compare_loose","__commonJSMin","exports","module","compare","compareLoose","a","b","require_compare_build","__commonJSMin","exports","module","SemVer","compareBuild","a","b","loose","versionA","versionB","require_sort","__commonJSMin","exports","module","compareBuild","sort","list","loose","a","b","require_rsort","__commonJSMin","exports","module","compareBuild","rsort","list","loose","a","b","require_gt","__commonJSMin","exports","module","compare","gt","a","b","loose","require_lt","__commonJSMin","exports","module","compare","lt","a","b","loose","require_eq","__commonJSMin","exports","module","compare","eq","a","b","loose","require_neq","__commonJSMin","exports","module","compare","neq","a","b","loose","require_gte","__commonJSMin","exports","module","compare","gte","a","b","loose","require_lte","__commonJSMin","exports","module","compare","lte","a","b","loose","require_cmp","__commonJSMin","exports","module","eq","neq","gt","gte","lt","lte","cmp","a","op","b","loose","require_coerce","__commonJSMin","exports","module","SemVer","parse","re","t","coerce","version","options","match","next","require_iterator","__commonJSMin","exports","module","Yallist","walker","require_yallist","__commonJSMin","exports","module","Yallist","Node","list","self","item","i","l","node","next","prev","head","tail","push","unshift","res","fn","thisp","walker","initial","acc","arr","from","to","ret","start","deleteCount","nodes","insert","p","value","inserted","require_lru_cache","__commonJSMin","exports","module","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","options","max","lc","mL","trim","allowStale","mA","lC","hit","fn","thisp","walker","prev","forEachStep","next","k","isStale","h","key","value","maxAge","now","len","del","item","Entry","get","node","arr","l","expiresAt","self","doUse","diff","length","require_range","__commonJSMin","exports","module","Range","_Range","range","options","parseOptions","Comparator","r","c","first","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","loose","hr","re","t","hyphenReplace","debug","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","comp","parseComparator","replaceGTE0","rangeMap","comparators","result","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","version","SemVer","i","testSet","LRU","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","id","replaceTilde","_","M","m","p","pr","ret","replaceCaret","z","replaceXRange","gtlt","xM","xm","xp","anyX","incPr","$0","from","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","tb","set","allowed","require_comparator","__commonJSMin","exports","module","ANY","Comparator","_Comparator","comp","options","parseOptions","debug","r","re","t","m","SemVer","version","cmp","Range","require_satisfies","__commonJSMin","exports","module","Range","satisfies","version","range","options","require_to_comparators","__commonJSMin","exports","module","Range","toComparators","range","options","comp","c","require_max_satisfying","__commonJSMin","exports","module","SemVer","Range","maxSatisfying","versions","range","options","max","maxSV","rangeObj","v","require_min_satisfying","__commonJSMin","exports","module","SemVer","Range","minSatisfying","versions","range","options","min","minSV","rangeObj","v","require_min_version","__commonJSMin","exports","module","SemVer","Range","gt","minVersion","range","loose","minver","i","comparators","setMin","comparator","compver","require_valid","__commonJSMin","exports","module","Range","validRange","range","options","require_outside","__commonJSMin","exports","module","SemVer","Comparator","ANY","Range","satisfies","gt","lt","lte","gte","outside","version","range","hilo","options","gtfn","ltefn","ltfn","comp","ecomp","i","comparators","high","low","comparator","require_gtr","__commonJSMin","exports","module","outside","gtr","version","range","options","require_ltr","__commonJSMin","exports","module","outside","ltr","version","range","options","require_intersects","__commonJSMin","exports","module","Range","intersects","r1","r2","options","require_simplify","__commonJSMin","exports","module","satisfies","compare","versions","range","options","set","first","prev","v","a","b","version","ranges","min","max","simplified","original","require_subset","__commonJSMin","exports","module","Range","Comparator","ANY","satisfies","compare","subset","sub","dom","options","sawNonNull","OUTER","simpleSub","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","eqSet","gt","lt","c","higherGT","lowerLT","gtltComp","eq","higher","lower","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","a","b","comp","require_semver","__commonJSMin","exports","module","internalRe","constants","SemVer","identifiers","parse","valid","clean","inc","diff","major","minor","patch","prerelease","compare","rcompare","compareLoose","compareBuild","sort","rsort","gt","lt","eq","neq","gte","lte","cmp","coerce","Comparator","Range","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","intersects","simplifyRange","subset","_c0","_c1","VIRTUAL_SCROLL_STRATEGY","InjectionToken","FixedSizeVirtualScrollStrategy","itemSize","minBufferPx","maxBufferPx","Subject","distinctUntilChanged","viewport","index","behavior","renderedRange","newRange","viewportSize","dataLength","scrollOffset","firstVisibleIndex","maxVisibleItems","newVisibleIndex","startBuffer","expandStart","endBuffer","expandEnd","_fixedSizeVirtualScrollStrategyFactory","fixedSizeDir","CdkFixedSizeVirtualScroll","_CdkFixedSizeVirtualScroll","value","coerceNumberProperty","__ngFactoryType__","ɵɵdefineDirective","ɵɵProvidersFeature","forwardRef","ɵɵNgOnChangesFeature","DEFAULT_SCROLL_TIME","ScrollDispatcher","_ScrollDispatcher","_ngZone","_platform","document","scrollable","scrollableReference","auditTimeInMs","Observable","observer","subscription","auditTime","of","_","container","elementOrElementRef","ancestors","filter","target","scrollingContainers","_subscription","element","coerceElement","scrollableElement","window","fromEvent","ɵɵinject","NgZone","Platform","DOCUMENT","ɵɵdefineInjectable","CdkScrollable","_CdkScrollable","elementRef","scrollDispatcher","ngZone","dir","takeUntil","options","el","isRtl","getRtlScrollAxisType","RtlScrollAxisType","supportsScrollBehavior","from","LEFT","RIGHT","ɵɵdirectiveInject","ElementRef","Directionality","DEFAULT_RESIZE_TIME","ViewportRuler","_ViewportRuler","event","output","scrollPosition","width","height","documentElement","documentRect","top","left","throttleTime","VIRTUAL_SCROLLABLE","CdkVirtualScrollable","_CdkVirtualScrollable","orientation","viewportEl","ɵɵInheritDefinitionFeature","rangesEqual","r1","r2","SCROLL_SCHEDULER","animationFrameScheduler","asapScheduler","CdkVirtualScrollViewport","_CdkVirtualScrollViewport","_changeDetectorRef","_scrollStrategy","viewportRuler","inject","Subscription","Injector","startWith","forOf","data","newLength","size","range","offset","to","isHorizontal","axis","transform","measureScrollOffset","_from","fromRect","scrollerClientRect","contentEl","runAfter","afterNextRender","runAfterChangeDetection","fn","ChangeDetectorRef","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵclassProp","booleanAttribute","virtualScrollable","Optional","Inject","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵstyleProp","getOffset","direction","node","rect","CdkVirtualForOf","_CdkVirtualForOf","isDataSource","ArrayDataSource","isObservable","item","_viewContainerRef","_template","_differs","_viewRepeater","_viewport","pairwise","switchMap","prev","cur","shareReplay","renderedStartIndex","rangeLen","firstNode","lastNode","i","view","changes","oldDs","newDs","count","record","_adjustedPreviousIndex","currentIndex","context","ViewContainerRef","TemplateRef","IterableDiffers","_VIEW_REPEATER_STRATEGY","_RecycleViewRepeaterStrategy","CdkScrollableModule","_CdkScrollableModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ScrollingModule","_ScrollingModule","BidiModule","scrollBehaviorSupported","supportsScrollBehavior","BlockScrollStrategy","_viewportRuler","document","root","coerceCssPixelValue","html","body","htmlStyle","bodyStyle","previousHtmlScrollBehavior","previousBodyScrollBehavior","viewport","CloseScrollStrategy","_scrollDispatcher","_ngZone","_viewportRuler","_config","overlayRef","stream","filter","scrollable","scrollPosition","NoopScrollStrategy","isElementScrolledOutsideView","element","scrollContainers","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","isElementClippedByScrolling","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","RepositionScrollStrategy","throttle","overlayRect","width","height","ScrollStrategyOptions","_ScrollStrategyOptions","document","config","BlockScrollStrategy","__ngFactoryType__","ɵɵinject","ScrollDispatcher","ViewportRuler","NgZone","DOCUMENT","ɵɵdefineInjectable","OverlayConfig","configKeys","key","ConnectedOverlayPositionChange","connectionPair","scrollableViewProperties","BaseOverlayDispatcher","_BaseOverlayDispatcher","document","overlayRef","index","__ngFactoryType__","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","OverlayKeyboardDispatcher","_OverlayKeyboardDispatcher","_ngZone","event","overlays","i","keydownEvents","NgZone","OverlayOutsideClickDispatcher","_OverlayOutsideClickDispatcher","_platform","_getEventTarget","target","origin","containsPierceShadowDom","outsidePointerEvents","body","Platform","parent","child","supportsShadowRoot","current","OverlayContainer","_OverlayContainer","containerClass","_isTestEnvironment","oppositePlatformContainers","container","OverlayRef","_portalOutlet","_host","_pane","_config","_keyboardDispatcher","_document","_location","_outsideClickDispatcher","_animationsDisabled","_injector","Subject","Subscription","untracked","afterRender","portal","attachResult","afterNextRender","detachmentResult","isAttached","strategy","sizeConfig","__spreadValues","dir","__spreadProps","classes","direction","style","coerceCssPixelValue","enablePointer","showingClass","backdropToDetach","element","cssClasses","isAdd","coerceArray","c","subscription","takeUntil","merge","scrollStrategy","backdrop","boundingBoxClass","cssUnitPattern","FlexibleConnectedPositionStrategy","connectedTo","_viewportRuler","_overlayContainer","originRect","overlayRect","viewportRect","containerRect","flexibleFits","fallback","pos","originPoint","overlayPoint","overlayFit","bestFit","bestScore","fit","score","extendStyles","lastPosition","scrollables","positions","margin","flexibleDimensions","growAfterOpen","canPush","isLocked","offset","selector","x","startX","endX","y","overlayStartX","overlayStartY","point","rawOverlayRect","viewport","position","overlay","getRoundedBoundingClientRect","offsetX","offsetY","leftOverflow","rightOverflow","topOverflow","bottomOverflow","visibleWidth","visibleHeight","visibleArea","availableHeight","availableWidth","minHeight","getPixelValue","minWidth","verticalFit","horizontalFit","start","scrollPosition","overflowRight","overflowBottom","overflowTop","overflowLeft","pushX","pushY","scrollVisibility","compareScrollVisibility","changeEvent","ConnectedOverlayPositionChange","elements","xOrigin","yOrigin","isRtl","height","top","bottom","smallestDistanceToViewportEdge","previousHeight","isBoundedByRightViewportEdge","isBoundedByLeftViewportEdge","width","left","right","previousWidth","boundingBoxRect","styles","maxHeight","maxWidth","hasExactPosition","hasFlexibleDimensions","config","transformString","documentHeight","horizontalStyleProperty","documentWidth","originBounds","overlayBounds","scrollContainerBounds","scrollable","isElementClippedByScrolling","isElementScrolledOutsideView","length","overflows","currentValue","currentOverflow","axis","cssClass","ElementRef","destination","source","key","input","value","units","clientRect","a","b","wrapperClass","GlobalPositionStrategy","overlayRef","config","value","offset","styles","parentStyles","width","height","maxWidth","maxHeight","shouldBeFlushHorizontally","shouldBeFlushVertically","xPosition","xOffset","isRtl","marginLeft","marginRight","justifyContent","parent","OverlayPositionBuilder","_OverlayPositionBuilder","_viewportRuler","_document","_platform","_overlayContainer","origin","FlexibleConnectedPositionStrategy","__ngFactoryType__","ɵɵinject","ViewportRuler","DOCUMENT","Platform","OverlayContainer","ɵɵdefineInjectable","nextUniqueId","Overlay","_Overlay","scrollStrategies","_componentFactoryResolver","_positionBuilder","_keyboardDispatcher","_injector","_ngZone","_directionality","_location","_outsideClickDispatcher","_animationsModuleType","host","pane","portalOutlet","overlayConfig","OverlayConfig","OverlayRef","EnvironmentInjector","ApplicationRef","DomPortalOutlet","ScrollStrategyOptions","ComponentFactoryResolver$1","OverlayKeyboardDispatcher","Injector","NgZone","Directionality","Location","OverlayOutsideClickDispatcher","ANIMATION_MODULE_TYPE","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","InjectionToken","overlay","inject","CdkOverlayOrigin","_CdkOverlayOrigin","elementRef","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","CdkConnectedOverlay","_CdkConnectedOverlay","offsetX","offsetY","_overlay","templateRef","viewContainerRef","scrollStrategyFactory","_dir","Subscription","EventEmitter","TemplatePortal","changes","event","hasModifierKey","target","_getEventTarget","positionStrategy","positions","currentPosition","strategy","takeWhile","position","TemplateRef","ViewContainerRef","booleanAttribute","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","OverlayModule","_OverlayModule","ɵɵdefineNgModule","ɵɵdefineInjector","BidiModule","PortalModule","ScrollingModule","CdkDialogContainer_ng_template_0_Template","rf","ctx","DialogConfig","CdkDialogContainer","_CdkDialogContainer","BasePortalOutlet","_elementRef","_focusTrapFactory","_document","_config","_interactivityChecker","_ngZone","_overlayRef","_focusMonitor","inject","Platform","ChangeDetectorRef","Injector","portal","result","id","index","element","options","callback","selector","elementToFocus","afterNextRender","focusConfig","focusTargetElement","activeElement","_getFocusedElementPierceShadowDom","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","DialogConfig","InteractivityChecker","NgZone","OverlayRef","FocusMonitor","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","CdkPortalOutlet","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵattribute","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵtemplate","CdkDialogContainer_ng_template_0_Template","DialogRef","overlayRef","config","Subject","event","hasModifierKey","closedSubject","width","height","classes","DIALOG_SCROLL_STRATEGY","InjectionToken","overlay","Overlay","DIALOG_DATA","DEFAULT_DIALOG_CONFIG","uniqueId","Dialog","_Dialog","_overlay","_injector","_defaultOptions","_parentDialog","_overlayContainer","scrollStrategy","Subject","defer","startWith","componentOrTemplateRef","config","defaults","DialogConfig","__spreadValues","overlayConfig","overlayRef","dialogRef","DialogRef","dialogContainer","reverseForEach","dialog","id","state","OverlayConfig","overlay","userInjector","providers","OverlayRef","containerType","CdkDialogContainer","containerPortal","ComponentPortal","Injector","TemplateRef","injector","context","TemplatePortal","contentRef","fallbackInjector","DIALOG_DATA","Directionality","of","emitEvent","index","previousValue","element","overlayContainer","siblings","i","sibling","parent","__ngFactoryType__","ɵɵinject","Overlay","DEFAULT_DIALOG_CONFIG","OverlayContainer","DIALOG_SCROLL_STRATEGY","ɵɵdefineInjectable","items","callback","DialogModule","_DialogModule","ɵɵdefineNgModule","ɵɵdefineInjector","OverlayModule","PortalModule","A11yModule","MatDialogContainer_ng_template_2_Template","rf","ctx","MatDialogConfig","OPEN_CLASS","OPENING_CLASS","CLOSING_CLASS","OPEN_ANIMATION_DURATION","CLOSE_ANIMATION_DURATION","MatDialogContainer","_MatDialogContainer","CdkDialogContainer","elementRef","focusTrapFactory","_document","dialogConfig","interactivityChecker","ngZone","overlayRef","_animationMode","focusMonitor","EventEmitter","parseCssTime","TRANSITION_DURATION_PROPERTY","delta","duration","callback","totalTime","portal","ref","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","InteractivityChecker","NgZone","OverlayRef","ANIMATION_MODULE_TYPE","FocusMonitor","ɵɵdefineComponent","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵtemplate","ɵɵelementEnd","CdkPortalOutlet","time","coerceNumberProperty","MatDialogState","MatDialogRef","_ref","config","_containerInstance","Subject","filter","event","take","merge","hasModifierKey","_closeDialogVia","dialogResult","position","strategy","width","height","classes","interactionType","result","MAT_DIALOG_DATA","InjectionToken","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","overlay","inject","Overlay","uniqueId","MatDialog","_MatDialog","parent","_overlay","injector","location","_defaultOptions","_scrollStrategy","_parentDialog","_overlayContainer","_animationMode","Subject","MatDialogConfig","defer","startWith","Dialog","MatDialogRef","MatDialogContainer","MAT_DIALOG_DATA","componentOrTemplateRef","config","dialogRef","__spreadValues","cdkRef","__spreadProps","DialogConfig","ref","cdkConfig","dialogContainer","index","id","dialog","dialogs","__ngFactoryType__","ɵɵinject","Overlay","Injector","Location","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","OverlayContainer","ANIMATION_MODULE_TYPE","ɵɵdefineInjectable","dialogElementUid","MatDialogClose","_MatDialogClose","_elementRef","_dialog","getClosestDialog","changes","proxiedChange","event","_closeDialogVia","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","ɵɵNgOnChangesFeature","MatDialogLayoutSection","_MatDialogLayoutSection","_dialogRef","MatDialogTitle","_MatDialogTitle","ɵMatDialogTitle_BaseFactory","ɵɵgetInheritedFactory","ɵɵhostProperty","ɵɵInheritDefinitionFeature","MatDialogContent","_MatDialogContent","ɵɵHostDirectivesFeature","CdkScrollable","MatDialogActions","_MatDialogActions","ɵMatDialogActions_BaseFactory","ɵɵclassProp","element","openDialogs","MatDialogModule","_MatDialogModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatDialog","DialogModule","OverlayModule","PortalModule","MatCommonModule","_c0","policy","getPolicy","ttWindow","s","trustedHTMLFromString","html","getMatIconNameNotFoundError","iconName","getMatIconNoHttpProviderError","getMatIconFailedToSanitizeUrlError","url","getMatIconFailedToSanitizeLiteralError","literal","SvgIconConfig","svgText","options","MatIconRegistry","_MatIconRegistry","_httpClient","_sanitizer","document","_errorHandler","namespace","resolver","cleanLiteral","SecurityContext","trustedLiteral","alias","classNames","safeUrl","cachedIcon","of","cloneSvg","tap","svg","map","name","key","iconKey","config","iconSetConfigs","throwError","namedIcon","iconSetFetchRequests","iconSetConfig","catchError","err","errorMessage","forkJoin","foundIcon","i","iconSet","iconSource","iconElement","str","div","element","attributes","value","iconConfig","withCredentials","inProgressFetch","req","finalize","share","configNamespace","result","isSafeUrlWithOptions","__ngFactoryType__","ɵɵinject","HttpClient","DomSanitizer","DOCUMENT","ErrorHandler","ɵɵdefineInjectable","cloneSvg","svg","iconKey","namespace","name","isSafeUrlWithOptions","value","MAT_ICON_DEFAULT_OPTIONS","InjectionToken","MAT_ICON_LOCATION","MAT_ICON_LOCATION_FACTORY","_document","inject","DOCUMENT","_location","funcIriAttributes","funcIriAttributeSelector","attr","funcIriPattern","MatIcon","_MatIcon","newValue","_elementRef","_iconRegistry","ariaHidden","_errorHandler","defaults","Subscription","iconName","parts","cachedElements","newPath","path","layoutElement","childCount","child","elem","fontSetClasses","className","elements","attrs","element","elementsWithFuncIri","i","elementWithReference","match","attributes","rawName","take","err","errorMessage","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","MatIconRegistry","ɵɵinjectAttribute","ErrorHandler","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassMap","ɵɵclassProp","booleanAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c0","ɵɵprojectionDef","ɵɵprojection","MatIconModule","_MatIconModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r0","iconColor","color","ɵɵadvance","ɵɵtextInterpolate1","matIcon","ɵɵelement","svgIcon","MyqqButton","constructor","_elementRef","_focusMonitor","_disabled","disabled","value","coerceBooleanProperty","ngAfterViewInit","monitor","ngOnDestroy","stopMonitoring","focus","origin","options","focusVia","_getHostElement","nativeElement","ɵɵdirectiveInject","ElementRef","FocusMonitor","selectors","hostVars","hostBindings","rf","ctx","ɵɵclassProp","ɵɵtemplate","MyqqButton_mat_icon_0_Template","MyqqButton_mat_icon_1_Template","ɵɵprojection","_MyqqButton","_c0","_c1","_c2","MatMenuItem_Conditional_4_Template","rf","ctx","ɵɵnamespaceSVG","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","_c3","MatMenu_ng_template_0_Template","_r1","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵprojection","ɵɵclassMap","ɵɵproperty","ɵɵattribute","MAT_MENU_PANEL","InjectionToken","MatMenuItem","_MatMenuItem","_elementRef","_document","_focusMonitor","_parentMenu","_changeDetectorRef","Subject","origin","options","event","clone","icons","i","isHighlighted","triggersSubmenu","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","DOCUMENT","FocusMonitor","ChangeDetectorRef","ɵɵdefineComponent","ɵɵclassProp","booleanAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵtemplate","ɵɵadvance","ɵɵconditional","MatRipple","MAT_MENU_CONTENT","InjectionToken","matMenuAnimations","trigger","state","style","transition","animate","fadeInItems","transformMenu","menuPanelUid","MAT_MENU_DEFAULT_OPTIONS","InjectionToken","MAT_MENU_DEFAULT_OPTIONS_FACTORY","MatMenu","_MatMenu","value","classes","previousPanelClass","newClassList","__spreadValues","className","_elementRef","_unusedNgZone","defaultOptions","_changeDetectorRef","QueryList","Subject","EventEmitter","inject","Injector","FocusKeyManager","startWith","switchMap","items","merge","item","focusedItem","itemsList","manager","index","_item","event","keyCode","hasModifierKey","origin","afterNextRender","menuPanel","depth","elevation","newElevation","customElevation","posX","posY","__spreadProps","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","ChangeDetectorRef","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","MAT_MENU_CONTENT","MatMenuItem","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","TemplateRef","ɵɵattribute","booleanAttribute","ɵɵProvidersFeature","MAT_MENU_PANEL","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c3","ɵɵprojectionDef","ɵɵtemplate","MatMenu_ng_template_0_Template","MAT_MENU_SCROLL_STRATEGY","overlay","Overlay","MAT_MENU_SCROLL_STRATEGY_FACTORY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","passiveEventListenerOptions","normalizePassiveListenerOptions","MatMenuTrigger","_MatMenuTrigger","v","menu","reason","_overlay","_element","_viewContainerRef","scrollStrategy","parentMenu","_menuItemInstance","_dir","_focusMonitor","_ngZone","Subscription","inject","ChangeDetectorRef","event","isFakeTouchstartFromScreenReader","EventEmitter","MatMenu","passiveEventListenerOptions","overlayRef","overlayConfig","positionStrategy","takeUntil","origin","options","filter","take","depth","isOpen","config","OverlayConfig","position","change","posX","posY","originX","originFallbackX","overlayY","overlayFallbackY","originY","originFallbackY","overlayX","overlayFallbackX","offsetY","firstItem","backdrop","detachments","parentClose","of","hover","active","merge","isFakeMousedownFromScreenReader","keyCode","delay","asapScheduler","TemplatePortal","__ngFactoryType__","ɵɵdirectiveInject","Overlay","ElementRef","ViewContainerRef","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_PANEL","MatMenuItem","Directionality","FocusMonitor","NgZone","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵattribute","MatMenuModule","_MatMenuModule","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","CommonModule","MatRippleModule","MatCommonModule","OverlayModule","CdkScrollableModule","MatDivider","_MatDivider","value","coerceBooleanProperty","__ngFactoryType__","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassProp","ɵɵStandaloneFeature","MatDividerModule","_MatDividerModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","mapLens","lens","Lens","map","get","a","s","pipe","sequenceTuple","o","d","set","myqqStateProps","Lens","fromProp","membershipL","chain","profile","notNil","membership","success","failure","error","membershipDE","profileDE","pipe","sequenceTuple","map","__spreadProps","__spreadValues","membershipProps","accountL","vehiclesL","activeCouponsL","initialLoadLens","accountInfoLens","profileLens","membershipLens","compose","accountLens","mapLens","newAccountLens","updateAccountLens","vehiclesLens","couponsLens","storesLens","regionsLens","subscriptionLens","ordersLens","paymentMethodsLens","priceTableLens","postPaymentMethodLens","payInvoiceLens","addVehicleLens","getVehiclesLens","editVehicleLens","removeVehicleLens","accountLookupLens","linkAccountLens","getOrderByIdLens","pendingOrderLens","calculateOrderLens","submitOrderLens","checkPromoCodeLens","modifySubscriptionPlanLens","membershipPurchaseLens","promoDetailsLens","companyWidePromoDetailsLens","swapReasonsLens","accountQuotaLens","swapMembershipLens","editVehicleIdentifierLens","cancelMembershipLens","checkEligibilityForRetentionOfferLens","acceptRetentionOfferLens","cancelReasonsLens","b2bBenefitLens","linkB2CLens","getOrderIdLens","s","_","appMinVersionLens","vehiclesOnOrderLens","marketingContentLens","myqqFeatureKey","myqqAction","actionCreatorFactory","INITIAL_STATE","initialLoad","accountInfo","initial","profile","stores","regions","subscription","orders","paymentMethods","priceTable","postPaymentMethod","payInvoice","getVehicles","addVehicle","editVehicle","removeVehicle","accountLookupResponse","accountLinkResponse","newAccount","updateAccount","getOrder","pendingOrder","none","calculateOrder","submitOrder","checkPromo","modifySubscriptionPlan","membershipPurchase","promoDetails","companyWidePromoDetails","accountQuota","swapReasons","swapMembership","editVehicleIdentifier","cancelMembership","checkEligibilityForRetentionOffer","acceptRetentionOffer","cancelReasons","appMinVersion","vehiclesOnOrder","marketingContent","b2bBenefit","linkB2C","setInitialLoad","simple","setInitialLoadReducer","caseFn","initialLoadLens","set","getAccountInfo","async","getAccountInfoReducer","asyncReducerFactory","accountInfoLens","clearAccountInfo","clearAccountInfoReducer","getProfile","getProfileReducer","profileLens","clearProfile","clearProfileReducer","accountLens","newAccountReducer","newAccountLens","clearNewAccount","clearNewAccountReducer","updateAccountReducer","updateAccountLens","clearUpdateAccount","clearUpdateAccountReducer","getAllRegions","getAllRegionsReducer","regionsLens","getVehiclesReducer","getVehiclesLens","addVehicleReducer","addVehicleLens","clearAddVehicle","clearAddVehicleReducer","editVehicleReducer","editVehicleLens","clearEditVehicle","clearEditVehicleReducer","removeVehicleReduce","removeVehicleLens","clearVehiclePostPut","clearVehiclePostPutReducer","state","__spreadProps","__spreadValues","getMyOrders","getMyOrdersReducer","ordersLens","getOrderById","getOrderByIdReducer","asyncEntityFactory","getOrderByIdLens","getOrderIdLens","getMyPaymentMethods","getMyPaymentMethodsReducer","paymentMethodsLens","accountLookup","accountLookupReducer","accountLookupLens","accountLookupLast4Plate","accountLookupLast4PlateReducer","clearAccountLookup","clearAccountLookupReducer","accountRelink","accountRelinkReducer","linkAccountLens","accountLink","accountLinkReducer","getAllStores","getAllStoresReducer","storesLens","getPriceTable","getPriceTableReducer","priceTableLens","getPriceTableByZip","getPriceTableByZipReducer","clearPriceTable","clearPriceTableByZipReducer","calculateOrderReducer","calculateOrderLens","submitOrderReducer","submitOrderLens","clearSubmitOrder","clearSubmitOrderReducer","clearSubmitOrderAndGenerateNewOrderId","clearSubmitOrderAndGenerateNewOrderIdReducer","s","isSome","some","value","orderId","uuid","clearOrderProgress","clearOrderProgressReducer","getMySubscriptions","getMySubscriptionReducer","subscriptionLens","clearMySubscription","clearMySubscriptionReducer","postPaymentMethodReducer","postPaymentMethodLens","clearPostPaymentMethod","clearPostPaymentMethodReducer","setPendingOrder","setPendingOrderReducer","pendingOrderLens","submissionAt","Date","toISOString","notNil","customerId","isSuccess","right","membership","account","personId","info","qsysAccount","clearPendingOrder","clearPendingOrderReducer","setModifySubscriptionPlan","setModifySubscriptionPlanReducer","currentState","modifySubscriptionPlanLens","clearModifySubscriptionPlan","clearModifySubscriptionPlanReducer","setMembershipPurchase","setMembershipPurchaseReducer","membershipPurchaseLens","clearMembershipPurchase","clearMembershipPurchaseReducer","setPaymentMethod","setPaymentMethodReducer","modify","map","order","payments","clearPaymentMethod","clearPaymentMethodReducer","setPendingOrderPromoCode","setPendingPromoCodeReducer","markDowns","clearPromoCode","clearPromoCodeReducer","waiveUpgradeFee","setOrderReason","setOrderReasonReducer","createReasonCode","addFlockOrder","removeFlockOrder","changeMembershipOrder","addMembershipOrder","checkPromoCode","checkPromoCodeReducer","checkPromoCodeLens","payFailedInvoice","payInvoiceReducer","payInvoiceLens","clearPayFailedInvoice","clearPayFailedInvoiceReducer","getPromoDetails","getPromoDetailsReducer","promoDetailsLens","getCompanyWidePromoDetails","getCompanyWidePromoDetailsReducer","companyWidePromoDetailsLens","emptyPromoDetails","emptyPromoDetailsReducer","success","clearFailedPromoCheck","clearFailedPromoCheckReducer","getAccountQuota","getAccountQuotaReducer","accountQuotaLens","clearAccountQuota","clearAccountQuotaReducer","getSwapReasons","getSwapReasonsReducer","swapReasonsLens","swapMembershipReducer","swapMembershipLens","clearSwapMembership","clearSwapMembershipReducer","editVehicleIdentifierReducer","editVehicleIdentifierLens","clearEditVehicleIdentifier","clearEditVehicleIdentifierReducer","cancelMembershipReducer","cancelMembershipLens","clearCancelMembership","clearCancelMembershipReducer","checkEligibilityForRetentionOfferReducer","checkEligibilityForRetentionOfferLens","clearCheckEligibilityForRetentionOffer","clearCheckEligibilityForRetentionOfferReducer","acceptRetentionOfferReducer","acceptRetentionOfferLens","getCancelReasons","getCancelReasonsReducer","cancelReasonsLens","getAppMinVersion","getAppMinVersionReducer","appMinVersionLens","setVehiclesOnOrder","setVehiclesOnOrderReducer","vehiclesOnOrderLens","getMarketingContent","getMarketingContentReducer","marketingContentLens","getB2bBenefit","getB2bReducer","b2bBenefitLens","linkB2CReducer","linkB2CLens","myqqReducer","reducerDefaultFn","mapError","fn","obs","pipe","catchError","error","throwError","MyQQEffects","constructor","actions$","myqqSvc","getAccountInfo$","createEffect","pipe","asyncExhaustMap","getAccountInfo","accountInfo","getProfile$","getProfile","getMyProfile","newAccount$","newAccount","person","updateAccount$","updateAccount","getAllRegions$","getAllRegions","getVehicles$","getVehicles","addVehicle$","addVehicle","vehicle","postVehicle","editVehicle$","editVehicle","patchVehicle","removeVehicle$","removeVehicle","req","getMyOrders$","getMyOrders","page","getOrderById$","getOrderById","orderId","getMyPaymentMethods$","getMyPaymentMethods","postPaymentMethod$","postPaymentMethod","paymentMethodId","newPaymentMethod","accountLookup$","accountLookup","token","accountLookupLast4Plate","accountLink$","accountLink","personId","linkAccount","accountRelink$","accountRelink","relinkAccount","getPriceTable$","getPriceTable","getPriceTableByZip$","getPriceTableByZip","zip","calculateOrder$","calculateOrder","order","tap","result","items","filter","item","sku","submitOrder$","submitOrder","checkPromo$","checkPromoCode","serialNum","getMySubscriptions$","getMySubscriptions","payFailedInvoice$","payFailedInvoice","pending","match","switchMap","value","params","createReason","mapError","error","message","payInvoice","invoiceId","map","success","catchError","of","failure","getAllStores$","getAllStores","getPromoDetails$","getPromoDetails","promoCode","getCompanyWidePromoDetails$","getCompanyWidePromoDetails","getAccountQuota$","getAccountQuota","getSwapReasons$","getSwapReasons","swapVehicle$","swapMembership","swapRequest","swapVehicleOnMembership","editVehicleIdentifier$","editVehicleIdentifier","cancelMembership$","cancelMembership","cancelRequest","checkEligibityForRetentionOffer$","checkEligibilityForRetentionOffer","createTimestamp","acceptRetentionOffer$","acceptRetentionOffer","getCancelReasons$","getCancelReasons","getAppMinVersion$","getAppMinVersion","getMarketingContent$","getMarketingContent","getMarketingContents","getB2bBenefit$","getB2bBenefit","linkB2CEffects$","linkB2C","linkRequest","linkB2cWithCode","ɵɵinject","Actions","MyQQService","factory","ɵfac","_MyQQEffects","MyQQChainEffects","constructor","actions$","unleashService","refreshProfileChains$","createEffect","pipe","filterActions","addVehicle","success","editVehicle","updateAccount","cancelMembership","map","getProfile","pending","refreshProfileChainsNewAccount$","newAccount","accountLink","track","updateUnleashOnAccountInfoChange$","filter","getAccountInfo","match","value","result","distinctUntilChanged","accountInfo","updateUnleashContextOnGetAccount","dispatch","updateUnleashOnSubscriptionSuccess$","getMySubscriptions","isSome","subscription","updateUnleashContextOnGetSubscription","refreshAccountChain$","getPaymentMethodsOnPostSuccess$","postPaymentMethod","getMyPaymentMethods","refreshSubscriptionChains$","submitOrder","refreshAccountOnOrderComplete$","refreshVehiclesOnVehiclesAndMembershipChange$","removeVehicle","swapMembership","editVehicleIdentifier","getVehicles","clearAccountQuotaOnSwapAndEditLPVIN$","clearAccountQuota","clearVehiclesOnOrderOnSwapSuccess$","setVehiclesOnOrder","setDefaultPlansOnGetPriceSuccess$","getPriceTableByZip","notNil","setDefaultPlans","refreshMarketingContent$","getMarketingContent","ɵɵinject","Actions","UnleashService","factory","ɵfac","_MyQQChainEffects","MockGoodWashLevelName","MockBetterWashLevelName","MockBestWashLevelName","MockCeramicWashLevelName","MockPlansPromoSvg","MOCK_STORE","storeId","regionId","regionNumber","storeNumber","name","addressLine1","city","state","zipCode","phoneNumber","defaultLaneNumber","timeZone","connectAccountId","MOCK_VEHICLES","vehicleId","personId","license","state","createdBy","createdIn","createdAt","updatedBy","updatedIn","updatedAt","make","model","year","vin","hasMembership","expiring","isVerified","isTemporaryIdentifier","verificationCode","MOCK_ACCOUNT","xrefId","firstName","lastName","memberSince","birthDate","gender","email","primaryPh","secondaryPh","stripeCustomer","homeStoreId","street1","street2","city","countryId","zipCode","regionNumber","MOCK_QSYS_ACCOUNT","userName","name","info","address","height","qsysAccount","MOCK_ACTIVE_COUPONS","couponIssuedId","orderItemId","couponId","storeId","employeeId","stripePlanId","isActive","effectiveAt","expiresAt","MOCK_PROFILE","profile","membership","account","vehicles","activeCoupons","MOCK_ORDER_HEADER_1","orderId","storeNumber","storeState","storeCity","regionId","customerId","custFirstName","custLastName","cashierId","cashierFirstName","cashierLastName","deviceId","lane","orderType","OrderTypesEnum","STORE","orderStatus","isNewCustomer","isEmployee","totalTaxable","totalMarkDowns","totalMarkUps","subTotal","orderTotal","submissionAt","submissionTime","vehicleVin","vehicleState","vehicleLicense","laneType","washType","MockGoodWashLevelName","description","MOCK_ORDER_HEADER_2","MockBetterWashLevelName","MOCK_ORDER_HEADER_3","MockBestWashLevelName","MOCK_ORDER_HEADER_4","MOCK_ORDER_ITEM_1","itemId","sku","orderedQty","unitPrice","taxRate","priceInclTax","grossTotal","taxTotal","lineTotal","MOCK_ORDER_ITEM_2","MOCK_ORDER_ITEM_3","MOCK_ORDER_ITEM_4","MOCK_ORDER_1","membershipId","stripeCustomerId","mbrCouponIssuedId","nextBillingAmount","createReasonCode","NEWMEMBERSHIP","isNewMember","isNewVehicle","isRewash","totalManualDiscount","holds","items","markDowns","markUps","payments","orderPaymentId","paymentAmount","paymentStatus","paymentId","paymentType","last4","expiresMonth","expiresYear","MOCK_ORDER_2","MOCK_ORDER_3","MOCK_ORDER_4","MOCK_CUSTOMER_PAYMENT_METHOD","customerPaymentId","brand","expMonth","expYear","isDefault","MOCK_PRICE_TABLE","plans","base","myQQName","price","flock","myQQShortDisplayName","features","position","washHierarchy","availableForPurchase","washLevelId","backgroundImageUrl","washLevelImageUrl","MockCeramicWashLevelName","MOCK_PRICE_TABLE_WITHOUT_PRICE","MOCK_PROMO","couponType","serialNo","markDownId","singleUse","totalIssued","maxRedemptions","remainingRedemptions","limitRedemptions","durationQty","MOCK_SUBSCRIPTION","renewalDate","renewalAmount","discountAmount","renewalAmountBeforeDiscount","subscriptionItems","amount","quantity","itemType","SubscriptionItemTypeEnum","status","stripeSubscription","cancel_at_period_end","cancel_at","MOCK_REGIONS","timeZone","MOCK_ACCOUNT_CHECK","__spreadProps","__spreadValues","type","MOCK_ACCOUNT_INFO","currentPeriodEnd","currentPeriodStart","invoiceAmount","invoiceId","StripeStatusEnum","ACTIVE","stripeVehicles","upcomingInvoice","cancelAtPeriodEnd","SOCIAL_MEDIA_LINKS","instagram","facebook","snapchat","twitter","youtube","MOCK_PROMO_DETAILS","code","MOCK_ACCOUNT_QUOTA","quotaAllowed","quotaConsumed","MOCK_SWAP_REASONS","id","name","description","MOCK_VEHICLE_SWAP_RESPONSE","currentVehicleId","newVehicleId","MOCK_CANCEL_REASONS","message","code","MOCK_GRANDOPENING_PROMO","disclaimer","customOverride","MockPlansPromoSvg","grandOpening","grandOpeningHomeStoreId","autoApplyOrderTypes","OrderTypesEnum","NEWMEMBERSHIP","crossOutDefaultPrice","planSpecificOverride","position","type","serialNo","fixedBasePrice","fixedFlockPrice","sku","companyWidePromo","autoApplyEffectiveAt","autoApplyExpiresAt","MOCK_FLOCK_ONLY_PROMO","ADDMEMBERSHIP","VehiclePageSvg","MOCK_FLOCK_AND_NEW_MEMBERSHIP_PROMO","MOCK_B2B_BENEFIT","companyName","contractDescription","planSpecificBenefit","benefitDescription","contractId","crossOutBasePrice","itemId","e","r","t","n","o","a","i","c","jwt_decode_esm_default","refreshTokenKey","environment","OfflineAuthService","constructor","keycloak","router","store$","window","_online$","BehaviorSubject","navigator","onLine","_access$","_auth$","pipe","skip","keycloakInitialized","merge","select","selectKeycloakInitialized","filter","init","take","timer","mapTo","subscribe","keycloakInstance","getKeycloakInstance","afterGettingKeycloakInstance","timeout","retries","retryKeycloak","setTimeout","state","routerState","snapshot","fromEvent","online","next","switchMap","of","isLoggedIn","map","loggedIn","distinctUntilChanged","status","handleAllowAccessStatusChange","authenticated","handleKeycloakCallbacks","baseOnAuthRefreshError","onAuthRefreshError","handleAuthRefreshFailure","onAuthSuccess","onAuthError","onAuthLogout","attemptReauth","then","savedRefreshToken","exists","isRefreshTokenExpired","parsed","catch","e","value","refreshToken","refreshTokenParsed","sessionStorage","setItem","online$","Promise","allowAccess$","rt","getItem","ret","raw","jwt_decode","__async","updateToken","parsedToken","iat","issued","Date","expires","setDate","getDate","offlineTokenDuration","expired","removeItem","isSavedTokenValid","ɵɵinject","KeycloakService","Router","Store","WINDOW","factory","ɵfac","providedIn","_OfflineAuthService","orders","MOCK_ORDER_HEADER_1","MOCK_ORDER_HEADER_2","MOCK_ORDER_HEADER_3","MOCK_ORDER_HEADER_4","__spreadProps","__spreadValues","submissionAt","submissionTime","profile","MOCK_QSYS_ACCOUNT","account","MOCK_ACCOUNT","vehicles","MOCK_VEHICLES","b2bBenefit","MOCK_B2B_BENEFIT","paymentMethods","MOCK_CUSTOMER_PAYMENT_METHOD","linked","hasMembership","getMembership","activeCoupons","undefined","getProfile","membership","ofDelay","t","delayTimeInMs","of","pipe","delay","MyQQMockService","offlineError","__async","Promise","resolve","constructor","http","router","dialogController","offlineAuth","store$","window","url","environment","URLs","MyQQ","throwAndLogError","err","handleOfflineGet","EMPTY","getMyProfile","newAccount","p","updateAccount","getAllRegions","MOCK_REGIONS","getVehicles","postVehicle","vehicle","newVehicle","isActive","vehicleId","shortid","isTemporaryIdentifier","verificationCode","concat","removeVehicle","req","filter","getMySubscriptions","some","MOCK_SUBSCRIPTION","none","getMyOrders","recordCount","offset","pageSize","pageCount","pageNo","getOrderById","orderId","MOCK_ORDER_1","throwError","Error","getMyPaymentMethods","postPaymentMethod","method","newPaymentMethod","_","accountLookup","type","accountLookupLast4Plate","linkAccount","relinkAccount","getPriceTable","MOCK_PRICE_TABLE","getPriceTableByZip","zip","MOCK_PRICE_TABLE_WITHOUT_PRICE","checkPromoCode","serialNo","MOCK_PROMO","calculateOrder","submitOrder","accountInfo","MOCK_ACCOUNT_INFO","payInvoice","getAllStores","MOCK_STORE","getPromoDetails","MOCK_PROMO_DETAILS","getCompanyWidePromoDetails","MOCK_GRANDOPENING_PROMO","getAccountQuota","MOCK_ACCOUNT_QUOTA","getSwapReasons","MOCK_SWAP_REASONS","swapVehicleOnMembership","swapRequest","MOCK_VEHICLE_SWAP_RESPONSE","patchVehicle","cancelMembership","cancelRequest","subscriptionId","checkEligibilityForRetentionOffer","startTimestamp","eligible","acceptRetentionOffer","success","getCancelReasons","MOCK_CANCEL_REASONS","getAppMinVersion","api","ios","minimum","android","web","getMarketingContents","vehiclesPageCardImage","isDismissable","showIfUnauth","link","layout","homePageCardImage","getB2bBenefit","linkB2cWithCode","personId","signUpCode","sendContactForm","data","id","ɵɵinject","HttpClient","Router","MatDialog","OfflineAuthService","Store","WINDOW","factory","ɵfac","_MyQQMockService","MyQQServiceModule","provide","MyQQService","useClass","environment","useMockHttpServices","MyQQMockService","provideHttpClient","withInterceptorsFromDi","_MyQQServiceModule","selectMyQQState","createFeatureSelector","myqqFeatureKey","selectInitialLoad","createSelector","initialLoadLens","get","selectAccountInfo","accountInfoLens","selectProfile","profileLens","selectMembership","membershipLens","selectMembershipVehicles","map","membership","vehicles","selectAccount","accountLens","selectNewAccount","newAccountLens","selectUpdateAccount","updateAccountLens","selectStores","storesLens","selectRegions","regionsLens","selectMySubscription","subscriptionLens","selectOrders","ordersLens","selectPriceTable","priceTableLens","selectPaymentMethods","paymentMethodsLens","selectPostPaymentMethod","postPaymentMethodLens","selectVehicles","getVehiclesLens","selectVehiclesWithTemporaryIdentifier","filter","vehicle","isTemporaryIdentifier","selectAddVehicle","addVehicleLens","selectEditVehicle","editVehicleLens","selectGetOrderById","getOrderByIdLens","selectOrderById","id","record","initial","selectAccountLookup","accountLookupLens","selectLinkAccount","linkAccountLens","selectCalculateOrder","calculateOrderLens","selectSubmitOrder","submitOrderLens","selectPendingOrder","pendingOrderLens","selectModifySubscriptionPlan","modifySubscriptionPlanLens","selectMembershipPurchase","membershipPurchaseLens","selectCheckPromo","checkPromoCodeLens","selectPayFailedInvoice","payInvoiceLens","selectStripeSubscription","accountInfo","fromNullable","account","stripeSubscription","selectPersonData","profile","orders","paymentMethods","subscription","sequenceStruct","selectProfileAndSubscription","selectVehicleById","vehiclesDatumEither","chain","foundVehicle","find","v","vehicleId","notNil","success","failure","error","selectUserFullName","firstName","lastName","join","name","selectUsername","selectDefaultPaymentMethod","pm","isDefault","selectMembershipInfo","menu","selectAccountLinked","squash","selectFailedInvoice","status","StripeStatusEnum","PAST_DUE","title","description","invoiceAmount","amount","invoiceId","route","outlets","modal","selectSoftCancel","cancelAtPeriodEnd","environment","supportEmail","selectAllStores","selectPromoDetails","promoDetailsLens","selectCompanyWidePromo","companyWidePromoDetailsLens","selectAccountAndMembershipStatus","profileAndAccount","hasAccount","hasMembership","info","qsysAccount","stripeStatus","ACTIVE","TRIALING","selectStayAndSaveSubscriptionDiscount","discount","stayAndSave","selectAccountQuota","accountQuotaLens","selectSwapReasons","swapReasonsLens","selectSwapMembership","swapMembershipLens","selectNonMemberVehicles","expiring","selectEditVehicleIdentifier","editVehicleIdentifierLens","selectCancelMembership","cancelMembershipLens","selectIsEligibleForRetentionOffer","checkEligibilityForRetentionOfferLens","selectRetentionOfferAcceptance","acceptRetentionOfferLens","selectCancelReasons","cancelReasonsLens","selectAppMinVersion","appMinVersionLens","selectVehiclesOnOrder","vehiclesOnOrderLens","selectMarketingContents","marketingContentLens","selectB2bBenefit","b2bBenefitLens","selectLinkB2C","linkB2CLens","findMenuPair","subscriptionPlan","base","flock","vehiclesToOrderItems","itemId","vehicles","orderedQty","map","vehicleId","getOrderType","currentSubscription","targetSubscription","washHierarchy","OrderTypesEnum","UPGRADESUBSCRIPTION","DOWNGRADESUBSCRIPTION","buildMembershipItems","clone","baseItems","shift","flockItems","buildChangeOrder","current","target","orderType","removedItems","addedItems","items","DisplayVehiclePlatePipe","transform","vehicleInfo","displayVehiclePlate","pure","_DisplayVehiclePlatePipe","DisplayOrderVehiclePlatePipe","_DisplayOrderVehiclePlatePipe","vehicle","separator","state","license","vin","reformatVehicleKey","vehicleKey","displayOrderVehiclePlate","order","vehicleState","vehicleLicense","vehicleVin","includes","replace","withDatumEither","start","obs","pipe","map","result","success","startWith","toRefresh","pending","catchError","e","of","failure","filterSuccessMapToRightValue","filter","isSuccess","de","value","right","sequenceDES","sequenceS","datumEither","sequenceDET","sequenceT","combineS","data","combineLatest","Object","values","filter","value","isObservable","pipe","map","DEs","_fromPairs","_zip","keys","MyQQOrderChainEffects","autoApplyPromo","promoDetails","orderPromo","sku","orderType","finalPromoCode","environment","unleash","enable","deletedPromo","planSpecificOverride","length","OrderTypesEnum","DOWNGRADESUBSCRIPTION","REMOVESUBVEHICLE","includes","autoApplyOrderTypes","planSpecificPromoCode","getSpecificPlanOverride","serialNo","code","handleAddVehicleToOrder","pendingOrderOption","membershipPurchaseOption","vehiclesOnOrder","subscriptionOption","priceTable","vehicles","newVehicle","currentSubscriptionPlan","isSome","getSpecificWashLevel","value","washLevelId","plans","pendingOrderPromo","markDowns","vehiclesWithExistingMembership","filter","v","hasMembership","limits","maxVehiclesOnSubscription","UPGRADESUBSCRIPTION","ADDMEMBERSHIP","_sortBy","displayVehiclePlate","subscriptionPlan","promo","NEWMEMBERSHIP","wash","isNone","constructor","actions$","store$","router","setPendingOrderPromoCodeOnCheckPromoSuccess$","createEffect","pipe","checkPromoCode","success","match","result","expiresAt","Date","effectiveAt","map","params","setPendingOrderPromoCode","setPendingOrderOnAddVehicleSuccess$","addVehicle","switchMap","combineLatest","select","selectPendingOrder","selectMembershipPurchase","selectVehiclesOnOrder","selectMySubscription","tap","subscription","isInitial","dispatch","getMySubscriptions","pending","filterSuccessMapToRightValue","selectPriceTable","getPriceTable","selectVehicles","getVehicles","first","notNil","distinctUntilKeyChanged","addMembershipOrder","addFlockOrder","setVehiclesOnOrderOnAddFlockOrder$","setVehiclesOnOrder","setVehiclesOnOrderOnAddmembershipOrder$","i","calculateOrderOnPendingOrderChange$","distinctUntilChanged","delay","order","calculateOrder","addFlockOrder$","val","selectPromoDetails","selectCompanyWidePromo","selectPromoCode","specificPromoDetail","companyWidePromo","urlPromo","isSuccess","right","__spreadProps","__spreadValues","base","menuPair","findMenuPair","items","vehiclesToOrderItems","flock","setPendingOrder","removeFlockOrder$","removeFlockOrder","reasonCode","createReasonCode","setModifySubscriptionPlan$","changeMembershipOrder","targetSubscription","setModifySubscriptionPlan","changeMembershipOrder$","currentSubscription","buildChangeOrder","waiveUpgradeFee","setMembershipPurchase$","setMembershipPurchase","some","addMembership$","buildMembershipItems","_take","displayOrderVehiclePlate","ɵɵinject","Actions","Store","Router","factory","ɵfac","_MyQQOrderChainEffects","MyQQPromoChainEffects","constructor","actions$","router","setLocationOnGetPromoDetails$","createEffect","pipe","filter","getPromoDetails","success","match","map","value","result","location","notNil","setLocation","removePromoOnPromoDetailsFailure$","filterActions","failure","setUIPromoCode","getPromoDetailsOnSetUIPromo$","distinctUntilKeyChanged","pending","clearCheckedPromoOnClearPromoFromOrder$","clearPromoCode","clearFailedPromoCheck","ɵɵinject","Actions","Router","factory","ɵfac","_MyQQPromoChainEffects","NgrxMyQQModule","StoreModule","forFeature","myqqFeatureKey","myqqReducer","EffectsModule","MyQQEffects","MyQQChainEffects","MyQQOrderChainEffects","MyQQPromoChainEffects","MyQQServiceModule","_NgrxMyQQModule","ERR_SW_NOT_SUPPORTED","errorObservable","message","defer","throwError","NgswCommChannel","serviceWorker","controllerChanges","fromEvent","map","currentController","of","controllerWithChanges","concat","filter","c","switchMap","events","event","publish","action","payload","take","tap","sw","__spreadValues","type","operationNonce","waitForOperationCompleted","postMessage","result","filterFn","nonce","SwPush","_SwPush","Subject","NEVER","registration","workerDrivenSubscriptions","pm","merge","options","pushOptions","key","applicationServerKey","i","sub","doUnsubscribe","success","input","__ngFactoryType__","ɵɵinject","ɵɵdefineInjectable","SwUpdate","_SwUpdate","SCRIPT","InjectionToken","ngswAppInitializer","injector","script","platformId","isPlatformBrowser","ngZone","NgZone","appRef","ApplicationRef","onControllerChange","readyToRegister$","strategy","args","delayWithTimeout","whenStable$","from","err","timeout","delay","ngswCommChannelFactory","opts","SwRegistrationOptions","provideServiceWorker","makeEnvironmentProviders","PLATFORM_ID","APP_INITIALIZER","Injector","ServiceWorkerModule","_ServiceWorkerModule","ɵɵdefineNgModule","ɵɵdefineInjector","SimpleSnackBar_Conditional_2_Template","rf","ctx","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","_c0","MatSnackBarContainer_ng_template_4_Template","MAX_TIMEOUT","MatSnackBarRef","containerInstance","_overlayRef","Subject","duration","MAT_SNACK_BAR_DATA","InjectionToken","MatSnackBarConfig","MatSnackBarLabel","_MatSnackBarLabel","__ngFactoryType__","ɵɵdefineDirective","MatSnackBarActions","_MatSnackBarActions","MatSnackBarAction","_MatSnackBarAction","SimpleSnackBar","_SimpleSnackBar","snackBarRef","data","ɵɵdirectiveInject","ɵɵdefineComponent","ɵɵStandaloneFeature","ɵɵtemplate","ɵɵconditional","MatButton","matSnackBarAnimations","trigger","state","style","transition","animate","uniqueId","MatSnackBarContainer","_MatSnackBarContainer","BasePortalOutlet","_ngZone","_elementRef","_changeDetectorRef","_platform","snackBarConfig","inject","DOCUMENT","portal","result","event","fromState","toState","onEnter","element","panelClasses","cssClass","label","labelClass","id","modals","i","modal","ariaOwns","newValue","inertElement","liveElement","focusedElement","NgZone","ElementRef","ChangeDetectorRef","Platform","ɵɵviewQuery","CdkPortalOutlet","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵsyntheticHostListener","$event","ɵɵsyntheticHostProperty","ɵɵInheritDefinitionFeature","ɵɵelement","ɵɵattribute","MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY","MAT_SNACK_BAR_DEFAULT_OPTIONS","MatSnackBar","_MatSnackBar","parent","value","_overlay","_live","_injector","_breakpointObserver","_parentSnackBar","_defaultConfig","component","config","template","message","action","_config","__spreadValues","overlayRef","userInjector","injector","Injector","containerPortal","ComponentPortal","containerRef","content","userConfig","container","TemplateRef","TemplatePortal","contentRef","Breakpoints","takeUntil","overlayConfig","OverlayConfig","positionStrategy","isRtl","isLeft","isRight","ɵɵinject","Overlay","LiveAnnouncer","BreakpointObserver","ɵɵdefineInjectable","MatSnackBarModule","_MatSnackBarModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatSnackBar","OverlayModule","PortalModule","MatButtonModule","MatCommonModule","SimpleSnackBar","UpdateAppComponent","constructor","dialogRef","cdnHost","environment","ngOnInit","addPanelClass","close","ɵɵdirectiveInject","MatDialogRef","selectors","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵlistener","$event","preventDefault","ɵɵadvance","ɵɵpropertyInterpolate1","ɵɵsanitizeUrl","_UpdateAppComponent","PwaUpdatePromptService","constructor","matSnackBar","swUpdate","router","dialog","window","promptForUpdate","open","onAction","pipe","switchMap","activateUpdate","subscribe","navigate","then","location","reload","promptForAndroidDownload","downloadAndroidApp","forceUpdate","UpdateAppComponent","disableClose","afterClosed","ɵɵinject","MatSnackBar","SwUpdate","Router","MatDialog","WINDOW","factory","ɵfac","providedIn","_PwaUpdatePromptService","semver","pwaMode","environment","twaId","checkUpdateInterval","PwaService","constructor","swUpdate","platform","store$","pwaUpdatePrompt","router","unleashService","window","isInstalled","enableAndroidFlag$","enableAndroidRelease$","isInStandaloneMode","navigator","matchMedia","matches","sessionStorage","setItem","isMobile","IOS","ANDROID","device","getInstalledRelatedApps","then","apps","Array","isArray","map","app","id","includes","initPwaService","handleCheckUpdates","standalone","getItem","installed","dispatch","getAppMinVersion","pending","versionUpdates","subscribe","evt","type","pwaLog","version","hash","currentVersion","latestVersion","select","selectAppMinVersion","pipe","filter","isReplete","resp","skip","take","androidFlag","promptForAndroidDownload","isSuccess","lt","value","right","web","minimum","forceUpdate","promptForUpdate","error","interval","checkForUpdate","catch","e","LogLevels","WARNING","msg","level","INFO","logContents","message","actionType","name","ERROR","FATAL","namespace","data","log","updateAndReload","activateUpdate","navigate","location","reload","ɵɵinject","SwUpdate","Platform","Store","PwaUpdatePromptService","Router","UnleashService","WINDOW","factory","ɵfac","providedIn","_PwaService","ResizeService","constructor","window","_isMobile$","BehaviorSubject","innerWidth","environment","mobileBreakpoint","checkMobile","_","isMobile$","value","next","listeners","fromEvent","pipe","throttleTime","animationFrameScheduler","subscribe","runListeners","bind","addListener","listener","push","removeListener","filter","l","event","forEach","ɵɵinject","WINDOW","factory","ɵfac","providedIn","_ResizeService","ɵɵprojection","ɵɵelementContainer","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","handleAuthentication","handleRegister","ɵɵtemplate","DefaultLayoutComponent_myqq_mobile_layout_2_ng_container_3_Template","ɵɵelementEnd","ɵɵproperty","homeLink","mobileAccountLinks","accountLinked$","ɵɵpipeBind1","enableFriendBuy$","referralLink","allowAccess$","online$","greenBackground","ɵɵadvance","content_r3","_r4","DefaultLayoutComponent_myqq_desktop_layout_4_ng_container_3_Template","accountLinks","DefaultLayoutComponent","constructor","keycloakSvc","offlineAuth","store$","promptService","titleService","resize","unleashService","window","pageTitle","select","selectAccountLinked","title","url","classes","allowUnauth","allowWithoutAccount","icon","svg","name","noText","profileLink","isMobile","isMobile$","ngOnInit","setTitle","loggedIn","redirectUri","getRedirectUri","logout","logoutRedirectUri","location","origin","options","environment","keycloak","loginOptions","loginRedirectUri","login","register","registerRedirectUri","ɵɵdirectiveInject","KeycloakService","OfflineAuthService","Store","PwaService","Title","ResizeService","UnleashService","WINDOW","selectors","inputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","DefaultLayoutComponent_ng_template_0_Template","ɵɵtemplateRefExtractor","DefaultLayoutComponent_myqq_mobile_layout_2_Template","DefaultLayoutComponent_myqq_desktop_layout_4_Template","_DefaultLayoutComponent","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵstyleProp","ctx_r1","color","ɵɵattributeInterpolate1","ɵɵpipeBind1","account_r1","key","ɵɵproperty","uri","value","ɵɵsanitizeUrl","_blank","ɵɵadvance","ɵɵpropertyInterpolate","ɵɵtextInterpolate","ɵɵelementContainerStart","ɵɵtemplate","SocialComponent_ng_container_0_a_1_Template","SocialComponent","constructor","SOCIAL_MEDIA_LINKS","ngOnInit","accounts","instagram","facebook","snapchat","twitter","youtube","selectors","inputs","decls","vars","consts","template","rf","ctx","SocialComponent_ng_container_0_Template","_SocialComponent","SocialModule","CommonModule","MatIconModule","_SocialModule","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵattributeInterpolate1","link_r1","title","ɵɵpropertyInterpolate1","id","ɵɵproperty","url","ɵɵsanitizeUrl","ɵɵadvance","ɵɵtextInterpolate","ɵɵelement","FooterComponent","constructor","showBadge","copyrightNotice","Date","getFullYear","toString","links","environment","termsOfUse","privacyPolicy","ccpa","selectors","inputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","ɵɵtemplate","FooterComponent_a_2_Template","ɵɵprojection","FooterComponent_div_7_Template","ɵɵtextInterpolate1","_FooterComponent","FooterModule","CommonModule","SocialModule","_FooterModule","_c0","_c1","_c2","_c3","MatDrawerContainer_Conditional_0_Template","rf","ctx","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵelementEnd","ɵɵclassProp","MatDrawerContainer_Conditional_3_Template","ɵɵprojection","_c4","_c5","MatSidenavContainer_Conditional_0_Template","MatSidenavContainer_Conditional_3_Template","_c6","matDrawerAnimations","trigger","state","style","transition","animate","MAT_DRAWER_DEFAULT_AUTOSIZE","InjectionToken","MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY","MAT_DRAWER_CONTAINER","MatDrawerContent","_MatDrawerContent","CdkScrollable","_changeDetectorRef","_container","elementRef","scrollDispatcher","ngZone","__ngFactoryType__","ɵɵdirectiveInject","ChangeDetectorRef","forwardRef","MatDrawerContainer","ElementRef","ScrollDispatcher","NgZone","ɵɵdefineComponent","rf","ctx","ɵɵstyleProp","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c0","ɵɵprojectionDef","ɵɵprojection","MatDrawer","_MatDrawer","value","coerceBooleanProperty","_elementRef","_focusTrapFactory","_focusMonitor","_platform","_ngZone","_interactivityChecker","_doc","Subject","EventEmitter","filter","o","map","e","mapTo","inject","Injector","takeUntil","opened","fromEvent","event","hasModifierKey","fromState","toState","element","options","callback","selector","elementToFocus","afterNextRender","focusOrigin","activeEl","openedVia","isOpen","result","restoreFocus","resolve","take","open","newPosition","parent","FocusTrapFactory","FocusMonitor","Platform","InteractivityChecker","DOCUMENT","ɵɵviewQuery","_c1","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵsyntheticHostListener","$event","ɵɵsyntheticHostProperty","ɵɵattribute","ɵɵclassProp","ɵɵelementStart","ɵɵelementEnd","matDrawerAnimations","_MatDrawerContainer","_dir","_element","viewportRuler","defaultAutosize","_animationMode","QueryList","startWith","drawer","item","debounceTime","left","right","width","AfterRenderPhase","merge","isAdd","classList","className","Directionality","ViewportRuler","ANIMATION_MODULE_TYPE","dirIndex","ɵɵcontentQuery","_c3","_c2","ɵɵtemplate","MatDrawerContainer_Conditional_0_Template","MatDrawerContainer_Conditional_3_Template","ɵɵconditional","ɵɵadvance","MatSidenavContent","_MatSidenavContent","changeDetectorRef","container","MatSidenavContainer","MatSidenav","_MatSidenav","coerceNumberProperty","ɵMatSidenav_BaseFactory","ɵɵgetInheritedFactory","_MatSidenavContainer","ɵMatSidenavContainer_BaseFactory","_c5","_c4","MatSidenavContainer_Conditional_0_Template","MatSidenavContainer_Conditional_3_Template","_c6","MatSidenavModule","_MatSidenavModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CdkScrollableModule","_c0","_c1","_c2","_c3","_c4","_c5","LIST_OPTION","InjectionToken","MatListItemTitle","_MatListItemTitle","_elementRef","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","MatListItemLine","_MatListItemLine","MatListItemMeta","_MatListItemMeta","_MatListItemGraphicBase","__MatListItemGraphicBase","_listOption","rf","ctx","ɵɵclassProp","MatListItemAvatar","_MatListItemAvatar","ɵMatListItemAvatar_BaseFactory","ɵɵgetInheritedFactory","ɵɵInheritDefinitionFeature","MatListItemIcon","_MatListItemIcon","ɵMatListItemIcon_BaseFactory","MAT_LIST_CONFIG","MatListBase","_MatListBase","inject","value","coerceBooleanProperty","ɵɵattribute","MatListItemBase","_MatListItemBase","lines","coerceNumberProperty","_ngZone","_listBase","_platform","globalRippleOptions","animationMode","Subscription","RippleRenderer","merge","recheckUnscopedContent","numberOfLines","unscopedContentEl","treatAsTitle","numOfLines","node","NgZone","Platform","MAT_RIPPLE_GLOBAL_OPTIONS","ANIMATION_MODULE_TYPE","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","MatListItem","_MatListItem","MatListItemBase","activated","coerceBooleanProperty","element","ngZone","listBase","platform","globalRippleOptions","animationMode","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","MatListBase","Platform","MAT_RIPPLE_GLOBAL_OPTIONS","ANIMATION_MODULE_TYPE","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","MatListItemLine","MatListItemTitle","MatListItemMeta","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","_c2","_c3","ɵɵattribute","ɵɵclassProp","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c5","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","_c4","ɵɵprojection","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ɵɵresetView","ɵɵelementEnd","ɵɵelement","CdkObserveContent","MatNavList","_MatNavList","MatListBase","ɵMatNavList_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineComponent","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","_c0","rf","ctx","ɵɵprojectionDef","ɵɵprojection","_c1","MatListModule","_MatListModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ObserversModule","CommonModule","MatCommonModule","MatRippleModule","MatPseudoCheckboxModule","MatDividerModule","_c0","_c1","MatToolbarRow","_MatToolbarRow","__ngFactoryType__","ɵɵdefineDirective","MatToolbar","_MatToolbar","_elementRef","_platform","document","ɵɵdirectiveInject","ElementRef","Platform","DOCUMENT","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵclassMap","ɵɵclassProp","ɵɵStandaloneFeature","ɵɵprojectionDef","ɵɵprojection","MatToolbarModule","_MatToolbarModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵattributeInterpolate1","link_r2","title","ɵɵpropertyInterpolate1","ɵɵpipeBind1","ɵɵproperty","allowWithoutAccount","ctx_r2","accountLinked","url","ɵɵadvance","ɵɵtextInterpolate","icon","name","referralLink","ɵɵelement","ɵɵtemplate","DesktopLayoutComponent_mat_sidenav_1_a_13_Template","DesktopLayoutComponent_mat_sidenav_1_a_14_Template","ɵɵlistener","ɵɵrestoreView","_r1","ɵɵnextContext","ɵɵresetView","handleAuthentication","authenticated","value","ɵɵpureFunction0","_c1","cdnHost","ɵɵsanitizeUrl","homeLink","accountLinks","ɵɵclassProp","online","_r4","handleRegister","DesktopLayoutComponent_mat_toolbar_9_a_1_Template","isShowingAccountPage","DesktopLayoutComponent","constructor","router","authenticate","EventEmitter","register","accountClicked","environment","match","loggedIn","emit","flipArrow","ɵɵdirectiveInject","Router","selectors","inputs","outputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","DesktopLayoutComponent_mat_sidenav_1_Template","ɵɵelementContainerStart","DesktopLayoutComponent_mat_toolbar_7_Template","DesktopLayoutComponent_mat_toolbar_9_Template","DesktopLayoutComponent_div_11_Template","ɵɵprojection","DesktopLayoutComponent_footer_14_Template","_DesktopLayoutComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵlistener","ɵɵrestoreView","_r3","ctx_r3","ɵɵnextContext","ɵɵresetView","handleRegister","ɵɵtext","handleAuthentication","authenticated","value","ɵɵadvance","ɵɵpropertyInterpolate1","cdnHost","ɵɵsanitizeUrl","ɵɵclassProp","online","ɵɵproperty","ɵɵpipeBind1","link_r6","title","allowWithoutAccount","accountLinked","url","ɵɵtextInterpolate","icon","name","referralLink","_r5","ɵɵtemplate","MobileLayoutComponent_ng_container_8_a_20_Template","MobileLayoutComponent_ng_container_8_a_21_Template","homeLink","accountLinks","_r7","MobileLayoutComponent","constructor","greenBackground","showQuickQuackHeader","authenticate","EventEmitter","register","termsLink","environment","termsOfUse","privacyLink","privacyPolicy","ccpaLink","ccpa","loggedIn","emit","ngOnInit","copyYear","Date","getFullYear","toString","selectors","inputs","locationsLink","outputs","ngContentSelectors","_c0","decls","vars","consts","template","rf","ctx","_r1","drawer_r2","ɵɵreference","toggle","close","MobileLayoutComponent_ng_container_6_Template","MobileLayoutComponent_ng_container_8_Template","MobileLayoutComponent_a_19_Template","MobileLayoutComponent_div_20_Template","MobileLayoutComponent_div_23_Template","ɵɵprojection","_MobileLayoutComponent","LayoutsModule","CommonModule","FooterModule","MatButtonModule","MatIconModule","MatListModule","MatMenuModule","MatSidenavModule","MatToolbarModule","RouterModule","SocialModule","_LayoutsModule","DefaultLayoutComponent","NgIf","NgTemplateOutlet","DesktopLayoutComponent","MobileLayoutComponent","AsyncPipe"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,54,55,63,74,75,89,90,91]}