{"version":3,"sources":["node_modules/@angular/cdk/fesm2022/coercion.mjs","node_modules/@angular/cdk/fesm2022/platform.mjs","node_modules/@angular/cdk/fesm2022/bidi.mjs","node_modules/@angular/cdk/fesm2022/scrolling.mjs","node_modules/@angular/cdk/fesm2022/keycodes.mjs","node_modules/@angular/cdk/fesm2022/overlay.mjs","node_modules/ng-select2-component/fesm2022/ng-select2-component.mjs"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\n/** Coerces a data-bound value (typically a string) to a boolean. */\nfunction coerceBooleanProperty(value) {\n  return value != null && `${value}` !== 'false';\n}\nfunction coerceNumberProperty(value, fallbackValue = 0) {\n  if (_isNumberValue(value)) {\n    return Number(value);\n  }\n  return arguments.length === 2 ? fallbackValue : 0;\n}\n/**\n * Whether the provided value is considered a number.\n * @docs-private\n */\nfunction _isNumberValue(value) {\n  // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n  // and other non-number values as NaN, where Number just uses 0) but it considers the string\n  // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n  return !isNaN(parseFloat(value)) && !isNaN(Number(value));\n}\nfunction coerceArray(value) {\n  return Array.isArray(value) ? value : [value];\n}\n\n/** Coerces a value to a CSS pixel value. */\nfunction coerceCssPixelValue(value) {\n  if (value == null) {\n    return '';\n  }\n  return typeof value === 'string' ? value : `${value}px`;\n}\n\n/**\n * Coerces an ElementRef or an Element into an element.\n * Useful for APIs that can accept either a ref or the native element itself.\n */\nfunction coerceElement(elementOrRef) {\n  return elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n}\n\n/**\n * Coerces a value to an array of trimmed non-empty strings.\n * Any input that is not an array, `null` or `undefined` will be turned into a string\n * via `toString()` and subsequently split with the given separator.\n * `null` and `undefined` will result in an empty array.\n * This results in the following outcomes:\n * - `null` -&gt; `[]`\n * - `[null]` -&gt; `[\"null\"]`\n * - `[\"a\", \"b \", \" \"]` -&gt; `[\"a\", \"b\"]`\n * - `[1, [2, 3]]` -&gt; `[\"1\", \"2,3\"]`\n * - `[{ a: 0 }]` -&gt; `[\"[object Object]\"]`\n * - `{ a: 0 }` -&gt; `[\"[object\", \"Object]\"]`\n *\n * Useful for defining CSS classes or table columns.\n * @param value the value to coerce into an array of strings\n * @param separator split-separator if value isn't an array\n */\nfunction coerceStringArray(value, separator = /\\s+/) {\n  const result = [];\n  if (value != null) {\n    const sourceValues = Array.isArray(value) ? value : `${value}`.split(separator);\n    for (const sourceValue of sourceValues) {\n      const trimmedString = `${sourceValue}`.trim();\n      if (trimmedString) {\n        result.push(trimmedString);\n      }\n    }\n  }\n  return result;\n}\nexport { _isNumberValue, coerceArray, coerceBooleanProperty, coerceCssPixelValue, coerceElement, coerceNumberProperty, coerceStringArray };\n","import * as i0 from '@angular/core';\nimport { PLATFORM_ID, Injectable, Inject, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator;\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  hasV8BreakIterator = typeof Intl !== 'undefined' && Intl.v8BreakIterator;\n} catch {\n  hasV8BreakIterator = false;\n}\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\nlet Platform = /*#__PURE__*/(() => {\n  class Platform {\n    constructor(_platformId) {\n      this._platformId = _platformId;\n      // We want to use the Angular platform check because if the Document is shimmed\n      // without the navigator, the following checks will fail. This is preferred because\n      // sometimes the Document may be shimmed without the user's knowledge or intention\n      /** Whether the Angular application is being rendered in the browser. */\n      this.isBrowser = this._platformId ? isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\n      /** Whether the current browser is Microsoft Edge. */\n      this.EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n      /** Whether the current rendering engine is Microsoft Trident. */\n      this.TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n      // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n      /** Whether the current rendering engine is Blink. */\n      this.BLINK = this.isBrowser && !!(window.chrome || hasV8BreakIterator) && typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT;\n      // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n      // ensure that Webkit runs standalone and is not used as another engine's base.\n      /** Whether the current rendering engine is WebKit. */\n      this.WEBKIT = this.isBrowser && /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\n      /** Whether the current platform is Apple iOS. */\n      this.IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n      // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n      // them self as Gecko-like browsers and modify the userAgent's according to that.\n      // Since we only cover one explicit Firefox case, we can simply check for Firefox\n      // instead of having an unstable check for Gecko.\n      /** Whether the current browser is Firefox. */\n      this.FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n      /** Whether the current platform is Android. */\n      // Trident on mobile adds the android platform to the userAgent to trick detections.\n      this.ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n      // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n      // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n      // Safari browser should also use Webkit as its layout engine.\n      /** Whether the current browser is Safari. */\n      this.SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n    }\n    static {\n      this.ɵfac = function Platform_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Platform)(i0.ɵɵinject(PLATFORM_ID));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: Platform,\n        factory: Platform.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return Platform;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PlatformModule = /*#__PURE__*/(() => {\n  class PlatformModule {\n    static {\n      this.ɵfac = function PlatformModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || PlatformModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: PlatformModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n    }\n  }\n  return PlatformModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Cached result Set of input types support by the current browser. */\nlet supportedInputTypes;\n/** Types of `<input>` that *might* be supported. */\nconst candidateInputTypes = [\n// `color` must come first. Chrome 56 shows a warning if we change the type to `color` after\n// first changing it to something else:\n// The specified value \"\" does not conform to the required format.\n// The format is \"#rrggbb\" where rr, gg, bb are two-digit hexadecimal numbers.\n'color', 'button', 'checkbox', 'date', 'datetime-local', 'email', 'file', 'hidden', 'image', 'month', 'number', 'password', 'radio', 'range', 'reset', 'search', 'submit', 'tel', 'text', 'time', 'url', 'week'];\n/** @returns The input types supported by this browser. */\nfunction getSupportedInputTypes() {\n  // Result is cached.\n  if (supportedInputTypes) {\n    return supportedInputTypes;\n  }\n  // We can't check if an input type is not supported until we're on the browser, so say that\n  // everything is supported when not on the browser. We don't use `Platform` here since it's\n  // just a helper function and can't inject it.\n  if (typeof document !== 'object' || !document) {\n    supportedInputTypes = new Set(candidateInputTypes);\n    return supportedInputTypes;\n  }\n  let featureTestInput = document.createElement('input');\n  supportedInputTypes = new Set(candidateInputTypes.filter(value => {\n    featureTestInput.setAttribute('type', value);\n    return featureTestInput.type === value;\n  }));\n  return supportedInputTypes;\n}\n\n/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents;\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nfunction supportsPassiveEventListeners() {\n  if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n    try {\n      window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\n        get: () => supportsPassiveEvents = true\n      }));\n    } finally {\n      supportsPassiveEvents = supportsPassiveEvents || false;\n    }\n  }\n  return supportsPassiveEvents;\n}\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nfunction normalizePassiveListenerOptions(options) {\n  return supportsPassiveEventListeners() ? options : !!options.capture;\n}\n\n/** The possible ways the browser may handle the horizontal scroll axis in RTL languages. */\nvar RtlScrollAxisType = /*#__PURE__*/function (RtlScrollAxisType) {\n  /**\n   * scrollLeft is 0 when scrolled all the way left and (scrollWidth - clientWidth) when scrolled\n   * all the way right.\n   */\n  RtlScrollAxisType[RtlScrollAxisType[\"NORMAL\"] = 0] = \"NORMAL\";\n  /**\n   * scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  RtlScrollAxisType[RtlScrollAxisType[\"NEGATED\"] = 1] = \"NEGATED\";\n  /**\n   * scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and 0 when scrolled\n   * all the way right.\n   */\n  RtlScrollAxisType[RtlScrollAxisType[\"INVERTED\"] = 2] = \"INVERTED\";\n  return RtlScrollAxisType;\n}(RtlScrollAxisType || {});\n/** Cached result of the way the browser handles the horizontal scroll axis in RTL mode. */\nlet rtlScrollAxisType;\n/** Cached result of the check that indicates whether the browser supports scroll behaviors. */\nlet scrollBehaviorSupported;\n/** Check whether the browser supports scroll behaviors. */\nfunction supportsScrollBehavior() {\n  if (scrollBehaviorSupported == null) {\n    // If we're not in the browser, it can't be supported. Also check for `Element`, because\n    // some projects stub out the global `document` during SSR which can throw us off.\n    if (typeof document !== 'object' || !document || typeof Element !== 'function' || !Element) {\n      scrollBehaviorSupported = false;\n      return scrollBehaviorSupported;\n    }\n    // If the element can have a `scrollBehavior` style, we can be sure that it's supported.\n    if ('scrollBehavior' in document.documentElement.style) {\n      scrollBehaviorSupported = true;\n    } else {\n      // At this point we have 3 possibilities: `scrollTo` isn't supported at all, it's\n      // supported but it doesn't handle scroll behavior, or it has been polyfilled.\n      const scrollToFunction = Element.prototype.scrollTo;\n      if (scrollToFunction) {\n        // We can detect if the function has been polyfilled by calling `toString` on it. Native\n        // functions are obfuscated using `[native code]`, whereas if it was overwritten we'd get\n        // the actual function source. Via https://davidwalsh.name/detect-native-function. Consider\n        // polyfilled functions as supporting scroll behavior.\n        scrollBehaviorSupported = !/\\{\\s*\\[native code\\]\\s*\\}/.test(scrollToFunction.toString());\n      } else {\n        scrollBehaviorSupported = false;\n      }\n    }\n  }\n  return scrollBehaviorSupported;\n}\n/**\n * Checks the type of RTL scroll axis used by this browser. As of time of writing, Chrome is NORMAL,\n * Firefox & Safari are NEGATED, and IE & Edge are INVERTED.\n */\nfunction getRtlScrollAxisType() {\n  // We can't check unless we're on the browser. Just assume 'normal' if we're not.\n  if (typeof document !== 'object' || !document) {\n    return RtlScrollAxisType.NORMAL;\n  }\n  if (rtlScrollAxisType == null) {\n    // Create a 1px wide scrolling container and a 2px wide content element.\n    const scrollContainer = document.createElement('div');\n    const containerStyle = scrollContainer.style;\n    scrollContainer.dir = 'rtl';\n    containerStyle.width = '1px';\n    containerStyle.overflow = 'auto';\n    containerStyle.visibility = 'hidden';\n    containerStyle.pointerEvents = 'none';\n    containerStyle.position = 'absolute';\n    const content = document.createElement('div');\n    const contentStyle = content.style;\n    contentStyle.width = '2px';\n    contentStyle.height = '1px';\n    scrollContainer.appendChild(content);\n    document.body.appendChild(scrollContainer);\n    rtlScrollAxisType = RtlScrollAxisType.NORMAL;\n    // The viewport starts scrolled all the way to the right in RTL mode. If we are in a NORMAL\n    // browser this would mean that the scrollLeft should be 1. If it's zero instead we know we're\n    // dealing with one of the other two types of browsers.\n    if (scrollContainer.scrollLeft === 0) {\n      // In a NEGATED browser the scrollLeft is always somewhere in [-maxScrollAmount, 0]. For an\n      // INVERTED browser it is always somewhere in [0, maxScrollAmount]. We can determine which by\n      // setting to the scrollLeft to 1. This is past the max for a NEGATED browser, so it will\n      // return 0 when we read it again.\n      scrollContainer.scrollLeft = 1;\n      rtlScrollAxisType = scrollContainer.scrollLeft === 0 ? RtlScrollAxisType.NEGATED : RtlScrollAxisType.INVERTED;\n    }\n    scrollContainer.remove();\n  }\n  return rtlScrollAxisType;\n}\nlet shadowDomIsSupported;\n/** Checks whether the user's browser support Shadow DOM. */\nfunction _supportsShadowDom() {\n  if (shadowDomIsSupported == null) {\n    const head = typeof document !== 'undefined' ? document.head : null;\n    shadowDomIsSupported = !!(head && (head.createShadowRoot || head.attachShadow));\n  }\n  return shadowDomIsSupported;\n}\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nfunction _getShadowRoot(element) {\n  if (_supportsShadowDom()) {\n    const rootNode = element.getRootNode ? element.getRootNode() : null;\n    // Note that this should be caught by `_supportsShadowDom`, but some\n    // teams have been able to hit this code path on unsupported browsers.\n    if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {\n      return rootNode;\n    }\n  }\n  return null;\n}\n/**\n * Gets the currently-focused element on the page while\n * also piercing through Shadow DOM boundaries.\n */\nfunction _getFocusedElementPierceShadowDom() {\n  let activeElement = typeof document !== 'undefined' && document ? document.activeElement : null;\n  while (activeElement && activeElement.shadowRoot) {\n    const newActiveElement = activeElement.shadowRoot.activeElement;\n    if (newActiveElement === activeElement) {\n      break;\n    } else {\n      activeElement = newActiveElement;\n    }\n  }\n  return activeElement;\n}\n/** Gets the target of an event while accounting for Shadow DOM. */\nfunction _getEventTarget(event) {\n  // If an event is bound outside the Shadow DOM, the `event.target` will\n  // point to the shadow root so we have to use `composedPath` instead.\n  return event.composedPath ? event.composedPath()[0] : event.target;\n}\n\n/** Gets whether the code is currently running in a test environment. */\nfunction _isTestEnvironment() {\n  // We can't use `declare const` because it causes conflicts inside Google with the real typings\n  // for these symbols and we can't read them off the global object, because they don't appear to\n  // be attached there for some runners like Jest.\n  // (see: https://github.com/angular/components/issues/23365#issuecomment-938146643)\n  return (\n    // @ts-ignore\n    typeof __karma__ !== 'undefined' && !!__karma__ ||\n    // @ts-ignore\n    typeof jasmine !== 'undefined' && !!jasmine ||\n    // @ts-ignore\n    typeof jest !== 'undefined' && !!jest ||\n    // @ts-ignore\n    typeof Mocha !== 'undefined' && !!Mocha\n  );\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Platform, PlatformModule, RtlScrollAxisType, _getEventTarget, _getFocusedElementPierceShadowDom, _getShadowRoot, _isTestEnvironment, _supportsShadowDom, getRtlScrollAxisType, getSupportedInputTypes, normalizePassiveListenerOptions, supportsPassiveEventListeners, supportsScrollBehavior };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, Injectable, Optional, Inject, Directive, Output, Input, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Injection token used to inject the document into Directionality.\n * This is used so that the value can be faked in tests.\n *\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\n * tests in Safari to fail.\n *\n * We also can't re-provide the DOCUMENT token from platform-browser because the unit tests\n * themselves use things like `querySelector` in test code.\n *\n * This token is defined in a separate file from Directionality as a workaround for\n * https://github.com/angular/angular/issues/22559\n *\n * @docs-private\n */\nconst DIR_DOCUMENT = /*#__PURE__*/new InjectionToken('cdk-dir-doc', {\n  providedIn: 'root',\n  factory: DIR_DOCUMENT_FACTORY\n});\n/** @docs-private */\nfunction DIR_DOCUMENT_FACTORY() {\n  return inject(DOCUMENT);\n}\n\n/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */\nconst RTL_LOCALE_PATTERN = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;\n/** Resolves a string value to a specific direction. */\nfunction _resolveDirectionality(rawValue) {\n  const value = rawValue?.toLowerCase() || '';\n  if (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {\n    return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';\n  }\n  return value === 'rtl' ? 'rtl' : 'ltr';\n}\n/**\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\n * Exposes the current direction and a stream of direction changes.\n */\nlet Directionality = /*#__PURE__*/(() => {\n  class Directionality {\n    constructor(_document) {\n      /** The current 'ltr' or 'rtl' value. */\n      this.value = 'ltr';\n      /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\n      this.change = new EventEmitter();\n      if (_document) {\n        const bodyDir = _document.body ? _document.body.dir : null;\n        const htmlDir = _document.documentElement ? _document.documentElement.dir : null;\n        this.value = _resolveDirectionality(bodyDir || htmlDir || 'ltr');\n      }\n    }\n    ngOnDestroy() {\n      this.change.complete();\n    }\n    static {\n      this.ɵfac = function Directionality_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Directionality)(i0.ɵɵinject(DIR_DOCUMENT, 8));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: Directionality,\n        factory: Directionality.ɵfac,\n        providedIn: 'root'\n      });\n    }\n  }\n  return Directionality;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Directive to listen for changes of direction of part of the DOM.\n *\n * Provides itself as Directionality such that descendant directives only need to ever inject\n * Directionality to get the closest direction.\n */\nlet Dir = /*#__PURE__*/(() => {\n  class Dir {\n    constructor() {\n      /** Normalized direction that accounts for invalid/unsupported values. */\n      this._dir = 'ltr';\n      /** Whether the `value` has been set to its initial value. */\n      this._isInitialized = false;\n      /** Event emitted when the direction changes. */\n      this.change = new EventEmitter();\n    }\n    /** @docs-private */\n    get dir() {\n      return this._dir;\n    }\n    set dir(value) {\n      const previousValue = this._dir;\n      // Note: `_resolveDirectionality` resolves the language based on the browser's language,\n      // whereas the browser does it based on the content of the element. Since doing so based\n      // on the content can be expensive, for now we're doing the simpler matching.\n      this._dir = _resolveDirectionality(value);\n      this._rawDir = value;\n      if (previousValue !== this._dir && this._isInitialized) {\n        this.change.emit(this._dir);\n      }\n    }\n    /** Current layout direction of the element. */\n    get value() {\n      return this.dir;\n    }\n    /** Initialize once default value has been set. */\n    ngAfterContentInit() {\n      this._isInitialized = true;\n    }\n    ngOnDestroy() {\n      this.change.complete();\n    }\n    static {\n      this.ɵfac = function Dir_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Dir)();\n      };\n    }\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: Dir,\n        selectors: [[\"\", \"dir\", \"\"]],\n        hostVars: 1,\n        hostBindings: function Dir_HostBindings(rf, ctx) {\n          if (rf & 2) {\n            i0.ɵɵattribute(\"dir\", ctx._rawDir);\n          }\n        },\n        inputs: {\n          dir: \"dir\"\n        },\n        outputs: {\n          change: \"dirChange\"\n        },\n        exportAs: [\"dir\"],\n        standalone: true,\n        features: [i0.ɵɵProvidersFeature([{\n          provide: Directionality,\n          useExisting: Dir\n        }])]\n      });\n    }\n  }\n  return Dir;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BidiModule = /*#__PURE__*/(() => {\n  class BidiModule {\n    static {\n      this.ɵfac = function BidiModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || BidiModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: BidiModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n    }\n  }\n  return BidiModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BidiModule, DIR_DOCUMENT, Dir, Directionality };\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","const MAC_ENTER = 3;\nconst BACKSPACE = 8;\nconst TAB = 9;\nconst NUM_CENTER = 12;\nconst ENTER = 13;\nconst SHIFT = 16;\nconst CONTROL = 17;\nconst ALT = 18;\nconst PAUSE = 19;\nconst CAPS_LOCK = 20;\nconst ESCAPE = 27;\nconst SPACE = 32;\nconst PAGE_UP = 33;\nconst PAGE_DOWN = 34;\nconst END = 35;\nconst HOME = 36;\nconst LEFT_ARROW = 37;\nconst UP_ARROW = 38;\nconst RIGHT_ARROW = 39;\nconst DOWN_ARROW = 40;\nconst PLUS_SIGN = 43;\nconst PRINT_SCREEN = 44;\nconst INSERT = 45;\nconst DELETE = 46;\nconst ZERO = 48;\nconst ONE = 49;\nconst TWO = 50;\nconst THREE = 51;\nconst FOUR = 52;\nconst FIVE = 53;\nconst SIX = 54;\nconst SEVEN = 55;\nconst EIGHT = 56;\nconst NINE = 57;\nconst FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nconst FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nconst QUESTION_MARK = 63;\nconst AT_SIGN = 64;\nconst A = 65;\nconst B = 66;\nconst C = 67;\nconst D = 68;\nconst E = 69;\nconst F = 70;\nconst G = 71;\nconst H = 72;\nconst I = 73;\nconst J = 74;\nconst K = 75;\nconst L = 76;\nconst M = 77;\nconst N = 78;\nconst O = 79;\nconst P = 80;\nconst Q = 81;\nconst R = 82;\nconst S = 83;\nconst T = 84;\nconst U = 85;\nconst V = 86;\nconst W = 87;\nconst X = 88;\nconst Y = 89;\nconst Z = 90;\nconst META = 91; // WIN_KEY_LEFT\nconst MAC_WK_CMD_LEFT = 91;\nconst MAC_WK_CMD_RIGHT = 93;\nconst CONTEXT_MENU = 93;\nconst NUMPAD_ZERO = 96;\nconst NUMPAD_ONE = 97;\nconst NUMPAD_TWO = 98;\nconst NUMPAD_THREE = 99;\nconst NUMPAD_FOUR = 100;\nconst NUMPAD_FIVE = 101;\nconst NUMPAD_SIX = 102;\nconst NUMPAD_SEVEN = 103;\nconst NUMPAD_EIGHT = 104;\nconst NUMPAD_NINE = 105;\nconst NUMPAD_MULTIPLY = 106;\nconst NUMPAD_PLUS = 107;\nconst NUMPAD_MINUS = 109;\nconst NUMPAD_PERIOD = 110;\nconst NUMPAD_DIVIDE = 111;\nconst F1 = 112;\nconst F2 = 113;\nconst F3 = 114;\nconst F4 = 115;\nconst F5 = 116;\nconst F6 = 117;\nconst F7 = 118;\nconst F8 = 119;\nconst F9 = 120;\nconst F10 = 121;\nconst F11 = 122;\nconst F12 = 123;\nconst NUM_LOCK = 144;\nconst SCROLL_LOCK = 145;\nconst FIRST_MEDIA = 166;\nconst FF_MINUS = 173;\nconst MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nconst VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nconst VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nconst FF_MUTE = 181;\nconst FF_VOLUME_DOWN = 182;\nconst LAST_MEDIA = 183;\nconst FF_VOLUME_UP = 183;\nconst SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nconst EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nconst COMMA = 188;\nconst DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nconst PERIOD = 190;\nconst SLASH = 191;\nconst APOSTROPHE = 192;\nconst TILDE = 192;\nconst OPEN_SQUARE_BRACKET = 219;\nconst BACKSLASH = 220;\nconst CLOSE_SQUARE_BRACKET = 221;\nconst SINGLE_QUOTE = 222;\nconst MAC_META = 224;\n\n/**\n * Checks whether a modifier key is pressed.\n * @param event Event to be checked.\n */\nfunction hasModifierKey(event, ...modifiers) {\n  if (modifiers.length) {\n    return modifiers.some(modifier => event[modifier]);\n  }\n  return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { A, ALT, APOSTROPHE, AT_SIGN, B, BACKSLASH, BACKSPACE, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, D, DASH, DELETE, DOWN_ARROW, E, EIGHT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FOUR, G, H, HOME, I, INSERT, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, META, MUTE, N, NINE, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PAUSE, PERIOD, PLUS_SIGN, PRINT_SCREEN, Q, QUESTION_MARK, R, RIGHT_ARROW, S, SCROLL_LOCK, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, T, TAB, THREE, TILDE, TWO, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, W, X, Y, Z, ZERO, hasModifierKey };\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 i4 from '@angular/cdk/overlay';\nimport { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, TemplateRef, numberAttribute, booleanAttribute, Component, Optional, Self, Attribute, Input, HostBinding, Output, ViewChild, ViewChildren, HostListener, Directive, NgModule } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i1 from '@angular/cdk/scrolling';\nimport * as i2 from '@angular/forms';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport * as i3 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i5 from 'ngx-infinite-scroll';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nconst _c0 = [\"selection\"];\nconst _c1 = [\"results\"];\nconst _c2 = [\"searchInput\"];\nconst _c3 = [\"dropdown\"];\nconst _c4 = [\"result\"];\nconst _c5 = [[[\"select2-label\"]], [[\"select2-hint\"]]];\nconst _c6 = [\"select2-label\", \"select2-hint\"];\nconst _c7 = () => [];\nfunction Select2_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"span\", 8);\n  }\n}\nfunction Select2_Conditional_8_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\");\n    i0.ɵɵtext(1, \"\\xA0\");\n    i0.ɵɵelementEnd();\n  }\n}\nfunction Select2_Conditional_8_Conditional_2_Conditional_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"span\", 19);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(3);\n    i0.ɵɵproperty(\"innerHTML\", ctx_r1.select2Option.label, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_Conditional_8_Conditional_2_Conditional_1_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_Conditional_8_Conditional_2_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_Conditional_8_Conditional_2_Conditional_1_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(3);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(ctx_r1.select2Option, \"option\"))(\"ngTemplateOutletContext\", ctx_r1.select2Option);\n  }\n}\nfunction Select2_Conditional_8_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_Conditional_8_Conditional_2_Conditional_0_Template, 1, 1, \"span\", 19)(1, Select2_Conditional_8_Conditional_2_Conditional_1_Template, 1, 2, \"ng-container\");\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵconditional(!ctx_r1.hasTemplate(ctx_r1.select2Option, \"option\") || ctx_r1.noLabelTemplate ? 0 : 1);\n  }\n}\nfunction Select2_Conditional_8_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 12);\n    i0.ɵɵtemplate(1, Select2_Conditional_8_Conditional_1_Template, 2, 0, \"span\")(2, Select2_Conditional_8_Conditional_2_Template, 2, 1);\n    i0.ɵɵelementStart(3, \"span\", 18);\n    i0.ɵɵtext(4);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"title\", (ctx_r1.select2Option == null ? null : ctx_r1.select2Option.label) || \"\");\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!ctx_r1.select2Option ? 1 : -1);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(ctx_r1.select2Option ? 2 : -1);\n    i0.ɵɵadvance();\n    i0.ɵɵclassProp(\"select2-selection__placeholder__option\", ctx_r1.option);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(ctx_r1.placeholder);\n  }\n}\nfunction Select2_Conditional_9_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r3 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"span\", 21);\n    i0.ɵɵlistener(\"click\", function Select2_Conditional_9_Template_span_click_0_listener($event) {\n      i0.ɵɵrestoreView(_r3);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.reset($event));\n    });\n    i0.ɵɵtext(1, \"\\xD7\");\n    i0.ɵɵelementEnd();\n  }\n}\nfunction Select2_Conditional_10_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"span\", 14);\n  }\n}\nfunction Select2_Conditional_11_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 18);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵclassProp(\"select2-selection__placeholder__option\", (ctx_r1.select2Options == null ? null : ctx_r1.select2Options.length) > 0);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(ctx_r1.placeholder);\n  }\n}\nfunction Select2_Conditional_11_For_3_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r6 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"span\", 27);\n    i0.ɵɵlistener(\"click\", function Select2_Conditional_11_For_3_Conditional_1_Template_span_click_0_listener($event) {\n      i0.ɵɵrestoreView(_r6);\n      const op_r5 = i0.ɵɵnextContext().$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.removeSelection($event, op_r5));\n    });\n    i0.ɵɵtext(1, \"\\xD7\");\n    i0.ɵɵelementEnd();\n  }\n}\nfunction Select2_Conditional_11_For_3_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"span\", 19);\n  }\n  if (rf & 2) {\n    const op_r5 = i0.ɵɵnextContext().$implicit;\n    i0.ɵɵproperty(\"innerHTML\", op_r5.label, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_Conditional_11_For_3_Conditional_3_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_Conditional_11_For_3_Conditional_3_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_Conditional_11_For_3_Conditional_3_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const op_r5 = i0.ɵɵnextContext().$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(op_r5, \"option\"))(\"ngTemplateOutletContext\", op_r5);\n  }\n}\nfunction Select2_Conditional_11_For_3_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r4 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"li\", 25);\n    i0.ɵɵlistener(\"keydown.enter\", function Select2_Conditional_11_For_3_Template_li_keydown_enter_0_listener($event) {\n      const op_r5 = i0.ɵɵrestoreView(_r4).$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.removeSelection($event, op_r5));\n    });\n    i0.ɵɵtemplate(1, Select2_Conditional_11_For_3_Conditional_1_Template, 2, 0, \"span\", 26)(2, Select2_Conditional_11_For_3_Conditional_2_Template, 1, 1, \"span\", 19)(3, Select2_Conditional_11_For_3_Conditional_3_Template, 1, 2, \"ng-container\");\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const op_r5 = ctx.$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"title\", op_r5.label);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!(ctx_r1.disabled || ctx_r1.readonly) ? 1 : -1);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!ctx_r1.hasTemplate(op_r5, \"option\") || ctx_r1.noLabelTemplate ? 2 : 3);\n  }\n}\nfunction Select2_Conditional_11_Conditional_4_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r7 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"li\", 28);\n    i0.ɵɵlistener(\"focus\", function Select2_Conditional_11_Conditional_4_Template_li_focus_0_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.stopEvent($event));\n    })(\"blur\", function Select2_Conditional_11_Conditional_4_Template_li_blur_0_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.stopEvent($event));\n    });\n    i0.ɵɵelementStart(1, \"input\", 29);\n    i0.ɵɵlistener(\"click\", function Select2_Conditional_11_Conditional_4_Template_input_click_1_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      ctx_r1.toggleOpenAndClose(false, true);\n      return i0.ɵɵresetView(ctx_r1.stopEvent($event));\n    })(\"keydown\", function Select2_Conditional_11_Conditional_4_Template_input_keydown_1_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.keyDown($event, true));\n    })(\"keyup\", function Select2_Conditional_11_Conditional_4_Template_input_keyup_1_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.searchUpdate($event));\n    })(\"change\", function Select2_Conditional_11_Conditional_4_Template_input_change_1_listener($event) {\n      i0.ɵɵrestoreView(_r7);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.prevChange($event));\n    });\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"id\", ctx_r1.id + \"-create-field\");\n  }\n}\nfunction Select2_Conditional_11_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"ul\", 15);\n    i0.ɵɵtemplate(1, Select2_Conditional_11_Conditional_1_Template, 2, 3, \"span\", 22);\n    i0.ɵɵrepeaterCreate(2, Select2_Conditional_11_For_3_Template, 4, 3, \"li\", 23, i0.ɵɵcomponentInstance().trackBy, true);\n    i0.ɵɵtemplate(4, Select2_Conditional_11_Conditional_4_Template, 2, 1, \"li\", 24);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!ctx_r1.autoCreate ? 1 : -1);\n    i0.ɵɵadvance();\n    i0.ɵɵrepeater(ctx_r1.option || i0.ɵɵpureFunction0(2, _c7));\n    i0.ɵɵadvance(2);\n    i0.ɵɵconditional(ctx_r1.autoCreate ? 4 : -1);\n  }\n}\nfunction Select2_Conditional_12_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_Conditional_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_Conditional_12_ng_container_0_Template, 1, 0, \"ng-container\", 30);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const containerTemplate_r8 = i0.ɵɵreference(17);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", containerTemplate_r8);\n  }\n}\nfunction Select2_ng_template_15_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_ng_template_15_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_15_ng_container_0_Template, 1, 0, \"ng-container\", 30);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const containerTemplate_r8 = i0.ɵɵreference(17);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", containerTemplate_r8);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"strong\", 19);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext(2).$implicit;\n    i0.ɵɵproperty(\"innerHTML\", groupOrOption_r10.label, i0.ɵɵsanitizeHtml);\n    i0.ɵɵattribute(\"class\", \"select2-results__group\" + (groupOrOption_r10.classes ? \" \" + groupOrOption_r10.classes : \"\"));\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_Conditional_2_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_16_For_10_Conditional_0_Conditional_2_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext(2).$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(groupOrOption_r10, \"group\"))(\"ngTemplateOutletContext\", groupOrOption_r10);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"div\", 43);\n  }\n  if (rf & 2) {\n    const option_r12 = i0.ɵɵnextContext().$implicit;\n    i0.ɵɵproperty(\"innerHTML\", option_r12.label, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const option_r12 = i0.ɵɵnextContext().$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(4);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(option_r12, \"option\"))(\"ngTemplateOutletContext\", option_r12);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_For_5_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r11 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"li\", 42, 5);\n    i0.ɵɵlistener(\"mouseenter\", function Select2_ng_template_16_For_10_Conditional_0_For_5_Template_li_mouseenter_0_listener() {\n      const option_r12 = i0.ɵɵrestoreView(_r11).$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(4);\n      return i0.ɵɵresetView(ctx_r1.mouseenter(option_r12));\n    })(\"click\", function Select2_ng_template_16_For_10_Conditional_0_For_5_Template_li_click_0_listener() {\n      const option_r12 = i0.ɵɵrestoreView(_r11).$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(4);\n      return i0.ɵɵresetView(ctx_r1.click(option_r12));\n    });\n    i0.ɵɵtemplate(2, Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_2_Template, 1, 1, \"div\", 43)(3, Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_Template, 1, 2, \"ng-container\");\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const option_r12 = ctx.$implicit;\n    const ɵ$index_108_r13 = ctx.$index;\n    const ɵ$index_94_r14 = i0.ɵɵnextContext(2).$index;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵclassMap(ctx_r1.getOptionStyle(option_r12));\n    i0.ɵɵproperty(\"id\", option_r12.id || ctx_r1.id + \"-option-\" + ɵ$index_94_r14 + \"-\" + ɵ$index_108_r13);\n    i0.ɵɵattribute(\"aria-selected\", ctx_r1.isSelected(option_r12))(\"aria-disabled\", ctx_r1.isDisabled(option_r12));\n    i0.ɵɵadvance(2);\n    i0.ɵɵconditional(!ctx_r1.hasTemplate(option_r12, \"option\") ? 2 : 3);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"li\", 39);\n    i0.ɵɵtemplate(1, Select2_ng_template_16_For_10_Conditional_0_Conditional_1_Template, 1, 2, \"strong\", 19)(2, Select2_ng_template_16_For_10_Conditional_0_Conditional_2_Template, 1, 2, \"ng-container\");\n    i0.ɵɵelementStart(3, \"ul\", 41);\n    i0.ɵɵrepeaterCreate(4, Select2_ng_template_16_For_10_Conditional_0_For_5_Template, 4, 6, \"li\", 40, i0.ɵɵcomponentInstance().trackBy, true);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext().$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(!ctx_r1.hasTemplate(groupOrOption_r10, \"group\") ? 1 : 2);\n    i0.ɵɵadvance(3);\n    i0.ɵɵrepeater(groupOrOption_r10.options);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_Conditional_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"div\", 43);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext(2).$implicit;\n    i0.ɵɵproperty(\"innerHTML\", groupOrOption_r10.label, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_Conditional_3_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_Conditional_3_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_16_For_10_Conditional_1_Conditional_3_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext(2).$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(groupOrOption_r10, \"option\"))(\"ngTemplateOutletContext\", groupOrOption_r10);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_ng_template_4_ng_container_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementContainer(0);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_ng_template_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_16_For_10_Conditional_1_ng_template_4_ng_container_0_Template, 1, 0, \"ng-container\", 20);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = i0.ɵɵnextContext(2).$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.getTemplate(groupOrOption_r10, \"option\"))(\"ngTemplateOutletContext\", groupOrOption_r10);\n  }\n}\nfunction Select2_ng_template_16_For_10_Conditional_1_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r15 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"li\", 42, 5);\n    i0.ɵɵlistener(\"mouseenter\", function Select2_ng_template_16_For_10_Conditional_1_Template_li_mouseenter_0_listener() {\n      i0.ɵɵrestoreView(_r15);\n      const groupOrOption_r10 = i0.ɵɵnextContext().$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.mouseenter(groupOrOption_r10));\n    })(\"click\", function Select2_ng_template_16_For_10_Conditional_1_Template_li_click_0_listener() {\n      i0.ɵɵrestoreView(_r15);\n      const groupOrOption_r10 = i0.ɵɵnextContext().$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.click(groupOrOption_r10));\n    });\n    i0.ɵɵtemplate(2, Select2_ng_template_16_For_10_Conditional_1_Conditional_2_Template, 1, 1, \"div\", 43)(3, Select2_ng_template_16_For_10_Conditional_1_Conditional_3_Template, 1, 2, \"ng-container\")(4, Select2_ng_template_16_For_10_Conditional_1_ng_template_4_Template, 1, 2, \"ng-template\", null, 6, i0.ɵɵtemplateRefExtractor);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r15 = i0.ɵɵnextContext();\n    const groupOrOption_r10 = ctx_r15.$implicit;\n    const ɵ$index_94_r14 = ctx_r15.$index;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵclassMap(ctx_r1.getOptionStyle(groupOrOption_r10));\n    i0.ɵɵproperty(\"id\", groupOrOption_r10.id || ctx_r1.id + \"-option-\" + ɵ$index_94_r14);\n    i0.ɵɵattribute(\"aria-selected\", ctx_r1.isSelected(groupOrOption_r10))(\"aria-disabled\", ctx_r1.isDisabled(groupOrOption_r10));\n    i0.ɵɵadvance(2);\n    i0.ɵɵconditional(!ctx_r1.hasTemplate(groupOrOption_r10, \"option\") ? 2 : 3);\n  }\n}\nfunction Select2_ng_template_16_For_10_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, Select2_ng_template_16_For_10_Conditional_0_Template, 6, 1, \"li\", 39)(1, Select2_ng_template_16_For_10_Conditional_1_Template, 6, 6, \"li\", 40);\n  }\n  if (rf & 2) {\n    const groupOrOption_r10 = ctx.$implicit;\n    i0.ɵɵconditional(groupOrOption_r10.options !== undefined ? 0 : 1);\n  }\n}\nfunction Select2_ng_template_16_Conditional_11_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"li\", 37);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"innerHTML\", ctx_r1.noResultMessage, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_ng_template_16_Conditional_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelement(0, \"li\", 38);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵproperty(\"innerHTML\", ctx_r1.maxResultsMessage, i0.ɵɵsanitizeHtml);\n  }\n}\nfunction Select2_ng_template_16_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r9 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 31)(1, \"div\", 32, 2)(3, \"div\", 33)(4, \"input\", 34, 3);\n    i0.ɵɵlistener(\"keydown\", function Select2_ng_template_16_Template_input_keydown_4_listener($event) {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.keyDown($event, ctx_r1.autoCreate));\n    })(\"keyup\", function Select2_ng_template_16_Template_input_keyup_4_listener($event) {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.searchUpdate($event));\n    })(\"change\", function Select2_ng_template_16_Template_input_change_4_listener($event) {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.prevChange($event));\n    });\n    i0.ɵɵelementEnd()();\n    i0.ɵɵelementStart(6, \"div\", 35)(7, \"ul\", 36, 4);\n    i0.ɵɵlistener(\"scrolled\", function Select2_ng_template_16_Template_ul_scrolled_7_listener() {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.onScroll(\"down\"));\n    })(\"scrolledUp\", function Select2_ng_template_16_Template_ul_scrolledUp_7_listener() {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.onScroll(\"up\"));\n    })(\"keydown\", function Select2_ng_template_16_Template_ul_keydown_7_listener($event) {\n      i0.ɵɵrestoreView(_r9);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.keyDown($event));\n    });\n    i0.ɵɵrepeaterCreate(9, Select2_ng_template_16_For_10_Template, 2, 1, null, null, i0.ɵɵcomponentInstance().trackBy, true);\n    i0.ɵɵtemplate(11, Select2_ng_template_16_Conditional_11_Template, 1, 1, \"li\", 37)(12, Select2_ng_template_16_Conditional_12_Template, 1, 1, \"li\", 38);\n    i0.ɵɵelementEnd()()()();\n  }\n  if (rf & 2) {\n    const results_r17 = i0.ɵɵreference(8);\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵclassProp(\"select2-container--open\", ctx_r1.isOpen)(\"select2-overlay\", ctx_r1.overlay)(\"select2-position-auto\", ctx_r1.listPosition === \"auto\")(\"select2-style-borderless\", ctx_r1.styleMode === \"borderless\");\n    i0.ɵɵadvance();\n    i0.ɵɵclassProp(\"select2-dropdown--below\", !ctx_r1.select2above)(\"select2-dropdown--above\", ctx_r1.select2above);\n    i0.ɵɵadvance(2);\n    i0.ɵɵclassProp(\"select2-search--hide\", ctx_r1.hideSearch());\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"id\", ctx_r1.id + \"-search-field\")(\"value\", ctx_r1.searchText);\n    i0.ɵɵattribute(\"tabindex\", ctx_r1.isOpen ? ctx_r1.tabIndex : \"-1\");\n    i0.ɵɵadvance(3);\n    i0.ɵɵstyleProp(\"max-height\", ctx_r1.resultMaxHeight);\n    i0.ɵɵproperty(\"infiniteScrollDisabled\", !ctx_r1.infiniteScroll && !ctx_r1.isOpen)(\"infiniteScrollDistance\", ctx_r1.infiniteScrollDistance)(\"infiniteScrollThrottle\", ctx_r1.infiniteScrollThrottle)(\"infiniteScrollContainer\", results_r17);\n    i0.ɵɵadvance(2);\n    i0.ɵɵrepeater(ctx_r1.filteredData);\n    i0.ɵɵadvance(2);\n    i0.ɵɵconditional(!(ctx_r1.filteredData == null ? null : ctx_r1.filteredData.length) && ctx_r1.noResultMessage ? 11 : -1);\n    i0.ɵɵadvance();\n    i0.ɵɵconditional(ctx_r1.maxResultsExceeded ? 12 : -1);\n  }\n}\nconst timeout = 200;\nconst unicodePatterns = [{\n  l: 'a',\n  s: /[ⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ]/gi\n}, {\n  l: 'aa',\n  s: /ꜳ/gi\n}, {\n  l: 'ae',\n  s: /[æǽǣ]/gi\n}, {\n  l: 'ao',\n  s: /ꜵ/gi\n}, {\n  l: 'au',\n  s: /ꜷ/gi\n}, {\n  l: 'av',\n  s: /[ꜹꜻ]/gi\n}, {\n  l: 'ay',\n  s: /ꜽ/gi\n}, {\n  l: 'b',\n  s: /[ⓑbḃḅḇƀƃɓ]/gi\n}, {\n  l: 'c',\n  s: /[ⓒcćĉċčçḉƈȼꜿↄ]/gi\n}, {\n  l: 'd',\n  s: /[ⓓdḋďḍḑḓḏđƌɖɗꝺ]/gi\n}, {\n  l: 'dz',\n  s: /[dzdž]/gi\n}, {\n  l: 'e',\n  s: /[ⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ]/gi\n}, {\n  l: 'f',\n  s: /[ⓕfḟƒꝼ]/gi\n}, {\n  l: 'g',\n  s: /[ⓖgǵĝḡğġǧģǥɠꞡᵹꝿ]/gi\n}, {\n  l: 'h',\n  s: /[ⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ]/gi\n}, {\n  l: 'hv',\n  s: /ƕ/gi\n}, {\n  l: 'i',\n  s: /[ⓘiìíîĩīĭİïḯỉǐȉȋịįḭɨı]/gi\n}, {\n  l: 'j',\n  s: /[ⓙjĵǰɉ]/gi\n}, {\n  l: 'k',\n  s: /[ⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ]/gi\n}, {\n  l: 'l',\n  s: /[ⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇꝆ]/gi\n}, {\n  l: 'lj',\n  s: /lj/gi\n}, {\n  l: 'm',\n  s: /[ⓜmḿṁṃɱɯ]/gi\n}, {\n  l: 'n',\n  s: /[ⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ]/gi\n}, {\n  l: 'nj',\n  s: /nj/gi\n}, {\n  l: 'o',\n  s: /[ⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔƟꝋꝍɵ]/gi\n}, {\n  l: 'oi',\n  s: /ƣ/gi\n}, {\n  l: 'oe',\n  s: /œ/gi\n}, {\n  l: 'oo',\n  s: /ꝏ/gi\n}, {\n  l: 'ou',\n  s: /ȣ/gi\n}, {\n  l: 'p',\n  s: /[ⓟpṕṗƥᵽꝑꝓꝕ]/gi\n}, {\n  l: 'q',\n  s: /[ⓠqɋꝗꝙ]/gi\n}, {\n  l: 'r',\n  s: /[ⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ]/gi\n}, {\n  l: 's',\n  s: /[ⓢsßẞśṥŝṡšṧṣṩșşȿꞩꞅẛ]/gi\n}, {\n  l: 't',\n  s: /[ⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ]/gi\n}, {\n  l: 'tz',\n  s: /ꜩ/gi\n}, {\n  l: 'u',\n  s: /[ⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ]/gi\n}, {\n  l: 'v',\n  s: /[ⓥvṽṿʋꝟʌ]/gi\n}, {\n  l: 'vy',\n  s: /ꝡ/gi\n}, {\n  l: 'w',\n  s: /[ⓦwẁẃŵẇẅẘẉⱳ]/gi\n}, {\n  l: 'x',\n  s: /[ⓧxẋẍ]/gi\n}, {\n  l: 'y',\n  s: /[ⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ]/gi\n}, {\n  l: 'z',\n  s: /[ⓩzźẑżžẓẕƶȥɀⱬꝣ]/gi\n}];\nconst defaultMinCountForSearch = 6;\nconst protectRegexp = new RegExp('[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\\\^\\\\$\\\\|]', 'g');\nclass Select2Utils {\n  static getOptionByValue(data, value) {\n    if (Array.isArray(data)) {\n      for (const groupOrOption of data) {\n        const options = groupOrOption.options;\n        if (options) {\n          for (const option of options) {\n            if (option.value === value) {\n              return option;\n            }\n          }\n        } else if (groupOrOption.value === value) {\n          return groupOrOption;\n        }\n      }\n    }\n    return undefined;\n  }\n  static getOptionsByValue(data, value, multiple) {\n    if (multiple) {\n      const values = Array.isArray(value) ? value : [];\n      const result = [];\n      for (const v of values) {\n        const option = Select2Utils.getOptionByValue(data, v);\n        if (option) {\n          result.push(option);\n        }\n      }\n      return result;\n    }\n    return Select2Utils.getOptionByValue(data, value);\n  }\n  static getFirstAvailableOption(data) {\n    if (Array.isArray(data)) {\n      for (const groupOrOption of data) {\n        const options = groupOrOption.options;\n        if (options) {\n          for (const option of options) {\n            if (!option.disabled) {\n              return option.value;\n            }\n          }\n        } else {\n          const option = groupOrOption;\n          if (!option.disabled) {\n            return option.value;\n          }\n        }\n      }\n    }\n    return null;\n  }\n  static valueIsNotInFilteredData(filteredData, value) {\n    if (Select2Utils.isNullOrUndefined(value)) {\n      return true;\n    }\n    for (const groupOrOption of filteredData) {\n      const options = groupOrOption.options;\n      if (options) {\n        for (const option of options) {\n          if (option.value === value) {\n            return false;\n          }\n        }\n      } else if (groupOrOption.value === value) {\n        return false;\n      }\n    }\n    return true;\n  }\n  static getPreviousOption(filteredData, hoveringValue) {\n    let findIt = Select2Utils.isNullOrUndefined(hoveringValue);\n    for (let i = filteredData.length - 1; i >= 0; i--) {\n      const groupOrOption = filteredData[i];\n      const options = groupOrOption.options;\n      if (options) {\n        for (let j = options.length - 1; j >= 0; j--) {\n          const option = options[j];\n          if (findIt && !option.disabled && !option.hide) {\n            return option;\n          }\n          if (!findIt) {\n            findIt = option.value === hoveringValue;\n          }\n        }\n      } else {\n        const option = groupOrOption;\n        if (findIt && !option.disabled && !option.hide) {\n          return option;\n        }\n        if (!findIt) {\n          findIt = option.value === hoveringValue;\n        }\n      }\n    }\n    return null;\n  }\n  static getNextOption(filteredData, hoveringValue) {\n    let findIt = Select2Utils.isNullOrUndefined(hoveringValue);\n    for (const groupOrOption of filteredData) {\n      const options = groupOrOption.options;\n      if (options) {\n        for (const option of options) {\n          if (findIt) {\n            if (!option.disabled && !option.hide) {\n              return option;\n            }\n          } else if (!findIt) {\n            findIt = option.value === hoveringValue;\n          }\n        }\n      } else {\n        const option = groupOrOption;\n        if (findIt) {\n          if (!option.disabled && !option.hide) {\n            return option;\n          }\n        } else if (!findIt) {\n          findIt = option.value === hoveringValue;\n        }\n      }\n    }\n    return null;\n  }\n  static getReduceData(data, maxResults = 0) {\n    if (maxResults > 0) {\n      let counter = 0;\n      const result = [];\n      // debugger;\n      for (const groupOrOption of data) {\n        const options = groupOrOption.options;\n        if (options) {\n          const group = {\n            ...groupOrOption,\n            options: []\n          };\n          result.push(group);\n          for (const item of options) {\n            group.options.push(item);\n            counter++;\n            if (counter === maxResults) {\n              return {\n                result,\n                reduce: true\n              };\n            }\n          }\n        } else {\n          result.push(groupOrOption);\n          counter++;\n        }\n        if (counter === maxResults) {\n          return {\n            result,\n            reduce: true\n          };\n        }\n      }\n      return {\n        result,\n        reduce: false\n      };\n    } else {\n      return {\n        result: data,\n        reduce: false\n      };\n    }\n  }\n  static getFilteredData(data, searchText, editPattern) {\n    if (searchText) {\n      const result = [];\n      for (const groupOrOption of data) {\n        const options = groupOrOption.options;\n        if (options) {\n          if (options.some(group => Select2Utils.containSearchText(group.label, searchText, editPattern))) {\n            const filteredOptions = options.filter(group => Select2Utils.containSearchText(group.label, searchText, editPattern));\n            result.push({\n              ...groupOrOption,\n              options: filteredOptions\n            });\n          }\n        } else if (Select2Utils.containSearchText(groupOrOption.label, searchText, editPattern)) {\n          result.push(groupOrOption);\n        }\n      }\n      return result;\n    } else {\n      return data;\n    }\n  }\n  static getFilteredSelectedData(data, selectedOptions) {\n    const result = [];\n    for (const groupOrOption of data) {\n      const options = groupOrOption.options;\n      if (options) {\n        const filteredOptions = options.filter(group => Select2Utils.isSelected(selectedOptions, group, true) === 'false');\n        if (filteredOptions.length) {\n          result.push({\n            ...groupOrOption,\n            options: filteredOptions\n          });\n        }\n      } else if (Select2Utils.isSelected(selectedOptions, groupOrOption, true) === 'false') {\n        result.push(groupOrOption);\n      }\n    }\n    return result;\n  }\n  static isSearchboxHiddex(data, minCountForSearch) {\n    if (minCountForSearch === '' || minCountForSearch === undefined || minCountForSearch === null || isNaN(+minCountForSearch)) {\n      minCountForSearch = defaultMinCountForSearch;\n    }\n    const optionCount = Select2Utils.getOptionsCount(data);\n    return optionCount < +minCountForSearch;\n  }\n  static isSelected(options, option, multiple) {\n    return multiple ? options && options.some(op => op.value === option.value) ? 'true' : 'false' : options && option.value === options.value ? 'true' : 'false';\n  }\n  static removeSelection(options, option) {\n    for (let i = 0; i < options.length; i++) {\n      if (options[i].value === option.value) {\n        options.splice(i, 1);\n        return;\n      }\n    }\n  }\n  static getOptionsCount(data) {\n    let count = 0;\n    if (Array.isArray(data)) {\n      for (const groupOrOption of data) {\n        const options = groupOrOption.options;\n        count += options ? options.length : 1;\n      }\n    }\n    return count;\n  }\n  static isNullOrUndefined(value) {\n    return value === null || value === undefined;\n  }\n  static containSearchText(label, searchText, editPattern) {\n    return searchText ? Select2Utils.formatSansUnicode(label).match(new RegExp(Select2Utils.formatPattern(searchText, editPattern), 'i')) !== null : true;\n  }\n  static protectPattern(str) {\n    return str.replace(protectRegexp, '\\\\$&');\n  }\n  static formatSansUnicode(str) {\n    for (const unicodePattern of unicodePatterns) {\n      str = str.replace(unicodePattern.s, unicodePattern.l);\n    }\n    return str;\n  }\n  static formatPattern(str, editPattern) {\n    str = Select2Utils.formatSansUnicode(Select2Utils.protectPattern(str));\n    if (editPattern && typeof editPattern === 'function') {\n      str = editPattern(str);\n    }\n    return str;\n  }\n}\nlet nextUniqueId = 0;\nconst displaySearchStatusList = ['default', 'hidden', 'always'];\nlet Select2 = /*#__PURE__*/(() => {\n  class Select2 {\n    /** data of options & optiongrps */\n    set data(data) {\n      this._data = data;\n      this.updateFilteredData(true);\n    }\n    get multiple() {\n      return this._multiple;\n    }\n    set multiple(value) {\n      this._multiple = value;\n      this.ngOnInit();\n    }\n    /** minimal data of show the search field */\n    get minCountForSearch() {\n      return this._minCountForSearch;\n    }\n    set minCountForSearch(value) {\n      this._minCountForSearch = value;\n      this.updateSearchBox();\n    }\n    /** Unique id of the element. */\n    get id() {\n      return this._id;\n    }\n    set id(value) {\n      this._id = value || this._uid;\n    }\n    /** Whether selected items should be hidden. */\n    get disabled() {\n      return this._control ? this._control.disabled : this._disabled;\n    }\n    set disabled(value) {\n      this._disabled = value;\n    }\n    /** The input element's value. */\n    get value() {\n      return this._value;\n    }\n    set value(value) {\n      if (this.testValueChange(this._value, value)) {\n        setTimeout(() => {\n          this._value = value;\n          this.writeValue(value);\n        }, 10);\n      }\n    }\n    /** Tab index for the select2 element. */\n    get tabIndex() {\n      return this.disabled ? -1 : this._tabIndex;\n    }\n    set tabIndex(value) {\n      this._tabIndex = value;\n    }\n    get select2Options() {\n      return this.multiple ? this.option : null;\n    }\n    get select2Option() {\n      return this.multiple ? null : this.option;\n    }\n    get searchText() {\n      return this.innerSearchText;\n    }\n    set searchText(text) {\n      this.innerSearchText = text;\n    }\n    get ariaInvalid() {\n      return this._isErrorState();\n    }\n    get classMaterial() {\n      return this.styleMode === 'material';\n    }\n    get classNostyle() {\n      return this.styleMode === 'noStyle';\n    }\n    get classBorderless() {\n      return this.styleMode === 'borderless';\n    }\n    get select2above() {\n      return !this.overlay ? this.listPosition === 'above' : this._isAbobeOverlay();\n    }\n    get _positions() {\n      return this.listPosition === 'auto' ? undefined : null;\n    }\n    get resultsElement() {\n      return this.resultContainer?.nativeElement;\n    }\n    constructor(_viewportRuler, _changeDetectorRef, _parentForm, _parentFormGroup, _control, tabIndex) {\n      this._viewportRuler = _viewportRuler;\n      this._changeDetectorRef = _changeDetectorRef;\n      this._parentForm = _parentForm;\n      this._parentFormGroup = _parentFormGroup;\n      this._control = _control;\n      this.minCharForSearch = 0;\n      this.limitSelection = 0;\n      this.listPosition = 'below';\n      /** use the material style */\n      this.overlay = false;\n      /** use the material style */\n      this.styleMode = 'default';\n      /** maximum results limit (0 = no limit) */\n      this.maxResults = 0;\n      /** message when maximum results */\n      this.maxResultsMessage = 'Too many results…';\n      /** infinite scroll distance */\n      this.infiniteScrollDistance = 1.5;\n      /** infinite scroll distance */\n      this.infiniteScrollThrottle = 150;\n      /** infinite scroll activated */\n      this.infiniteScroll = false;\n      /** auto create if not exist */\n      this.autoCreate = false;\n      /** no template for label selection */\n      this.noLabelTemplate = false;\n      /** the max height of the results container when opening the select */\n      this.resultMaxHeight = '200px';\n      /** Active Search event */\n      this.customSearchEnabled = false;\n      /** Whether the element is required. */\n      this.required = false;\n      /** Whether items are hidden when has. */\n      this.hideSelectedItems = false;\n      /** Whether the element is readonly. */\n      this.readonly = false;\n      /** reset with no selected value */\n      this.resettable = false;\n      this.update = new EventEmitter();\n      this.autoCreateItem = new EventEmitter();\n      this.open = new EventEmitter();\n      this.close = new EventEmitter();\n      this.focus = new EventEmitter();\n      this.blur = new EventEmitter();\n      this.search = new EventEmitter();\n      this.scroll = new EventEmitter();\n      this.removeOption = new EventEmitter();\n      this.option = null;\n      this.isOpen = false;\n      /** Whether the element is focused or not. */\n      this.focused = false;\n      this.hoveringValue = null;\n      this.innerSearchText = '';\n      this._stateChanges = new Subject();\n      this._disabled = false;\n      this._multiple = false;\n      this._uid = `select2-${nextUniqueId++}`;\n      /** View -> model callback called when select has been touched */\n      this._onTouched = () => {\n        // do nothing\n      };\n      /** View -> model callback called when value changes */\n      this._onChange = () => {\n        // do nothing\n      };\n      // eslint-disable-next-line no-self-assign\n      this.id = this.id;\n      this._tabIndex = parseInt(tabIndex, 10) || 0;\n      if (this._control) {\n        this._control.valueAccessor = this;\n      }\n    }\n    clickDetection(e) {\n      if (this.isOpen && focus) {\n        const target = e.target;\n        if (!this.ifParentContainsClass(target, 'selection')) {\n          if (!this.ifParentContainsClass(target, 'select2-dropdown')) {\n            this.toggleOpenAndClose();\n          }\n          if (!this.ifParentContainsId(target, this._id)) {\n            this.clickExit();\n          }\n        } else if (!this.ifParentContainsId(target, this._id)) {\n          this.toggleOpenAndClose();\n          this.clickExit();\n        }\n      }\n    }\n    ngOnInit() {\n      this._viewportRuler.change(100).subscribe(() => {\n        if (this.isOpen) {\n          this.triggerRect();\n        }\n      });\n      const option = Select2Utils.getOptionsByValue(this._data, this._control ? this._control.value : this.value, this.multiple);\n      if (option !== null) {\n        this.option = option;\n      }\n      if (!Array.isArray(option)) {\n        this.hoveringValue = this.value;\n      }\n      this.updateSearchBox();\n    }\n    ngAfterViewInit() {\n      this.cdkConnectedOverlay.positionChange.subscribe(posChange => {\n        if (this.listPosition === 'auto' && posChange.connectionPair?.originY && this._overlayPosition !== posChange.connectionPair.originY) {\n          this.triggerRect();\n          this._overlayPosition = posChange.connectionPair.originY;\n          this._changeDetectorRef.detectChanges();\n        }\n      });\n      this.selectionElement = this.selection.nativeElement;\n      this.triggerRect();\n    }\n    ngDoCheck() {\n      this.updateSearchBox();\n      this._dirtyCheckNativeValue();\n      if (this._triggerRect) {\n        if (this.overlayWidth !== this._triggerRect.width) {\n          this.overlayWidth = this._triggerRect.width;\n        }\n        if (this._dropdownRect?.height > 0 && this.overlayHeight !== this._dropdownRect.height) {\n          this.overlayHeight = this.listPosition === 'auto' ? this._dropdownRect.height : 0;\n        }\n      }\n    }\n    updateSearchBox() {\n      const hidden = this.customSearchEnabled ? false : Select2Utils.isSearchboxHiddex(this._data, this._minCountForSearch);\n      if (this.isSearchboxHidden !== hidden) {\n        this.isSearchboxHidden = hidden;\n      }\n    }\n    hideSearch() {\n      const displaySearchStatus = displaySearchStatusList.indexOf(this.displaySearchStatus) > -1 ? this.displaySearchStatus : 'default';\n      return displaySearchStatus === 'default' && this.isSearchboxHidden || displaySearchStatus === 'hidden';\n    }\n    getOptionStyle(option) {\n      return 'select2-results__option ' + (option.hide ? 'select2-results__option--hide ' : '') + (option.value === this.hoveringValue ? 'select2-results__option--highlighted ' : '') + (option.classes || '');\n    }\n    mouseenter(option) {\n      if (!option.disabled) {\n        this.hoveringValue = option.value;\n      }\n    }\n    click(option) {\n      if (this.testSelection(option)) {\n        this.select(option);\n      }\n    }\n    reset(event) {\n      // const test = Select2Utils.getOptionByValue(this._data, this.resetSelectedValue);\n      // debugger;\n      this.select(this.resetSelectedValue !== undefined ? Select2Utils.getOptionByValue(this._data, this.resetSelectedValue) ?? null : null);\n      this.stopEvent(event);\n    }\n    prevChange(event) {\n      event.stopPropagation();\n    }\n    stopEvent(event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    toggleOpenAndClose(focus = true, open, event) {\n      if (this.disabled) {\n        return;\n      }\n      this._focus(focus);\n      const changeEmit = this.isOpen !== (open ?? !this.isOpen);\n      this.isOpen = open ?? !this.isOpen;\n      if (this.isOpen) {\n        if (!this.isSearchboxHidden) {\n          this.innerSearchText = '';\n          this.updateFilteredData();\n          this._focusSearchboxOrResultsElement(focus);\n        }\n        if (this.isSearchboxHidden && !changeEmit && event) {\n          this.keyDown(event);\n        } else {\n          setTimeout(() => {\n            if (this.option) {\n              const option = Array.isArray(this.option) ? this.option[0] : this.option;\n              this.updateScrollFromOption(option);\n            } else if (this.resultsElement) {\n              this.resultsElement.scrollTop = 0;\n            }\n            setTimeout(() => {\n              this.triggerRect();\n              this.cdkConnectedOverlay?.overlayRef?.updatePosition();\n            }, 100);\n          });\n        }\n        if (changeEmit) {\n          this.open.emit(this);\n        }\n      } else if (changeEmit) {\n        this.close.emit(this);\n      }\n      this._changeDetectorRef.markForCheck();\n    }\n    hasTemplate(option, defaut) {\n      return this.templates instanceof TemplateRef || this.templates?.[option.templateId] instanceof TemplateRef || this.templates?.[defaut] instanceof TemplateRef;\n    }\n    getTemplate(option, defaut) {\n      return this.hasTemplate(option, defaut) ? this.templates[option.templateId] || this.templates[defaut] || this.templates : undefined;\n    }\n    triggerRect() {\n      this._triggerRect = this.selectionElement.getBoundingClientRect();\n      this._dropdownRect = this.dropdown?.nativeElement ? this.dropdown.nativeElement.getBoundingClientRect() : undefined;\n    }\n    testSelection(option) {\n      if (option.disabled) {\n        return false;\n      }\n      return !this.multiple || !this.limitSelection || Array.isArray(this._value) && this._value.length < this.limitSelection;\n    }\n    testValueChange(value1, value2) {\n      if ((value1 === null || value1 === undefined) && (value2 === null || value2 === undefined) || value1 === value2) {\n        return false;\n      }\n      if (this.multiple && value1?.length && value2?.length && value1.length === value2.length) {\n        for (const e1 of value1) {\n          const test = value2.indexOf(e1) > -1;\n          if (!test) {\n            return true;\n          }\n        }\n        return false;\n      }\n      return true;\n    }\n    updateFilteredData(writeValue = false) {\n      setTimeout(() => {\n        let result = this._data;\n        if (this.multiple && this.hideSelectedItems) {\n          result = Select2Utils.getFilteredSelectedData(result, this.option);\n        }\n        if (!this.customSearchEnabled && this.searchText && this.searchText.length >= +this.minCharForSearch) {\n          result = Select2Utils.getFilteredData(result, this.searchText, this.editPattern);\n        }\n        if (this.maxResults > 0) {\n          const data = Select2Utils.getReduceData(result, +this.maxResults);\n          result = data.result;\n          this.maxResultsExceeded = data.reduce;\n        } else {\n          this.maxResultsExceeded = false;\n        }\n        if (Select2Utils.valueIsNotInFilteredData(result, this.hoveringValue)) {\n          this.hoveringValue = Select2Utils.getFirstAvailableOption(result);\n        }\n        if (writeValue) {\n          // refresh current selected value\n          this.writeValue(this._control ? this._control.value : this.value);\n        }\n        this.filteredData = result;\n        this._changeDetectorRef.markForCheck();\n      });\n    }\n    clickExit() {\n      this._focus(false);\n    }\n    ifParentContainsClass(element, cssClass) {\n      return this.getParentElementByClass(element, cssClass) !== null;\n    }\n    ifParentContainsId(element, id) {\n      return this.getParentElementById(element, id) !== null;\n    }\n    getParentElementByClass(element, cssClass) {\n      return this.containClasses(element, cssClass.trim().split(/\\s+/)) ? element : element.parentElement ? this.getParentElementByClass(element.parentElement, cssClass) : null;\n    }\n    getParentElementById(element, id) {\n      return element.id === id ? element : element.parentElement ? this.getParentElementById(element.parentElement, id) : null;\n    }\n    containClasses(element, cssClasses) {\n      if (!element.classList) {\n        return false;\n      }\n      for (const cssClass of cssClasses) {\n        if (!element.classList.contains(cssClass)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    focusin() {\n      if (!this.disabled) {\n        this._focus(true);\n      }\n    }\n    focusout() {\n      if (this.selectionElement && !this.selectionElement.classList.contains('select2-focused')) {\n        this._focus(false);\n        this._onTouched();\n      }\n    }\n    select(option) {\n      let value;\n      if (option !== null && option !== undefined) {\n        if (this.multiple) {\n          const options = this.option;\n          const index = options.findIndex(op => op.value === option.value);\n          if (index === -1) {\n            options.push(option);\n          } else {\n            options.splice(index, 1);\n          }\n          value = this.option.map(op => op.value);\n        } else {\n          this.option = option;\n          if (this.isOpen) {\n            this.isOpen = false;\n            this.close.emit(this);\n            this.selectionElement?.focus();\n          }\n          value = this.option.value;\n        }\n      } else {\n        this.option = null;\n      }\n      if (this.multiple && this.hideSelectedItems) {\n        this.updateFilteredData();\n      }\n      if (this._control) {\n        this._onChange(value);\n      } else {\n        this._value = value;\n      }\n      this.update.emit({\n        component: this,\n        value: value,\n        options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null\n      });\n    }\n    keyDown(event, create = false) {\n      if (create && this._testKey(event, ['Enter', 13])) {\n        this.createAndAdd(event);\n      } else if (this._testKey(event, ['ArrowDown', 40])) {\n        this.moveDown();\n        event.preventDefault();\n      } else if (this._testKey(event, ['ArrowUp', 38])) {\n        this.moveUp();\n        event.preventDefault();\n      } else if (this._testKey(event, ['Enter', 13])) {\n        this.selectByEnter();\n        event.preventDefault();\n      } else if (this._testKey(event, ['Escape', 'Tab', 9, 27]) && this.isOpen) {\n        this.toggleOpenAndClose();\n        this._focus(false);\n      }\n    }\n    openKey(event, create = false) {\n      if (create && this._testKey(event, ['Enter', 13])) {\n        this.createAndAdd(event);\n      } else if (this._testKey(event, ['ArrowDown', 'ArrowUp', 'Enter', 40, 38, 13])) {\n        this.toggleOpenAndClose(true, true, event);\n        event.preventDefault();\n      } else if (this._testKey(event, ['Escape', 'Tab', 9, 27])) {\n        if (this.isOpen) {\n          this.toggleOpenAndClose(false);\n          this._onTouched();\n          event.preventDefault();\n        } else {\n          this._focus(false);\n        }\n      }\n    }\n    searchUpdate(e) {\n      this.searchText = e.target.value;\n      if (!this.customSearchEnabled) {\n        this.updateFilteredData();\n      } else {\n        this.search.emit({\n          component: this,\n          value: this._value,\n          search: this.searchText,\n          data: this._data,\n          filteredData: data => {\n            this.filteredData = data;\n            this._changeDetectorRef.markForCheck();\n          }\n        });\n      }\n    }\n    trackBy(_index, item) {\n      return item.value;\n    }\n    isSelected(option) {\n      return Select2Utils.isSelected(this.option, option, this.multiple);\n    }\n    isDisabled(option) {\n      return option.disabled ? 'true' : 'false';\n    }\n    removeSelection(e, option) {\n      Select2Utils.removeSelection(this.option, option);\n      if (this.multiple && this.hideSelectedItems) {\n        this.updateFilteredData();\n      }\n      const value = this.option.map(op => op.value);\n      if (this._control) {\n        this._onChange(value);\n      } else {\n        this._value = value;\n      }\n      this.update.emit({\n        component: this,\n        value: value,\n        options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null\n      });\n      this.removeOption.emit({\n        component: this,\n        value: value,\n        removedOption: option\n      });\n      e.preventDefault();\n      e.stopPropagation();\n      if (this.isOpen) {\n        this._focusSearchboxOrResultsElement();\n      }\n    }\n    /**\n     * Sets the model value. Implemented as part of ControlValueAccessor.\n     * @param value\n     */\n    writeValue(value) {\n      this._setSelectionByValue(value);\n    }\n    /**\n     * Saves a callback function to be invoked when the select's value\n     * changes from user input. Part of the ControlValueAccessor interface\n     * required to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the value changes.\n     */\n    registerOnChange(fn) {\n      this._onChange = fn;\n    }\n    /**\n     * Saves a callback function to be invoked when the select is blurred\n     * by the user. Part of the ControlValueAccessor interface required\n     * to integrate with Angular's core forms API.\n     *\n     * @param fn Callback to be triggered when the component has been touched.\n     */\n    registerOnTouched(fn) {\n      this._onTouched = fn;\n    }\n    /**\n     * Sets whether the component should be disabled.\n     * Implemented as part of ControlValueAccessor.\n     * @param isDisabled\n     */\n    setDisabledState(isDisabled) {\n      this.disabled = isDisabled;\n    }\n    onScroll(way) {\n      this.scroll.emit({\n        component: this,\n        way,\n        search: this.innerSearchText,\n        data: this._data\n      });\n    }\n    _isErrorState() {\n      const isInvalid = this._control?.invalid;\n      const isTouched = this._control?.touched;\n      const isSubmitted = this._parentFormGroup?.submitted || this._parentForm?.submitted;\n      return !!(isInvalid && (isTouched || isSubmitted));\n    }\n    addItem(value) {\n      let item = Select2Utils.getOptionByValue(this._data, value);\n      if (!item) {\n        item = {\n          value,\n          label: value\n        };\n        this._data.push(item);\n      }\n      return item;\n    }\n    createAndAdd(e) {\n      const value = e.target.value;\n      if (value.trim()) {\n        const item = this.addItem(value.trim());\n        this.click(item);\n        e.target.value = '';\n        this.autoCreateItem.emit({\n          value: item,\n          component: this,\n          options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null\n        });\n      }\n      this.stopEvent(e);\n    }\n    moveUp() {\n      this.updateScrollFromOption(Select2Utils.getPreviousOption(this.filteredData, this.hoveringValue));\n    }\n    moveDown() {\n      this.updateScrollFromOption(Select2Utils.getNextOption(this.filteredData, this.hoveringValue));\n    }\n    updateScrollFromOption(option) {\n      if (option) {\n        this.hoveringValue = option.value;\n        const domElement = this.results.find(r => r.nativeElement.innerText.trim() === option.label);\n        if (domElement && this.resultsElement) {\n          this.resultsElement.scrollTop = 0;\n          const listClientRect = this.resultsElement.getBoundingClientRect();\n          const optionClientRect = domElement.nativeElement.getBoundingClientRect();\n          this.resultsElement.scrollTop = optionClientRect.top - listClientRect.top;\n        }\n      }\n    }\n    selectByEnter() {\n      if (this.hoveringValue) {\n        const option = Select2Utils.getOptionByValue(this._data, this.hoveringValue);\n        this.select(option);\n      }\n    }\n    _testKey(event, refs = []) {\n      return this._isKey(this._getKey(event), refs);\n    }\n    _getKey(event) {\n      let code;\n      if (event.key !== undefined) {\n        code = event.key;\n      } else if (event['keyIdentifier'] !== undefined) {\n        code = event['keyIdentifier'];\n      } else if (event['keyCode'] !== undefined) {\n        code = event['keyCode'];\n      } else {\n        event.preventDefault();\n      }\n      return code;\n    }\n    _isKey(code, refs = []) {\n      return refs && refs.length > 0 ? refs.indexOf(code) !== -1 : false;\n    }\n    /**\n     * Sets the selected option based on a value. If no option can be\n     * found with the designated value, the select trigger is cleared.\n     */\n    _setSelectionByValue(value) {\n      if (this.option || value !== undefined && value !== null) {\n        const isArray = Array.isArray(value);\n        if (this.multiple && value && !isArray) {\n          throw new Error('Non array value.');\n        } else if (this._data) {\n          if (this.multiple) {\n            this.option = []; // if value is null, then empty option and return\n            if (isArray) {\n              // value is not null. Preselect value\n              const selectedValues = Select2Utils.getOptionsByValue(this._data, value, this.multiple);\n              selectedValues.map(item => this.select(item));\n            }\n          } else {\n            this.select(Select2Utils.getOptionByValue(this._data, value));\n          }\n        } else if (this._control) {\n          this._control.viewToModelUpdate(value);\n        }\n        this._changeDetectorRef.markForCheck();\n      }\n    }\n    /** Does some manual dirty checking on the native input `value` property. */\n    _dirtyCheckNativeValue() {\n      const newValue = this.value;\n      if (this._previousNativeValue !== newValue) {\n        this._previousNativeValue = newValue;\n        this._stateChanges.next();\n      }\n    }\n    _focusSearchboxOrResultsElement(focus = true) {\n      if (!this.isSearchboxHidden) {\n        setTimeout(() => {\n          if (this.searchInput && this.searchInput.nativeElement && focus) {\n            this.searchInput.nativeElement.focus();\n          }\n        });\n        if (this.resultsElement && focus) {\n          this.resultsElement.focus();\n        }\n      }\n    }\n    _focus(state) {\n      if (!state && this.focused) {\n        this.focused = state;\n        this.blur.emit(this);\n      } else if (state && !this.focused) {\n        this.focused = state;\n        this.focus.emit(this);\n      }\n    }\n    _isAbobeOverlay() {\n      return this.overlay && this._overlayPosition && this.listPosition === 'auto' ? this._overlayPosition === 'top' : this.listPosition === 'above';\n    }\n    /** @nocollapse */\n    static {\n      this.ɵfac = function Select2_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Select2)(i0.ɵɵdirectiveInject(i1.ViewportRuler), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.NgForm, 8), i0.ɵɵdirectiveInject(i2.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i2.NgControl, 10), i0.ɵɵinjectAttribute('tabindex'));\n      };\n    }\n    /** @nocollapse */\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: Select2,\n        selectors: [[\"select2\"]],\n        viewQuery: function Select2_Query(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵviewQuery(CdkConnectedOverlay, 5);\n            i0.ɵɵviewQuery(_c0, 7);\n            i0.ɵɵviewQuery(_c1, 5);\n            i0.ɵɵviewQuery(_c2, 5);\n            i0.ɵɵviewQuery(_c3, 5);\n            i0.ɵɵviewQuery(_c4, 5);\n          }\n          if (rf & 2) {\n            let _t;\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.cdkConnectedOverlay = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selection = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.resultContainer = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInput = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropdown = _t.first);\n            i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.results = _t);\n          }\n        },\n        hostVars: 10,\n        hostBindings: function Select2_HostBindings(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵlistener(\"click\", function Select2_click_HostBindingHandler($event) {\n              return ctx.clickDetection($event);\n            }, false, i0.ɵɵresolveDocument);\n          }\n          if (rf & 2) {\n            i0.ɵɵhostProperty(\"id\", ctx.id);\n            i0.ɵɵattribute(\"aria-invalid\", ctx.ariaInvalid);\n            i0.ɵɵclassProp(\"material\", ctx.classMaterial)(\"nostyle\", ctx.classNostyle)(\"borderless\", ctx.classBorderless)(\"select2-above\", ctx.select2above);\n          }\n        },\n        inputs: {\n          data: \"data\",\n          minCharForSearch: [2, \"minCharForSearch\", \"minCharForSearch\", numberAttribute],\n          displaySearchStatus: \"displaySearchStatus\",\n          placeholder: \"placeholder\",\n          limitSelection: [2, \"limitSelection\", \"limitSelection\", numberAttribute],\n          listPosition: \"listPosition\",\n          multiple: [2, \"multiple\", \"multiple\", booleanAttribute],\n          overlay: [2, \"overlay\", \"overlay\", booleanAttribute],\n          styleMode: \"styleMode\",\n          noResultMessage: \"noResultMessage\",\n          maxResults: [2, \"maxResults\", \"maxResults\", numberAttribute],\n          maxResultsMessage: \"maxResultsMessage\",\n          infiniteScrollDistance: [2, \"infiniteScrollDistance\", \"infiniteScrollDistance\", numberAttribute],\n          infiniteScrollThrottle: [2, \"infiniteScrollThrottle\", \"infiniteScrollThrottle\", numberAttribute],\n          infiniteScroll: [2, \"infiniteScroll\", \"infiniteScroll\", booleanAttribute],\n          autoCreate: [2, \"autoCreate\", \"autoCreate\", booleanAttribute],\n          noLabelTemplate: [2, \"noLabelTemplate\", \"noLabelTemplate\", booleanAttribute],\n          editPattern: \"editPattern\",\n          templates: \"templates\",\n          resultMaxHeight: \"resultMaxHeight\",\n          customSearchEnabled: [2, \"customSearchEnabled\", \"customSearchEnabled\", booleanAttribute],\n          minCountForSearch: [2, \"minCountForSearch\", \"minCountForSearch\", numberAttribute],\n          id: \"id\",\n          required: [2, \"required\", \"required\", booleanAttribute],\n          disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n          hideSelectedItems: [2, \"hideSelectedItems\", \"hideSelectedItems\", booleanAttribute],\n          readonly: [2, \"readonly\", \"readonly\", booleanAttribute],\n          value: \"value\",\n          tabIndex: [2, \"tabIndex\", \"tabIndex\", numberAttribute],\n          resettable: [2, \"resettable\", \"resettable\", booleanAttribute],\n          resetSelectedValue: \"resetSelectedValue\"\n        },\n        outputs: {\n          update: \"update\",\n          autoCreateItem: \"autoCreateItem\",\n          open: \"open\",\n          close: \"close\",\n          focus: \"focus\",\n          blur: \"blur\",\n          search: \"search\",\n          scroll: \"scroll\",\n          removeOption: \"removeOption\"\n        },\n        features: [i0.ɵɵInputTransformsFeature],\n        ngContentSelectors: _c6,\n        decls: 18,\n        vars: 28,\n        consts: [[\"selection\", \"\", \"trigger\", \"cdkOverlayOrigin\"], [\"containerTemplate\", \"\"], [\"dropdown\", \"\"], [\"searchInput\", \"\"], [\"results\", \"\"], [\"result\", \"\"], [\"li\", \"\"], [1, \"select2-label\", 3, \"click\"], [1, \"select2-required\"], [1, \"select2\", \"select2-container\", \"select2-container--default\"], [\"cdkOverlayOrigin\", \"\", 1, \"selection\", 3, \"click\", \"focus\", \"blur\", \"keydown\", \"tabindex\"], [\"role\", \"combobox\", 1, \"select2-selection\"], [1, \"select2-selection__rendered\", 3, \"title\"], [\"role\", \"presentation\", 1, \"select2-selection__reset\"], [\"role\", \"presentation\", 1, \"select2-selection__arrow\"], [1, \"select2-selection__rendered\"], [1, \"select2-subscript-wrapper\"], [\"cdkConnectedOverlay\", \"\", \"cdkConnectedOverlayHasBackdrop\", \"\", \"cdkConnectedOverlayBackdropClass\", \"select2-overlay-backdrop\", 3, \"backdropClick\", \"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayMinWidth\", \"cdkConnectedOverlayHeight\", \"cdkConnectedOverlayPositions\"], [1, \"select2-selection__placeholder\"], [3, \"innerHTML\"], [4, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"role\", \"presentation\", 1, \"select2-selection__reset\", 3, \"click\"], [1, \"select2-selection__placeholder\", 3, \"select2-selection__placeholder__option\"], [\"tabindex\", \"0\", 1, \"select2-selection__choice\", 3, \"title\"], [1, \"select2-selection__auto-create\"], [\"tabindex\", \"0\", 1, \"select2-selection__choice\", 3, \"keydown.enter\", \"title\"], [\"role\", \"presentation\", 1, \"select2-selection__choice__remove\"], [\"role\", \"presentation\", 1, \"select2-selection__choice__remove\", 3, \"click\"], [1, \"select2-selection__auto-create\", 3, \"focus\", \"blur\"], [\"type\", \"search\", \"role\", \"textbox\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"select2-create__field\", 3, \"click\", \"keydown\", \"keyup\", \"change\", \"id\"], [4, \"ngTemplateOutlet\"], [1, \"select2-container\", \"select2-container--default\", \"select2-container-dropdown\"], [1, \"select2-dropdown\"], [1, \"select2-search\", \"select2-search--dropdown\"], [\"type\", \"search\", \"role\", \"textbox\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"select2-search__field\", 3, \"keydown\", \"keyup\", \"change\", \"id\", \"value\"], [1, \"select2-results\"], [\"role\", \"tree\", \"tabindex\", \"-1\", \"infiniteScroll\", \"\", 1, \"select2-results__options\", 3, \"scrolled\", \"scrolledUp\", \"keydown\", \"infiniteScrollDisabled\", \"infiniteScrollDistance\", \"infiniteScrollThrottle\", \"infiniteScrollContainer\"], [1, \"select2-no-result\", \"select2-results__option\", 3, \"innerHTML\"], [1, \"select2-too-much-result\", \"select2-results__option\", 3, \"innerHTML\"], [\"role\", \"group\", 1, \"select2-results__option\"], [\"role\", \"treeitem\", 3, \"id\", \"class\"], [1, \"select2-results__options\", \"select2-results__options--nested\"], [\"role\", \"treeitem\", 3, \"mouseenter\", \"click\", \"id\"], [1, \"select2-label-content\", 3, \"innerHTML\"]],\n        template: function Select2_Template(rf, ctx) {\n          if (rf & 1) {\n            const _r1 = i0.ɵɵgetCurrentView();\n            i0.ɵɵprojectionDef(_c5);\n            i0.ɵɵelementStart(0, \"div\", 7);\n            i0.ɵɵlistener(\"click\", function Select2_Template_div_click_0_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.toggleOpenAndClose());\n            });\n            i0.ɵɵprojection(1);\n            i0.ɵɵtemplate(2, Select2_Conditional_2_Template, 1, 0, \"span\", 8);\n            i0.ɵɵelementEnd();\n            i0.ɵɵelementStart(3, \"div\", 9)(4, \"div\", 10, 0);\n            i0.ɵɵlistener(\"click\", function Select2_Template_div_click_4_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.toggleOpenAndClose());\n            })(\"focus\", function Select2_Template_div_focus_4_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.focusin());\n            })(\"blur\", function Select2_Template_div_blur_4_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.focusout());\n            })(\"keydown\", function Select2_Template_div_keydown_4_listener($event) {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.openKey($event));\n            });\n            i0.ɵɵelementStart(7, \"div\", 11);\n            i0.ɵɵtemplate(8, Select2_Conditional_8_Template, 5, 6, \"span\", 12)(9, Select2_Conditional_9_Template, 2, 0, \"span\", 13)(10, Select2_Conditional_10_Template, 1, 0, \"span\", 14)(11, Select2_Conditional_11_Template, 5, 3, \"ul\", 15);\n            i0.ɵɵelementEnd()();\n            i0.ɵɵtemplate(12, Select2_Conditional_12_Template, 1, 1, \"ng-container\");\n            i0.ɵɵelementStart(13, \"div\", 16);\n            i0.ɵɵprojection(14, 1);\n            i0.ɵɵelementEnd()();\n            i0.ɵɵtemplate(15, Select2_ng_template_15_Template, 1, 1, \"ng-template\", 17);\n            i0.ɵɵlistener(\"backdropClick\", function Select2_Template_ng_template_backdropClick_15_listener() {\n              i0.ɵɵrestoreView(_r1);\n              return i0.ɵɵresetView(ctx.toggleOpenAndClose());\n            });\n            i0.ɵɵtemplate(16, Select2_ng_template_16_Template, 13, 25, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor);\n          }\n          if (rf & 2) {\n            const trigger_r18 = i0.ɵɵreference(6);\n            i0.ɵɵadvance(2);\n            i0.ɵɵconditional(ctx.required ? 2 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵclassProp(\"select2-container--focus\", ctx.focused)(\"select2-container--below\", !ctx.select2above)(\"select2-container--above\", ctx.select2above)(\"select2-container--open\", ctx.isOpen)(\"select2-container--disabled\", ctx.disabled);\n            i0.ɵɵadvance();\n            i0.ɵɵclassProp(\"select2-focused\", ctx.focused);\n            i0.ɵɵproperty(\"tabindex\", !ctx.isOpen ? ctx.tabIndex : \"-1\");\n            i0.ɵɵadvance(3);\n            i0.ɵɵclassProp(\"select2-selection--multiple\", ctx.multiple)(\"select2-selection--single\", !ctx.multiple);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx.multiple ? 8 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx.multiple && ctx.resettable && ctx.resetSelectedValue !== ctx.value && ctx.select2Option && !(ctx.disabled || ctx.readonly) ? 9 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx.multiple ? 10 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(ctx.multiple ? 11 : -1);\n            i0.ɵɵadvance();\n            i0.ɵɵconditional(!ctx.overlay ? 12 : -1);\n            i0.ɵɵadvance(3);\n            i0.ɵɵproperty(\"cdkConnectedOverlayOrigin\", trigger_r18)(\"cdkConnectedOverlayOpen\", ctx.isOpen && ctx.overlay)(\"cdkConnectedOverlayMinWidth\", ctx.overlayWidth)(\"cdkConnectedOverlayHeight\", ctx.overlayHeight)(\"cdkConnectedOverlayPositions\", ctx._positions);\n          }\n        },\n        dependencies: [i3.NgTemplateOutlet, i4.CdkConnectedOverlay, i4.CdkOverlayOrigin, i5.InfiniteScrollDirective],\n        styles: [\".select2-label[_ngcontent-%COMP%]{color:var(--select2-label-text-color, #000)}.select2-container[_ngcontent-%COMP%]{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle;width:100%}.select2-container[_ngcontent-%COMP%]   .select2-container-dropdown[_ngcontent-%COMP%]{position:absolute;width:0px;opacity:0}.select2-container[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]{box-sizing:border-box;cursor:pointer;display:block;height:var(--select2-single-height, 28px);-webkit-user-select:none;user-select:none}.select2-container[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]{display:block;padding:var(--select2-selection-padding, 0 0 0 8px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}.select2-container[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__clear[_ngcontent-%COMP%]{position:relative}.select2-container[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{box-sizing:border-box;cursor:pointer;display:block;min-height:var(--select2-multiple-height, 28px);-webkit-user-select:none;user-select:none}.select2-container[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]{display:inline-flex;overflow:hidden;padding-left:8px;padding-bottom:2px;text-overflow:ellipsis;white-space:nowrap;flex-wrap:wrap;gap:var(--select2-selection-multiple-gap, 2px 5px)}.select2-container[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]   .select2-selection__auto-create[_ngcontent-%COMP%]{flex:1 1 150px;min-width:150px;display:flex}.select2-container[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]   .select2-create__field[_ngcontent-%COMP%]{width:100%;border:0}.select2-container[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]   .select2-create__field[_ngcontent-%COMP%]:focus{border:0;outline:0}.select2-container[_ngcontent-%COMP%]   .select2-search--inline[_ngcontent-%COMP%]{float:left}.select2-container[_ngcontent-%COMP%]   .select2-search--inline[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container[_ngcontent-%COMP%]   .select2-search--inline[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown[_ngcontent-%COMP%]{background:var(--select2-dropdown-background, white);border:1px solid var(--select2-dropdown-border-color, #aaa);border-radius:var(--select2-selection-border-radius, 4px);box-sizing:border-box;display:block;position:absolute;width:100%;z-index:1051;height:0;overflow:hidden}.select2-dropdown[_ngcontent-%COMP%]   .select2-label-content[_ngcontent-%COMP%]{display:contents}.select2-results[_ngcontent-%COMP%]{display:block}.select2-results__options[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.select2-results__option[_ngcontent-%COMP%]{padding:var(--select2-option-padding, 6px);-webkit-user-select:none;user-select:none;color:var(--select2-option-text-color, #000)}.select2-results__option[aria-selected][_ngcontent-%COMP%]{cursor:pointer}.select2-container.select2-container-dropdown.select2-container--open[_ngcontent-%COMP%]{width:100%;opacity:1}.select2-container--open[_ngcontent-%COMP%]   .select2-dropdown[_ngcontent-%COMP%]{overflow:auto;height:auto}.select2-container--open[_ngcontent-%COMP%]   .select2-dropdown--above[_ngcontent-%COMP%]{border-bottom:var(--select2-dropdown-above-border-bottom, none);border-bottom-left-radius:var(--select2-dropdown-above-border-bottom-left-radius, 0);border-bottom-right-radius:var(--select2-dropdown-above-border-bottom-right-radius, 0);bottom:27px;display:flex;flex-direction:column-reverse}.select2-container--open[_ngcontent-%COMP%]   .select2-dropdown--below[_ngcontent-%COMP%]{border-top:var(--select2-dropdown-below-border-top, none);border-top-left-radius:var(--select2-dropdown-below-border-top-left-radius, 0);border-top-right-radius:var(--select2-dropdown-below-border-top-right-radius, 0)}.select2-search--dropdown[_ngcontent-%COMP%]{display:block;padding:4px}.select2-search--dropdown[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide[_ngcontent-%COMP%]{display:none}.select2-close-mask[_ngcontent-%COMP%]{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99}.select2-required[_ngcontent-%COMP%]:before{content:\\\"*\\\";color:var(--select2-required-color, red)}.select2-hidden-accessible[_ngcontent-%COMP%]{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]{background:var(--select2-selection-background, #fff);border:1px solid var(--select2-selection-border-color, #aaa);border-radius:var(--select2-selection-border-radius, 4px);display:flex}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]{color:var(--select2-selection-text-color, #111);line-height:var(--select2-selection-line-height, 28px)}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__clear[_ngcontent-%COMP%]{cursor:pointer;float:right;font-weight:700}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__placeholder[_ngcontent-%COMP%]{color:var(--select2-placeholder-color, #999)}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__placeholder[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap;text-overflow:var(--select2-placeholder-overflow, ellipsis)}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__placeholder__option[_ngcontent-%COMP%]{display:none}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__reset[_ngcontent-%COMP%], .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__arrow[_ngcontent-%COMP%]{display:flex;width:20px;align-items:center;justify-content:center}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__arrow[_ngcontent-%COMP%]:before{content:\\\" \\\";border-color:var(--select2-arrow-color, #888) transparent;border-style:solid;border-width:5px 4px 0;height:0;width:0}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__reset[_ngcontent-%COMP%]{color:var(--select2-reset-color, #999)}.select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]{background:var(--select2-selection-disabled-background, #eee);cursor:default}.select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__clear[_ngcontent-%COMP%]{display:none}.select2-container--default.select2-container--open[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__arrow[_ngcontent-%COMP%]:before{border-color:transparent transparent var(--select2-arrow-color, #888);border-width:0 4px 5px}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:var(--select2-selection-background, #fff);border:1px solid var(--select2-selection-border-color, #aaa);border-radius:var(--select2-selection-border-radius, 4px);cursor:text;display:flex}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]{flex:1 1 auto;box-sizing:border-box;list-style:none;margin:0;padding:var(--select2-selection-multiple-padding, 2px 5px);width:100%;min-height:1em;align-items:center}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]{list-style:none;line-height:var(--select2-selection-choice-line-height, 20px)}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__placeholder[_ngcontent-%COMP%]{display:block;width:100%;color:var(--select2-placeholder-color, #999);margin-top:5px;float:left;overflow:hidden;white-space:nowrap;text-overflow:var(--select2-placeholder-overflow, ellipsis)}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__placeholder__option[_ngcontent-%COMP%]{display:none}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__clear[_ngcontent-%COMP%]{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__choice[_ngcontent-%COMP%]{color:var(--select2-selection-choice-text-color, #000);background:var(--select2-selection-choice-background, #e4e4e4);border:1px solid var(--select2-selection-choice-border-color, #aaa);border-radius:var(--select2-selection-border-radius, 4px);cursor:default;padding:0 5px}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__choice__remove[_ngcontent-%COMP%]{color:var(--select2-selection-choice-close-color, #999);cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__choice__remove[_ngcontent-%COMP%]:hover{color:var(--select2-selection-choice-hover-close-color, #333)}.select2-container--default.select2-container--focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{border:solid var(--select2-selection-focus-border-color, #000) 1px;outline:none}.select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{border:solid var(--select2-selection-focus-border-color, #000) 1px;outline:none}.select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:var(--select2-selection-disabled-background, #eee);cursor:default}.select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection__choice__remove[_ngcontent-%COMP%]{display:none}.select2-container--default.select2-container--open.select2-container--above[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .select2-container--default.select2-container--open.select2-container--above[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .select2-container--default.select2-container--open.select2-container--below[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default[_ngcontent-%COMP%]   .select2-search--dropdown[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]{border:1px solid var(--select2-search-border-color, #aaa);background:1px solid var(--select2-search-background, #fff);border-radius:var(--select2-search-border-radius, 0px)}.select2-container--default[_ngcontent-%COMP%]   .select2-search--inline[_ngcontent-%COMP%]   .select2-search__field[_ngcontent-%COMP%]{background:transparent;border:none;outline:none;box-shadow:none;-webkit-appearance:textfield}.select2-container--default[_ngcontent-%COMP%]   .select2-results[_ngcontent-%COMP%] > .select2-results__options[_ngcontent-%COMP%]{overflow-y:auto}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[role=group][_ngcontent-%COMP%]{padding:0}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[aria-disabled=true][_ngcontent-%COMP%]{color:var(--select2-option-disabled-text-color, #999);background:var(--select2-option-disabled-background, transparent)}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[aria-selected=true][_ngcontent-%COMP%]{color:var(--select2-option-selected-text-color, #000);background:var(--select2-option-selected-background, #ddd)}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{padding-left:1em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__group[_ngcontent-%COMP%]{padding-left:0}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{margin-left:-1em;padding-left:2em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{margin-left:-2em;padding-left:3em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{margin-left:-3em;padding-left:4em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{margin-left:-4em;padding-left:5em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]   .select2-results__option[_ngcontent-%COMP%]{margin-left:-5em;padding-left:6em}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option--highlighted[aria-selected][_ngcontent-%COMP%]{background:var(--select2-option-highlighted-background, #5897fb);color:var(--select2-option-highlighted-text-color, #fff)}.select2-container--default[_ngcontent-%COMP%]   .select2-results__option--hide[_ngcontent-%COMP%]{display:none}.select2-container--default[_ngcontent-%COMP%]   .select2-results__group[_ngcontent-%COMP%]{cursor:default;display:block;padding:6px;color:var(--select2-option-group-text-color, gray);background:var(--select2-option-group-background, transparent)}.select2-no-result[_ngcontent-%COMP%]{color:var(--select2-no-result-color, #888);font-style:var(--select2-no-result-font-style, italic)}.select2-too-much-result[_ngcontent-%COMP%]{color:var(--select2-too-much-result-color, #888);font-style:var(--select2-too-much-font-style, italic)}.nostyle[_nghost-%COMP%]   .select2-dropdown[_ngcontent-%COMP%]{border-color:transparent}.nostyle[_nghost-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .nostyle[_nghost-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:transparent;border-color:transparent}.nostyle[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .nostyle[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%], .nostyle[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .nostyle[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:transparent;border-color:transparent}.borderless[_nghost-%COMP%]{--select2-dropdown-above-border-bottom: 1px solid var(--select2-dropdown-border-color, #aaa);--select2-dropdown-above-border-bottom-left-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-above-border-bottom-right-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-below-border-top: 1px solid var(--select2-dropdown-border-color, #aaa);--select2-dropdown-below-border-top-left-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-below-border-top-right-radius: var(--select2-selection-border-radius, 4px)}.borderless[_nghost-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .borderless[_nghost-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:transparent;border-color:transparent}.borderless[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .borderless[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%], .borderless[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .borderless[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:transparent;border-color:transparent}.material[_nghost-%COMP%]{display:inline-block;width:300px}.material[_nghost-%COMP%] > .select2-container[_ngcontent-%COMP%]{padding-bottom:1.29688em;vertical-align:inherit}.material[_nghost-%COMP%] > .select2-container[_ngcontent-%COMP%]   .selection[_ngcontent-%COMP%]{padding:.4375em 0;border-top:.84375em solid transparent;display:inline-flex;align-items:baseline;width:100%;height:auto}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{width:100%;border:0;border-radius:0;height:24px;box-sizing:border-box}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:before, .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:before{content:\\\" \\\";display:block;position:absolute;bottom:1.65em;background:var(--select2-material-underline, #ddd);height:1px;width:100%}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:after, .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:after{content:\\\" \\\";display:block;position:absolute;bottom:1.63em;background:var(--select2-material-underline-active, #5a419e);height:2px;width:0%;left:50%;transition:none}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%], .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__rendered[_ngcontent-%COMP%]{padding-left:1px;line-height:inherit}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]   .select2-selection__placeholder[_ngcontent-%COMP%], .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]   .select2-selection__placeholder[_ngcontent-%COMP%]{display:block;color:var(--select2-material-placeholder-color, rgba(0, 0, 0, .38));transition:transform .3s;position:absolute;transform-origin:0 21px;left:0;top:20px}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-container--open[_ngcontent-%COMP%]{left:0;bottom:1.6em}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection__placeholder__option[_ngcontent-%COMP%]{transform:translateY(-1.5em) scale(.75) perspective(100px) translateZ(.001px);width:133.33333%}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection__arrow[_ngcontent-%COMP%]{top:20px}.material[_nghost-%COMP%]   .select2-container--default.select2-container--open[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:after, .material[_nghost-%COMP%]   .select2-container--default.select2-container--open[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:after, .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:after, .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:after{transition:width .3s cubic-bezier(.12,1,.77,1),left .3s cubic-bezier(.12,1,.77,1);width:100%;left:0%}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-dropdown[_ngcontent-%COMP%]{border-radius:0;border:0;box-shadow:0 5px 5px #00000080}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-results__option[aria-selected=true][_ngcontent-%COMP%], .material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-results__option--highlighted[aria-selected][_ngcontent-%COMP%]{background:var(--select2-material-option-selected-background, rgba(0, 0, 0, .04));color:var(--select2-material-option-highlighted-text-color, #000)}.material[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-results__option[aria-selected=true][_ngcontent-%COMP%]{color:var(--select2-material-option-selected-text-color, #ff5722)}.material[_nghost-%COMP%]   .select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .material[_nghost-%COMP%]   .select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{background:transparent}.material[_nghost-%COMP%]   .select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:before, .material[_nghost-%COMP%]   .select2-container--default.select2-container--disabled[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:before{background:var(--select2-material-underline-disabled, linear-gradient(to right, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 33%, transparent 0));background-size:4px 1px;background-repeat:repeat-x;background-position:0 bottom}.material.ng-invalid.ng-touched[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:before, .material.ng-invalid.ng-touched[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%]:after, .material.ng-invalid.ng-touched[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:before, .material.ng-invalid.ng-touched[_nghost-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]:after{background:var(--select2-material-underline-invalid, red)}.material[_nghost-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], .material[_nghost-%COMP%]:not(.select2-container--open)   .select2-focused[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{border:0}.material[_nghost-%COMP%]   .select2-subscript-wrapper[_ngcontent-%COMP%]{position:absolute;top:calc(100% - 1.72917em);font-size:75%;color:var(--select2-hint-text-color, #888)}  .select2-overlay-backdrop{background:var(--select2-overlay-backdrop, transparent)}  .cdk-overlay-container .select2-container .select2-dropdown.select2-dropdown--above{bottom:28px}  .cdk-overlay-container .select2-container--open.select2-position-auto .select2-dropdown{margin-bottom:28px}  .cdk-overlay-container .select2-container--open.select2-position-auto .select2-dropdown.select2-dropdown--above{bottom:0;margin-bottom:0;margin-top:28px}  .cdk-overlay-container .select2-style-borderless{--select2-dropdown-above-border-bottom: 1px solid var(--select2-dropdown-border-color, #aaa);--select2-dropdown-above-border-bottom-left-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-above-border-bottom-right-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-below-border-top: 1px solid var(--select2-dropdown-border-color, #aaa);--select2-dropdown-below-border-top-left-radius: var(--select2-selection-border-radius, 4px);--select2-dropdown-below-border-top-right-radius: var(--select2-selection-border-radius, 4px)}@supports (-moz-appearance: none){select2.material[_ngcontent-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--single[_ngcontent-%COMP%], select2.material[_ngcontent-%COMP%]   .select2-container--default[_ngcontent-%COMP%]   .select2-selection--multiple[_ngcontent-%COMP%]{height:26px}}\"]\n      });\n    }\n  }\n  return Select2;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet Select2Hint = /*#__PURE__*/(() => {\n  class Select2Hint {\n    /** @nocollapse */static {\n      this.ɵfac = function Select2Hint_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Select2Hint)();\n      };\n    }\n    /** @nocollapse */\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: Select2Hint,\n        selectors: [[\"select2-hint\"]]\n      });\n    }\n  }\n  return Select2Hint;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet Select2Label = /*#__PURE__*/(() => {\n  class Select2Label {\n    /** @nocollapse */static {\n      this.ɵfac = function Select2Label_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Select2Label)();\n      };\n    }\n    /** @nocollapse */\n    static {\n      this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n        type: Select2Label,\n        selectors: [[\"select2-label\"]]\n      });\n    }\n  }\n  return Select2Label;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet Select2Module = /*#__PURE__*/(() => {\n  class Select2Module {\n    /** @nocollapse */static {\n      this.ɵfac = function Select2Module_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || Select2Module)();\n      };\n    }\n    /** @nocollapse */\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: Select2Module\n      });\n    }\n    /** @nocollapse */\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n        imports: [CommonModule, FormsModule, OverlayModule, ReactiveFormsModule, InfiniteScrollModule, FormsModule, ReactiveFormsModule]\n      });\n    }\n  }\n  return Select2Module;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of ng-select2-component\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Select2, Select2Hint, Select2Label, Select2Module, Select2Utils, defaultMinCountForSearch, protectRegexp, timeout, unicodePatterns };\n"],"mappings":"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","names":["coerceNumberProperty","value","fallbackValue","_isNumberValue","coerceArray","coerceCssPixelValue","coerceElement","elementOrRef","ElementRef","hasV8BreakIterator","Platform","_platformId","isPlatformBrowser","__ngFactoryType__","ɵɵinject","PLATFORM_ID","ɵɵdefineInjectable","supportsPassiveEvents","supportsPassiveEventListeners","normalizePassiveListenerOptions","options","scrollBehaviorSupported","supportsScrollBehavior","scrollToFunction","shadowDomIsSupported","_supportsShadowDom","head","_getShadowRoot","element","rootNode","_getEventTarget","event","_isTestEnvironment","DIR_DOCUMENT","InjectionToken","DIR_DOCUMENT_FACTORY","inject","DOCUMENT","RTL_LOCALE_PATTERN","_resolveDirectionality","rawValue","value","Directionality","_document","EventEmitter","bodyDir","htmlDir","__ngFactoryType__","ɵɵinject","ɵɵdefineInjectable","BidiModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","DEFAULT_SCROLL_TIME","ScrollDispatcher","_ngZone","_platform","document","Subject","scrollable","scrollableReference","auditTimeInMs","Observable","observer","subscription","auditTime","of","_","container","elementOrElementRef","ancestors","filter","target","scrollingContainers","_subscription","element","coerceElement","scrollableElement","window","fromEvent","__ngFactoryType__","ɵɵinject","NgZone","Platform","DOCUMENT","ɵɵdefineInjectable","DEFAULT_RESIZE_TIME","ViewportRuler","_platform","ngZone","document","Subject","event","window","output","scrollPosition","width","height","documentElement","documentRect","top","left","throttleTime","auditTime","__ngFactoryType__","ɵɵinject","Platform","NgZone","DOCUMENT","ɵɵdefineInjectable","CdkScrollableModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ScrollingModule","BidiModule","hasModifierKey","event","modifiers","modifier","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","document","config","BlockScrollStrategy","__ngFactoryType__","ɵɵinject","ScrollDispatcher","ViewportRuler","NgZone","DOCUMENT","ɵɵdefineInjectable","OverlayConfig","configKeys","key","ConnectedOverlayPositionChange","connectionPair","scrollableViewProperties","BaseOverlayDispatcher","document","overlayRef","index","__ngFactoryType__","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","OverlayKeyboardDispatcher","_ngZone","event","overlays","i","keydownEvents","NgZone","OverlayOutsideClickDispatcher","_platform","_getEventTarget","target","origin","containsPierceShadowDom","outsidePointerEvents","body","Platform","parent","child","supportsShadowRoot","current","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","_viewportRuler","_document","_platform","_overlayContainer","origin","FlexibleConnectedPositionStrategy","__ngFactoryType__","ɵɵinject","ViewportRuler","DOCUMENT","Platform","OverlayContainer","ɵɵdefineInjectable","nextUniqueId","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","elementRef","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","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","ɵɵdefineNgModule","ɵɵdefineInjector","BidiModule","PortalModule","ScrollingModule","_c0","_c1","_c2","_c3","_c4","_c5","_c6","_c7","Select2_Conditional_2_Template","rf","ctx","ɵɵelement","Select2_Conditional_8_Conditional_1_Template","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","Select2_Conditional_8_Conditional_2_Conditional_0_Template","ctx_r1","ɵɵnextContext","ɵɵproperty","ɵɵsanitizeHtml","Select2_Conditional_8_Conditional_2_Conditional_1_ng_container_0_Template","ɵɵelementContainer","Select2_Conditional_8_Conditional_2_Conditional_1_Template","ɵɵtemplate","Select2_Conditional_8_Conditional_2_Template","ɵɵconditional","Select2_Conditional_8_Template","ɵɵadvance","ɵɵclassProp","ɵɵtextInterpolate","Select2_Conditional_9_Template","_r3","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","Select2_Conditional_10_Template","Select2_Conditional_11_Conditional_1_Template","Select2_Conditional_11_For_3_Conditional_1_Template","_r6","op_r5","Select2_Conditional_11_For_3_Conditional_2_Template","Select2_Conditional_11_For_3_Conditional_3_ng_container_0_Template","Select2_Conditional_11_For_3_Conditional_3_Template","Select2_Conditional_11_For_3_Template","_r4","Select2_Conditional_11_Conditional_4_Template","_r7","Select2_Conditional_11_Template","ɵɵrepeaterCreate","ɵɵcomponentInstance","ɵɵrepeater","ɵɵpureFunction0","Select2_Conditional_12_ng_container_0_Template","Select2_Conditional_12_Template","containerTemplate_r8","ɵɵreference","Select2_ng_template_15_ng_container_0_Template","Select2_ng_template_15_Template","Select2_ng_template_16_For_10_Conditional_0_Conditional_1_Template","groupOrOption_r10","ɵɵattribute","Select2_ng_template_16_For_10_Conditional_0_Conditional_2_ng_container_0_Template","Select2_ng_template_16_For_10_Conditional_0_Conditional_2_Template","Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_2_Template","option_r12","Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_ng_container_0_Template","Select2_ng_template_16_For_10_Conditional_0_For_5_Conditional_3_Template","Select2_ng_template_16_For_10_Conditional_0_For_5_Template","_r11","ɵ$index_108_r13","ɵ$index_94_r14","ɵɵclassMap","Select2_ng_template_16_For_10_Conditional_0_Template","Select2_ng_template_16_For_10_Conditional_1_Conditional_2_Template","Select2_ng_template_16_For_10_Conditional_1_Conditional_3_ng_container_0_Template","Select2_ng_template_16_For_10_Conditional_1_Conditional_3_Template","Select2_ng_template_16_For_10_Conditional_1_ng_template_4_ng_container_0_Template","Select2_ng_template_16_For_10_Conditional_1_ng_template_4_Template","Select2_ng_template_16_For_10_Conditional_1_Template","_r15","ɵɵtemplateRefExtractor","ctx_r15","Select2_ng_template_16_For_10_Template","Select2_ng_template_16_Conditional_11_Template","Select2_ng_template_16_Conditional_12_Template","Select2_ng_template_16_Template","_r9","results_r17","ɵɵstyleProp","unicodePatterns","defaultMinCountForSearch","protectRegexp","Select2Utils","_Select2Utils","data","value","groupOrOption","options","option","multiple","values","result","v","filteredData","hoveringValue","findIt","i","j","maxResults","counter","group","__spreadProps","__spreadValues","item","searchText","editPattern","filteredOptions","selectedOptions","minCountForSearch","op","count","label","str","unicodePattern","nextUniqueId","displaySearchStatusList","Select2","text","_viewportRuler","_changeDetectorRef","_parentForm","_parentFormGroup","_control","tabIndex","EventEmitter","Subject","target","posChange","hidden","displaySearchStatus","event","focus","open","changeEmit","defaut","TemplateRef","value1","value2","e1","writeValue","element","cssClass","id","cssClasses","index","create","_index","fn","isDisabled","way","isInvalid","isTouched","isSubmitted","domElement","r","listClientRect","optionClientRect","refs","code","isArray","newValue","state","__ngFactoryType__","ɵɵdirectiveInject","ViewportRuler","ChangeDetectorRef","NgForm","FormGroupDirective","NgControl","ɵɵinjectAttribute","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","CdkConnectedOverlay","_c0","_c1","_c2","_c3","_c4","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵlistener","$event","ɵɵresolveDocument","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","numberAttribute","booleanAttribute","ɵɵInputTransformsFeature","_c6","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","_c5","ɵɵelementStart","ɵɵrestoreView","ɵɵresetView","ɵɵprojection","ɵɵtemplate","Select2_Conditional_2_Template","ɵɵelementEnd","Select2_Conditional_8_Template","Select2_Conditional_9_Template","Select2_Conditional_10_Template","Select2_Conditional_11_Template","Select2_Conditional_12_Template","Select2_ng_template_15_Template","Select2_ng_template_16_Template","ɵɵtemplateRefExtractor","trigger_r18","ɵɵreference","ɵɵadvance","ɵɵconditional","ɵɵproperty","NgTemplateOutlet","CdkOverlayOrigin","InfiniteScrollDirective","Select2Module","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","FormsModule","OverlayModule","ReactiveFormsModule","InfiniteScrollModule"],"x_google_ignoreList":[0,1,2,3,4,5,6]}