`\n // and attach a portal programmatically in the parent component. When Angular does the first CD\n // round, it will fire the setter with empty string, causing the user's content to be cleared.\n if (this.hasAttached() && !portal && !this._isInitialized) {\n return;\n }\n if (this.hasAttached()) {\n super.detach();\n }\n if (portal) {\n super.attach(portal);\n }\n this._attachedPortal = portal || null;\n }\n /** Component or view reference that is attached to the portal. */\n get attachedRef() {\n return this._attachedRef;\n }\n ngOnInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n super.dispose();\n this._attachedRef = this._attachedPortal = null;\n }\n /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @param portal Portal to be attached to the portal outlet.\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n portal.setAttachedHost(this);\n // If the portal specifies an origin, use that as the logical location of the component\n // in the application tree. Otherwise use the location of this PortalOutlet.\n const viewContainerRef = portal.viewContainerRef != null ? portal.viewContainerRef : this._viewContainerRef;\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector, portal.projectableNodes || undefined);\n // If we're using a view container that's different from the injected one (e.g. when the portal\n // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered\n // inside of the alternate view container.\n if (viewContainerRef !== this._viewContainerRef) {\n this._getRootNode().appendChild(ref.hostView.rootNodes[0]);\n }\n super.setDisposeFn(() => ref.destroy());\n this._attachedPortal = portal;\n this._attachedRef = ref;\n this.attached.emit(ref);\n return ref;\n }\n /**\n * Attach the given TemplatePortal to this PortalHost as an embedded View.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n portal.setAttachedHost(this);\n const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context, {\n injector: portal.injector\n });\n super.setDisposeFn(() => this._viewContainerRef.clear());\n this._attachedPortal = portal;\n this._attachedRef = viewRef;\n this.attached.emit(viewRef);\n return viewRef;\n }\n /** Gets the root node of the portal outlet. */\n _getRootNode() {\n const nativeElement = this._viewContainerRef.element.nativeElement;\n // The directive could be set on a template which will result in a comment\n // node being the root. Use the comment's parent node if that is the case.\n return nativeElement.nodeType === nativeElement.ELEMENT_NODE ? nativeElement : nativeElement.parentNode;\n }\n static {\n this.ɵfac = function CdkPortalOutlet_Factory(ɵt) {\n return new (ɵt || CdkPortalOutlet)(i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(DOCUMENT));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkPortalOutlet,\n selectors: [[\"\", \"cdkPortalOutlet\", \"\"]],\n inputs: {\n portal: [0, \"cdkPortalOutlet\", \"portal\"]\n },\n outputs: {\n attached: \"attached\"\n },\n exportAs: [\"cdkPortalOutlet\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return CdkPortalOutlet;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @deprecated Use `CdkPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nlet PortalHostDirective = /*#__PURE__*/(() => {\n class PortalHostDirective extends CdkPortalOutlet {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵPortalHostDirective_BaseFactory;\n return function PortalHostDirective_Factory(ɵt) {\n return (ɵPortalHostDirective_BaseFactory || (ɵPortalHostDirective_BaseFactory = i0.ɵɵgetInheritedFactory(PortalHostDirective)))(ɵt || PortalHostDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: PortalHostDirective,\n selectors: [[\"\", \"cdkPortalHost\", \"\"], [\"\", \"portalHost\", \"\"]],\n inputs: {\n portal: [0, \"cdkPortalHost\", \"portal\"]\n },\n exportAs: [\"cdkPortalHost\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return PortalHostDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PortalModule = /*#__PURE__*/(() => {\n class PortalModule {\n static {\n this.ɵfac = function PortalModule_Factory(ɵt) {\n return new (ɵt || PortalModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: PortalModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return PortalModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * @docs-private\n * @deprecated Use `Injector.create` instead.\n * @breaking-change 11.0.0\n */\nclass PortalInjector {\n constructor(_parentInjector, _customTokens) {\n this._parentInjector = _parentInjector;\n this._customTokens = _customTokens;\n }\n get(token, notFoundValue) {\n const value = this._customTokens.get(token);\n if (typeof value !== 'undefined') {\n return value;\n }\n return this._parentInjector.get(token, notFoundValue);\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BasePortalHost, BasePortalOutlet, CdkPortal, CdkPortalOutlet, ComponentPortal, DomPortal, DomPortalHost, DomPortalOutlet, Portal, PortalHostDirective, PortalInjector, PortalModule, TemplatePortal, TemplatePortalDirective };\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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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 // 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 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._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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || 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(ɵt) {\n return new (ɵt || FullscreenOverlayContainer)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1$1.Platform));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FullscreenOverlayContainer,\n factory: FullscreenOverlayContainer.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return FullscreenOverlayContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, STANDARD_DROPDOWN_ADJACENT_POSITIONS, STANDARD_DROPDOWN_BELOW_POSITIONS, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition };\n","import * as i1 from '@angular/cdk/a11y';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayConfig, OverlayRef, OverlayModule } from '@angular/cdk/overlay';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, ChangeDetectorRef, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, ViewChild, InjectionToken, TemplateRef, Injectable, SkipSelf, NgModule } from '@angular/core';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, defer, of } from 'rxjs';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { startWith } from 'rxjs/operators';\n\n/** Configuration for opening a modal dialog. */\nfunction CdkDialogContainer_ng_template_0_Template(rf, ctx) {}\nclass DialogConfig {\n constructor() {\n /** The ARIA role of the dialog element. */\n this.role = 'dialog';\n /** Optional CSS class or classes applied to the overlay panel. */\n this.panelClass = '';\n /** Whether the dialog has a backdrop. */\n this.hasBackdrop = true;\n /** Optional CSS class or classes applied to the overlay backdrop. */\n this.backdropClass = '';\n /** Whether the dialog closes with the escape key or pointer events outside the panel element. */\n this.disableClose = false;\n /** Width of the dialog. */\n this.width = '';\n /** Height of the dialog. */\n this.height = '';\n /** Data being injected into the child component. */\n this.data = null;\n /** ID of the element that describes the dialog. */\n this.ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n this.ariaLabelledBy = null;\n /** Dialog label applied via `aria-label` */\n this.ariaLabel = null;\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n this.ariaModal = true;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n this.autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the previously-focused element upon closing.\n * Has the following behavior based on the type that is passed in:\n * - `boolean` - when true, will return focus to the element that was focused before the dialog\n * was opened, otherwise won't restore focus at all.\n * - `string` - focus will be restored to the first element that matches the CSS selector.\n * - `HTMLElement` - focus will be restored to the specific element.\n */\n this.restoreFocus = true;\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history. This does not apply to navigation via anchor element unless using URL-hash based\n * routing (`HashLocationStrategy` in the Angular router).\n */\n this.closeOnNavigation = true;\n /**\n * Whether the dialog should close when the dialog service is destroyed. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead.\n */\n this.closeOnDestroy = true;\n /**\n * Whether the dialog should close when the underlying overlay is detached. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead. E.g. an\n * external detachment can happen as a result of a scroll strategy triggering it or when the\n * browser location changes.\n */\n this.closeOnOverlayDetachments = true;\n }\n}\nfunction throwDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Internal component that wraps user-provided dialog content.\n * @docs-private\n */\nlet CdkDialogContainer = /*#__PURE__*/(() => {\n class CdkDialogContainer extends BasePortalOutlet {\n constructor(_elementRef, _focusTrapFactory, _document, _config, _interactivityChecker, _ngZone, _overlayRef, _focusMonitor) {\n super();\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._config = _config;\n this._interactivityChecker = _interactivityChecker;\n this._ngZone = _ngZone;\n this._overlayRef = _overlayRef;\n this._focusMonitor = _focusMonitor;\n this._platform = inject(Platform);\n /** The class that traps and manages focus within the dialog. */\n this._focusTrap = null;\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n this._elementFocusedBeforeDialogWasOpened = null;\n /**\n * Type of interaction that led to the dialog being closed. This is used to determine\n * whether the focus style will be applied when returning focus to its original location\n * after the dialog is closed.\n */\n this._closeInteractionType = null;\n /**\n * Queue of the IDs of the dialog's label element, based on their definition order. The first\n * ID will be used as the `aria-labelledby` value. We use a queue here to handle the case\n * where there are two or more titles in the DOM at a time and the first one is destroyed while\n * the rest are present.\n */\n this._ariaLabelledByQueue = [];\n this._changeDetectorRef = inject(ChangeDetectorRef);\n this._injector = inject(Injector);\n this._isDestroyed = false;\n /**\n * Attaches a DOM portal to the dialog container.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = portal => {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachDomPortal(portal);\n this._contentAttached();\n return result;\n };\n this._document = _document;\n if (this._config.ariaLabelledBy) {\n this._ariaLabelledByQueue.push(this._config.ariaLabelledBy);\n }\n }\n _addAriaLabelledBy(id) {\n this._ariaLabelledByQueue.push(id);\n this._changeDetectorRef.markForCheck();\n }\n _removeAriaLabelledBy(id) {\n const index = this._ariaLabelledByQueue.indexOf(id);\n if (index > -1) {\n this._ariaLabelledByQueue.splice(index, 1);\n this._changeDetectorRef.markForCheck();\n }\n }\n _contentAttached() {\n this._initializeFocusTrap();\n this._handleBackdropClicks();\n this._captureInitialFocus();\n }\n /**\n * Can be used by child classes to customize the initial focus\n * capturing behavior (e.g. if it's tied to an animation).\n */\n _captureInitialFocus() {\n this._trapFocus();\n }\n ngOnDestroy() {\n this._isDestroyed = true;\n this._restoreFocus();\n }\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._contentAttached();\n return result;\n }\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._contentAttached();\n return result;\n }\n // TODO(crisbeto): this shouldn't be exposed, but there are internal references to it.\n /** Captures focus if it isn't already inside the dialog. */\n _recaptureFocus() {\n if (!this._containsFocus()) {\n this._trapFocus();\n }\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n element.removeEventListener('blur', callback);\n element.removeEventListener('mousedown', callback);\n element.removeAttribute('tabindex');\n };\n element.addEventListener('blur', callback);\n element.addEventListener('mousedown', callback);\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves the focus inside the focus trap. When autoFocus is not set to 'dialog', if focus\n * cannot be moved then focus will go to the dialog container.\n */\n _trapFocus() {\n if (this._isDestroyed) {\n return;\n }\n // If were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait until after the next render.\n afterNextRender(() => {\n const element = this._elementRef.nativeElement;\n switch (this._config.autoFocus) {\n case false:\n case 'dialog':\n // Ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (!this._containsFocus()) {\n element.focus();\n }\n break;\n case true:\n case 'first-tabbable':\n const focusedSuccessfully = this._focusTrap?.focusInitialElement();\n // If we weren't able to find a focusable element in the dialog, then focus the dialog\n // container instead.\n if (!focusedSuccessfully) {\n this._focusDialogContainer();\n }\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this._config.autoFocus);\n break;\n }\n }, {\n injector: this._injector\n });\n }\n /** Restores focus to the element that was focused before the dialog opened. */\n _restoreFocus() {\n const focusConfig = this._config.restoreFocus;\n let focusTargetElement = null;\n if (typeof focusConfig === 'string') {\n focusTargetElement = this._document.querySelector(focusConfig);\n } else if (typeof focusConfig === 'boolean') {\n focusTargetElement = focusConfig ? this._elementFocusedBeforeDialogWasOpened : null;\n } else if (focusConfig) {\n focusTargetElement = focusConfig;\n }\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this._config.restoreFocus && focusTargetElement && typeof focusTargetElement.focus === 'function') {\n const activeElement = _getFocusedElementPierceShadowDom();\n const element = this._elementRef.nativeElement;\n // Make sure that focus is still inside the dialog or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (!activeElement || activeElement === this._document.body || activeElement === element || element.contains(activeElement)) {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(focusTargetElement, this._closeInteractionType);\n this._closeInteractionType = null;\n } else {\n focusTargetElement.focus();\n }\n }\n }\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n /** Focuses the dialog container. */\n _focusDialogContainer() {\n // Note that there is no focus method when rendering on the server.\n if (this._elementRef.nativeElement.focus) {\n this._elementRef.nativeElement.focus();\n }\n }\n /** Returns whether focus is inside the dialog. */\n _containsFocus() {\n const element = this._elementRef.nativeElement;\n const activeElement = _getFocusedElementPierceShadowDom();\n return element === activeElement || element.contains(activeElement);\n }\n /** Sets up the focus trap. */\n _initializeFocusTrap() {\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n // Save the previously focused element. This element will be re-focused\n // when the dialog closes.\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n }\n }\n }\n /** Sets up the listener that handles clicks on the dialog backdrop. */\n _handleBackdropClicks() {\n // Clicking on the backdrop will move focus out of dialog.\n // Recapture it if closing via the backdrop is disabled.\n this._overlayRef.backdropClick().subscribe(() => {\n if (this._config.disableClose) {\n this._recaptureFocus();\n }\n });\n }\n static {\n this.ɵfac = function CdkDialogContainer_Factory(ɵt) {\n return new (ɵt || CdkDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(DialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkDialogContainer,\n selectors: [[\"cdk-dialog-container\"]],\n viewQuery: function CdkDialogContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n }\n },\n hostAttrs: [\"tabindex\", \"-1\", 1, \"cdk-dialog-container\"],\n hostVars: 6,\n hostBindings: function CdkDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx._config.id || null)(\"role\", ctx._config.role)(\"aria-modal\", ctx._config.ariaModal)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 1,\n vars: 0,\n consts: [[\"cdkPortalOutlet\", \"\"]],\n template: function CdkDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, CdkDialogContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}\"],\n encapsulation: 2\n });\n }\n }\n return CdkDialogContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nclass DialogRef {\n constructor(overlayRef, config) {\n this.overlayRef = overlayRef;\n this.config = config;\n /** Emits when the dialog has been closed. */\n this.closed = new Subject();\n this.disableClose = config.disableClose;\n this.backdropClick = overlayRef.backdropClick();\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\n this.id = config.id; // By the time the dialog is created we are guaranteed to have an ID.\n this.keydownEvents.subscribe(event => {\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.close(undefined, {\n focusOrigin: 'keyboard'\n });\n }\n });\n this.backdropClick.subscribe(() => {\n if (!this.disableClose) {\n this.close(undefined, {\n focusOrigin: 'mouse'\n });\n }\n });\n this._detachSubscription = overlayRef.detachments().subscribe(() => {\n // Check specifically for `false`, because we want `undefined` to be treated like `true`.\n if (config.closeOnOverlayDetachments !== false) {\n this.close();\n }\n });\n }\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\n */\n close(result, options) {\n if (this.containerInstance) {\n const closedSubject = this.closed;\n this.containerInstance._closeInteractionType = options?.focusOrigin || 'program';\n // Drop the detach subscription first since it can be triggered by the\n // `dispose` call and override the result of this closing sequence.\n this._detachSubscription.unsubscribe();\n this.overlayRef.dispose();\n closedSubject.next(result);\n closedSubject.complete();\n this.componentInstance = this.containerInstance = null;\n }\n }\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition() {\n this.overlayRef.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this.overlayRef.updateSize({\n width,\n height\n });\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this.overlayRef.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this.overlayRef.removePanelClass(classes);\n return this;\n }\n}\n\n/** Injection token for the Dialog's ScrollStrategy. */\nconst DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('DialogScrollStrategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.block();\n }\n});\n/** Injection token for the Dialog's Data. */\nconst DIALOG_DATA = /*#__PURE__*/new InjectionToken('DialogData');\n/** Injection token that can be used to provide default options for the dialog module. */\nconst DEFAULT_DIALOG_CONFIG = /*#__PURE__*/new InjectionToken('DefaultDialogConfig');\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n\n/** Unique id for the created dialog. */\nlet uniqueId = 0;\nlet Dialog = /*#__PURE__*/(() => {\n class Dialog {\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n constructor(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy) {\n this._overlay = _overlay;\n this._injector = _injector;\n this._defaultOptions = _defaultOptions;\n this._parentDialog = _parentDialog;\n this._overlayContainer = _overlayContainer;\n this._openDialogsAtThisLevel = [];\n this._afterAllClosedAtThisLevel = new Subject();\n this._afterOpenedAtThisLevel = new Subject();\n this._ariaHiddenElements = new Map();\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n this._scrollStrategy = scrollStrategy;\n }\n open(componentOrTemplateRef, config) {\n const defaults = this._defaultOptions || new DialogConfig();\n config = {\n ...defaults,\n ...config\n };\n config.id = config.id || `cdk-dialog-${uniqueId++}`;\n if (config.id && this.getDialogById(config.id) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n const overlayConfig = this._getOverlayConfig(config);\n const overlayRef = this._overlay.create(overlayConfig);\n const dialogRef = new DialogRef(overlayRef, config);\n const dialogContainer = this._attachContainer(overlayRef, dialogRef, config);\n dialogRef.containerInstance = dialogContainer;\n this._attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config);\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this._hideNonDialogContentFromAssistiveTechnology();\n }\n this.openDialogs.push(dialogRef);\n dialogRef.closed.subscribe(() => this._removeOpenDialog(dialogRef, true));\n this.afterOpened.next(dialogRef);\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this._openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n if (dialog.config.closeOnDestroy === false) {\n this._removeOpenDialog(dialog, false);\n }\n });\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this._openDialogsAtThisLevel, dialog => dialog.close());\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n this._openDialogsAtThisLevel = [];\n }\n /**\n * Creates an overlay config from a dialog config.\n * @param config The dialog configuration.\n * @returns The overlay configuration.\n */\n _getOverlayConfig(config) {\n const state = new OverlayConfig({\n positionStrategy: config.positionStrategy || this._overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this._scrollStrategy(),\n panelClass: config.panelClass,\n hasBackdrop: config.hasBackdrop,\n direction: config.direction,\n minWidth: config.minWidth,\n minHeight: config.minHeight,\n maxWidth: config.maxWidth,\n maxHeight: config.maxHeight,\n width: config.width,\n height: config.height,\n disposeOnNavigation: config.closeOnNavigation\n });\n if (config.backdropClass) {\n state.backdropClass = config.backdropClass;\n }\n return state;\n }\n /**\n * Attaches a dialog container to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n _attachContainer(overlay, dialogRef, config) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DialogConfig,\n useValue: config\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }, {\n provide: OverlayRef,\n useValue: overlay\n }];\n let containerType;\n if (config.container) {\n if (typeof config.container === 'function') {\n containerType = config.container;\n } else {\n containerType = config.container.type;\n providers.push(...config.container.providers(config));\n }\n } else {\n containerType = CdkDialogContainer;\n }\n const containerPortal = new ComponentPortal(containerType, config.viewContainerRef, Injector.create({\n parent: userInjector || this._injector,\n providers\n }), config.componentFactoryResolver);\n const containerRef = overlay.attach(containerPortal);\n return containerRef.instance;\n }\n /**\n * Attaches the user-provided component to the already-created dialog container.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param config Configuration used to open the dialog.\n */\n _attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config) {\n if (componentOrTemplateRef instanceof TemplateRef) {\n const injector = this._createInjector(config, dialogRef, dialogContainer, undefined);\n let context = {\n $implicit: config.data,\n dialogRef\n };\n if (config.templateContext) {\n context = {\n ...context,\n ...(typeof config.templateContext === 'function' ? config.templateContext() : config.templateContext)\n };\n }\n dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, context, injector));\n } else {\n const injector = this._createInjector(config, dialogRef, dialogContainer, this._injector);\n const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector, config.componentFactoryResolver));\n dialogRef.componentRef = contentRef;\n dialogRef.componentInstance = contentRef.instance;\n }\n }\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param fallbackInjector Injector to use as a fallback when a lookup fails in the custom\n * dialog injector, if the user didn't provide a custom one.\n * @returns The custom injector that can be used inside the dialog.\n */\n _createInjector(config, dialogRef, dialogContainer, fallbackInjector) {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers = [{\n provide: DIALOG_DATA,\n useValue: config.data\n }, {\n provide: DialogRef,\n useValue: dialogRef\n }];\n if (config.providers) {\n if (typeof config.providers === 'function') {\n providers.push(...config.providers(dialogRef, config, dialogContainer));\n } else {\n providers.push(...config.providers);\n }\n }\n if (config.direction && (!userInjector || !userInjector.get(Directionality, null, {\n optional: true\n }))) {\n providers.push({\n provide: Directionality,\n useValue: {\n value: config.direction,\n change: of()\n }\n });\n }\n return Injector.create({\n parent: userInjector || fallbackInjector,\n providers\n });\n }\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n * @param emitEvent Whether to emit an event if this is the last dialog.\n */\n _removeOpenDialog(dialogRef, emitEvent) {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenElements.clear();\n if (emitEvent) {\n this._getAfterAllClosed().next();\n }\n }\n }\n }\n /** Hides all of the content that isn't an overlay from assistive technology. */\n _hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this._overlayContainer.getContainerElement();\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n if (sibling !== overlayContainer && sibling.nodeName !== 'SCRIPT' && sibling.nodeName !== 'STYLE' && !sibling.hasAttribute('aria-live')) {\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n static {\n this.ɵfac = function Dialog_Factory(ɵt) {\n return new (ɵt || Dialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(DEFAULT_DIALOG_CONFIG, 8), i0.ɵɵinject(Dialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(DIALOG_SCROLL_STRATEGY));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Dialog,\n factory: Dialog.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return Dialog;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach(items, callback) {\n let i = items.length;\n while (i--) {\n callback(items[i]);\n }\n}\nlet DialogModule = /*#__PURE__*/(() => {\n class DialogModule {\n static {\n this.ɵfac = function DialogModule_Factory(ɵt) {\n return new (ɵt || DialogModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: DialogModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [Dialog],\n imports: [OverlayModule, PortalModule, A11yModule,\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule]\n });\n }\n }\n return DialogModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkDialogContainer, DEFAULT_DIALOG_CONFIG, DIALOG_DATA, DIALOG_SCROLL_STRATEGY, DIALOG_SCROLL_STRATEGY_PROVIDER, DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, Dialog, DialogConfig, DialogModule, DialogRef, throwDialogContentAlreadyAttachedError };\n","/**\n * @license Angular v18.1.3\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, Injectable, ANIMATION_MODULE_TYPE, ViewEncapsulation, ɵRuntimeError, Inject } from '@angular/core';\n\n/**\n * @description Constants for the categories of parameters that can be defined for animations.\n *\n * A corresponding function defines a set of parameters for each category, and\n * collects them into a corresponding `AnimationMetadata` object.\n *\n * @publicApi\n */\nvar AnimationMetadataType = /*#__PURE__*/function (AnimationMetadataType) {\n /**\n * Associates a named animation state with a set of CSS styles.\n * See [`state()`](api/animations/state)\n */\n AnimationMetadataType[AnimationMetadataType[\"State\"] = 0] = \"State\";\n /**\n * Data for a transition from one animation state to another.\n * See `transition()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Transition\"] = 1] = \"Transition\";\n /**\n * Contains a set of animation steps.\n * See `sequence()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Sequence\"] = 2] = \"Sequence\";\n /**\n * Contains a set of animation steps.\n * See `{@link animations/group group()}`\n */\n AnimationMetadataType[AnimationMetadataType[\"Group\"] = 3] = \"Group\";\n /**\n * Contains an animation step.\n * See `animate()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Animate\"] = 4] = \"Animate\";\n /**\n * Contains a set of animation steps.\n * See `keyframes()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Keyframes\"] = 5] = \"Keyframes\";\n /**\n * Contains a set of CSS property-value pairs into a named style.\n * See `style()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Style\"] = 6] = \"Style\";\n /**\n * Associates an animation with an entry trigger that can be attached to an element.\n * See `trigger()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Trigger\"] = 7] = \"Trigger\";\n /**\n * Contains a re-usable animation.\n * See `animation()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Reference\"] = 8] = \"Reference\";\n /**\n * Contains data to use in executing child animations returned by a query.\n * See `animateChild()`\n */\n AnimationMetadataType[AnimationMetadataType[\"AnimateChild\"] = 9] = \"AnimateChild\";\n /**\n * Contains animation parameters for a re-usable animation.\n * See `useAnimation()`\n */\n AnimationMetadataType[AnimationMetadataType[\"AnimateRef\"] = 10] = \"AnimateRef\";\n /**\n * Contains child-animation query data.\n * See `query()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Query\"] = 11] = \"Query\";\n /**\n * Contains data for staggering an animation sequence.\n * See `stagger()`\n */\n AnimationMetadataType[AnimationMetadataType[\"Stagger\"] = 12] = \"Stagger\";\n return AnimationMetadataType;\n}(AnimationMetadataType || {});\n/**\n * Specifies automatic styling.\n *\n * @publicApi\n */\nconst AUTO_STYLE = '*';\n/**\n * Creates a named animation trigger, containing a list of [`state()`](api/animations/state)\n * and `transition()` entries to be evaluated when the expression\n * bound to the trigger changes.\n *\n * @param name An identifying string.\n * @param definitions An animation definition object, containing an array of\n * [`state()`](api/animations/state) and `transition()` declarations.\n *\n * @return An object that encapsulates the trigger data.\n *\n * @usageNotes\n * Define an animation trigger in the `animations` section of `@Component` metadata.\n * In the template, reference the trigger by name and bind it to a trigger expression that\n * evaluates to a defined animation state, using the following format:\n *\n * `[@triggerName]=\"expression\"`\n *\n * Animation trigger bindings convert all values to strings, and then match the\n * previous and current values against any linked transitions.\n * Booleans can be specified as `1` or `true` and `0` or `false`.\n *\n * ### Usage Example\n *\n * The following example creates an animation trigger reference based on the provided\n * name value.\n * The provided animation value is expected to be an array consisting of state and\n * transition declarations.\n *\n * ```typescript\n * @Component({\n * selector: \"my-component\",\n * templateUrl: \"my-component-tpl.html\",\n * animations: [\n * trigger(\"myAnimationTrigger\", [\n * state(...),\n * state(...),\n * transition(...),\n * transition(...)\n * ])\n * ]\n * })\n * class MyComponent {\n * myStatusExp = \"something\";\n * }\n * ```\n *\n * The template associated with this component makes use of the defined trigger\n * by binding to an element within its template code.\n *\n * ```html\n * \n *
...
\n * ```\n *\n * ### Using an inline function\n * The `transition` animation method also supports reading an inline function which can decide\n * if its associated animation should be run.\n *\n * ```typescript\n * // this method is run each time the `myAnimationTrigger` trigger value changes.\n * function myInlineMatcherFn(fromState: string, toState: string, element: any, params: {[key:\n string]: any}): boolean {\n * // notice that `element` and `params` are also available here\n * return toState == 'yes-please-animate';\n * }\n *\n * @Component({\n * selector: 'my-component',\n * templateUrl: 'my-component-tpl.html',\n * animations: [\n * trigger('myAnimationTrigger', [\n * transition(myInlineMatcherFn, [\n * // the animation sequence code\n * ]),\n * ])\n * ]\n * })\n * class MyComponent {\n * myStatusExp = \"yes-please-animate\";\n * }\n * ```\n *\n * ### Disabling Animations\n * When true, the special animation control binding `@.disabled` binding prevents\n * all animations from rendering.\n * Place the `@.disabled` binding on an element to disable\n * animations on the element itself, as well as any inner animation triggers\n * within the element.\n *\n * The following example shows how to use this feature:\n *\n * ```typescript\n * @Component({\n * selector: 'my-component',\n * template: `\n *
\n * `,\n * animations: [\n * trigger(\"childAnimation\", [\n * // ...\n * ])\n * ]\n * })\n * class MyComponent {\n * isDisabled = true;\n * exp = '...';\n * }\n * ```\n *\n * When `@.disabled` is true, it prevents the `@childAnimation` trigger from animating,\n * along with any inner animations.\n *\n * ### Disable animations application-wide\n * When an area of the template is set to have animations disabled,\n * **all** inner components have their animations disabled as well.\n * This means that you can disable all animations for an app\n * by placing a host binding set on `@.disabled` on the topmost Angular component.\n *\n * ```typescript\n * import {Component, HostBinding} from '@angular/core';\n *\n * @Component({\n * selector: 'app-component',\n * templateUrl: 'app.component.html',\n * })\n * class AppComponent {\n * @HostBinding('@.disabled')\n * public animationsDisabled = true;\n * }\n * ```\n *\n * ### Overriding disablement of inner animations\n * Despite inner animations being disabled, a parent animation can `query()`\n * for inner elements located in disabled areas of the template and still animate\n * them if needed. This is also the case for when a sub animation is\n * queried by a parent and then later animated using `animateChild()`.\n *\n * ### Detecting when an animation is disabled\n * If a region of the DOM (or the entire application) has its animations disabled, the animation\n * trigger callbacks still fire, but for zero seconds. When the callback fires, it provides\n * an instance of an `AnimationEvent`. If animations are disabled,\n * the `.disabled` flag on the event is true.\n *\n * @publicApi\n */\nfunction trigger(name, definitions) {\n return {\n type: AnimationMetadataType.Trigger,\n name,\n definitions,\n options: {}\n };\n}\n/**\n * Defines an animation step that combines styling information with timing information.\n *\n * @param timings Sets `AnimateTimings` for the parent animation.\n * A string in the format \"duration [delay] [easing]\".\n * - Duration and delay are expressed as a number and optional time unit,\n * such as \"1s\" or \"10ms\" for one second and 10 milliseconds, respectively.\n * The default unit is milliseconds.\n * - The easing value controls how the animation accelerates and decelerates\n * during its runtime. Value is one of `ease`, `ease-in`, `ease-out`,\n * `ease-in-out`, or a `cubic-bezier()` function call.\n * If not supplied, no easing is applied.\n *\n * For example, the string \"1s 100ms ease-out\" specifies a duration of\n * 1000 milliseconds, and delay of 100 ms, and the \"ease-out\" easing style,\n * which decelerates near the end of the duration.\n * @param styles Sets AnimationStyles for the parent animation.\n * A function call to either `style()` or `keyframes()`\n * that returns a collection of CSS style entries to be applied to the parent animation.\n * When null, uses the styles from the destination state.\n * This is useful when describing an animation step that will complete an animation;\n * see \"Animating to the final state\" in `transitions()`.\n * @returns An object that encapsulates the animation step.\n *\n * @usageNotes\n * Call within an animation `sequence()`, `{@link animations/group group()}`, or\n * `transition()` call to specify an animation step\n * that applies given style data to the parent animation for a given amount of time.\n *\n * ### Syntax Examples\n * **Timing examples**\n *\n * The following examples show various `timings` specifications.\n * - `animate(500)` : Duration is 500 milliseconds.\n * - `animate(\"1s\")` : Duration is 1000 milliseconds.\n * - `animate(\"100ms 0.5s\")` : Duration is 100 milliseconds, delay is 500 milliseconds.\n * - `animate(\"5s ease-in\")` : Duration is 5000 milliseconds, easing in.\n * - `animate(\"5s 10ms cubic-bezier(.17,.67,.88,.1)\")` : Duration is 5000 milliseconds, delay is 10\n * milliseconds, easing according to a bezier curve.\n *\n * **Style examples**\n *\n * The following example calls `style()` to set a single CSS style.\n * ```typescript\n * animate(500, style({ background: \"red\" }))\n * ```\n * The following example calls `keyframes()` to set a CSS style\n * to different values for successive keyframes.\n * ```typescript\n * animate(500, keyframes(\n * [\n * style({ background: \"blue\" }),\n * style({ background: \"red\" })\n * ])\n * ```\n *\n * @publicApi\n */\nfunction animate(timings, styles = null) {\n return {\n type: AnimationMetadataType.Animate,\n styles,\n timings\n };\n}\n/**\n * @description Defines a list of animation steps to be run in parallel.\n *\n * @param steps An array of animation step objects.\n * - When steps are defined by `style()` or `animate()`\n * function calls, each call within the group is executed instantly.\n * - To specify offset styles to be applied at a later time, define steps with\n * `keyframes()`, or use `animate()` calls with a delay value.\n * For example:\n *\n * ```typescript\n * group([\n * animate(\"1s\", style({ background: \"black\" })),\n * animate(\"2s\", style({ color: \"white\" }))\n * ])\n * ```\n *\n * @param options An options object containing a delay and\n * developer-defined parameters that provide styling defaults and\n * can be overridden on invocation.\n *\n * @return An object that encapsulates the group data.\n *\n * @usageNotes\n * Grouped animations are useful when a series of styles must be\n * animated at different starting times and closed off at different ending times.\n *\n * When called within a `sequence()` or a\n * `transition()` call, does not continue to the next\n * instruction until all of the inner animation steps have completed.\n *\n * @publicApi\n */\nfunction group(steps, options = null) {\n return {\n type: AnimationMetadataType.Group,\n steps,\n options\n };\n}\n/**\n * Defines a list of animation steps to be run sequentially, one by one.\n *\n * @param steps An array of animation step objects.\n * - Steps defined by `style()` calls apply the styling data immediately.\n * - Steps defined by `animate()` calls apply the styling data over time\n * as specified by the timing data.\n *\n * ```typescript\n * sequence([\n * style({ opacity: 0 }),\n * animate(\"1s\", style({ opacity: 1 }))\n * ])\n * ```\n *\n * @param options An options object containing a delay and\n * developer-defined parameters that provide styling defaults and\n * can be overridden on invocation.\n *\n * @return An object that encapsulates the sequence data.\n *\n * @usageNotes\n * When you pass an array of steps to a\n * `transition()` call, the steps run sequentially by default.\n * Compare this to the `{@link animations/group group()}` call, which runs animation steps in\n *parallel.\n *\n * When a sequence is used within a `{@link animations/group group()}` or a `transition()` call,\n * execution continues to the next instruction only after each of the inner animation\n * steps have completed.\n *\n * @publicApi\n **/\nfunction sequence(steps, options = null) {\n return {\n type: AnimationMetadataType.Sequence,\n steps,\n options\n };\n}\n/**\n * Declares a key/value object containing CSS properties/styles that\n * can then be used for an animation [`state`](api/animations/state), within an animation\n *`sequence`, or as styling data for calls to `animate()` and `keyframes()`.\n *\n * @param tokens A set of CSS styles or HTML styles associated with an animation state.\n * The value can be any of the following:\n * - A key-value style pair associating a CSS property with a value.\n * - An array of key-value style pairs.\n * - An asterisk (*), to use auto-styling, where styles are derived from the element\n * being animated and applied to the animation when it starts.\n *\n * Auto-styling can be used to define a state that depends on layout or other\n * environmental factors.\n *\n * @return An object that encapsulates the style data.\n *\n * @usageNotes\n * The following examples create animation styles that collect a set of\n * CSS property values:\n *\n * ```typescript\n * // string values for CSS properties\n * style({ background: \"red\", color: \"blue\" })\n *\n * // numerical pixel values\n * style({ width: 100, height: 0 })\n * ```\n *\n * The following example uses auto-styling to allow an element to animate from\n * a height of 0 up to its full height:\n *\n * ```\n * style({ height: 0 }),\n * animate(\"1s\", style({ height: \"*\" }))\n * ```\n *\n * @publicApi\n **/\nfunction style(tokens) {\n return {\n type: AnimationMetadataType.Style,\n styles: tokens,\n offset: null\n };\n}\n/**\n * Declares an animation state within a trigger attached to an element.\n *\n * @param name One or more names for the defined state in a comma-separated string.\n * The following reserved state names can be supplied to define a style for specific use\n * cases:\n *\n * - `void` You can associate styles with this name to be used when\n * the element is detached from the application. For example, when an `ngIf` evaluates\n * to false, the state of the associated element is void.\n * - `*` (asterisk) Indicates the default state. You can associate styles with this name\n * to be used as the fallback when the state that is being animated is not declared\n * within the trigger.\n *\n * @param styles A set of CSS styles associated with this state, created using the\n * `style()` function.\n * This set of styles persists on the element once the state has been reached.\n * @param options Parameters that can be passed to the state when it is invoked.\n * 0 or more key-value pairs.\n * @return An object that encapsulates the new state data.\n *\n * @usageNotes\n * Use the `trigger()` function to register states to an animation trigger.\n * Use the `transition()` function to animate between states.\n * When a state is active within a component, its associated styles persist on the element,\n * even when the animation ends.\n *\n * @publicApi\n **/\nfunction state(name, styles, options) {\n return {\n type: AnimationMetadataType.State,\n name,\n styles,\n options\n };\n}\n/**\n * Defines a set of animation styles, associating each style with an optional `offset` value.\n *\n * @param steps A set of animation styles with optional offset data.\n * The optional `offset` value for a style specifies a percentage of the total animation\n * time at which that style is applied.\n * @returns An object that encapsulates the keyframes data.\n *\n * @usageNotes\n * Use with the `animate()` call. Instead of applying animations\n * from the current state\n * to the destination state, keyframes describe how each style entry is applied and at what point\n * within the animation arc.\n * Compare [CSS Keyframe Animations](https://www.w3schools.com/css/css3_animations.asp).\n *\n * ### Usage\n *\n * In the following example, the offset values describe\n * when each `backgroundColor` value is applied. The color is red at the start, and changes to\n * blue when 20% of the total time has elapsed.\n *\n * ```typescript\n * // the provided offset values\n * animate(\"5s\", keyframes([\n * style({ backgroundColor: \"red\", offset: 0 }),\n * style({ backgroundColor: \"blue\", offset: 0.2 }),\n * style({ backgroundColor: \"orange\", offset: 0.3 }),\n * style({ backgroundColor: \"black\", offset: 1 })\n * ]))\n * ```\n *\n * If there are no `offset` values specified in the style entries, the offsets\n * are calculated automatically.\n *\n * ```typescript\n * animate(\"5s\", keyframes([\n * style({ backgroundColor: \"red\" }) // offset = 0\n * style({ backgroundColor: \"blue\" }) // offset = 0.33\n * style({ backgroundColor: \"orange\" }) // offset = 0.66\n * style({ backgroundColor: \"black\" }) // offset = 1\n * ]))\n *```\n\n * @publicApi\n */\nfunction keyframes(steps) {\n return {\n type: AnimationMetadataType.Keyframes,\n steps\n };\n}\n/**\n * Declares an animation transition which is played when a certain specified condition is met.\n *\n * @param stateChangeExpr A string with a specific format or a function that specifies when the\n * animation transition should occur (see [State Change Expression](#state-change-expression)).\n *\n * @param steps One or more animation objects that represent the animation's instructions.\n *\n * @param options An options object that can be used to specify a delay for the animation or provide\n * custom parameters for it.\n *\n * @returns An object that encapsulates the transition data.\n *\n * @usageNotes\n *\n * ### State Change Expression\n *\n * The State Change Expression instructs Angular when to run the transition's animations, it can\n *either be\n * - a string with a specific syntax\n * - or a function that compares the previous and current state (value of the expression bound to\n * the element's trigger) and returns `true` if the transition should occur or `false` otherwise\n *\n * The string format can be:\n * - `fromState => toState`, which indicates that the transition's animations should occur then the\n * expression bound to the trigger's element goes from `fromState` to `toState`\n *\n * _Example:_\n * ```typescript\n * transition('open => closed', animate('.5s ease-out', style({ height: 0 }) ))\n * ```\n *\n * - `fromState <=> toState`, which indicates that the transition's animations should occur then\n * the expression bound to the trigger's element goes from `fromState` to `toState` or vice versa\n *\n * _Example:_\n * ```typescript\n * transition('enabled <=> disabled', animate('1s cubic-bezier(0.8,0.3,0,1)'))\n * ```\n *\n * - `:enter`/`:leave`, which indicates that the transition's animations should occur when the\n * element enters or exists the DOM\n *\n * _Example:_\n * ```typescript\n * transition(':enter', [\n * style({ opacity: 0 }),\n * animate('500ms', style({ opacity: 1 }))\n * ])\n * ```\n *\n * - `:increment`/`:decrement`, which indicates that the transition's animations should occur when\n * the numerical expression bound to the trigger's element has increased in value or decreased\n *\n * _Example:_\n * ```typescript\n * transition(':increment', query('@counter', animateChild()))\n * ```\n *\n * - a sequence of any of the above divided by commas, which indicates that transition's animations\n * should occur whenever one of the state change expressions matches\n *\n * _Example:_\n * ```typescript\n * transition(':increment, * => enabled, :enter', animate('1s ease', keyframes([\n * style({ transform: 'scale(1)', offset: 0}),\n * style({ transform: 'scale(1.1)', offset: 0.7}),\n * style({ transform: 'scale(1)', offset: 1})\n * ]))),\n * ```\n *\n * Also note that in such context:\n * - `void` can be used to indicate the absence of the element\n * - asterisks can be used as wildcards that match any state\n * - (as a consequence of the above, `void => *` is equivalent to `:enter` and `* => void` is\n * equivalent to `:leave`)\n * - `true` and `false` also match expression values of `1` and `0` respectively (but do not match\n * _truthy_ and _falsy_ values)\n *\n *
\n *\n * Be careful about entering end leaving elements as their transitions present a common\n * pitfall for developers.\n *\n * Note that when an element with a trigger enters the DOM its `:enter` transition always\n * gets executed, but its `:leave` transition will not be executed if the element is removed\n * alongside its parent (as it will be removed \"without warning\" before its transition has\n * a chance to be executed, the only way that such transition can occur is if the element\n * is exiting the DOM on its own).\n *\n *\n *
\n *\n * ### Animating to a Final State\n *\n * If the final step in a transition is a call to `animate()` that uses a timing value\n * with no `style` data, that step is automatically considered the final animation arc,\n * for the element to reach the final state, in such case Angular automatically adds or removes\n * CSS styles to ensure that the element is in the correct final state.\n *\n *\n * ### Usage Examples\n *\n * - Transition animations applied based on\n * the trigger's expression value\n *\n * ```html\n *
\n * ...\n *
\n * ```\n *\n * ```typescript\n * trigger(\"myAnimationTrigger\", [\n * ..., // states\n * transition(\"on => off, open => closed\", animate(500)),\n * transition(\"* <=> error\", query('.indicator', animateChild()))\n * ])\n * ```\n *\n * - Transition animations applied based on custom logic dependent\n * on the trigger's expression value and provided parameters\n *\n * ```html\n *
\n * ...\n *
\n * ```\n *\n * ```typescript\n * trigger(\"myAnimationTrigger\", [\n * ..., // states\n * transition(\n * (fromState, toState, _element, params) =>\n * ['firststep', 'laststep'].includes(fromState.toLowerCase())\n * && toState === params?.['target'],\n * animate('1s')\n * )\n * ])\n * ```\n *\n * @publicApi\n **/\nfunction transition(stateChangeExpr, steps, options = null) {\n return {\n type: AnimationMetadataType.Transition,\n expr: stateChangeExpr,\n animation: steps,\n options\n };\n}\n/**\n * Produces a reusable animation that can be invoked in another animation or sequence,\n * by calling the `useAnimation()` function.\n *\n * @param steps One or more animation objects, as returned by the `animate()`\n * or `sequence()` function, that form a transformation from one state to another.\n * A sequence is used by default when you pass an array.\n * @param options An options object that can contain a delay value for the start of the\n * animation, and additional developer-defined parameters.\n * Provided values for additional parameters are used as defaults,\n * and override values can be passed to the caller on invocation.\n * @returns An object that encapsulates the animation data.\n *\n * @usageNotes\n * The following example defines a reusable animation, providing some default parameter\n * values.\n *\n * ```typescript\n * var fadeAnimation = animation([\n * style({ opacity: '{{ start }}' }),\n * animate('{{ time }}',\n * style({ opacity: '{{ end }}'}))\n * ],\n * { params: { time: '1000ms', start: 0, end: 1 }});\n * ```\n *\n * The following invokes the defined animation with a call to `useAnimation()`,\n * passing in override parameter values.\n *\n * ```js\n * useAnimation(fadeAnimation, {\n * params: {\n * time: '2s',\n * start: 1,\n * end: 0\n * }\n * })\n * ```\n *\n * If any of the passed-in parameter values are missing from this call,\n * the default values are used. If one or more parameter values are missing before a step is\n * animated, `useAnimation()` throws an error.\n *\n * @publicApi\n */\nfunction animation(steps, options = null) {\n return {\n type: AnimationMetadataType.Reference,\n animation: steps,\n options\n };\n}\n/**\n * Executes a queried inner animation element within an animation sequence.\n *\n * @param options An options object that can contain a delay value for the start of the\n * animation, and additional override values for developer-defined parameters.\n * @return An object that encapsulates the child animation data.\n *\n * @usageNotes\n * Each time an animation is triggered in Angular, the parent animation\n * has priority and any child animations are blocked. In order\n * for a child animation to run, the parent animation must query each of the elements\n * containing child animations, and run them using this function.\n *\n * Note that this feature is designed to be used with `query()` and it will only work\n * with animations that are assigned using the Angular animation library. CSS keyframes\n * and transitions are not handled by this API.\n *\n * @publicApi\n */\nfunction animateChild(options = null) {\n return {\n type: AnimationMetadataType.AnimateChild,\n options\n };\n}\n/**\n * Starts a reusable animation that is created using the `animation()` function.\n *\n * @param animation The reusable animation to start.\n * @param options An options object that can contain a delay value for the start of\n * the animation, and additional override values for developer-defined parameters.\n * @return An object that contains the animation parameters.\n *\n * @publicApi\n */\nfunction useAnimation(animation, options = null) {\n return {\n type: AnimationMetadataType.AnimateRef,\n animation,\n options\n };\n}\n/**\n * Finds one or more inner elements within the current element that is\n * being animated within a sequence. Use with `animate()`.\n *\n * @param selector The element to query, or a set of elements that contain Angular-specific\n * characteristics, specified with one or more of the following tokens.\n * - `query(\":enter\")` or `query(\":leave\")` : Query for newly inserted/removed elements (not\n * all elements can be queried via these tokens, see\n * [Entering and Leaving Elements](#entering-and-leaving-elements))\n * - `query(\":animating\")` : Query all currently animating elements.\n * - `query(\"@triggerName\")` : Query elements that contain an animation trigger.\n * - `query(\"@*\")` : Query all elements that contain an animation triggers.\n * - `query(\":self\")` : Include the current element into the animation sequence.\n *\n * @param animation One or more animation steps to apply to the queried element or elements.\n * An array is treated as an animation sequence.\n * @param options An options object. Use the 'limit' field to limit the total number of\n * items to collect.\n * @return An object that encapsulates the query data.\n *\n * @usageNotes\n *\n * ### Multiple Tokens\n *\n * Tokens can be merged into a combined query selector string. For example:\n *\n * ```typescript\n * query(':self, .record:enter, .record:leave, @subTrigger', [...])\n * ```\n *\n * The `query()` function collects multiple elements and works internally by using\n * `element.querySelectorAll`. Use the `limit` field of an options object to limit\n * the total number of items to be collected. For example:\n *\n * ```js\n * query('div', [\n * animate(...),\n * animate(...)\n * ], { limit: 1 })\n * ```\n *\n * By default, throws an error when zero items are found. Set the\n * `optional` flag to ignore this error. For example:\n *\n * ```js\n * query('.some-element-that-may-not-be-there', [\n * animate(...),\n * animate(...)\n * ], { optional: true })\n * ```\n *\n * ### Entering and Leaving Elements\n *\n * Not all elements can be queried via the `:enter` and `:leave` tokens, the only ones\n * that can are those that Angular assumes can enter/leave based on their own logic\n * (if their insertion/removal is simply a consequence of that of their parent they\n * should be queried via a different token in their parent's `:enter`/`:leave` transitions).\n *\n * The only elements Angular assumes can enter/leave based on their own logic (thus the only\n * ones that can be queried via the `:enter` and `:leave` tokens) are:\n * - Those inserted dynamically (via `ViewContainerRef`)\n * - Those that have a structural directive (which, under the hood, are a subset of the above ones)\n *\n *
\n *\n * Note that elements will be successfully queried via `:enter`/`:leave` even if their\n * insertion/removal is not done manually via `ViewContainerRef`or caused by their structural\n * directive (e.g. they enter/exit alongside their parent).\n *\n *
\n *\n *
\n *\n * There is an exception to what previously mentioned, besides elements entering/leaving based on\n * their own logic, elements with an animation trigger can always be queried via `:leave` when\n * their parent is also leaving.\n *\n *
\n *\n * ### Usage Example\n *\n * The following example queries for inner elements and animates them\n * individually using `animate()`.\n *\n * ```typescript\n * @Component({\n * selector: 'inner',\n * template: `\n *
\n *
Title \n *
\n * Blah blah blah\n *
\n *
\n * `,\n * animations: [\n * trigger('queryAnimation', [\n * transition('* => goAnimate', [\n * // hide the inner elements\n * query('h1', style({ opacity: 0 })),\n * query('.content', style({ opacity: 0 })),\n *\n * // animate the inner elements in, one by one\n * query('h1', animate(1000, style({ opacity: 1 }))),\n * query('.content', animate(1000, style({ opacity: 1 }))),\n * ])\n * ])\n * ]\n * })\n * class Cmp {\n * exp = '';\n *\n * goAnimate() {\n * this.exp = 'goAnimate';\n * }\n * }\n * ```\n *\n * @publicApi\n */\nfunction query(selector, animation, options = null) {\n return {\n type: AnimationMetadataType.Query,\n selector,\n animation,\n options\n };\n}\n/**\n * Use within an animation `query()` call to issue a timing gap after\n * each queried item is animated.\n *\n * @param timings A delay value.\n * @param animation One ore more animation steps.\n * @returns An object that encapsulates the stagger data.\n *\n * @usageNotes\n * In the following example, a container element wraps a list of items stamped out\n * by an `ngFor`. The container element contains an animation trigger that will later be set\n * to query for each of the inner items.\n *\n * Each time items are added, the opacity fade-in animation runs,\n * and each removed item is faded out.\n * When either of these animations occur, the stagger effect is\n * applied after each item's animation is started.\n *\n * ```html\n * \n *
Show / Hide Items \n *
\n *
\n *
\n * {{ item }}\n *
\n *
\n * ```\n *\n * Here is the component code:\n *\n * ```typescript\n * import {trigger, transition, style, animate, query, stagger} from '@angular/animations';\n * @Component({\n * templateUrl: 'list.component.html',\n * animations: [\n * trigger('listAnimation', [\n * ...\n * ])\n * ]\n * })\n * class ListComponent {\n * items = [];\n *\n * showItems() {\n * this.items = [0,1,2,3,4];\n * }\n *\n * hideItems() {\n * this.items = [];\n * }\n *\n * toggle() {\n * this.items.length ? this.hideItems() : this.showItems();\n * }\n * }\n * ```\n *\n * Here is the animation trigger code:\n *\n * ```typescript\n * trigger('listAnimation', [\n * transition('* => *', [ // each time the binding value changes\n * query(':leave', [\n * stagger(100, [\n * animate('0.5s', style({ opacity: 0 }))\n * ])\n * ]),\n * query(':enter', [\n * style({ opacity: 0 }),\n * stagger(100, [\n * animate('0.5s', style({ opacity: 1 }))\n * ])\n * ])\n * ])\n * ])\n * ```\n *\n * @publicApi\n */\nfunction stagger(timings, animation) {\n return {\n type: AnimationMetadataType.Stagger,\n timings,\n animation\n };\n}\n\n/**\n * An injectable service that produces an animation sequence programmatically within an\n * Angular component or directive.\n * Provided by the `BrowserAnimationsModule` or `NoopAnimationsModule`.\n *\n * @usageNotes\n *\n * To use this service, add it to your component or directive as a dependency.\n * The service is instantiated along with your component.\n *\n * Apps do not typically need to create their own animation players, but if you\n * do need to, follow these steps:\n *\n * 1. Use the
[AnimationBuilder.build](api/animations/AnimationBuilder#build)()
method\n * to create a programmatic animation. The method returns an `AnimationFactory` instance.\n *\n * 2. Use the factory object to create an `AnimationPlayer` and attach it to a DOM element.\n *\n * 3. Use the player object to control the animation programmatically.\n *\n * For example:\n *\n * ```ts\n * // import the service from BrowserAnimationsModule\n * import {AnimationBuilder} from '@angular/animations';\n * // require the service as a dependency\n * class MyCmp {\n * constructor(private _builder: AnimationBuilder) {}\n *\n * makeAnimation(element: any) {\n * // first define a reusable animation\n * const myAnimation = this._builder.build([\n * style({ width: 0 }),\n * animate(1000, style({ width: '100px' }))\n * ]);\n *\n * // use the returned factory object to create a player\n * const player = myAnimation.create(element);\n *\n * player.play();\n * }\n * }\n * ```\n *\n * @publicApi\n */\nlet AnimationBuilder = /*#__PURE__*/(() => {\n class AnimationBuilder {\n static {\n this.ɵfac = function AnimationBuilder_Factory(ɵt) {\n return new (ɵt || AnimationBuilder)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AnimationBuilder,\n factory: () => (() => inject(BrowserAnimationBuilder))(),\n providedIn: 'root'\n });\n }\n }\n return AnimationBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A factory object returned from the\n *
[AnimationBuilder.build](api/animations/AnimationBuilder#build)()
\n * method.\n *\n * @publicApi\n */\nclass AnimationFactory {}\nlet BrowserAnimationBuilder = /*#__PURE__*/(() => {\n class BrowserAnimationBuilder extends AnimationBuilder {\n constructor(rootRenderer, doc) {\n super();\n this.animationModuleType = inject(ANIMATION_MODULE_TYPE, {\n optional: true\n });\n this._nextAnimationId = 0;\n const typeData = {\n id: '0',\n encapsulation: ViewEncapsulation.None,\n styles: [],\n data: {\n animation: []\n }\n };\n this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n if (this.animationModuleType === null && !isAnimationRenderer(this._renderer)) {\n // We only support AnimationRenderer & DynamicDelegationRenderer for this AnimationBuilder\n throw new ɵRuntimeError(3600 /* RuntimeErrorCode.BROWSER_ANIMATION_BUILDER_INJECTED_WITHOUT_ANIMATIONS */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Angular detected that the `AnimationBuilder` was injected, but animation support was not enabled. ' + 'Please make sure that you enable animations in your application by calling `provideAnimations()` or `provideAnimationsAsync()` function.');\n }\n }\n build(animation) {\n const id = this._nextAnimationId;\n this._nextAnimationId++;\n const entry = Array.isArray(animation) ? sequence(animation) : animation;\n issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n return new BrowserAnimationFactory(id, this._renderer);\n }\n static {\n this.ɵfac = function BrowserAnimationBuilder_Factory(ɵt) {\n return new (ɵt || BrowserAnimationBuilder)(i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(DOCUMENT));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BrowserAnimationBuilder,\n factory: BrowserAnimationBuilder.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return BrowserAnimationBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass BrowserAnimationFactory extends AnimationFactory {\n constructor(_id, _renderer) {\n super();\n this._id = _id;\n this._renderer = _renderer;\n }\n create(element, options) {\n return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n }\n}\nclass RendererAnimationPlayer {\n constructor(id, element, options, _renderer) {\n this.id = id;\n this.element = element;\n this._renderer = _renderer;\n this.parentPlayer = null;\n this._started = false;\n this.totalTime = 0;\n this._command('create', options);\n }\n _listen(eventName, callback) {\n return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n }\n _command(command, ...args) {\n issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n }\n onDone(fn) {\n this._listen('done', fn);\n }\n onStart(fn) {\n this._listen('start', fn);\n }\n onDestroy(fn) {\n this._listen('destroy', fn);\n }\n init() {\n this._command('init');\n }\n hasStarted() {\n return this._started;\n }\n play() {\n this._command('play');\n this._started = true;\n }\n pause() {\n this._command('pause');\n }\n restart() {\n this._command('restart');\n }\n finish() {\n this._command('finish');\n }\n destroy() {\n this._command('destroy');\n }\n reset() {\n this._command('reset');\n this._started = false;\n }\n setPosition(p) {\n this._command('setPosition', p);\n }\n getPosition() {\n return unwrapAnimationRenderer(this._renderer)?.engine?.players[this.id]?.getPosition() ?? 0;\n }\n}\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n/**\n * The following 2 methods cannot reference their correct types (AnimationRenderer &\n * DynamicDelegationRenderer) since this would introduce a import cycle.\n */\nfunction unwrapAnimationRenderer(renderer) {\n const type = renderer.ɵtype;\n if (type === 0 /* AnimationRendererType.Regular */) {\n return renderer;\n } else if (type === 1 /* AnimationRendererType.Delegated */) {\n return renderer.animationRenderer;\n }\n return null;\n}\nfunction isAnimationRenderer(renderer) {\n const type = renderer.ɵtype;\n return type === 0 /* AnimationRendererType.Regular */ || type === 1 /* AnimationRendererType.Delegated */;\n}\n\n/**\n * An empty programmatic controller for reusable animations.\n * Used internally when animations are disabled, to avoid\n * checking for the null case when an animation player is expected.\n *\n * @see {@link animate}\n * @see {@link AnimationPlayer}\n *\n * @publicApi\n */\nclass NoopAnimationPlayer {\n constructor(duration = 0, delay = 0) {\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._originalOnDoneFns = [];\n this._originalOnStartFns = [];\n this._started = false;\n this._destroyed = false;\n this._finished = false;\n this._position = 0;\n this.parentPlayer = null;\n this.totalTime = duration + delay;\n }\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach(fn => fn());\n this._onDoneFns = [];\n }\n }\n onStart(fn) {\n this._originalOnStartFns.push(fn);\n this._onStartFns.push(fn);\n }\n onDone(fn) {\n this._originalOnDoneFns.push(fn);\n this._onDoneFns.push(fn);\n }\n onDestroy(fn) {\n this._onDestroyFns.push(fn);\n }\n hasStarted() {\n return this._started;\n }\n init() {}\n play() {\n if (!this.hasStarted()) {\n this._onStart();\n this.triggerMicrotask();\n }\n this._started = true;\n }\n /** @internal */\n triggerMicrotask() {\n queueMicrotask(() => this._onFinish());\n }\n _onStart() {\n this._onStartFns.forEach(fn => fn());\n this._onStartFns = [];\n }\n pause() {}\n restart() {}\n finish() {\n this._onFinish();\n }\n destroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n if (!this.hasStarted()) {\n this._onStart();\n }\n this.finish();\n this._onDestroyFns.forEach(fn => fn());\n this._onDestroyFns = [];\n }\n }\n reset() {\n this._started = false;\n this._finished = false;\n this._onStartFns = this._originalOnStartFns;\n this._onDoneFns = this._originalOnDoneFns;\n }\n setPosition(position) {\n this._position = this.totalTime ? position * this.totalTime : 1;\n }\n getPosition() {\n return this.totalTime ? this._position / this.totalTime : 1;\n }\n /** @internal */\n triggerCallback(phaseName) {\n const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach(fn => fn());\n methods.length = 0;\n }\n}\n\n/**\n * A programmatic controller for a group of reusable animations.\n * Used internally to control animations.\n *\n * @see {@link AnimationPlayer}\n * @see {@link animations/group group}\n *\n */\nclass AnimationGroupPlayer {\n constructor(_players) {\n this._onDoneFns = [];\n this._onStartFns = [];\n this._finished = false;\n this._started = false;\n this._destroyed = false;\n this._onDestroyFns = [];\n this.parentPlayer = null;\n this.totalTime = 0;\n this.players = _players;\n let doneCount = 0;\n let destroyCount = 0;\n let startCount = 0;\n const total = this.players.length;\n if (total == 0) {\n queueMicrotask(() => this._onFinish());\n } else {\n this.players.forEach(player => {\n player.onDone(() => {\n if (++doneCount == total) {\n this._onFinish();\n }\n });\n player.onDestroy(() => {\n if (++destroyCount == total) {\n this._onDestroy();\n }\n });\n player.onStart(() => {\n if (++startCount == total) {\n this._onStart();\n }\n });\n });\n }\n this.totalTime = this.players.reduce((time, player) => Math.max(time, player.totalTime), 0);\n }\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach(fn => fn());\n this._onDoneFns = [];\n }\n }\n init() {\n this.players.forEach(player => player.init());\n }\n onStart(fn) {\n this._onStartFns.push(fn);\n }\n _onStart() {\n if (!this.hasStarted()) {\n this._started = true;\n this._onStartFns.forEach(fn => fn());\n this._onStartFns = [];\n }\n }\n onDone(fn) {\n this._onDoneFns.push(fn);\n }\n onDestroy(fn) {\n this._onDestroyFns.push(fn);\n }\n hasStarted() {\n return this._started;\n }\n play() {\n if (!this.parentPlayer) {\n this.init();\n }\n this._onStart();\n this.players.forEach(player => player.play());\n }\n pause() {\n this.players.forEach(player => player.pause());\n }\n restart() {\n this.players.forEach(player => player.restart());\n }\n finish() {\n this._onFinish();\n this.players.forEach(player => player.finish());\n }\n destroy() {\n this._onDestroy();\n }\n _onDestroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n this._onFinish();\n this.players.forEach(player => player.destroy());\n this._onDestroyFns.forEach(fn => fn());\n this._onDestroyFns = [];\n }\n }\n reset() {\n this.players.forEach(player => player.reset());\n this._destroyed = false;\n this._finished = false;\n this._started = false;\n }\n setPosition(p) {\n const timeAtPosition = p * this.totalTime;\n this.players.forEach(player => {\n const position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;\n player.setPosition(position);\n });\n }\n getPosition() {\n const longestPlayer = this.players.reduce((longestSoFar, player) => {\n const newPlayerIsLongest = longestSoFar === null || player.totalTime > longestSoFar.totalTime;\n return newPlayerIsLongest ? player : longestSoFar;\n }, null);\n return longestPlayer != null ? longestPlayer.getPosition() : 0;\n }\n beforeDestroy() {\n this.players.forEach(player => {\n if (player.beforeDestroy) {\n player.beforeDestroy();\n }\n });\n }\n /** @internal */\n triggerCallback(phaseName) {\n const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach(fn => fn());\n methods.length = 0;\n }\n}\nconst ɵPRE_STYLE = '!';\n\n/**\n * @module\n * @description\n * Entry point for all animation APIs of the animation package.\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AUTO_STYLE, AnimationBuilder, AnimationFactory, AnimationMetadataType, NoopAnimationPlayer, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, AnimationGroupPlayer as ɵAnimationGroupPlayer, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, ɵPRE_STYLE };\n","import * as i1$1 from '@angular/cdk/overlay';\nimport { Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport * as i2 from '@angular/common';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, ANIMATION_MODULE_TYPE, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, InjectionToken, inject, Injectable, SkipSelf, Directive, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/a11y';\nimport { CdkDialogContainer, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport { Subject, merge, defer } from 'rxjs';\nimport { filter, take, startWith } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i3 from '@angular/cdk/scrolling';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { MatCommonModule } from '@angular/material/core';\nimport { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nfunction MatDialogContainer_ng_template_2_Template(rf, ctx) {}\nclass MatDialogConfig {\n constructor() {\n /** The ARIA role of the dialog element. */\n this.role = 'dialog';\n /** Custom class for the overlay pane. */\n this.panelClass = '';\n /** Whether the dialog has a backdrop. */\n this.hasBackdrop = true;\n /** Custom class for the backdrop. */\n this.backdropClass = '';\n /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n this.disableClose = false;\n /** Width of the dialog. */\n this.width = '';\n /** Height of the dialog. */\n this.height = '';\n /** Data being injected into the child component. */\n this.data = null;\n /** ID of the element that describes the dialog. */\n this.ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n this.ariaLabelledBy = null;\n /** Aria label to assign to the dialog element. */\n this.ariaLabel = null;\n /** Whether this is a modal dialog. Used to set the `aria-modal` attribute. */\n this.ariaModal = true;\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n this.autoFocus = 'first-tabbable';\n /**\n * Whether the dialog should restore focus to the\n * previously-focused element, after it's closed.\n */\n this.restoreFocus = true;\n /** Whether to wait for the opening animation to finish before trapping focus. */\n this.delayFocusTrap = true;\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.closeOnNavigation = true;\n // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\n }\n}\n\n/** Class added when the dialog is open. */\nconst OPEN_CLASS = 'mdc-dialog--open';\n/** Class added while the dialog is opening. */\nconst OPENING_CLASS = 'mdc-dialog--opening';\n/** Class added while the dialog is closing. */\nconst CLOSING_CLASS = 'mdc-dialog--closing';\n/** Duration of the opening animation in milliseconds. */\nconst OPEN_ANIMATION_DURATION = 150;\n/** Duration of the closing animation in milliseconds. */\nconst CLOSE_ANIMATION_DURATION = 75;\nlet MatDialogContainer = /*#__PURE__*/(() => {\n class MatDialogContainer extends CdkDialogContainer {\n constructor(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, _animationMode, focusMonitor) {\n super(elementRef, focusTrapFactory, _document, dialogConfig, interactivityChecker, ngZone, overlayRef, focusMonitor);\n this._animationMode = _animationMode;\n /** Emits when an animation state changes. */\n this._animationStateChanged = new EventEmitter();\n /** Whether animations are enabled. */\n this._animationsEnabled = this._animationMode !== 'NoopAnimations';\n /** Number of actions projected in the dialog. */\n this._actionSectionCount = 0;\n /** Host element of the dialog container component. */\n this._hostElement = this._elementRef.nativeElement;\n /** Duration of the dialog open animation. */\n this._enterAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.enterAnimationDuration) ?? OPEN_ANIMATION_DURATION : 0;\n /** Duration of the dialog close animation. */\n this._exitAnimationDuration = this._animationsEnabled ? parseCssTime(this._config.exitAnimationDuration) ?? CLOSE_ANIMATION_DURATION : 0;\n /** Current timer for dialog animations. */\n this._animationTimer = null;\n /**\n * Completes the dialog open by clearing potential animation classes, trapping\n * focus and emitting an opened event.\n */\n this._finishDialogOpen = () => {\n this._clearAnimationClasses();\n this._openAnimationDone(this._enterAnimationDuration);\n };\n /**\n * Completes the dialog close by clearing potential animation classes, restoring\n * focus and emitting a closed event.\n */\n this._finishDialogClose = () => {\n this._clearAnimationClasses();\n this._animationStateChanged.emit({\n state: 'closed',\n totalTime: this._exitAnimationDuration\n });\n };\n }\n _contentAttached() {\n // Delegate to the original dialog-container initialization (i.e. saving the\n // previous element, setting up the focus trap and moving focus to the container).\n super._contentAttached();\n // Note: Usually we would be able to use the MDC dialog foundation here to handle\n // the dialog animation for us, but there are a few reasons why we just leverage\n // their styles and not use the runtime foundation code:\n // 1. Foundation does not allow us to disable animations.\n // 2. Foundation contains unnecessary features we don't need and aren't\n // tree-shakeable. e.g. background scrim, keyboard event handlers for ESC button.\n this._startOpenAnimation();\n }\n /** Starts the dialog open animation if enabled. */\n _startOpenAnimation() {\n this._animationStateChanged.emit({\n state: 'opening',\n totalTime: this._enterAnimationDuration\n });\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._enterAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n // One would expect that the open class is added once the animation finished, but MDC\n // uses the open class in combination with the opening class to start the animation.\n this._requestAnimationFrame(() => this._hostElement.classList.add(OPENING_CLASS, OPEN_CLASS));\n this._waitForAnimationToComplete(this._enterAnimationDuration, this._finishDialogOpen);\n } else {\n this._hostElement.classList.add(OPEN_CLASS);\n // Note: We could immediately finish the dialog opening here with noop animations,\n // but we defer until next tick so that consumers can subscribe to `afterOpened`.\n // Executing this immediately would mean that `afterOpened` emits synchronously\n // on `dialog.open` before the consumer had a change to subscribe to `afterOpened`.\n Promise.resolve().then(() => this._finishDialogOpen());\n }\n }\n /**\n * Starts the exit animation of the dialog if enabled. This method is\n * called by the dialog ref.\n */\n _startExitAnimation() {\n this._animationStateChanged.emit({\n state: 'closing',\n totalTime: this._exitAnimationDuration\n });\n this._hostElement.classList.remove(OPEN_CLASS);\n if (this._animationsEnabled) {\n this._hostElement.style.setProperty(TRANSITION_DURATION_PROPERTY, `${this._exitAnimationDuration}ms`);\n // We need to give the `setProperty` call from above some time to be applied.\n this._requestAnimationFrame(() => this._hostElement.classList.add(CLOSING_CLASS));\n this._waitForAnimationToComplete(this._exitAnimationDuration, this._finishDialogClose);\n } else {\n // This subscription to the `OverlayRef#backdropClick` observable in the `DialogRef` is\n // set up before any user can subscribe to the backdrop click. The subscription triggers\n // the dialog close and this method synchronously. If we'd synchronously emit the `CLOSED`\n // animation state event if animations are disabled, the overlay would be disposed\n // immediately and all other subscriptions to `DialogRef#backdropClick` would be silently\n // skipped. We work around this by waiting with the dialog close until the next tick when\n // all subscriptions have been fired as expected. This is not an ideal solution, but\n // there doesn't seem to be any other good way. Alternatives that have been considered:\n // 1. Deferring `DialogRef.close`. This could be a breaking change due to a new microtask.\n // Also this issue is specific to the MDC implementation where the dialog could\n // technically be closed synchronously. In the non-MDC one, Angular animations are used\n // and closing always takes at least a tick.\n // 2. Ensuring that user subscriptions to `backdropClick`, `keydownEvents` in the dialog\n // ref are first. This would solve the issue, but has the risk of memory leaks and also\n // doesn't solve the case where consumers call `DialogRef.close` in their subscriptions.\n // Based on the fact that this is specific to the MDC-based implementation of the dialog\n // animations, the defer is applied here.\n Promise.resolve().then(() => this._finishDialogClose());\n }\n }\n /**\n * Updates the number action sections.\n * @param delta Increase/decrease in the number of sections.\n */\n _updateActionSectionCount(delta) {\n this._actionSectionCount += delta;\n this._changeDetectorRef.markForCheck();\n }\n /** Clears all dialog animation classes. */\n _clearAnimationClasses() {\n this._hostElement.classList.remove(OPENING_CLASS, CLOSING_CLASS);\n }\n _waitForAnimationToComplete(duration, callback) {\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n // Note that we want this timer to run inside the NgZone, because we want\n // the related events like `afterClosed` to be inside the zone as well.\n this._animationTimer = setTimeout(callback, duration);\n }\n /** Runs a callback in `requestAnimationFrame`, if available. */\n _requestAnimationFrame(callback) {\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(callback);\n } else {\n callback();\n }\n });\n }\n _captureInitialFocus() {\n if (!this._config.delayFocusTrap) {\n this._trapFocus();\n }\n }\n /**\n * Callback for when the open dialog animation has finished. Intended to\n * be called by sub-classes that use different animation implementations.\n */\n _openAnimationDone(totalTime) {\n if (this._config.delayFocusTrap) {\n this._trapFocus();\n }\n this._animationStateChanged.next({\n state: 'opened',\n totalTime\n });\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._animationTimer !== null) {\n clearTimeout(this._animationTimer);\n }\n }\n attachComponentPortal(portal) {\n // When a component is passed into the dialog, the host element interrupts\n // the `display:flex` from affecting the dialog title, content, and\n // actions. To fix this, we make the component host `display: contents` by\n // marking its host with the `mat-mdc-dialog-component-host` class.\n //\n // Note that this problem does not exist when a template ref is used since\n // the title, contents, and actions are then nested directly under the\n // dialog surface.\n const ref = super.attachComponentPortal(portal);\n ref.location.nativeElement.classList.add('mat-mdc-dialog-component-host');\n return ref;\n }\n static {\n this.ɵfac = function MatDialogContainer_Factory(ɵt) {\n return new (ɵt || MatDialogContainer)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.FocusTrapFactory), i0.ɵɵdirectiveInject(DOCUMENT, 8), i0.ɵɵdirectiveInject(MatDialogConfig), i0.ɵɵdirectiveInject(i1.InteractivityChecker), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1$1.OverlayRef), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(i1.FocusMonitor));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDialogContainer,\n selectors: [[\"mat-dialog-container\"]],\n hostAttrs: [\"tabindex\", \"-1\", 1, \"mat-mdc-dialog-container\", \"mdc-dialog\"],\n hostVars: 10,\n hostBindings: function MatDialogContainer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx._config.id);\n i0.ɵɵattribute(\"aria-modal\", ctx._config.ariaModal)(\"role\", ctx._config.role)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledByQueue[0])(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n i0.ɵɵclassProp(\"_mat-animation-noopable\", !ctx._animationsEnabled)(\"mat-mdc-dialog-container-with-actions\", ctx._actionSectionCount > 0);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 0,\n consts: [[1, \"mat-mdc-dialog-inner-container\", \"mdc-dialog__container\"], [1, \"mat-mdc-dialog-surface\", \"mdc-dialog__surface\"], [\"cdkPortalOutlet\", \"\"]],\n template: function MatDialogContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵtemplate(2, MatDialogContainer_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n i0.ɵɵelementEnd()();\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-mdc-dialog-container{width:100%;height:100%;display:block;box-sizing:border-box;max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;outline:0}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 80vw);min-width:var(--mat-dialog-container-min-width, 0)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, 80vw)}}.mat-mdc-dialog-inner-container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;transition:opacity linear var(--mat-dialog-transition-duration, 0ms);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mdc-dialog--closing .mat-mdc-dialog-inner-container{transition:opacity 75ms linear;transform:none}.mdc-dialog--open .mat-mdc-dialog-inner-container{opacity:1}._mat-animation-noopable .mat-mdc-dialog-inner-container{transition:none}.mat-mdc-dialog-surface{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;width:100%;height:100%;position:relative;overflow-y:auto;outline:0;transform:scale(0.8);transition:transform var(--mat-dialog-transition-duration, 0ms) cubic-bezier(0, 0, 0.2, 1);max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit;box-shadow:var(--mat-dialog-container-elevation-shadow, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12));border-radius:var(--mdc-dialog-container-shape, 4px);background-color:var(--mdc-dialog-container-color, white)}[dir=rtl] .mat-mdc-dialog-surface{text-align:right}.mdc-dialog--open .mat-mdc-dialog-surface,.mdc-dialog--closing .mat-mdc-dialog-surface{transform:none}._mat-animation-noopable .mat-mdc-dialog-surface{transition:none}.mat-mdc-dialog-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mat-mdc-dialog-title{display:block;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:var(--mat-dialog-headline-padding, 0 24px 9px)}.mat-mdc-dialog-title::before{display:inline-block;width:0;height:40px;content:\\\"\\\";vertical-align:0}[dir=rtl] .mat-mdc-dialog-title{text-align:right}.mat-mdc-dialog-container .mat-mdc-dialog-title{color:var(--mdc-dialog-subhead-color, rgba(0, 0, 0, 0.87));font-family:var(--mdc-dialog-subhead-font, inherit);line-height:var(--mdc-dialog-subhead-line-height, 1.5rem);font-size:var(--mdc-dialog-subhead-size, 1rem);font-weight:var(--mdc-dialog-subhead-weight, 400);letter-spacing:var(--mdc-dialog-subhead-tracking, 0.03125em)}.mat-mdc-dialog-content{display:block;flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;max-height:65vh}.mat-mdc-dialog-content>:first-child{margin-top:0}.mat-mdc-dialog-content>:last-child{margin-bottom:0}.mat-mdc-dialog-container .mat-mdc-dialog-content{color:var(--mdc-dialog-supporting-text-color, rgba(0, 0, 0, 0.6));font-family:var(--mdc-dialog-supporting-text-font, inherit);line-height:var(--mdc-dialog-supporting-text-line-height, 1.5rem);font-size:var(--mdc-dialog-supporting-text-size, 1rem);font-weight:var(--mdc-dialog-supporting-text-weight, 400);letter-spacing:var(--mdc-dialog-supporting-text-tracking, 0.03125em)}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid rgba(0,0,0,0);padding:var(--mat-dialog-actions-padding, 8px);justify-content:var(--mat-dialog-actions-alignment, start)}.cdk-high-contrast-active .mat-mdc-dialog-actions{border-top-color:CanvasText}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}.mat-mdc-dialog-component-host{display:contents}\"],\n encapsulation: 2\n });\n }\n }\n return MatDialogContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst TRANSITION_DURATION_PROPERTY = '--mat-dialog-transition-duration';\n// TODO(mmalerba): Remove this function after animation durations are required\n// to be numbers.\n/**\n * Converts a CSS time string to a number in ms. If the given time is already a\n * number, it is assumed to be in ms.\n */\nfunction parseCssTime(time) {\n if (time == null) {\n return null;\n }\n if (typeof time === 'number') {\n return time;\n }\n if (time.endsWith('ms')) {\n return coerceNumberProperty(time.substring(0, time.length - 2));\n }\n if (time.endsWith('s')) {\n return coerceNumberProperty(time.substring(0, time.length - 1)) * 1000;\n }\n if (time === '0') {\n return 0;\n }\n return null; // anything else is invalid.\n}\nvar MatDialogState = /*#__PURE__*/function (MatDialogState) {\n MatDialogState[MatDialogState[\"OPEN\"] = 0] = \"OPEN\";\n MatDialogState[MatDialogState[\"CLOSING\"] = 1] = \"CLOSING\";\n MatDialogState[MatDialogState[\"CLOSED\"] = 2] = \"CLOSED\";\n return MatDialogState;\n}(MatDialogState || {});\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nclass MatDialogRef {\n constructor(_ref, config, _containerInstance) {\n this._ref = _ref;\n this._containerInstance = _containerInstance;\n /** Subject for notifying the user that the dialog has finished opening. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the dialog has started closing. */\n this._beforeClosed = new Subject();\n /** Current state of the dialog. */\n this._state = MatDialogState.OPEN;\n this.disableClose = config.disableClose;\n this.id = _ref.id;\n // Used to target panels specifically tied to dialogs.\n _ref.addPanelClass('mat-mdc-dialog-panel');\n // Emit when opening animation completes\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'opened'), take(1)).subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n // Dispose overlay when closing animation is complete\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closed'), take(1)).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._finishDialogClose();\n });\n _ref.overlayRef.detachments().subscribe(() => {\n this._beforeClosed.next(this._result);\n this._beforeClosed.complete();\n this._finishDialogClose();\n });\n merge(this.backdropClick(), this.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)))).subscribe(event => {\n if (!this.disableClose) {\n event.preventDefault();\n _closeDialogVia(this, event.type === 'keydown' ? 'keyboard' : 'mouse');\n }\n });\n }\n /**\n * Close the dialog.\n * @param dialogResult Optional result to return to the dialog opener.\n */\n close(dialogResult) {\n this._result = dialogResult;\n // Transition the backdrop in parallel to the dialog.\n this._containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closing'), take(1)).subscribe(event => {\n this._beforeClosed.next(dialogResult);\n this._beforeClosed.complete();\n this._ref.overlayRef.detachBackdrop();\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(), event.totalTime + 100);\n });\n this._state = MatDialogState.CLOSING;\n this._containerInstance._startExitAnimation();\n }\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n */\n afterOpened() {\n return this._afterOpened;\n }\n /**\n * Gets an observable that is notified when the dialog is finished closing.\n */\n afterClosed() {\n return this._ref.closed;\n }\n /**\n * Gets an observable that is notified when the dialog has started closing.\n */\n beforeClosed() {\n return this._beforeClosed;\n }\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._ref.backdropClick;\n }\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._ref.keydownEvents;\n }\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position) {\n let strategy = this._ref.config.positionStrategy;\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n this._ref.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this._ref.updateSize(width, height);\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this._ref.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this._ref.removePanelClass(classes);\n return this;\n }\n /** Gets the current state of the dialog's lifecycle. */\n getState() {\n return this._state;\n }\n /**\n * Finishes the dialog close by updating the state of the dialog\n * and disposing the overlay.\n */\n _finishDialogClose() {\n this._state = MatDialogState.CLOSED;\n this._ref.close(this._result, {\n focusOrigin: this._closeInteractionType\n });\n this.componentInstance = null;\n }\n}\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nfunction _closeDialogVia(ref, interactionType, result) {\n ref._closeInteractionType = interactionType;\n return ref.close(result);\n}\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nconst MAT_DIALOG_DATA = /*#__PURE__*/new InjectionToken('MatMdcDialogData');\n/** Injection token that can be used to specify default dialog options. */\nconst MAT_DIALOG_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-default-options');\n/** Injection token that determines the scroll handling while the dialog is open. */\nconst MAT_DIALOG_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-mdc-dialog-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.block();\n }\n});\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nfunction MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/**\n * @docs-private\n * @deprecated No longer used. To be removed.\n * @breaking-change 19.0.0\n */\nconst MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n/**\n * Service to open Material Design modal dialogs.\n */\nlet MatDialog = /*#__PURE__*/(() => {\n class MatDialog {\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n constructor(_overlay, injector,\n /**\n * @deprecated `_location` parameter to be removed.\n * @breaking-change 10.0.0\n */\n location, _defaultOptions, _scrollStrategy, _parentDialog,\n /**\n * @deprecated No longer used. To be removed.\n * @breaking-change 15.0.0\n */\n _overlayContainer,\n /**\n * @deprecated No longer used. To be removed.\n * @breaking-change 14.0.0\n */\n _animationMode) {\n this._overlay = _overlay;\n this._defaultOptions = _defaultOptions;\n this._scrollStrategy = _scrollStrategy;\n this._parentDialog = _parentDialog;\n this._openDialogsAtThisLevel = [];\n this._afterAllClosedAtThisLevel = new Subject();\n this._afterOpenedAtThisLevel = new Subject();\n this.dialogConfigClass = MatDialogConfig;\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n this.afterAllClosed = defer(() => this.openDialogs.length ? this._getAfterAllClosed() : this._getAfterAllClosed().pipe(startWith(undefined)));\n this._dialog = injector.get(Dialog);\n this._dialogRefConstructor = MatDialogRef;\n this._dialogContainerType = MatDialogContainer;\n this._dialogDataToken = MAT_DIALOG_DATA;\n }\n open(componentOrTemplateRef, config) {\n let dialogRef;\n config = {\n ...(this._defaultOptions || new MatDialogConfig()),\n ...config\n };\n config.id = config.id || `mat-mdc-dialog-${uniqueId++}`;\n config.scrollStrategy = config.scrollStrategy || this._scrollStrategy();\n const cdkRef = this._dialog.open(componentOrTemplateRef, {\n ...config,\n positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on destroy, because this service cleans up its open dialogs as well.\n // We want to do the cleanup here, rather than the CDK service, because the CDK destroys\n // the dialogs immediately whereas we want it to wait for the animations to finish.\n closeOnDestroy: false,\n // Disable closing on detachments so that we can sync up the animation.\n // The Material dialog ref handles this manually.\n closeOnOverlayDetachments: false,\n container: {\n type: this._dialogContainerType,\n providers: () => [\n // Provide our config as the CDK config as well since it has the same interface as the\n // CDK one, but it contains the actual values passed in by the user for things like\n // `disableClose` which we disable for the CDK dialog since we handle it ourselves.\n {\n provide: this.dialogConfigClass,\n useValue: config\n }, {\n provide: DialogConfig,\n useValue: config\n }]\n },\n templateContext: () => ({\n dialogRef\n }),\n providers: (ref, cdkConfig, dialogContainer) => {\n dialogRef = new this._dialogRefConstructor(ref, config, dialogContainer);\n dialogRef.updatePosition(config?.position);\n return [{\n provide: this._dialogContainerType,\n useValue: dialogContainer\n }, {\n provide: this._dialogDataToken,\n useValue: cdkConfig.data\n }, {\n provide: this._dialogRefConstructor,\n useValue: dialogRef\n }];\n }\n });\n // This can't be assigned in the `providers` callback, because\n // the instance hasn't been assigned to the CDK ref yet.\n dialogRef.componentRef = cdkRef.componentRef;\n dialogRef.componentInstance = cdkRef.componentInstance;\n this.openDialogs.push(dialogRef);\n this.afterOpened.next(dialogRef);\n dialogRef.afterClosed().subscribe(() => {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n if (!this.openDialogs.length) {\n this._getAfterAllClosed().next();\n }\n }\n });\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n this._closeDialogs(this.openDialogs);\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Only close the dialogs at this level on destroy\n // since the parent service may still be active.\n this._closeDialogs(this._openDialogsAtThisLevel);\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n _closeDialogs(dialogs) {\n let i = dialogs.length;\n while (i--) {\n dialogs[i].close();\n }\n }\n static {\n this.ɵfac = function MatDialog_Factory(ɵt) {\n return new (ɵt || MatDialog)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i2.Location, 8), i0.ɵɵinject(MAT_DIALOG_DEFAULT_OPTIONS, 8), i0.ɵɵinject(MAT_DIALOG_SCROLL_STRATEGY), i0.ɵɵinject(MatDialog, 12), i0.ɵɵinject(i1$1.OverlayContainer), i0.ɵɵinject(ANIMATION_MODULE_TYPE, 8));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatDialog,\n factory: MatDialog.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatDialog;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n/**\n * Button that will close the current dialog.\n */\nlet MatDialogClose = /*#__PURE__*/(() => {\n class MatDialogClose {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n dialogRef, _elementRef, _dialog) {\n this.dialogRef = dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n /** Default to \"button\" to prevents accidental form submits. */\n this.type = 'button';\n }\n ngOnInit() {\n if (!this.dialogRef) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the DialogRef isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the DialogRef by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n }\n ngOnChanges(changes) {\n const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\n _onButtonClick(event) {\n // Determinate the focus origin using the click event, because using the FocusMonitor will\n // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n // dialog, and therefore clicking the button won't result in a focus change. This means that\n // the FocusMonitor won't detect any origin change, and will always output `program`.\n _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n }\n static {\n this.ɵfac = function MatDialogClose_Factory(ɵt) {\n return new (ɵt || MatDialogClose)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogClose,\n selectors: [[\"\", \"mat-dialog-close\", \"\"], [\"\", \"matDialogClose\", \"\"]],\n hostVars: 2,\n hostBindings: function MatDialogClose_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDialogClose_click_HostBindingHandler($event) {\n return ctx._onButtonClick($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"type\", ctx.type);\n }\n },\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n type: \"type\",\n dialogResult: [0, \"mat-dialog-close\", \"dialogResult\"],\n _matDialogClose: [0, \"matDialogClose\", \"_matDialogClose\"]\n },\n exportAs: [\"matDialogClose\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return MatDialogClose;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDialogLayoutSection = /*#__PURE__*/(() => {\n class MatDialogLayoutSection {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n _dialogRef, _elementRef, _dialog) {\n this._dialogRef = _dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n }\n ngOnInit() {\n if (!this._dialogRef) {\n this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n if (this._dialogRef) {\n Promise.resolve().then(() => {\n this._onAdd();\n });\n }\n }\n ngOnDestroy() {\n // Note: we null check because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n const instance = this._dialogRef?._containerInstance;\n if (instance) {\n Promise.resolve().then(() => {\n this._onRemove();\n });\n }\n }\n static {\n this.ɵfac = function MatDialogLayoutSection_Factory(ɵt) {\n return new (ɵt || MatDialogLayoutSection)(i0.ɵɵdirectiveInject(MatDialogRef, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MatDialog));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogLayoutSection,\n standalone: true\n });\n }\n }\n return MatDialogLayoutSection;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nlet MatDialogTitle = /*#__PURE__*/(() => {\n class MatDialogTitle extends MatDialogLayoutSection {\n constructor() {\n super(...arguments);\n this.id = `mat-mdc-dialog-title-${dialogElementUid++}`;\n }\n _onAdd() {\n // Note: we null check the queue, because there are some internal\n // tests that are mocking out `MatDialogRef` incorrectly.\n this._dialogRef._containerInstance?._addAriaLabelledBy?.(this.id);\n }\n _onRemove() {\n this._dialogRef?._containerInstance?._removeAriaLabelledBy?.(this.id);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogTitle_BaseFactory;\n return function MatDialogTitle_Factory(ɵt) {\n return (ɵMatDialogTitle_BaseFactory || (ɵMatDialogTitle_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogTitle)))(ɵt || MatDialogTitle);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogTitle,\n selectors: [[\"\", \"mat-dialog-title\", \"\"], [\"\", \"matDialogTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-title\", \"mdc-dialog__title\"],\n hostVars: 1,\n hostBindings: function MatDialogTitle_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: \"id\"\n },\n exportAs: [\"matDialogTitle\"],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDialogTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Scrollable content container of a dialog.\n */\nlet MatDialogContent = /*#__PURE__*/(() => {\n class MatDialogContent {\n static {\n this.ɵfac = function MatDialogContent_Factory(ɵt) {\n return new (ɵt || MatDialogContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogContent,\n selectors: [[\"\", \"mat-dialog-content\", \"\"], [\"mat-dialog-content\"], [\"\", \"matDialogContent\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-content\", \"mdc-dialog__content\"],\n standalone: true,\n features: [i0.ɵɵHostDirectivesFeature([i3.CdkScrollable])]\n });\n }\n }\n return MatDialogContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nlet MatDialogActions = /*#__PURE__*/(() => {\n class MatDialogActions extends MatDialogLayoutSection {\n _onAdd() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(1);\n }\n _onRemove() {\n this._dialogRef._containerInstance?._updateActionSectionCount?.(-1);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDialogActions_BaseFactory;\n return function MatDialogActions_Factory(ɵt) {\n return (ɵMatDialogActions_BaseFactory || (ɵMatDialogActions_BaseFactory = i0.ɵɵgetInheritedFactory(MatDialogActions)))(ɵt || MatDialogActions);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDialogActions,\n selectors: [[\"\", \"mat-dialog-actions\", \"\"], [\"mat-dialog-actions\"], [\"\", \"matDialogActions\", \"\"]],\n hostAttrs: [1, \"mat-mdc-dialog-actions\", \"mdc-dialog__actions\"],\n hostVars: 6,\n hostBindings: function MatDialogActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-dialog-actions-align-start\", ctx.align === \"start\")(\"mat-mdc-dialog-actions-align-center\", ctx.align === \"center\")(\"mat-mdc-dialog-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDialogActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element, openDialogs) {\n let parent = element.nativeElement.parentElement;\n while (parent && !parent.classList.contains('mat-mdc-dialog-container')) {\n parent = parent.parentElement;\n }\n return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;\n}\nconst DIRECTIVES = [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent];\nlet MatDialogModule = /*#__PURE__*/(() => {\n class MatDialogModule {\n static {\n this.ɵfac = function MatDialogModule_Factory(ɵt) {\n return new (ɵt || MatDialogModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDialogModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatDialog],\n imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatDialogModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Default parameters for the animation for backwards compatibility.\n * @docs-private\n */\nconst _defaultParams = {\n params: {\n enterAnimationDuration: '150ms',\n exitAnimationDuration: '75ms'\n }\n};\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nconst matDialogAnimations = {\n /** Animation that is applied on the dialog container by default. */\n dialogContainer: /*#__PURE__*/trigger('dialogContainer', [\n /*#__PURE__*/\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues.\n state('void, exit', /*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(0.7)'\n })), /*#__PURE__*/state('enter', /*#__PURE__*/style({\n transform: 'none'\n })), /*#__PURE__*/transition('* => enter', /*#__PURE__*/group([/*#__PURE__*/animate('{{enterAnimationDuration}} cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n transform: 'none',\n opacity: 1\n })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), _defaultParams), /*#__PURE__*/transition('* => void, * => exit', /*#__PURE__*/group([/*#__PURE__*/animate('{{exitAnimationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)', /*#__PURE__*/style({\n opacity: 0\n })), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), _defaultParams)])\n};\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogState, MatDialogTitle, _closeDialogVia, _defaultParams, matDialogAnimations };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from '@angular/material/core';\nlet MatDivider = /*#__PURE__*/(() => {\n class MatDivider {\n constructor() {\n this._vertical = false;\n this._inset = false;\n }\n /** Whether the divider is vertically aligned. */\n get vertical() {\n return this._vertical;\n }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** Whether the divider is an inset divider. */\n get inset() {\n return this._inset;\n }\n set inset(value) {\n this._inset = coerceBooleanProperty(value);\n }\n static {\n this.ɵfac = function MatDivider_Factory(ɵt) {\n return new (ɵt || MatDivider)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDivider,\n selectors: [[\"mat-divider\"]],\n hostAttrs: [\"role\", \"separator\", 1, \"mat-divider\"],\n hostVars: 7,\n hostBindings: function MatDivider_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n i0.ɵɵclassProp(\"mat-divider-vertical\", ctx.vertical)(\"mat-divider-horizontal\", !ctx.vertical)(\"mat-divider-inset\", ctx.inset);\n }\n },\n inputs: {\n vertical: \"vertical\",\n inset: \"inset\"\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function MatDivider_Template(rf, ctx) {},\n styles: [\".mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color);border-top-width:var(--mat-divider-width)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color);border-right-width:var(--mat-divider-width)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDivider;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDividerModule = /*#__PURE__*/(() => {\n class MatDividerModule {\n static {\n this.ɵfac = function MatDividerModule_Factory(ɵt) {\n return new (ɵt || MatDividerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDividerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatDividerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatDivider, MatDividerModule };\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Applies CSS prefixes to appropriate style keys.\n *\n * Note: `-ms-`, `-moz` and `-webkit-box` are no longer supported. e.g.\n * {\n * display: -webkit-flex; NEW - Safari 6.1+. iOS 7.1+, BB10\n * display: flex; NEW, Spec - Firefox, Chrome, Opera\n * // display: -webkit-box; OLD - iOS 6-, Safari 3.1-6, BB7\n * // display: -ms-flexbox; TWEENER - IE 10\n * // display: -moz-flexbox; OLD - Firefox\n * }\n */\nfunction applyCssPrefixes(target) {\n for (let key in target) {\n let value = target[key] ?? '';\n switch (key) {\n case 'display':\n if (value === 'flex') {\n target['display'] = ['-webkit-flex', 'flex'];\n } else if (value === 'inline-flex') {\n target['display'] = ['-webkit-inline-flex', 'inline-flex'];\n } else {\n target['display'] = value;\n }\n break;\n case 'align-items':\n case 'align-self':\n case 'align-content':\n case 'flex':\n case 'flex-basis':\n case 'flex-flow':\n case 'flex-grow':\n case 'flex-shrink':\n case 'flex-wrap':\n case 'justify-content':\n target['-webkit-' + key] = value;\n break;\n case 'flex-direction':\n target['-webkit-flex-direction'] = value;\n target['flex-direction'] = value;\n break;\n case 'order':\n target['order'] = target['-webkit-' + key] = isNaN(+value) ? '0' : value;\n break;\n }\n }\n return target;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst INLINE = 'inline';\nconst LAYOUT_VALUES = ['row', 'column', 'row-reverse', 'column-reverse'];\n/**\n * Validate the direction|'direction wrap' value and then update the host's inline flexbox styles\n */\nfunction buildLayoutCSS(value) {\n let [direction, wrap, isInline] = validateValue(value);\n return buildCSS(direction, wrap, isInline);\n}\n/**\n * Validate the value to be one of the acceptable value options\n * Use default fallback of 'row'\n */\nfunction validateValue(value) {\n value = value?.toLowerCase() ?? '';\n let [direction, wrap, inline] = value.split(' ');\n // First value must be the `flex-direction`\n if (!LAYOUT_VALUES.find(x => x === direction)) {\n direction = LAYOUT_VALUES[0];\n }\n if (wrap === INLINE) {\n wrap = inline !== INLINE ? inline : '';\n inline = INLINE;\n }\n return [direction, validateWrapValue(wrap), !!inline];\n}\n/**\n * Determine if the validated, flex-direction value specifies\n * a horizontal/row flow.\n */\nfunction isFlowHorizontal(value) {\n let [flow] = validateValue(value);\n return flow.indexOf('row') > -1;\n}\n/**\n * Convert layout-wrap='
' to expected flex-wrap style\n */\nfunction validateWrapValue(value) {\n if (!!value) {\n switch (value.toLowerCase()) {\n case 'reverse':\n case 'wrap-reverse':\n case 'reverse-wrap':\n value = 'wrap-reverse';\n break;\n case 'no':\n case 'none':\n case 'nowrap':\n value = 'nowrap';\n break;\n // All other values fallback to 'wrap'\n default:\n value = 'wrap';\n break;\n }\n }\n return value;\n}\n/**\n * Build the CSS that should be assigned to the element instance\n * BUG:\n * 1) min-height on a column flex container won’t apply to its flex item children in IE 10-11.\n * Use height instead if possible; height : vh;\n *\n * This way any padding or border specified on the child elements are\n * laid out and drawn inside that element's specified width and height.\n */\nfunction buildCSS(direction, wrap = null, inline = false) {\n return {\n display: inline ? 'inline-flex' : 'flex',\n 'box-sizing': 'border-box',\n 'flex-direction': direction,\n 'flex-wrap': wrap || null\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n *\n * @param dest The object which will have properties copied to it.\n * @param sources The source objects from which properties will be copied.\n */\nfunction extendObject(dest, ...sources) {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n for (let source of sources) {\n if (source != null) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n return dest;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { INLINE, LAYOUT_VALUES, applyCssPrefixes, buildLayoutCSS, extendObject, isFlowHorizontal, validateValue, validateWrapValue };\n","import * as i0 from '@angular/core';\nimport { APP_BOOTSTRAP_LISTENER, PLATFORM_ID, NgModule, Injectable, InjectionToken, Inject, inject, Directive } from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT, isPlatformServer } from '@angular/common';\nimport { BehaviorSubject, Observable, merge, Subject, asapScheduler, of, fromEvent } from 'rxjs';\nimport { applyCssPrefixes, extendObject, buildLayoutCSS } from '@angular/flex-layout/_private-utils';\nimport { filter, tap, debounceTime, switchMap, map, distinctUntilChanged, takeUntil, take } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Find all of the server-generated stylings, if any, and remove them\n * This will be in the form of inline classes and the style block in the\n * head of the DOM\n */\nfunction removeStyles(_document, platformId) {\n return () => {\n if (isPlatformBrowser(platformId)) {\n const elements = Array.from(_document.querySelectorAll(`[class*=${CLASS_NAME}]`));\n // RegExp constructor should only be used if passing a variable to the constructor.\n // When using static regular expression it is more performant to use reg exp literal.\n // This is also needed to provide Safari 9 compatibility, please see\n // https://stackoverflow.com/questions/37919802 for more discussion.\n const classRegex = /\\bflex-layout-.+?\\b/g;\n elements.forEach(el => {\n el.classList.contains(`${CLASS_NAME}ssr`) && el.parentNode ? el.parentNode.removeChild(el) : el.className.replace(classRegex, '');\n });\n }\n };\n}\n/**\n * Provider to remove SSR styles on the browser\n */\nconst BROWSER_PROVIDER = {\n provide: APP_BOOTSTRAP_LISTENER,\n useFactory: removeStyles,\n deps: [DOCUMENT, PLATFORM_ID],\n multi: true\n};\nconst CLASS_NAME = 'flex-layout-';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * *****************************************************************\n * Define module for common Angular Layout utilities\n * *****************************************************************\n */\nlet CoreModule = /*#__PURE__*/(() => {\n class CoreModule {}\n CoreModule.ɵfac = function CoreModule_Factory(ɵt) {\n return new (ɵt || CoreModule)();\n };\n CoreModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CoreModule\n });\n CoreModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [BROWSER_PROVIDER]\n });\n return CoreModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Class instances emitted [to observers] for each mql notification\n */\nclass MediaChange {\n /**\n * @param matches whether the mediaQuery is currently activated\n * @param mediaQuery e.g. (min-width: 600px) and (max-width: 959px)\n * @param mqAlias e.g. gt-sm, md, gt-lg\n * @param suffix e.g. GtSM, Md, GtLg\n * @param priority the priority of activation for the given breakpoint\n */\n constructor(matches = false, mediaQuery = 'all', mqAlias = '', suffix = '', priority = 0) {\n this.matches = matches;\n this.mediaQuery = mediaQuery;\n this.mqAlias = mqAlias;\n this.suffix = suffix;\n this.priority = priority;\n this.property = '';\n }\n /** Create an exact copy of the MediaChange */\n clone() {\n return new MediaChange(this.matches, this.mediaQuery, this.mqAlias, this.suffix);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Utility to emulate a CSS stylesheet\n *\n * This utility class stores all of the styles for a given HTML element\n * as a readonly `stylesheet` map.\n */\nlet StylesheetMap = /*#__PURE__*/(() => {\n class StylesheetMap {\n constructor() {\n this.stylesheet = new Map();\n }\n /**\n * Add an individual style to an HTML element\n */\n addStyleToElement(element, style, value) {\n const stylesheet = this.stylesheet.get(element);\n if (stylesheet) {\n stylesheet.set(style, value);\n } else {\n this.stylesheet.set(element, new Map([[style, value]]));\n }\n }\n /**\n * Clear the virtual stylesheet\n */\n clearStyles() {\n this.stylesheet.clear();\n }\n /**\n * Retrieve a given style for an HTML element\n */\n getStyleForElement(el, styleName) {\n const styles = this.stylesheet.get(el);\n let value = '';\n if (styles) {\n const style = styles.get(styleName);\n if (typeof style === 'number' || typeof style === 'string') {\n value = style + '';\n }\n }\n return value;\n }\n }\n StylesheetMap.ɵfac = function StylesheetMap_Factory(ɵt) {\n return new (ɵt || StylesheetMap)();\n };\n StylesheetMap.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: StylesheetMap,\n factory: StylesheetMap.ɵfac,\n providedIn: 'root'\n });\n return StylesheetMap;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_CONFIG = {\n addFlexToParent: true,\n addOrientationBps: false,\n disableDefaultBps: false,\n disableVendorPrefixes: false,\n serverLoaded: false,\n useColumnBasisZero: true,\n printWithBreakpoints: [],\n mediaTriggerAutoRestore: true,\n ssrObserveBreakpoints: [],\n // This is disabled by default because otherwise the multiplier would\n // run for all users, regardless of whether they're using this feature.\n // Instead, we disable it by default, which requires this ugly cast.\n multiplier: undefined,\n defaultUnit: 'px',\n detectLayoutDisplay: false\n};\nconst LAYOUT_CONFIG = /*#__PURE__*/new InjectionToken('Flex Layout token, config options for the library', {\n providedIn: 'root',\n factory: () => DEFAULT_CONFIG\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Token that is provided to tell whether the FlexLayoutServerModule\n * has been included in the bundle\n *\n * NOTE: This can be manually provided to disable styles when using SSR\n */\nconst SERVER_TOKEN = /*#__PURE__*/new InjectionToken('FlexLayoutServerLoaded', {\n providedIn: 'root',\n factory: () => false\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst BREAKPOINT = /*#__PURE__*/new InjectionToken('Flex Layout token, collect all breakpoints into one provider', {\n providedIn: 'root',\n factory: () => null\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * For the specified MediaChange, make sure it contains the breakpoint alias\n * and suffix (if available).\n */\nfunction mergeAlias(dest, source) {\n dest = dest?.clone() ?? new MediaChange();\n if (source) {\n dest.mqAlias = source.alias;\n dest.mediaQuery = source.mediaQuery;\n dest.suffix = source.suffix;\n dest.priority = source.priority;\n }\n return dest;\n}\n\n/** A class that encapsulates CSS style generation for common directives */\nclass StyleBuilder {\n constructor() {\n /** Whether to cache the generated output styles */\n this.shouldCache = true;\n }\n /**\n * Run a side effect computation given the input string and the computed styles\n * from the build task and the host configuration object\n * NOTE: This should be a no-op unless an algorithm is provided in a subclass\n */\n sideEffect(_input, _styles, _parent) {}\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet StyleUtils = /*#__PURE__*/(() => {\n class StyleUtils {\n constructor(_serverStylesheet, _serverModuleLoaded, _platformId, layoutConfig) {\n this._serverStylesheet = _serverStylesheet;\n this._serverModuleLoaded = _serverModuleLoaded;\n this._platformId = _platformId;\n this.layoutConfig = layoutConfig;\n }\n /**\n * Applies styles given via string pair or object map to the directive element\n */\n applyStyleToElement(element, style, value = null) {\n let styles = {};\n if (typeof style === 'string') {\n styles[style] = value;\n style = styles;\n }\n styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n this._applyMultiValueStyleToElement(styles, element);\n }\n /**\n * Applies styles given via string pair or object map to the directive's element\n */\n applyStyleToElements(style, elements = []) {\n const styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n elements.forEach(el => {\n this._applyMultiValueStyleToElement(styles, el);\n });\n }\n /**\n * Determine the DOM element's Flexbox flow (flex-direction)\n *\n * Check inline style first then check computed (stylesheet) style\n */\n getFlowDirection(target) {\n const query = 'flex-direction';\n let value = this.lookupStyle(target, query);\n const hasInlineValue = this.lookupInlineStyle(target, query) || isPlatformServer(this._platformId) && this._serverModuleLoaded ? value : '';\n return [value || 'row', hasInlineValue];\n }\n hasWrap(target) {\n const query = 'flex-wrap';\n return this.lookupStyle(target, query) === 'wrap';\n }\n /**\n * Find the DOM element's raw attribute value (if any)\n */\n lookupAttributeValue(element, attribute) {\n return element.getAttribute(attribute) ?? '';\n }\n /**\n * Find the DOM element's inline style value (if any)\n */\n lookupInlineStyle(element, styleName) {\n return isPlatformBrowser(this._platformId) ? element.style.getPropertyValue(styleName) : getServerStyle(element, styleName);\n }\n /**\n * Determine the inline or inherited CSS style\n * NOTE: platform-server has no implementation for getComputedStyle\n */\n lookupStyle(element, styleName, inlineOnly = false) {\n let value = '';\n if (element) {\n let immediateValue = value = this.lookupInlineStyle(element, styleName);\n if (!immediateValue) {\n if (isPlatformBrowser(this._platformId)) {\n if (!inlineOnly) {\n value = getComputedStyle(element).getPropertyValue(styleName);\n }\n } else {\n if (this._serverModuleLoaded) {\n value = this._serverStylesheet.getStyleForElement(element, styleName);\n }\n }\n }\n }\n // Note: 'inline' is the default of all elements, unless UA stylesheet overrides;\n // in which case getComputedStyle() should determine a valid value.\n return value ? value.trim() : '';\n }\n /**\n * Applies the styles to the element. The styles object map may contain an array of values\n * Each value will be added as element style\n * Keys are sorted to add prefixed styles (like -webkit-x) first, before the standard ones\n */\n _applyMultiValueStyleToElement(styles, element) {\n Object.keys(styles).sort().forEach(key => {\n const el = styles[key];\n const values = Array.isArray(el) ? el : [el];\n values.sort();\n for (let value of values) {\n value = value ? value + '' : '';\n if (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) {\n isPlatformBrowser(this._platformId) ? element.style.setProperty(key, value) : setServerStyle(element, key, value);\n } else {\n this._serverStylesheet.addStyleToElement(element, key, value);\n }\n }\n });\n }\n }\n StyleUtils.ɵfac = function StyleUtils_Factory(ɵt) {\n return new (ɵt || StyleUtils)(i0.ɵɵinject(StylesheetMap), i0.ɵɵinject(SERVER_TOKEN), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(LAYOUT_CONFIG));\n };\n StyleUtils.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: StyleUtils,\n factory: StyleUtils.ɵfac,\n providedIn: 'root'\n });\n return StyleUtils;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction getServerStyle(element, styleName) {\n const styleMap = readStyleAttribute(element);\n return styleMap[styleName] ?? '';\n}\nfunction setServerStyle(element, styleName, styleValue) {\n styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n const styleMap = readStyleAttribute(element);\n styleMap[styleName] = styleValue ?? '';\n writeStyleAttribute(element, styleMap);\n}\nfunction writeStyleAttribute(element, styleMap) {\n let styleAttrValue = '';\n for (const key in styleMap) {\n const newValue = styleMap[key];\n if (newValue) {\n styleAttrValue += `${key}:${styleMap[key]};`;\n }\n }\n element.setAttribute('style', styleAttrValue);\n}\nfunction readStyleAttribute(element) {\n const styleMap = {};\n const styleAttribute = element.getAttribute('style');\n if (styleAttribute) {\n const styleList = styleAttribute.split(/;+/g);\n for (let i = 0; i < styleList.length; i++) {\n const style = styleList[i].trim();\n if (style.length > 0) {\n const colonIndex = style.indexOf(':');\n if (colonIndex === -1) {\n throw new Error(`Invalid CSS style: ${style}`);\n }\n const name = style.substr(0, colonIndex).trim();\n styleMap[name] = style.substr(colonIndex + 1).trim();\n }\n }\n }\n return styleMap;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** HOF to sort the breakpoints by descending priority */\nfunction sortDescendingPriority(a, b) {\n const priorityA = a ? a.priority || 0 : 0;\n const priorityB = b ? b.priority || 0 : 0;\n return priorityB - priorityA;\n}\n/** HOF to sort the breakpoints by ascending priority */\nfunction sortAscendingPriority(a, b) {\n const pA = a.priority || 0;\n const pB = b.priority || 0;\n return pA - pB;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * MediaMonitor configures listeners to mediaQuery changes and publishes an Observable facade to\n * convert mediaQuery change callbacks to subscriber notifications. These notifications will be\n * performed within the ng Zone to trigger change detections and component updates.\n *\n * NOTE: both mediaQuery activations and de-activations are announced in notifications\n */\nlet MatchMedia = /*#__PURE__*/(() => {\n class MatchMedia {\n constructor(_zone, _platformId, _document) {\n this._zone = _zone;\n this._platformId = _platformId;\n this._document = _document;\n /** Initialize source with 'all' so all non-responsive APIs trigger style updates */\n this.source = new BehaviorSubject(new MediaChange(true));\n this.registry = new Map();\n this.pendingRemoveListenerFns = [];\n this._observable$ = this.source.asObservable();\n }\n /**\n * Publish list of all current activations\n */\n get activations() {\n const results = [];\n this.registry.forEach((mql, key) => {\n if (mql.matches) {\n results.push(key);\n }\n });\n return results;\n }\n /**\n * For the specified mediaQuery?\n */\n isActive(mediaQuery) {\n const mql = this.registry.get(mediaQuery);\n return mql?.matches ?? this.registerQuery(mediaQuery).some(m => m.matches);\n }\n /**\n * External observers can watch for all (or a specific) mql changes.\n * Typically used by the MediaQueryAdaptor; optionally available to components\n * who wish to use the MediaMonitor as mediaMonitor$ observable service.\n *\n * Use deferred registration process to register breakpoints only on subscription\n * This logic also enforces logic to register all mediaQueries BEFORE notify\n * subscribers of notifications.\n */\n observe(mqList, filterOthers = false) {\n if (mqList && mqList.length) {\n const matchMedia$ = this._observable$.pipe(filter(change => !filterOthers ? true : mqList.indexOf(change.mediaQuery) > -1));\n const registration$ = new Observable(observer => {\n const matches = this.registerQuery(mqList);\n if (matches.length) {\n const lastChange = matches.pop();\n matches.forEach(e => {\n observer.next(e);\n });\n this.source.next(lastChange); // last match is cached\n }\n observer.complete();\n });\n return merge(registration$, matchMedia$);\n }\n return this._observable$;\n }\n /**\n * Based on the BreakPointRegistry provider, register internal listeners for each unique\n * mediaQuery. Each listener emits specific MediaChange data to observers\n */\n registerQuery(mediaQuery) {\n const list = Array.isArray(mediaQuery) ? mediaQuery : [mediaQuery];\n const matches = [];\n buildQueryCss(list, this._document);\n list.forEach(query => {\n const onMQLEvent = e => {\n this._zone.run(() => this.source.next(new MediaChange(e.matches, query)));\n };\n let mql = this.registry.get(query);\n if (!mql) {\n mql = this.buildMQL(query);\n mql.addListener(onMQLEvent);\n this.pendingRemoveListenerFns.push(() => mql.removeListener(onMQLEvent));\n this.registry.set(query, mql);\n }\n if (mql.matches) {\n matches.push(new MediaChange(true, query));\n }\n });\n return matches;\n }\n ngOnDestroy() {\n let fn;\n while (fn = this.pendingRemoveListenerFns.pop()) {\n fn();\n }\n }\n /**\n * Call window.matchMedia() to build a MediaQueryList; which\n * supports 0..n listeners for activation/deactivation\n */\n buildMQL(query) {\n return constructMql(query, isPlatformBrowser(this._platformId));\n }\n }\n MatchMedia.ɵfac = function MatchMedia_Factory(ɵt) {\n return new (ɵt || MatchMedia)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(DOCUMENT));\n };\n MatchMedia.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatchMedia,\n factory: MatchMedia.ɵfac,\n providedIn: 'root'\n });\n return MatchMedia;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Private global registry for all dynamically-created, injected style tags\n * @see prepare(query)\n */\nconst ALL_STYLES = {};\n/**\n * For Webkit engines that only trigger the MediaQueryList Listener\n * when there is at least one CSS selector for the respective media query.\n *\n * @param mediaQueries\n * @param _document\n */\nfunction buildQueryCss(mediaQueries, _document) {\n const list = mediaQueries.filter(it => !ALL_STYLES[it]);\n if (list.length > 0) {\n const query = list.join(', ');\n try {\n const styleEl = _document.createElement('style');\n styleEl.setAttribute('type', 'text/css');\n if (!styleEl.styleSheet) {\n const cssText = `\n/*\n @angular/flex-layout - workaround for possible browser quirk with mediaQuery listeners\n see http://bit.ly/2sd4HMP\n*/\n@media ${query} {.fx-query-test{ }}\n`;\n styleEl.appendChild(_document.createTextNode(cssText));\n }\n _document.head.appendChild(styleEl);\n // Store in private global registry\n list.forEach(mq => ALL_STYLES[mq] = styleEl);\n } catch (e) {\n console.error(e);\n }\n }\n}\nfunction buildMockMql(query) {\n const et = new EventTarget();\n et.matches = query === 'all' || query === '';\n et.media = query;\n et.addListener = () => {};\n et.removeListener = () => {};\n et.addEventListener = () => {};\n et.dispatchEvent = () => false;\n et.onchange = null;\n return et;\n}\nfunction constructMql(query, isBrowser) {\n const canListen = isBrowser && !!window.matchMedia('all').addListener;\n return canListen ? window.matchMedia(query) : buildMockMql(query);\n}\n\n/**\n * NOTE: Smaller ranges have HIGHER priority since the match is more specific\n */\nconst DEFAULT_BREAKPOINTS = [{\n alias: 'xs',\n mediaQuery: 'screen and (min-width: 0px) and (max-width: 599.98px)',\n priority: 1000\n}, {\n alias: 'sm',\n mediaQuery: 'screen and (min-width: 600px) and (max-width: 959.98px)',\n priority: 900\n}, {\n alias: 'md',\n mediaQuery: 'screen and (min-width: 960px) and (max-width: 1279.98px)',\n priority: 800\n}, {\n alias: 'lg',\n mediaQuery: 'screen and (min-width: 1280px) and (max-width: 1919.98px)',\n priority: 700\n}, {\n alias: 'xl',\n mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.98px)',\n priority: 600\n}, {\n alias: 'lt-sm',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 599.98px)',\n priority: 950\n}, {\n alias: 'lt-md',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 959.98px)',\n priority: 850\n}, {\n alias: 'lt-lg',\n overlapping: true,\n mediaQuery: 'screen and (max-width: 1279.98px)',\n priority: 750\n}, {\n alias: 'lt-xl',\n overlapping: true,\n priority: 650,\n mediaQuery: 'screen and (max-width: 1919.98px)'\n}, {\n alias: 'gt-xs',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 600px)',\n priority: -950\n}, {\n alias: 'gt-sm',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 960px)',\n priority: -850\n}, {\n alias: 'gt-md',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1280px)',\n priority: -750\n}, {\n alias: 'gt-lg',\n overlapping: true,\n mediaQuery: 'screen and (min-width: 1920px)',\n priority: -650\n}];\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/* tslint:disable */\nconst HANDSET_PORTRAIT = '(orientation: portrait) and (max-width: 599.98px)';\nconst HANDSET_LANDSCAPE = '(orientation: landscape) and (max-width: 959.98px)';\nconst TABLET_PORTRAIT = '(orientation: portrait) and (min-width: 600px) and (max-width: 839.98px)';\nconst TABLET_LANDSCAPE = '(orientation: landscape) and (min-width: 960px) and (max-width: 1279.98px)';\nconst WEB_PORTRAIT = '(orientation: portrait) and (min-width: 840px)';\nconst WEB_LANDSCAPE = '(orientation: landscape) and (min-width: 1280px)';\nconst ScreenTypes = {\n 'HANDSET': `${HANDSET_PORTRAIT}, ${HANDSET_LANDSCAPE}`,\n 'TABLET': `${TABLET_PORTRAIT} , ${TABLET_LANDSCAPE}`,\n 'WEB': `${WEB_PORTRAIT}, ${WEB_LANDSCAPE} `,\n 'HANDSET_PORTRAIT': `${HANDSET_PORTRAIT}`,\n 'TABLET_PORTRAIT': `${TABLET_PORTRAIT} `,\n 'WEB_PORTRAIT': `${WEB_PORTRAIT}`,\n 'HANDSET_LANDSCAPE': `${HANDSET_LANDSCAPE}`,\n 'TABLET_LANDSCAPE': `${TABLET_LANDSCAPE}`,\n 'WEB_LANDSCAPE': `${WEB_LANDSCAPE}`\n};\n/**\n * Extended Breakpoints for handset/tablets with landscape or portrait orientations\n */\nconst ORIENTATION_BREAKPOINTS = [{\n 'alias': 'handset',\n priority: 2000,\n 'mediaQuery': ScreenTypes.HANDSET\n}, {\n 'alias': 'handset.landscape',\n priority: 2000,\n 'mediaQuery': ScreenTypes.HANDSET_LANDSCAPE\n}, {\n 'alias': 'handset.portrait',\n priority: 2000,\n 'mediaQuery': ScreenTypes.HANDSET_PORTRAIT\n}, {\n 'alias': 'tablet',\n priority: 2100,\n 'mediaQuery': ScreenTypes.TABLET\n}, {\n 'alias': 'tablet.landscape',\n priority: 2100,\n 'mediaQuery': ScreenTypes.TABLET_LANDSCAPE\n}, {\n 'alias': 'tablet.portrait',\n priority: 2100,\n 'mediaQuery': ScreenTypes.TABLET_PORTRAIT\n}, {\n 'alias': 'web',\n priority: 2200,\n 'mediaQuery': ScreenTypes.WEB,\n overlapping: true\n}, {\n 'alias': 'web.landscape',\n priority: 2200,\n 'mediaQuery': ScreenTypes.WEB_LANDSCAPE,\n overlapping: true\n}, {\n 'alias': 'web.portrait',\n priority: 2200,\n 'mediaQuery': ScreenTypes.WEB_PORTRAIT,\n overlapping: true\n}];\nconst ALIAS_DELIMITERS = /(\\.|-|_)/g;\nfunction firstUpperCase(part) {\n let first = part.length > 0 ? part.charAt(0) : '';\n let remainder = part.length > 1 ? part.slice(1) : '';\n return first.toUpperCase() + remainder;\n}\n/**\n * Converts snake-case to SnakeCase.\n * @param name Text to UpperCamelCase\n */\nfunction camelCase(name) {\n return name.replace(ALIAS_DELIMITERS, '|').split('|').map(firstUpperCase).join('');\n}\n/**\n * For each breakpoint, ensure that a Suffix is defined;\n * fallback to UpperCamelCase the unique Alias value\n */\nfunction validateSuffixes(list) {\n list.forEach(bp => {\n if (!bp.suffix) {\n bp.suffix = camelCase(bp.alias); // create Suffix value based on alias\n bp.overlapping = !!bp.overlapping; // ensure default value\n }\n });\n return list;\n}\n/**\n * Merge a custom breakpoint list with the default list based on unique alias values\n * - Items are added if the alias is not in the default list\n * - Items are merged with the custom override if the alias exists in the default list\n */\nfunction mergeByAlias(defaults, custom = []) {\n const dict = {};\n defaults.forEach(bp => {\n dict[bp.alias] = bp;\n });\n // Merge custom breakpoints\n custom.forEach(bp => {\n if (dict[bp.alias]) {\n extendObject(dict[bp.alias], bp);\n } else {\n dict[bp.alias] = bp;\n }\n });\n return validateSuffixes(Object.keys(dict).map(k => dict[k]));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token unique to the flex-layout library.\n * Use this token when build a custom provider (see below).\n */\nconst BREAKPOINTS = /*#__PURE__*/new InjectionToken('Token (@angular/flex-layout) Breakpoints', {\n providedIn: 'root',\n factory: () => {\n const breakpoints = inject(BREAKPOINT);\n const layoutConfig = inject(LAYOUT_CONFIG);\n const bpFlattenArray = [].concat.apply([], (breakpoints || []).map(v => Array.isArray(v) ? v : [v]));\n const builtIns = (layoutConfig.disableDefaultBps ? [] : DEFAULT_BREAKPOINTS).concat(layoutConfig.addOrientationBps ? ORIENTATION_BREAKPOINTS : []);\n return mergeByAlias(builtIns, bpFlattenArray);\n }\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Registry of 1..n MediaQuery breakpoint ranges\n * This is published as a provider and may be overridden from custom, application-specific ranges\n *\n */\nlet BreakPointRegistry = /*#__PURE__*/(() => {\n class BreakPointRegistry {\n constructor(list) {\n /**\n * Memoized BreakPoint Lookups\n */\n this.findByMap = new Map();\n this.items = [...list].sort(sortAscendingPriority);\n }\n /**\n * Search breakpoints by alias (e.g. gt-xs)\n */\n findByAlias(alias) {\n return !alias ? null : this.findWithPredicate(alias, bp => bp.alias === alias);\n }\n findByQuery(query) {\n return this.findWithPredicate(query, bp => bp.mediaQuery === query);\n }\n /**\n * Get all the breakpoints whose ranges could overlapping `normal` ranges;\n * e.g. gt-sm overlaps md, lg, and xl\n */\n get overlappings() {\n return this.items.filter(it => it.overlapping);\n }\n /**\n * Get list of all registered (non-empty) breakpoint aliases\n */\n get aliases() {\n return this.items.map(it => it.alias);\n }\n /**\n * Aliases are mapped to properties using suffixes\n * e.g. 'gt-sm' for property 'layout' uses suffix 'GtSm'\n * for property layoutGtSM.\n */\n get suffixes() {\n return this.items.map(it => it?.suffix ?? '');\n }\n /**\n * Memoized lookup using custom predicate function\n */\n findWithPredicate(key, searchFn) {\n let response = this.findByMap.get(key);\n if (!response) {\n response = this.items.find(searchFn) ?? null;\n this.findByMap.set(key, response);\n }\n return response ?? null;\n }\n }\n BreakPointRegistry.ɵfac = function BreakPointRegistry_Factory(ɵt) {\n return new (ɵt || BreakPointRegistry)(i0.ɵɵinject(BREAKPOINTS));\n };\n BreakPointRegistry.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: BreakPointRegistry,\n factory: BreakPointRegistry.ɵfac,\n providedIn: 'root'\n });\n return BreakPointRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst PRINT = 'print';\nconst BREAKPOINT_PRINT = {\n alias: PRINT,\n mediaQuery: PRINT,\n priority: 1000\n};\n/**\n * PrintHook - Use to intercept print MediaQuery activations and force\n * layouts to render with the specified print alias/breakpoint\n *\n * Used in MediaMarshaller and MediaObserver\n */\nlet PrintHook = /*#__PURE__*/(() => {\n class PrintHook {\n constructor(breakpoints, layoutConfig, _document) {\n this.breakpoints = breakpoints;\n this.layoutConfig = layoutConfig;\n this._document = _document;\n // registeredBeforeAfterPrintHooks tracks if we registered the `beforeprint`\n // and `afterprint` event listeners.\n this.registeredBeforeAfterPrintHooks = false;\n // isPrintingBeforeAfterEvent is used to track if we are printing from within\n // a `beforeprint` event handler. This prevents the typical `stopPrinting`\n // form `interceptEvents` so that printing is not stopped while the dialog\n // is still open. This is an extension of the `isPrinting` property on\n // browsers which support `beforeprint` and `afterprint` events.\n this.isPrintingBeforeAfterEvent = false;\n this.beforePrintEventListeners = [];\n this.afterPrintEventListeners = [];\n this.formerActivations = null;\n // Is this service currently in print mode\n this.isPrinting = false;\n this.queue = new PrintQueue();\n this.deactivations = [];\n }\n /** Add 'print' mediaQuery: to listen for matchMedia activations */\n withPrintQuery(queries) {\n return [...queries, PRINT];\n }\n /** Is the MediaChange event for any 'print' @media */\n isPrintEvent(e) {\n return e.mediaQuery.startsWith(PRINT);\n }\n /** What is the desired mqAlias to use while printing? */\n get printAlias() {\n return [...(this.layoutConfig.printWithBreakpoints ?? [])];\n }\n /** Lookup breakpoints associated with print aliases. */\n get printBreakPoints() {\n return this.printAlias.map(alias => this.breakpoints.findByAlias(alias)).filter(bp => bp !== null);\n }\n /** Lookup breakpoint associated with mediaQuery */\n getEventBreakpoints({\n mediaQuery\n }) {\n const bp = this.breakpoints.findByQuery(mediaQuery);\n const list = bp ? [...this.printBreakPoints, bp] : this.printBreakPoints;\n return list.sort(sortDescendingPriority);\n }\n /** Update event with printAlias mediaQuery information */\n updateEvent(event) {\n let bp = this.breakpoints.findByQuery(event.mediaQuery);\n if (this.isPrintEvent(event)) {\n // Reset from 'print' to first (highest priority) print breakpoint\n bp = this.getEventBreakpoints(event)[0];\n event.mediaQuery = bp?.mediaQuery ?? '';\n }\n return mergeAlias(event, bp);\n }\n // registerBeforeAfterPrintHooks registers a `beforeprint` event hook so we can\n // trigger print styles synchronously and apply proper layout styles.\n // It is a noop if the hooks have already been registered or if the document's\n // `defaultView` is not available.\n registerBeforeAfterPrintHooks(target) {\n // `defaultView` may be null when rendering on the server or in other contexts.\n if (!this._document.defaultView || this.registeredBeforeAfterPrintHooks) {\n return;\n }\n this.registeredBeforeAfterPrintHooks = true;\n const beforePrintListener = () => {\n // If we aren't already printing, start printing and update the styles as\n // if there was a regular print `MediaChange`(from matchMedia).\n if (!this.isPrinting) {\n this.isPrintingBeforeAfterEvent = true;\n this.startPrinting(target, this.getEventBreakpoints(new MediaChange(true, PRINT)));\n target.updateStyles();\n }\n };\n const afterPrintListener = () => {\n // If we aren't already printing, start printing and update the styles as\n // if there was a regular print `MediaChange`(from matchMedia).\n this.isPrintingBeforeAfterEvent = false;\n if (this.isPrinting) {\n this.stopPrinting(target);\n target.updateStyles();\n }\n };\n // Could we have teardown logic to remove if there are no print listeners being used?\n this._document.defaultView.addEventListener('beforeprint', beforePrintListener);\n this._document.defaultView.addEventListener('afterprint', afterPrintListener);\n this.beforePrintEventListeners.push(beforePrintListener);\n this.afterPrintEventListeners.push(afterPrintListener);\n }\n /**\n * Prepare RxJS tap operator with partial application\n * @return pipeable tap predicate\n */\n interceptEvents(target) {\n return event => {\n if (this.isPrintEvent(event)) {\n if (event.matches && !this.isPrinting) {\n this.startPrinting(target, this.getEventBreakpoints(event));\n target.updateStyles();\n } else if (!event.matches && this.isPrinting && !this.isPrintingBeforeAfterEvent) {\n this.stopPrinting(target);\n target.updateStyles();\n }\n return;\n }\n this.collectActivations(target, event);\n };\n }\n /** Stop mediaChange event propagation in event streams */\n blockPropagation() {\n return event => {\n return !(this.isPrinting || this.isPrintEvent(event));\n };\n }\n /**\n * Save current activateBreakpoints (for later restore)\n * and substitute only the printAlias breakpoint\n */\n startPrinting(target, bpList) {\n this.isPrinting = true;\n this.formerActivations = target.activatedBreakpoints;\n target.activatedBreakpoints = this.queue.addPrintBreakpoints(bpList);\n }\n /** For any print de-activations, reset the entire print queue */\n stopPrinting(target) {\n target.activatedBreakpoints = this.deactivations;\n this.deactivations = [];\n this.formerActivations = null;\n this.queue.clear();\n this.isPrinting = false;\n }\n /**\n * To restore pre-Print Activations, we must capture the proper\n * list of breakpoint activations BEFORE print starts. OnBeforePrint()\n * is supported; so 'print' mediaQuery activations are used as a fallback\n * in browsers without `beforeprint` support.\n *\n * > But activated breakpoints are deactivated BEFORE 'print' activation.\n *\n * Let's capture all de-activations using the following logic:\n *\n * When not printing:\n * - clear cache when activating non-print breakpoint\n * - update cache (and sort) when deactivating\n *\n * When printing:\n * - sort and save when starting print\n * - restore as activatedTargets and clear when stop printing\n */\n collectActivations(target, event) {\n if (!this.isPrinting || this.isPrintingBeforeAfterEvent) {\n if (!this.isPrintingBeforeAfterEvent) {\n // Only clear deactivations if we aren't printing from a `beforeprint` event.\n // Otherwise, this will clear before `stopPrinting()` is called to restore\n // the pre-Print Activations.\n this.deactivations = [];\n return;\n }\n if (!event.matches) {\n const bp = this.breakpoints.findByQuery(event.mediaQuery);\n // Deactivating a breakpoint\n if (bp) {\n const hasFormerBp = this.formerActivations && this.formerActivations.includes(bp);\n const wasActivated = !this.formerActivations && target.activatedBreakpoints.includes(bp);\n const shouldDeactivate = hasFormerBp || wasActivated;\n if (shouldDeactivate) {\n this.deactivations.push(bp);\n this.deactivations.sort(sortDescendingPriority);\n }\n }\n }\n }\n }\n /** Teardown logic for the service. */\n ngOnDestroy() {\n if (this._document.defaultView) {\n this.beforePrintEventListeners.forEach(l => this._document.defaultView.removeEventListener('beforeprint', l));\n this.afterPrintEventListeners.forEach(l => this._document.defaultView.removeEventListener('afterprint', l));\n }\n }\n }\n PrintHook.ɵfac = function PrintHook_Factory(ɵt) {\n return new (ɵt || PrintHook)(i0.ɵɵinject(BreakPointRegistry), i0.ɵɵinject(LAYOUT_CONFIG), i0.ɵɵinject(DOCUMENT));\n };\n PrintHook.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PrintHook,\n factory: PrintHook.ɵfac,\n providedIn: 'root'\n });\n return PrintHook;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// ************************************************************************\n// Internal Utility class 'PrintQueue'\n// ************************************************************************\n/**\n * Utility class to manage print breakpoints + activatedBreakpoints\n * with correct sorting WHILE printing\n */\nclass PrintQueue {\n constructor() {\n /** Sorted queue with prioritized print breakpoints */\n this.printBreakpoints = [];\n }\n addPrintBreakpoints(bpList) {\n bpList.push(BREAKPOINT_PRINT);\n bpList.sort(sortDescendingPriority);\n bpList.forEach(bp => this.addBreakpoint(bp));\n return this.printBreakpoints;\n }\n /** Add Print breakpoint to queue */\n addBreakpoint(bp) {\n if (!!bp) {\n const bpInList = this.printBreakpoints.find(it => it.mediaQuery === bp.mediaQuery);\n if (bpInList === undefined) {\n // If this is a `printAlias` breakpoint, then append. If a true 'print' breakpoint,\n // register as highest priority in the queue\n this.printBreakpoints = isPrintBreakPoint(bp) ? [bp, ...this.printBreakpoints] : [...this.printBreakpoints, bp];\n }\n }\n }\n /** Restore original activated breakpoints and clear internal caches */\n clear() {\n this.printBreakpoints = [];\n }\n}\n// ************************************************************************\n// Internal Utility methods\n// ************************************************************************\n/** Only support intercept queueing if the Breakpoint is a print @media query */\nfunction isPrintBreakPoint(bp) {\n return bp?.mediaQuery.startsWith(PRINT) ?? false;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * MediaMarshaller - register responsive values from directives and\n * trigger them based on media query events\n */\nlet MediaMarshaller = /*#__PURE__*/(() => {\n class MediaMarshaller {\n constructor(matchMedia, breakpoints, hook) {\n this.matchMedia = matchMedia;\n this.breakpoints = breakpoints;\n this.hook = hook;\n this._useFallbacks = true;\n this._activatedBreakpoints = [];\n this.elementMap = new Map();\n this.elementKeyMap = new WeakMap();\n this.watcherMap = new WeakMap(); // special triggers to update elements\n this.updateMap = new WeakMap(); // callback functions to update styles\n this.clearMap = new WeakMap(); // callback functions to clear styles\n this.subject = new Subject();\n this.observeActivations();\n }\n get activatedAlias() {\n return this.activatedBreakpoints[0]?.alias ?? '';\n }\n set activatedBreakpoints(bps) {\n this._activatedBreakpoints = [...bps];\n }\n get activatedBreakpoints() {\n return [...this._activatedBreakpoints];\n }\n set useFallbacks(value) {\n this._useFallbacks = value;\n }\n /**\n * Update styles on breakpoint activates or deactivates\n * @param mc\n */\n onMediaChange(mc) {\n const bp = this.findByQuery(mc.mediaQuery);\n if (bp) {\n mc = mergeAlias(mc, bp);\n const bpIndex = this.activatedBreakpoints.indexOf(bp);\n if (mc.matches && bpIndex === -1) {\n this._activatedBreakpoints.push(bp);\n this._activatedBreakpoints.sort(sortDescendingPriority);\n this.updateStyles();\n } else if (!mc.matches && bpIndex !== -1) {\n // Remove the breakpoint when it's deactivated\n this._activatedBreakpoints.splice(bpIndex, 1);\n this._activatedBreakpoints.sort(sortDescendingPriority);\n this.updateStyles();\n }\n }\n }\n /**\n * initialize the marshaller with necessary elements for delegation on an element\n * @param element\n * @param key\n * @param updateFn optional callback so that custom bp directives don't have to re-provide this\n * @param clearFn optional callback so that custom bp directives don't have to re-provide this\n * @param extraTriggers other triggers to force style updates (e.g. layout, directionality, etc)\n */\n init(element, key, updateFn, clearFn, extraTriggers = []) {\n initBuilderMap(this.updateMap, element, key, updateFn);\n initBuilderMap(this.clearMap, element, key, clearFn);\n this.buildElementKeyMap(element, key);\n this.watchExtraTriggers(element, key, extraTriggers);\n }\n /**\n * get the value for an element and key and optionally a given breakpoint\n * @param element\n * @param key\n * @param bp\n */\n getValue(element, key, bp) {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const values = bp !== undefined ? bpMap.get(bp) : this.getActivatedValues(bpMap, key);\n if (values) {\n return values.get(key);\n }\n }\n return undefined;\n }\n /**\n * whether the element has values for a given key\n * @param element\n * @param key\n */\n hasValue(element, key) {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const values = this.getActivatedValues(bpMap, key);\n if (values) {\n return values.get(key) !== undefined || false;\n }\n }\n return false;\n }\n /**\n * Set the value for an input on a directive\n * @param element the element in question\n * @param key the type of the directive (e.g. flex, layout-gap, etc)\n * @param bp the breakpoint suffix (empty string = default)\n * @param val the value for the breakpoint\n */\n setValue(element, key, val, bp) {\n let bpMap = this.elementMap.get(element);\n if (!bpMap) {\n bpMap = new Map().set(bp, new Map().set(key, val));\n this.elementMap.set(element, bpMap);\n } else {\n const values = (bpMap.get(bp) ?? new Map()).set(key, val);\n bpMap.set(bp, values);\n this.elementMap.set(element, bpMap);\n }\n const value = this.getValue(element, key);\n if (value !== undefined) {\n this.updateElement(element, key, value);\n }\n }\n /** Track element value changes for a specific key */\n trackValue(element, key) {\n return this.subject.asObservable().pipe(filter(v => v.element === element && v.key === key));\n }\n /** update all styles for all elements on the current breakpoint */\n updateStyles() {\n this.elementMap.forEach((bpMap, el) => {\n const keyMap = new Set(this.elementKeyMap.get(el));\n let valueMap = this.getActivatedValues(bpMap);\n if (valueMap) {\n valueMap.forEach((v, k) => {\n this.updateElement(el, k, v);\n keyMap.delete(k);\n });\n }\n keyMap.forEach(k => {\n valueMap = this.getActivatedValues(bpMap, k);\n if (valueMap) {\n const value = valueMap.get(k);\n this.updateElement(el, k, value);\n } else {\n this.clearElement(el, k);\n }\n });\n });\n }\n /**\n * clear the styles for a given element\n * @param element\n * @param key\n */\n clearElement(element, key) {\n const builders = this.clearMap.get(element);\n if (builders) {\n const clearFn = builders.get(key);\n if (!!clearFn) {\n clearFn();\n this.subject.next({\n element,\n key,\n value: ''\n });\n }\n }\n }\n /**\n * update a given element with the activated values for a given key\n * @param element\n * @param key\n * @param value\n */\n updateElement(element, key, value) {\n const builders = this.updateMap.get(element);\n if (builders) {\n const updateFn = builders.get(key);\n if (!!updateFn) {\n updateFn(value);\n this.subject.next({\n element,\n key,\n value\n });\n }\n }\n }\n /**\n * release all references to a given element\n * @param element\n */\n releaseElement(element) {\n const watcherMap = this.watcherMap.get(element);\n if (watcherMap) {\n watcherMap.forEach(s => s.unsubscribe());\n this.watcherMap.delete(element);\n }\n const elementMap = this.elementMap.get(element);\n if (elementMap) {\n elementMap.forEach((_, s) => elementMap.delete(s));\n this.elementMap.delete(element);\n }\n }\n /**\n * trigger an update for a given element and key (e.g. layout)\n * @param element\n * @param key\n */\n triggerUpdate(element, key) {\n const bpMap = this.elementMap.get(element);\n if (bpMap) {\n const valueMap = this.getActivatedValues(bpMap, key);\n if (valueMap) {\n if (key) {\n this.updateElement(element, key, valueMap.get(key));\n } else {\n valueMap.forEach((v, k) => this.updateElement(element, k, v));\n }\n }\n }\n }\n /** Cross-reference for HTMLElement with directive key */\n buildElementKeyMap(element, key) {\n let keyMap = this.elementKeyMap.get(element);\n if (!keyMap) {\n keyMap = new Set();\n this.elementKeyMap.set(element, keyMap);\n }\n keyMap.add(key);\n }\n /**\n * Other triggers that should force style updates:\n * - directionality\n * - layout changes\n * - mutationobserver updates\n */\n watchExtraTriggers(element, key, triggers) {\n if (triggers && triggers.length) {\n let watchers = this.watcherMap.get(element);\n if (!watchers) {\n watchers = new Map();\n this.watcherMap.set(element, watchers);\n }\n const subscription = watchers.get(key);\n if (!subscription) {\n const newSubscription = merge(...triggers).subscribe(() => {\n const currentValue = this.getValue(element, key);\n this.updateElement(element, key, currentValue);\n });\n watchers.set(key, newSubscription);\n }\n }\n }\n /** Breakpoint locator by mediaQuery */\n findByQuery(query) {\n return this.breakpoints.findByQuery(query);\n }\n /**\n * get the fallback breakpoint for a given element, starting with the current breakpoint\n * @param bpMap\n * @param key\n */\n getActivatedValues(bpMap, key) {\n for (let i = 0; i < this.activatedBreakpoints.length; i++) {\n const activatedBp = this.activatedBreakpoints[i];\n const valueMap = bpMap.get(activatedBp.alias);\n if (valueMap) {\n if (key === undefined || valueMap.has(key) && valueMap.get(key) != null) {\n return valueMap;\n }\n }\n }\n // On the server, we explicitly have an \"all\" section filled in to begin with.\n // So we don't need to aggressively find a fallback if no explicit value exists.\n if (!this._useFallbacks) {\n return undefined;\n }\n const lastHope = bpMap.get('');\n return key === undefined || lastHope && lastHope.has(key) ? lastHope : undefined;\n }\n /**\n * Watch for mediaQuery breakpoint activations\n */\n observeActivations() {\n const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n this.hook.registerBeforeAfterPrintHooks(this);\n this.matchMedia.observe(this.hook.withPrintQuery(queries)).pipe(tap(this.hook.interceptEvents(this)), filter(this.hook.blockPropagation())).subscribe(this.onMediaChange.bind(this));\n }\n }\n MediaMarshaller.ɵfac = function MediaMarshaller_Factory(ɵt) {\n return new (ɵt || MediaMarshaller)(i0.ɵɵinject(MatchMedia), i0.ɵɵinject(BreakPointRegistry), i0.ɵɵinject(PrintHook));\n };\n MediaMarshaller.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MediaMarshaller,\n factory: MediaMarshaller.ɵfac,\n providedIn: 'root'\n });\n return MediaMarshaller;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction initBuilderMap(map, element, key, input) {\n if (input !== undefined) {\n const oldMap = map.get(element) ?? new Map();\n oldMap.set(key, input);\n map.set(element, oldMap);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet BaseDirective2 = /*#__PURE__*/(() => {\n class BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n this.elementRef = elementRef;\n this.styleBuilder = styleBuilder;\n this.styler = styler;\n this.marshal = marshal;\n this.DIRECTIVE_KEY = '';\n this.inputs = [];\n /** The most recently used styles for the builder */\n this.mru = {};\n this.destroySubject = new Subject();\n /** Cache map for style computation */\n this.styleCache = new Map();\n }\n /** Access to host element's parent DOM node */\n get parentElement() {\n return this.elementRef.nativeElement.parentElement;\n }\n /** Access to the HTMLElement for the directive */\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n /** Access to the activated value for the directive */\n get activatedValue() {\n return this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY);\n }\n set activatedValue(value) {\n this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, value, this.marshal.activatedAlias);\n }\n /** For @Input changes */\n ngOnChanges(changes) {\n Object.keys(changes).forEach(key => {\n if (this.inputs.indexOf(key) !== -1) {\n const bp = key.split('.').slice(1).join('.');\n const val = changes[key].currentValue;\n this.setValue(val, bp);\n }\n });\n }\n ngOnDestroy() {\n this.destroySubject.next();\n this.destroySubject.complete();\n this.marshal.releaseElement(this.nativeElement);\n }\n /** Register with central marshaller service */\n init(extraTriggers = []) {\n this.marshal.init(this.elementRef.nativeElement, this.DIRECTIVE_KEY, this.updateWithValue.bind(this), this.clearStyles.bind(this), extraTriggers);\n }\n /** Add styles to the element using predefined style builder */\n addStyles(input, parent) {\n const builder = this.styleBuilder;\n const useCache = builder.shouldCache;\n let genStyles = this.styleCache.get(input);\n if (!genStyles || !useCache) {\n genStyles = builder.buildStyles(input, parent);\n if (useCache) {\n this.styleCache.set(input, genStyles);\n }\n }\n this.mru = {\n ...genStyles\n };\n this.applyStyleToElement(genStyles);\n builder.sideEffect(input, genStyles, parent);\n }\n /** Remove generated styles from an element using predefined style builder */\n clearStyles() {\n Object.keys(this.mru).forEach(k => {\n this.mru[k] = '';\n });\n this.applyStyleToElement(this.mru);\n this.mru = {};\n this.currentValue = undefined;\n }\n /** Force trigger style updates on DOM element */\n triggerUpdate() {\n this.marshal.triggerUpdate(this.nativeElement, this.DIRECTIVE_KEY);\n }\n /**\n * Determine the DOM element's Flexbox flow (flex-direction).\n *\n * Check inline style first then check computed (stylesheet) style.\n * And optionally add the flow value to element's inline style.\n */\n getFlexFlowDirection(target, addIfMissing = false) {\n if (target) {\n const [value, hasInlineValue] = this.styler.getFlowDirection(target);\n if (!hasInlineValue && addIfMissing) {\n const style = buildLayoutCSS(value);\n const elements = [target];\n this.styler.applyStyleToElements(style, elements);\n }\n return value.trim();\n }\n return 'row';\n }\n hasWrap(target) {\n return this.styler.hasWrap(target);\n }\n /** Applies styles given via string pair or object map to the directive element */\n applyStyleToElement(style, value, element = this.nativeElement) {\n this.styler.applyStyleToElement(element, style, value);\n }\n setValue(val, bp) {\n this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, val, bp);\n }\n updateWithValue(input) {\n if (this.currentValue !== input) {\n this.addStyles(input);\n this.currentValue = input;\n }\n }\n }\n BaseDirective2.ɵfac = function BaseDirective2_Factory(ɵt) {\n return new (ɵt || BaseDirective2)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(StyleBuilder), i0.ɵɵdirectiveInject(StyleUtils), i0.ɵɵdirectiveInject(MediaMarshaller));\n };\n BaseDirective2.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseDirective2,\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return BaseDirective2;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * MockMatchMedia mocks calls to the Window API matchMedia with a build of a simulated\n * MockMediaQueryListener. Methods are available to simulate an activation of a mediaQuery\n * range and to clearAll mediaQuery listeners.\n */\nlet MockMatchMedia = /*#__PURE__*/(() => {\n class MockMatchMedia extends MatchMedia {\n constructor(_zone, _platformId, _document, _breakpoints) {\n super(_zone, _platformId, _document);\n this._breakpoints = _breakpoints;\n this.autoRegisterQueries = true; // Used for testing BreakPoint registrations\n this.useOverlaps = false; // Allow fallback to overlapping mediaQueries\n }\n /** Easy method to clear all listeners for all mediaQueries */\n clearAll() {\n this.registry.forEach(mql => {\n mql.destroy();\n });\n this.registry.clear();\n this.useOverlaps = false;\n }\n /** Feature to support manual, simulated activation of a mediaQuery. */\n activate(mediaQuery, useOverlaps = this.useOverlaps) {\n mediaQuery = this._validateQuery(mediaQuery);\n if (useOverlaps || !this.isActive(mediaQuery)) {\n this._deactivateAll();\n this._registerMediaQuery(mediaQuery);\n this._activateWithOverlaps(mediaQuery, useOverlaps);\n }\n return this.hasActivated;\n }\n /** Converts an optional mediaQuery alias to a specific, valid mediaQuery */\n _validateQuery(queryOrAlias) {\n const bp = this._breakpoints.findByAlias(queryOrAlias);\n return bp?.mediaQuery ?? queryOrAlias;\n }\n /**\n * Manually onMediaChange any overlapping mediaQueries to simulate\n * similar functionality in the window.matchMedia()\n */\n _activateWithOverlaps(mediaQuery, useOverlaps) {\n if (useOverlaps) {\n const bp = this._breakpoints.findByQuery(mediaQuery);\n const alias = bp?.alias ?? 'unknown';\n // Simulate activation of overlapping lt- ranges\n switch (alias) {\n case 'lg':\n this._activateByAlias(['lt-xl']);\n break;\n case 'md':\n this._activateByAlias(['lt-xl', 'lt-lg']);\n break;\n case 'sm':\n this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md']);\n break;\n case 'xs':\n this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md', 'lt-sm']);\n break;\n }\n // Simulate activation of overlapping gt- mediaQuery ranges\n switch (alias) {\n case 'xl':\n this._activateByAlias(['gt-lg', 'gt-md', 'gt-sm', 'gt-xs']);\n break;\n case 'lg':\n this._activateByAlias(['gt-md', 'gt-sm', 'gt-xs']);\n break;\n case 'md':\n this._activateByAlias(['gt-sm', 'gt-xs']);\n break;\n case 'sm':\n this._activateByAlias(['gt-xs']);\n break;\n }\n }\n // Activate last since the responsiveActivation is watching *this* mediaQuery\n return this._activateByQuery(mediaQuery);\n }\n /**\n *\n */\n _activateByAlias(aliases) {\n const activate = alias => {\n const bp = this._breakpoints.findByAlias(alias);\n this._activateByQuery(bp?.mediaQuery ?? alias);\n };\n aliases.forEach(activate);\n }\n /**\n *\n */\n _activateByQuery(mediaQuery) {\n if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n this._registerMediaQuery(mediaQuery);\n }\n const mql = this.registry.get(mediaQuery);\n if (mql && !this.isActive(mediaQuery)) {\n this.registry.set(mediaQuery, mql.activate());\n }\n return this.hasActivated;\n }\n /** Deactivate all current MQLs and reset the buffer */\n _deactivateAll() {\n this.registry.forEach(it => {\n it.deactivate();\n });\n return this;\n }\n /** Insure the mediaQuery is registered with MatchMedia */\n _registerMediaQuery(mediaQuery) {\n if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n this.registerQuery(mediaQuery);\n }\n }\n /**\n * Call window.matchMedia() to build a MediaQueryList; which\n * supports 0..n listeners for activation/deactivation\n */\n buildMQL(query) {\n return new MockMediaQueryList(query);\n }\n get hasActivated() {\n return this.activations.length > 0;\n }\n }\n MockMatchMedia.ɵfac = function MockMatchMedia_Factory(ɵt) {\n return new (ɵt || MockMatchMedia)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(BreakPointRegistry));\n };\n MockMatchMedia.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MockMatchMedia,\n factory: MockMatchMedia.ɵfac\n });\n return MockMatchMedia;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Special internal class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nclass MockMediaQueryList extends EventTarget {\n constructor(_mediaQuery) {\n super();\n this._mediaQuery = _mediaQuery;\n this._isActive = false;\n this._listeners = [];\n this.onchange = null;\n }\n get matches() {\n return this._isActive;\n }\n get media() {\n return this._mediaQuery;\n }\n /**\n * Destroy the current list by deactivating the\n * listeners and clearing the internal list\n */\n destroy() {\n this.deactivate();\n this._listeners = [];\n }\n /** Notify all listeners that 'matches === TRUE' */\n activate() {\n if (!this._isActive) {\n this._isActive = true;\n this._listeners.forEach(callback => {\n const cb = callback;\n cb.call(this, {\n matches: this.matches,\n media: this.media\n });\n });\n }\n return this;\n }\n /** Notify all listeners that 'matches === false' */\n deactivate() {\n if (this._isActive) {\n this._isActive = false;\n this._listeners.forEach(callback => {\n const cb = callback;\n cb.call(this, {\n matches: this.matches,\n media: this.media\n });\n });\n }\n return this;\n }\n /** Add a listener to our internal list to activate later */\n addListener(listener) {\n if (this._listeners.indexOf(listener) === -1) {\n this._listeners.push(listener);\n }\n if (this._isActive) {\n const cb = listener;\n cb.call(this, {\n matches: this.matches,\n media: this.media\n });\n }\n }\n /** Don't need to remove listeners in the testing environment */\n removeListener(_) {}\n dispatchEvent(_) {\n return false;\n }\n}\n/**\n * Pre-configured provider for MockMatchMedia\n */\nconst MockMatchMediaProvider = {\n provide: MatchMedia,\n useClass: MockMatchMedia\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Wraps the provided value in an array, unless the provided value is an array. */\nfunction coerceArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * MediaObserver enables applications to listen for 1..n mediaQuery activations and to determine\n * if a mediaQuery is currently activated.\n *\n * Since a breakpoint change will first deactivate 1...n mediaQueries and then possibly activate\n * 1..n mediaQueries, the MediaObserver will debounce notifications and report ALL *activations*\n * in 1 event notification. The reported activations will be sorted in descending priority order.\n *\n * This class uses the BreakPoint Registry to inject alias information into the raw MediaChange\n * notification. For custom mediaQuery notifications, alias information will not be injected and\n * those fields will be ''.\n *\n * Note: Developers should note that only mediaChange activations (not de-activations)\n * are announced by the MediaObserver.\n *\n * @usage\n *\n * // RxJS\n * import { filter } from 'rxjs/operators';\n * import { MediaObserver } from '@angular/flex-layout';\n *\n * @Component({ ... })\n * export class AppComponent {\n * status: string = '';\n *\n * constructor(mediaObserver: MediaObserver) {\n * const media$ = mediaObserver.asObservable().pipe(\n * filter((changes: MediaChange[]) => true) // silly noop filter\n * );\n *\n * media$.subscribe((changes: MediaChange[]) => {\n * let status = '';\n * changes.forEach( change => {\n * status += `'${change.mqAlias}' = (${change.mediaQuery}) ` ;\n * });\n * this.status = status;\n * });\n *\n * }\n * }\n */\nlet MediaObserver = /*#__PURE__*/(() => {\n class MediaObserver {\n constructor(breakpoints, matchMedia, hook) {\n this.breakpoints = breakpoints;\n this.matchMedia = matchMedia;\n this.hook = hook;\n /** Filter MediaChange notifications for overlapping breakpoints */\n this.filterOverlaps = false;\n this.destroyed$ = new Subject();\n this._media$ = this.watchActivations();\n }\n /**\n * Completes the active subject, signalling to all complete for all\n * MediaObserver subscribers\n */\n ngOnDestroy() {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n // ************************************************\n // Public Methods\n // ************************************************\n /**\n * Observe changes to current activation 'list'\n */\n asObservable() {\n return this._media$;\n }\n /**\n * Allow programmatic query to determine if one or more media query/alias match\n * the current viewport size.\n * @param value One or more media queries (or aliases) to check.\n * @returns Whether any of the media queries match.\n */\n isActive(value) {\n const aliases = splitQueries(coerceArray(value));\n return aliases.some(alias => {\n const query = toMediaQuery(alias, this.breakpoints);\n return query !== null && this.matchMedia.isActive(query);\n });\n }\n // ************************************************\n // Internal Methods\n // ************************************************\n /**\n * Register all the mediaQueries registered in the BreakPointRegistry\n * This is needed so subscribers can be auto-notified of all standard, registered\n * mediaQuery activations\n */\n watchActivations() {\n const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n return this.buildObservable(queries);\n }\n /**\n * Only pass/announce activations (not de-activations)\n *\n * Since multiple-mediaQueries can be activation in a cycle,\n * gather all current activations into a single list of changes to observers\n *\n * Inject associated (if any) alias information into the MediaChange event\n * - Exclude mediaQuery activations for overlapping mQs. List bounded mQ ranges only\n * - Exclude print activations that do not have an associated mediaQuery\n *\n * NOTE: the raw MediaChange events [from MatchMedia] do not\n * contain important alias information; as such this info\n * must be injected into the MediaChange\n */\n buildObservable(mqList) {\n const hasChanges = changes => {\n const isValidQuery = change => change.mediaQuery.length > 0;\n return changes.filter(isValidQuery).length > 0;\n };\n const excludeOverlaps = changes => {\n return !this.filterOverlaps ? changes : changes.filter(change => {\n const bp = this.breakpoints.findByQuery(change.mediaQuery);\n return bp?.overlapping ?? true;\n });\n };\n const ignoreDuplicates = (previous, current) => {\n if (previous.length !== current.length) {\n return false;\n }\n const previousMqs = previous.map(mc => mc.mediaQuery);\n const currentMqs = new Set(current.map(mc => mc.mediaQuery));\n const difference = new Set(previousMqs.filter(mq => !currentMqs.has(mq)));\n return difference.size === 0;\n };\n /**\n */\n return this.matchMedia.observe(this.hook.withPrintQuery(mqList)).pipe(filter(change => change.matches), debounceTime(0, asapScheduler), switchMap(_ => of(this.findAllActivations())), map(excludeOverlaps), filter(hasChanges), distinctUntilChanged(ignoreDuplicates), takeUntil(this.destroyed$));\n }\n /**\n * Find all current activations and prepare single list of activations\n * sorted by descending priority.\n */\n findAllActivations() {\n const mergeMQAlias = change => {\n const bp = this.breakpoints.findByQuery(change.mediaQuery);\n return mergeAlias(change, bp);\n };\n const replaceWithPrintAlias = change => this.hook.isPrintEvent(change) ? this.hook.updateEvent(change) : change;\n return this.matchMedia.activations.map(query => new MediaChange(true, query)).map(replaceWithPrintAlias).map(mergeMQAlias).sort(sortDescendingPriority);\n }\n }\n MediaObserver.ɵfac = function MediaObserver_Factory(ɵt) {\n return new (ɵt || MediaObserver)(i0.ɵɵinject(BreakPointRegistry), i0.ɵɵinject(MatchMedia), i0.ɵɵinject(PrintHook));\n };\n MediaObserver.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MediaObserver,\n factory: MediaObserver.ɵfac,\n providedIn: 'root'\n });\n return MediaObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Find associated breakpoint (if any)\n */\nfunction toMediaQuery(query, locator) {\n const bp = locator.findByAlias(query) ?? locator.findByQuery(query);\n return bp?.mediaQuery ?? null;\n}\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries) {\n return queries.flatMap(query => query.split(',')).map(query => query.trim());\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class\n */\nlet MediaTrigger = /*#__PURE__*/(() => {\n class MediaTrigger {\n constructor(breakpoints, matchMedia, layoutConfig, _platformId, _document) {\n this.breakpoints = breakpoints;\n this.matchMedia = matchMedia;\n this.layoutConfig = layoutConfig;\n this._platformId = _platformId;\n this._document = _document;\n this.hasCachedRegistryMatches = false;\n this.originalActivations = [];\n this.originalRegistry = new Map();\n }\n /**\n * Manually activate range of breakpoints\n * @param list array of mediaQuery or alias strings\n */\n activate(list) {\n list = list.map(it => it.trim()); // trim queries\n this.saveActivations();\n this.deactivateAll();\n this.setActivations(list);\n this.prepareAutoRestore();\n }\n /**\n * Restore original, 'real' breakpoints and emit events\n * to trigger stream notification\n */\n restore() {\n if (this.hasCachedRegistryMatches) {\n const extractQuery = change => change.mediaQuery;\n const list = this.originalActivations.map(extractQuery);\n try {\n this.deactivateAll();\n this.restoreRegistryMatches();\n this.setActivations(list);\n } finally {\n this.originalActivations = [];\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n }\n }\n // ************************************************\n // Internal Methods\n // ************************************************\n /**\n * Whenever window resizes, immediately auto-restore original\n * activations (if we are simulating activations)\n */\n prepareAutoRestore() {\n const isBrowser = isPlatformBrowser(this._platformId) && this._document;\n const enableAutoRestore = isBrowser && this.layoutConfig.mediaTriggerAutoRestore;\n if (enableAutoRestore) {\n const resize$ = fromEvent(window, 'resize').pipe(take(1));\n this.resizeSubscription = resize$.subscribe(this.restore.bind(this));\n }\n }\n /**\n * Notify all matchMedia subscribers of de-activations\n *\n * Note: we must force 'matches' updates for\n * future matchMedia::activation lookups\n */\n deactivateAll() {\n const list = this.currentActivations;\n this.forceRegistryMatches(list, false);\n this.simulateMediaChanges(list, false);\n }\n /**\n * Cache current activations as sorted, prioritized list of MediaChanges\n */\n saveActivations() {\n if (!this.hasCachedRegistryMatches) {\n const toMediaChange = query => new MediaChange(true, query);\n const mergeMQAlias = change => {\n const bp = this.breakpoints.findByQuery(change.mediaQuery);\n return mergeAlias(change, bp);\n };\n this.originalActivations = this.currentActivations.map(toMediaChange).map(mergeMQAlias).sort(sortDescendingPriority);\n this.cacheRegistryMatches();\n }\n }\n /**\n * Force set manual activations for specified mediaQuery list\n */\n setActivations(list) {\n if (!!this.originalRegistry) {\n this.forceRegistryMatches(list, true);\n }\n this.simulateMediaChanges(list);\n }\n /**\n * For specified mediaQuery list manually simulate activations or deactivations\n */\n simulateMediaChanges(queries, matches = true) {\n const toMediaQuery = query => {\n const locator = this.breakpoints;\n const bp = locator.findByAlias(query) || locator.findByQuery(query);\n return bp ? bp.mediaQuery : query;\n };\n const emitChangeEvent = query => this.emitChangeEvent(matches, query);\n queries.map(toMediaQuery).forEach(emitChangeEvent);\n }\n /**\n * Replace current registry with simulated registry...\n * Note: this is required since MediaQueryList::matches is 'readOnly'\n */\n forceRegistryMatches(queries, matches) {\n const registry = new Map();\n queries.forEach(query => {\n registry.set(query, {\n matches\n });\n });\n this.matchMedia.registry = registry;\n }\n /**\n * Save current MatchMedia::registry items.\n */\n cacheRegistryMatches() {\n const target = this.originalRegistry;\n target.clear();\n this.matchMedia.registry.forEach((value, key) => {\n target.set(key, value);\n });\n this.hasCachedRegistryMatches = true;\n }\n /**\n * Restore original, 'true' registry\n */\n restoreRegistryMatches() {\n const target = this.matchMedia.registry;\n target.clear();\n this.originalRegistry.forEach((value, key) => {\n target.set(key, value);\n });\n this.originalRegistry.clear();\n this.hasCachedRegistryMatches = false;\n }\n /**\n * Manually emit a MediaChange event via the MatchMedia to MediaMarshaller and MediaObserver\n */\n emitChangeEvent(matches, query) {\n this.matchMedia.source.next(new MediaChange(matches, query));\n }\n get currentActivations() {\n return this.matchMedia.activations;\n }\n }\n MediaTrigger.ɵfac = function MediaTrigger_Factory(ɵt) {\n return new (ɵt || MediaTrigger)(i0.ɵɵinject(BreakPointRegistry), i0.ɵɵinject(MatchMedia), i0.ɵɵinject(LAYOUT_CONFIG), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(DOCUMENT));\n };\n MediaTrigger.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MediaTrigger,\n factory: MediaTrigger.ɵfac,\n providedIn: 'root'\n });\n return MediaTrigger;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n* The flex API permits 3 or 1 parts of the value:\n* - `flex-grow flex-shrink flex-basis`, or\n* - `flex-basis`\n*/\nfunction validateBasis(basis, grow = '1', shrink = '1') {\n let parts = [grow, shrink, basis];\n let j = basis.indexOf('calc');\n if (j > 0) {\n parts[2] = _validateCalcValue(basis.substring(j).trim());\n let matches = basis.substr(0, j).trim().split(' ');\n if (matches.length == 2) {\n parts[0] = matches[0];\n parts[1] = matches[1];\n }\n } else if (j == 0) {\n parts[2] = _validateCalcValue(basis.trim());\n } else {\n let matches = basis.split(' ');\n parts = matches.length === 3 ? matches : [grow, shrink, basis];\n }\n return parts;\n}\n/**\n * Calc expressions require whitespace before & after any expression operators\n * This is a simple, crude whitespace padding solution.\n * - '3 3 calc(15em + 20px)'\n * - calc(100% / 7 * 2)\n * - 'calc(15em + 20px)'\n * - 'calc(15em+20px)'\n * - '37px'\n * = '43%'\n */\nfunction _validateCalcValue(calc) {\n return calc.replace(/[\\s]/g, '').replace(/[\\/\\*\\+\\-]/g, ' $& ');\n}\nconst MULTIPLIER_SUFFIX = 'x';\nfunction multiply(value, multiplier) {\n if (multiplier === undefined) {\n return value;\n }\n const transformValue = possibleValue => {\n const numberValue = +possibleValue.slice(0, -MULTIPLIER_SUFFIX.length);\n if (value.endsWith(MULTIPLIER_SUFFIX) && !isNaN(numberValue)) {\n return `${numberValue * multiplier.value}${multiplier.unit}`;\n }\n return value;\n };\n return value.includes(' ') ? value.split(' ').map(transformValue).join(' ') : transformValue(value);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BREAKPOINT, BREAKPOINTS, BREAKPOINT_PRINT, BROWSER_PROVIDER, BaseDirective2, BreakPointRegistry, CLASS_NAME, CoreModule, DEFAULT_BREAKPOINTS, DEFAULT_CONFIG, LAYOUT_CONFIG, MediaChange, MediaMarshaller, MediaObserver, MediaTrigger, ORIENTATION_BREAKPOINTS, PrintHook, SERVER_TOKEN, ScreenTypes, StyleBuilder, StyleUtils, StylesheetMap, coerceArray, mergeAlias, removeStyles, sortAscendingPriority, sortDescendingPriority, validateBasis, MatchMedia as ɵMatchMedia, MockMatchMedia as ɵMockMatchMedia, MockMatchMediaProvider as ɵMockMatchMediaProvider, multiply as ɵmultiply };\n","import * as i0 from '@angular/core';\nimport { Injectable, Directive, Inject, Input, NgModule } from '@angular/core';\nimport * as i2 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport * as i1 from '@angular/flex-layout/core';\nimport { StyleBuilder, BaseDirective2, LAYOUT_CONFIG, ɵmultiply, validateBasis, CoreModule } from '@angular/flex-layout/core';\nimport { buildLayoutCSS, LAYOUT_VALUES, isFlowHorizontal, extendObject } from '@angular/flex-layout/_private-utils';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet LayoutStyleBuilder = /*#__PURE__*/(() => {\n class LayoutStyleBuilder extends StyleBuilder {\n buildStyles(input, {\n display\n }) {\n const css = buildLayoutCSS(input);\n return {\n ...css,\n display: display === 'none' ? display : css.display\n };\n }\n }\n LayoutStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵLayoutStyleBuilder_BaseFactory;\n return function LayoutStyleBuilder_Factory(ɵt) {\n return (ɵLayoutStyleBuilder_BaseFactory || (ɵLayoutStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(LayoutStyleBuilder)))(ɵt || LayoutStyleBuilder);\n };\n })();\n LayoutStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LayoutStyleBuilder,\n factory: LayoutStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return LayoutStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$6 = ['fxLayout', 'fxLayout.xs', 'fxLayout.sm', 'fxLayout.md', 'fxLayout.lg', 'fxLayout.xl', 'fxLayout.lt-sm', 'fxLayout.lt-md', 'fxLayout.lt-lg', 'fxLayout.lt-xl', 'fxLayout.gt-xs', 'fxLayout.gt-sm', 'fxLayout.gt-md', 'fxLayout.gt-lg'];\nconst selector$6 = `\n [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md],\n [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md],\n [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm],\n [fxLayout.gt-md], [fxLayout.gt-lg]\n`;\n/**\n * 'layout' flexbox styling directive\n * Defines the positioning flow direction for the child elements: row or column\n * Optional values: column or row (default)\n * @see https://css-tricks.com/almanac/properties/f/flex-direction/\n *\n */\nlet LayoutDirective = /*#__PURE__*/(() => {\n class LayoutDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal, _config) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this._config = _config;\n this.DIRECTIVE_KEY = 'layout';\n this.init();\n }\n updateWithValue(input) {\n const detectLayoutDisplay = this._config.detectLayoutDisplay;\n const display = detectLayoutDisplay ? this.styler.lookupStyle(this.nativeElement, 'display') : '';\n this.styleCache = cacheMap.get(display) ?? new Map();\n cacheMap.set(display, this.styleCache);\n if (this.currentValue !== input) {\n this.addStyles(input, {\n display\n });\n this.currentValue = input;\n }\n }\n }\n LayoutDirective.ɵfac = function LayoutDirective_Factory(ɵt) {\n return new (ɵt || LayoutDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(LayoutStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(LAYOUT_CONFIG));\n };\n LayoutDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: LayoutDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return LayoutDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultLayoutDirective = /*#__PURE__*/(() => {\n class DefaultLayoutDirective extends LayoutDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$6;\n }\n }\n DefaultLayoutDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultLayoutDirective_BaseFactory;\n return function DefaultLayoutDirective_Factory(ɵt) {\n return (ɵDefaultLayoutDirective_BaseFactory || (ɵDefaultLayoutDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultLayoutDirective)))(ɵt || DefaultLayoutDirective);\n };\n })();\n DefaultLayoutDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultLayoutDirective,\n selectors: [[\"\", \"fxLayout\", \"\"], [\"\", \"fxLayout.xs\", \"\"], [\"\", \"fxLayout.sm\", \"\"], [\"\", \"fxLayout.md\", \"\"], [\"\", \"fxLayout.lg\", \"\"], [\"\", \"fxLayout.xl\", \"\"], [\"\", \"fxLayout.lt-sm\", \"\"], [\"\", \"fxLayout.lt-md\", \"\"], [\"\", \"fxLayout.lt-lg\", \"\"], [\"\", \"fxLayout.lt-xl\", \"\"], [\"\", \"fxLayout.gt-xs\", \"\"], [\"\", \"fxLayout.gt-sm\", \"\"], [\"\", \"fxLayout.gt-md\", \"\"], [\"\", \"fxLayout.gt-lg\", \"\"]],\n inputs: {\n fxLayout: \"fxLayout\",\n \"fxLayout.xs\": \"fxLayout.xs\",\n \"fxLayout.sm\": \"fxLayout.sm\",\n \"fxLayout.md\": \"fxLayout.md\",\n \"fxLayout.lg\": \"fxLayout.lg\",\n \"fxLayout.xl\": \"fxLayout.xl\",\n \"fxLayout.lt-sm\": \"fxLayout.lt-sm\",\n \"fxLayout.lt-md\": \"fxLayout.lt-md\",\n \"fxLayout.lt-lg\": \"fxLayout.lt-lg\",\n \"fxLayout.lt-xl\": \"fxLayout.lt-xl\",\n \"fxLayout.gt-xs\": \"fxLayout.gt-xs\",\n \"fxLayout.gt-sm\": \"fxLayout.gt-sm\",\n \"fxLayout.gt-md\": \"fxLayout.gt-md\",\n \"fxLayout.gt-lg\": \"fxLayout.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultLayoutDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst cacheMap = /*#__PURE__*/new Map();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst CLEAR_MARGIN_CSS = {\n 'margin-left': null,\n 'margin-right': null,\n 'margin-top': null,\n 'margin-bottom': null\n};\nlet LayoutGapStyleBuilder = /*#__PURE__*/(() => {\n class LayoutGapStyleBuilder extends StyleBuilder {\n constructor(_styler, _config) {\n super();\n this._styler = _styler;\n this._config = _config;\n }\n buildStyles(gapValue, parent) {\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n gapValue = ɵmultiply(gapValue, this._config.multiplier);\n // Add the margin to the host element\n return buildGridMargin(gapValue, parent.directionality);\n } else {\n return {};\n }\n }\n sideEffect(gapValue, _styles, parent) {\n const items = parent.items;\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n gapValue = ɵmultiply(gapValue, this._config.multiplier);\n // For each `element` children, set the padding\n const paddingStyles = buildGridPadding(gapValue, parent.directionality);\n this._styler.applyStyleToElements(paddingStyles, parent.items);\n } else {\n gapValue = ɵmultiply(gapValue, this._config.multiplier);\n gapValue = this.addFallbackUnit(gapValue);\n const lastItem = items.pop();\n // For each `element` children EXCEPT the last,\n // set the margin right/bottom styles...\n const gapCss = buildGapCSS(gapValue, parent);\n this._styler.applyStyleToElements(gapCss, items);\n // Clear all gaps for all visible elements\n this._styler.applyStyleToElements(CLEAR_MARGIN_CSS, [lastItem]);\n }\n }\n addFallbackUnit(value) {\n return !isNaN(+value) ? `${value}${this._config.defaultUnit}` : value;\n }\n }\n LayoutGapStyleBuilder.ɵfac = function LayoutGapStyleBuilder_Factory(ɵt) {\n return new (ɵt || LayoutGapStyleBuilder)(i0.ɵɵinject(i1.StyleUtils), i0.ɵɵinject(LAYOUT_CONFIG));\n };\n LayoutGapStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LayoutGapStyleBuilder,\n factory: LayoutGapStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return LayoutGapStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$5 = ['fxLayoutGap', 'fxLayoutGap.xs', 'fxLayoutGap.sm', 'fxLayoutGap.md', 'fxLayoutGap.lg', 'fxLayoutGap.xl', 'fxLayoutGap.lt-sm', 'fxLayoutGap.lt-md', 'fxLayoutGap.lt-lg', 'fxLayoutGap.lt-xl', 'fxLayoutGap.gt-xs', 'fxLayoutGap.gt-sm', 'fxLayoutGap.gt-md', 'fxLayoutGap.gt-lg'];\nconst selector$5 = `\n [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md],\n [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md],\n [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm],\n [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]\n`;\n/**\n * 'layout-padding' styling directive\n * Defines padding of child elements in a layout container\n */\nlet LayoutGapDirective = /*#__PURE__*/(() => {\n class LayoutGapDirective extends BaseDirective2 {\n constructor(elRef, zone, directionality, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.zone = zone;\n this.directionality = directionality;\n this.styleUtils = styleUtils;\n this.layout = 'row'; // default flex-direction\n this.DIRECTIVE_KEY = 'layout-gap';\n this.observerSubject = new Subject();\n const extraTriggers = [this.directionality.change, this.observerSubject.asObservable()];\n this.init(extraTriggers);\n this.marshal.trackValue(this.nativeElement, 'layout').pipe(takeUntil(this.destroySubject)).subscribe(this.onLayoutChange.bind(this));\n }\n /** Special accessor to query for all child 'element' nodes regardless of type, class, etc */\n get childrenNodes() {\n const obj = this.nativeElement.children;\n const buffer = [];\n // iterate backwards ensuring that length is an UInt32\n for (let i = obj.length; i--;) {\n buffer[i] = obj[i];\n }\n return buffer;\n }\n // *********************************************\n // Lifecycle Methods\n // *********************************************\n ngAfterContentInit() {\n this.buildChildObservable();\n this.triggerUpdate();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * Cache the parent container 'flex-direction' and update the 'margin' styles\n */\n onLayoutChange(matcher) {\n const layout = matcher.value;\n // Make sure to filter out 'wrap' option\n const direction = layout.split(' ');\n this.layout = direction[0];\n if (!LAYOUT_VALUES.find(x => x === this.layout)) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n /**\n *\n */\n updateWithValue(value) {\n // Gather all non-hidden Element nodes\n const items = this.childrenNodes.filter(el => el.nodeType === 1 && this.willDisplay(el)).sort((a, b) => {\n const orderA = +this.styler.lookupStyle(a, 'order');\n const orderB = +this.styler.lookupStyle(b, 'order');\n if (isNaN(orderA) || isNaN(orderB) || orderA === orderB) {\n return 0;\n } else {\n return orderA > orderB ? 1 : -1;\n }\n });\n if (items.length > 0) {\n const directionality = this.directionality.value;\n const layout = this.layout;\n if (layout === 'row' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheRowRtl;\n } else if (layout === 'row' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheRowLtr;\n } else if (layout === 'column' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheColumnRtl;\n } else if (layout === 'column' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheColumnLtr;\n }\n this.addStyles(value, {\n directionality,\n items,\n layout\n });\n }\n }\n /** We need to override clearStyles because in most cases mru isn't populated */\n clearStyles() {\n const gridMode = Object.keys(this.mru).length > 0;\n const childrenStyle = gridMode ? 'padding' : getMarginType(this.directionality.value, this.layout);\n // If there are styles on the parent remove them\n if (gridMode) {\n super.clearStyles();\n }\n // Then remove the children styles too\n this.styleUtils.applyStyleToElements({\n [childrenStyle]: ''\n }, this.childrenNodes);\n }\n /** Determine if an element will show or hide based on current activation */\n willDisplay(source) {\n const value = this.marshal.getValue(source, 'show-hide');\n return value === true || value === undefined && this.styleUtils.lookupStyle(source, 'display') !== 'none';\n }\n buildChildObservable() {\n this.zone.runOutsideAngular(() => {\n if (typeof MutationObserver !== 'undefined') {\n this.observer = new MutationObserver(mutations => {\n const validatedChanges = it => {\n return it.addedNodes && it.addedNodes.length > 0 || it.removedNodes && it.removedNodes.length > 0;\n };\n // update gap styles only for child 'added' or 'removed' events\n if (mutations.some(validatedChanges)) {\n this.observerSubject.next();\n }\n });\n this.observer.observe(this.nativeElement, {\n childList: true\n });\n }\n });\n }\n }\n LayoutGapDirective.ɵfac = function LayoutGapDirective_Factory(ɵt) {\n return new (ɵt || LayoutGapDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.Directionality), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(LayoutGapStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n LayoutGapDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: LayoutGapDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return LayoutGapDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultLayoutGapDirective = /*#__PURE__*/(() => {\n class DefaultLayoutGapDirective extends LayoutGapDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$5;\n }\n }\n DefaultLayoutGapDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultLayoutGapDirective_BaseFactory;\n return function DefaultLayoutGapDirective_Factory(ɵt) {\n return (ɵDefaultLayoutGapDirective_BaseFactory || (ɵDefaultLayoutGapDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultLayoutGapDirective)))(ɵt || DefaultLayoutGapDirective);\n };\n })();\n DefaultLayoutGapDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultLayoutGapDirective,\n selectors: [[\"\", \"fxLayoutGap\", \"\"], [\"\", \"fxLayoutGap.xs\", \"\"], [\"\", \"fxLayoutGap.sm\", \"\"], [\"\", \"fxLayoutGap.md\", \"\"], [\"\", \"fxLayoutGap.lg\", \"\"], [\"\", \"fxLayoutGap.xl\", \"\"], [\"\", \"fxLayoutGap.lt-sm\", \"\"], [\"\", \"fxLayoutGap.lt-md\", \"\"], [\"\", \"fxLayoutGap.lt-lg\", \"\"], [\"\", \"fxLayoutGap.lt-xl\", \"\"], [\"\", \"fxLayoutGap.gt-xs\", \"\"], [\"\", \"fxLayoutGap.gt-sm\", \"\"], [\"\", \"fxLayoutGap.gt-md\", \"\"], [\"\", \"fxLayoutGap.gt-lg\", \"\"]],\n inputs: {\n fxLayoutGap: \"fxLayoutGap\",\n \"fxLayoutGap.xs\": \"fxLayoutGap.xs\",\n \"fxLayoutGap.sm\": \"fxLayoutGap.sm\",\n \"fxLayoutGap.md\": \"fxLayoutGap.md\",\n \"fxLayoutGap.lg\": \"fxLayoutGap.lg\",\n \"fxLayoutGap.xl\": \"fxLayoutGap.xl\",\n \"fxLayoutGap.lt-sm\": \"fxLayoutGap.lt-sm\",\n \"fxLayoutGap.lt-md\": \"fxLayoutGap.lt-md\",\n \"fxLayoutGap.lt-lg\": \"fxLayoutGap.lt-lg\",\n \"fxLayoutGap.lt-xl\": \"fxLayoutGap.lt-xl\",\n \"fxLayoutGap.gt-xs\": \"fxLayoutGap.gt-xs\",\n \"fxLayoutGap.gt-sm\": \"fxLayoutGap.gt-sm\",\n \"fxLayoutGap.gt-md\": \"fxLayoutGap.gt-md\",\n \"fxLayoutGap.gt-lg\": \"fxLayoutGap.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultLayoutGapDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst layoutGapCacheRowRtl = /*#__PURE__*/new Map();\nconst layoutGapCacheColumnRtl = /*#__PURE__*/new Map();\nconst layoutGapCacheRowLtr = /*#__PURE__*/new Map();\nconst layoutGapCacheColumnLtr = /*#__PURE__*/new Map();\nconst GRID_SPECIFIER = ' grid';\nfunction buildGridPadding(value, directionality) {\n const [between, below] = value.split(' ');\n const bottom = below ?? between;\n let paddingRight = '0px',\n paddingBottom = bottom,\n paddingLeft = '0px';\n if (directionality === 'rtl') {\n paddingLeft = between;\n } else {\n paddingRight = between;\n }\n return {\n 'padding': `0px ${paddingRight} ${paddingBottom} ${paddingLeft}`\n };\n}\nfunction buildGridMargin(value, directionality) {\n const [between, below] = value.split(' ');\n const bottom = below ?? between;\n const minus = str => `-${str}`;\n let marginRight = '0px',\n marginBottom = minus(bottom),\n marginLeft = '0px';\n if (directionality === 'rtl') {\n marginLeft = minus(between);\n } else {\n marginRight = minus(between);\n }\n return {\n 'margin': `0px ${marginRight} ${marginBottom} ${marginLeft}`\n };\n}\nfunction getMarginType(directionality, layout) {\n switch (layout) {\n case 'column':\n return 'margin-bottom';\n case 'column-reverse':\n return 'margin-top';\n case 'row':\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n case 'row-reverse':\n return directionality === 'rtl' ? 'margin-right' : 'margin-left';\n default:\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n }\n}\nfunction buildGapCSS(gapValue, parent) {\n const key = getMarginType(parent.directionality, parent.layout);\n const margins = {\n ...CLEAR_MARGIN_CSS\n };\n margins[key] = gapValue;\n return margins;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet FlexStyleBuilder = /*#__PURE__*/(() => {\n class FlexStyleBuilder extends StyleBuilder {\n constructor(layoutConfig) {\n super();\n this.layoutConfig = layoutConfig;\n }\n buildStyles(input, parent) {\n let [grow, shrink, ...basisParts] = input.split(' ');\n let basis = basisParts.join(' ');\n // The flex-direction of this element's flex container. Defaults to 'row'.\n const direction = parent.direction.indexOf('column') > -1 ? 'column' : 'row';\n const max = isFlowHorizontal(direction) ? 'max-width' : 'max-height';\n const min = isFlowHorizontal(direction) ? 'min-width' : 'min-height';\n const hasCalc = String(basis).indexOf('calc') > -1;\n const usingCalc = hasCalc || basis === 'auto';\n const isPercent = String(basis).indexOf('%') > -1 && !hasCalc;\n const hasUnits = String(basis).indexOf('px') > -1 || String(basis).indexOf('rem') > -1 || String(basis).indexOf('em') > -1 || String(basis).indexOf('vw') > -1 || String(basis).indexOf('vh') > -1;\n let isValue = hasCalc || hasUnits;\n grow = grow == '0' ? 0 : grow;\n shrink = shrink == '0' ? 0 : shrink;\n // make box inflexible when shrink and grow are both zero\n // should not set a min when the grow is zero\n // should not set a max when the shrink is zero\n const isFixed = !grow && !shrink;\n let css = {};\n // flex-basis allows you to specify the initial/starting main-axis size of the element,\n // before anything else is computed. It can either be a percentage or an absolute value.\n // It is, however, not the breaking point for flex-grow/shrink properties\n //\n // flex-grow can be seen as this:\n // 0: Do not stretch. Either size to element's content width, or obey 'flex-basis'.\n // 1: (Default value). Stretch; will be the same size to all other flex items on\n // the same row since they have a default value of 1.\n // ≥2 (integer n): Stretch. Will be n times the size of other elements\n // with 'flex-grow: 1' on the same row.\n // Use `null` to clear existing styles.\n const clearStyles = {\n 'max-width': null,\n 'max-height': null,\n 'min-width': null,\n 'min-height': null\n };\n switch (basis || '') {\n case '':\n const useColumnBasisZero = this.layoutConfig.useColumnBasisZero !== false;\n basis = direction === 'row' ? '0%' : useColumnBasisZero ? '0.000000001px' : 'auto';\n break;\n case 'initial': // default\n case 'nogrow':\n grow = 0;\n basis = 'auto';\n break;\n case 'grow':\n basis = '100%';\n break;\n case 'noshrink':\n shrink = 0;\n basis = 'auto';\n break;\n case 'auto':\n break;\n case 'none':\n grow = 0;\n shrink = 0;\n basis = 'auto';\n break;\n default:\n // Defaults to percentage sizing unless `px` is explicitly set\n if (!isValue && !isPercent && !isNaN(basis)) {\n basis = basis + '%';\n }\n // Fix for issue 280\n if (basis === '0%') {\n isValue = true;\n }\n if (basis === '0px') {\n basis = '0%';\n }\n // fix issue #5345\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': isValue ? basis : '100%'\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${isValue ? basis : '100%'}`\n });\n }\n break;\n }\n if (!(css['flex'] || css['flex-grow'])) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n }\n // Fix for issues 277, 534, and 728\n if (basis !== '0%' && basis !== '0px' && basis !== '0.000000001px' && basis !== 'auto') {\n css[min] = isFixed || isValue && grow ? basis : null;\n css[max] = isFixed || !usingCalc && shrink ? basis : null;\n }\n // Fix for issue 528\n if (!css[min] && !css[max]) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n } else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n } else {\n // Fix for issue 660\n if (parent.hasWrap) {\n css[hasCalc ? 'flex-basis' : 'flex'] = css[max] ? hasCalc ? css[max] : `${grow} ${shrink} ${css[max]}` : hasCalc ? css[min] : `${grow} ${shrink} ${css[min]}`;\n }\n }\n return extendObject(css, {\n 'box-sizing': 'border-box'\n });\n }\n }\n FlexStyleBuilder.ɵfac = function FlexStyleBuilder_Factory(ɵt) {\n return new (ɵt || FlexStyleBuilder)(i0.ɵɵinject(LAYOUT_CONFIG));\n };\n FlexStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FlexStyleBuilder,\n factory: FlexStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return FlexStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$4 = ['fxFlex', 'fxFlex.xs', 'fxFlex.sm', 'fxFlex.md', 'fxFlex.lg', 'fxFlex.xl', 'fxFlex.lt-sm', 'fxFlex.lt-md', 'fxFlex.lt-lg', 'fxFlex.lt-xl', 'fxFlex.gt-xs', 'fxFlex.gt-sm', 'fxFlex.gt-md', 'fxFlex.gt-lg'];\nconst selector$4 = `\n [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md],\n [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md],\n [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm],\n [fxFlex.gt-md], [fxFlex.gt-lg]\n`;\n/**\n * Directive to control the size of a flex item using flex-basis, flex-grow, and flex-shrink.\n * Corresponds to the css `flex` shorthand property.\n *\n * @see https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n */\nlet FlexDirective = /*#__PURE__*/(() => {\n class FlexDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, layoutConfig, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.layoutConfig = layoutConfig;\n this.marshal = marshal;\n this.DIRECTIVE_KEY = 'flex';\n this.direction = undefined;\n this.wrap = undefined;\n this.flexGrow = '1';\n this.flexShrink = '1';\n this.init();\n }\n get shrink() {\n return this.flexShrink;\n }\n set shrink(value) {\n this.flexShrink = value || '1';\n this.triggerReflow();\n }\n get grow() {\n return this.flexGrow;\n }\n set grow(value) {\n this.flexGrow = value || '1';\n this.triggerReflow();\n }\n ngOnInit() {\n if (this.parentElement) {\n this.marshal.trackValue(this.parentElement, 'layout').pipe(takeUntil(this.destroySubject)).subscribe(this.onLayoutChange.bind(this));\n this.marshal.trackValue(this.nativeElement, 'layout-align').pipe(takeUntil(this.destroySubject)).subscribe(this.triggerReflow.bind(this));\n }\n }\n /**\n * Caches the parent container's 'flex-direction' and updates the element's style.\n * Used as a handler for layout change events from the parent flex container.\n */\n onLayoutChange(matcher) {\n const layout = matcher.value;\n const layoutParts = layout.split(' ');\n this.direction = layoutParts[0];\n this.wrap = layoutParts[1] !== undefined && layoutParts[1] === 'wrap';\n this.triggerUpdate();\n }\n /** Input to this is exclusively the basis input value */\n updateWithValue(value) {\n const addFlexToParent = this.layoutConfig.addFlexToParent !== false;\n if (this.direction === undefined) {\n this.direction = this.getFlexFlowDirection(this.parentElement, addFlexToParent);\n }\n if (this.wrap === undefined) {\n this.wrap = this.hasWrap(this.parentElement);\n }\n const direction = this.direction;\n const isHorizontal = direction.startsWith('row');\n const hasWrap = this.wrap;\n if (isHorizontal && hasWrap) {\n this.styleCache = flexRowWrapCache;\n } else if (isHorizontal && !hasWrap) {\n this.styleCache = flexRowCache;\n } else if (!isHorizontal && hasWrap) {\n this.styleCache = flexColumnWrapCache;\n } else if (!isHorizontal && !hasWrap) {\n this.styleCache = flexColumnCache;\n }\n const basis = String(value).replace(';', '');\n const parts = validateBasis(basis, this.flexGrow, this.flexShrink);\n this.addStyles(parts.join(' '), {\n direction,\n hasWrap\n });\n }\n /** Trigger a style reflow, usually based on a shrink/grow input event */\n triggerReflow() {\n const activatedValue = this.activatedValue;\n if (activatedValue !== undefined) {\n const parts = validateBasis(activatedValue + '', this.flexGrow, this.flexShrink);\n this.marshal.updateElement(this.nativeElement, this.DIRECTIVE_KEY, parts.join(' '));\n }\n }\n }\n FlexDirective.ɵfac = function FlexDirective_Factory(ɵt) {\n return new (ɵt || FlexDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(LAYOUT_CONFIG), i0.ɵɵdirectiveInject(FlexStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n FlexDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FlexDirective,\n inputs: {\n shrink: [0, \"fxShrink\", \"shrink\"],\n grow: [0, \"fxGrow\", \"grow\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return FlexDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultFlexDirective = /*#__PURE__*/(() => {\n class DefaultFlexDirective extends FlexDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$4;\n }\n }\n DefaultFlexDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultFlexDirective_BaseFactory;\n return function DefaultFlexDirective_Factory(ɵt) {\n return (ɵDefaultFlexDirective_BaseFactory || (ɵDefaultFlexDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultFlexDirective)))(ɵt || DefaultFlexDirective);\n };\n })();\n DefaultFlexDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultFlexDirective,\n selectors: [[\"\", \"fxFlex\", \"\"], [\"\", \"fxFlex.xs\", \"\"], [\"\", \"fxFlex.sm\", \"\"], [\"\", \"fxFlex.md\", \"\"], [\"\", \"fxFlex.lg\", \"\"], [\"\", \"fxFlex.xl\", \"\"], [\"\", \"fxFlex.lt-sm\", \"\"], [\"\", \"fxFlex.lt-md\", \"\"], [\"\", \"fxFlex.lt-lg\", \"\"], [\"\", \"fxFlex.lt-xl\", \"\"], [\"\", \"fxFlex.gt-xs\", \"\"], [\"\", \"fxFlex.gt-sm\", \"\"], [\"\", \"fxFlex.gt-md\", \"\"], [\"\", \"fxFlex.gt-lg\", \"\"]],\n inputs: {\n fxFlex: \"fxFlex\",\n \"fxFlex.xs\": \"fxFlex.xs\",\n \"fxFlex.sm\": \"fxFlex.sm\",\n \"fxFlex.md\": \"fxFlex.md\",\n \"fxFlex.lg\": \"fxFlex.lg\",\n \"fxFlex.xl\": \"fxFlex.xl\",\n \"fxFlex.lt-sm\": \"fxFlex.lt-sm\",\n \"fxFlex.lt-md\": \"fxFlex.lt-md\",\n \"fxFlex.lt-lg\": \"fxFlex.lt-lg\",\n \"fxFlex.lt-xl\": \"fxFlex.lt-xl\",\n \"fxFlex.gt-xs\": \"fxFlex.gt-xs\",\n \"fxFlex.gt-sm\": \"fxFlex.gt-sm\",\n \"fxFlex.gt-md\": \"fxFlex.gt-md\",\n \"fxFlex.gt-lg\": \"fxFlex.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultFlexDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst flexRowCache = /*#__PURE__*/new Map();\nconst flexColumnCache = /*#__PURE__*/new Map();\nconst flexRowWrapCache = /*#__PURE__*/new Map();\nconst flexColumnWrapCache = /*#__PURE__*/new Map();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet FlexOrderStyleBuilder = /*#__PURE__*/(() => {\n class FlexOrderStyleBuilder extends StyleBuilder {\n buildStyles(value) {\n return {\n order: value && parseInt(value, 10) || ''\n };\n }\n }\n FlexOrderStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵFlexOrderStyleBuilder_BaseFactory;\n return function FlexOrderStyleBuilder_Factory(ɵt) {\n return (ɵFlexOrderStyleBuilder_BaseFactory || (ɵFlexOrderStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(FlexOrderStyleBuilder)))(ɵt || FlexOrderStyleBuilder);\n };\n })();\n FlexOrderStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FlexOrderStyleBuilder,\n factory: FlexOrderStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return FlexOrderStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$3 = ['fxFlexOrder', 'fxFlexOrder.xs', 'fxFlexOrder.sm', 'fxFlexOrder.md', 'fxFlexOrder.lg', 'fxFlexOrder.xl', 'fxFlexOrder.lt-sm', 'fxFlexOrder.lt-md', 'fxFlexOrder.lt-lg', 'fxFlexOrder.lt-xl', 'fxFlexOrder.gt-xs', 'fxFlexOrder.gt-sm', 'fxFlexOrder.gt-md', 'fxFlexOrder.gt-lg'];\nconst selector$3 = `\n [fxFlexOrder], [fxFlexOrder.xs], [fxFlexOrder.sm], [fxFlexOrder.md],\n [fxFlexOrder.lg], [fxFlexOrder.xl], [fxFlexOrder.lt-sm], [fxFlexOrder.lt-md],\n [fxFlexOrder.lt-lg], [fxFlexOrder.lt-xl], [fxFlexOrder.gt-xs], [fxFlexOrder.gt-sm],\n [fxFlexOrder.gt-md], [fxFlexOrder.gt-lg]\n`;\n/**\n * 'flex-order' flexbox styling directive\n * Configures the positional ordering of the element in a sorted layout container\n * @see https://css-tricks.com/almanac/properties/o/order/\n */\nlet FlexOrderDirective = /*#__PURE__*/(() => {\n class FlexOrderDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'flex-order';\n this.styleCache = flexOrderCache;\n this.init();\n }\n }\n FlexOrderDirective.ɵfac = function FlexOrderDirective_Factory(ɵt) {\n return new (ɵt || FlexOrderDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(FlexOrderStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n FlexOrderDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FlexOrderDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return FlexOrderDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst flexOrderCache = /*#__PURE__*/new Map();\nlet DefaultFlexOrderDirective = /*#__PURE__*/(() => {\n class DefaultFlexOrderDirective extends FlexOrderDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$3;\n }\n }\n DefaultFlexOrderDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultFlexOrderDirective_BaseFactory;\n return function DefaultFlexOrderDirective_Factory(ɵt) {\n return (ɵDefaultFlexOrderDirective_BaseFactory || (ɵDefaultFlexOrderDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultFlexOrderDirective)))(ɵt || DefaultFlexOrderDirective);\n };\n })();\n DefaultFlexOrderDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultFlexOrderDirective,\n selectors: [[\"\", \"fxFlexOrder\", \"\"], [\"\", \"fxFlexOrder.xs\", \"\"], [\"\", \"fxFlexOrder.sm\", \"\"], [\"\", \"fxFlexOrder.md\", \"\"], [\"\", \"fxFlexOrder.lg\", \"\"], [\"\", \"fxFlexOrder.xl\", \"\"], [\"\", \"fxFlexOrder.lt-sm\", \"\"], [\"\", \"fxFlexOrder.lt-md\", \"\"], [\"\", \"fxFlexOrder.lt-lg\", \"\"], [\"\", \"fxFlexOrder.lt-xl\", \"\"], [\"\", \"fxFlexOrder.gt-xs\", \"\"], [\"\", \"fxFlexOrder.gt-sm\", \"\"], [\"\", \"fxFlexOrder.gt-md\", \"\"], [\"\", \"fxFlexOrder.gt-lg\", \"\"]],\n inputs: {\n fxFlexOrder: \"fxFlexOrder\",\n \"fxFlexOrder.xs\": \"fxFlexOrder.xs\",\n \"fxFlexOrder.sm\": \"fxFlexOrder.sm\",\n \"fxFlexOrder.md\": \"fxFlexOrder.md\",\n \"fxFlexOrder.lg\": \"fxFlexOrder.lg\",\n \"fxFlexOrder.xl\": \"fxFlexOrder.xl\",\n \"fxFlexOrder.lt-sm\": \"fxFlexOrder.lt-sm\",\n \"fxFlexOrder.lt-md\": \"fxFlexOrder.lt-md\",\n \"fxFlexOrder.lt-lg\": \"fxFlexOrder.lt-lg\",\n \"fxFlexOrder.lt-xl\": \"fxFlexOrder.lt-xl\",\n \"fxFlexOrder.gt-xs\": \"fxFlexOrder.gt-xs\",\n \"fxFlexOrder.gt-sm\": \"fxFlexOrder.gt-sm\",\n \"fxFlexOrder.gt-md\": \"fxFlexOrder.gt-md\",\n \"fxFlexOrder.gt-lg\": \"fxFlexOrder.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultFlexOrderDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet FlexOffsetStyleBuilder = /*#__PURE__*/(() => {\n class FlexOffsetStyleBuilder extends StyleBuilder {\n constructor(_config) {\n super();\n this._config = _config;\n }\n buildStyles(offset, parent) {\n offset || (offset = '0');\n offset = ɵmultiply(offset, this._config.multiplier);\n const isPercent = String(offset).indexOf('%') > -1;\n const isPx = String(offset).indexOf('px') > -1;\n if (!isPx && !isPercent && !isNaN(+offset)) {\n offset = `${offset}%`;\n }\n const horizontalLayoutKey = parent.isRtl ? 'margin-right' : 'margin-left';\n const styles = isFlowHorizontal(parent.layout) ? {\n [horizontalLayoutKey]: offset\n } : {\n 'margin-top': offset\n };\n return styles;\n }\n }\n FlexOffsetStyleBuilder.ɵfac = function FlexOffsetStyleBuilder_Factory(ɵt) {\n return new (ɵt || FlexOffsetStyleBuilder)(i0.ɵɵinject(LAYOUT_CONFIG));\n };\n FlexOffsetStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FlexOffsetStyleBuilder,\n factory: FlexOffsetStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return FlexOffsetStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$2 = ['fxFlexOffset', 'fxFlexOffset.xs', 'fxFlexOffset.sm', 'fxFlexOffset.md', 'fxFlexOffset.lg', 'fxFlexOffset.xl', 'fxFlexOffset.lt-sm', 'fxFlexOffset.lt-md', 'fxFlexOffset.lt-lg', 'fxFlexOffset.lt-xl', 'fxFlexOffset.gt-xs', 'fxFlexOffset.gt-sm', 'fxFlexOffset.gt-md', 'fxFlexOffset.gt-lg'];\nconst selector$2 = `\n [fxFlexOffset], [fxFlexOffset.xs], [fxFlexOffset.sm], [fxFlexOffset.md],\n [fxFlexOffset.lg], [fxFlexOffset.xl], [fxFlexOffset.lt-sm], [fxFlexOffset.lt-md],\n [fxFlexOffset.lt-lg], [fxFlexOffset.lt-xl], [fxFlexOffset.gt-xs], [fxFlexOffset.gt-sm],\n [fxFlexOffset.gt-md], [fxFlexOffset.gt-lg]\n`;\n/**\n * 'flex-offset' flexbox styling directive\n * Configures the 'margin-left' of the element in a layout container\n */\nlet FlexOffsetDirective = /*#__PURE__*/(() => {\n class FlexOffsetDirective extends BaseDirective2 {\n constructor(elRef, directionality, styleBuilder, marshal, styler) {\n super(elRef, styleBuilder, styler, marshal);\n this.directionality = directionality;\n this.DIRECTIVE_KEY = 'flex-offset';\n this.init([this.directionality.change]);\n // Parent DOM `layout-gap` with affect the nested child with `flex-offset`\n if (this.parentElement) {\n this.marshal.trackValue(this.parentElement, 'layout-gap').pipe(takeUntil(this.destroySubject)).subscribe(this.triggerUpdate.bind(this));\n }\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * Using the current fxFlexOffset value, update the inline CSS\n * NOTE: this will assign `margin-left` if the parent flex-direction == 'row',\n * otherwise `margin-top` is used for the offset.\n */\n updateWithValue(value = '') {\n // The flex-direction of this element's flex container. Defaults to 'row'.\n const layout = this.getFlexFlowDirection(this.parentElement, true);\n const isRtl = this.directionality.value === 'rtl';\n if (layout === 'row' && isRtl) {\n this.styleCache = flexOffsetCacheRowRtl;\n } else if (layout === 'row' && !isRtl) {\n this.styleCache = flexOffsetCacheRowLtr;\n } else if (layout === 'column' && isRtl) {\n this.styleCache = flexOffsetCacheColumnRtl;\n } else if (layout === 'column' && !isRtl) {\n this.styleCache = flexOffsetCacheColumnLtr;\n }\n this.addStyles(value + '', {\n layout,\n isRtl\n });\n }\n }\n FlexOffsetDirective.ɵfac = function FlexOffsetDirective_Factory(ɵt) {\n return new (ɵt || FlexOffsetDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.Directionality), i0.ɵɵdirectiveInject(FlexOffsetStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(i1.StyleUtils));\n };\n FlexOffsetDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FlexOffsetDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return FlexOffsetDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultFlexOffsetDirective = /*#__PURE__*/(() => {\n class DefaultFlexOffsetDirective extends FlexOffsetDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$2;\n }\n }\n DefaultFlexOffsetDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultFlexOffsetDirective_BaseFactory;\n return function DefaultFlexOffsetDirective_Factory(ɵt) {\n return (ɵDefaultFlexOffsetDirective_BaseFactory || (ɵDefaultFlexOffsetDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultFlexOffsetDirective)))(ɵt || DefaultFlexOffsetDirective);\n };\n })();\n DefaultFlexOffsetDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultFlexOffsetDirective,\n selectors: [[\"\", \"fxFlexOffset\", \"\"], [\"\", \"fxFlexOffset.xs\", \"\"], [\"\", \"fxFlexOffset.sm\", \"\"], [\"\", \"fxFlexOffset.md\", \"\"], [\"\", \"fxFlexOffset.lg\", \"\"], [\"\", \"fxFlexOffset.xl\", \"\"], [\"\", \"fxFlexOffset.lt-sm\", \"\"], [\"\", \"fxFlexOffset.lt-md\", \"\"], [\"\", \"fxFlexOffset.lt-lg\", \"\"], [\"\", \"fxFlexOffset.lt-xl\", \"\"], [\"\", \"fxFlexOffset.gt-xs\", \"\"], [\"\", \"fxFlexOffset.gt-sm\", \"\"], [\"\", \"fxFlexOffset.gt-md\", \"\"], [\"\", \"fxFlexOffset.gt-lg\", \"\"]],\n inputs: {\n fxFlexOffset: \"fxFlexOffset\",\n \"fxFlexOffset.xs\": \"fxFlexOffset.xs\",\n \"fxFlexOffset.sm\": \"fxFlexOffset.sm\",\n \"fxFlexOffset.md\": \"fxFlexOffset.md\",\n \"fxFlexOffset.lg\": \"fxFlexOffset.lg\",\n \"fxFlexOffset.xl\": \"fxFlexOffset.xl\",\n \"fxFlexOffset.lt-sm\": \"fxFlexOffset.lt-sm\",\n \"fxFlexOffset.lt-md\": \"fxFlexOffset.lt-md\",\n \"fxFlexOffset.lt-lg\": \"fxFlexOffset.lt-lg\",\n \"fxFlexOffset.lt-xl\": \"fxFlexOffset.lt-xl\",\n \"fxFlexOffset.gt-xs\": \"fxFlexOffset.gt-xs\",\n \"fxFlexOffset.gt-sm\": \"fxFlexOffset.gt-sm\",\n \"fxFlexOffset.gt-md\": \"fxFlexOffset.gt-md\",\n \"fxFlexOffset.gt-lg\": \"fxFlexOffset.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultFlexOffsetDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst flexOffsetCacheRowRtl = /*#__PURE__*/new Map();\nconst flexOffsetCacheColumnRtl = /*#__PURE__*/new Map();\nconst flexOffsetCacheRowLtr = /*#__PURE__*/new Map();\nconst flexOffsetCacheColumnLtr = /*#__PURE__*/new Map();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet FlexAlignStyleBuilder = /*#__PURE__*/(() => {\n class FlexAlignStyleBuilder extends StyleBuilder {\n buildStyles(input) {\n input = input || 'stretch';\n const styles = {};\n // Cross-axis\n switch (input) {\n case 'start':\n styles['align-self'] = 'flex-start';\n break;\n case 'end':\n styles['align-self'] = 'flex-end';\n break;\n default:\n styles['align-self'] = input;\n break;\n }\n return styles;\n }\n }\n FlexAlignStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵFlexAlignStyleBuilder_BaseFactory;\n return function FlexAlignStyleBuilder_Factory(ɵt) {\n return (ɵFlexAlignStyleBuilder_BaseFactory || (ɵFlexAlignStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(FlexAlignStyleBuilder)))(ɵt || FlexAlignStyleBuilder);\n };\n })();\n FlexAlignStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FlexAlignStyleBuilder,\n factory: FlexAlignStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return FlexAlignStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$1 = ['fxFlexAlign', 'fxFlexAlign.xs', 'fxFlexAlign.sm', 'fxFlexAlign.md', 'fxFlexAlign.lg', 'fxFlexAlign.xl', 'fxFlexAlign.lt-sm', 'fxFlexAlign.lt-md', 'fxFlexAlign.lt-lg', 'fxFlexAlign.lt-xl', 'fxFlexAlign.gt-xs', 'fxFlexAlign.gt-sm', 'fxFlexAlign.gt-md', 'fxFlexAlign.gt-lg'];\nconst selector$1 = `\n [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md],\n [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md],\n [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm],\n [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]\n`;\n/**\n * 'flex-align' flexbox styling directive\n * Allows element-specific overrides for cross-axis alignments in a layout container\n * @see https://css-tricks.com/almanac/properties/a/align-self/\n */\nlet FlexAlignDirective = /*#__PURE__*/(() => {\n class FlexAlignDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'flex-align';\n this.styleCache = flexAlignCache;\n this.init();\n }\n }\n FlexAlignDirective.ɵfac = function FlexAlignDirective_Factory(ɵt) {\n return new (ɵt || FlexAlignDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(FlexAlignStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n FlexAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FlexAlignDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return FlexAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst flexAlignCache = /*#__PURE__*/new Map();\nlet DefaultFlexAlignDirective = /*#__PURE__*/(() => {\n class DefaultFlexAlignDirective extends FlexAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$1;\n }\n }\n DefaultFlexAlignDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultFlexAlignDirective_BaseFactory;\n return function DefaultFlexAlignDirective_Factory(ɵt) {\n return (ɵDefaultFlexAlignDirective_BaseFactory || (ɵDefaultFlexAlignDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultFlexAlignDirective)))(ɵt || DefaultFlexAlignDirective);\n };\n })();\n DefaultFlexAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultFlexAlignDirective,\n selectors: [[\"\", \"fxFlexAlign\", \"\"], [\"\", \"fxFlexAlign.xs\", \"\"], [\"\", \"fxFlexAlign.sm\", \"\"], [\"\", \"fxFlexAlign.md\", \"\"], [\"\", \"fxFlexAlign.lg\", \"\"], [\"\", \"fxFlexAlign.xl\", \"\"], [\"\", \"fxFlexAlign.lt-sm\", \"\"], [\"\", \"fxFlexAlign.lt-md\", \"\"], [\"\", \"fxFlexAlign.lt-lg\", \"\"], [\"\", \"fxFlexAlign.lt-xl\", \"\"], [\"\", \"fxFlexAlign.gt-xs\", \"\"], [\"\", \"fxFlexAlign.gt-sm\", \"\"], [\"\", \"fxFlexAlign.gt-md\", \"\"], [\"\", \"fxFlexAlign.gt-lg\", \"\"]],\n inputs: {\n fxFlexAlign: \"fxFlexAlign\",\n \"fxFlexAlign.xs\": \"fxFlexAlign.xs\",\n \"fxFlexAlign.sm\": \"fxFlexAlign.sm\",\n \"fxFlexAlign.md\": \"fxFlexAlign.md\",\n \"fxFlexAlign.lg\": \"fxFlexAlign.lg\",\n \"fxFlexAlign.xl\": \"fxFlexAlign.xl\",\n \"fxFlexAlign.lt-sm\": \"fxFlexAlign.lt-sm\",\n \"fxFlexAlign.lt-md\": \"fxFlexAlign.lt-md\",\n \"fxFlexAlign.lt-lg\": \"fxFlexAlign.lt-lg\",\n \"fxFlexAlign.lt-xl\": \"fxFlexAlign.lt-xl\",\n \"fxFlexAlign.gt-xs\": \"fxFlexAlign.gt-xs\",\n \"fxFlexAlign.gt-sm\": \"fxFlexAlign.gt-sm\",\n \"fxFlexAlign.gt-md\": \"fxFlexAlign.gt-md\",\n \"fxFlexAlign.gt-lg\": \"fxFlexAlign.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultFlexAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst FLEX_FILL_CSS = {\n 'margin': 0,\n 'width': '100%',\n 'height': '100%',\n 'min-width': '100%',\n 'min-height': '100%'\n};\nlet FlexFillStyleBuilder = /*#__PURE__*/(() => {\n class FlexFillStyleBuilder extends StyleBuilder {\n buildStyles(_input) {\n return FLEX_FILL_CSS;\n }\n }\n FlexFillStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵFlexFillStyleBuilder_BaseFactory;\n return function FlexFillStyleBuilder_Factory(ɵt) {\n return (ɵFlexFillStyleBuilder_BaseFactory || (ɵFlexFillStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(FlexFillStyleBuilder)))(ɵt || FlexFillStyleBuilder);\n };\n })();\n FlexFillStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: FlexFillStyleBuilder,\n factory: FlexFillStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return FlexFillStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * 'fxFill' flexbox styling directive\n * Maximizes width and height of element in a layout container\n *\n * NOTE: fxFill is NOT responsive API!!\n */\nlet FlexFillDirective = /*#__PURE__*/(() => {\n class FlexFillDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.styleCache = flexFillCache;\n this.addStyles('');\n }\n }\n FlexFillDirective.ɵfac = function FlexFillDirective_Factory(ɵt) {\n return new (ɵt || FlexFillDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(FlexFillStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n FlexFillDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: FlexFillDirective,\n selectors: [[\"\", \"fxFill\", \"\"], [\"\", \"fxFlexFill\", \"\"]],\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return FlexFillDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst flexFillCache = /*#__PURE__*/new Map();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet LayoutAlignStyleBuilder = /*#__PURE__*/(() => {\n class LayoutAlignStyleBuilder extends StyleBuilder {\n buildStyles(align, parent) {\n const css = {},\n [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['justify-content'] = 'center';\n break;\n case 'space-around':\n css['justify-content'] = 'space-around';\n break;\n case 'space-between':\n css['justify-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['justify-content'] = 'space-evenly';\n break;\n case 'end':\n case 'flex-end':\n css['justify-content'] = 'flex-end';\n break;\n case 'start':\n case 'flex-start':\n default:\n css['justify-content'] = 'flex-start'; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'flex-start':\n css['align-items'] = css['align-content'] = 'flex-start';\n break;\n case 'center':\n css['align-items'] = css['align-content'] = 'center';\n break;\n case 'end':\n case 'flex-end':\n css['align-items'] = css['align-content'] = 'flex-end';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n css['align-items'] = 'stretch';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n css['align-items'] = 'stretch';\n break;\n case 'baseline':\n css['align-content'] = 'stretch';\n css['align-items'] = 'baseline';\n break;\n case 'stretch':\n default:\n // 'stretch'\n css['align-items'] = css['align-content'] = 'stretch'; // default cross axis\n break;\n }\n return extendObject(css, {\n 'display': parent.inline ? 'inline-flex' : 'flex',\n 'flex-direction': parent.layout,\n 'box-sizing': 'border-box',\n 'max-width': crossAxis === 'stretch' ? !isFlowHorizontal(parent.layout) ? '100%' : null : null,\n 'max-height': crossAxis === 'stretch' ? isFlowHorizontal(parent.layout) ? '100%' : null : null\n });\n }\n }\n LayoutAlignStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵLayoutAlignStyleBuilder_BaseFactory;\n return function LayoutAlignStyleBuilder_Factory(ɵt) {\n return (ɵLayoutAlignStyleBuilder_BaseFactory || (ɵLayoutAlignStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(LayoutAlignStyleBuilder)))(ɵt || LayoutAlignStyleBuilder);\n };\n })();\n LayoutAlignStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: LayoutAlignStyleBuilder,\n factory: LayoutAlignStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return LayoutAlignStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs = ['fxLayoutAlign', 'fxLayoutAlign.xs', 'fxLayoutAlign.sm', 'fxLayoutAlign.md', 'fxLayoutAlign.lg', 'fxLayoutAlign.xl', 'fxLayoutAlign.lt-sm', 'fxLayoutAlign.lt-md', 'fxLayoutAlign.lt-lg', 'fxLayoutAlign.lt-xl', 'fxLayoutAlign.gt-xs', 'fxLayoutAlign.gt-sm', 'fxLayoutAlign.gt-md', 'fxLayoutAlign.gt-lg'];\nconst selector = `\n [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md],\n [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md],\n [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm],\n [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]\n`;\n/**\n * 'layout-align' flexbox styling directive\n * Defines positioning of child elements along main and cross axis in a layout container\n * Optional values: {main-axis} values or {main-axis cross-axis} value pairs\n *\n * @see https://css-tricks.com/almanac/properties/j/justify-content/\n * @see https://css-tricks.com/almanac/properties/a/align-items/\n * @see https://css-tricks.com/almanac/properties/a/align-content/\n */\nlet LayoutAlignDirective = /*#__PURE__*/(() => {\n class LayoutAlignDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'layout-align';\n this.layout = 'row'; // default flex-direction\n this.inline = false; // default inline value\n this.init();\n this.marshal.trackValue(this.nativeElement, 'layout').pipe(takeUntil(this.destroySubject)).subscribe(this.onLayoutChange.bind(this));\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n *\n */\n updateWithValue(value) {\n const layout = this.layout || 'row';\n const inline = this.inline;\n if (layout === 'row' && inline) {\n this.styleCache = layoutAlignHorizontalInlineCache;\n } else if (layout === 'row' && !inline) {\n this.styleCache = layoutAlignHorizontalCache;\n } else if (layout === 'row-reverse' && inline) {\n this.styleCache = layoutAlignHorizontalRevInlineCache;\n } else if (layout === 'row-reverse' && !inline) {\n this.styleCache = layoutAlignHorizontalRevCache;\n } else if (layout === 'column' && inline) {\n this.styleCache = layoutAlignVerticalInlineCache;\n } else if (layout === 'column' && !inline) {\n this.styleCache = layoutAlignVerticalCache;\n } else if (layout === 'column-reverse' && inline) {\n this.styleCache = layoutAlignVerticalRevInlineCache;\n } else if (layout === 'column-reverse' && !inline) {\n this.styleCache = layoutAlignVerticalRevCache;\n }\n this.addStyles(value, {\n layout,\n inline\n });\n }\n /**\n * Cache the parent container 'flex-direction' and update the 'flex' styles\n */\n onLayoutChange(matcher) {\n const layoutKeys = matcher.value.split(' ');\n this.layout = layoutKeys[0];\n this.inline = matcher.value.includes('inline');\n if (!LAYOUT_VALUES.find(x => x === this.layout)) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n }\n LayoutAlignDirective.ɵfac = function LayoutAlignDirective_Factory(ɵt) {\n return new (ɵt || LayoutAlignDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(LayoutAlignStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n LayoutAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: LayoutAlignDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return LayoutAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet DefaultLayoutAlignDirective = /*#__PURE__*/(() => {\n class DefaultLayoutAlignDirective extends LayoutAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs;\n }\n }\n DefaultLayoutAlignDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultLayoutAlignDirective_BaseFactory;\n return function DefaultLayoutAlignDirective_Factory(ɵt) {\n return (ɵDefaultLayoutAlignDirective_BaseFactory || (ɵDefaultLayoutAlignDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultLayoutAlignDirective)))(ɵt || DefaultLayoutAlignDirective);\n };\n })();\n DefaultLayoutAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultLayoutAlignDirective,\n selectors: [[\"\", \"fxLayoutAlign\", \"\"], [\"\", \"fxLayoutAlign.xs\", \"\"], [\"\", \"fxLayoutAlign.sm\", \"\"], [\"\", \"fxLayoutAlign.md\", \"\"], [\"\", \"fxLayoutAlign.lg\", \"\"], [\"\", \"fxLayoutAlign.xl\", \"\"], [\"\", \"fxLayoutAlign.lt-sm\", \"\"], [\"\", \"fxLayoutAlign.lt-md\", \"\"], [\"\", \"fxLayoutAlign.lt-lg\", \"\"], [\"\", \"fxLayoutAlign.lt-xl\", \"\"], [\"\", \"fxLayoutAlign.gt-xs\", \"\"], [\"\", \"fxLayoutAlign.gt-sm\", \"\"], [\"\", \"fxLayoutAlign.gt-md\", \"\"], [\"\", \"fxLayoutAlign.gt-lg\", \"\"]],\n inputs: {\n fxLayoutAlign: \"fxLayoutAlign\",\n \"fxLayoutAlign.xs\": \"fxLayoutAlign.xs\",\n \"fxLayoutAlign.sm\": \"fxLayoutAlign.sm\",\n \"fxLayoutAlign.md\": \"fxLayoutAlign.md\",\n \"fxLayoutAlign.lg\": \"fxLayoutAlign.lg\",\n \"fxLayoutAlign.xl\": \"fxLayoutAlign.xl\",\n \"fxLayoutAlign.lt-sm\": \"fxLayoutAlign.lt-sm\",\n \"fxLayoutAlign.lt-md\": \"fxLayoutAlign.lt-md\",\n \"fxLayoutAlign.lt-lg\": \"fxLayoutAlign.lt-lg\",\n \"fxLayoutAlign.lt-xl\": \"fxLayoutAlign.lt-xl\",\n \"fxLayoutAlign.gt-xs\": \"fxLayoutAlign.gt-xs\",\n \"fxLayoutAlign.gt-sm\": \"fxLayoutAlign.gt-sm\",\n \"fxLayoutAlign.gt-md\": \"fxLayoutAlign.gt-md\",\n \"fxLayoutAlign.gt-lg\": \"fxLayoutAlign.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultLayoutAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst layoutAlignHorizontalCache = /*#__PURE__*/new Map();\nconst layoutAlignVerticalCache = /*#__PURE__*/new Map();\nconst layoutAlignHorizontalRevCache = /*#__PURE__*/new Map();\nconst layoutAlignVerticalRevCache = /*#__PURE__*/new Map();\nconst layoutAlignHorizontalInlineCache = /*#__PURE__*/new Map();\nconst layoutAlignVerticalInlineCache = /*#__PURE__*/new Map();\nconst layoutAlignHorizontalRevInlineCache = /*#__PURE__*/new Map();\nconst layoutAlignVerticalRevInlineCache = /*#__PURE__*/new Map();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ALL_DIRECTIVES = [DefaultLayoutDirective, DefaultLayoutGapDirective, DefaultLayoutAlignDirective, DefaultFlexOrderDirective, DefaultFlexOffsetDirective, FlexFillDirective, DefaultFlexAlignDirective, DefaultFlexDirective];\n/**\n * *****************************************************************\n * Define module for the Flex API\n * *****************************************************************\n */\nlet FlexModule = /*#__PURE__*/(() => {\n class FlexModule {}\n FlexModule.ɵfac = function FlexModule_Factory(ɵt) {\n return new (ɵt || FlexModule)();\n };\n FlexModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: FlexModule\n });\n FlexModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CoreModule, BidiModule]\n });\n return FlexModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DefaultFlexAlignDirective, DefaultFlexDirective, DefaultFlexOffsetDirective, DefaultFlexOrderDirective, DefaultLayoutAlignDirective, DefaultLayoutDirective, DefaultLayoutGapDirective, FlexAlignDirective, FlexAlignStyleBuilder, FlexDirective, FlexFillDirective, FlexFillStyleBuilder, FlexModule, FlexOffsetDirective, FlexOffsetStyleBuilder, FlexOrderDirective, FlexOrderStyleBuilder, FlexStyleBuilder, LayoutAlignDirective, LayoutAlignStyleBuilder, LayoutDirective, LayoutGapDirective, LayoutGapStyleBuilder, LayoutStyleBuilder };\n","import * as i0 from '@angular/core';\nimport { Injectable, PLATFORM_ID, Directive, Inject, Input, Optional, Self, SecurityContext, NgModule } from '@angular/core';\nimport * as i1 from '@angular/flex-layout/core';\nimport { StyleBuilder, BaseDirective2, SERVER_TOKEN, LAYOUT_CONFIG, CoreModule } from '@angular/flex-layout/core';\nimport * as i2 from '@angular/common';\nimport { isPlatformServer, NgClass, NgStyle } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntil } from 'rxjs/operators';\nimport * as i2$1 from '@angular/platform-browser';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet ImgSrcStyleBuilder = /*#__PURE__*/(() => {\n class ImgSrcStyleBuilder extends StyleBuilder {\n buildStyles(url) {\n return {\n 'content': url ? `url(${url})` : ''\n };\n }\n }\n ImgSrcStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵImgSrcStyleBuilder_BaseFactory;\n return function ImgSrcStyleBuilder_Factory(ɵt) {\n return (ɵImgSrcStyleBuilder_BaseFactory || (ɵImgSrcStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(ImgSrcStyleBuilder)))(ɵt || ImgSrcStyleBuilder);\n };\n })();\n ImgSrcStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ImgSrcStyleBuilder,\n factory: ImgSrcStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return ImgSrcStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ImgSrcDirective = /*#__PURE__*/(() => {\n class ImgSrcDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal, platformId, serverModuleLoaded) {\n super(elementRef, styleBuilder, styler, marshal);\n this.platformId = platformId;\n this.serverModuleLoaded = serverModuleLoaded;\n this.DIRECTIVE_KEY = 'img-src';\n this.defaultSrc = '';\n this.styleCache = imgSrcCache;\n this.init();\n this.setValue(this.nativeElement.getAttribute('src') || '', '');\n if (isPlatformServer(this.platformId) && this.serverModuleLoaded) {\n this.nativeElement.setAttribute('src', '');\n }\n }\n set src(val) {\n this.defaultSrc = val;\n this.setValue(this.defaultSrc, '');\n }\n /**\n * Use the [responsively] activated input value to update\n * the host img src attribute or assign a default `img.src=''`\n * if the src has not been defined.\n *\n * Do nothing to standard ` ` usages, only when responsive\n * keys are present do we actually call `setAttribute()`\n */\n updateWithValue(value) {\n const url = value || this.defaultSrc;\n if (isPlatformServer(this.platformId) && this.serverModuleLoaded) {\n this.addStyles(url);\n } else {\n this.nativeElement.setAttribute('src', url);\n }\n }\n }\n ImgSrcDirective.ɵfac = function ImgSrcDirective_Factory(ɵt) {\n return new (ɵt || ImgSrcDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ImgSrcStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(PLATFORM_ID), i0.ɵɵdirectiveInject(SERVER_TOKEN));\n };\n ImgSrcDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ImgSrcDirective,\n inputs: {\n src: \"src\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return ImgSrcDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst imgSrcCache = /*#__PURE__*/new Map();\nconst inputs$3 = ['src.xs', 'src.sm', 'src.md', 'src.lg', 'src.xl', 'src.lt-sm', 'src.lt-md', 'src.lt-lg', 'src.lt-xl', 'src.gt-xs', 'src.gt-sm', 'src.gt-md', 'src.gt-lg'];\nconst selector$3 = `\n img[src.xs], img[src.sm], img[src.md], img[src.lg], img[src.xl],\n img[src.lt-sm], img[src.lt-md], img[src.lt-lg], img[src.lt-xl],\n img[src.gt-xs], img[src.gt-sm], img[src.gt-md], img[src.gt-lg]\n`;\n/**\n * This directive provides a responsive API for the HTML 'src' attribute\n * and will update the img.src property upon each responsive activation.\n *\n * e.g.\n * \n *\n * @see https://css-tricks.com/responsive-images-youre-just-changing-resolutions-use-src/\n */\nlet DefaultImgSrcDirective = /*#__PURE__*/(() => {\n class DefaultImgSrcDirective extends ImgSrcDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$3;\n }\n }\n DefaultImgSrcDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultImgSrcDirective_BaseFactory;\n return function DefaultImgSrcDirective_Factory(ɵt) {\n return (ɵDefaultImgSrcDirective_BaseFactory || (ɵDefaultImgSrcDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultImgSrcDirective)))(ɵt || DefaultImgSrcDirective);\n };\n })();\n DefaultImgSrcDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultImgSrcDirective,\n selectors: [[\"img\", \"src.xs\", \"\"], [\"img\", \"src.sm\", \"\"], [\"img\", \"src.md\", \"\"], [\"img\", \"src.lg\", \"\"], [\"img\", \"src.xl\", \"\"], [\"img\", \"src.lt-sm\", \"\"], [\"img\", \"src.lt-md\", \"\"], [\"img\", \"src.lt-lg\", \"\"], [\"img\", \"src.lt-xl\", \"\"], [\"img\", \"src.gt-xs\", \"\"], [\"img\", \"src.gt-sm\", \"\"], [\"img\", \"src.gt-md\", \"\"], [\"img\", \"src.gt-lg\", \"\"]],\n inputs: {\n \"src.xs\": \"src.xs\",\n \"src.sm\": \"src.sm\",\n \"src.md\": \"src.md\",\n \"src.lg\": \"src.lg\",\n \"src.xl\": \"src.xl\",\n \"src.lt-sm\": \"src.lt-sm\",\n \"src.lt-md\": \"src.lt-md\",\n \"src.lt-lg\": \"src.lt-lg\",\n \"src.lt-xl\": \"src.lt-xl\",\n \"src.gt-xs\": \"src.gt-xs\",\n \"src.gt-sm\": \"src.gt-sm\",\n \"src.gt-md\": \"src.gt-md\",\n \"src.gt-lg\": \"src.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultImgSrcDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet ClassDirective = /*#__PURE__*/(() => {\n class ClassDirective extends BaseDirective2 {\n constructor(elementRef, styler, marshal, iterableDiffers, keyValueDiffers, renderer2, ngClassInstance) {\n super(elementRef, null, styler, marshal);\n this.ngClassInstance = ngClassInstance;\n this.DIRECTIVE_KEY = 'ngClass';\n if (!this.ngClassInstance) {\n // Create an instance NgClass Directive instance only if `ngClass=\"\"` has NOT been defined on\n // the same host element; since the responsive variations may be defined...\n this.ngClassInstance = new NgClass(iterableDiffers, keyValueDiffers, elementRef, renderer2);\n }\n this.init();\n this.setValue('', '');\n }\n /**\n * Capture class assignments so we cache the default classes\n * which are merged with activated styles and used as fallbacks.\n */\n set klass(val) {\n this.ngClassInstance.klass = val;\n this.setValue(val, '');\n }\n updateWithValue(value) {\n this.ngClassInstance.ngClass = value;\n this.ngClassInstance.ngDoCheck();\n }\n // ******************************************************************\n // Lifecycle Hooks\n // ******************************************************************\n /**\n * For ChangeDetectionStrategy.onPush and ngOnChanges() updates\n */\n ngDoCheck() {\n this.ngClassInstance.ngDoCheck();\n }\n }\n ClassDirective.ɵfac = function ClassDirective_Factory(ɵt) {\n return new (ɵt || ClassDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.KeyValueDiffers), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i2.NgClass, 10));\n };\n ClassDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ClassDirective,\n inputs: {\n klass: [0, \"class\", \"klass\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return ClassDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs$2 = ['ngClass', 'ngClass.xs', 'ngClass.sm', 'ngClass.md', 'ngClass.lg', 'ngClass.xl', 'ngClass.lt-sm', 'ngClass.lt-md', 'ngClass.lt-lg', 'ngClass.lt-xl', 'ngClass.gt-xs', 'ngClass.gt-sm', 'ngClass.gt-md', 'ngClass.gt-lg'];\nconst selector$2 = `\n [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl],\n [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl],\n [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]\n`;\n/**\n * Directive to add responsive support for ngClass.\n * This maintains the core functionality of 'ngClass' and adds responsive API\n * Note: this class is a no-op when rendered on the server\n */\nlet DefaultClassDirective = /*#__PURE__*/(() => {\n class DefaultClassDirective extends ClassDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$2;\n }\n }\n DefaultClassDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultClassDirective_BaseFactory;\n return function DefaultClassDirective_Factory(ɵt) {\n return (ɵDefaultClassDirective_BaseFactory || (ɵDefaultClassDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultClassDirective)))(ɵt || DefaultClassDirective);\n };\n })();\n DefaultClassDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultClassDirective,\n selectors: [[\"\", \"ngClass\", \"\"], [\"\", \"ngClass.xs\", \"\"], [\"\", \"ngClass.sm\", \"\"], [\"\", \"ngClass.md\", \"\"], [\"\", \"ngClass.lg\", \"\"], [\"\", \"ngClass.xl\", \"\"], [\"\", \"ngClass.lt-sm\", \"\"], [\"\", \"ngClass.lt-md\", \"\"], [\"\", \"ngClass.lt-lg\", \"\"], [\"\", \"ngClass.lt-xl\", \"\"], [\"\", \"ngClass.gt-xs\", \"\"], [\"\", \"ngClass.gt-sm\", \"\"], [\"\", \"ngClass.gt-md\", \"\"], [\"\", \"ngClass.gt-lg\", \"\"]],\n inputs: {\n ngClass: \"ngClass\",\n \"ngClass.xs\": \"ngClass.xs\",\n \"ngClass.sm\": \"ngClass.sm\",\n \"ngClass.md\": \"ngClass.md\",\n \"ngClass.lg\": \"ngClass.lg\",\n \"ngClass.xl\": \"ngClass.xl\",\n \"ngClass.lt-sm\": \"ngClass.lt-sm\",\n \"ngClass.lt-md\": \"ngClass.lt-md\",\n \"ngClass.lt-lg\": \"ngClass.lt-lg\",\n \"ngClass.lt-xl\": \"ngClass.lt-xl\",\n \"ngClass.gt-xs\": \"ngClass.gt-xs\",\n \"ngClass.gt-sm\": \"ngClass.gt-sm\",\n \"ngClass.gt-md\": \"ngClass.gt-md\",\n \"ngClass.gt-lg\": \"ngClass.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultClassDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet ShowHideStyleBuilder = /*#__PURE__*/(() => {\n class ShowHideStyleBuilder extends StyleBuilder {\n buildStyles(show, parent) {\n const shouldShow = show === 'true';\n return {\n 'display': shouldShow ? parent.display || (parent.isServer ? 'initial' : '') : 'none'\n };\n }\n }\n ShowHideStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵShowHideStyleBuilder_BaseFactory;\n return function ShowHideStyleBuilder_Factory(ɵt) {\n return (ɵShowHideStyleBuilder_BaseFactory || (ɵShowHideStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(ShowHideStyleBuilder)))(ɵt || ShowHideStyleBuilder);\n };\n })();\n ShowHideStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ShowHideStyleBuilder,\n factory: ShowHideStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return ShowHideStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ShowHideDirective = /*#__PURE__*/(() => {\n class ShowHideDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal, layoutConfig, platformId, serverModuleLoaded) {\n super(elementRef, styleBuilder, styler, marshal);\n this.layoutConfig = layoutConfig;\n this.platformId = platformId;\n this.serverModuleLoaded = serverModuleLoaded;\n this.DIRECTIVE_KEY = 'show-hide';\n /** Original DOM Element CSS display style */\n this.display = '';\n this.hasLayout = false;\n this.hasFlexChild = false;\n }\n // *********************************************\n // Lifecycle Methods\n // *********************************************\n ngAfterViewInit() {\n this.trackExtraTriggers();\n const children = Array.from(this.nativeElement.children);\n for (let i = 0; i < children.length; i++) {\n if (this.marshal.hasValue(children[i], 'flex')) {\n this.hasFlexChild = true;\n break;\n }\n }\n if (DISPLAY_MAP.has(this.nativeElement)) {\n this.display = DISPLAY_MAP.get(this.nativeElement);\n } else {\n this.display = this.getDisplayStyle();\n DISPLAY_MAP.set(this.nativeElement, this.display);\n }\n this.init();\n // set the default to show unless explicitly overridden\n const defaultValue = this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY, '');\n if (defaultValue === undefined || defaultValue === '') {\n this.setValue(true, '');\n } else {\n this.triggerUpdate();\n }\n }\n /**\n * On changes to any @Input properties...\n * Default to use the non-responsive Input value ('fxShow')\n * Then conditionally override with the mq-activated Input's current value\n */\n ngOnChanges(changes) {\n Object.keys(changes).forEach(key => {\n if (this.inputs.indexOf(key) !== -1) {\n const inputKey = key.split('.');\n const bp = inputKey.slice(1).join('.');\n const inputValue = changes[key].currentValue;\n let shouldShow = inputValue !== '' ? inputValue !== 0 ? coerceBooleanProperty(inputValue) : false : true;\n if (inputKey[0] === 'fxHide') {\n shouldShow = !shouldShow;\n }\n this.setValue(shouldShow, bp);\n }\n });\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * Watch for these extra triggers to update fxShow, fxHide stylings\n */\n trackExtraTriggers() {\n this.hasLayout = this.marshal.hasValue(this.nativeElement, 'layout');\n ['layout', 'layout-align'].forEach(key => {\n this.marshal.trackValue(this.nativeElement, key).pipe(takeUntil(this.destroySubject)).subscribe(this.triggerUpdate.bind(this));\n });\n }\n /**\n * Override accessor to the current HTMLElement's `display` style\n * Note: Show/Hide will not change the display to 'flex' but will set it to 'block'\n * unless it was already explicitly specified inline or in a CSS stylesheet.\n */\n getDisplayStyle() {\n return this.hasLayout || this.hasFlexChild && this.layoutConfig.addFlexToParent ? 'flex' : this.styler.lookupStyle(this.nativeElement, 'display', true);\n }\n /** Validate the visibility value and then update the host's inline display style */\n updateWithValue(value = true) {\n if (value === '') {\n return;\n }\n const isServer = isPlatformServer(this.platformId);\n this.addStyles(value ? 'true' : 'false', {\n display: this.display,\n isServer\n });\n if (isServer && this.serverModuleLoaded) {\n this.nativeElement.style.setProperty('display', '');\n }\n this.marshal.triggerUpdate(this.parentElement, 'layout-gap');\n }\n }\n ShowHideDirective.ɵfac = function ShowHideDirective_Factory(ɵt) {\n return new (ɵt || ShowHideDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(ShowHideStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(LAYOUT_CONFIG), i0.ɵɵdirectiveInject(PLATFORM_ID), i0.ɵɵdirectiveInject(SERVER_TOKEN));\n };\n ShowHideDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ShowHideDirective,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature]\n });\n return ShowHideDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DISPLAY_MAP = /*#__PURE__*/new WeakMap();\nconst inputs$1 = ['fxShow', 'fxShow.print', 'fxShow.xs', 'fxShow.sm', 'fxShow.md', 'fxShow.lg', 'fxShow.xl', 'fxShow.lt-sm', 'fxShow.lt-md', 'fxShow.lt-lg', 'fxShow.lt-xl', 'fxShow.gt-xs', 'fxShow.gt-sm', 'fxShow.gt-md', 'fxShow.gt-lg', 'fxHide', 'fxHide.print', 'fxHide.xs', 'fxHide.sm', 'fxHide.md', 'fxHide.lg', 'fxHide.xl', 'fxHide.lt-sm', 'fxHide.lt-md', 'fxHide.lt-lg', 'fxHide.lt-xl', 'fxHide.gt-xs', 'fxHide.gt-sm', 'fxHide.gt-md', 'fxHide.gt-lg'];\nconst selector$1 = `\n [fxShow], [fxShow.print],\n [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl],\n [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl],\n [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg],\n [fxHide], [fxHide.print],\n [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl],\n [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl],\n [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]\n`;\n/**\n * 'show' Layout API directive\n */\nlet DefaultShowHideDirective = /*#__PURE__*/(() => {\n class DefaultShowHideDirective extends ShowHideDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$1;\n }\n }\n DefaultShowHideDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultShowHideDirective_BaseFactory;\n return function DefaultShowHideDirective_Factory(ɵt) {\n return (ɵDefaultShowHideDirective_BaseFactory || (ɵDefaultShowHideDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultShowHideDirective)))(ɵt || DefaultShowHideDirective);\n };\n })();\n DefaultShowHideDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultShowHideDirective,\n selectors: [[\"\", \"fxShow\", \"\"], [\"\", \"fxShow.print\", \"\"], [\"\", \"fxShow.xs\", \"\"], [\"\", \"fxShow.sm\", \"\"], [\"\", \"fxShow.md\", \"\"], [\"\", \"fxShow.lg\", \"\"], [\"\", \"fxShow.xl\", \"\"], [\"\", \"fxShow.lt-sm\", \"\"], [\"\", \"fxShow.lt-md\", \"\"], [\"\", \"fxShow.lt-lg\", \"\"], [\"\", \"fxShow.lt-xl\", \"\"], [\"\", \"fxShow.gt-xs\", \"\"], [\"\", \"fxShow.gt-sm\", \"\"], [\"\", \"fxShow.gt-md\", \"\"], [\"\", \"fxShow.gt-lg\", \"\"], [\"\", \"fxHide\", \"\"], [\"\", \"fxHide.print\", \"\"], [\"\", \"fxHide.xs\", \"\"], [\"\", \"fxHide.sm\", \"\"], [\"\", \"fxHide.md\", \"\"], [\"\", \"fxHide.lg\", \"\"], [\"\", \"fxHide.xl\", \"\"], [\"\", \"fxHide.lt-sm\", \"\"], [\"\", \"fxHide.lt-md\", \"\"], [\"\", \"fxHide.lt-lg\", \"\"], [\"\", \"fxHide.lt-xl\", \"\"], [\"\", \"fxHide.gt-xs\", \"\"], [\"\", \"fxHide.gt-sm\", \"\"], [\"\", \"fxHide.gt-md\", \"\"], [\"\", \"fxHide.gt-lg\", \"\"]],\n inputs: {\n fxShow: \"fxShow\",\n \"fxShow.print\": \"fxShow.print\",\n \"fxShow.xs\": \"fxShow.xs\",\n \"fxShow.sm\": \"fxShow.sm\",\n \"fxShow.md\": \"fxShow.md\",\n \"fxShow.lg\": \"fxShow.lg\",\n \"fxShow.xl\": \"fxShow.xl\",\n \"fxShow.lt-sm\": \"fxShow.lt-sm\",\n \"fxShow.lt-md\": \"fxShow.lt-md\",\n \"fxShow.lt-lg\": \"fxShow.lt-lg\",\n \"fxShow.lt-xl\": \"fxShow.lt-xl\",\n \"fxShow.gt-xs\": \"fxShow.gt-xs\",\n \"fxShow.gt-sm\": \"fxShow.gt-sm\",\n \"fxShow.gt-md\": \"fxShow.gt-md\",\n \"fxShow.gt-lg\": \"fxShow.gt-lg\",\n fxHide: \"fxHide\",\n \"fxHide.print\": \"fxHide.print\",\n \"fxHide.xs\": \"fxHide.xs\",\n \"fxHide.sm\": \"fxHide.sm\",\n \"fxHide.md\": \"fxHide.md\",\n \"fxHide.lg\": \"fxHide.lg\",\n \"fxHide.xl\": \"fxHide.xl\",\n \"fxHide.lt-sm\": \"fxHide.lt-sm\",\n \"fxHide.lt-md\": \"fxHide.lt-md\",\n \"fxHide.lt-lg\": \"fxHide.lt-lg\",\n \"fxHide.lt-xl\": \"fxHide.lt-xl\",\n \"fxHide.gt-xs\": \"fxHide.gt-xs\",\n \"fxHide.gt-sm\": \"fxHide.gt-sm\",\n \"fxHide.gt-md\": \"fxHide.gt-md\",\n \"fxHide.gt-lg\": \"fxHide.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultShowHideDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** NgStyle allowed inputs */\nclass NgStyleKeyValue {\n constructor(key, value, noQuotes = true) {\n this.key = key;\n this.value = value;\n this.key = noQuotes ? key.replace(/['\"]/g, '').trim() : key.trim();\n this.value = noQuotes ? value.replace(/['\"]/g, '').trim() : value.trim();\n this.value = this.value.replace(/;/, '');\n }\n}\nfunction getType(target) {\n let what = typeof target;\n if (what === 'object') {\n return target.constructor === Array ? 'array' : target.constructor === Set ? 'set' : 'object';\n }\n return what;\n}\n/**\n * Split string of key:value pairs into Array of k-v pairs\n * e.g. 'key:value; key:value; key:value;' -> ['key:value',...]\n */\nfunction buildRawList(source, delimiter = ';') {\n return String(source).trim().split(delimiter).map(val => val.trim()).filter(val => val !== '');\n}\n/** Convert array of key:value strings to a iterable map object */\nfunction buildMapFromList$1(styles, sanitize) {\n const sanitizeValue = it => {\n if (sanitize) {\n it.value = sanitize(it.value);\n }\n return it;\n };\n return styles.map(stringToKeyValue).filter(entry => !!entry).map(sanitizeValue).reduce(keyValuesToMap, {});\n}\n/** Convert Set or raw Object to an iterable NgStyleMap */\nfunction buildMapFromSet(source, sanitize) {\n let list = [];\n if (getType(source) === 'set') {\n source.forEach(entry => list.push(entry));\n } else {\n Object.keys(source).forEach(key => {\n list.push(`${key}:${source[key]}`);\n });\n }\n return buildMapFromList$1(list, sanitize);\n}\n/** Convert 'key:value' -> [key, value] */\nfunction stringToKeyValue(it) {\n const [key, ...vals] = it.split(':');\n return new NgStyleKeyValue(key, vals.join(':'));\n}\n/** Convert [ [key,value] ] -> { key : value } */\nfunction keyValuesToMap(map, entry) {\n if (!!entry.key) {\n map[entry.key] = entry.value;\n }\n return map;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet StyleDirective = /*#__PURE__*/(() => {\n class StyleDirective extends BaseDirective2 {\n constructor(elementRef, styler, marshal, sanitizer, differs, renderer2, ngStyleInstance, serverLoaded, platformId) {\n super(elementRef, null, styler, marshal);\n this.sanitizer = sanitizer;\n this.ngStyleInstance = ngStyleInstance;\n this.DIRECTIVE_KEY = 'ngStyle';\n if (!this.ngStyleInstance) {\n // Create an instance NgStyle Directive instance only if `ngStyle=\"\"` has NOT been\n // defined on the same host element; since the responsive variations may be defined...\n this.ngStyleInstance = new NgStyle(elementRef, differs, renderer2);\n }\n this.init();\n const styles = this.nativeElement.getAttribute('style') ?? '';\n this.fallbackStyles = this.buildStyleMap(styles);\n this.isServer = serverLoaded && isPlatformServer(platformId);\n }\n /** Add generated styles */\n updateWithValue(value) {\n const styles = this.buildStyleMap(value);\n this.ngStyleInstance.ngStyle = {\n ...this.fallbackStyles,\n ...styles\n };\n if (this.isServer) {\n this.applyStyleToElement(styles);\n }\n this.ngStyleInstance.ngDoCheck();\n }\n /** Remove generated styles */\n clearStyles() {\n this.ngStyleInstance.ngStyle = this.fallbackStyles;\n this.ngStyleInstance.ngDoCheck();\n }\n /**\n * Convert raw strings to ngStyleMap; which is required by ngStyle\n * NOTE: Raw string key-value pairs MUST be delimited by `;`\n * Comma-delimiters are not supported due to complexities of\n * possible style values such as `rgba(x,x,x,x)` and others\n */\n buildStyleMap(styles) {\n // Always safe-guard (aka sanitize) style property values\n const sanitizer = val => this.sanitizer.sanitize(SecurityContext.STYLE, val) ?? '';\n if (styles) {\n switch (getType(styles)) {\n case 'string':\n return buildMapFromList(buildRawList(styles), sanitizer);\n case 'array':\n return buildMapFromList(styles, sanitizer);\n case 'set':\n return buildMapFromSet(styles, sanitizer);\n default:\n return buildMapFromSet(styles, sanitizer);\n }\n }\n return {};\n }\n // ******************************************************************\n // Lifecycle Hooks\n // ******************************************************************\n /** For ChangeDetectionStrategy.onPush and ngOnChanges() updates */\n ngDoCheck() {\n this.ngStyleInstance.ngDoCheck();\n }\n }\n StyleDirective.ɵfac = function StyleDirective_Factory(ɵt) {\n return new (ɵt || StyleDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller), i0.ɵɵdirectiveInject(i2$1.DomSanitizer), i0.ɵɵdirectiveInject(i0.KeyValueDiffers), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i2.NgStyle, 10), i0.ɵɵdirectiveInject(SERVER_TOKEN), i0.ɵɵdirectiveInject(PLATFORM_ID));\n };\n StyleDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: StyleDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return StyleDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst inputs = ['ngStyle', 'ngStyle.xs', 'ngStyle.sm', 'ngStyle.md', 'ngStyle.lg', 'ngStyle.xl', 'ngStyle.lt-sm', 'ngStyle.lt-md', 'ngStyle.lt-lg', 'ngStyle.lt-xl', 'ngStyle.gt-xs', 'ngStyle.gt-sm', 'ngStyle.gt-md', 'ngStyle.gt-lg'];\nconst selector = `\n [ngStyle],\n [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl],\n [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl],\n [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]\n`;\n/**\n * Directive to add responsive support for ngStyle.\n *\n */\nlet DefaultStyleDirective = /*#__PURE__*/(() => {\n class DefaultStyleDirective extends StyleDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs;\n }\n }\n DefaultStyleDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultStyleDirective_BaseFactory;\n return function DefaultStyleDirective_Factory(ɵt) {\n return (ɵDefaultStyleDirective_BaseFactory || (ɵDefaultStyleDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultStyleDirective)))(ɵt || DefaultStyleDirective);\n };\n })();\n DefaultStyleDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultStyleDirective,\n selectors: [[\"\", \"ngStyle\", \"\"], [\"\", \"ngStyle.xs\", \"\"], [\"\", \"ngStyle.sm\", \"\"], [\"\", \"ngStyle.md\", \"\"], [\"\", \"ngStyle.lg\", \"\"], [\"\", \"ngStyle.xl\", \"\"], [\"\", \"ngStyle.lt-sm\", \"\"], [\"\", \"ngStyle.lt-md\", \"\"], [\"\", \"ngStyle.lt-lg\", \"\"], [\"\", \"ngStyle.lt-xl\", \"\"], [\"\", \"ngStyle.gt-xs\", \"\"], [\"\", \"ngStyle.gt-sm\", \"\"], [\"\", \"ngStyle.gt-md\", \"\"], [\"\", \"ngStyle.gt-lg\", \"\"]],\n inputs: {\n ngStyle: \"ngStyle\",\n \"ngStyle.xs\": \"ngStyle.xs\",\n \"ngStyle.sm\": \"ngStyle.sm\",\n \"ngStyle.md\": \"ngStyle.md\",\n \"ngStyle.lg\": \"ngStyle.lg\",\n \"ngStyle.xl\": \"ngStyle.xl\",\n \"ngStyle.lt-sm\": \"ngStyle.lt-sm\",\n \"ngStyle.lt-md\": \"ngStyle.lt-md\",\n \"ngStyle.lt-lg\": \"ngStyle.lt-lg\",\n \"ngStyle.lt-xl\": \"ngStyle.lt-xl\",\n \"ngStyle.gt-xs\": \"ngStyle.gt-xs\",\n \"ngStyle.gt-sm\": \"ngStyle.gt-sm\",\n \"ngStyle.gt-md\": \"ngStyle.gt-md\",\n \"ngStyle.gt-lg\": \"ngStyle.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultStyleDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Build a styles map from a list of styles, while sanitizing bad values first */\nfunction buildMapFromList(styles, sanitize) {\n const sanitizeValue = it => {\n if (sanitize) {\n it.value = sanitize(it.value);\n }\n return it;\n };\n return styles.map(stringToKeyValue).filter(entry => !!entry).map(sanitizeValue).reduce(keyValuesToMap, {});\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ALL_DIRECTIVES = [DefaultShowHideDirective, DefaultClassDirective, DefaultStyleDirective, DefaultImgSrcDirective];\n/**\n * *****************************************************************\n * Define module for the Extended API\n * *****************************************************************\n */\nlet ExtendedModule = /*#__PURE__*/(() => {\n class ExtendedModule {}\n ExtendedModule.ɵfac = function ExtendedModule_Factory(ɵt) {\n return new (ɵt || ExtendedModule)();\n };\n ExtendedModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ExtendedModule\n });\n ExtendedModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CoreModule]\n });\n return ExtendedModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ClassDirective, DefaultClassDirective, DefaultImgSrcDirective, DefaultShowHideDirective, DefaultStyleDirective, ExtendedModule, ImgSrcDirective, ImgSrcStyleBuilder, ShowHideDirective, ShowHideStyleBuilder, StyleDirective };\n","import * as i0 from '@angular/core';\nimport { Injectable, Directive, Input, NgModule } from '@angular/core';\nimport * as i1 from '@angular/flex-layout/core';\nimport { StyleBuilder, BaseDirective2, CoreModule } from '@angular/flex-layout/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ROW_DEFAULT = 'stretch';\nconst COL_DEFAULT = 'stretch';\nlet GridAlignStyleBuilder = /*#__PURE__*/(() => {\n class GridAlignStyleBuilder extends StyleBuilder {\n buildStyles(input) {\n return buildCss$2(input || ROW_DEFAULT);\n }\n }\n GridAlignStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAlignStyleBuilder_BaseFactory;\n return function GridAlignStyleBuilder_Factory(ɵt) {\n return (ɵGridAlignStyleBuilder_BaseFactory || (ɵGridAlignStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridAlignStyleBuilder)))(ɵt || GridAlignStyleBuilder);\n };\n })();\n GridAlignStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAlignStyleBuilder,\n factory: GridAlignStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridAlignStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAlignDirective = /*#__PURE__*/(() => {\n class GridAlignDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align';\n this.styleCache = alignCache;\n this.init();\n }\n }\n GridAlignDirective.ɵfac = function GridAlignDirective_Factory(ɵt) {\n return new (ɵt || GridAlignDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridAlignStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAlignDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst alignCache = /*#__PURE__*/new Map();\nconst inputs$a = ['gdGridAlign', 'gdGridAlign.xs', 'gdGridAlign.sm', 'gdGridAlign.md', 'gdGridAlign.lg', 'gdGridAlign.xl', 'gdGridAlign.lt-sm', 'gdGridAlign.lt-md', 'gdGridAlign.lt-lg', 'gdGridAlign.lt-xl', 'gdGridAlign.gt-xs', 'gdGridAlign.gt-sm', 'gdGridAlign.gt-md', 'gdGridAlign.gt-lg'];\nconst selector$a = `\n [gdGridAlign],\n [gdGridAlign.xs], [gdGridAlign.sm], [gdGridAlign.md], [gdGridAlign.lg],[gdGridAlign.xl],\n [gdGridAlign.lt-sm], [gdGridAlign.lt-md], [gdGridAlign.lt-lg], [gdGridAlign.lt-xl],\n [gdGridAlign.gt-xs], [gdGridAlign.gt-sm], [gdGridAlign.gt-md], [gdGridAlign.gt-lg]\n`;\n/**\n * 'align' CSS Grid styling directive for grid children\n * Defines positioning of child elements along row and column axis in a grid container\n * Optional values: {row-axis} values or {row-axis column-axis} value pairs\n *\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-justify-self\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-align-self\n */\nlet DefaultGridAlignDirective = /*#__PURE__*/(() => {\n class DefaultGridAlignDirective extends GridAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$a;\n }\n }\n DefaultGridAlignDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAlignDirective_BaseFactory;\n return function DefaultGridAlignDirective_Factory(ɵt) {\n return (ɵDefaultGridAlignDirective_BaseFactory || (ɵDefaultGridAlignDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAlignDirective)))(ɵt || DefaultGridAlignDirective);\n };\n })();\n DefaultGridAlignDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAlignDirective,\n selectors: [[\"\", \"gdGridAlign\", \"\"], [\"\", \"gdGridAlign.xs\", \"\"], [\"\", \"gdGridAlign.sm\", \"\"], [\"\", \"gdGridAlign.md\", \"\"], [\"\", \"gdGridAlign.lg\", \"\"], [\"\", \"gdGridAlign.xl\", \"\"], [\"\", \"gdGridAlign.lt-sm\", \"\"], [\"\", \"gdGridAlign.lt-md\", \"\"], [\"\", \"gdGridAlign.lt-lg\", \"\"], [\"\", \"gdGridAlign.lt-xl\", \"\"], [\"\", \"gdGridAlign.gt-xs\", \"\"], [\"\", \"gdGridAlign.gt-sm\", \"\"], [\"\", \"gdGridAlign.gt-md\", \"\"], [\"\", \"gdGridAlign.gt-lg\", \"\"]],\n inputs: {\n gdGridAlign: \"gdGridAlign\",\n \"gdGridAlign.xs\": \"gdGridAlign.xs\",\n \"gdGridAlign.sm\": \"gdGridAlign.sm\",\n \"gdGridAlign.md\": \"gdGridAlign.md\",\n \"gdGridAlign.lg\": \"gdGridAlign.lg\",\n \"gdGridAlign.xl\": \"gdGridAlign.xl\",\n \"gdGridAlign.lt-sm\": \"gdGridAlign.lt-sm\",\n \"gdGridAlign.lt-md\": \"gdGridAlign.lt-md\",\n \"gdGridAlign.lt-lg\": \"gdGridAlign.lt-lg\",\n \"gdGridAlign.lt-xl\": \"gdGridAlign.lt-xl\",\n \"gdGridAlign.gt-xs\": \"gdGridAlign.gt-xs\",\n \"gdGridAlign.gt-sm\": \"gdGridAlign.gt-sm\",\n \"gdGridAlign.gt-md\": \"gdGridAlign.gt-md\",\n \"gdGridAlign.gt-lg\": \"gdGridAlign.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAlignDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction buildCss$2(align = '') {\n const css = {},\n [rowAxis, columnAxis] = align.split(' ');\n // Row axis\n switch (rowAxis) {\n case 'end':\n css['justify-self'] = 'end';\n break;\n case 'center':\n css['justify-self'] = 'center';\n break;\n case 'stretch':\n css['justify-self'] = 'stretch';\n break;\n case 'start':\n css['justify-self'] = 'start';\n break;\n default:\n css['justify-self'] = ROW_DEFAULT; // default row axis\n break;\n }\n // Column axis\n switch (columnAxis) {\n case 'end':\n css['align-self'] = 'end';\n break;\n case 'center':\n css['align-self'] = 'center';\n break;\n case 'stretch':\n css['align-self'] = 'stretch';\n break;\n case 'start':\n css['align-self'] = 'start';\n break;\n default:\n css['align-self'] = COL_DEFAULT; // default column axis\n break;\n }\n return css;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_MAIN$1 = 'start';\nconst DEFAULT_CROSS$1 = 'stretch';\nlet GridAlignColumnsStyleBuilder = /*#__PURE__*/(() => {\n class GridAlignColumnsStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n return buildCss$1(input || `${DEFAULT_MAIN$1} ${DEFAULT_CROSS$1}`, parent.inline);\n }\n }\n GridAlignColumnsStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAlignColumnsStyleBuilder_BaseFactory;\n return function GridAlignColumnsStyleBuilder_Factory(ɵt) {\n return (ɵGridAlignColumnsStyleBuilder_BaseFactory || (ɵGridAlignColumnsStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridAlignColumnsStyleBuilder)))(ɵt || GridAlignColumnsStyleBuilder);\n };\n })();\n GridAlignColumnsStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAlignColumnsStyleBuilder,\n factory: GridAlignColumnsStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridAlignColumnsStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAlignColumnsDirective = /*#__PURE__*/(() => {\n class GridAlignColumnsDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align-columns';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? alignColumnsInlineCache : alignColumnsCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridAlignColumnsDirective.ɵfac = function GridAlignColumnsDirective_Factory(ɵt) {\n return new (ɵt || GridAlignColumnsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridAlignColumnsStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAlignColumnsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAlignColumnsDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAlignColumnsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst alignColumnsCache = /*#__PURE__*/new Map();\nconst alignColumnsInlineCache = /*#__PURE__*/new Map();\nconst inputs$9 = ['gdAlignColumns', 'gdAlignColumns.xs', 'gdAlignColumns.sm', 'gdAlignColumns.md', 'gdAlignColumns.lg', 'gdAlignColumns.xl', 'gdAlignColumns.lt-sm', 'gdAlignColumns.lt-md', 'gdAlignColumns.lt-lg', 'gdAlignColumns.lt-xl', 'gdAlignColumns.gt-xs', 'gdAlignColumns.gt-sm', 'gdAlignColumns.gt-md', 'gdAlignColumns.gt-lg'];\nconst selector$9 = `\n [gdAlignColumns],\n [gdAlignColumns.xs], [gdAlignColumns.sm], [gdAlignColumns.md],\n [gdAlignColumns.lg], [gdAlignColumns.xl], [gdAlignColumns.lt-sm],\n [gdAlignColumns.lt-md], [gdAlignColumns.lt-lg], [gdAlignColumns.lt-xl],\n [gdAlignColumns.gt-xs], [gdAlignColumns.gt-sm], [gdAlignColumns.gt-md],\n [gdAlignColumns.gt-lg]\n`;\n/**\n * 'column alignment' CSS Grid styling directive\n * Configures the alignment in the column direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-19\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-21\n */\nlet DefaultGridAlignColumnsDirective = /*#__PURE__*/(() => {\n class DefaultGridAlignColumnsDirective extends GridAlignColumnsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$9;\n }\n }\n DefaultGridAlignColumnsDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAlignColumnsDirective_BaseFactory;\n return function DefaultGridAlignColumnsDirective_Factory(ɵt) {\n return (ɵDefaultGridAlignColumnsDirective_BaseFactory || (ɵDefaultGridAlignColumnsDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAlignColumnsDirective)))(ɵt || DefaultGridAlignColumnsDirective);\n };\n })();\n DefaultGridAlignColumnsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAlignColumnsDirective,\n selectors: [[\"\", \"gdAlignColumns\", \"\"], [\"\", \"gdAlignColumns.xs\", \"\"], [\"\", \"gdAlignColumns.sm\", \"\"], [\"\", \"gdAlignColumns.md\", \"\"], [\"\", \"gdAlignColumns.lg\", \"\"], [\"\", \"gdAlignColumns.xl\", \"\"], [\"\", \"gdAlignColumns.lt-sm\", \"\"], [\"\", \"gdAlignColumns.lt-md\", \"\"], [\"\", \"gdAlignColumns.lt-lg\", \"\"], [\"\", \"gdAlignColumns.lt-xl\", \"\"], [\"\", \"gdAlignColumns.gt-xs\", \"\"], [\"\", \"gdAlignColumns.gt-sm\", \"\"], [\"\", \"gdAlignColumns.gt-md\", \"\"], [\"\", \"gdAlignColumns.gt-lg\", \"\"]],\n inputs: {\n gdAlignColumns: \"gdAlignColumns\",\n \"gdAlignColumns.xs\": \"gdAlignColumns.xs\",\n \"gdAlignColumns.sm\": \"gdAlignColumns.sm\",\n \"gdAlignColumns.md\": \"gdAlignColumns.md\",\n \"gdAlignColumns.lg\": \"gdAlignColumns.lg\",\n \"gdAlignColumns.xl\": \"gdAlignColumns.xl\",\n \"gdAlignColumns.lt-sm\": \"gdAlignColumns.lt-sm\",\n \"gdAlignColumns.lt-md\": \"gdAlignColumns.lt-md\",\n \"gdAlignColumns.lt-lg\": \"gdAlignColumns.lt-lg\",\n \"gdAlignColumns.lt-xl\": \"gdAlignColumns.lt-xl\",\n \"gdAlignColumns.gt-xs\": \"gdAlignColumns.gt-xs\",\n \"gdAlignColumns.gt-sm\": \"gdAlignColumns.gt-sm\",\n \"gdAlignColumns.gt-md\": \"gdAlignColumns.gt-md\",\n \"gdAlignColumns.gt-lg\": \"gdAlignColumns.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAlignColumnsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction buildCss$1(align, inline) {\n const css = {},\n [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['align-content'] = 'center';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['align-content'] = 'space-evenly';\n break;\n case 'end':\n css['align-content'] = 'end';\n break;\n case 'start':\n css['align-content'] = 'start';\n break;\n case 'stretch':\n css['align-content'] = 'stretch';\n break;\n default:\n css['align-content'] = DEFAULT_MAIN$1; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n css['align-items'] = 'start';\n break;\n case 'center':\n css['align-items'] = 'center';\n break;\n case 'end':\n css['align-items'] = 'end';\n break;\n case 'stretch':\n css['align-items'] = 'stretch';\n break;\n default:\n // 'stretch'\n css['align-items'] = DEFAULT_CROSS$1; // default cross axis\n break;\n }\n css['display'] = inline ? 'inline-grid' : 'grid';\n return css;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_MAIN = 'start';\nconst DEFAULT_CROSS = 'stretch';\nlet GridAlignRowsStyleBuilder = /*#__PURE__*/(() => {\n class GridAlignRowsStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n return buildCss(input || `${DEFAULT_MAIN} ${DEFAULT_CROSS}`, parent.inline);\n }\n }\n GridAlignRowsStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAlignRowsStyleBuilder_BaseFactory;\n return function GridAlignRowsStyleBuilder_Factory(ɵt) {\n return (ɵGridAlignRowsStyleBuilder_BaseFactory || (ɵGridAlignRowsStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridAlignRowsStyleBuilder)))(ɵt || GridAlignRowsStyleBuilder);\n };\n })();\n GridAlignRowsStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAlignRowsStyleBuilder,\n factory: GridAlignRowsStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridAlignRowsStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAlignRowsDirective = /*#__PURE__*/(() => {\n class GridAlignRowsDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align-rows';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? alignRowsInlineCache : alignRowsCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridAlignRowsDirective.ɵfac = function GridAlignRowsDirective_Factory(ɵt) {\n return new (ɵt || GridAlignRowsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridAlignRowsStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAlignRowsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAlignRowsDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAlignRowsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst alignRowsCache = /*#__PURE__*/new Map();\nconst alignRowsInlineCache = /*#__PURE__*/new Map();\nconst inputs$8 = ['gdAlignRows', 'gdAlignRows.xs', 'gdAlignRows.sm', 'gdAlignRows.md', 'gdAlignRows.lg', 'gdAlignRows.xl', 'gdAlignRows.lt-sm', 'gdAlignRows.lt-md', 'gdAlignRows.lt-lg', 'gdAlignRows.lt-xl', 'gdAlignRows.gt-xs', 'gdAlignRows.gt-sm', 'gdAlignRows.gt-md', 'gdAlignRows.gt-lg'];\nconst selector$8 = `\n [gdAlignRows],\n [gdAlignRows.xs], [gdAlignRows.sm], [gdAlignRows.md],\n [gdAlignRows.lg], [gdAlignRows.xl], [gdAlignRows.lt-sm],\n [gdAlignRows.lt-md], [gdAlignRows.lt-lg], [gdAlignRows.lt-xl],\n [gdAlignRows.gt-xs], [gdAlignRows.gt-sm], [gdAlignRows.gt-md],\n [gdAlignRows.gt-lg]\n`;\n/**\n * 'row alignment' CSS Grid styling directive\n * Configures the alignment in the row direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-18\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-20\n */\nlet DefaultGridAlignRowsDirective = /*#__PURE__*/(() => {\n class DefaultGridAlignRowsDirective extends GridAlignRowsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$8;\n }\n }\n DefaultGridAlignRowsDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAlignRowsDirective_BaseFactory;\n return function DefaultGridAlignRowsDirective_Factory(ɵt) {\n return (ɵDefaultGridAlignRowsDirective_BaseFactory || (ɵDefaultGridAlignRowsDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAlignRowsDirective)))(ɵt || DefaultGridAlignRowsDirective);\n };\n })();\n DefaultGridAlignRowsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAlignRowsDirective,\n selectors: [[\"\", \"gdAlignRows\", \"\"], [\"\", \"gdAlignRows.xs\", \"\"], [\"\", \"gdAlignRows.sm\", \"\"], [\"\", \"gdAlignRows.md\", \"\"], [\"\", \"gdAlignRows.lg\", \"\"], [\"\", \"gdAlignRows.xl\", \"\"], [\"\", \"gdAlignRows.lt-sm\", \"\"], [\"\", \"gdAlignRows.lt-md\", \"\"], [\"\", \"gdAlignRows.lt-lg\", \"\"], [\"\", \"gdAlignRows.lt-xl\", \"\"], [\"\", \"gdAlignRows.gt-xs\", \"\"], [\"\", \"gdAlignRows.gt-sm\", \"\"], [\"\", \"gdAlignRows.gt-md\", \"\"], [\"\", \"gdAlignRows.gt-lg\", \"\"]],\n inputs: {\n gdAlignRows: \"gdAlignRows\",\n \"gdAlignRows.xs\": \"gdAlignRows.xs\",\n \"gdAlignRows.sm\": \"gdAlignRows.sm\",\n \"gdAlignRows.md\": \"gdAlignRows.md\",\n \"gdAlignRows.lg\": \"gdAlignRows.lg\",\n \"gdAlignRows.xl\": \"gdAlignRows.xl\",\n \"gdAlignRows.lt-sm\": \"gdAlignRows.lt-sm\",\n \"gdAlignRows.lt-md\": \"gdAlignRows.lt-md\",\n \"gdAlignRows.lt-lg\": \"gdAlignRows.lt-lg\",\n \"gdAlignRows.lt-xl\": \"gdAlignRows.lt-xl\",\n \"gdAlignRows.gt-xs\": \"gdAlignRows.gt-xs\",\n \"gdAlignRows.gt-sm\": \"gdAlignRows.gt-sm\",\n \"gdAlignRows.gt-md\": \"gdAlignRows.gt-md\",\n \"gdAlignRows.gt-lg\": \"gdAlignRows.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAlignRowsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction buildCss(align, inline) {\n const css = {},\n [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n case 'space-around':\n case 'space-between':\n case 'space-evenly':\n case 'end':\n case 'start':\n case 'stretch':\n css['justify-content'] = mainAxis;\n break;\n default:\n css['justify-content'] = DEFAULT_MAIN; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'center':\n case 'end':\n case 'stretch':\n css['justify-items'] = crossAxis;\n break;\n default:\n // 'stretch'\n css['justify-items'] = DEFAULT_CROSS; // default cross axis\n break;\n }\n css['display'] = inline ? 'inline-grid' : 'grid';\n return css;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$7 = 'auto';\nlet GridAreaStyleBuilder = /*#__PURE__*/(() => {\n class GridAreaStyleBuilder extends StyleBuilder {\n buildStyles(input) {\n return {\n 'grid-area': input || DEFAULT_VALUE$7\n };\n }\n }\n GridAreaStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAreaStyleBuilder_BaseFactory;\n return function GridAreaStyleBuilder_Factory(ɵt) {\n return (ɵGridAreaStyleBuilder_BaseFactory || (ɵGridAreaStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridAreaStyleBuilder)))(ɵt || GridAreaStyleBuilder);\n };\n })();\n GridAreaStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAreaStyleBuilder,\n factory: GridAreaStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridAreaStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAreaDirective = /*#__PURE__*/(() => {\n class GridAreaDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-area';\n this.styleCache = gridAreaCache;\n this.init();\n }\n }\n GridAreaDirective.ɵfac = function GridAreaDirective_Factory(ɵt) {\n return new (ɵt || GridAreaDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(GridAreaStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAreaDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAreaDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAreaDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst gridAreaCache = /*#__PURE__*/new Map();\nconst inputs$7 = ['gdArea', 'gdArea.xs', 'gdArea.sm', 'gdArea.md', 'gdArea.lg', 'gdArea.xl', 'gdArea.lt-sm', 'gdArea.lt-md', 'gdArea.lt-lg', 'gdArea.lt-xl', 'gdArea.gt-xs', 'gdArea.gt-sm', 'gdArea.gt-md', 'gdArea.gt-lg'];\nconst selector$7 = `\n [gdArea],\n [gdArea.xs], [gdArea.sm], [gdArea.md], [gdArea.lg], [gdArea.xl],\n [gdArea.lt-sm], [gdArea.lt-md], [gdArea.lt-lg], [gdArea.lt-xl],\n [gdArea.gt-xs], [gdArea.gt-sm], [gdArea.gt-md], [gdArea.gt-lg]\n`;\n/**\n * 'grid-area' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-27\n */\nlet DefaultGridAreaDirective = /*#__PURE__*/(() => {\n class DefaultGridAreaDirective extends GridAreaDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$7;\n }\n }\n DefaultGridAreaDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAreaDirective_BaseFactory;\n return function DefaultGridAreaDirective_Factory(ɵt) {\n return (ɵDefaultGridAreaDirective_BaseFactory || (ɵDefaultGridAreaDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAreaDirective)))(ɵt || DefaultGridAreaDirective);\n };\n })();\n DefaultGridAreaDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAreaDirective,\n selectors: [[\"\", \"gdArea\", \"\"], [\"\", \"gdArea.xs\", \"\"], [\"\", \"gdArea.sm\", \"\"], [\"\", \"gdArea.md\", \"\"], [\"\", \"gdArea.lg\", \"\"], [\"\", \"gdArea.xl\", \"\"], [\"\", \"gdArea.lt-sm\", \"\"], [\"\", \"gdArea.lt-md\", \"\"], [\"\", \"gdArea.lt-lg\", \"\"], [\"\", \"gdArea.lt-xl\", \"\"], [\"\", \"gdArea.gt-xs\", \"\"], [\"\", \"gdArea.gt-sm\", \"\"], [\"\", \"gdArea.gt-md\", \"\"], [\"\", \"gdArea.gt-lg\", \"\"]],\n inputs: {\n gdArea: \"gdArea\",\n \"gdArea.xs\": \"gdArea.xs\",\n \"gdArea.sm\": \"gdArea.sm\",\n \"gdArea.md\": \"gdArea.md\",\n \"gdArea.lg\": \"gdArea.lg\",\n \"gdArea.xl\": \"gdArea.xl\",\n \"gdArea.lt-sm\": \"gdArea.lt-sm\",\n \"gdArea.lt-md\": \"gdArea.lt-md\",\n \"gdArea.lt-lg\": \"gdArea.lt-lg\",\n \"gdArea.lt-xl\": \"gdArea.lt-xl\",\n \"gdArea.gt-xs\": \"gdArea.gt-xs\",\n \"gdArea.gt-sm\": \"gdArea.gt-sm\",\n \"gdArea.gt-md\": \"gdArea.gt-md\",\n \"gdArea.gt-lg\": \"gdArea.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAreaDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$6 = 'none';\nconst DELIMETER = '|';\nlet GridAreasStyleBuiler = /*#__PURE__*/(() => {\n class GridAreasStyleBuiler extends StyleBuilder {\n buildStyles(input, parent) {\n const areas = (input || DEFAULT_VALUE$6).split(DELIMETER).map(v => `\"${v.trim()}\"`);\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-template-areas': areas.join(' ')\n };\n }\n }\n GridAreasStyleBuiler.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAreasStyleBuiler_BaseFactory;\n return function GridAreasStyleBuiler_Factory(ɵt) {\n return (ɵGridAreasStyleBuiler_BaseFactory || (ɵGridAreasStyleBuiler_BaseFactory = i0.ɵɵgetInheritedFactory(GridAreasStyleBuiler)))(ɵt || GridAreasStyleBuiler);\n };\n })();\n GridAreasStyleBuiler.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAreasStyleBuiler,\n factory: GridAreasStyleBuiler.ɵfac,\n providedIn: 'root'\n });\n return GridAreasStyleBuiler;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAreasDirective = /*#__PURE__*/(() => {\n class GridAreasDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-areas';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? areasInlineCache : areasCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridAreasDirective.ɵfac = function GridAreasDirective_Factory(ɵt) {\n return new (ɵt || GridAreasDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(GridAreasStyleBuiler), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAreasDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAreasDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAreasDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst areasCache = /*#__PURE__*/new Map();\nconst areasInlineCache = /*#__PURE__*/new Map();\nconst inputs$6 = ['gdAreas', 'gdAreas.xs', 'gdAreas.sm', 'gdAreas.md', 'gdAreas.lg', 'gdAreas.xl', 'gdAreas.lt-sm', 'gdAreas.lt-md', 'gdAreas.lt-lg', 'gdAreas.lt-xl', 'gdAreas.gt-xs', 'gdAreas.gt-sm', 'gdAreas.gt-md', 'gdAreas.gt-lg'];\nconst selector$6 = `\n [gdAreas],\n [gdAreas.xs], [gdAreas.sm], [gdAreas.md], [gdAreas.lg], [gdAreas.xl],\n [gdAreas.lt-sm], [gdAreas.lt-md], [gdAreas.lt-lg], [gdAreas.lt-xl],\n [gdAreas.gt-xs], [gdAreas.gt-sm], [gdAreas.gt-md], [gdAreas.gt-lg]\n`;\n/**\n * 'grid-template-areas' CSS Grid styling directive\n * Configures the names of elements within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-14\n */\nlet DefaultGridAreasDirective = /*#__PURE__*/(() => {\n class DefaultGridAreasDirective extends GridAreasDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$6;\n }\n }\n DefaultGridAreasDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAreasDirective_BaseFactory;\n return function DefaultGridAreasDirective_Factory(ɵt) {\n return (ɵDefaultGridAreasDirective_BaseFactory || (ɵDefaultGridAreasDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAreasDirective)))(ɵt || DefaultGridAreasDirective);\n };\n })();\n DefaultGridAreasDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAreasDirective,\n selectors: [[\"\", \"gdAreas\", \"\"], [\"\", \"gdAreas.xs\", \"\"], [\"\", \"gdAreas.sm\", \"\"], [\"\", \"gdAreas.md\", \"\"], [\"\", \"gdAreas.lg\", \"\"], [\"\", \"gdAreas.xl\", \"\"], [\"\", \"gdAreas.lt-sm\", \"\"], [\"\", \"gdAreas.lt-md\", \"\"], [\"\", \"gdAreas.lt-lg\", \"\"], [\"\", \"gdAreas.lt-xl\", \"\"], [\"\", \"gdAreas.gt-xs\", \"\"], [\"\", \"gdAreas.gt-sm\", \"\"], [\"\", \"gdAreas.gt-md\", \"\"], [\"\", \"gdAreas.gt-lg\", \"\"]],\n inputs: {\n gdAreas: \"gdAreas\",\n \"gdAreas.xs\": \"gdAreas.xs\",\n \"gdAreas.sm\": \"gdAreas.sm\",\n \"gdAreas.md\": \"gdAreas.md\",\n \"gdAreas.lg\": \"gdAreas.lg\",\n \"gdAreas.xl\": \"gdAreas.xl\",\n \"gdAreas.lt-sm\": \"gdAreas.lt-sm\",\n \"gdAreas.lt-md\": \"gdAreas.lt-md\",\n \"gdAreas.lt-lg\": \"gdAreas.lt-lg\",\n \"gdAreas.lt-xl\": \"gdAreas.lt-xl\",\n \"gdAreas.gt-xs\": \"gdAreas.gt-xs\",\n \"gdAreas.gt-sm\": \"gdAreas.gt-sm\",\n \"gdAreas.gt-md\": \"gdAreas.gt-md\",\n \"gdAreas.gt-lg\": \"gdAreas.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAreasDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$5 = 'initial';\nlet GridAutoStyleBuilder = /*#__PURE__*/(() => {\n class GridAutoStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n let [direction, dense] = (input || DEFAULT_VALUE$5).split(' ');\n if (direction !== 'column' && direction !== 'row' && direction !== 'dense') {\n direction = 'row';\n }\n dense = dense === 'dense' && direction !== 'dense' ? ' dense' : '';\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-flow': direction + dense\n };\n }\n }\n GridAutoStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridAutoStyleBuilder_BaseFactory;\n return function GridAutoStyleBuilder_Factory(ɵt) {\n return (ɵGridAutoStyleBuilder_BaseFactory || (ɵGridAutoStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridAutoStyleBuilder)))(ɵt || GridAutoStyleBuilder);\n };\n })();\n GridAutoStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridAutoStyleBuilder,\n factory: GridAutoStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridAutoStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridAutoDirective = /*#__PURE__*/(() => {\n class GridAutoDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this._inline = false;\n this.DIRECTIVE_KEY = 'grid-auto';\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? autoInlineCache : autoCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridAutoDirective.ɵfac = function GridAutoDirective_Factory(ɵt) {\n return new (ɵt || GridAutoDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridAutoStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridAutoDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridAutoDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridAutoDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst autoCache = /*#__PURE__*/new Map();\nconst autoInlineCache = /*#__PURE__*/new Map();\nconst inputs$5 = ['gdAuto', 'gdAuto.xs', 'gdAuto.sm', 'gdAuto.md', 'gdAuto.lg', 'gdAuto.xl', 'gdAuto.lt-sm', 'gdAuto.lt-md', 'gdAuto.lt-lg', 'gdAuto.lt-xl', 'gdAuto.gt-xs', 'gdAuto.gt-sm', 'gdAuto.gt-md', 'gdAuto.gt-lg'];\nconst selector$5 = `\n [gdAuto],\n [gdAuto.xs], [gdAuto.sm], [gdAuto.md], [gdAuto.lg], [gdAuto.xl],\n [gdAuto.lt-sm], [gdAuto.lt-md], [gdAuto.lt-lg], [gdAuto.lt-xl],\n [gdAuto.gt-xs], [gdAuto.gt-sm], [gdAuto.gt-md], [gdAuto.gt-lg]\n`;\n/**\n * 'grid-auto-flow' CSS Grid styling directive\n * Configures the auto placement algorithm for the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-23\n */\nlet DefaultGridAutoDirective = /*#__PURE__*/(() => {\n class DefaultGridAutoDirective extends GridAutoDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$5;\n }\n }\n DefaultGridAutoDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridAutoDirective_BaseFactory;\n return function DefaultGridAutoDirective_Factory(ɵt) {\n return (ɵDefaultGridAutoDirective_BaseFactory || (ɵDefaultGridAutoDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridAutoDirective)))(ɵt || DefaultGridAutoDirective);\n };\n })();\n DefaultGridAutoDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridAutoDirective,\n selectors: [[\"\", \"gdAuto\", \"\"], [\"\", \"gdAuto.xs\", \"\"], [\"\", \"gdAuto.sm\", \"\"], [\"\", \"gdAuto.md\", \"\"], [\"\", \"gdAuto.lg\", \"\"], [\"\", \"gdAuto.xl\", \"\"], [\"\", \"gdAuto.lt-sm\", \"\"], [\"\", \"gdAuto.lt-md\", \"\"], [\"\", \"gdAuto.lt-lg\", \"\"], [\"\", \"gdAuto.lt-xl\", \"\"], [\"\", \"gdAuto.gt-xs\", \"\"], [\"\", \"gdAuto.gt-sm\", \"\"], [\"\", \"gdAuto.gt-md\", \"\"], [\"\", \"gdAuto.gt-lg\", \"\"]],\n inputs: {\n gdAuto: \"gdAuto\",\n \"gdAuto.xs\": \"gdAuto.xs\",\n \"gdAuto.sm\": \"gdAuto.sm\",\n \"gdAuto.md\": \"gdAuto.md\",\n \"gdAuto.lg\": \"gdAuto.lg\",\n \"gdAuto.xl\": \"gdAuto.xl\",\n \"gdAuto.lt-sm\": \"gdAuto.lt-sm\",\n \"gdAuto.lt-md\": \"gdAuto.lt-md\",\n \"gdAuto.lt-lg\": \"gdAuto.lt-lg\",\n \"gdAuto.lt-xl\": \"gdAuto.lt-xl\",\n \"gdAuto.gt-xs\": \"gdAuto.gt-xs\",\n \"gdAuto.gt-sm\": \"gdAuto.gt-sm\",\n \"gdAuto.gt-md\": \"gdAuto.gt-md\",\n \"gdAuto.gt-lg\": \"gdAuto.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridAutoDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$4 = 'auto';\nlet GridColumnStyleBuilder = /*#__PURE__*/(() => {\n class GridColumnStyleBuilder extends StyleBuilder {\n buildStyles(input) {\n return {\n 'grid-column': input || DEFAULT_VALUE$4\n };\n }\n }\n GridColumnStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridColumnStyleBuilder_BaseFactory;\n return function GridColumnStyleBuilder_Factory(ɵt) {\n return (ɵGridColumnStyleBuilder_BaseFactory || (ɵGridColumnStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridColumnStyleBuilder)))(ɵt || GridColumnStyleBuilder);\n };\n })();\n GridColumnStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridColumnStyleBuilder,\n factory: GridColumnStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridColumnStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridColumnDirective = /*#__PURE__*/(() => {\n class GridColumnDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-column';\n this.styleCache = columnCache;\n this.init();\n }\n }\n GridColumnDirective.ɵfac = function GridColumnDirective_Factory(ɵt) {\n return new (ɵt || GridColumnDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridColumnStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridColumnDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridColumnDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridColumnDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst columnCache = /*#__PURE__*/new Map();\nconst inputs$4 = ['gdColumn', 'gdColumn.xs', 'gdColumn.sm', 'gdColumn.md', 'gdColumn.lg', 'gdColumn.xl', 'gdColumn.lt-sm', 'gdColumn.lt-md', 'gdColumn.lt-lg', 'gdColumn.lt-xl', 'gdColumn.gt-xs', 'gdColumn.gt-sm', 'gdColumn.gt-md', 'gdColumn.gt-lg'];\nconst selector$4 = `\n [gdColumn],\n [gdColumn.xs], [gdColumn.sm], [gdColumn.md], [gdColumn.lg], [gdColumn.xl],\n [gdColumn.lt-sm], [gdColumn.lt-md], [gdColumn.lt-lg], [gdColumn.lt-xl],\n [gdColumn.gt-xs], [gdColumn.gt-sm], [gdColumn.gt-md], [gdColumn.gt-lg]\n`;\n/**\n * 'grid-column' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\nlet DefaultGridColumnDirective = /*#__PURE__*/(() => {\n class DefaultGridColumnDirective extends GridColumnDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$4;\n }\n }\n DefaultGridColumnDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridColumnDirective_BaseFactory;\n return function DefaultGridColumnDirective_Factory(ɵt) {\n return (ɵDefaultGridColumnDirective_BaseFactory || (ɵDefaultGridColumnDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridColumnDirective)))(ɵt || DefaultGridColumnDirective);\n };\n })();\n DefaultGridColumnDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridColumnDirective,\n selectors: [[\"\", \"gdColumn\", \"\"], [\"\", \"gdColumn.xs\", \"\"], [\"\", \"gdColumn.sm\", \"\"], [\"\", \"gdColumn.md\", \"\"], [\"\", \"gdColumn.lg\", \"\"], [\"\", \"gdColumn.xl\", \"\"], [\"\", \"gdColumn.lt-sm\", \"\"], [\"\", \"gdColumn.lt-md\", \"\"], [\"\", \"gdColumn.lt-lg\", \"\"], [\"\", \"gdColumn.lt-xl\", \"\"], [\"\", \"gdColumn.gt-xs\", \"\"], [\"\", \"gdColumn.gt-sm\", \"\"], [\"\", \"gdColumn.gt-md\", \"\"], [\"\", \"gdColumn.gt-lg\", \"\"]],\n inputs: {\n gdColumn: \"gdColumn\",\n \"gdColumn.xs\": \"gdColumn.xs\",\n \"gdColumn.sm\": \"gdColumn.sm\",\n \"gdColumn.md\": \"gdColumn.md\",\n \"gdColumn.lg\": \"gdColumn.lg\",\n \"gdColumn.xl\": \"gdColumn.xl\",\n \"gdColumn.lt-sm\": \"gdColumn.lt-sm\",\n \"gdColumn.lt-md\": \"gdColumn.lt-md\",\n \"gdColumn.lt-lg\": \"gdColumn.lt-lg\",\n \"gdColumn.lt-xl\": \"gdColumn.lt-xl\",\n \"gdColumn.gt-xs\": \"gdColumn.gt-xs\",\n \"gdColumn.gt-sm\": \"gdColumn.gt-sm\",\n \"gdColumn.gt-md\": \"gdColumn.gt-md\",\n \"gdColumn.gt-lg\": \"gdColumn.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridColumnDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$3 = 'none';\nconst AUTO_SPECIFIER$1 = '!';\nlet GridColumnsStyleBuilder = /*#__PURE__*/(() => {\n class GridColumnsStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n input = input || DEFAULT_VALUE$3;\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER$1)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER$1));\n auto = true;\n }\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-columns': '',\n 'grid-template-columns': ''\n };\n const key = auto ? 'grid-auto-columns' : 'grid-template-columns';\n css[key] = input;\n return css;\n }\n }\n GridColumnsStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridColumnsStyleBuilder_BaseFactory;\n return function GridColumnsStyleBuilder_Factory(ɵt) {\n return (ɵGridColumnsStyleBuilder_BaseFactory || (ɵGridColumnsStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridColumnsStyleBuilder)))(ɵt || GridColumnsStyleBuilder);\n };\n })();\n GridColumnsStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridColumnsStyleBuilder,\n factory: GridColumnsStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridColumnsStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridColumnsDirective = /*#__PURE__*/(() => {\n class GridColumnsDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-columns';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? columnsInlineCache : columnsCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridColumnsDirective.ɵfac = function GridColumnsDirective_Factory(ɵt) {\n return new (ɵt || GridColumnsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridColumnsStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridColumnsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridColumnsDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridColumnsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst columnsCache = /*#__PURE__*/new Map();\nconst columnsInlineCache = /*#__PURE__*/new Map();\nconst inputs$3 = ['gdColumns', 'gdColumns.xs', 'gdColumns.sm', 'gdColumns.md', 'gdColumns.lg', 'gdColumns.xl', 'gdColumns.lt-sm', 'gdColumns.lt-md', 'gdColumns.lt-lg', 'gdColumns.lt-xl', 'gdColumns.gt-xs', 'gdColumns.gt-sm', 'gdColumns.gt-md', 'gdColumns.gt-lg'];\nconst selector$3 = `\n [gdColumns],\n [gdColumns.xs], [gdColumns.sm], [gdColumns.md], [gdColumns.lg], [gdColumns.xl],\n [gdColumns.lt-sm], [gdColumns.lt-md], [gdColumns.lt-lg], [gdColumns.lt-xl],\n [gdColumns.gt-xs], [gdColumns.gt-sm], [gdColumns.gt-md], [gdColumns.gt-lg]\n`;\n/**\n * 'grid-template-columns' CSS Grid styling directive\n * Configures the sizing for the columns in the grid\n * Syntax: [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\nlet DefaultGridColumnsDirective = /*#__PURE__*/(() => {\n class DefaultGridColumnsDirective extends GridColumnsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$3;\n }\n }\n DefaultGridColumnsDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridColumnsDirective_BaseFactory;\n return function DefaultGridColumnsDirective_Factory(ɵt) {\n return (ɵDefaultGridColumnsDirective_BaseFactory || (ɵDefaultGridColumnsDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridColumnsDirective)))(ɵt || DefaultGridColumnsDirective);\n };\n })();\n DefaultGridColumnsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridColumnsDirective,\n selectors: [[\"\", \"gdColumns\", \"\"], [\"\", \"gdColumns.xs\", \"\"], [\"\", \"gdColumns.sm\", \"\"], [\"\", \"gdColumns.md\", \"\"], [\"\", \"gdColumns.lg\", \"\"], [\"\", \"gdColumns.xl\", \"\"], [\"\", \"gdColumns.lt-sm\", \"\"], [\"\", \"gdColumns.lt-md\", \"\"], [\"\", \"gdColumns.lt-lg\", \"\"], [\"\", \"gdColumns.lt-xl\", \"\"], [\"\", \"gdColumns.gt-xs\", \"\"], [\"\", \"gdColumns.gt-sm\", \"\"], [\"\", \"gdColumns.gt-md\", \"\"], [\"\", \"gdColumns.gt-lg\", \"\"]],\n inputs: {\n gdColumns: \"gdColumns\",\n \"gdColumns.xs\": \"gdColumns.xs\",\n \"gdColumns.sm\": \"gdColumns.sm\",\n \"gdColumns.md\": \"gdColumns.md\",\n \"gdColumns.lg\": \"gdColumns.lg\",\n \"gdColumns.xl\": \"gdColumns.xl\",\n \"gdColumns.lt-sm\": \"gdColumns.lt-sm\",\n \"gdColumns.lt-md\": \"gdColumns.lt-md\",\n \"gdColumns.lt-lg\": \"gdColumns.lt-lg\",\n \"gdColumns.lt-xl\": \"gdColumns.lt-xl\",\n \"gdColumns.gt-xs\": \"gdColumns.gt-xs\",\n \"gdColumns.gt-sm\": \"gdColumns.gt-sm\",\n \"gdColumns.gt-md\": \"gdColumns.gt-md\",\n \"gdColumns.gt-lg\": \"gdColumns.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridColumnsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$2 = '0';\nlet GridGapStyleBuilder = /*#__PURE__*/(() => {\n class GridGapStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-gap': input || DEFAULT_VALUE$2\n };\n }\n }\n GridGapStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridGapStyleBuilder_BaseFactory;\n return function GridGapStyleBuilder_Factory(ɵt) {\n return (ɵGridGapStyleBuilder_BaseFactory || (ɵGridGapStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridGapStyleBuilder)))(ɵt || GridGapStyleBuilder);\n };\n })();\n GridGapStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridGapStyleBuilder,\n factory: GridGapStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridGapStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridGapDirective = /*#__PURE__*/(() => {\n class GridGapDirective extends BaseDirective2 {\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-gap';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? gapInlineCache : gapCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridGapDirective.ɵfac = function GridGapDirective_Factory(ɵt) {\n return new (ɵt || GridGapDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(GridGapStyleBuilder), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridGapDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridGapDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridGapDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst gapCache = /*#__PURE__*/new Map();\nconst gapInlineCache = /*#__PURE__*/new Map();\nconst inputs$2 = ['gdGap', 'gdGap.xs', 'gdGap.sm', 'gdGap.md', 'gdGap.lg', 'gdGap.xl', 'gdGap.lt-sm', 'gdGap.lt-md', 'gdGap.lt-lg', 'gdGap.lt-xl', 'gdGap.gt-xs', 'gdGap.gt-sm', 'gdGap.gt-md', 'gdGap.gt-lg'];\nconst selector$2 = `\n [gdGap],\n [gdGap.xs], [gdGap.sm], [gdGap.md], [gdGap.lg], [gdGap.xl],\n [gdGap.lt-sm], [gdGap.lt-md], [gdGap.lt-lg], [gdGap.lt-xl],\n [gdGap.gt-xs], [gdGap.gt-sm], [gdGap.gt-md], [gdGap.gt-lg]\n`;\n/**\n * 'grid-gap' CSS Grid styling directive\n * Configures the gap between items in the grid\n * Syntax: []\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-17\n */\nlet DefaultGridGapDirective = /*#__PURE__*/(() => {\n class DefaultGridGapDirective extends GridGapDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$2;\n }\n }\n DefaultGridGapDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridGapDirective_BaseFactory;\n return function DefaultGridGapDirective_Factory(ɵt) {\n return (ɵDefaultGridGapDirective_BaseFactory || (ɵDefaultGridGapDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridGapDirective)))(ɵt || DefaultGridGapDirective);\n };\n })();\n DefaultGridGapDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridGapDirective,\n selectors: [[\"\", \"gdGap\", \"\"], [\"\", \"gdGap.xs\", \"\"], [\"\", \"gdGap.sm\", \"\"], [\"\", \"gdGap.md\", \"\"], [\"\", \"gdGap.lg\", \"\"], [\"\", \"gdGap.xl\", \"\"], [\"\", \"gdGap.lt-sm\", \"\"], [\"\", \"gdGap.lt-md\", \"\"], [\"\", \"gdGap.lt-lg\", \"\"], [\"\", \"gdGap.lt-xl\", \"\"], [\"\", \"gdGap.gt-xs\", \"\"], [\"\", \"gdGap.gt-sm\", \"\"], [\"\", \"gdGap.gt-md\", \"\"], [\"\", \"gdGap.gt-lg\", \"\"]],\n inputs: {\n gdGap: \"gdGap\",\n \"gdGap.xs\": \"gdGap.xs\",\n \"gdGap.sm\": \"gdGap.sm\",\n \"gdGap.md\": \"gdGap.md\",\n \"gdGap.lg\": \"gdGap.lg\",\n \"gdGap.xl\": \"gdGap.xl\",\n \"gdGap.lt-sm\": \"gdGap.lt-sm\",\n \"gdGap.lt-md\": \"gdGap.lt-md\",\n \"gdGap.lt-lg\": \"gdGap.lt-lg\",\n \"gdGap.lt-xl\": \"gdGap.lt-xl\",\n \"gdGap.gt-xs\": \"gdGap.gt-xs\",\n \"gdGap.gt-sm\": \"gdGap.gt-sm\",\n \"gdGap.gt-md\": \"gdGap.gt-md\",\n \"gdGap.gt-lg\": \"gdGap.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridGapDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE$1 = 'auto';\nlet GridRowStyleBuilder = /*#__PURE__*/(() => {\n class GridRowStyleBuilder extends StyleBuilder {\n buildStyles(input) {\n return {\n 'grid-row': input || DEFAULT_VALUE$1\n };\n }\n }\n GridRowStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridRowStyleBuilder_BaseFactory;\n return function GridRowStyleBuilder_Factory(ɵt) {\n return (ɵGridRowStyleBuilder_BaseFactory || (ɵGridRowStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridRowStyleBuilder)))(ɵt || GridRowStyleBuilder);\n };\n })();\n GridRowStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridRowStyleBuilder,\n factory: GridRowStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridRowStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridRowDirective = /*#__PURE__*/(() => {\n class GridRowDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-row';\n this.styleCache = rowCache;\n this.init();\n }\n }\n GridRowDirective.ɵfac = function GridRowDirective_Factory(ɵt) {\n return new (ɵt || GridRowDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridRowStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridRowDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridRowDirective,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridRowDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst rowCache = /*#__PURE__*/new Map();\nconst inputs$1 = ['gdRow', 'gdRow.xs', 'gdRow.sm', 'gdRow.md', 'gdRow.lg', 'gdRow.xl', 'gdRow.lt-sm', 'gdRow.lt-md', 'gdRow.lt-lg', 'gdRow.lt-xl', 'gdRow.gt-xs', 'gdRow.gt-sm', 'gdRow.gt-md', 'gdRow.gt-lg'];\nconst selector$1 = `\n [gdRow],\n [gdRow.xs], [gdRow.sm], [gdRow.md], [gdRow.lg], [gdRow.xl],\n [gdRow.lt-sm], [gdRow.lt-md], [gdRow.lt-lg], [gdRow.lt-xl],\n [gdRow.gt-xs], [gdRow.gt-sm], [gdRow.gt-md], [gdRow.gt-lg]\n`;\n/**\n * 'grid-row' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\nlet DefaultGridRowDirective = /*#__PURE__*/(() => {\n class DefaultGridRowDirective extends GridRowDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$1;\n }\n }\n DefaultGridRowDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridRowDirective_BaseFactory;\n return function DefaultGridRowDirective_Factory(ɵt) {\n return (ɵDefaultGridRowDirective_BaseFactory || (ɵDefaultGridRowDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridRowDirective)))(ɵt || DefaultGridRowDirective);\n };\n })();\n DefaultGridRowDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridRowDirective,\n selectors: [[\"\", \"gdRow\", \"\"], [\"\", \"gdRow.xs\", \"\"], [\"\", \"gdRow.sm\", \"\"], [\"\", \"gdRow.md\", \"\"], [\"\", \"gdRow.lg\", \"\"], [\"\", \"gdRow.xl\", \"\"], [\"\", \"gdRow.lt-sm\", \"\"], [\"\", \"gdRow.lt-md\", \"\"], [\"\", \"gdRow.lt-lg\", \"\"], [\"\", \"gdRow.lt-xl\", \"\"], [\"\", \"gdRow.gt-xs\", \"\"], [\"\", \"gdRow.gt-sm\", \"\"], [\"\", \"gdRow.gt-md\", \"\"], [\"\", \"gdRow.gt-lg\", \"\"]],\n inputs: {\n gdRow: \"gdRow\",\n \"gdRow.xs\": \"gdRow.xs\",\n \"gdRow.sm\": \"gdRow.sm\",\n \"gdRow.md\": \"gdRow.md\",\n \"gdRow.lg\": \"gdRow.lg\",\n \"gdRow.xl\": \"gdRow.xl\",\n \"gdRow.lt-sm\": \"gdRow.lt-sm\",\n \"gdRow.lt-md\": \"gdRow.lt-md\",\n \"gdRow.lt-lg\": \"gdRow.lt-lg\",\n \"gdRow.lt-xl\": \"gdRow.lt-xl\",\n \"gdRow.gt-xs\": \"gdRow.gt-xs\",\n \"gdRow.gt-sm\": \"gdRow.gt-sm\",\n \"gdRow.gt-md\": \"gdRow.gt-md\",\n \"gdRow.gt-lg\": \"gdRow.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridRowDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE = 'none';\nconst AUTO_SPECIFIER = '!';\nlet GridRowsStyleBuilder = /*#__PURE__*/(() => {\n class GridRowsStyleBuilder extends StyleBuilder {\n buildStyles(input, parent) {\n input = input || DEFAULT_VALUE;\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER));\n auto = true;\n }\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-rows': '',\n 'grid-template-rows': ''\n };\n const key = auto ? 'grid-auto-rows' : 'grid-template-rows';\n css[key] = input;\n return css;\n }\n }\n GridRowsStyleBuilder.ɵfac = /* @__PURE__ */(() => {\n let ɵGridRowsStyleBuilder_BaseFactory;\n return function GridRowsStyleBuilder_Factory(ɵt) {\n return (ɵGridRowsStyleBuilder_BaseFactory || (ɵGridRowsStyleBuilder_BaseFactory = i0.ɵɵgetInheritedFactory(GridRowsStyleBuilder)))(ɵt || GridRowsStyleBuilder);\n };\n })();\n GridRowsStyleBuilder.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: GridRowsStyleBuilder,\n factory: GridRowsStyleBuilder.ɵfac,\n providedIn: 'root'\n });\n return GridRowsStyleBuilder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet GridRowsDirective = /*#__PURE__*/(() => {\n class GridRowsDirective extends BaseDirective2 {\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-rows';\n this._inline = false;\n this.init();\n }\n get inline() {\n return this._inline;\n }\n set inline(val) {\n this._inline = coerceBooleanProperty(val);\n }\n // *********************************************\n // Protected methods\n // *********************************************\n updateWithValue(value) {\n this.styleCache = this.inline ? rowsInlineCache : rowsCache;\n this.addStyles(value, {\n inline: this.inline\n });\n }\n }\n GridRowsDirective.ɵfac = function GridRowsDirective_Factory(ɵt) {\n return new (ɵt || GridRowsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(GridRowsStyleBuilder), i0.ɵɵdirectiveInject(i1.StyleUtils), i0.ɵɵdirectiveInject(i1.MediaMarshaller));\n };\n GridRowsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: GridRowsDirective,\n inputs: {\n inline: [0, \"gdInline\", \"inline\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return GridRowsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst rowsCache = /*#__PURE__*/new Map();\nconst rowsInlineCache = /*#__PURE__*/new Map();\nconst inputs = ['gdRows', 'gdRows.xs', 'gdRows.sm', 'gdRows.md', 'gdRows.lg', 'gdRows.xl', 'gdRows.lt-sm', 'gdRows.lt-md', 'gdRows.lt-lg', 'gdRows.lt-xl', 'gdRows.gt-xs', 'gdRows.gt-sm', 'gdRows.gt-md', 'gdRows.gt-lg'];\nconst selector = `\n [gdRows],\n [gdRows.xs], [gdRows.sm], [gdRows.md], [gdRows.lg], [gdRows.xl],\n [gdRows.lt-sm], [gdRows.lt-md], [gdRows.lt-lg], [gdRows.lt-xl],\n [gdRows.gt-xs], [gdRows.gt-sm], [gdRows.gt-md], [gdRows.gt-lg]\n`;\n/**\n * 'grid-template-rows' CSS Grid styling directive\n * Configures the sizing for the rows in the grid\n * Syntax: [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\nlet DefaultGridRowsDirective = /*#__PURE__*/(() => {\n class DefaultGridRowsDirective extends GridRowsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs;\n }\n }\n DefaultGridRowsDirective.ɵfac = /* @__PURE__ */(() => {\n let ɵDefaultGridRowsDirective_BaseFactory;\n return function DefaultGridRowsDirective_Factory(ɵt) {\n return (ɵDefaultGridRowsDirective_BaseFactory || (ɵDefaultGridRowsDirective_BaseFactory = i0.ɵɵgetInheritedFactory(DefaultGridRowsDirective)))(ɵt || DefaultGridRowsDirective);\n };\n })();\n DefaultGridRowsDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: DefaultGridRowsDirective,\n selectors: [[\"\", \"gdRows\", \"\"], [\"\", \"gdRows.xs\", \"\"], [\"\", \"gdRows.sm\", \"\"], [\"\", \"gdRows.md\", \"\"], [\"\", \"gdRows.lg\", \"\"], [\"\", \"gdRows.xl\", \"\"], [\"\", \"gdRows.lt-sm\", \"\"], [\"\", \"gdRows.lt-md\", \"\"], [\"\", \"gdRows.lt-lg\", \"\"], [\"\", \"gdRows.lt-xl\", \"\"], [\"\", \"gdRows.gt-xs\", \"\"], [\"\", \"gdRows.gt-sm\", \"\"], [\"\", \"gdRows.gt-md\", \"\"], [\"\", \"gdRows.gt-lg\", \"\"]],\n inputs: {\n gdRows: \"gdRows\",\n \"gdRows.xs\": \"gdRows.xs\",\n \"gdRows.sm\": \"gdRows.sm\",\n \"gdRows.md\": \"gdRows.md\",\n \"gdRows.lg\": \"gdRows.lg\",\n \"gdRows.xl\": \"gdRows.xl\",\n \"gdRows.lt-sm\": \"gdRows.lt-sm\",\n \"gdRows.lt-md\": \"gdRows.lt-md\",\n \"gdRows.lt-lg\": \"gdRows.lt-lg\",\n \"gdRows.lt-xl\": \"gdRows.lt-xl\",\n \"gdRows.gt-xs\": \"gdRows.gt-xs\",\n \"gdRows.gt-sm\": \"gdRows.gt-sm\",\n \"gdRows.gt-md\": \"gdRows.gt-md\",\n \"gdRows.gt-lg\": \"gdRows.gt-lg\"\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n return DefaultGridRowsDirective;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ALL_DIRECTIVES = [DefaultGridAlignDirective, DefaultGridAlignColumnsDirective, DefaultGridAlignRowsDirective, DefaultGridAreaDirective, DefaultGridAreasDirective, DefaultGridAutoDirective, DefaultGridColumnDirective, DefaultGridColumnsDirective, DefaultGridGapDirective, DefaultGridRowDirective, DefaultGridRowsDirective];\n/**\n * *****************************************************************\n * Define module for the CSS Grid API\n * *****************************************************************\n */\nlet GridModule = /*#__PURE__*/(() => {\n class GridModule {}\n GridModule.ɵfac = function GridModule_Factory(ɵt) {\n return new (ɵt || GridModule)();\n };\n GridModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: GridModule\n });\n GridModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CoreModule]\n });\n return GridModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DefaultGridAlignColumnsDirective, DefaultGridAlignDirective, DefaultGridAlignRowsDirective, DefaultGridAreaDirective, DefaultGridAreasDirective, DefaultGridAutoDirective, DefaultGridColumnDirective, DefaultGridColumnsDirective, DefaultGridGapDirective, DefaultGridRowDirective, DefaultGridRowsDirective, GridAlignColumnsDirective, GridAlignColumnsStyleBuilder, GridAlignDirective, GridAlignRowsDirective, GridAlignRowsStyleBuilder, GridAlignStyleBuilder, GridAreaDirective, GridAreaStyleBuilder, GridAreasDirective, GridAreasStyleBuiler, GridAutoDirective, GridAutoStyleBuilder, GridColumnDirective, GridColumnStyleBuilder, GridColumnsDirective, GridColumnsStyleBuilder, GridGapDirective, GridGapStyleBuilder, GridModule, GridRowDirective, GridRowStyleBuilder, GridRowsDirective, GridRowsStyleBuilder };\n","import * as i0 from '@angular/core';\nimport { Version, PLATFORM_ID, NgModule, Inject } from '@angular/core';\nimport { LAYOUT_CONFIG, DEFAULT_CONFIG, BREAKPOINT, SERVER_TOKEN } from '@angular/flex-layout/core';\nexport * from '@angular/flex-layout/core';\nimport { ExtendedModule } from '@angular/flex-layout/extended';\nexport * from '@angular/flex-layout/extended';\nimport { FlexModule } from '@angular/flex-layout/flex';\nexport * from '@angular/flex-layout/flex';\nimport { GridModule } from '@angular/flex-layout/grid';\nexport * from '@angular/flex-layout/grid';\nimport { isPlatformServer } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Current version of Angular Flex-Layout. */\nconst VERSION = /*#__PURE__*/new Version('15.0.0-beta.42');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * FlexLayoutModule -- the main import for all utilities in the Angular Layout library\n * * Will automatically provide Flex, Grid, and Extended modules for use in the application\n * * Can be configured using the static withConfig method, options viewable on the Wiki's\n * Configuration page\n */\nlet FlexLayoutModule = /*#__PURE__*/(() => {\n class FlexLayoutModule {\n constructor(serverModuleLoaded, platformId) {\n if (isPlatformServer(platformId) && !serverModuleLoaded) {\n console.warn('Warning: Flex Layout loaded on the server without FlexLayoutServerModule');\n }\n }\n /**\n * Initialize the FlexLayoutModule with a set of config options,\n * which sets the corresponding tokens accordingly\n */\n static withConfig(configOptions,\n // tslint:disable-next-line:max-line-length\n breakpoints = []) {\n return {\n ngModule: FlexLayoutModule,\n providers: configOptions.serverLoaded ? [{\n provide: LAYOUT_CONFIG,\n useValue: {\n ...DEFAULT_CONFIG,\n ...configOptions\n }\n }, {\n provide: BREAKPOINT,\n useValue: breakpoints,\n multi: true\n }, {\n provide: SERVER_TOKEN,\n useValue: true\n }] : [{\n provide: LAYOUT_CONFIG,\n useValue: {\n ...DEFAULT_CONFIG,\n ...configOptions\n }\n }, {\n provide: BREAKPOINT,\n useValue: breakpoints,\n multi: true\n }]\n };\n }\n }\n FlexLayoutModule.ɵfac = function FlexLayoutModule_Factory(ɵt) {\n return new (ɵt || FlexLayoutModule)(i0.ɵɵinject(SERVER_TOKEN), i0.ɵɵinject(PLATFORM_ID));\n };\n FlexLayoutModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: FlexLayoutModule\n });\n FlexLayoutModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [FlexModule, ExtendedModule, GridModule, FlexModule, ExtendedModule, GridModule]\n });\n return FlexLayoutModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { FlexLayoutModule, VERSION };\n","import { NgModule } from '@angular/core';\r\nimport { FlexLayoutModule, LAYOUT_CONFIG, MediaMarshaller } from '@angular/flex-layout';\r\n\r\n@NgModule({\r\n imports: [\r\n {\r\n ngModule: FlexLayoutModule,\r\n providers: [\r\n {\r\n provide: LAYOUT_CONFIG,\r\n useValue: {\r\n addFlexToParent: true,\r\n addOrientationBps: false,\r\n disableDefaultBps: false,\r\n disableVendorPrefixes: false,\r\n serverLoaded: false,\r\n useColumnBasisZero: false,\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n exports: [FlexLayoutModule],\r\n})\r\nexport class JFlexLayoutModule {\r\n // tslint:disable-next-line: no-any\r\n private lastValue: any[] = [];\r\n\r\n constructor(private m: MediaMarshaller) {\r\n // hack until resolve: https://github.com/angular/flex-layout/issues/1201\r\n // @ts-ignore\r\n m.subject.subscribe((x) => {\r\n // @ts-ignore\r\n if (m.activatedBreakpoints.filter((b) => b.alias === 'print').length === 0) {\r\n // @ts-ignore\r\n this.lastValue = [...m.activatedBreakpoints];\r\n } else {\r\n // @ts-ignore\r\n m.activatedBreakpoints = [...this.lastValue];\r\n // @ts-ignore\r\n m.hook.collectActivations = () => {};\r\n // @ts-ignore\r\n m.hook.deactivations = [...this.lastValue];\r\n }\r\n });\r\n }\r\n}\r\n","import * as i0 from '@angular/core';\nimport { inject, NgZone, Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = e => {\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);\n }\n};\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n constructor( /** The box type to observe for resizes. */\n _box) {\n this._box = _box;\n /** Stream that emits when the shared observer is destroyed. */\n this._destroyed = new Subject();\n /** Stream of all events from the ResizeObserver. */\n this._resizeSubject = new Subject();\n /** A map of elements to streams of their resize events. */\n this._elementObservables = new Map();\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n }\n }\n /**\n * Gets a stream of resize events for the given element.\n * @param target The element to observe.\n * @return The stream of resize events for the element.\n */\n observe(target) {\n if (!this._elementObservables.has(target)) {\n this._elementObservables.set(target, new Observable(observer => {\n const subscription = this._resizeSubject.subscribe(observer);\n this._resizeObserver?.observe(target, {\n box: this._box\n });\n return () => {\n this._resizeObserver?.unobserve(target);\n subscription.unsubscribe();\n this._elementObservables.delete(target);\n };\n }).pipe(filter(entries => entries.some(entry => entry.target === target)),\n // Share a replay of the last event so that subsequent calls to observe the same element\n // receive initial sizing info like the first one. Also enable ref counting so the\n // element will be automatically unobserved when there are no more subscriptions.\n shareReplay({\n bufferSize: 1,\n refCount: true\n }), takeUntil(this._destroyed)));\n }\n return this._elementObservables.get(target);\n }\n /** Destroys this instance. */\n destroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._resizeSubject.complete();\n this._elementObservables.clear();\n }\n}\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\nlet SharedResizeObserver = /*#__PURE__*/(() => {\n class SharedResizeObserver {\n constructor() {\n /** Map of box type to shared resize observer. */\n this._observers = new Map();\n /** The Angular zone. */\n this._ngZone = inject(NgZone);\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n this._ngZone.runOutsideAngular(() => {\n window.addEventListener('error', loopLimitExceededErrorHandler);\n });\n }\n }\n ngOnDestroy() {\n for (const [, observer] of this._observers) {\n observer.destroy();\n }\n this._observers.clear();\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n window.removeEventListener('error', loopLimitExceededErrorHandler);\n }\n }\n /**\n * Gets a stream of resize events for the given target element and box type.\n * @param target The element to observe for resizes.\n * @param options Options to pass to the `ResizeObserver`\n * @return The stream of resize events for the element.\n */\n observe(target, options) {\n const box = options?.box || 'content-box';\n if (!this._observers.has(box)) {\n this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n }\n return this._observers.get(box).observe(target);\n }\n static {\n this.ɵfac = function SharedResizeObserver_Factory(ɵt) {\n return new (ɵt || SharedResizeObserver)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SharedResizeObserver,\n factory: SharedResizeObserver.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return SharedResizeObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { SharedResizeObserver };\n","import * as i0 from '@angular/core';\nimport { Directive, InjectionToken, Attribute, Input, inject, NgZone, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, contentChild, Injector, computed, afterRender, ANIMATION_MODULE_TYPE, Optional, Inject, ContentChild, ContentChildren, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i2 from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet, CommonModule } from '@angular/common';\nimport { Subscription, Subject, merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** The floating label for a `mat-form-field`. */\nconst _c0 = [\"notch\"];\nconst _c1 = [\"matFormFieldNotchedOutline\", \"\"];\nconst _c2 = [\"*\"];\nconst _c3 = [\"textField\"];\nconst _c4 = [\"iconPrefixContainer\"];\nconst _c5 = [\"textPrefixContainer\"];\nconst _c6 = [\"*\", [[\"mat-label\"]], [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"]], [[\"\", \"matTextPrefix\", \"\"]], [[\"\", \"matTextSuffix\", \"\"]], [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"]], [[\"mat-error\"], [\"\", \"matError\", \"\"]], [[\"mat-hint\", 3, \"align\", \"end\"]], [[\"mat-hint\", \"align\", \"end\"]]];\nconst _c7 = [\"*\", \"mat-label\", \"[matPrefix], [matIconPrefix]\", \"[matTextPrefix]\", \"[matTextSuffix]\", \"[matSuffix], [matIconSuffix]\", \"mat-error, [matError]\", \"mat-hint:not([align='end'])\", \"mat-hint[align='end']\"];\nfunction MatFormField_ng_template_0_Conditional_0_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"span\", 19);\n }\n}\nfunction MatFormField_ng_template_0_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"label\", 18);\n i0.ɵɵprojection(1, 1);\n i0.ɵɵtemplate(2, MatFormField_ng_template_0_Conditional_0_Conditional_2_Template, 1, 0, \"span\", 19);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵproperty(\"floating\", ctx_r1._shouldLabelFloat())(\"monitorResize\", ctx_r1._hasOutline())(\"id\", ctx_r1._labelId);\n i0.ɵɵattribute(\"for\", ctx_r1._control.disableAutomaticLabeling ? null : ctx_r1._control.id);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx_r1.hideRequiredMarker && ctx_r1._control.required ? 2 : -1);\n }\n}\nfunction MatFormField_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatFormField_ng_template_0_Conditional_0_Template, 3, 5, \"label\", 18);\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵconditional(ctx_r1._hasFloatingLabel() ? 0 : -1);\n }\n}\nfunction MatFormField_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 5);\n }\n}\nfunction MatFormField_Conditional_6_Conditional_1_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_6_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatFormField_Conditional_6_Conditional_1_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n }\n if (rf & 2) {\n i0.ɵɵnextContext(2);\n const labelTemplate_r3 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n }\n}\nfunction MatFormField_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 7);\n i0.ɵɵtemplate(1, MatFormField_Conditional_6_Conditional_1_Template, 1, 1, null, 11);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"matFormFieldNotchedOutlineOpen\", ctx_r1._shouldLabelFloat());\n i0.ɵɵadvance();\n i0.ɵɵconditional(!ctx_r1._forceDisplayInfixLabel() ? 1 : -1);\n }\n}\nfunction MatFormField_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 8, 2);\n i0.ɵɵprojection(2, 2);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 9, 3);\n i0.ɵɵprojection(2, 3);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_10_ng_template_0_Template(rf, ctx) {}\nfunction MatFormField_Conditional_10_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatFormField_Conditional_10_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n }\n if (rf & 2) {\n i0.ɵɵnextContext();\n const labelTemplate_r3 = i0.ɵɵreference(1);\n i0.ɵɵproperty(\"ngTemplateOutlet\", labelTemplate_r3);\n }\n}\nfunction MatFormField_Conditional_12_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 12);\n i0.ɵɵprojection(1, 4);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_13_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 13);\n i0.ɵɵprojection(1, 5);\n i0.ɵɵelementEnd();\n }\n}\nfunction MatFormField_Conditional_14_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 14);\n }\n}\nfunction MatFormField_Case_16_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 16);\n i0.ɵɵprojection(1, 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"@transitionMessages\", ctx_r1._subscriptAnimationState);\n }\n}\nfunction MatFormField_Case_17_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"mat-hint\", 20);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵproperty(\"id\", ctx_r1._hintLabelId);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.hintLabel);\n }\n}\nfunction MatFormField_Case_17_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 17);\n i0.ɵɵtemplate(1, MatFormField_Case_17_Conditional_1_Template, 2, 2, \"mat-hint\", 20);\n i0.ɵɵprojection(2, 7);\n i0.ɵɵelement(3, \"div\", 21);\n i0.ɵɵprojection(4, 8);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"@transitionMessages\", ctx_r1._subscriptAnimationState);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx_r1.hintLabel ? 1 : -1);\n }\n}\nlet MatLabel = /*#__PURE__*/(() => {\n class MatLabel {\n static {\n this.ɵfac = function MatLabel_Factory(ɵt) {\n return new (ɵt || MatLabel)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatLabel,\n selectors: [[\"mat-label\"]],\n standalone: true\n });\n }\n }\n return MatLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextUniqueId$2 = 0;\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_ERROR = /*#__PURE__*/new InjectionToken('MatError');\n/** Single error message to be shown underneath the form-field. */\nlet MatError = /*#__PURE__*/(() => {\n class MatError {\n constructor(ariaLive, elementRef) {\n this.id = `mat-mdc-error-${nextUniqueId$2++}`;\n // If no aria-live value is set add 'polite' as a default. This is preferred over setting\n // role='alert' so that screen readers do not interrupt the current task to read this aloud.\n if (!ariaLive) {\n elementRef.nativeElement.setAttribute('aria-live', 'polite');\n }\n }\n static {\n this.ɵfac = function MatError_Factory(ɵt) {\n return new (ɵt || MatError)(i0.ɵɵinjectAttribute('aria-live'), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatError,\n selectors: [[\"mat-error\"], [\"\", \"matError\", \"\"]],\n hostAttrs: [\"aria-atomic\", \"true\", 1, \"mat-mdc-form-field-error\", \"mat-mdc-form-field-bottom-align\"],\n hostVars: 1,\n hostBindings: function MatError_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n }\n },\n inputs: {\n id: \"id\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_ERROR,\n useExisting: MatError\n }])]\n });\n }\n }\n return MatError;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextUniqueId$1 = 0;\n/** Hint text to be shown underneath the form field control. */\nlet MatHint = /*#__PURE__*/(() => {\n class MatHint {\n constructor() {\n /** Whether to align the hint label at the start or end of the line. */\n this.align = 'start';\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n this.id = `mat-mdc-hint-${nextUniqueId$1++}`;\n }\n static {\n this.ɵfac = function MatHint_Factory(ɵt) {\n return new (ɵt || MatHint)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatHint,\n selectors: [[\"mat-hint\"]],\n hostAttrs: [1, \"mat-mdc-form-field-hint\", \"mat-mdc-form-field-bottom-align\"],\n hostVars: 4,\n hostBindings: function MatHint_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵattribute(\"align\", null);\n i0.ɵɵclassProp(\"mat-mdc-form-field-hint-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\",\n id: \"id\"\n },\n standalone: true\n });\n }\n }\n return MatHint;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_PREFIX = /*#__PURE__*/new InjectionToken('MatPrefix');\n/** Prefix to be placed in front of the form field. */\nlet MatPrefix = /*#__PURE__*/(() => {\n class MatPrefix {\n constructor() {\n this._isText = false;\n }\n set _isTextSelector(value) {\n this._isText = true;\n }\n static {\n this.ɵfac = function MatPrefix_Factory(ɵt) {\n return new (ɵt || MatPrefix)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatPrefix,\n selectors: [[\"\", \"matPrefix\", \"\"], [\"\", \"matIconPrefix\", \"\"], [\"\", \"matTextPrefix\", \"\"]],\n inputs: {\n _isTextSelector: [0, \"matTextPrefix\", \"_isTextSelector\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_PREFIX,\n useExisting: MatPrefix\n }])]\n });\n }\n }\n return MatPrefix;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SUFFIX = /*#__PURE__*/new InjectionToken('MatSuffix');\n/** Suffix to be placed at the end of the form field. */\nlet MatSuffix = /*#__PURE__*/(() => {\n class MatSuffix {\n constructor() {\n this._isText = false;\n }\n set _isTextSelector(value) {\n this._isText = true;\n }\n static {\n this.ɵfac = function MatSuffix_Factory(ɵt) {\n return new (ɵt || MatSuffix)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSuffix,\n selectors: [[\"\", \"matSuffix\", \"\"], [\"\", \"matIconSuffix\", \"\"], [\"\", \"matTextSuffix\", \"\"]],\n inputs: {\n _isTextSelector: [0, \"matTextSuffix\", \"_isTextSelector\"]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_SUFFIX,\n useExisting: MatSuffix\n }])]\n });\n }\n }\n return MatSuffix;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** An injion token for the parent form-field. */\nconst FLOATING_LABEL_PARENT = /*#__PURE__*/new InjectionToken('FloatingLabelParent');\n/**\n * Internal directive that maintains a MDC floating label. This directive does not\n * use the `MDCFloatingLabelFoundation` class, as it is not worth the size cost of\n * including it just to measure the label width and toggle some classes.\n *\n * The use of a directive allows us to conditionally render a floating label in the\n * template without having to manually manage instantiation and destruction of the\n * floating label component based on.\n *\n * The component is responsible for setting up the floating label styles, measuring label\n * width for the outline notch, and providing inputs that can be used to toggle the\n * label's floating or required state.\n */\nlet MatFormFieldFloatingLabel = /*#__PURE__*/(() => {\n class MatFormFieldFloatingLabel {\n /** Whether the label is floating. */\n get floating() {\n return this._floating;\n }\n set floating(value) {\n this._floating = value;\n if (this.monitorResize) {\n this._handleResize();\n }\n }\n /** Whether to monitor for resize events on the floating label. */\n get monitorResize() {\n return this._monitorResize;\n }\n set monitorResize(value) {\n this._monitorResize = value;\n if (this._monitorResize) {\n this._subscribeToResize();\n } else {\n this._resizeSubscription.unsubscribe();\n }\n }\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n this._floating = false;\n this._monitorResize = false;\n /** The shared ResizeObserver. */\n this._resizeObserver = inject(SharedResizeObserver);\n /** The Angular zone. */\n this._ngZone = inject(NgZone);\n /** The parent form-field. */\n this._parent = inject(FLOATING_LABEL_PARENT);\n /** The current resize event subscription. */\n this._resizeSubscription = new Subscription();\n }\n ngOnDestroy() {\n this._resizeSubscription.unsubscribe();\n }\n /** Gets the width of the label. Used for the outline notch. */\n getWidth() {\n return estimateScrollWidth(this._elementRef.nativeElement);\n }\n /** Gets the HTML element for the floating label. */\n get element() {\n return this._elementRef.nativeElement;\n }\n /** Handles resize events from the ResizeObserver. */\n _handleResize() {\n // In the case where the label grows in size, the following sequence of events occurs:\n // 1. The label grows by 1px triggering the ResizeObserver\n // 2. The notch is expanded to accommodate the entire label\n // 3. The label expands to its full width, triggering the ResizeObserver again\n //\n // This is expected, but If we allow this to all happen within the same macro task it causes an\n // error: `ResizeObserver loop limit exceeded`. Therefore we push the notch resize out until\n // the next macro task.\n setTimeout(() => this._parent._handleLabelResized());\n }\n /** Subscribes to resize events. */\n _subscribeToResize() {\n this._resizeSubscription.unsubscribe();\n this._ngZone.runOutsideAngular(() => {\n this._resizeSubscription = this._resizeObserver.observe(this._elementRef.nativeElement, {\n box: 'border-box'\n }).subscribe(() => this._handleResize());\n });\n }\n static {\n this.ɵfac = function MatFormFieldFloatingLabel_Factory(ɵt) {\n return new (ɵt || MatFormFieldFloatingLabel)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldFloatingLabel,\n selectors: [[\"label\", \"matFormFieldFloatingLabel\", \"\"]],\n hostAttrs: [1, \"mdc-floating-label\", \"mat-mdc-floating-label\"],\n hostVars: 2,\n hostBindings: function MatFormFieldFloatingLabel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-floating-label--float-above\", ctx.floating);\n }\n },\n inputs: {\n floating: \"floating\",\n monitorResize: \"monitorResize\"\n },\n standalone: true\n });\n }\n }\n return MatFormFieldFloatingLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Estimates the scroll width of an element.\n * via https://github.com/material-components/material-components-web/blob/c0a11ef0d000a098fd0c372be8f12d6a99302855/packages/mdc-dom/ponyfill.ts\n */\nfunction estimateScrollWidth(element) {\n // Check the offsetParent. If the element inherits display: none from any\n // parent, the offsetParent property will be null (see\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent).\n // This check ensures we only clone the node when necessary.\n const htmlEl = element;\n if (htmlEl.offsetParent !== null) {\n return htmlEl.scrollWidth;\n }\n const clone = htmlEl.cloneNode(true);\n clone.style.setProperty('position', 'absolute');\n clone.style.setProperty('transform', 'translate(-9999px, -9999px)');\n document.documentElement.appendChild(clone);\n const scrollWidth = clone.scrollWidth;\n clone.remove();\n return scrollWidth;\n}\n\n/** Class added when the line ripple is active. */\nconst ACTIVATE_CLASS = 'mdc-line-ripple--active';\n/** Class added when the line ripple is being deactivated. */\nconst DEACTIVATING_CLASS = 'mdc-line-ripple--deactivating';\n/**\n * Internal directive that creates an instance of the MDC line-ripple component. Using a\n * directive allows us to conditionally render a line-ripple in the template without having\n * to manually create and destroy the `MDCLineRipple` component whenever the condition changes.\n *\n * The directive sets up the styles for the line-ripple and provides an API for activating\n * and deactivating the line-ripple.\n */\nlet MatFormFieldLineRipple = /*#__PURE__*/(() => {\n class MatFormFieldLineRipple {\n constructor(_elementRef, ngZone) {\n this._elementRef = _elementRef;\n this._handleTransitionEnd = event => {\n const classList = this._elementRef.nativeElement.classList;\n const isDeactivating = classList.contains(DEACTIVATING_CLASS);\n if (event.propertyName === 'opacity' && isDeactivating) {\n classList.remove(ACTIVATE_CLASS, DEACTIVATING_CLASS);\n }\n };\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('transitionend', this._handleTransitionEnd);\n });\n }\n activate() {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(DEACTIVATING_CLASS);\n classList.add(ACTIVATE_CLASS);\n }\n deactivate() {\n this._elementRef.nativeElement.classList.add(DEACTIVATING_CLASS);\n }\n ngOnDestroy() {\n this._elementRef.nativeElement.removeEventListener('transitionend', this._handleTransitionEnd);\n }\n static {\n this.ɵfac = function MatFormFieldLineRipple_Factory(ɵt) {\n return new (ɵt || MatFormFieldLineRipple)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldLineRipple,\n selectors: [[\"div\", \"matFormFieldLineRipple\", \"\"]],\n hostAttrs: [1, \"mdc-line-ripple\"],\n standalone: true\n });\n }\n }\n return MatFormFieldLineRipple;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Internal component that creates an instance of the MDC notched-outline component.\n *\n * The component sets up the HTML structure and styles for the notched-outline. It provides\n * inputs to toggle the notch state and width.\n */\nlet MatFormFieldNotchedOutline = /*#__PURE__*/(() => {\n class MatFormFieldNotchedOutline {\n constructor(_elementRef, _ngZone) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n /** Whether the notch should be opened. */\n this.open = false;\n }\n ngAfterViewInit() {\n const label = this._elementRef.nativeElement.querySelector('.mdc-floating-label');\n if (label) {\n this._elementRef.nativeElement.classList.add('mdc-notched-outline--upgraded');\n if (typeof requestAnimationFrame === 'function') {\n label.style.transitionDuration = '0s';\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => label.style.transitionDuration = '');\n });\n }\n } else {\n this._elementRef.nativeElement.classList.add('mdc-notched-outline--no-label');\n }\n }\n _setNotchWidth(labelWidth) {\n if (!this.open || !labelWidth) {\n this._notch.nativeElement.style.width = '';\n } else {\n const NOTCH_ELEMENT_PADDING = 8;\n const NOTCH_ELEMENT_BORDER = 1;\n this._notch.nativeElement.style.width = `calc(${labelWidth}px * var(--mat-mdc-form-field-floating-label-scale, 0.75) + ${NOTCH_ELEMENT_PADDING + NOTCH_ELEMENT_BORDER}px)`;\n }\n }\n static {\n this.ɵfac = function MatFormFieldNotchedOutline_Factory(ɵt) {\n return new (ɵt || MatFormFieldNotchedOutline)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFormFieldNotchedOutline,\n selectors: [[\"div\", \"matFormFieldNotchedOutline\", \"\"]],\n viewQuery: function MatFormFieldNotchedOutline_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notch = _t.first);\n }\n },\n hostAttrs: [1, \"mdc-notched-outline\"],\n hostVars: 2,\n hostBindings: function MatFormFieldNotchedOutline_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mdc-notched-outline--notched\", ctx.open);\n }\n },\n inputs: {\n open: [0, \"matFormFieldNotchedOutlineOpen\", \"open\"]\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n attrs: _c1,\n ngContentSelectors: _c2,\n decls: 5,\n vars: 0,\n consts: [[\"notch\", \"\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__leading\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__notch\"], [1, \"mat-mdc-notch-piece\", \"mdc-notched-outline__trailing\"]],\n template: function MatFormFieldNotchedOutline_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 1);\n i0.ɵɵelementStart(1, \"div\", 2, 0);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(4, \"div\", 3);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatFormFieldNotchedOutline;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nconst matFormFieldAnimations = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: /*#__PURE__*/trigger('transitionMessages', [\n /*#__PURE__*/\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', /*#__PURE__*/style({\n opacity: 1,\n transform: 'translateY(0%)'\n })), /*#__PURE__*/transition('void => enter', [/*#__PURE__*/style({\n opacity: 0,\n transform: 'translateY(-5px)'\n }), /*#__PURE__*/animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)')])])\n};\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nlet MatFormFieldControl = /*#__PURE__*/(() => {\n class MatFormFieldControl {\n static {\n this.ɵfac = function MatFormFieldControl_Factory(ɵt) {\n return new (ɵt || MatFormFieldControl)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatFormFieldControl\n });\n }\n }\n return MatFormFieldControl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** @docs-private */\nfunction getMatFormFieldPlaceholderConflictError() {\n return Error('Placeholder attribute and child element were both specified.');\n}\n/** @docs-private */\nfunction getMatFormFieldDuplicatedHintError(align) {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/** @docs-private */\nfunction getMatFormFieldMissingControlError() {\n return Error('mat-form-field must contain a MatFormFieldControl.');\n}\n\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nconst MAT_FORM_FIELD = /*#__PURE__*/new InjectionToken('MatFormField');\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nconst MAT_FORM_FIELD_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');\nlet nextUniqueId = 0;\n/** Default appearance used by the form field. */\nconst DEFAULT_APPEARANCE = 'fill';\n/**\n * Whether the label for form fields should by default float `always`,\n * `never`, or `auto`.\n */\nconst DEFAULT_FLOAT_LABEL = 'auto';\n/** Default way that the subscript element height is set. */\nconst DEFAULT_SUBSCRIPT_SIZING = 'fixed';\n/**\n * Default transform for docked floating labels in a MDC text-field. This value has been\n * extracted from the MDC text-field styles because we programmatically modify the docked\n * label transform, but do not want to accidentally discard the default label transform.\n */\nconst FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;\n/** Container for form controls that applies Material Design styling and behavior. */\nlet MatFormField = /*#__PURE__*/(() => {\n class MatFormField {\n /** Whether the required marker should be hidden. */\n get hideRequiredMarker() {\n return this._hideRequiredMarker;\n }\n set hideRequiredMarker(value) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n /** Whether the label should always float or float as the user types. */\n get floatLabel() {\n return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;\n }\n set floatLabel(value) {\n if (value !== this._floatLabel) {\n this._floatLabel = value;\n // For backwards compatibility. Custom form field controls or directives might set\n // the \"floatLabel\" input and expect the form field view to be updated automatically.\n // e.g. autocomplete trigger. Ideally we'd get rid of this and the consumers would just\n // emit the \"stateChanges\" observable. TODO(devversion): consider removing.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** The form field appearance style. */\n get appearance() {\n return this._appearance;\n }\n set appearance(value) {\n const oldValue = this._appearance;\n const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (newAppearance !== 'fill' && newAppearance !== 'outline') {\n throw new Error(`MatFormField: Invalid appearance \"${newAppearance}\", valid values are \"fill\" or \"outline\".`);\n }\n }\n this._appearance = newAppearance;\n if (this._appearance === 'outline' && this._appearance !== oldValue) {\n // If the appearance has been switched to `outline`, the label offset needs to be updated.\n // The update can happen once the view has been re-checked, but not immediately because\n // the view has not been updated and the notched-outline floating label is not present.\n this._needsOutlineLabelOffsetUpdate = true;\n }\n }\n /**\n * Whether the form field should reserve space for one line of hint/error text (default)\n * or to have the spacing grow from 0px as needed based on the size of the hint/error content.\n * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.\n */\n get subscriptSizing() {\n return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n set subscriptSizing(value) {\n this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;\n }\n /** Text for the form field hint. */\n get hintLabel() {\n return this._hintLabel;\n }\n set hintLabel(value) {\n this._hintLabel = value;\n this._processHints();\n }\n /** Gets the current form field control */\n get _control() {\n return this._explicitFormFieldControl || this._formFieldControl;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n constructor(_elementRef, _changeDetectorRef,\n /**\n * @deprecated not needed, to be removed.\n * @breaking-change 19.0.0 remove this param\n */\n _unusedNgZone, _dir, _platform, _defaults, _animationMode,\n /**\n * @deprecated not needed, to be removed.\n * @breaking-change 17.0.0 remove this param\n */\n _unusedDocument) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._platform = _platform;\n this._defaults = _defaults;\n this._animationMode = _animationMode;\n this._labelChild = contentChild(MatLabel);\n this._hideRequiredMarker = false;\n /**\n * Theme color of the form field. This API is supported in M2 themes only, it\n * has no effect in M3 themes.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/theming#using-component-color-variants.\n */\n this.color = 'primary';\n this._appearance = DEFAULT_APPEARANCE;\n this._subscriptSizing = null;\n this._hintLabel = '';\n this._hasIconPrefix = false;\n this._hasTextPrefix = false;\n this._hasIconSuffix = false;\n this._hasTextSuffix = false;\n // Unique id for the internal form field label.\n this._labelId = `mat-mdc-form-field-label-${nextUniqueId++}`;\n // Unique id for the hint label.\n this._hintLabelId = `mat-mdc-hint-${nextUniqueId++}`;\n /** State of the mat-hint and mat-error animations. */\n this._subscriptAnimationState = '';\n this._destroyed = new Subject();\n this._isFocused = null;\n this._needsOutlineLabelOffsetUpdate = false;\n this._injector = inject(Injector);\n /**\n * Gets the id of the label element. If no label is present, returns `null`.\n */\n this.getLabelId = computed(() => this._hasFloatingLabel() ? this._labelId : null);\n this._hasFloatingLabel = computed(() => !!this._labelChild());\n if (_defaults) {\n if (_defaults.appearance) {\n this.appearance = _defaults.appearance;\n }\n this._hideRequiredMarker = Boolean(_defaults?.hideRequiredMarker);\n if (_defaults.color) {\n this.color = _defaults.color;\n }\n }\n }\n ngAfterViewInit() {\n // Initial focus state sync. This happens rarely, but we want to account for\n // it in case the form field control has \"focused\" set to true on init.\n this._updateFocusState();\n // Enable animations now. This ensures we don't animate on initial render.\n this._subscriptAnimationState = 'enter';\n // Because the above changes a value used in the template after it was checked, we need\n // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n this._changeDetectorRef.detectChanges();\n }\n ngAfterContentInit() {\n this._assertFormFieldControl();\n this._initializeControl();\n this._initializeSubscript();\n this._initializePrefixAndSuffix();\n this._initializeOutlineLabelOffsetSubscriptions();\n }\n ngAfterContentChecked() {\n this._assertFormFieldControl();\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Gets an ElementRef for the element that a overlay attached to the form field\n * should be positioned relative to.\n */\n getConnectedOverlayOrigin() {\n return this._textField || this._elementRef;\n }\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel() {\n // This is for backwards compatibility only. Consumers of the form field might use\n // this method. e.g. the autocomplete trigger. This method has been added to the non-MDC\n // form field because setting \"floatLabel\" to \"always\" caused the label to float without\n // animation. This is different in MDC where the label always animates, so this method\n // is no longer necessary. There doesn't seem any benefit in adding logic to allow changing\n // the floating label state without animations. The non-MDC implementation was inconsistent\n // because it always animates if \"floatLabel\" is set away from \"always\".\n // TODO(devversion): consider removing this method when releasing the MDC form field.\n if (this._hasFloatingLabel()) {\n this.floatLabel = 'always';\n }\n }\n /** Initializes the registered form field control. */\n _initializeControl() {\n const control = this._control;\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-mdc-form-field-type-${control.controlType}`);\n }\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.subscribe(() => {\n this._updateFocusState();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n }\n _checkPrefixAndSuffixTypes() {\n this._hasIconPrefix = !!this._prefixChildren.find(p => !p._isText);\n this._hasTextPrefix = !!this._prefixChildren.find(p => p._isText);\n this._hasIconSuffix = !!this._suffixChildren.find(s => !s._isText);\n this._hasTextSuffix = !!this._suffixChildren.find(s => s._isText);\n }\n /** Initializes the prefix and suffix containers. */\n _initializePrefixAndSuffix() {\n this._checkPrefixAndSuffixTypes();\n // Mark the form field as dirty whenever the prefix or suffix children change. This\n // is necessary because we conditionally display the prefix/suffix containers based\n // on whether there is projected content.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._checkPrefixAndSuffixTypes();\n this._changeDetectorRef.markForCheck();\n });\n }\n /**\n * Initializes the subscript by validating hints and synchronizing \"aria-describedby\" ids\n * with the custom form field control. Also subscribes to hint and error changes in order\n * to be able to validate and synchronize ids on change.\n */\n _initializeSubscript() {\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Initial mat-hint validation and subscript describedByIds sync.\n this._validateHints();\n this._syncDescribedByIds();\n }\n /** Throws an error if the form field's control is missing. */\n _assertFormFieldControl() {\n if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatFormFieldMissingControlError();\n }\n }\n _updateFocusState() {\n // Usually the MDC foundation would call \"activateFocus\" and \"deactivateFocus\" whenever\n // certain DOM events are emitted. This is not possible in our implementation of the\n // form field because we support abstract form field controls which are not necessarily\n // of type input, nor do we have a reference to a native form field control element. Instead\n // we handle the focus by checking if the abstract form field control focused state changes.\n if (this._control.focused && !this._isFocused) {\n this._isFocused = true;\n this._lineRipple?.activate();\n } else if (!this._control.focused && (this._isFocused || this._isFocused === null)) {\n this._isFocused = false;\n this._lineRipple?.deactivate();\n }\n this._textField?.nativeElement.classList.toggle('mdc-text-field--focused', this._control.focused);\n }\n /**\n * The floating label in the docked state needs to account for prefixes. The horizontal offset\n * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the\n * form field is added to the DOM. This method sets up all subscriptions which are needed to\n * trigger the label offset update.\n */\n _initializeOutlineLabelOffsetSubscriptions() {\n // Whenever the prefix changes, schedule an update of the label offset.\n // TODO(mmalerba): Use ResizeObserver to better support dynamically changing prefix content.\n this._prefixChildren.changes.subscribe(() => this._needsOutlineLabelOffsetUpdate = true);\n // TODO(mmalerba): Split this into separate `afterRender` calls using the `EarlyRead` and\n // `Write` phases.\n afterRender(() => {\n if (this._needsOutlineLabelOffsetUpdate) {\n this._needsOutlineLabelOffsetUpdate = false;\n this._updateOutlineLabelOffset();\n }\n }, {\n injector: this._injector\n });\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._needsOutlineLabelOffsetUpdate = true);\n }\n /** Whether the floating label should always float or not. */\n _shouldAlwaysFloat() {\n return this.floatLabel === 'always';\n }\n _hasOutline() {\n return this.appearance === 'outline';\n }\n /**\n * Whether the label should display in the infix. Labels in the outline appearance are\n * displayed as part of the notched-outline and are horizontally offset to account for\n * form field prefix content. This won't work in server side rendering since we cannot\n * measure the width of the prefix container. To make the docked label appear as if the\n * right offset has been calculated, we forcibly render the label inside the infix. Since\n * the label is part of the infix, the label cannot overflow the prefix content.\n */\n _forceDisplayInfixLabel() {\n return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();\n }\n _shouldLabelFloat() {\n if (!this._hasFloatingLabel()) {\n return false;\n }\n return this._control.shouldLabelFloat || this._shouldAlwaysFloat();\n }\n /**\n * Determines whether a class from the AbstractControlDirective\n * should be forwarded to the host element.\n */\n _shouldForward(prop) {\n const control = this._control ? this._control.ngControl : null;\n return control && control[prop];\n }\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages() {\n return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState ? 'error' : 'hint';\n }\n /** Handle label resize events. */\n _handleLabelResized() {\n this._refreshOutlineNotchWidth();\n }\n /** Refreshes the width of the outline-notch, if present. */\n _refreshOutlineNotchWidth() {\n if (!this._hasOutline() || !this._floatingLabel || !this._shouldLabelFloat()) {\n this._notchedOutline?._setNotchWidth(0);\n } else {\n this._notchedOutline?._setNotchWidth(this._floatingLabel.getWidth());\n }\n }\n /** Does any extra processing that is required when handling the hints. */\n _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n /**\n * Ensure that there is a maximum of one of each \"mat-hint\" alignment specified. The hint\n * label specified set through the input is being considered as \"start\" aligned.\n *\n * This method is a noop if Angular runs in production mode.\n */\n _validateHints() {\n if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n let startHint;\n let endHint;\n this._hintChildren.forEach(hint => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n _syncDescribedByIds() {\n if (this._control) {\n let ids = [];\n // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n if (this._control.userAriaDescribedBy && typeof this._control.userAriaDescribedBy === 'string') {\n ids.push(...this._control.userAriaDescribedBy.split(' '));\n }\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ? this._hintChildren.find(hint => hint.align === 'end') : null;\n if (startHint) {\n ids.push(startHint.id);\n } else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n if (endHint) {\n ids.push(endHint.id);\n }\n } else if (this._errorChildren) {\n ids.push(...this._errorChildren.map(error => error.id));\n }\n this._control.setDescribedByIds(ids);\n }\n }\n /**\n * Updates the horizontal offset of the label in the outline appearance. In the outline\n * appearance, the notched-outline and label are not relative to the infix container because\n * the outline intends to surround prefixes, suffixes and the infix. This means that the\n * floating label by default overlaps prefixes in the docked state. To avoid this, we need to\n * horizontally offset the label by the width of the prefix container. The MDC text-field does\n * not need to do this because they use a fixed width for prefixes. Hence, they can simply\n * incorporate the horizontal offset into their default text-field styles.\n */\n _updateOutlineLabelOffset() {\n if (!this._hasOutline() || !this._floatingLabel) {\n return;\n }\n const floatingLabel = this._floatingLabel.element;\n // If no prefix is displayed, reset the outline label offset from potential\n // previous label offset updates.\n if (!(this._iconPrefixContainer || this._textPrefixContainer)) {\n floatingLabel.style.transform = '';\n return;\n }\n // If the form field is not attached to the DOM yet (e.g. in a tab), we defer\n // the label offset update until the zone stabilizes.\n if (!this._isAttachedToDom()) {\n this._needsOutlineLabelOffsetUpdate = true;\n return;\n }\n const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;\n const textPrefixContainer = this._textPrefixContainer?.nativeElement;\n const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;\n const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;\n // If the directionality is RTL, the x-axis transform needs to be inverted. This\n // is because `transformX` does not change based on the page directionality.\n const negate = this._dir.value === 'rtl' ? '-1' : '1';\n const prefixWidth = `${iconPrefixContainerWidth + textPrefixContainerWidth}px`;\n const labelOffset = `var(--mat-mdc-form-field-label-offset-x, 0px)`;\n const labelHorizontalOffset = `calc(${negate} * (${prefixWidth} + ${labelOffset}))`;\n // Update the translateX of the floating label to account for the prefix container,\n // but allow the CSS to override this setting via a CSS variable when the label is\n // floating.\n floatingLabel.style.transform = `var(\n --mat-mdc-form-field-label-transform,\n ${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset})\n )`;\n }\n /** Checks whether the form field is attached to the DOM. */\n _isAttachedToDom() {\n const element = this._elementRef.nativeElement;\n if (element.getRootNode) {\n const rootNode = element.getRootNode();\n // If the element is inside the DOM the root node will be either the document\n // or the closest shadow root, otherwise it'll be the element itself.\n return rootNode && rootNode !== element;\n }\n // Otherwise fall back to checking if it's in the document. This doesn't account for\n // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n return document.documentElement.contains(element);\n }\n static {\n this.ɵfac = function MatFormField_Factory(ɵt) {\n return new (ɵt || MatFormField)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i1.Directionality), i0.ɵɵdirectiveInject(i2.Platform), i0.ɵɵdirectiveInject(MAT_FORM_FIELD_DEFAULT_OPTIONS, 8), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(DOCUMENT));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatFormField,\n selectors: [[\"mat-form-field\"]],\n contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuerySignal(dirIndex, ctx._labelChild, MatLabel, 5);\n i0.ɵɵcontentQuery(dirIndex, MatFormFieldControl, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_PREFIX, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_SUFFIX, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_ERROR, 5);\n i0.ɵɵcontentQuery(dirIndex, MatHint, 5);\n }\n if (rf & 2) {\n i0.ɵɵqueryAdvance();\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._formFieldControl = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._prefixChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._suffixChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._errorChildren = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._hintChildren = _t);\n }\n },\n viewQuery: function MatFormField_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c3, 5);\n i0.ɵɵviewQuery(_c4, 5);\n i0.ɵɵviewQuery(_c5, 5);\n i0.ɵɵviewQuery(MatFormFieldFloatingLabel, 5);\n i0.ɵɵviewQuery(MatFormFieldNotchedOutline, 5);\n i0.ɵɵviewQuery(MatFormFieldLineRipple, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textField = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._iconPrefixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._textPrefixContainer = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._floatingLabel = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._notchedOutline = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lineRipple = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-form-field\"],\n hostVars: 42,\n hostBindings: function MatFormField_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-form-field-label-always-float\", ctx._shouldAlwaysFloat())(\"mat-mdc-form-field-has-icon-prefix\", ctx._hasIconPrefix)(\"mat-mdc-form-field-has-icon-suffix\", ctx._hasIconSuffix)(\"mat-form-field-invalid\", ctx._control.errorState)(\"mat-form-field-disabled\", ctx._control.disabled)(\"mat-form-field-autofilled\", ctx._control.autofilled)(\"mat-form-field-no-animations\", ctx._animationMode === \"NoopAnimations\")(\"mat-form-field-appearance-fill\", ctx.appearance == \"fill\")(\"mat-form-field-appearance-outline\", ctx.appearance == \"outline\")(\"mat-form-field-hide-placeholder\", ctx._hasFloatingLabel() && !ctx._shouldLabelFloat())(\"mat-focused\", ctx._control.focused)(\"mat-primary\", ctx.color !== \"accent\" && ctx.color !== \"warn\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\")(\"ng-untouched\", ctx._shouldForward(\"untouched\"))(\"ng-touched\", ctx._shouldForward(\"touched\"))(\"ng-pristine\", ctx._shouldForward(\"pristine\"))(\"ng-dirty\", ctx._shouldForward(\"dirty\"))(\"ng-valid\", ctx._shouldForward(\"valid\"))(\"ng-invalid\", ctx._shouldForward(\"invalid\"))(\"ng-pending\", ctx._shouldForward(\"pending\"));\n }\n },\n inputs: {\n hideRequiredMarker: \"hideRequiredMarker\",\n color: \"color\",\n floatLabel: \"floatLabel\",\n appearance: \"appearance\",\n subscriptSizing: \"subscriptSizing\",\n hintLabel: \"hintLabel\"\n },\n exportAs: [\"matFormField\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_FORM_FIELD,\n useExisting: MatFormField\n }, {\n provide: FLOATING_LABEL_PARENT,\n useExisting: MatFormField\n }]), i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c7,\n decls: 18,\n vars: 21,\n consts: [[\"labelTemplate\", \"\"], [\"textField\", \"\"], [\"iconPrefixContainer\", \"\"], [\"textPrefixContainer\", \"\"], [1, \"mat-mdc-text-field-wrapper\", \"mdc-text-field\", 3, \"click\"], [1, \"mat-mdc-form-field-focus-overlay\"], [1, \"mat-mdc-form-field-flex\"], [\"matFormFieldNotchedOutline\", \"\", 3, \"matFormFieldNotchedOutlineOpen\"], [1, \"mat-mdc-form-field-icon-prefix\"], [1, \"mat-mdc-form-field-text-prefix\"], [1, \"mat-mdc-form-field-infix\"], [3, \"ngTemplateOutlet\"], [1, \"mat-mdc-form-field-text-suffix\"], [1, \"mat-mdc-form-field-icon-suffix\"], [\"matFormFieldLineRipple\", \"\"], [1, \"mat-mdc-form-field-subscript-wrapper\", \"mat-mdc-form-field-bottom-align\"], [1, \"mat-mdc-form-field-error-wrapper\"], [1, \"mat-mdc-form-field-hint-wrapper\"], [\"matFormFieldFloatingLabel\", \"\", 3, \"floating\", \"monitorResize\", \"id\"], [\"aria-hidden\", \"true\", 1, \"mat-mdc-form-field-required-marker\", \"mdc-floating-label--required\"], [3, \"id\"], [1, \"mat-mdc-form-field-hint-spacer\"]],\n template: function MatFormField_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c6);\n i0.ɵɵtemplate(0, MatFormField_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n i0.ɵɵelementStart(2, \"div\", 4, 1);\n i0.ɵɵlistener(\"click\", function MatFormField_Template_div_click_2_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._control.onContainerClick($event));\n });\n i0.ɵɵtemplate(4, MatFormField_Conditional_4_Template, 1, 0, \"div\", 5);\n i0.ɵɵelementStart(5, \"div\", 6);\n i0.ɵɵtemplate(6, MatFormField_Conditional_6_Template, 2, 2, \"div\", 7)(7, MatFormField_Conditional_7_Template, 3, 0, \"div\", 8)(8, MatFormField_Conditional_8_Template, 3, 0, \"div\", 9);\n i0.ɵɵelementStart(9, \"div\", 10);\n i0.ɵɵtemplate(10, MatFormField_Conditional_10_Template, 1, 1, null, 11);\n i0.ɵɵprojection(11);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(12, MatFormField_Conditional_12_Template, 2, 0, \"div\", 12)(13, MatFormField_Conditional_13_Template, 2, 0, \"div\", 13);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(14, MatFormField_Conditional_14_Template, 1, 0, \"div\", 14);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(15, \"div\", 15);\n i0.ɵɵtemplate(16, MatFormField_Case_16_Template, 2, 1, \"div\", 16)(17, MatFormField_Case_17_Template, 5, 2, \"div\", 17);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n let tmp_16_0;\n i0.ɵɵadvance(2);\n i0.ɵɵclassProp(\"mdc-text-field--filled\", !ctx._hasOutline())(\"mdc-text-field--outlined\", ctx._hasOutline())(\"mdc-text-field--no-label\", !ctx._hasFloatingLabel())(\"mdc-text-field--disabled\", ctx._control.disabled)(\"mdc-text-field--invalid\", ctx._control.errorState);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx._hasOutline() && !ctx._control.disabled ? 4 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasOutline() ? 6 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasIconPrefix ? 7 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasTextPrefix ? 8 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx._hasOutline() || ctx._forceDisplayInfixLabel() ? 10 : -1);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx._hasTextSuffix ? 12 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx._hasIconSuffix ? 13 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(!ctx._hasOutline() ? 14 : -1);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-mdc-form-field-subscript-dynamic-size\", ctx.subscriptSizing === \"dynamic\");\n i0.ɵɵadvance();\n i0.ɵɵconditional((tmp_16_0 = ctx._getDisplayedMessages()) === \"error\" ? 16 : tmp_16_0 === \"hint\" ? 17 : -1);\n }\n },\n dependencies: [MatFormFieldFloatingLabel, MatFormFieldNotchedOutline, NgTemplateOutlet, MatFormFieldLineRipple, MatHint],\n styles: [\".mdc-text-field{display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-text-field__input{width:100%;min-width:0;border:none;border-radius:0;background:none;padding:0;-moz-appearance:none;-webkit-appearance:none;height:28px}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}.mdc-text-field__input::placeholder{opacity:0}.mdc-text-field__input::-moz-placeholder{opacity:0}.mdc-text-field__input::-webkit-input-placeholder{opacity:0}.mdc-text-field__input:-ms-input-placeholder{opacity:0}.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{opacity:1}.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}.mdc-text-field--outlined .mdc-text-field__input,.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-filled-text-field-input-text-color);caret-color:var(--mdc-filled-text-field-caret-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-filled-text-field-input-text-placeholder-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-filled-text-field-error-caret-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-filled-text-field-disabled-input-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{color:var(--mdc-outlined-text-field-input-text-color);caret-color:var(--mdc-outlined-text-field-caret-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-moz-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input::-webkit-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:var(--mdc-outlined-text-field-input-text-placeholder-color)}.mdc-text-field--outlined.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--mdc-outlined-text-field-error-caret-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--mdc-outlined-text-field-disabled-input-text-color)}.mdc-text-field--disabled .cdk-high-contrast-active .mdc-text-field__input{background-color:Window}.mdc-text-field--filled{height:56px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:var(--mdc-filled-text-field-container-shape);border-top-right-radius:var(--mdc-filled-text-field-container-shape)}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--mdc-filled-text-field-container-color)}.mdc-text-field--filled.mdc-text-field--disabled{background-color:var(--mdc-filled-text-field-disabled-container-color)}.mdc-text-field--outlined{height:56px;overflow:visible;padding-left:16px;padding-right:16px}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape));padding-left:max(16px,var(--mdc-outlined-text-field-container-shape) + 4px)}[dir=rtl] .mdc-text-field--outlined{padding-right:max(16px,var(--mdc-outlined-text-field-container-shape) + 4px);padding-left:max(16px,var(--mdc-outlined-text-field-container-shape))}}.mdc-floating-label{position:absolute;left:0;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label{right:0;left:auto;transform-origin:right top;text-align:right}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:auto}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label{left:auto;right:4px}.mdc-text-field--filled .mdc-floating-label{left:16px;right:auto}[dir=rtl] .mdc-text-field--filled .mdc-floating-label{left:auto;right:16px}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.cdk-high-contrast-active .mdc-text-field--disabled .mdc-floating-label{z-index:1}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-filled-text-field-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-focus-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-filled-text-field-hover-label-text-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-filled-text-field-disabled-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-filled-text-field-error-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-filled-text-field-error-focus-label-text-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-filled-text-field-error-hover-label-text-color)}.mdc-text-field--filled .mdc-floating-label{font-family:var(--mdc-filled-text-field-label-text-font);font-size:var(--mdc-filled-text-field-label-text-size);font-weight:var(--mdc-filled-text-field-label-text-weight);letter-spacing:var(--mdc-filled-text-field-label-text-tracking)}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-floating-label{color:var(--mdc-outlined-text-field-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-focus-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-hover-label-text-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mdc-floating-label{color:var(--mdc-outlined-text-field-disabled-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-floating-label{color:var(--mdc-outlined-text-field-error-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mdc-floating-label{color:var(--mdc-outlined-text-field-error-focus-label-text-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-floating-label{color:var(--mdc-outlined-text-field-error-hover-label-text-color)}.mdc-text-field--outlined .mdc-floating-label{font-family:var(--mdc-outlined-text-field-label-text-font);font-size:var(--mdc-outlined-text-field-label-text-size);font-weight:var(--mdc-outlined-text-field-label-text-weight);letter-spacing:var(--mdc-outlined-text-field-label-text-tracking)}.mdc-floating-label--float-above{cursor:auto;transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1);font-size:.75rem}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:1px;margin-right:0;content:\\\"*\\\"}[dir=rtl] .mdc-floating-label--required:not(.mdc-floating-label--hide-required-marker)::after{margin-left:0;margin-right:1px}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline{text-align:right}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mat-mdc-notch-piece{box-sizing:border-box;height:100%;pointer-events:none;border-top:1px solid;border-bottom:1px solid}.mdc-text-field--focused .mat-mdc-notch-piece{border-width:2px}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-outline-color);border-width:var(--mdc-outlined-text-field-outline-width)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-hover-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-focus-outline-color)}.mdc-text-field--outlined.mdc-text-field--disabled .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-disabled-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-notched-outline .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-hover-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid.mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--mdc-outlined-text-field-error-focus-outline-color)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mat-mdc-notch-piece{border-width:var(--mdc-outlined-text-field-focus-outline-width)}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;width:12px;border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px,var(--mdc-outlined-text-field-container-shape))}}[dir=rtl] .mdc-notched-outline__leading{border-left:none;border-right:1px solid;border-bottom-left-radius:0;border-top-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape)}.mdc-notched-outline__trailing{flex-grow:1;border-left:none;border-right:1px solid;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-right-radius:var(--mdc-outlined-text-field-container-shape)}[dir=rtl] .mdc-notched-outline__trailing{border-left:1px solid;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mdc-outlined-text-field-container-shape);border-bottom-left-radius:var(--mdc-outlined-text-field-container-shape)}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 24px)}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px,var(--mdc-outlined-text-field-container-shape))*2)}}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\\\"\\\"}.mdc-line-ripple::before{z-index:1;border-bottom-width:var(--mdc-filled-text-field-active-indicator-height)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-hover-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-disabled-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-active-indicator-color)}.mdc-text-field--filled:not(.mdc-text-field--disabled).mdc-text-field--invalid:not(.mdc-text-field--focused):hover .mdc-line-ripple::before{border-bottom-color:var(--mdc-filled-text-field-error-hover-active-indicator-color)}.mdc-line-ripple::after{transform:scaleX(0);opacity:0;z-index:2}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-width:var(--mdc-filled-text-field-focus-active-indicator-height)}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-focus-active-indicator-color)}.mdc-text-field--filled.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:var(--mdc-filled-text-field-error-focus-active-indicator-color)}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-text-field--disabled{pointer-events:none}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font:inherit;letter-spacing:inherit;text-decoration:inherit;text-transform:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;line-height:normal;pointer-events:all;will-change:auto}.mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label.mdc-floating-label{cursor:inherit}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto;will-change:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0;--mat-mdc-form-field-label-offset-x: -16px}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-form-field-disabled .mdc-text-field__input::placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-moz-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input::-webkit-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-form-field-disabled .mdc-text-field__input:-ms-input-placeholder{color:var(--mat-form-field-disabled-input-text-placeholder-color)}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:1px solid rgba(0,0,0,0)}[dir=rtl] .mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field.mat-mdc-form-field .mdc-notched-outline__notch{border-left:none;border-right:1px solid rgba(0,0,0,0)}.mat-mdc-form-field-infix{min-height:var(--mat-form-field-container-height);padding-top:var(--mat-form-field-filled-with-label-container-padding-top);padding-bottom:var(--mat-form-field-filled-with-label-container-padding-bottom)}.mdc-text-field--outlined .mat-mdc-form-field-infix,.mdc-text-field--no-label .mat-mdc-form-field-infix{padding-top:var(--mat-form-field-container-vertical-padding);padding-bottom:var(--mat-form-field-container-vertical-padding)}.mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:calc(var(--mat-form-field-container-height)/2)}.mdc-text-field--filled .mat-mdc-floating-label{display:var(--mat-form-field-filled-label-display, block)}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY(calc(calc(6.75px + var(--mat-form-field-container-height) / 2) * -1)) scale(var(--mat-mdc-form-field-floating-label-scale, 0.75));transform:var(--mat-mdc-form-field-label-transform)}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\\\"\\\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block;color:var(--mat-form-field-error-text-color)}.mat-mdc-form-field-subscript-wrapper,.mat-mdc-form-field-bottom-align::before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-subscript-text-font);line-height:var(--mat-form-field-subscript-text-line-height);font-size:var(--mat-form-field-subscript-text-size);letter-spacing:var(--mat-form-field-subscript-text-tracking);font-weight:var(--mat-form-field-subscript-text-weight)}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0;pointer-events:none;background-color:var(--mat-form-field-state-layer-color)}.mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-hover-state-layer-opacity)}.mat-mdc-form-field.mat-focused .mat-mdc-form-field-focus-overlay{opacity:var(--mat-form-field-focus-state-layer-opacity)}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option{color:var(--mat-form-field-select-option-text-color)}select.mat-mdc-form-field-input-control:not(.mat-mdc-native-select-inline) option:disabled{color:var(--mat-form-field-select-disabled-option-text-color)}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;top:50%;margin-top:-2.5px;pointer-events:none;color:var(--mat-form-field-enabled-select-arrow-color)}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select.mat-focused .mat-mdc-form-field-infix::after{color:var(--mat-form-field-focus-select-arrow-color)}.mat-mdc-form-field-type-mat-native-select.mat-form-field-disabled .mat-mdc-form-field-infix::after{color:var(--mat-form-field-disabled-select-arrow-color)}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field-input-control[type=date],.mat-mdc-form-field-input-control[type=datetime],.mat-mdc-form-field-input-control[type=datetime-local],.mat-mdc-form-field-input-control[type=month],.mat-mdc-form-field-input-control[type=week],.mat-mdc-form-field-input-control[type=time]{line-height:1}.mat-mdc-form-field-input-control::-webkit-datetime-edit{line-height:1;padding:0;margin-bottom:-2px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-container-text-font);line-height:var(--mat-form-field-container-text-line-height);font-size:var(--mat-form-field-container-text-size);letter-spacing:var(--mat-form-field-container-text-tracking);font-weight:var(--mat-form-field-container-text-weight)}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(var(--mat-form-field-outlined-label-text-populated-size)*var(--mat-mdc-form-field-floating-label-scale))}.mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:var(--mat-form-field-outlined-label-text-populated-size)}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%;z-index:0}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0;pointer-events:auto;position:relative;z-index:1}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:0 12px;box-sizing:content-box}.mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-leading-icon-color)}.mat-form-field-disabled .mat-mdc-form-field-icon-prefix{color:var(--mat-form-field-disabled-leading-icon-color)}.mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-trailing-icon-color)}.mat-form-field-disabled .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-disabled-trailing-icon-color)}.mat-form-field-invalid .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-trailing-icon-color)}.mat-form-field-invalid:not(.mat-focused):not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper:hover .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-hover-trailing-icon-color)}.mat-form-field-invalid.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-icon-suffix{color:var(--mat-form-field-error-focus-trailing-icon-color)}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::-moz-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::-webkit-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::-moz-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::-moz-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input::-webkit-input-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input::-webkit-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mat-mdc-form-field:not(.mat-form-field-no-animations).mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-notched-outline .mdc-floating-label{max-width:calc(100% + 1px)}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(133.3333333333% + 1px)}\"],\n encapsulation: 2,\n data: {\n animation: [matFormFieldAnimations.transitionMessages]\n },\n changeDetection: 0\n });\n }\n }\n return MatFormField;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatFormFieldModule = /*#__PURE__*/(() => {\n class MatFormFieldModule {\n static {\n this.ɵfac = function MatFormFieldModule_Factory(ɵt) {\n return new (ɵt || MatFormFieldModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatFormFieldModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CommonModule, ObserversModule, MatCommonModule]\n });\n }\n }\n return MatFormFieldModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_ERROR, MAT_FORM_FIELD, MAT_FORM_FIELD_DEFAULT_OPTIONS, MAT_PREFIX, MAT_SUFFIX, MatError, MatFormField, MatFormFieldControl, MatFormFieldModule, MatHint, MatLabel, MatPrefix, MatSuffix, getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, getMatFormFieldPlaceholderConflictError, matFormFieldAnimations };\n","import * as i1 from '@angular/cdk/platform';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, booleanAttribute, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { coerceElement, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { EMPTY, Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\nimport { DOCUMENT } from '@angular/common';\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true\n});\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nlet AutofillMonitor = /*#__PURE__*/(() => {\n class AutofillMonitor {\n constructor(_platform, _ngZone) {\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._monitoredElements = new Map();\n }\n monitor(elementOrRef) {\n if (!this._platform.isBrowser) {\n return EMPTY;\n }\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n return info.subject;\n }\n const result = new Subject();\n const cssClass = 'cdk-text-field-autofilled';\n const listener = event => {\n // Animation events fire on initial element render, we check for the presence of the autofill\n // CSS class to make sure this is a real change in state, not just the initial render before\n // we fire off events.\n if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) {\n element.classList.add(cssClass);\n this._ngZone.run(() => result.next({\n target: event.target,\n isAutofilled: true\n }));\n } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {\n element.classList.remove(cssClass);\n this._ngZone.run(() => result.next({\n target: event.target,\n isAutofilled: false\n }));\n }\n };\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('animationstart', listener, listenerOptions);\n element.classList.add('cdk-text-field-autofill-monitored');\n });\n this._monitoredElements.set(element, {\n subject: result,\n unlisten: () => {\n element.removeEventListener('animationstart', listener, listenerOptions);\n }\n });\n return result;\n }\n stopMonitoring(elementOrRef) {\n const element = coerceElement(elementOrRef);\n const info = this._monitoredElements.get(element);\n if (info) {\n info.unlisten();\n info.subject.complete();\n element.classList.remove('cdk-text-field-autofill-monitored');\n element.classList.remove('cdk-text-field-autofilled');\n this._monitoredElements.delete(element);\n }\n }\n ngOnDestroy() {\n this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n }\n static {\n this.ɵfac = function AutofillMonitor_Factory(ɵt) {\n return new (ɵt || AutofillMonitor)(i0.ɵɵinject(i1.Platform), i0.ɵɵinject(i0.NgZone));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AutofillMonitor,\n factory: AutofillMonitor.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return AutofillMonitor;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** A directive that can be used to monitor the autofill state of an input. */\nlet CdkAutofill = /*#__PURE__*/(() => {\n class CdkAutofill {\n constructor(_elementRef, _autofillMonitor) {\n this._elementRef = _elementRef;\n this._autofillMonitor = _autofillMonitor;\n /** Emits when the autofill state of the element changes. */\n this.cdkAutofill = new EventEmitter();\n }\n ngOnInit() {\n this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event));\n }\n ngOnDestroy() {\n this._autofillMonitor.stopMonitoring(this._elementRef);\n }\n static {\n this.ɵfac = function CdkAutofill_Factory(ɵt) {\n return new (ɵt || CdkAutofill)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(AutofillMonitor));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkAutofill,\n selectors: [[\"\", \"cdkAutofill\", \"\"]],\n outputs: {\n cdkAutofill: \"cdkAutofill\"\n },\n standalone: true\n });\n }\n }\n return CdkAutofill;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Directive to automatically resize a textarea to fit its content. */\nlet CdkTextareaAutosize = /*#__PURE__*/(() => {\n class CdkTextareaAutosize {\n /** Minimum amount of rows in the textarea. */\n get minRows() {\n return this._minRows;\n }\n set minRows(value) {\n this._minRows = coerceNumberProperty(value);\n this._setMinHeight();\n }\n /** Maximum amount of rows in the textarea. */\n get maxRows() {\n return this._maxRows;\n }\n set maxRows(value) {\n this._maxRows = coerceNumberProperty(value);\n this._setMaxHeight();\n }\n /** Whether autosizing is enabled or not */\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n // Only act if the actual value changed. This specifically helps to not run\n // resizeToFitContent too early (i.e. before ngAfterViewInit)\n if (this._enabled !== value) {\n (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n }\n }\n get placeholder() {\n return this._textareaElement.placeholder;\n }\n set placeholder(value) {\n this._cachedPlaceholderHeight = undefined;\n if (value) {\n this._textareaElement.setAttribute('placeholder', value);\n } else {\n this._textareaElement.removeAttribute('placeholder');\n }\n this._cacheTextareaPlaceholderHeight();\n }\n constructor(_elementRef, _platform, _ngZone, /** @breaking-change 11.0.0 make document required */\n document) {\n this._elementRef = _elementRef;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._destroyed = new Subject();\n this._enabled = true;\n /**\n * Value of minRows as of last resize. If the minRows has decreased, the\n * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n * does not have the same problem because it does not affect the textarea's scrollHeight.\n */\n this._previousMinRows = -1;\n this._isViewInited = false;\n /** Handles `focus` and `blur` events. */\n this._handleFocusEvent = event => {\n this._hasFocus = event.type === 'focus';\n };\n this._document = document;\n this._textareaElement = this._elementRef.nativeElement;\n }\n /** Sets the minimum height of the textarea as determined by minRows. */\n _setMinHeight() {\n const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n if (minHeight) {\n this._textareaElement.style.minHeight = minHeight;\n }\n }\n /** Sets the maximum height of the textarea as determined by maxRows. */\n _setMaxHeight() {\n const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n if (maxHeight) {\n this._textareaElement.style.maxHeight = maxHeight;\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n // Remember the height which we started with in case autosizing is disabled\n this._initialHeight = this._textareaElement.style.height;\n this.resizeToFitContent();\n this._ngZone.runOutsideAngular(() => {\n const window = this._getWindow();\n fromEvent(window, 'resize').pipe(auditTime(16), takeUntil(this._destroyed)).subscribe(() => this.resizeToFitContent(true));\n this._textareaElement.addEventListener('focus', this._handleFocusEvent);\n this._textareaElement.addEventListener('blur', this._handleFocusEvent);\n });\n this._isViewInited = true;\n this.resizeToFitContent(true);\n }\n }\n ngOnDestroy() {\n this._textareaElement.removeEventListener('focus', this._handleFocusEvent);\n this._textareaElement.removeEventListener('blur', this._handleFocusEvent);\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Cache the height of a single-row textarea if it has not already been cached.\n *\n * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n * maxRows. For the initial version, we will assume that the height of a single line in the\n * textarea does not ever change.\n */\n _cacheTextareaLineHeight() {\n if (this._cachedLineHeight) {\n return;\n }\n // Use a clone element because we have to override some styles.\n let textareaClone = this._textareaElement.cloneNode(false);\n textareaClone.rows = 1;\n // Use `position: absolute` so that this doesn't cause a browser layout and use\n // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n // would affect the height.\n textareaClone.style.position = 'absolute';\n textareaClone.style.visibility = 'hidden';\n textareaClone.style.border = 'none';\n textareaClone.style.padding = '0';\n textareaClone.style.height = '';\n textareaClone.style.minHeight = '';\n textareaClone.style.maxHeight = '';\n // In Firefox it happens that textarea elements are always bigger than the specified amount\n // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n // to hidden. This ensures that there is no invalid calculation of the line height.\n // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n textareaClone.style.overflow = 'hidden';\n this._textareaElement.parentNode.appendChild(textareaClone);\n this._cachedLineHeight = textareaClone.clientHeight;\n textareaClone.remove();\n // Min and max heights have to be re-calculated if the cached line height changes\n this._setMinHeight();\n this._setMaxHeight();\n }\n _measureScrollHeight() {\n const element = this._textareaElement;\n const previousMargin = element.style.marginBottom || '';\n const isFirefox = this._platform.FIREFOX;\n const needsMarginFiller = isFirefox && this._hasFocus;\n const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring';\n // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n // work around it by assigning a temporary margin with the same height as the `textarea` so that\n // it occupies the same amount of space. See #23233.\n if (needsMarginFiller) {\n element.style.marginBottom = `${element.clientHeight}px`;\n }\n // Reset the textarea height to auto in order to shrink back to its default size.\n // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n element.classList.add(measuringClass);\n // The measuring class includes a 2px padding to workaround an issue with Chrome,\n // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n const scrollHeight = element.scrollHeight - 4;\n element.classList.remove(measuringClass);\n if (needsMarginFiller) {\n element.style.marginBottom = previousMargin;\n }\n return scrollHeight;\n }\n _cacheTextareaPlaceholderHeight() {\n if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n return;\n }\n if (!this.placeholder) {\n this._cachedPlaceholderHeight = 0;\n return;\n }\n const value = this._textareaElement.value;\n this._textareaElement.value = this._textareaElement.placeholder;\n this._cachedPlaceholderHeight = this._measureScrollHeight();\n this._textareaElement.value = value;\n }\n ngDoCheck() {\n if (this._platform.isBrowser) {\n this.resizeToFitContent();\n }\n }\n /**\n * Resize the textarea to fit its content.\n * @param force Whether to force a height recalculation. By default the height will be\n * recalculated only if the value changed since the last call.\n */\n resizeToFitContent(force = false) {\n // If autosizing is disabled, just skip everything else\n if (!this._enabled) {\n return;\n }\n this._cacheTextareaLineHeight();\n this._cacheTextareaPlaceholderHeight();\n // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n // in checking the height of the textarea.\n if (!this._cachedLineHeight) {\n return;\n }\n const textarea = this._elementRef.nativeElement;\n const value = textarea.value;\n // Only resize if the value or minRows have changed since these calculations can be expensive.\n if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n return;\n }\n const scrollHeight = this._measureScrollHeight();\n const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n textarea.style.height = `${height}px`;\n this._ngZone.runOutsideAngular(() => {\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n } else {\n setTimeout(() => this._scrollToCaretPosition(textarea));\n }\n });\n this._previousValue = value;\n this._previousMinRows = this._minRows;\n }\n /**\n * Resets the textarea to its original size\n */\n reset() {\n // Do not try to change the textarea, if the initialHeight has not been determined yet\n // This might potentially remove styles when reset() is called before ngAfterViewInit\n if (this._initialHeight !== undefined) {\n this._textareaElement.style.height = this._initialHeight;\n }\n }\n _noopInputHandler() {\n // no-op handler that ensures we're running change detection on input events.\n }\n /** Access injected document if available or fallback to global document reference */\n _getDocument() {\n return this._document || document;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n const doc = this._getDocument();\n return doc.defaultView || window;\n }\n /**\n * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n * prevent it from scrolling to the caret position. We need to re-set the selection\n * in order for it to scroll to the proper position.\n */\n _scrollToCaretPosition(textarea) {\n const {\n selectionStart,\n selectionEnd\n } = textarea;\n // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n // between the time we requested the animation frame and when it was executed.\n // Also note that we have to assert that the textarea is focused before we set the\n // selection range. Setting the selection range on a non-focused textarea will cause\n // it to receive focus on IE and Edge.\n if (!this._destroyed.isStopped && this._hasFocus) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n static {\n this.ɵfac = function CdkTextareaAutosize_Factory(ɵt) {\n return new (ɵt || CdkTextareaAutosize)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(DOCUMENT, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkTextareaAutosize,\n selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]],\n hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"],\n hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() {\n return ctx._noopInputHandler();\n });\n }\n },\n inputs: {\n minRows: [0, \"cdkAutosizeMinRows\", \"minRows\"],\n maxRows: [0, \"cdkAutosizeMaxRows\", \"maxRows\"],\n enabled: [2, \"cdkTextareaAutosize\", \"enabled\", booleanAttribute],\n placeholder: \"placeholder\"\n },\n exportAs: [\"cdkTextareaAutosize\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkTextareaAutosize;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TextFieldModule = /*#__PURE__*/(() => {\n class TextFieldModule {\n static {\n this.ɵfac = function TextFieldModule_Factory(ɵt) {\n return new (ɵt || TextFieldModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: TextFieldModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return TextFieldModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { getSupportedInputTypes } from '@angular/cdk/platform';\nimport * as i4 from '@angular/cdk/text-field';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Optional, Self, Inject, Input, NgModule } from '@angular/core';\nimport * as i2 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport * as i3 from '@angular/material/core';\nimport { _ErrorStateTracker, MatCommonModule } from '@angular/material/core';\nimport * as i5 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nexport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\n\n/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n\n/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nconst MAT_INPUT_VALUE_ACCESSOR = /*#__PURE__*/new InjectionToken('MAT_INPUT_VALUE_ACCESSOR');\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit'];\nlet nextUniqueId = 0;\nlet MatInput = /*#__PURE__*/(() => {\n class MatInput {\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() {\n return this._id;\n }\n set id(value) {\n this._id = value || this._uid;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Input type of the element. */\n get type() {\n return this._type;\n }\n set type(value) {\n this._type = value || 'text';\n this._validateType();\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n this._elementRef.nativeElement.type = this._type;\n }\n this._ensureWheelDefaultBehavior();\n }\n /** An object used to control when error messages are shown. */\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value) {\n this._errorStateTracker.matcher = value;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() {\n return this._inputValueAccessor.value;\n }\n set value(value) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n /** Whether the element is readonly. */\n get readonly() {\n return this._readonly;\n }\n set readonly(value) {\n this._readonly = coerceBooleanProperty(value);\n }\n /** Whether the input is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value) {\n this._errorStateTracker.errorState = value;\n }\n constructor(_elementRef, _platform, ngControl, parentForm, parentFormGroup, defaultErrorStateMatcher, inputValueAccessor, _autofillMonitor, _ngZone,\n // TODO: Remove this once the legacy appearance has been removed. We only need\n // to inject the form field for determining whether the placeholder has been promoted.\n _formField) {\n this._elementRef = _elementRef;\n this._platform = _platform;\n this.ngControl = ngControl;\n this._autofillMonitor = _autofillMonitor;\n this._ngZone = _ngZone;\n this._formField = _formField;\n this._uid = `mat-input-${nextUniqueId++}`;\n this._webkitBlinkWheelListenerAttached = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.focused = false;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.stateChanges = new Subject();\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.controlType = 'mat-input';\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.autofilled = false;\n this._disabled = false;\n this._type = 'text';\n this._readonly = false;\n this._neverEmptyInputTypes = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'].filter(t => getSupportedInputTypes().has(t));\n this._iOSKeyupListener = event => {\n const el = event.target;\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n };\n this._webkitBlinkWheelListener = () => {\n // This is a noop function and is used to enable mouse wheel input\n // on number inputs\n // on blink and webkit browsers.\n };\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n this._previousNativeValue = this.value;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n _ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', this._iOSKeyupListener);\n });\n }\n this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, ngControl, parentFormGroup, parentForm, this.stateChanges);\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!_formField;\n if (this._isNativeSelect) {\n this.controlType = element.multiple ? 'mat-native-select-multiple' : 'mat-native-select';\n }\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n ngOnChanges() {\n this.stateChanges.next();\n }\n ngOnDestroy() {\n this.stateChanges.complete();\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n if (this._platform.IOS) {\n this._elementRef.nativeElement.removeEventListener('keyup', this._iOSKeyupListener);\n }\n if (this._webkitBlinkWheelListenerAttached) {\n this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);\n }\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n // disabled.\n if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n this.disabled = this.ngControl.disabled;\n this.stateChanges.next();\n }\n }\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n /** Focuses the input. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n /** Callback for the cases where the focused state of the input changes. */\n _focusChanged(isFocused) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n /** Does some manual dirty checking on the native input `value` property. */\n _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n _dirtyCheckPlaceholder() {\n const placeholder = this._getPlaceholder();\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder ? element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n }\n }\n /** Gets the current placeholder of the form field. */\n _getPlaceholder() {\n return this.placeholder || null;\n }\n /** Make sure the input is a supported type. */\n _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n /** Checks whether the input type is one of the types that are never empty. */\n _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n /** Checks whether the input is invalid based on the native validation. */\n _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = this._elementRef.nativeElement.validity;\n return validity && validity.badInput;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() && !this.autofilled;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n if (this._isNativeSelect) {\n // For a single-selection ``, the label should float when the selected option has\n // a non-empty display value. For a ``, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement;\n const firstOption = selectElement.options[0];\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n } else {\n return this.focused || !this.empty;\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n } else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n /** Whether the form control is a native select that is displayed inline. */\n _isInlineSelect() {\n const element = this._elementRef.nativeElement;\n return this._isNativeSelect && (element.multiple || element.size > 1);\n }\n /**\n * In blink and webkit browsers a focused number input does not increment or decrement its value\n * on mouse wheel interaction unless a wheel event listener is attached to it or one of its ancestors or a passive wheel listener is attached somewhere in the DOM.\n * For example: Hitting a tooltip once enables the mouse wheel input for all number inputs as long as it exists.\n * In order to get reliable and intuitive behavior we apply a wheel event on our own\n * thus making sure increment and decrement by mouse wheel works every time.\n * @docs-private\n */\n _ensureWheelDefaultBehavior() {\n if (!this._webkitBlinkWheelListenerAttached && this._type === 'number' && (this._platform.BLINK || this._platform.WEBKIT)) {\n this._ngZone.runOutsideAngular(() => {\n this._elementRef.nativeElement.addEventListener('wheel', this._webkitBlinkWheelListener);\n });\n this._webkitBlinkWheelListenerAttached = true;\n }\n if (this._webkitBlinkWheelListenerAttached && this._type !== 'number') {\n this._elementRef.nativeElement.removeEventListener('wheel', this._webkitBlinkWheelListener);\n this._webkitBlinkWheelListenerAttached = true;\n }\n }\n static {\n this.ɵfac = function MatInput_Factory(ɵt) {\n return new (ɵt || MatInput)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i2.NgControl, 10), i0.ɵɵdirectiveInject(i2.NgForm, 8), i0.ɵɵdirectiveInject(i2.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(MAT_INPUT_VALUE_ACCESSOR, 10), i0.ɵɵdirectiveInject(i4.AutofillMonitor), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatInput,\n selectors: [[\"input\", \"matInput\", \"\"], [\"textarea\", \"matInput\", \"\"], [\"select\", \"matNativeControl\", \"\"], [\"input\", \"matNativeControl\", \"\"], [\"textarea\", \"matNativeControl\", \"\"]],\n hostAttrs: [1, \"mat-mdc-input-element\"],\n hostVars: 18,\n hostBindings: function MatInput_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"focus\", function MatInput_focus_HostBindingHandler() {\n return ctx._focusChanged(true);\n })(\"blur\", function MatInput_blur_HostBindingHandler() {\n return ctx._focusChanged(false);\n })(\"input\", function MatInput_input_HostBindingHandler() {\n return ctx._onInput();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id)(\"disabled\", ctx.disabled)(\"required\", ctx.required);\n i0.ɵɵattribute(\"name\", ctx.name || null)(\"readonly\", ctx.readonly && !ctx._isNativeSelect || null)(\"aria-invalid\", ctx.empty && ctx.required ? null : ctx.errorState)(\"aria-required\", ctx.required)(\"id\", ctx.id);\n i0.ɵɵclassProp(\"mat-input-server\", ctx._isServer)(\"mat-mdc-form-field-textarea-control\", ctx._isInFormField && ctx._isTextarea)(\"mat-mdc-form-field-input-control\", ctx._isInFormField)(\"mdc-text-field__input\", ctx._isInFormField)(\"mat-mdc-native-select-inline\", ctx._isInlineSelect());\n }\n },\n inputs: {\n disabled: \"disabled\",\n id: \"id\",\n placeholder: \"placeholder\",\n name: \"name\",\n required: \"required\",\n type: \"type\",\n errorStateMatcher: \"errorStateMatcher\",\n userAriaDescribedBy: [0, \"aria-describedby\", \"userAriaDescribedBy\"],\n value: \"value\",\n readonly: \"readonly\"\n },\n exportAs: [\"matInput\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MatFormFieldControl,\n useExisting: MatInput\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return MatInput;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatInputModule = /*#__PURE__*/(() => {\n class MatInputModule {\n static {\n this.ɵfac = function MatInputModule_Factory(ɵt) {\n return new (ɵt || MatInputModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatInputModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, MatFormFieldModule, MatFormFieldModule, TextFieldModule, MatCommonModule]\n });\n }\n }\n return MatInputModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, getMatInputUnsupportedTypeError };\n","import { Overlay, CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';\nimport { NgClass, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, booleanAttribute, numberAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Self, Attribute, ContentChildren, ContentChild, Input, ViewChild, Output, Directive, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { _countGroupLabelsBeforeOption, _getOptionScrollPosition, _ErrorStateTracker, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nconst _c0 = [\"trigger\"];\nconst _c1 = [\"panel\"];\nconst _c2 = [[[\"mat-select-trigger\"]], \"*\"];\nconst _c3 = [\"mat-select-trigger\", \"*\"];\nfunction MatSelect_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.placeholder);\n }\n}\nfunction MatSelect_Conditional_5_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0);\n }\n}\nfunction MatSelect_Conditional_5_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 11);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r1.triggerValue);\n }\n}\nfunction MatSelect_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 5);\n i0.ɵɵtemplate(1, MatSelect_Conditional_5_Conditional_1_Template, 1, 0)(2, MatSelect_Conditional_5_Conditional_2_Template, 2, 1, \"span\", 11);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx_r1.customTrigger ? 1 : 2);\n }\n}\nfunction MatSelect_ng_template_10_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 12, 1);\n i0.ɵɵlistener(\"@transformPanel.done\", function MatSelect_ng_template_10_Template_div_animation_transformPanel_done_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._panelDoneAnimatingStream.next($event.toState));\n })(\"keydown\", function MatSelect_ng_template_10_Template_div_keydown_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._handleKeydown($event));\n });\n i0.ɵɵprojection(2, 1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵclassMapInterpolate1(\"mat-mdc-select-panel mdc-menu-surface mdc-menu-surface--open \", ctx_r1._getPanelTheme(), \"\");\n i0.ɵɵproperty(\"ngClass\", ctx_r1.panelClass)(\"@transformPanel\", \"showing\");\n i0.ɵɵattribute(\"id\", ctx_r1.id + \"-panel\")(\"aria-multiselectable\", ctx_r1.multiple)(\"aria-label\", ctx_r1.ariaLabel || null)(\"aria-labelledby\", ctx_r1._getPanelAriaLabelledby());\n }\n}\nexport { MatOptgroup, MatOption } from '@angular/material/core';\nimport * as i6 from '@angular/material/form-field';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nexport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/cdk/a11y';\nimport { removeAriaReferencedId, addAriaReferencedId, ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport * as i4 from '@angular/forms';\nimport { Validators } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, filter, map, distinctUntilChanged, takeUntil, take } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nconst matSelectAnimations = {\n /**\n * This animation ensures the select's overlay panel animation (transformPanel) is called when\n * closing the select.\n * This is needed due to https://github.com/angular/angular/issues/23302\n */\n transformPanelWrap: /*#__PURE__*/trigger('transformPanelWrap', [/*#__PURE__*/transition('* => void', /*#__PURE__*/query('@transformPanel', [/*#__PURE__*/animateChild()], {\n optional: true\n }))]),\n /** This animation transforms the select's overlay panel on and off the page. */\n transformPanel: /*#__PURE__*/trigger('transformPanel', [/*#__PURE__*/state('void', /*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n })), /*#__PURE__*/transition('void => showing', /*#__PURE__*/animate('120ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/style({\n opacity: 1,\n transform: 'scale(1, 1)'\n }))), /*#__PURE__*/transition('* => void', /*#__PURE__*/animate('100ms linear', /*#__PURE__*/style({\n opacity: 0\n })))])\n};\n\n// Note that these have been copied over verbatim from\n// `material/select` so that we don't have to expose them publicly.\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n return Error('`compareWith` must be a function.');\n}\nlet nextUniqueId = 0;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-select-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n }\n});\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = /*#__PURE__*/new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY\n};\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = /*#__PURE__*/new InjectionToken('MatSelectTrigger');\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n constructor( /** Reference to the select that emitted the change event. */\n source, /** Current value of the select that emitted the event. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\nlet MatSelect = /*#__PURE__*/(() => {\n class MatSelect {\n /** Scrolls a particular option into the view. */\n _scrollOptionIntoView(index) {\n const option = this.options.toArray()[index];\n if (option) {\n const panel = this.panel.nativeElement;\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const element = option._getHostElement();\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n panel.scrollTop = 0;\n } else {\n panel.scrollTop = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, panel.scrollTop, panel.offsetHeight);\n }\n }\n }\n /** Called when the panel has been opened and the overlay has settled on its final position. */\n _positioningSettled() {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n /** Creates a change event object that should be emitted by the select. */\n _getChangeEvent(value) {\n return new MatSelectChange(this, value);\n }\n /** Whether the select is focused. */\n get focused() {\n return this._focused || this._panelOpen;\n }\n /** Whether checkmark indicator for single-selection options is hidden. */\n get hideSingleSelectionIndicator() {\n return this._hideSingleSelectionIndicator;\n }\n set hideSingleSelectionIndicator(value) {\n this._hideSingleSelectionIndicator = value;\n this._syncParentProperties();\n }\n /** Placeholder to be shown if no value has been selected. */\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether the component is required. */\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value) {\n this._required = value;\n this.stateChanges.next();\n }\n /** Whether the user should be allowed to select multiple options. */\n get multiple() {\n return this._multiple;\n }\n set multiple(value) {\n if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectDynamicMultipleError();\n }\n this._multiple = value;\n }\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() {\n return this._compareWith;\n }\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /** Value of the select control. */\n get value() {\n return this._value;\n }\n set value(newValue) {\n const hasAssigned = this._assignValue(newValue);\n if (hasAssigned) {\n this._onChange(newValue);\n }\n }\n /** Object used to control when error messages are shown. */\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value) {\n this._errorStateTracker.matcher = value;\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 this.stateChanges.next();\n }\n /** Whether the select is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value) {\n this._errorStateTracker.errorState = value;\n }\n constructor(_viewportRuler, _changeDetectorRef,\n /**\n * @deprecated Unused param, will be removed.\n * @breaking-change 19.0.0\n */\n _unusedNgZone, defaultErrorStateMatcher, _elementRef, _dir, parentForm, parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n this._viewportRuler = _viewportRuler;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dir = _dir;\n this._parentFormField = _parentFormField;\n this.ngControl = ngControl;\n this._liveAnnouncer = _liveAnnouncer;\n this._defaultOptions = _defaultOptions;\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n this._positions = [{\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n }, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n }, {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above'\n }, {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass: 'mat-mdc-select-panel-above'\n }];\n /** Whether or not the overlay panel is open. */\n this._panelOpen = false;\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n this._compareWith = (o1, o2) => o1 === o2;\n /** Unique id for this input. */\n this._uid = `mat-select-${nextUniqueId++}`;\n /** Current `aria-labelledby` value for the select trigger. */\n this._triggerAriaLabelledBy = null;\n /** Emits whenever the component is destroyed. */\n this._destroy = new Subject();\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n this.stateChanges = new Subject();\n /**\n * Disable the automatic labeling to avoid issues like #27241.\n * @docs-private\n */\n this.disableAutomaticLabeling = true;\n /** `View -> model callback called when value changes` */\n this._onChange = () => {};\n /** `View -> model callback called when select has been touched` */\n this._onTouched = () => {};\n /** ID for the DOM node containing the select's value. */\n this._valueId = `mat-select-value-${nextUniqueId++}`;\n /** Emits when the panel element is finished transforming in. */\n this._panelDoneAnimatingStream = new Subject();\n this._overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';\n this._focused = false;\n /** A name for this control that can be used by `mat-form-field`. */\n this.controlType = 'mat-select';\n /** Whether the select is disabled. */\n this.disabled = false;\n /** Whether ripples in the select are disabled. */\n this.disableRipple = false;\n /** Tab index of the select. */\n this.tabIndex = 0;\n this._hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n this._multiple = false;\n /** Whether to center the active option over the trigger. */\n this.disableOptionCentering = this._defaultOptions?.disableOptionCentering ?? false;\n /** Aria label of the select. */\n this.ariaLabel = '';\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n this.panelWidth = this._defaultOptions && typeof this._defaultOptions.panelWidth !== 'undefined' ? this._defaultOptions.panelWidth : 'auto';\n this._initialized = new Subject();\n /** Combined stream of all of the child options' change events. */\n this.optionSelectionChanges = defer(() => {\n const options = this.options;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n return this._initialized.pipe(switchMap(() => this.optionSelectionChanges));\n });\n /** Event emitted when the select panel has been toggled. */\n this.openedChange = new EventEmitter();\n /** Event emitted when the select has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => {}));\n /** Event emitted when the select has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => {}));\n /** Event emitted when the selected value has been changed by the user. */\n this.selectionChange = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n /**\n * Track which modal we have modified the `aria-owns` attribute of. When the combobox trigger is\n * inside an aria-modal, we apply aria-owns to the parent modal with the `id` of the options\n * panel. Track the modal we have changed so we can undo the changes on destroy.\n */\n this._trackedModal = null;\n // `skipPredicate` determines if key manager should avoid putting a given option in the tab\n // order. Allow disabled list items to receive focus via keyboard to align with WAI ARIA\n // recommendation.\n //\n // Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n // makes a few exceptions for compound widgets.\n //\n // From [Developing a Keyboard Interface](\n // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n // \"For the following composite widget elements, keep them focusable when disabled: Options in a\n // Listbox...\"\n //\n // The user can focus disabled options using the keyboard, but the user cannot click disabled\n // options.\n this._skipPredicate = option => {\n if (this.panelOpen) {\n // Support keyboard focusing disabled options in an ARIA listbox.\n return false;\n }\n // When the panel is closed, skip over disabled options. Support options via the UP/DOWN arrow\n // keys on a closed select. ARIA listbox interaction pattern is less relevant when the panel is\n // closed.\n return option.disabled;\n };\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n // Note that we only want to set this when the defaults pass it in, otherwise it should\n // stay as `undefined` so that it falls back to the default in the key manager.\n if (_defaultOptions?.typeaheadDebounceInterval != null) {\n this.typeaheadDebounceInterval = _defaultOptions.typeaheadDebounceInterval;\n }\n this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, ngControl, parentFormGroup, parentForm, this.stateChanges);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = parseInt(tabIndex) || 0;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple);\n this.stateChanges.next();\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream.pipe(distinctUntilChanged(), takeUntil(this._destroy)).subscribe(() => this._panelDoneAnimating(this.panelOpen));\n this._viewportRuler.change().pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this.panelOpen) {\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._changeDetectorRef.detectChanges();\n }\n });\n }\n ngAfterContentInit() {\n this._initialized.next();\n this._initialized.complete();\n this._initKeyManager();\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n ngDoCheck() {\n const newAriaLabelledby = this._getTriggerAriaLabelledby();\n const ngControl = this.ngControl;\n // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n // is computed as a result of a content query which can cause this binding to trigger a\n // \"changed after checked\" error.\n if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n const element = this._elementRef.nativeElement;\n this._triggerAriaLabelledBy = newAriaLabelledby;\n if (newAriaLabelledby) {\n element.setAttribute('aria-labelledby', newAriaLabelledby);\n } else {\n element.removeAttribute('aria-labelledby');\n }\n }\n if (ngControl) {\n // The disabled state might go out of sync if the form group is swapped out. See #17860.\n if (this._previousControl !== ngControl.control) {\n if (this._previousControl !== undefined && ngControl.disabled !== null && ngControl.disabled !== this.disabled) {\n this.disabled = ngControl.disabled;\n }\n this._previousControl = ngControl.control;\n }\n this.updateErrorState();\n }\n }\n ngOnChanges(changes) {\n // Updating the disabled state is handled by the input, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled'] || changes['userAriaDescribedBy']) {\n this.stateChanges.next();\n }\n if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n this._keyManager.withTypeAhead(this.typeaheadDebounceInterval);\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n this._clearFromModal();\n }\n /** Toggles the overlay panel open or closed. */\n toggle() {\n this.panelOpen ? this.close() : this.open();\n }\n /** Opens the overlay panel. */\n open() {\n if (!this._canOpen()) {\n return;\n }\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this._parentFormField) {\n this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n }\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._applyModalPanelOwnership();\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n // Required for the MDC form field to pick up when the overlay has been opened.\n this.stateChanges.next();\n }\n /**\n * If the autocomplete trigger is inside of an `aria-modal` element, connect\n * that modal to the options panel with `aria-owns`.\n *\n * For some browser + screen reader combinations, when navigation is inside\n * of an `aria-modal` element, the screen reader treats everything outside\n * of that modal as hidden or invisible.\n *\n * This causes a problem when the combobox trigger is _inside_ of a modal, because the\n * options panel is rendered _outside_ of that modal, preventing screen reader navigation\n * from reaching the panel.\n *\n * We can work around this issue by applying `aria-owns` to the modal with the `id` of\n * the options panel. This effectively communicates to assistive technology that the\n * options panel is part of the same interaction as the modal.\n *\n * At time of this writing, this issue is present in VoiceOver.\n * See https://github.com/angular/components/issues/20694\n */\n _applyModalPanelOwnership() {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with\n // the `LiveAnnouncer` and any other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const modal = this._elementRef.nativeElement.closest('body > .cdk-overlay-container [aria-modal=\"true\"]');\n if (!modal) {\n // Most commonly, the autocomplete trigger is not inside a modal.\n return;\n }\n const panelId = `${this.id}-panel`;\n if (this._trackedModal) {\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n }\n addAriaReferencedId(modal, 'aria-owns', panelId);\n this._trackedModal = modal;\n }\n /** Clears the reference to the listbox overlay element from the modal it was added to. */\n _clearFromModal() {\n if (!this._trackedModal) {\n // Most commonly, the autocomplete trigger is not used inside a modal.\n return;\n }\n const panelId = `${this.id}-panel`;\n removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);\n this._trackedModal = null;\n }\n /** Closes the overlay panel and focuses the host element. */\n close() {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n // Required for the MDC form field to pick up when the overlay has been closed.\n this.stateChanges.next();\n }\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this._assignValue(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 * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /** Whether or not the overlay panel is open. */\n get panelOpen() {\n return this._panelOpen;\n }\n /** The currently selected option. */\n get selected() {\n return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];\n }\n /** The value displayed in the trigger. */\n get triggerValue() {\n if (this.empty) {\n return '';\n }\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n return this._selectionModel.selected[0].viewValue;\n }\n /** Refreshes the error state of the select. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n /** Whether the element is in RTL mode. */\n _isRtl() {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n /** Handles all keydown events on the select. */\n _handleKeydown(event) {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n /** Handles keyboard events while the select is closed. */\n _handleClosedKeydown(event) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native \n if (!manager.isTyping() && isOpenKey && !hasModifierKey(event) || (this.multiple || event.altKey) && isArrowKey) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiple) {\n const previouslySelectedOption = this.selected;\n manager.onKeydown(event);\n const selectedOption = this.selected;\n // Since the value has changed, we need to announce it ourselves.\n if (selectedOption && previouslySelectedOption !== selectedOption) {\n // We set a duration on the live announcement, because we want the live element to be\n // cleared after a while so that users can't navigate to it using the arrow keys.\n this._liveAnnouncer.announce(selectedOption.viewValue, 10000);\n }\n }\n }\n /** Handles keyboard events when the selected is open. */\n _handleOpenKeydown(event) {\n const manager = this._keyManager;\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const isTyping = manager.isTyping();\n if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native \n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && manager.activeItem && !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n this._keyManager?.cancelTypeahead();\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n _onAttached() {\n this._overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n /** Returns the theme to be used on the panel. */\n _getPanelTheme() {\n return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n }\n /** Whether the select has a value. */\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl) {\n this._value = this.ngControl.value;\n }\n this._setSelectionByValue(this._value);\n this.stateChanges.next();\n });\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 this.options.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonArrayValueError();\n }\n value.forEach(currentValue => this._selectOptionByValue(currentValue));\n this._sortValues();\n } else {\n const correspondingOption = this._selectOptionByValue(value);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n } else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n _selectOptionByValue(value) {\n const correspondingOption = this.options.find(option => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch (error) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n return correspondingOption;\n }\n /** Assigns a specific value to the select. Returns whether the value has changed. */\n _assignValue(newValue) {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this._value || this._multiple && Array.isArray(newValue)) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n this._value = newValue;\n return true;\n }\n return false;\n }\n /** Gets how wide the overlay panel should be. */\n _getOverlayWidth(preferredOrigin) {\n if (this.panelWidth === 'auto') {\n const refToMeasure = preferredOrigin instanceof CdkOverlayOrigin ? preferredOrigin.elementRef : preferredOrigin || this._elementRef;\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n return this.panelWidth === null ? '' : this.panelWidth;\n }\n /** Syncs the parent state with the individual options. */\n _syncParentProperties() {\n if (this.options) {\n for (const option of this.options) {\n option._changeDetectorRef.markForCheck();\n }\n }\n }\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager(this.options).withTypeAhead(this.typeaheadDebounceInterval).withVerticalOrientation().withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr').withHomeAndEnd().withPageUpDown().withAllowedModifierKeys(['shiftKey']).skipPredicate(this._skipPredicate);\n this._keyManager.tabOut.subscribe(() => {\n if (this.panelOpen) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n this._keyManager.change.subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n } else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n /** Drops current option subscriptions and IDs and resets from scratch. */\n _resetOptions() {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges)).pipe(takeUntil(changedOrDestroyed)).subscribe(() => {\n // `_stateChanges` can fire as a result of a change in the label's DOM value which may\n // be the result of an expression changing. We have to use `detectChanges` in order\n // to avoid \"changed after checked\" errors (see #14793).\n this._changeDetectorRef.detectChanges();\n this.stateChanges.next();\n });\n }\n /** Invoked when an option is clicked. */\n _onSelect(option, isUserInput) {\n const wasSelected = this._selectionModel.isSelected(option);\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n } else {\n if (wasSelected !== option.selected) {\n option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n if (this.multiple) {\n this._sortValues();\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n this.stateChanges.next();\n }\n /** Sorts the selected values in the selected based on their order in the panel. */\n _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n this._selectionModel.sort((a, b) => {\n return this.sortComparator ? this.sortComparator(a, b, options) : options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit;\n if (this.multiple) {\n valueToEmit = this.selected.map(option => option.value);\n } else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first *enabled* option.\n */\n _highlightCorrectOption() {\n if (this._keyManager) {\n if (this.empty) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < this.options.length; index++) {\n const option = this.options.get(index);\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n this._keyManager.setActiveItem(firstEnabledOptionIndex);\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n /** Whether the panel is allowed to open. */\n _canOpen() {\n return !this._panelOpen && !this.disabled && this.options?.length > 0;\n }\n /** Focuses the select element. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Gets the aria-labelledby for the select panel. */\n _getPanelAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant() {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n return null;\n }\n /** Gets the aria-labelledby of the select component trigger. */\n _getTriggerAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._parentFormField?.getLabelId();\n let value = (labelId ? labelId + ' ' : '') + this._valueId;\n if (this.ariaLabelledby) {\n value += ' ' + this.ariaLabelledby;\n }\n return value;\n }\n /** Called when the overlay panel is done animating. */\n _panelDoneAnimating(isOpen) {\n this.openedChange.emit(isOpen);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n if (ids.length) {\n this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n } else {\n this._elementRef.nativeElement.removeAttribute('aria-describedby');\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n this.open();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n // Since the panel doesn't overlap the trigger, we\n // want the label to only float when there's a value.\n return this.panelOpen || !this.empty || this.focused && !!this.placeholder;\n }\n static {\n this.ɵfac = function MatSelect_Factory(ɵt) {\n return new (ɵt || MatSelect)(i0.ɵɵdirectiveInject(i1.ViewportRuler), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i2.ErrorStateMatcher), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i3.Directionality, 8), i0.ɵɵdirectiveInject(i4.NgForm, 8), i0.ɵɵdirectiveInject(i4.FormGroupDirective, 8), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8), i0.ɵɵdirectiveInject(i4.NgControl, 10), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(MAT_SELECT_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(i5.LiveAnnouncer), i0.ɵɵdirectiveInject(MAT_SELECT_CONFIG, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSelect,\n selectors: [[\"mat-select\"]],\n contentQueries: function MatSelect_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MAT_SELECT_TRIGGER, 5);\n i0.ɵɵcontentQuery(dirIndex, MatOption, 5);\n i0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customTrigger = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.options = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionGroups = _t);\n }\n },\n viewQuery: function MatSelect_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n i0.ɵɵviewQuery(_c1, 5);\n i0.ɵɵviewQuery(CdkConnectedOverlay, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.trigger = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panel = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._overlayDir = _t.first);\n }\n },\n hostAttrs: [\"role\", \"combobox\", \"aria-autocomplete\", \"none\", \"aria-haspopup\", \"listbox\", 1, \"mat-mdc-select\"],\n hostVars: 19,\n hostBindings: function MatSelect_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"keydown\", function MatSelect_keydown_HostBindingHandler($event) {\n return ctx._handleKeydown($event);\n })(\"focus\", function MatSelect_focus_HostBindingHandler() {\n return ctx._onFocus();\n })(\"blur\", function MatSelect_blur_HostBindingHandler() {\n return ctx._onBlur();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx.id)(\"tabindex\", ctx.disabled ? -1 : ctx.tabIndex)(\"aria-controls\", ctx.panelOpen ? ctx.id + \"-panel\" : null)(\"aria-expanded\", ctx.panelOpen)(\"aria-label\", ctx.ariaLabel || null)(\"aria-required\", ctx.required.toString())(\"aria-disabled\", ctx.disabled.toString())(\"aria-invalid\", ctx.errorState)(\"aria-activedescendant\", ctx._getAriaActiveDescendant());\n i0.ɵɵclassProp(\"mat-mdc-select-disabled\", ctx.disabled)(\"mat-mdc-select-invalid\", ctx.errorState)(\"mat-mdc-select-required\", ctx.required)(\"mat-mdc-select-empty\", ctx.empty)(\"mat-mdc-select-multiple\", ctx.multiple);\n }\n },\n inputs: {\n userAriaDescribedBy: [0, \"aria-describedby\", \"userAriaDescribedBy\"],\n panelClass: \"panelClass\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n tabIndex: [2, \"tabIndex\", \"tabIndex\", value => value == null ? 0 : numberAttribute(value)],\n hideSingleSelectionIndicator: [2, \"hideSingleSelectionIndicator\", \"hideSingleSelectionIndicator\", booleanAttribute],\n placeholder: \"placeholder\",\n required: [2, \"required\", \"required\", booleanAttribute],\n multiple: [2, \"multiple\", \"multiple\", booleanAttribute],\n disableOptionCentering: [2, \"disableOptionCentering\", \"disableOptionCentering\", booleanAttribute],\n compareWith: \"compareWith\",\n value: \"value\",\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n errorStateMatcher: \"errorStateMatcher\",\n typeaheadDebounceInterval: [2, \"typeaheadDebounceInterval\", \"typeaheadDebounceInterval\", numberAttribute],\n sortComparator: \"sortComparator\",\n id: \"id\",\n panelWidth: \"panelWidth\"\n },\n outputs: {\n openedChange: \"openedChange\",\n _openedStream: \"opened\",\n _closedStream: \"closed\",\n selectionChange: \"selectionChange\",\n valueChange: \"valueChange\"\n },\n exportAs: [\"matSelect\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MatFormFieldControl,\n useExisting: MatSelect\n }, {\n provide: MAT_OPTION_PARENT_COMPONENT,\n useExisting: MatSelect\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 11,\n vars: 8,\n consts: [[\"fallbackOverlayOrigin\", \"cdkOverlayOrigin\", \"trigger\", \"\"], [\"panel\", \"\"], [\"cdk-overlay-origin\", \"\", 1, \"mat-mdc-select-trigger\", 3, \"click\"], [1, \"mat-mdc-select-value\"], [1, \"mat-mdc-select-placeholder\", \"mat-mdc-select-min-line\"], [1, \"mat-mdc-select-value-text\"], [1, \"mat-mdc-select-arrow-wrapper\"], [1, \"mat-mdc-select-arrow\"], [\"viewBox\", \"0 0 24 24\", \"width\", \"24px\", \"height\", \"24px\", \"focusable\", \"false\", \"aria-hidden\", \"true\"], [\"d\", \"M7 10l5 5 5-5z\"], [\"cdk-connected-overlay\", \"\", \"cdkConnectedOverlayLockPosition\", \"\", \"cdkConnectedOverlayHasBackdrop\", \"\", \"cdkConnectedOverlayBackdropClass\", \"cdk-overlay-transparent-backdrop\", 3, \"backdropClick\", \"attach\", \"detach\", \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayWidth\"], [1, \"mat-mdc-select-min-line\"], [\"role\", \"listbox\", \"tabindex\", \"-1\", 3, \"keydown\", \"ngClass\"]],\n template: function MatSelect_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c2);\n i0.ɵɵelementStart(0, \"div\", 2, 0);\n i0.ɵɵlistener(\"click\", function MatSelect_Template_div_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.open());\n });\n i0.ɵɵelementStart(3, \"div\", 3);\n i0.ɵɵtemplate(4, MatSelect_Conditional_4_Template, 2, 1, \"span\", 4)(5, MatSelect_Conditional_5_Template, 3, 1, \"span\", 5);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 6)(7, \"div\", 7);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(8, \"svg\", 8);\n i0.ɵɵelement(9, \"path\", 9);\n i0.ɵɵelementEnd()()()();\n i0.ɵɵtemplate(10, MatSelect_ng_template_10_Template, 3, 9, \"ng-template\", 10);\n i0.ɵɵlistener(\"backdropClick\", function MatSelect_Template_ng_template_backdropClick_10_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.close());\n })(\"attach\", function MatSelect_Template_ng_template_attach_10_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onAttached());\n })(\"detach\", function MatSelect_Template_ng_template_detach_10_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.close());\n });\n }\n if (rf & 2) {\n const fallbackOverlayOrigin_r4 = i0.ɵɵreference(1);\n i0.ɵɵadvance(3);\n i0.ɵɵattribute(\"id\", ctx._valueId);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.empty ? 4 : 5);\n i0.ɵɵadvance(6);\n i0.ɵɵproperty(\"cdkConnectedOverlayPanelClass\", ctx._overlayPanelClass)(\"cdkConnectedOverlayScrollStrategy\", ctx._scrollStrategy)(\"cdkConnectedOverlayOrigin\", ctx._preferredOverlayOrigin || fallbackOverlayOrigin_r4)(\"cdkConnectedOverlayOpen\", ctx.panelOpen)(\"cdkConnectedOverlayPositions\", ctx._positions)(\"cdkConnectedOverlayWidth\", ctx._overlayWidth);\n }\n },\n dependencies: [CdkOverlayOrigin, CdkConnectedOverlay, NgClass],\n styles: [\".mat-mdc-select{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color);font-family:var(--mat-select-trigger-text-font);line-height:var(--mat-select-trigger-text-line-height);font-size:var(--mat-select-trigger-text-size);font-weight:var(--mat-select-trigger-text-weight);letter-spacing:var(--mat-select-trigger-text-tracking)}div.mat-mdc-select-panel{box-shadow:var(--mat-select-container-elevation-shadow)}.mat-mdc-select-disabled{color:var(--mat-select-disabled-trigger-text-color)}.mat-mdc-select-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}.mat-mdc-select-disabled .mat-mdc-select-trigger{-webkit-user-select:none;user-select:none;cursor:default}.mat-mdc-select-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-mdc-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-mdc-select-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}.mat-form-field-appearance-fill .mdc-text-field--no-label .mat-mdc-select-arrow-wrapper{transform:none}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-invalid .mat-mdc-select-arrow,.mat-form-field-invalid:not(.mat-form-field-disabled) .mat-mdc-form-field-infix::after{color:var(--mat-select-invalid-arrow-color)}.mat-mdc-select-arrow{width:10px;height:5px;position:relative;color:var(--mat-select-enabled-arrow-color)}.mat-mdc-form-field.mat-focused .mat-mdc-select-arrow{color:var(--mat-select-focused-arrow-color)}.mat-mdc-form-field .mat-mdc-select.mat-mdc-select-disabled .mat-mdc-select-arrow{color:var(--mat-select-disabled-arrow-color)}.mat-mdc-select-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:CanvasText}.mat-mdc-select-disabled .cdk-high-contrast-active .mat-mdc-select-arrow svg{fill:GrayText}div.mat-mdc-select-panel{width:100%;max-height:275px;outline:0;overflow:auto;padding:8px 0;border-radius:4px;box-sizing:border-box;position:static;background-color:var(--mat-select-panel-background-color)}.cdk-high-contrast-active div.mat-mdc-select-panel{outline:solid 1px}.cdk-overlay-pane:not(.mat-mdc-select-panel-above) div.mat-mdc-select-panel{border-top-left-radius:0;border-top-right-radius:0;transform-origin:top center}.mat-mdc-select-panel-above div.mat-mdc-select-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;transform-origin:bottom center}div.mat-mdc-select-panel .mat-mdc-option{--mdc-list-list-item-container-color: var(--mat-select-panel-background-color)}.mat-mdc-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);color:var(--mat-select-placeholder-text-color)}._mat-animation-noopable .mat-mdc-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-mdc-select-placeholder{color:rgba(0,0,0,0);-webkit-text-fill-color:rgba(0,0,0,0);transition:none;display:block}.mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mat-mdc-floating-label{max-width:calc(100% - 18px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-fill .mdc-floating-label--float-above{max-width:calc(100%/0.75 - 24px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mat-mdc-form-field-type-mat-select.mat-form-field-appearance-outline .mdc-text-field--label-floating .mdc-notched-outline__notch{max-width:calc(100% - 24px)}.mat-mdc-select-min-line:empty::before{content:\\\" \\\";white-space:pre;width:1px;display:inline-block;visibility:hidden}.mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper{transform:var(--mat-select-arrow-transform)}\"],\n encapsulation: 2,\n data: {\n animation: [matSelectAnimations.transformPanel]\n },\n changeDetection: 0\n });\n }\n }\n return MatSelect;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nlet MatSelectTrigger = /*#__PURE__*/(() => {\n class MatSelectTrigger {\n static {\n this.ɵfac = function MatSelectTrigger_Factory(ɵt) {\n return new (ɵt || MatSelectTrigger)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSelectTrigger,\n selectors: [[\"mat-select-trigger\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_SELECT_TRIGGER,\n useExisting: MatSelectTrigger\n }])]\n });\n }\n }\n return MatSelectTrigger;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatSelectModule = /*#__PURE__*/(() => {\n class MatSelectModule {\n static {\n this.ɵfac = function MatSelectModule_Factory(ɵt) {\n return new (ɵt || MatSelectModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatSelectModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER],\n imports: [CommonModule, OverlayModule, MatOptionModule, MatCommonModule, CdkScrollableModule, MatFormFieldModule, MatOptionModule, MatCommonModule]\n });\n }\n }\n return MatSelectModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, matSelectAnimations };\n","import { CdkMonitorFocus, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';\nimport * as i4 from '@angular/cdk/overlay';\nimport { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { ComponentPortal, CdkPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { NgClass, DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, inject, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, Inject, ViewChild, forwardRef, ChangeDetectorRef, booleanAttribute, Directive, signal, Attribute, ContentChild, Self, TemplateRef, NgModule } from '@angular/core';\nimport { MatButton, MatIconButton, MatButtonModule } from '@angular/material/button';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i1 from '@angular/material/core';\nimport { DateAdapter, MAT_DATE_FORMATS, _ErrorStateTracker, MatCommonModule } from '@angular/material/core';\nimport { Subject, Subscription, merge, of } from 'rxjs';\nimport { ESCAPE, hasModifierKey, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';\nimport * as i2 from '@angular/cdk/bidi';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { normalizePassiveListenerOptions, Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { startWith, take, filter } from 'rxjs/operators';\nimport { coerceStringArray } from '@angular/cdk/coercion';\nimport { trigger, transition, animate, keyframes, style, state } from '@angular/animations';\nimport * as i2$1 from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, Validators, NgControl } from '@angular/forms';\nimport { MAT_FORM_FIELD, MatFormFieldControl } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\n\n/** @docs-private */\nconst _c0 = [\"mat-calendar-body\", \"\"];\nfunction _forTrack0($index, $item) {\n return this._trackRow($item);\n}\nconst _forTrack1 = ($index, $item) => $item.id;\nfunction MatCalendarBody_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"tr\", 0)(1, \"td\", 3);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"padding-top\", ctx_r0._cellPadding)(\"padding-bottom\", ctx_r0._cellPadding);\n i0.ɵɵattribute(\"colspan\", ctx_r0.numCols);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0.label, \" \");\n }\n}\nfunction MatCalendarBody_For_2_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"td\", 3);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext(2);\n i0.ɵɵstyleProp(\"padding-top\", ctx_r0._cellPadding)(\"padding-bottom\", ctx_r0._cellPadding);\n i0.ɵɵattribute(\"colspan\", ctx_r0._firstRowOffset);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx_r0._firstRowOffset >= ctx_r0.labelMinRequiredCells ? ctx_r0.label : \"\", \" \");\n }\n}\nfunction MatCalendarBody_For_2_For_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r2 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"td\", 6)(1, \"button\", 7);\n i0.ɵɵlistener(\"click\", function MatCalendarBody_For_2_For_3_Template_button_click_1_listener($event) {\n const item_r3 = i0.ɵɵrestoreView(_r2).$implicit;\n const ctx_r0 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r0._cellClicked(item_r3, $event));\n })(\"focus\", function MatCalendarBody_For_2_For_3_Template_button_focus_1_listener($event) {\n const item_r3 = i0.ɵɵrestoreView(_r2).$implicit;\n const ctx_r0 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r0._emitActiveDateChange(item_r3, $event));\n });\n i0.ɵɵelementStart(2, \"span\", 8);\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(4, \"span\", 9);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const item_r3 = ctx.$implicit;\n const ɵ$index_14_r4 = ctx.$index;\n const ɵ$index_7_r5 = i0.ɵɵnextContext().$index;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵstyleProp(\"width\", ctx_r0._cellWidth)(\"padding-top\", ctx_r0._cellPadding)(\"padding-bottom\", ctx_r0._cellPadding);\n i0.ɵɵattribute(\"data-mat-row\", ɵ$index_7_r5)(\"data-mat-col\", ɵ$index_14_r4);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-calendar-body-disabled\", !item_r3.enabled)(\"mat-calendar-body-active\", ctx_r0._isActiveCell(ɵ$index_7_r5, ɵ$index_14_r4))(\"mat-calendar-body-range-start\", ctx_r0._isRangeStart(item_r3.compareValue))(\"mat-calendar-body-range-end\", ctx_r0._isRangeEnd(item_r3.compareValue))(\"mat-calendar-body-in-range\", ctx_r0._isInRange(item_r3.compareValue))(\"mat-calendar-body-comparison-bridge-start\", ctx_r0._isComparisonBridgeStart(item_r3.compareValue, ɵ$index_7_r5, ɵ$index_14_r4))(\"mat-calendar-body-comparison-bridge-end\", ctx_r0._isComparisonBridgeEnd(item_r3.compareValue, ɵ$index_7_r5, ɵ$index_14_r4))(\"mat-calendar-body-comparison-start\", ctx_r0._isComparisonStart(item_r3.compareValue))(\"mat-calendar-body-comparison-end\", ctx_r0._isComparisonEnd(item_r3.compareValue))(\"mat-calendar-body-in-comparison-range\", ctx_r0._isInComparisonRange(item_r3.compareValue))(\"mat-calendar-body-preview-start\", ctx_r0._isPreviewStart(item_r3.compareValue))(\"mat-calendar-body-preview-end\", ctx_r0._isPreviewEnd(item_r3.compareValue))(\"mat-calendar-body-in-preview\", ctx_r0._isInPreview(item_r3.compareValue));\n i0.ɵɵproperty(\"ngClass\", item_r3.cssClasses)(\"tabindex\", ctx_r0._isActiveCell(ɵ$index_7_r5, ɵ$index_14_r4) ? 0 : -1);\n i0.ɵɵattribute(\"aria-label\", item_r3.ariaLabel)(\"aria-disabled\", !item_r3.enabled || null)(\"aria-pressed\", ctx_r0._isSelected(item_r3.compareValue))(\"aria-current\", ctx_r0.todayValue === item_r3.compareValue ? \"date\" : null)(\"aria-describedby\", ctx_r0._getDescribedby(item_r3.compareValue));\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-calendar-body-selected\", ctx_r0._isSelected(item_r3.compareValue))(\"mat-calendar-body-comparison-identical\", ctx_r0._isComparisonIdentical(item_r3.compareValue))(\"mat-calendar-body-today\", ctx_r0.todayValue === item_r3.compareValue);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", item_r3.displayValue, \" \");\n }\n}\nfunction MatCalendarBody_For_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"tr\", 1);\n i0.ɵɵtemplate(1, MatCalendarBody_For_2_Conditional_1_Template, 2, 6, \"td\", 4);\n i0.ɵɵrepeaterCreate(2, MatCalendarBody_For_2_For_3_Template, 5, 48, \"td\", 5, _forTrack1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const row_r6 = ctx.$implicit;\n const ɵ$index_7_r5 = ctx.$index;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵconditional(ɵ$index_7_r5 === 0 && ctx_r0._firstRowOffset ? 1 : -1);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(row_r6);\n }\n}\nfunction MatMonthView_For_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"th\", 2)(1, \"span\", 6);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"span\", 3);\n i0.ɵɵtext(4);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const day_r1 = ctx.$implicit;\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(day_r1.long);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(day_r1.narrow);\n }\n}\nconst _c1 = [\"*\"];\nfunction MatCalendar_ng_template_0_Template(rf, ctx) {}\nfunction MatCalendar_Case_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"mat-month-view\", 4);\n i0.ɵɵtwoWayListener(\"activeDateChange\", function MatCalendar_Case_2_Template_mat_month_view_activeDateChange_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayBindingSet(ctx_r1.activeDate, $event) || (ctx_r1.activeDate = $event);\n return i0.ɵɵresetView($event);\n });\n i0.ɵɵlistener(\"_userSelection\", function MatCalendar_Case_2_Template_mat_month_view__userSelection_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._dateSelected($event));\n })(\"dragStarted\", function MatCalendar_Case_2_Template_mat_month_view_dragStarted_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._dragStarted($event));\n })(\"dragEnded\", function MatCalendar_Case_2_Template_mat_month_view_dragEnded_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._dragEnded($event));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayProperty(\"activeDate\", ctx_r1.activeDate);\n i0.ɵɵproperty(\"selected\", ctx_r1.selected)(\"dateFilter\", ctx_r1.dateFilter)(\"maxDate\", ctx_r1.maxDate)(\"minDate\", ctx_r1.minDate)(\"dateClass\", ctx_r1.dateClass)(\"comparisonStart\", ctx_r1.comparisonStart)(\"comparisonEnd\", ctx_r1.comparisonEnd)(\"startDateAccessibleName\", ctx_r1.startDateAccessibleName)(\"endDateAccessibleName\", ctx_r1.endDateAccessibleName)(\"activeDrag\", ctx_r1._activeDrag);\n }\n}\nfunction MatCalendar_Case_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r3 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"mat-year-view\", 5);\n i0.ɵɵtwoWayListener(\"activeDateChange\", function MatCalendar_Case_3_Template_mat_year_view_activeDateChange_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayBindingSet(ctx_r1.activeDate, $event) || (ctx_r1.activeDate = $event);\n return i0.ɵɵresetView($event);\n });\n i0.ɵɵlistener(\"monthSelected\", function MatCalendar_Case_3_Template_mat_year_view_monthSelected_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._monthSelectedInYearView($event));\n })(\"selectedChange\", function MatCalendar_Case_3_Template_mat_year_view_selectedChange_0_listener($event) {\n i0.ɵɵrestoreView(_r3);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._goToDateInView($event, \"month\"));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayProperty(\"activeDate\", ctx_r1.activeDate);\n i0.ɵɵproperty(\"selected\", ctx_r1.selected)(\"dateFilter\", ctx_r1.dateFilter)(\"maxDate\", ctx_r1.maxDate)(\"minDate\", ctx_r1.minDate)(\"dateClass\", ctx_r1.dateClass);\n }\n}\nfunction MatCalendar_Case_4_Template(rf, ctx) {\n if (rf & 1) {\n const _r4 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"mat-multi-year-view\", 6);\n i0.ɵɵtwoWayListener(\"activeDateChange\", function MatCalendar_Case_4_Template_mat_multi_year_view_activeDateChange_0_listener($event) {\n i0.ɵɵrestoreView(_r4);\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayBindingSet(ctx_r1.activeDate, $event) || (ctx_r1.activeDate = $event);\n return i0.ɵɵresetView($event);\n });\n i0.ɵɵlistener(\"yearSelected\", function MatCalendar_Case_4_Template_mat_multi_year_view_yearSelected_0_listener($event) {\n i0.ɵɵrestoreView(_r4);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._yearSelectedInMultiYearView($event));\n })(\"selectedChange\", function MatCalendar_Case_4_Template_mat_multi_year_view_selectedChange_0_listener($event) {\n i0.ɵɵrestoreView(_r4);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._goToDateInView($event, \"year\"));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵtwoWayProperty(\"activeDate\", ctx_r1.activeDate);\n i0.ɵɵproperty(\"selected\", ctx_r1.selected)(\"dateFilter\", ctx_r1.dateFilter)(\"maxDate\", ctx_r1.maxDate)(\"minDate\", ctx_r1.minDate)(\"dateClass\", ctx_r1.dateClass);\n }\n}\nfunction MatDatepickerContent_ng_template_2_Template(rf, ctx) {}\nconst _c2 = [\"button\"];\nconst _c3 = [[[\"\", \"matDatepickerToggleIcon\", \"\"]]];\nconst _c4 = [\"[matDatepickerToggleIcon]\"];\nfunction MatDatepickerToggle_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(0, \"svg\", 2);\n i0.ɵɵelement(1, \"path\", 3);\n i0.ɵɵelementEnd();\n }\n}\nconst _c5 = [[[\"input\", \"matStartDate\", \"\"]], [[\"input\", \"matEndDate\", \"\"]]];\nconst _c6 = [\"input[matStartDate]\", \"input[matEndDate]\"];\nfunction MatDatepickerActions_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵelementEnd();\n }\n}\nfunction createMissingDateImplError(provider) {\n return Error(`MatDatepicker: No provider found for ${provider}. You must add one of the following ` + `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` + `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`);\n}\n\n/** Datepicker data that requires internationalization. */\nlet MatDatepickerIntl = /*#__PURE__*/(() => {\n class MatDatepickerIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** A label for the calendar popup (used by screen readers). */\n this.calendarLabel = 'Calendar';\n /** A label for the button used to open the calendar popup (used by screen readers). */\n this.openCalendarLabel = 'Open calendar';\n /** Label for the button used to close the calendar popup. */\n this.closeCalendarLabel = 'Close calendar';\n /** A label for the previous month button (used by screen readers). */\n this.prevMonthLabel = 'Previous month';\n /** A label for the next month button (used by screen readers). */\n this.nextMonthLabel = 'Next month';\n /** A label for the previous year button (used by screen readers). */\n this.prevYearLabel = 'Previous year';\n /** A label for the next year button (used by screen readers). */\n this.nextYearLabel = 'Next year';\n /** A label for the previous multi-year button (used by screen readers). */\n this.prevMultiYearLabel = 'Previous 24 years';\n /** A label for the next multi-year button (used by screen readers). */\n this.nextMultiYearLabel = 'Next 24 years';\n /** A label for the 'switch to month view' button (used by screen readers). */\n this.switchToMonthViewLabel = 'Choose date';\n /** A label for the 'switch to year view' button (used by screen readers). */\n this.switchToMultiYearViewLabel = 'Choose month and year';\n /**\n * A label for the first date of a range of dates (used by screen readers).\n * @deprecated Provide your own internationalization string.\n * @breaking-change 17.0.0\n */\n this.startDateLabel = 'Start date';\n /**\n * A label for the last date of a range of dates (used by screen readers).\n * @deprecated Provide your own internationalization string.\n * @breaking-change 17.0.0\n */\n this.endDateLabel = 'End date';\n }\n /** Formats a range of years (used for visuals). */\n formatYearRange(start, end) {\n return `${start} \\u2013 ${end}`;\n }\n /** Formats a label for a range of years (used by screen readers). */\n formatYearRangeLabel(start, end) {\n return `${start} to ${end}`;\n }\n static {\n this.ɵfac = function MatDatepickerIntl_Factory(ɵt) {\n return new (ɵt || MatDatepickerIntl)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatDatepickerIntl,\n factory: MatDatepickerIntl.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatDatepickerIntl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet uniqueIdCounter$1 = 0;\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nclass MatCalendarCell {\n constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {\n this.value = value;\n this.displayValue = displayValue;\n this.ariaLabel = ariaLabel;\n this.enabled = enabled;\n this.cssClasses = cssClasses;\n this.compareValue = compareValue;\n this.rawValue = rawValue;\n this.id = uniqueIdCounter$1++;\n }\n}\nlet calendarBodyId = 1;\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/** Event options that can be used to bind a passive, capturing event. */\nconst passiveCapturingEventOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true,\n capture: true\n});\n/** Event options that can be used to bind a passive, non-capturing event. */\nconst passiveEventOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true\n});\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\nlet MatCalendarBody = /*#__PURE__*/(() => {\n class MatCalendarBody {\n ngAfterViewChecked() {\n if (this._focusActiveCellAfterViewChecked) {\n this._focusActiveCell();\n this._focusActiveCellAfterViewChecked = false;\n }\n }\n constructor(_elementRef, _ngZone) {\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._platform = inject(Platform);\n /**\n * Used to focus the active cell after change detection has run.\n */\n this._focusActiveCellAfterViewChecked = false;\n /** The number of columns in the table. */\n this.numCols = 7;\n /** The cell number of the active cell in the table. */\n this.activeCell = 0;\n /** Whether a range is being selected. */\n this.isRange = false;\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n this.cellAspectRatio = 1;\n /** Start of the preview range. */\n this.previewStart = null;\n /** End of the preview range. */\n this.previewEnd = null;\n /** Emits when a new value is selected. */\n this.selectedValueChange = new EventEmitter();\n /** Emits when the preview has changed as a result of a user action. */\n this.previewChange = new EventEmitter();\n this.activeDateChange = new EventEmitter();\n /** Emits the date at the possible start of a drag event. */\n this.dragStarted = new EventEmitter();\n /** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */\n this.dragEnded = new EventEmitter();\n this._didDragSinceMouseDown = false;\n this._injector = inject(Injector);\n /**\n * Tracking function for rows based on their identity. Ideally we would use some sort of\n * key on the row, but that would require a breaking change for the `rows` input. We don't\n * use the built-in identity tracking, because it logs warnings.\n */\n this._trackRow = row => row;\n /**\n * Event handler for when the user enters an element\n * inside the calendar body (e.g. by hovering in or focus).\n */\n this._enterHandler = event => {\n if (this._skipNextFocus && event.type === 'focus') {\n this._skipNextFocus = false;\n return;\n }\n // We only need to hit the zone when we're selecting a range.\n if (event.target && this.isRange) {\n const cell = this._getCellFromElement(event.target);\n if (cell) {\n this._ngZone.run(() => this.previewChange.emit({\n value: cell.enabled ? cell : null,\n event\n }));\n }\n }\n };\n this._touchmoveHandler = event => {\n if (!this.isRange) return;\n const target = getActualTouchTarget(event);\n const cell = target ? this._getCellFromElement(target) : null;\n if (target !== event.target) {\n this._didDragSinceMouseDown = true;\n }\n // If the initial target of the touch is a date cell, prevent default so\n // that the move is not handled as a scroll.\n if (getCellElement(event.target)) {\n event.preventDefault();\n }\n this._ngZone.run(() => this.previewChange.emit({\n value: cell?.enabled ? cell : null,\n event\n }));\n };\n /**\n * Event handler for when the user's pointer leaves an element\n * inside the calendar body (e.g. by hovering out or blurring).\n */\n this._leaveHandler = event => {\n // We only need to hit the zone when we're selecting a range.\n if (this.previewEnd !== null && this.isRange) {\n if (event.type !== 'blur') {\n this._didDragSinceMouseDown = true;\n }\n // Only reset the preview end value when leaving cells. This looks better, because\n // we have a gap between the cells and the rows and we don't want to remove the\n // range just for it to show up again when the user moves a few pixels to the side.\n if (event.target && this._getCellFromElement(event.target) && !(event.relatedTarget && this._getCellFromElement(event.relatedTarget))) {\n this._ngZone.run(() => this.previewChange.emit({\n value: null,\n event\n }));\n }\n }\n };\n /**\n * Triggered on mousedown or touchstart on a date cell.\n * Respsonsible for starting a drag sequence.\n */\n this._mousedownHandler = event => {\n if (!this.isRange) return;\n this._didDragSinceMouseDown = false;\n // Begin a drag if a cell within the current range was targeted.\n const cell = event.target && this._getCellFromElement(event.target);\n if (!cell || !this._isInRange(cell.compareValue)) {\n return;\n }\n this._ngZone.run(() => {\n this.dragStarted.emit({\n value: cell.rawValue,\n event\n });\n });\n };\n /** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */\n this._mouseupHandler = event => {\n if (!this.isRange) return;\n const cellElement = getCellElement(event.target);\n if (!cellElement) {\n // Mouseup happened outside of datepicker. Cancel drag.\n this._ngZone.run(() => {\n this.dragEnded.emit({\n value: null,\n event\n });\n });\n return;\n }\n if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {\n // Mouseup happened inside a different month instance.\n // Allow it to handle the event.\n return;\n }\n this._ngZone.run(() => {\n const cell = this._getCellFromElement(cellElement);\n this.dragEnded.emit({\n value: cell?.rawValue ?? null,\n event\n });\n });\n };\n /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */\n this._touchendHandler = event => {\n const target = getActualTouchTarget(event);\n if (target) {\n this._mouseupHandler({\n target\n });\n }\n };\n this._id = `mat-calendar-body-${calendarBodyId++}`;\n this._startDateLabelId = `${this._id}-start-date`;\n this._endDateLabelId = `${this._id}-end-date`;\n _ngZone.runOutsideAngular(() => {\n const element = _elementRef.nativeElement;\n // `touchmove` is active since we need to call `preventDefault`.\n element.addEventListener('touchmove', this._touchmoveHandler, activeCapturingEventOptions);\n element.addEventListener('mouseenter', this._enterHandler, passiveCapturingEventOptions);\n element.addEventListener('focus', this._enterHandler, passiveCapturingEventOptions);\n element.addEventListener('mouseleave', this._leaveHandler, passiveCapturingEventOptions);\n element.addEventListener('blur', this._leaveHandler, passiveCapturingEventOptions);\n element.addEventListener('mousedown', this._mousedownHandler, passiveEventOptions);\n element.addEventListener('touchstart', this._mousedownHandler, passiveEventOptions);\n if (this._platform.isBrowser) {\n window.addEventListener('mouseup', this._mouseupHandler);\n window.addEventListener('touchend', this._touchendHandler);\n }\n });\n }\n /** Called when a cell is clicked. */\n _cellClicked(cell, event) {\n // Ignore \"clicks\" that are actually canceled drags (eg the user dragged\n // off and then went back to this cell to undo).\n if (this._didDragSinceMouseDown) {\n return;\n }\n if (cell.enabled) {\n this.selectedValueChange.emit({\n value: cell.value,\n event\n });\n }\n }\n _emitActiveDateChange(cell, event) {\n if (cell.enabled) {\n this.activeDateChange.emit({\n value: cell.value,\n event\n });\n }\n }\n /** Returns whether a cell should be marked as selected. */\n _isSelected(value) {\n return this.startValue === value || this.endValue === value;\n }\n ngOnChanges(changes) {\n const columnChanges = changes['numCols'];\n const {\n rows,\n numCols\n } = this;\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n }\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('touchmove', this._touchmoveHandler, activeCapturingEventOptions);\n element.removeEventListener('mouseenter', this._enterHandler, passiveCapturingEventOptions);\n element.removeEventListener('focus', this._enterHandler, passiveCapturingEventOptions);\n element.removeEventListener('mouseleave', this._leaveHandler, passiveCapturingEventOptions);\n element.removeEventListener('blur', this._leaveHandler, passiveCapturingEventOptions);\n element.removeEventListener('mousedown', this._mousedownHandler, passiveEventOptions);\n element.removeEventListener('touchstart', this._mousedownHandler, passiveEventOptions);\n if (this._platform.isBrowser) {\n window.removeEventListener('mouseup', this._mouseupHandler);\n window.removeEventListener('touchend', this._touchendHandler);\n }\n }\n /** Returns whether a cell is active. */\n _isActiveCell(rowIndex, colIndex) {\n let cellNumber = rowIndex * this.numCols + colIndex;\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n return cellNumber == this.activeCell;\n }\n /**\n * Focuses the active cell after the microtask queue is empty.\n *\n * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown\n * (issue #24330).\n *\n * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen\n * reader enabled:\n *\n * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.\n * 2. Pressing and holding the PageDown key with repeated keys enabled.\n *\n * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration\n * increased. Test 2 got slightly better until the duration was long enough to interfere with\n * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing\n * and holding pagedown caused the entire page to scroll.\n *\n * Since repeated key speed can verify across machines, determined that any duration could\n * potentially interfere with repeated keys. 0ms would be best because it almost entirely\n * eliminates the focus being lost in Voiceover (#24330) without causing unintended side effects.\n * Adding delay also complicates writing tests.\n */\n _focusActiveCell(movePreview = true) {\n afterNextRender(() => {\n setTimeout(() => {\n const activeCell = this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n if (activeCell) {\n if (!movePreview) {\n this._skipNextFocus = true;\n }\n activeCell.focus();\n }\n });\n }, {\n injector: this._injector\n });\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _scheduleFocusActiveCellAfterViewChecked() {\n this._focusActiveCellAfterViewChecked = true;\n }\n /** Gets whether a value is the start of the main range. */\n _isRangeStart(value) {\n return isStart(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is the end of the main range. */\n _isRangeEnd(value) {\n return isEnd(value, this.startValue, this.endValue);\n }\n /** Gets whether a value is within the currently-selected range. */\n _isInRange(value) {\n return isInRange(value, this.startValue, this.endValue, this.isRange);\n }\n /** Gets whether a value is the start of the comparison range. */\n _isComparisonStart(value) {\n return isStart(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Whether the cell is a start bridge cell between the main and comparison ranges. */\n _isComparisonBridgeStart(value, rowIndex, colIndex) {\n if (!this._isComparisonStart(value) || this._isRangeStart(value) || !this._isInRange(value)) {\n return false;\n }\n let previousCell = this.rows[rowIndex][colIndex - 1];\n if (!previousCell) {\n const previousRow = this.rows[rowIndex - 1];\n previousCell = previousRow && previousRow[previousRow.length - 1];\n }\n return previousCell && !this._isRangeEnd(previousCell.compareValue);\n }\n /** Whether the cell is an end bridge cell between the main and comparison ranges. */\n _isComparisonBridgeEnd(value, rowIndex, colIndex) {\n if (!this._isComparisonEnd(value) || this._isRangeEnd(value) || !this._isInRange(value)) {\n return false;\n }\n let nextCell = this.rows[rowIndex][colIndex + 1];\n if (!nextCell) {\n const nextRow = this.rows[rowIndex + 1];\n nextCell = nextRow && nextRow[0];\n }\n return nextCell && !this._isRangeStart(nextCell.compareValue);\n }\n /** Gets whether a value is the end of the comparison range. */\n _isComparisonEnd(value) {\n return isEnd(value, this.comparisonStart, this.comparisonEnd);\n }\n /** Gets whether a value is within the current comparison range. */\n _isInComparisonRange(value) {\n return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);\n }\n /**\n * Gets whether a value is the same as the start and end of the comparison range.\n * For context, the functions that we use to determine whether something is the start/end of\n * a range don't allow for the start and end to be on the same day, because we'd have to use\n * much more specific CSS selectors to style them correctly in all scenarios. This is fine for\n * the regular range, because when it happens, the selected styles take over and still show where\n * the range would've been, however we don't have these selected styles for a comparison range.\n * This function is used to apply a class that serves the same purpose as the one for selected\n * dates, but it only applies in the context of a comparison range.\n */\n _isComparisonIdentical(value) {\n // Note that we don't need to null check the start/end\n // here, because the `value` will always be defined.\n return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;\n }\n /** Gets whether a value is the start of the preview range. */\n _isPreviewStart(value) {\n return isStart(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is the end of the preview range. */\n _isPreviewEnd(value) {\n return isEnd(value, this.previewStart, this.previewEnd);\n }\n /** Gets whether a value is inside the preview range. */\n _isInPreview(value) {\n return isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n }\n /** Gets ids of aria descriptions for the start and end of a date range. */\n _getDescribedby(value) {\n if (!this.isRange) {\n return null;\n }\n if (this.startValue === value && this.endValue === value) {\n return `${this._startDateLabelId} ${this._endDateLabelId}`;\n } else if (this.startValue === value) {\n return this._startDateLabelId;\n } else if (this.endValue === value) {\n return this._endDateLabelId;\n }\n return null;\n }\n /** Finds the MatCalendarCell that corresponds to a DOM node. */\n _getCellFromElement(element) {\n const cell = getCellElement(element);\n if (cell) {\n const row = cell.getAttribute('data-mat-row');\n const col = cell.getAttribute('data-mat-col');\n if (row && col) {\n return this.rows[parseInt(row)][parseInt(col)];\n }\n }\n return null;\n }\n static {\n this.ɵfac = function MatCalendarBody_Factory(ɵt) {\n return new (ɵt || MatCalendarBody)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCalendarBody,\n selectors: [[\"\", \"mat-calendar-body\", \"\"]],\n hostAttrs: [1, \"mat-calendar-body\"],\n inputs: {\n label: \"label\",\n rows: \"rows\",\n todayValue: \"todayValue\",\n startValue: \"startValue\",\n endValue: \"endValue\",\n labelMinRequiredCells: \"labelMinRequiredCells\",\n numCols: \"numCols\",\n activeCell: \"activeCell\",\n isRange: \"isRange\",\n cellAspectRatio: \"cellAspectRatio\",\n comparisonStart: \"comparisonStart\",\n comparisonEnd: \"comparisonEnd\",\n previewStart: \"previewStart\",\n previewEnd: \"previewEnd\",\n startDateAccessibleName: \"startDateAccessibleName\",\n endDateAccessibleName: \"endDateAccessibleName\"\n },\n outputs: {\n selectedValueChange: \"selectedValueChange\",\n previewChange: \"previewChange\",\n activeDateChange: \"activeDateChange\",\n dragStarted: \"dragStarted\",\n dragEnded: \"dragEnded\"\n },\n exportAs: [\"matCalendarBody\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n attrs: _c0,\n decls: 7,\n vars: 5,\n consts: [[\"aria-hidden\", \"true\"], [\"role\", \"row\"], [1, \"mat-calendar-body-hidden-label\", 3, \"id\"], [1, \"mat-calendar-body-label\"], [1, \"mat-calendar-body-label\", 3, \"paddingTop\", \"paddingBottom\"], [\"role\", \"gridcell\", 1, \"mat-calendar-body-cell-container\", 3, \"width\", \"paddingTop\", \"paddingBottom\"], [\"role\", \"gridcell\", 1, \"mat-calendar-body-cell-container\"], [\"type\", \"button\", 1, \"mat-calendar-body-cell\", 3, \"click\", \"focus\", \"ngClass\", \"tabindex\"], [1, \"mat-calendar-body-cell-content\", \"mat-focus-indicator\"], [\"aria-hidden\", \"true\", 1, \"mat-calendar-body-cell-preview\"]],\n template: function MatCalendarBody_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatCalendarBody_Conditional_0_Template, 3, 6, \"tr\", 0);\n i0.ɵɵrepeaterCreate(1, MatCalendarBody_For_2_Template, 4, 1, \"tr\", 1, _forTrack0, true);\n i0.ɵɵelementStart(3, \"label\", 2);\n i0.ɵɵtext(4);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"label\", 2);\n i0.ɵɵtext(6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx._firstRowOffset < ctx.labelMinRequiredCells ? 0 : -1);\n i0.ɵɵadvance();\n i0.ɵɵrepeater(ctx.rows);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"id\", ctx._startDateLabelId);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.startDateAccessibleName, \"\\n\");\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"id\", ctx._endDateLabelId);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.endDateAccessibleName, \"\\n\");\n }\n },\n dependencies: [NgClass],\n styles: [\".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color)}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size);font-weight:var(--mat-datepicker-calendar-body-label-text-weight);color:var(--mat-datepicker-calendar-body-label-text-color)}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\\\"\\\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color)}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color)}.cdk-high-contrast-active .mat-calendar-body-disabled{opacity:.5}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color);border-color:var(--mat-datepicker-calendar-date-outline-color)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}.cdk-high-contrast-active .mat-calendar-body-cell-content{border:none}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color)}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color)}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color);color:var(--mat-datepicker-calendar-date-selected-state-text-color)}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color)}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color)}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color)}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color)}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color)}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color)}.cdk-high-contrast-active .mat-datepicker-popup:not(:empty),.cdk-high-contrast-active .mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.cdk-high-contrast-active .mat-calendar-body-today{outline:dotted 1px}.cdk-high-contrast-active .mat-calendar-body-cell::before,.cdk-high-contrast-active .mat-calendar-body-cell::after,.cdk-high-contrast-active .mat-calendar-body-selected{background:none}.cdk-high-contrast-active .mat-calendar-body-in-range::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-start::before,.cdk-high-contrast-active .mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.cdk-high-contrast-active .mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .cdk-high-contrast-active .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCalendarBody;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Checks whether a node is a table cell element. */\nfunction isTableCell(node) {\n return node?.nodeName === 'TD';\n}\n/**\n * Gets the date table cell element that is or contains the specified element.\n * Or returns null if element is not part of a date cell.\n */\nfunction getCellElement(element) {\n let cell;\n if (isTableCell(element)) {\n cell = element;\n } else if (isTableCell(element.parentNode)) {\n cell = element.parentNode;\n } else if (isTableCell(element.parentNode?.parentNode)) {\n cell = element.parentNode.parentNode;\n }\n return cell?.getAttribute('data-mat-row') != null ? cell : null;\n}\n/** Checks whether a value is the start of a range. */\nfunction isStart(value, start, end) {\n return end !== null && start !== end && value < end && value === start;\n}\n/** Checks whether a value is the end of a range. */\nfunction isEnd(value, start, end) {\n return start !== null && start !== end && value >= start && value === end;\n}\n/** Checks whether a value is inside of a range. */\nfunction isInRange(value, start, end, rangeEnabled) {\n return rangeEnabled && start !== null && end !== null && start !== end && value >= start && value <= end;\n}\n/**\n * Extracts the element that actually corresponds to a touch event's location\n * (rather than the element that initiated the sequence of touch events).\n */\nfunction getActualTouchTarget(event) {\n const touchLocation = event.changedTouches[0];\n return document.elementFromPoint(touchLocation.clientX, touchLocation.clientY);\n}\n\n/** A class representing a range of dates. */\nclass DateRange {\n constructor( /** The start date of the range. */\n start, /** The end date of the range. */\n end) {\n this.start = start;\n this.end = end;\n }\n}\n/**\n * A selection model containing a date selection.\n * @docs-private\n */\nlet MatDateSelectionModel = /*#__PURE__*/(() => {\n class MatDateSelectionModel {\n constructor( /** The current selection. */\n selection, _adapter) {\n this.selection = selection;\n this._adapter = _adapter;\n this._selectionChanged = new Subject();\n /** Emits when the selection has changed. */\n this.selectionChanged = this._selectionChanged;\n this.selection = selection;\n }\n /**\n * Updates the current selection in the model.\n * @param value New selection that should be assigned.\n * @param source Object that triggered the selection change.\n */\n updateSelection(value, source) {\n const oldValue = this.selection;\n this.selection = value;\n this._selectionChanged.next({\n selection: value,\n source,\n oldValue\n });\n }\n ngOnDestroy() {\n this._selectionChanged.complete();\n }\n _isValidDateInstance(date) {\n return this._adapter.isDateInstance(date) && this._adapter.isValid(date);\n }\n static {\n this.ɵfac = function MatDateSelectionModel_Factory(ɵt) {\n i0.ɵɵinvalidFactory();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatDateSelectionModel,\n factory: MatDateSelectionModel.ɵfac\n });\n }\n }\n return MatDateSelectionModel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A selection model that contains a single date.\n * @docs-private\n */\nlet MatSingleDateSelectionModel = /*#__PURE__*/(() => {\n class MatSingleDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(null, adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a single date selection, the added date\n * simply overwrites the previous selection\n */\n add(date) {\n super.updateSelection(date, this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n return this.selection != null && this._isValidDateInstance(this.selection);\n }\n /**\n * Checks whether the current selection is complete. In the case of a single date selection, this\n * is true if the current selection is not null.\n */\n isComplete() {\n return this.selection != null;\n }\n /** Clones the selection model. */\n clone() {\n const clone = new MatSingleDateSelectionModel(this._adapter);\n clone.updateSelection(this.selection, this);\n return clone;\n }\n static {\n this.ɵfac = function MatSingleDateSelectionModel_Factory(ɵt) {\n return new (ɵt || MatSingleDateSelectionModel)(i0.ɵɵinject(i1.DateAdapter));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatSingleDateSelectionModel,\n factory: MatSingleDateSelectionModel.ɵfac\n });\n }\n }\n return MatSingleDateSelectionModel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * A selection model that contains a date range.\n * @docs-private\n */\nlet MatRangeDateSelectionModel = /*#__PURE__*/(() => {\n class MatRangeDateSelectionModel extends MatDateSelectionModel {\n constructor(adapter) {\n super(new DateRange(null, null), adapter);\n }\n /**\n * Adds a date to the current selection. In the case of a date range selection, the added date\n * fills in the next `null` value in the range. If both the start and the end already have a date,\n * the selection is reset so that the given date is the new `start` and the `end` is null.\n */\n add(date) {\n let {\n start,\n end\n } = this.selection;\n if (start == null) {\n start = date;\n } else if (end == null) {\n end = date;\n } else {\n start = date;\n end = null;\n }\n super.updateSelection(new DateRange(start, end), this);\n }\n /** Checks whether the current selection is valid. */\n isValid() {\n const {\n start,\n end\n } = this.selection;\n // Empty ranges are valid.\n if (start == null && end == null) {\n return true;\n }\n // Complete ranges are only valid if both dates are valid and the start is before the end.\n if (start != null && end != null) {\n return this._isValidDateInstance(start) && this._isValidDateInstance(end) && this._adapter.compareDate(start, end) <= 0;\n }\n // Partial ranges are valid if the start/end is valid.\n return (start == null || this._isValidDateInstance(start)) && (end == null || this._isValidDateInstance(end));\n }\n /**\n * Checks whether the current selection is complete. In the case of a date range selection, this\n * is true if the current selection has a non-null `start` and `end`.\n */\n isComplete() {\n return this.selection.start != null && this.selection.end != null;\n }\n /** Clones the selection model. */\n clone() {\n const clone = new MatRangeDateSelectionModel(this._adapter);\n clone.updateSelection(this.selection, this);\n return clone;\n }\n static {\n this.ɵfac = function MatRangeDateSelectionModel_Factory(ɵt) {\n return new (ɵt || MatRangeDateSelectionModel)(i0.ɵɵinject(i1.DateAdapter));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatRangeDateSelectionModel,\n factory: MatRangeDateSelectionModel.ɵfac\n });\n }\n }\n return MatRangeDateSelectionModel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nfunction MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatSingleDateSelectionModel(adapter);\n}\n/**\n * Used to provide a single selection model to a component.\n * @docs-private\n */\nconst MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[/*#__PURE__*/new Optional(), /*#__PURE__*/new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY\n};\n/** @docs-private */\nfunction MAT_RANGE_DATE_SELECTION_MODEL_FACTORY(parent, adapter) {\n return parent || new MatRangeDateSelectionModel(adapter);\n}\n/**\n * Used to provide a range selection model to a component.\n * @docs-private\n */\nconst MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {\n provide: MatDateSelectionModel,\n deps: [[/*#__PURE__*/new Optional(), /*#__PURE__*/new SkipSelf(), MatDateSelectionModel], DateAdapter],\n useFactory: MAT_RANGE_DATE_SELECTION_MODEL_FACTORY\n};\n\n/** Injection token used to customize the date range selection behavior. */\nconst MAT_DATE_RANGE_SELECTION_STRATEGY = /*#__PURE__*/new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');\n/** Provides the default date range selection behavior. */\nlet DefaultMatCalendarRangeStrategy = /*#__PURE__*/(() => {\n class DefaultMatCalendarRangeStrategy {\n constructor(_dateAdapter) {\n this._dateAdapter = _dateAdapter;\n }\n selectionFinished(date, currentRange) {\n let {\n start,\n end\n } = currentRange;\n if (start == null) {\n start = date;\n } else if (end == null && date && this._dateAdapter.compareDate(date, start) >= 0) {\n end = date;\n } else {\n start = date;\n end = null;\n }\n return new DateRange(start, end);\n }\n createPreview(activeDate, currentRange) {\n let start = null;\n let end = null;\n if (currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n }\n return new DateRange(start, end);\n }\n createDrag(dragOrigin, originalRange, newDate) {\n let start = originalRange.start;\n let end = originalRange.end;\n if (!start || !end) {\n // Can't drag from an incomplete range.\n return null;\n }\n const adapter = this._dateAdapter;\n const isRange = adapter.compareDate(start, end) !== 0;\n const diffYears = adapter.getYear(newDate) - adapter.getYear(dragOrigin);\n const diffMonths = adapter.getMonth(newDate) - adapter.getMonth(dragOrigin);\n const diffDays = adapter.getDate(newDate) - adapter.getDate(dragOrigin);\n if (isRange && adapter.sameDate(dragOrigin, originalRange.start)) {\n start = newDate;\n if (adapter.compareDate(newDate, end) > 0) {\n end = adapter.addCalendarYears(end, diffYears);\n end = adapter.addCalendarMonths(end, diffMonths);\n end = adapter.addCalendarDays(end, diffDays);\n }\n } else if (isRange && adapter.sameDate(dragOrigin, originalRange.end)) {\n end = newDate;\n if (adapter.compareDate(newDate, start) < 0) {\n start = adapter.addCalendarYears(start, diffYears);\n start = adapter.addCalendarMonths(start, diffMonths);\n start = adapter.addCalendarDays(start, diffDays);\n }\n } else {\n start = adapter.addCalendarYears(start, diffYears);\n start = adapter.addCalendarMonths(start, diffMonths);\n start = adapter.addCalendarDays(start, diffDays);\n end = adapter.addCalendarYears(end, diffYears);\n end = adapter.addCalendarMonths(end, diffMonths);\n end = adapter.addCalendarDays(end, diffDays);\n }\n return new DateRange(start, end);\n }\n static {\n this.ɵfac = function DefaultMatCalendarRangeStrategy_Factory(ɵt) {\n return new (ɵt || DefaultMatCalendarRangeStrategy)(i0.ɵɵinject(i1.DateAdapter));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DefaultMatCalendarRangeStrategy,\n factory: DefaultMatCalendarRangeStrategy.ɵfac\n });\n }\n }\n return DefaultMatCalendarRangeStrategy;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nfunction MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(parent, adapter) {\n return parent || new DefaultMatCalendarRangeStrategy(adapter);\n}\n/** @docs-private */\nconst MAT_CALENDAR_RANGE_STRATEGY_PROVIDER = {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n deps: [[/*#__PURE__*/new Optional(), /*#__PURE__*/new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],\n useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY\n};\nconst DAYS_PER_WEEK = 7;\nlet uniqueIdCounter = 0;\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\nlet MatMonthView = /*#__PURE__*/(() => {\n class MatMonthView {\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n const oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setRanges(this._selected);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir, _rangeStrategy) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rangeStrategy = _rangeStrategy;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Origin of active drag, or null when dragging is not active. */\n this.activeDrag = null;\n /** Emits when a new date is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /** Emits when the user initiates a date range drag via mouse or touch. */\n this.dragStarted = new EventEmitter();\n /**\n * Emits when the user completes or cancels a date range drag.\n * Emits null when the drag was canceled or the newly selected date range if completed.\n */\n this.dragEnded = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges.pipe(startWith(null)).subscribe(() => this._init());\n }\n ngOnChanges(changes) {\n const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n if (comparisonChange && !comparisonChange.firstChange) {\n this._setRanges(this.selected);\n }\n if (changes['activeDrag'] && !this.activeDrag) {\n this._clearPreview();\n }\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new date is selected. */\n _dateSelected(event) {\n const date = event.value;\n const selectedDate = this._getDateFromDayOfMonth(date);\n let rangeStartDate;\n let rangeEndDate;\n if (this._selected instanceof DateRange) {\n rangeStartDate = this._getDateInCurrentMonth(this._selected.start);\n rangeEndDate = this._getDateInCurrentMonth(this._selected.end);\n } else {\n rangeStartDate = rangeEndDate = this._getDateInCurrentMonth(this._selected);\n }\n if (rangeStartDate !== date || rangeEndDate !== date) {\n this.selectedChange.emit(selectedDate);\n }\n this._userSelection.emit({\n value: selectedDate,\n event: event.event\n });\n this._clearPreview();\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromDayOfMonth(month);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this._activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, this._dateAdapter.getNumDaysInMonth(this._activeDate) - this._dateAdapter.getDate(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate = event.altKey ? this._dateAdapter.addCalendarYears(this._activeDate, -1) : this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey ? this._dateAdapter.addCalendarYears(this._activeDate, 1) : this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n this._selectionKeyPressed = true;\n if (this._canSelect(this._activeDate)) {\n // Prevent unexpected default actions such as form submission.\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n event.preventDefault();\n }\n return;\n case ESCAPE:\n // Abort the current range selection if the user presses escape mid-selection.\n if (this._previewEnd != null && !hasModifierKey(event)) {\n this._clearPreview();\n // If a drag is in progress, cancel the drag without changing the\n // current selection.\n if (this.activeDrag) {\n this.dragEnded.emit({\n value: null,\n event\n });\n } else {\n this.selectedChange.emit(null);\n this._userSelection.emit({\n value: null,\n event\n });\n }\n event.preventDefault();\n event.stopPropagation(); // Prevents the overlay from closing.\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n this._focusActiveCellAfterViewChecked();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed && this._canSelect(this._activeDate)) {\n this._dateSelected({\n value: this._dateAdapter.getDate(this._activeDate),\n event\n });\n }\n this._selectionKeyPressed = false;\n }\n }\n /** Initializes this month view. */\n _init() {\n this._setRanges(this.selected);\n this._todayDate = this._getCellCompareValue(this._dateAdapter.today());\n this._monthLabel = this._dateFormats.display.monthLabel ? this._dateAdapter.format(this.activeDate, this._dateFormats.display.monthLabel) : this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)].toLocaleUpperCase();\n let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset = (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) - this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n this._initWeekdays();\n this._createWeekCells();\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview) {\n this._matCalendarBody._focusActiveCell(movePreview);\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /** Called when the user has activated a new cell and the preview needs to be updated. */\n _previewChanged({\n event,\n value: cell\n }) {\n if (this._rangeStrategy) {\n // We can assume that this will be a range, because preview\n // events aren't fired for single date selections.\n const value = cell ? cell.rawValue : null;\n const previewRange = this._rangeStrategy.createPreview(value, this.selected, event);\n this._previewStart = this._getCellCompareValue(previewRange.start);\n this._previewEnd = this._getCellCompareValue(previewRange.end);\n if (this.activeDrag && value) {\n const dragRange = this._rangeStrategy.createDrag?.(this.activeDrag.value, this.selected, value, event);\n if (dragRange) {\n this._previewStart = this._getCellCompareValue(dragRange.start);\n this._previewEnd = this._getCellCompareValue(dragRange.end);\n }\n }\n // Note that here we need to use `detectChanges`, rather than `markForCheck`, because\n // the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time\n // when navigating one month back using the keyboard which will cause this handler\n // to throw a \"changed after checked\" error when updating the preview state.\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * Called when the user has ended a drag. If the drag/drop was successful,\n * computes and emits the new range selection.\n */\n _dragEnded(event) {\n if (!this.activeDrag) return;\n if (event.value) {\n // Propagate drag effect\n const dragDropResult = this._rangeStrategy?.createDrag?.(this.activeDrag.value, this.selected, event.value, event.event);\n this.dragEnded.emit({\n value: dragDropResult ?? null,\n event: event.event\n });\n } else {\n this.dragEnded.emit({\n value: null,\n event: event.event\n });\n }\n }\n /**\n * Takes a day of the month and returns a new date in the same month and year as the currently\n * active date. The returned date will have the same day of the month as the argument date.\n */\n _getDateFromDayOfMonth(dayOfMonth) {\n return this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), dayOfMonth);\n }\n /** Initializes the weekdays. */\n _initWeekdays() {\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return {\n long,\n narrow: narrowWeekdays[i],\n id: uniqueIdCounter++\n };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n /** Creates MatCalendarCells for the dates in this month. */\n _createWeekCells() {\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);\n const enabled = this._shouldEnableDate(date);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;\n this._weeks[this._weeks.length - 1].push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, cellClasses, this._getCellCompareValue(date), date));\n }\n }\n /** Date filter for the month */\n _shouldEnableDate(date) {\n return !!date && (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) && (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0) && (!this.dateFilter || this.dateFilter(date));\n }\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n _getDateInCurrentMonth(date) {\n return date && this._hasSameMonthAndYear(date, this.activeDate) ? this._dateAdapter.getDate(date) : null;\n }\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n _hasSameMonthAndYear(d1, d2) {\n return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) && this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\n /** Gets the value that will be used to one cell to another. */\n _getCellCompareValue(date) {\n if (date) {\n // We use the time since the Unix epoch to compare dates in this view, rather than the\n // cell values, because we need to support ranges that span across multiple months/years.\n const year = this._dateAdapter.getYear(date);\n const month = this._dateAdapter.getMonth(date);\n const day = this._dateAdapter.getDate(date);\n return new Date(year, month, day).getTime();\n }\n return null;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the current range based on a model value. */\n _setRanges(selectedValue) {\n if (selectedValue instanceof DateRange) {\n this._rangeStart = this._getCellCompareValue(selectedValue.start);\n this._rangeEnd = this._getCellCompareValue(selectedValue.end);\n this._isRange = true;\n } else {\n this._rangeStart = this._rangeEnd = this._getCellCompareValue(selectedValue);\n this._isRange = false;\n }\n this._comparisonRangeStart = this._getCellCompareValue(this.comparisonStart);\n this._comparisonRangeEnd = this._getCellCompareValue(this.comparisonEnd);\n }\n /** Gets whether a date can be selected in the month view. */\n _canSelect(date) {\n return !this.dateFilter || this.dateFilter(date);\n }\n /** Clears out preview state. */\n _clearPreview() {\n this._previewStart = this._previewEnd = null;\n }\n static {\n this.ɵfac = function MatMonthView_Factory(ɵt) {\n return new (ɵt || MatMonthView)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(i2.Directionality, 8), i0.ɵɵdirectiveInject(MAT_DATE_RANGE_SELECTION_STRATEGY, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMonthView,\n selectors: [[\"mat-month-view\"]],\n viewQuery: function MatMonthView_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatCalendarBody, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n }\n },\n inputs: {\n activeDate: \"activeDate\",\n selected: \"selected\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n dateFilter: \"dateFilter\",\n dateClass: \"dateClass\",\n comparisonStart: \"comparisonStart\",\n comparisonEnd: \"comparisonEnd\",\n startDateAccessibleName: \"startDateAccessibleName\",\n endDateAccessibleName: \"endDateAccessibleName\",\n activeDrag: \"activeDrag\"\n },\n outputs: {\n selectedChange: \"selectedChange\",\n _userSelection: \"_userSelection\",\n dragStarted: \"dragStarted\",\n dragEnded: \"dragEnded\",\n activeDateChange: \"activeDateChange\"\n },\n exportAs: [\"matMonthView\"],\n standalone: true,\n features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 8,\n vars: 14,\n consts: [[\"role\", \"grid\", 1, \"mat-calendar-table\"], [1, \"mat-calendar-table-header\"], [\"scope\", \"col\"], [\"aria-hidden\", \"true\"], [\"colspan\", \"7\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"selectedValueChange\", \"activeDateChange\", \"previewChange\", \"dragStarted\", \"dragEnded\", \"keyup\", \"keydown\", \"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"comparisonStart\", \"comparisonEnd\", \"previewStart\", \"previewEnd\", \"isRange\", \"labelMinRequiredCells\", \"activeCell\", \"startDateAccessibleName\", \"endDateAccessibleName\"], [1, \"cdk-visually-hidden\"]],\n template: function MatMonthView_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"table\", 0)(1, \"thead\", 1)(2, \"tr\");\n i0.ɵɵrepeaterCreate(3, MatMonthView_For_4_Template, 5, 2, \"th\", 2, _forTrack1);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(5, \"tr\", 3);\n i0.ɵɵelement(6, \"th\", 4);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(7, \"tbody\", 5);\n i0.ɵɵlistener(\"selectedValueChange\", function MatMonthView_Template_tbody_selectedValueChange_7_listener($event) {\n return ctx._dateSelected($event);\n })(\"activeDateChange\", function MatMonthView_Template_tbody_activeDateChange_7_listener($event) {\n return ctx._updateActiveDate($event);\n })(\"previewChange\", function MatMonthView_Template_tbody_previewChange_7_listener($event) {\n return ctx._previewChanged($event);\n })(\"dragStarted\", function MatMonthView_Template_tbody_dragStarted_7_listener($event) {\n return ctx.dragStarted.emit($event);\n })(\"dragEnded\", function MatMonthView_Template_tbody_dragEnded_7_listener($event) {\n return ctx._dragEnded($event);\n })(\"keyup\", function MatMonthView_Template_tbody_keyup_7_listener($event) {\n return ctx._handleCalendarBodyKeyup($event);\n })(\"keydown\", function MatMonthView_Template_tbody_keydown_7_listener($event) {\n return ctx._handleCalendarBodyKeydown($event);\n });\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵrepeater(ctx._weekdays);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"label\", ctx._monthLabel)(\"rows\", ctx._weeks)(\"todayValue\", ctx._todayDate)(\"startValue\", ctx._rangeStart)(\"endValue\", ctx._rangeEnd)(\"comparisonStart\", ctx._comparisonRangeStart)(\"comparisonEnd\", ctx._comparisonRangeEnd)(\"previewStart\", ctx._previewStart)(\"previewEnd\", ctx._previewEnd)(\"isRange\", ctx._isRange)(\"labelMinRequiredCells\", 3)(\"activeCell\", ctx._dateAdapter.getDate(ctx.activeDate) - 1)(\"startDateAccessibleName\", ctx.startDateAccessibleName)(\"endDateAccessibleName\", ctx.endDateAccessibleName);\n }\n },\n dependencies: [MatCalendarBody],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatMonthView;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst yearsPerPage = 24;\nconst yearsPerRow = 4;\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\nlet MatMultiYearView = /*#__PURE__*/(() => {\n class MatMultiYearView {\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!isSameMultiYearView(this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedYear(value);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new year is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected year. This doesn't imply a change on the selected date */\n this.yearSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges.pipe(startWith(null)).subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Initializes this multi-year view. */\n _init() {\n this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this._dateAdapter.getYear(this._activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n this._years = [];\n for (let i = 0, row = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length == yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /** Handles when a new year is selected. */\n _yearSelected(event) {\n const year = event.value;\n const selectedYear = this._dateAdapter.createDate(year, 0, 1);\n const selectedDate = this._getDateFromYear(year);\n this.yearSelected.emit(selectedYear);\n this.selectedChange.emit(selectedDate);\n }\n /**\n * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const year = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromYear(year);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event) {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerPage - getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n break;\n case PAGE_UP:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n break;\n case PAGE_DOWN:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n this._selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n this._focusActiveCellAfterViewChecked();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed) {\n this._yearSelected({\n value: this._dateAdapter.getYear(this._activeDate),\n event\n });\n }\n this._selectionKeyPressed = false;\n }\n }\n _getActiveCell() {\n return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /**\n * Takes a year and returns a new date on the same day and month as the currently active date\n * The returned date will have the same year as the argument date.\n */\n _getDateFromYear(year) {\n const activeMonth = this._dateAdapter.getMonth(this.activeDate);\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, activeMonth, 1));\n const normalizedDate = this._dateAdapter.createDate(year, activeMonth, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth));\n return normalizedDate;\n }\n /** Creates an MatCalendarCell for the given year. */\n _createCellForYear(year) {\n const date = this._dateAdapter.createDate(year, 0, 1);\n const yearName = this._dateAdapter.getYearName(date);\n const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;\n return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);\n }\n /** Whether the given year is enabled. */\n _shouldEnableYear(year) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined || year === null || this.maxDate && year > this._dateAdapter.getYear(this.maxDate) || this.minDate && year < this._dateAdapter.getYear(this.minDate)) {\n return false;\n }\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-highlighted year based on a model value. */\n _setSelectedYear(value) {\n this._selectedYear = null;\n if (value instanceof DateRange) {\n const displayValue = value.start || value.end;\n if (displayValue) {\n this._selectedYear = this._dateAdapter.getYear(displayValue);\n }\n } else if (value) {\n this._selectedYear = this._dateAdapter.getYear(value);\n }\n }\n static {\n this.ɵfac = function MatMultiYearView_Factory(ɵt) {\n return new (ɵt || MatMultiYearView)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatMultiYearView,\n selectors: [[\"mat-multi-year-view\"]],\n viewQuery: function MatMultiYearView_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatCalendarBody, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n }\n },\n inputs: {\n activeDate: \"activeDate\",\n selected: \"selected\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n dateFilter: \"dateFilter\",\n dateClass: \"dateClass\"\n },\n outputs: {\n selectedChange: \"selectedChange\",\n yearSelected: \"yearSelected\",\n activeDateChange: \"activeDateChange\"\n },\n exportAs: [\"matMultiYearView\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 5,\n vars: 7,\n consts: [[\"role\", \"grid\", 1, \"mat-calendar-table\"], [\"aria-hidden\", \"true\", 1, \"mat-calendar-table-header\"], [\"colspan\", \"4\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"selectedValueChange\", \"activeDateChange\", \"keyup\", \"keydown\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"numCols\", \"cellAspectRatio\", \"activeCell\"]],\n template: function MatMultiYearView_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"table\", 0)(1, \"thead\", 1)(2, \"tr\");\n i0.ɵɵelement(3, \"th\", 2);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(4, \"tbody\", 3);\n i0.ɵɵlistener(\"selectedValueChange\", function MatMultiYearView_Template_tbody_selectedValueChange_4_listener($event) {\n return ctx._yearSelected($event);\n })(\"activeDateChange\", function MatMultiYearView_Template_tbody_activeDateChange_4_listener($event) {\n return ctx._updateActiveDate($event);\n })(\"keyup\", function MatMultiYearView_Template_tbody_keyup_4_listener($event) {\n return ctx._handleCalendarBodyKeyup($event);\n })(\"keydown\", function MatMultiYearView_Template_tbody_keydown_4_listener($event) {\n return ctx._handleCalendarBodyKeydown($event);\n });\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"rows\", ctx._years)(\"todayValue\", ctx._todayYear)(\"startValue\", ctx._selectedYear)(\"endValue\", ctx._selectedYear)(\"numCols\", 4)(\"cellAspectRatio\", 4 / 7)(\"activeCell\", ctx._getActiveCell());\n }\n },\n dependencies: [MatCalendarBody],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatMultiYearView;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction isSameMultiYearView(dateAdapter, date1, date2, minDate, maxDate) {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return Math.floor((year1 - startingYear) / yearsPerPage) === Math.floor((year2 - startingYear) / yearsPerPage);\n}\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nfunction getActiveOffset(dateAdapter, activeDate, minDate, maxDate) {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\n}\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear(dateAdapter, minDate, maxDate) {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n } else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a, b) {\n return (a % b + b) % b;\n}\n\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\nlet MatYearView = /*#__PURE__*/(() => {\n class MatYearView {\n /** The date to display in this year view (everything other than the year is ignored). */\n get activeDate() {\n return this._activeDate;\n }\n set activeDate(value) {\n let oldActiveDate = this._activeDate;\n const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n this._setSelectedMonth(value);\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n constructor(_changeDetectorRef, _dateFormats, _dateAdapter, _dir) {\n this._changeDetectorRef = _changeDetectorRef;\n this._dateFormats = _dateFormats;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._rerenderSubscription = Subscription.EMPTY;\n /** Emits when a new month is selected. */\n this.selectedChange = new EventEmitter();\n /** Emits the selected month. This doesn't imply a change on the selected date */\n this.monthSelected = new EventEmitter();\n /** Emits when any date is activated. */\n this.activeDateChange = new EventEmitter();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._activeDate = this._dateAdapter.today();\n }\n ngAfterContentInit() {\n this._rerenderSubscription = this._dateAdapter.localeChanges.pipe(startWith(null)).subscribe(() => this._init());\n }\n ngOnDestroy() {\n this._rerenderSubscription.unsubscribe();\n }\n /** Handles when a new month is selected. */\n _monthSelected(event) {\n const month = event.value;\n const selectedMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n this.monthSelected.emit(selectedMonth);\n const selectedDate = this._getDateFromMonth(month);\n this.selectedChange.emit(selectedDate);\n }\n /**\n * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n _updateActiveDate(event) {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this._getDateFromMonth(month);\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event) {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n this._selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n this._focusActiveCellAfterViewChecked();\n }\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n /** Handles keyup events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeyup(event) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n if (this._selectionKeyPressed) {\n this._monthSelected({\n value: this._dateAdapter.getMonth(this._activeDate),\n event\n });\n }\n this._selectionKeyPressed = false;\n }\n }\n /** Initializes this year view. */\n _init() {\n this._setSelectedMonth(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n let monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n /** Schedules the matCalendarBody to focus the active cell after change detection has run */\n _focusActiveCellAfterViewChecked() {\n this._matCalendarBody._scheduleFocusActiveCellAfterViewChecked();\n }\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n _getMonthInCurrentYear(date) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ? this._dateAdapter.getMonth(date) : null;\n }\n /**\n * Takes a month and returns a new date in the same day and year as the currently active date.\n * The returned date will have the same month as the argument date.\n */\n _getDateFromMonth(month) {\n const normalizedDate = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n return this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth));\n }\n /** Creates an MatCalendarCell for the given month. */\n _createCellForMonth(month, monthName) {\n const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;\n return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month), cellClasses);\n }\n /** Whether the given month is enabled. */\n _shouldEnableMonth(month) {\n const activeYear = this._dateAdapter.getYear(this.activeDate);\n if (month === undefined || month === null || this._isYearAndMonthAfterMaxDate(activeYear, month) || this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n return false;\n }\n if (!this.dateFilter) {\n return true;\n }\n const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n // If any date in the month is enabled count the month as enabled.\n for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n _isYearAndMonthAfterMaxDate(year, month) {\n if (this.maxDate) {\n const maxYear = this._dateAdapter.getYear(this.maxDate);\n const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n return year > maxYear || year === maxYear && month > maxMonth;\n }\n return false;\n }\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n _isYearAndMonthBeforeMinDate(year, month) {\n if (this.minDate) {\n const minYear = this._dateAdapter.getYear(this.minDate);\n const minMonth = this._dateAdapter.getMonth(this.minDate);\n return year < minYear || year === minYear && month < minMonth;\n }\n return false;\n }\n /** Determines whether the user has the RTL layout direction. */\n _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n /** Sets the currently-selected month based on a model value. */\n _setSelectedMonth(value) {\n if (value instanceof DateRange) {\n this._selectedMonth = this._getMonthInCurrentYear(value.start) || this._getMonthInCurrentYear(value.end);\n } else {\n this._selectedMonth = this._getMonthInCurrentYear(value);\n }\n }\n static {\n this.ɵfac = function MatYearView_Factory(ɵt) {\n return new (ɵt || MatYearView)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(i2.Directionality, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatYearView,\n selectors: [[\"mat-year-view\"]],\n viewQuery: function MatYearView_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatCalendarBody, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._matCalendarBody = _t.first);\n }\n },\n inputs: {\n activeDate: \"activeDate\",\n selected: \"selected\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n dateFilter: \"dateFilter\",\n dateClass: \"dateClass\"\n },\n outputs: {\n selectedChange: \"selectedChange\",\n monthSelected: \"monthSelected\",\n activeDateChange: \"activeDateChange\"\n },\n exportAs: [\"matYearView\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 5,\n vars: 9,\n consts: [[\"role\", \"grid\", 1, \"mat-calendar-table\"], [\"aria-hidden\", \"true\", 1, \"mat-calendar-table-header\"], [\"colspan\", \"4\", 1, \"mat-calendar-table-header-divider\"], [\"mat-calendar-body\", \"\", 3, \"selectedValueChange\", \"activeDateChange\", \"keyup\", \"keydown\", \"label\", \"rows\", \"todayValue\", \"startValue\", \"endValue\", \"labelMinRequiredCells\", \"numCols\", \"cellAspectRatio\", \"activeCell\"]],\n template: function MatYearView_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"table\", 0)(1, \"thead\", 1)(2, \"tr\");\n i0.ɵɵelement(3, \"th\", 2);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(4, \"tbody\", 3);\n i0.ɵɵlistener(\"selectedValueChange\", function MatYearView_Template_tbody_selectedValueChange_4_listener($event) {\n return ctx._monthSelected($event);\n })(\"activeDateChange\", function MatYearView_Template_tbody_activeDateChange_4_listener($event) {\n return ctx._updateActiveDate($event);\n })(\"keyup\", function MatYearView_Template_tbody_keyup_4_listener($event) {\n return ctx._handleCalendarBodyKeyup($event);\n })(\"keydown\", function MatYearView_Template_tbody_keydown_4_listener($event) {\n return ctx._handleCalendarBodyKeydown($event);\n });\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"label\", ctx._yearLabel)(\"rows\", ctx._months)(\"todayValue\", ctx._todayMonth)(\"startValue\", ctx._selectedMonth)(\"endValue\", ctx._selectedMonth)(\"labelMinRequiredCells\", 2)(\"numCols\", 4)(\"cellAspectRatio\", 4 / 7)(\"activeCell\", ctx._dateAdapter.getMonth(ctx.activeDate));\n }\n },\n dependencies: [MatCalendarBody],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatYearView;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet calendarHeaderId = 1;\n/** Default header for MatCalendar */\nlet MatCalendarHeader = /*#__PURE__*/(() => {\n class MatCalendarHeader {\n constructor(_intl, calendar, _dateAdapter, _dateFormats, changeDetectorRef) {\n this._intl = _intl;\n this.calendar = calendar;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this._id = `mat-calendar-header-${calendarHeaderId++}`;\n this._periodButtonLabelId = `${this._id}-period-label`;\n this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n }\n /** The display text for the current calendar view. */\n get periodButtonText() {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel).toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n return this._intl.formatYearRange(...this._formatMinAndMaxYearLabels());\n }\n /** The aria description for the current calendar view. */\n get periodButtonDescription() {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel).toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n // Format a label for the window of years displayed in the multi-year calendar view. Use\n // `formatYearRangeLabel` because it is TTS friendly.\n return this._intl.formatYearRangeLabel(...this._formatMinAndMaxYearLabels());\n }\n /** The `aria-label` for changing the calendar view. */\n get periodButtonLabel() {\n return this.calendar.currentView == 'month' ? this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n }\n /** The label for the previous button. */\n get prevButtonLabel() {\n return {\n 'month': this._intl.prevMonthLabel,\n 'year': this._intl.prevYearLabel,\n 'multi-year': this._intl.prevMultiYearLabel\n }[this.calendar.currentView];\n }\n /** The label for the next button. */\n get nextButtonLabel() {\n return {\n 'month': this._intl.nextMonthLabel,\n 'year': this._intl.nextYearLabel,\n 'multi-year': this._intl.nextMultiYearLabel\n }[this.calendar.currentView];\n }\n /** Handles user clicks on the period label. */\n currentPeriodClicked() {\n this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n }\n /** Handles user clicks on the previous button. */\n previousClicked() {\n this.calendar.activeDate = this.calendar.currentView == 'month' ? this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) : this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage);\n }\n /** Handles user clicks on the next button. */\n nextClicked() {\n this.calendar.activeDate = this.calendar.currentView == 'month' ? this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) : this._dateAdapter.addCalendarYears(this.calendar.activeDate, this.calendar.currentView == 'year' ? 1 : yearsPerPage);\n }\n /** Whether the previous period button is enabled. */\n previousEnabled() {\n if (!this.calendar.minDate) {\n return true;\n }\n return !this.calendar.minDate || !this._isSameView(this.calendar.activeDate, this.calendar.minDate);\n }\n /** Whether the next period button is enabled. */\n nextEnabled() {\n return !this.calendar.maxDate || !this._isSameView(this.calendar.activeDate, this.calendar.maxDate);\n }\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n _isSameView(date1, date2) {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) && this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n }\n /**\n * Format two individual labels for the minimum year and maximum year available in the multi-year\n * calendar view. Returns an array of two strings where the first string is the formatted label\n * for the minimum year, and the second string is the formatted label for the maximum year.\n */\n _formatMinAndMaxYearLabels() {\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n const minYearOfPage = activeYear - getActiveOffset(this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(minYearOfPage, 0, 1));\n const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));\n return [minYearLabel, maxYearLabel];\n }\n static {\n this.ɵfac = function MatCalendarHeader_Factory(ɵt) {\n return new (ɵt || MatCalendarHeader)(i0.ɵɵdirectiveInject(MatDatepickerIntl), i0.ɵɵdirectiveInject(forwardRef(() => MatCalendar)), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCalendarHeader,\n selectors: [[\"mat-calendar-header\"]],\n exportAs: [\"matCalendarHeader\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 13,\n vars: 11,\n consts: [[1, \"mat-calendar-header\"], [1, \"mat-calendar-controls\"], [\"aria-live\", \"polite\", 1, \"cdk-visually-hidden\", 3, \"id\"], [\"mat-button\", \"\", \"type\", \"button\", 1, \"mat-calendar-period-button\", 3, \"click\"], [\"aria-hidden\", \"true\"], [\"viewBox\", \"0 0 10 5\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 1, \"mat-calendar-arrow\"], [\"points\", \"0,0 5,5 10,0\"], [1, \"mat-calendar-spacer\"], [\"mat-icon-button\", \"\", \"type\", \"button\", 1, \"mat-calendar-previous-button\", 3, \"click\", \"disabled\"], [\"mat-icon-button\", \"\", \"type\", \"button\", 1, \"mat-calendar-next-button\", 3, \"click\", \"disabled\"]],\n template: function MatCalendarHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"label\", 2);\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"button\", 3);\n i0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_4_listener() {\n return ctx.currentPeriodClicked();\n });\n i0.ɵɵelementStart(5, \"span\", 4);\n i0.ɵɵtext(6);\n i0.ɵɵelementEnd();\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(7, \"svg\", 5);\n i0.ɵɵelement(8, \"polygon\", 6);\n i0.ɵɵelementEnd()();\n i0.ɵɵnamespaceHTML();\n i0.ɵɵelement(9, \"div\", 7);\n i0.ɵɵprojection(10);\n i0.ɵɵelementStart(11, \"button\", 8);\n i0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_11_listener() {\n return ctx.previousClicked();\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(12, \"button\", 9);\n i0.ɵɵlistener(\"click\", function MatCalendarHeader_Template_button_click_12_listener() {\n return ctx.nextClicked();\n });\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"id\", ctx._periodButtonLabelId);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx.periodButtonDescription);\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"aria-label\", ctx.periodButtonLabel)(\"aria-describedby\", ctx._periodButtonLabelId);\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate(ctx.periodButtonText);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-calendar-invert\", ctx.calendar.currentView !== \"month\");\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"disabled\", !ctx.previousEnabled());\n i0.ɵɵattribute(\"aria-label\", ctx.prevButtonLabel);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"disabled\", !ctx.nextEnabled());\n i0.ɵɵattribute(\"aria-label\", ctx.nextButtonLabel);\n }\n },\n dependencies: [MatButton, MatIconButton],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCalendarHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** A calendar that is used as part of the datepicker. */\nlet MatCalendar = /*#__PURE__*/(() => {\n class MatCalendar {\n /** A date representing the period (month or year) to start the calendar in. */\n get startAt() {\n return this._startAt;\n }\n set startAt(value) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The currently selected date. */\n get selected() {\n return this._selected;\n }\n set selected(value) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n }\n /** The minimum selectable date. */\n get minDate() {\n return this._minDate;\n }\n set minDate(value) {\n this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /** The maximum selectable date. */\n get maxDate() {\n return this._maxDate;\n }\n set maxDate(value) {\n this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get activeDate() {\n return this._clampedActiveDate;\n }\n set activeDate(value) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n this.stateChanges.next();\n this._changeDetectorRef.markForCheck();\n }\n /** Whether the calendar is in month view. */\n get currentView() {\n return this._currentView;\n }\n set currentView(value) {\n const viewChangedResult = this._currentView !== value ? value : null;\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n if (viewChangedResult) {\n this.viewChanged.emit(viewChangedResult);\n }\n }\n constructor(_intl, _dateAdapter, _dateFormats, _changeDetectorRef) {\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n this._changeDetectorRef = _changeDetectorRef;\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n this._moveFocusOnNextTick = false;\n /** Whether the calendar should be started in month or year view. */\n this.startView = 'month';\n /** Emits when the currently selected date changes. */\n this.selectedChange = new EventEmitter();\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /**\n * Emits when the current view changes.\n */\n this.viewChanged = new EventEmitter(true);\n /** Emits when any date is selected. */\n this._userSelection = new EventEmitter();\n /** Emits a new date range value when the user completes a drag drop operation. */\n this._userDragDrop = new EventEmitter();\n /** Origin of active drag, or null when dragging is not active. */\n this._activeDrag = null;\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n this.stateChanges = new Subject();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n this._intlChanges = _intl.changes.subscribe(() => {\n _changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n ngAfterContentInit() {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n this.activeDate = this.startAt || this._dateAdapter.today();\n // Assign to the private property since we don't want to move focus on init.\n this._currentView = this.startView;\n }\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n this.stateChanges.complete();\n }\n ngOnChanges(changes) {\n // Ignore date changes that are at a different time on the same day. This fixes issues where\n // the calendar re-renders when there is no meaningful change to [minDate] or [maxDate]\n // (#24435).\n const minDateChange = changes['minDate'] && !this._dateAdapter.sameDate(changes['minDate'].previousValue, changes['minDate'].currentValue) ? changes['minDate'] : undefined;\n const maxDateChange = changes['maxDate'] && !this._dateAdapter.sameDate(changes['maxDate'].previousValue, changes['maxDate'].currentValue) ? changes['maxDate'] : undefined;\n const changeRequiringRerender = minDateChange || maxDateChange || changes['dateFilter'];\n if (changeRequiringRerender && !changeRequiringRerender.firstChange) {\n const view = this._getCurrentViewComponent();\n if (view) {\n // Schedule focus to be moved to the active date since re-rendering\n // can blur the active cell. See #29265.\n this._moveFocusOnNextTick = true;\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n this._changeDetectorRef.detectChanges();\n view._init();\n }\n }\n this.stateChanges.next();\n }\n /** Focuses the active date. */\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n this._getCurrentViewComponent()._init();\n }\n /** Handles date selection in the month view. */\n _dateSelected(event) {\n const date = event.value;\n if (this.selected instanceof DateRange || date && !this._dateAdapter.sameDate(date, this.selected)) {\n this.selectedChange.emit(date);\n }\n this._userSelection.emit(event);\n }\n /** Handles year selection in the multiyear view. */\n _yearSelectedInMultiYearView(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Handles month selection in the year view. */\n _monthSelectedInYearView(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /** Handles year/month selection in the multi-year/year views. */\n _goToDateInView(date, view) {\n this.activeDate = date;\n this.currentView = view;\n }\n /** Called when the user starts dragging to change a date range. */\n _dragStarted(event) {\n this._activeDrag = event;\n }\n /**\n * Called when a drag completes. It may end in cancelation or in the selection\n * of a new range.\n */\n _dragEnded(event) {\n if (!this._activeDrag) return;\n if (event.value) {\n this._userDragDrop.emit(event);\n }\n this._activeDrag = null;\n }\n /** Returns the component instance that corresponds to the current calendar view. */\n _getCurrentViewComponent() {\n // The return type is explicitly written as a union to ensure that the Closure compiler does\n // not optimize calls to _init(). Without the explicit return type, TypeScript narrows it to\n // only the first component type. See https://github.com/angular/components/issues/22996.\n return this.monthView || this.yearView || this.multiYearView;\n }\n static {\n this.ɵfac = function MatCalendar_Factory(ɵt) {\n return new (ɵt || MatCalendar)(i0.ɵɵdirectiveInject(MatDatepickerIntl), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCalendar,\n selectors: [[\"mat-calendar\"]],\n viewQuery: function MatCalendar_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatMonthView, 5);\n i0.ɵɵviewQuery(MatYearView, 5);\n i0.ɵɵviewQuery(MatMultiYearView, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.monthView = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.yearView = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.multiYearView = _t.first);\n }\n },\n hostAttrs: [1, \"mat-calendar\"],\n inputs: {\n headerComponent: \"headerComponent\",\n startAt: \"startAt\",\n startView: \"startView\",\n selected: \"selected\",\n minDate: \"minDate\",\n maxDate: \"maxDate\",\n dateFilter: \"dateFilter\",\n dateClass: \"dateClass\",\n comparisonStart: \"comparisonStart\",\n comparisonEnd: \"comparisonEnd\",\n startDateAccessibleName: \"startDateAccessibleName\",\n endDateAccessibleName: \"endDateAccessibleName\"\n },\n outputs: {\n selectedChange: \"selectedChange\",\n yearSelected: \"yearSelected\",\n monthSelected: \"monthSelected\",\n viewChanged: \"viewChanged\",\n _userSelection: \"_userSelection\",\n _userDragDrop: \"_userDragDrop\"\n },\n exportAs: [\"matCalendar\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER]), i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n decls: 5,\n vars: 2,\n consts: [[3, \"cdkPortalOutlet\"], [\"cdkMonitorSubtreeFocus\", \"\", \"tabindex\", \"-1\", 1, \"mat-calendar-content\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\", \"activeDrag\"], [3, \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\"], [3, \"activeDateChange\", \"_userSelection\", \"dragStarted\", \"dragEnded\", \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\", \"activeDrag\"], [3, \"activeDateChange\", \"monthSelected\", \"selectedChange\", \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\"], [3, \"activeDateChange\", \"yearSelected\", \"selectedChange\", \"activeDate\", \"selected\", \"dateFilter\", \"maxDate\", \"minDate\", \"dateClass\"]],\n template: function MatCalendar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatCalendar_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵtemplate(2, MatCalendar_Case_2_Template, 1, 11, \"mat-month-view\", 2)(3, MatCalendar_Case_3_Template, 1, 6, \"mat-year-view\", 3)(4, MatCalendar_Case_4_Template, 1, 6, \"mat-multi-year-view\", 3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n let tmp_1_0;\n i0.ɵɵproperty(\"cdkPortalOutlet\", ctx._calendarHeaderPortal);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional((tmp_1_0 = ctx.currentView) === \"month\" ? 2 : tmp_1_0 === \"year\" ? 3 : tmp_1_0 === \"multi-year\" ? 4 : -1);\n }\n },\n dependencies: [CdkPortalOutlet, CdkMonitorFocus, MatMonthView, MatYearView, MatMultiYearView],\n styles: [\".mat-calendar{display:block;font-family:var(--mat-datepicker-calendar-text-font);font-size:var(--mat-datepicker-calendar-text-size)}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size);font-weight:var(--mat-datepicker-calendar-period-button-text-weight);--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color)}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color)}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}.cdk-high-contrast-active .mat-calendar-arrow{fill:CanvasText}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-datepicker-content .mat-calendar-previous-button:not(.mat-mdc-button-disabled),.mat-datepicker-content .mat-calendar-next-button:not(.mat-mdc-button-disabled){color:var(--mat-datepicker-calendar-navigation-button-icon-color)}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color);font-size:var(--mat-datepicker-calendar-header-text-size);font-weight:var(--mat-datepicker-calendar-header-text-weight)}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\\\"\\\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\\\"\\\"}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCalendar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nconst matDatepickerAnimations = {\n /** Transforms the height of the datepicker's calendar. */\n transformPanel: /*#__PURE__*/trigger('transformPanel', [/*#__PURE__*/transition('void => enter-dropdown', /*#__PURE__*/animate('120ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/keyframes([/*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n }), /*#__PURE__*/style({\n opacity: 1,\n transform: 'scale(1, 1)'\n })]))), /*#__PURE__*/transition('void => enter-dialog', /*#__PURE__*/animate('150ms cubic-bezier(0, 0, 0.2, 1)', /*#__PURE__*/keyframes([/*#__PURE__*/style({\n opacity: 0,\n transform: 'scale(0.7)'\n }), /*#__PURE__*/style({\n transform: 'none',\n opacity: 1\n })]))), /*#__PURE__*/transition('* => void', /*#__PURE__*/animate('100ms linear', /*#__PURE__*/style({\n opacity: 0\n })))]),\n /** Fades in the content of the calendar. */\n fadeInCalendar: /*#__PURE__*/trigger('fadeInCalendar', [/*#__PURE__*/state('void', /*#__PURE__*/style({\n opacity: 0\n })), /*#__PURE__*/state('enter', /*#__PURE__*/style({\n opacity: 1\n })),\n /*#__PURE__*/\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', /*#__PURE__*/animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))])\n};\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n/** Injection token that determines the scroll handling while the calendar is open. */\nconst MAT_DATEPICKER_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-datepicker-scroll-strategy', {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n }\n});\n/** @docs-private */\nfunction MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY\n};\n/**\n * Component used as the content for the datepicker overlay. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the overlay that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\nlet MatDatepickerContent = /*#__PURE__*/(() => {\n class MatDatepickerContent {\n constructor(_elementRef, _changeDetectorRef, _globalModel, _dateAdapter, _rangeSelectionStrategy, intl) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._globalModel = _globalModel;\n this._dateAdapter = _dateAdapter;\n this._rangeSelectionStrategy = _rangeSelectionStrategy;\n this._subscriptions = new Subscription();\n /** Emits when an animation has finished. */\n this._animationDone = new Subject();\n /** Whether there is an in-progress animation. */\n this._isAnimating = false;\n /** Portal with projected action buttons. */\n this._actionsPortal = null;\n this._closeButtonText = intl.closeCalendarLabel;\n }\n ngOnInit() {\n this._animationState = this.datepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n }\n ngAfterViewInit() {\n this._subscriptions.add(this.datepicker.stateChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n }));\n this._calendar.focusActiveCell();\n }\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._animationDone.complete();\n }\n _handleUserSelection(event) {\n const selection = this._model.selection;\n const value = event.value;\n const isRange = selection instanceof DateRange;\n // If we're selecting a range and we have a selection strategy, always pass the value through\n // there. Otherwise don't assign null values to the model, unless we're selecting a range.\n // A null value when picking a range means that the user cancelled the selection (e.g. by\n // pressing escape), whereas when selecting a single value it means that the value didn't\n // change. This isn't very intuitive, but it's here for backwards-compatibility.\n if (isRange && this._rangeSelectionStrategy) {\n const newSelection = this._rangeSelectionStrategy.selectionFinished(value, selection, event.event);\n this._model.updateSelection(newSelection, this);\n } else if (value && (isRange || !this._dateAdapter.sameDate(value, selection))) {\n this._model.add(value);\n }\n // Delegate closing the overlay to the actions.\n if ((!this._model || this._model.isComplete()) && !this._actionsPortal) {\n this.datepicker.close();\n }\n }\n _handleUserDragDrop(event) {\n this._model.updateSelection(event.value, this);\n }\n _startExitAnimation() {\n this._animationState = 'void';\n this._changeDetectorRef.markForCheck();\n }\n _handleAnimationEvent(event) {\n this._isAnimating = event.phaseName === 'start';\n if (!this._isAnimating) {\n this._animationDone.next();\n }\n }\n _getSelected() {\n return this._model.selection;\n }\n /** Applies the current pending selection to the global model. */\n _applyPendingSelection() {\n if (this._model !== this._globalModel) {\n this._globalModel.updateSelection(this._model.selection, this);\n }\n }\n /**\n * Assigns a new portal containing the datepicker actions.\n * @param portal Portal with the actions to be assigned.\n * @param forceRerender Whether a re-render of the portal should be triggered. This isn't\n * necessary if the portal is assigned during initialization, but it may be required if it's\n * added at a later point.\n */\n _assignActions(portal, forceRerender) {\n // If we have actions, clone the model so that we have the ability to cancel the selection,\n // otherwise update the global model directly. Note that we want to assign this as soon as\n // possible, but `_actionsPortal` isn't available in the constructor so we do it in `ngOnInit`.\n this._model = portal ? this._globalModel.clone() : this._globalModel;\n this._actionsPortal = portal;\n if (forceRerender) {\n this._changeDetectorRef.detectChanges();\n }\n }\n static {\n this.ɵfac = function MatDatepickerContent_Factory(ɵt) {\n return new (ɵt || MatDatepickerContent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(MatDateSelectionModel), i0.ɵɵdirectiveInject(i1.DateAdapter), i0.ɵɵdirectiveInject(MAT_DATE_RANGE_SELECTION_STRATEGY, 8), i0.ɵɵdirectiveInject(MatDatepickerIntl));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDatepickerContent,\n selectors: [[\"mat-datepicker-content\"]],\n viewQuery: function MatDatepickerContent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatCalendar, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._calendar = _t.first);\n }\n },\n hostAttrs: [1, \"mat-datepicker-content\"],\n hostVars: 5,\n hostBindings: function MatDatepickerContent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵsyntheticHostListener(\"@transformPanel.start\", function MatDatepickerContent_animation_transformPanel_start_HostBindingHandler($event) {\n return ctx._handleAnimationEvent($event);\n })(\"@transformPanel.done\", function MatDatepickerContent_animation_transformPanel_done_HostBindingHandler($event) {\n return ctx._handleAnimationEvent($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵsyntheticHostProperty(\"@transformPanel\", ctx._animationState);\n i0.ɵɵclassMap(ctx.color ? \"mat-\" + ctx.color : \"\");\n i0.ɵɵclassProp(\"mat-datepicker-content-touch\", ctx.datepicker.touchUi);\n }\n },\n inputs: {\n color: \"color\"\n },\n exportAs: [\"matDatepickerContent\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 5,\n vars: 27,\n consts: [[\"cdkTrapFocus\", \"\", \"role\", \"dialog\", 1, \"mat-datepicker-content-container\"], [3, \"yearSelected\", \"monthSelected\", \"viewChanged\", \"_userSelection\", \"_userDragDrop\", \"id\", \"startAt\", \"startView\", \"minDate\", \"maxDate\", \"dateFilter\", \"headerComponent\", \"selected\", \"dateClass\", \"comparisonStart\", \"comparisonEnd\", \"startDateAccessibleName\", \"endDateAccessibleName\"], [3, \"cdkPortalOutlet\"], [\"type\", \"button\", \"mat-raised-button\", \"\", 1, \"mat-datepicker-close-button\", 3, \"focus\", \"blur\", \"click\", \"color\"]],\n template: function MatDatepickerContent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"mat-calendar\", 1);\n i0.ɵɵlistener(\"yearSelected\", function MatDatepickerContent_Template_mat_calendar_yearSelected_1_listener($event) {\n return ctx.datepicker._selectYear($event);\n })(\"monthSelected\", function MatDatepickerContent_Template_mat_calendar_monthSelected_1_listener($event) {\n return ctx.datepicker._selectMonth($event);\n })(\"viewChanged\", function MatDatepickerContent_Template_mat_calendar_viewChanged_1_listener($event) {\n return ctx.datepicker._viewChanged($event);\n })(\"_userSelection\", function MatDatepickerContent_Template_mat_calendar__userSelection_1_listener($event) {\n return ctx._handleUserSelection($event);\n })(\"_userDragDrop\", function MatDatepickerContent_Template_mat_calendar__userDragDrop_1_listener($event) {\n return ctx._handleUserDragDrop($event);\n });\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(2, MatDatepickerContent_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n i0.ɵɵelementStart(3, \"button\", 3);\n i0.ɵɵlistener(\"focus\", function MatDatepickerContent_Template_button_focus_3_listener() {\n return ctx._closeButtonFocused = true;\n })(\"blur\", function MatDatepickerContent_Template_button_blur_3_listener() {\n return ctx._closeButtonFocused = false;\n })(\"click\", function MatDatepickerContent_Template_button_click_3_listener() {\n return ctx.datepicker.close();\n });\n i0.ɵɵtext(4);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n let tmp_3_0;\n i0.ɵɵclassProp(\"mat-datepicker-content-container-with-custom-header\", ctx.datepicker.calendarHeaderComponent)(\"mat-datepicker-content-container-with-actions\", ctx._actionsPortal);\n i0.ɵɵattribute(\"aria-modal\", true)(\"aria-labelledby\", (tmp_3_0 = ctx._dialogLabelId) !== null && tmp_3_0 !== undefined ? tmp_3_0 : undefined);\n i0.ɵɵadvance();\n i0.ɵɵclassMap(ctx.datepicker.panelClass);\n i0.ɵɵproperty(\"id\", ctx.datepicker.id)(\"startAt\", ctx.datepicker.startAt)(\"startView\", ctx.datepicker.startView)(\"minDate\", ctx.datepicker._getMinDate())(\"maxDate\", ctx.datepicker._getMaxDate())(\"dateFilter\", ctx.datepicker._getDateFilter())(\"headerComponent\", ctx.datepicker.calendarHeaderComponent)(\"selected\", ctx._getSelected())(\"dateClass\", ctx.datepicker.dateClass)(\"comparisonStart\", ctx.comparisonStart)(\"comparisonEnd\", ctx.comparisonEnd)(\"@fadeInCalendar\", \"enter\")(\"startDateAccessibleName\", ctx.startDateAccessibleName)(\"endDateAccessibleName\", ctx.endDateAccessibleName);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"cdkPortalOutlet\", ctx._actionsPortal);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"cdk-visually-hidden\", !ctx._closeButtonFocused);\n i0.ɵɵproperty(\"color\", ctx.color || \"primary\");\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx._closeButtonText);\n }\n },\n dependencies: [CdkTrapFocus, MatCalendar, CdkPortalOutlet, MatButton],\n styles: [\".mat-datepicker-content{display:block;border-radius:4px;background-color:var(--mat-datepicker-calendar-container-background-color);color:var(--mat-datepicker-calendar-container-text-color);box-shadow:var(--mat-datepicker-calendar-container-elevation-shadow);border-radius:var(--mat-datepicker-calendar-container-shape)}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;box-shadow:var(--mat-datepicker-calendar-container-touch-elevation-shadow);border-radius:var(--mat-datepicker-calendar-container-touch-shape);position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}\"],\n encapsulation: 2,\n data: {\n animation: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar]\n },\n changeDetection: 0\n });\n }\n }\n return MatDatepickerContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Base class for a datepicker. */\nlet MatDatepickerBase = /*#__PURE__*/(() => {\n class MatDatepickerBase {\n /** The date to open the calendar to initially. */\n get startAt() {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this.datepickerInput ? this.datepickerInput.getStartValue() : null);\n }\n set startAt(value) {\n this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n /**\n * Theme color of the datepicker's calendar. This API is supported in M2 themes only, it\n * has no effect in M3 themes.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/theming#using-component-color-variants.\n */\n get color() {\n return this._color || (this.datepickerInput ? this.datepickerInput.getThemePalette() : undefined);\n }\n set color(value) {\n this._color = value;\n }\n /** Whether the datepicker pop-up should be disabled. */\n get disabled() {\n return this._disabled === undefined && this.datepickerInput ? this.datepickerInput.disabled : !!this._disabled;\n }\n set disabled(value) {\n if (value !== this._disabled) {\n this._disabled = value;\n this.stateChanges.next(undefined);\n }\n }\n /** Classes to be passed to the date picker panel. */\n get panelClass() {\n return this._panelClass;\n }\n set panelClass(value) {\n this._panelClass = coerceStringArray(value);\n }\n /** Whether the calendar is open. */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n if (value) {\n this.open();\n } else {\n this.close();\n }\n }\n /** The minimum selectable date. */\n _getMinDate() {\n return this.datepickerInput && this.datepickerInput.min;\n }\n /** The maximum selectable date. */\n _getMaxDate() {\n return this.datepickerInput && this.datepickerInput.max;\n }\n _getDateFilter() {\n return this.datepickerInput && this.datepickerInput.dateFilter;\n }\n constructor(_overlay,\n /**\n * @deprecated parameter is unused and will be removed\n * @breaking-change 19.0.0\n */\n _unusedNgZone, _viewContainerRef, scrollStrategy, _dateAdapter, _dir, _model) {\n this._overlay = _overlay;\n this._viewContainerRef = _viewContainerRef;\n this._dateAdapter = _dateAdapter;\n this._dir = _dir;\n this._model = _model;\n this._inputStateChanges = Subscription.EMPTY;\n this._document = inject(DOCUMENT);\n /** The view that the calendar should start in. */\n this.startView = 'month';\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a dropdown and elements have more padding to allow for bigger touch targets.\n */\n this.touchUi = false;\n /** Preferred position of the datepicker in the X axis. */\n this.xPosition = 'start';\n /** Preferred position of the datepicker in the Y axis. */\n this.yPosition = 'below';\n /**\n * Whether to restore focus to the previously-focused element when the calendar is closed.\n * Note that automatic focus restoration is an accessibility feature and it is recommended that\n * you provide your own equivalent, if you decide to turn it off.\n */\n this.restoreFocus = true;\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n this.yearSelected = new EventEmitter();\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n this.monthSelected = new EventEmitter();\n /**\n * Emits when the current view changes.\n */\n this.viewChanged = new EventEmitter(true);\n /** Emits when the datepicker has been opened. */\n this.openedStream = new EventEmitter();\n /** Emits when the datepicker has been closed. */\n this.closedStream = new EventEmitter();\n this._opened = false;\n /** The id for the datepicker calendar. */\n this.id = `mat-datepicker-${datepickerUid++}`;\n /** The element that was focused before the datepicker was opened. */\n this._focusedElementBeforeOpen = null;\n /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n this._backdropHarnessClass = `${this.id}-backdrop`;\n /** Emits when the datepicker's state changes. */\n this.stateChanges = new Subject();\n this._injector = inject(Injector);\n this._changeDetectorRef = inject(ChangeDetectorRef);\n if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw createMissingDateImplError('DateAdapter');\n }\n this._scrollStrategy = scrollStrategy;\n this._model.selectionChanged.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n ngOnChanges(changes) {\n const positionChange = changes['xPosition'] || changes['yPosition'];\n if (positionChange && !positionChange.firstChange && this._overlayRef) {\n const positionStrategy = this._overlayRef.getConfig().positionStrategy;\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this._setConnectedPositions(positionStrategy);\n if (this.opened) {\n this._overlayRef.updatePosition();\n }\n }\n }\n this.stateChanges.next(undefined);\n }\n ngOnDestroy() {\n this._destroyOverlay();\n this.close();\n this._inputStateChanges.unsubscribe();\n this.stateChanges.complete();\n }\n /** Selects the given date */\n select(date) {\n this._model.add(date);\n }\n /** Emits the selected year in multiyear view */\n _selectYear(normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n }\n /** Emits selected month in year view */\n _selectMonth(normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n }\n /** Emits changed view */\n _viewChanged(view) {\n this.viewChanged.emit(view);\n }\n /**\n * Register an input with this datepicker.\n * @param input The datepicker input to register with this datepicker.\n * @returns Selection model that the input should hook itself up to.\n */\n registerInput(input) {\n if (this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('A MatDatepicker can only be associated with a single input.');\n }\n this._inputStateChanges.unsubscribe();\n this.datepickerInput = input;\n this._inputStateChanges = input.stateChanges.subscribe(() => this.stateChanges.next(undefined));\n return this._model;\n }\n /**\n * Registers a portal containing action buttons with the datepicker.\n * @param portal Portal to be registered.\n */\n registerActions(portal) {\n if (this._actionsPortal && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('A MatDatepicker can only be associated with a single actions row.');\n }\n this._actionsPortal = portal;\n this._componentRef?.instance._assignActions(portal, true);\n }\n /**\n * Removes a portal containing action buttons from the datepicker.\n * @param portal Portal to be removed.\n */\n removeActions(portal) {\n if (portal === this._actionsPortal) {\n this._actionsPortal = null;\n this._componentRef?.instance._assignActions(null, true);\n }\n }\n /** Open the calendar. */\n open() {\n // Skip reopening if there's an in-progress animation to avoid overlapping\n // sequences which can cause \"changed after checked\" errors. See #25837.\n if (this._opened || this.disabled || this._componentRef?.instance._isAnimating) {\n return;\n }\n if (!this.datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempted to open an MatDatepicker with no associated input.');\n }\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n this._openOverlay();\n this._opened = true;\n this.openedStream.emit();\n }\n /** Close the calendar. */\n close() {\n // Skip reopening if there's an in-progress animation to avoid overlapping\n // sequences which can cause \"changed after checked\" errors. See #25837.\n if (!this._opened || this._componentRef?.instance._isAnimating) {\n return;\n }\n const canRestoreFocus = this.restoreFocus && this._focusedElementBeforeOpen && typeof this._focusedElementBeforeOpen.focus === 'function';\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n }\n };\n if (this._componentRef) {\n const {\n instance,\n location\n } = this._componentRef;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => {\n const activeElement = this._document.activeElement;\n // Since we restore focus after the exit animation, we have to check that\n // the user didn't move focus themselves inside the `close` handler.\n if (canRestoreFocus && (!activeElement || activeElement === this._document.activeElement || location.nativeElement.contains(activeElement))) {\n this._focusedElementBeforeOpen.focus();\n }\n this._focusedElementBeforeOpen = null;\n this._destroyOverlay();\n });\n }\n if (canRestoreFocus) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n /** Applies the current pending selection on the overlay to the model. */\n _applyPendingSelection() {\n this._componentRef?.instance?._applyPendingSelection();\n }\n /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */\n _forwardContentValues(instance) {\n instance.datepicker = this;\n instance.color = this.color;\n instance._dialogLabelId = this.datepickerInput.getOverlayLabelId();\n instance._assignActions(this._actionsPortal, false);\n }\n /** Opens the overlay with the calendar. */\n _openOverlay() {\n this._destroyOverlay();\n const isDialog = this.touchUi;\n const portal = new ComponentPortal(MatDatepickerContent, this._viewContainerRef);\n const overlayRef = this._overlayRef = this._overlay.create(new OverlayConfig({\n positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n hasBackdrop: true,\n backdropClass: [isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop', this._backdropHarnessClass],\n direction: this._dir,\n scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n panelClass: `mat-datepicker-${isDialog ? 'dialog' : 'popup'}`\n }));\n this._getCloseStream(overlayRef).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n // The `preventDefault` call happens inside the calendar as well, however focus moves into\n // it inside a timeout which can give browsers a chance to fire off a keyboard event in-between\n // that can scroll the page (see #24969). Always block default actions of arrow keys for the\n // entire overlay so the page doesn't get scrolled by accident.\n overlayRef.keydownEvents().subscribe(event => {\n const keyCode = event.keyCode;\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW || keyCode === PAGE_UP || keyCode === PAGE_DOWN) {\n event.preventDefault();\n }\n });\n this._componentRef = overlayRef.attach(portal);\n this._forwardContentValues(this._componentRef.instance);\n // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n if (!isDialog) {\n afterNextRender(() => {\n overlayRef.updatePosition();\n }, {\n injector: this._injector\n });\n }\n }\n /** Destroys the current overlay. */\n _destroyOverlay() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = this._componentRef = null;\n }\n }\n /** Gets a position strategy that will open the calendar as a dropdown. */\n _getDialogStrategy() {\n return this._overlay.position().global().centerHorizontally().centerVertically();\n }\n /** Gets a position strategy that will open the calendar as a dropdown. */\n _getDropdownStrategy() {\n const strategy = this._overlay.position().flexibleConnectedTo(this.datepickerInput.getConnectedOverlayOrigin()).withTransformOriginOn('.mat-datepicker-content').withFlexibleDimensions(false).withViewportMargin(8).withLockedPosition();\n return this._setConnectedPositions(strategy);\n }\n /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */\n _setConnectedPositions(strategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n return strategy.withPositions([{\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY\n }, {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY\n }, {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY\n }, {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY\n }]);\n }\n /** Gets an observable that will emit when the overlay is supposed to be closed. */\n _getCloseStream(overlayRef) {\n const ctrlShiftMetaModifiers = ['ctrlKey', 'shiftKey', 'metaKey'];\n return merge(overlayRef.backdropClick(), overlayRef.detachments(), overlayRef.keydownEvents().pipe(filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the datepicker.\n return event.keyCode === ESCAPE && !hasModifierKey(event) || this.datepickerInput && hasModifierKey(event, 'altKey') && event.keyCode === UP_ARROW && ctrlShiftMetaModifiers.every(modifier => !hasModifierKey(event, modifier));\n })));\n }\n static {\n this.ɵfac = function MatDatepickerBase_Factory(ɵt) {\n return new (ɵt || MatDatepickerBase)(i0.ɵɵdirectiveInject(i4.Overlay), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(MAT_DATEPICKER_SCROLL_STRATEGY), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(i2.Directionality, 8), i0.ɵɵdirectiveInject(MatDateSelectionModel));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerBase,\n inputs: {\n calendarHeaderComponent: \"calendarHeaderComponent\",\n startAt: \"startAt\",\n startView: \"startView\",\n color: \"color\",\n touchUi: [2, \"touchUi\", \"touchUi\", booleanAttribute],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n xPosition: \"xPosition\",\n yPosition: \"yPosition\",\n restoreFocus: [2, \"restoreFocus\", \"restoreFocus\", booleanAttribute],\n dateClass: \"dateClass\",\n panelClass: \"panelClass\",\n opened: [2, \"opened\", \"opened\", booleanAttribute]\n },\n outputs: {\n yearSelected: \"yearSelected\",\n monthSelected: \"monthSelected\",\n viewChanged: \"viewChanged\",\n openedStream: \"opened\",\n closedStream: \"closed\"\n },\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return MatDatepickerBase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\nlet MatDatepicker = /*#__PURE__*/(() => {\n class MatDatepicker extends MatDatepickerBase {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDatepicker_BaseFactory;\n return function MatDatepicker_Factory(ɵt) {\n return (ɵMatDatepicker_BaseFactory || (ɵMatDatepicker_BaseFactory = i0.ɵɵgetInheritedFactory(MatDatepicker)))(ɵt || MatDatepicker);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDatepicker,\n selectors: [[\"mat-datepicker\"]],\n exportAs: [\"matDatepicker\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, {\n provide: MatDatepickerBase,\n useExisting: MatDatepicker\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function MatDatepicker_Template(rf, ctx) {},\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDatepicker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nclass MatDatepickerInputEvent {\n constructor( /** Reference to the datepicker input component that emitted the event. */\n target, /** Reference to the native input element associated with the datepicker input. */\n targetElement) {\n this.target = target;\n this.targetElement = targetElement;\n this.value = this.target.value;\n }\n}\n/** Base class for datepicker inputs. */\nlet MatDatepickerInputBase = /*#__PURE__*/(() => {\n class MatDatepickerInputBase {\n /** The value of the input. */\n get value() {\n return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;\n }\n set value(value) {\n this._assignValueProgrammatically(value);\n }\n /** Whether the datepicker-input is disabled. */\n get disabled() {\n return !!this._disabled || this._parentDisabled();\n }\n set disabled(value) {\n const newValue = value;\n const element = this._elementRef.nativeElement;\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.stateChanges.next(undefined);\n }\n // We need to null check the `blur` method, because it's undefined during SSR.\n // In Ivy static bindings are invoked earlier, before the element is attached to the DOM.\n // This can cause an error to be thrown in some browsers (IE/Edge) which assert that the\n // element has been inserted.\n if (newValue && this._isInitialized && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n /** Gets the base validator functions. */\n _getValidators() {\n return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];\n }\n /** Registers a date selection model with the input. */\n _registerModel(model) {\n this._model = model;\n this._valueChangesSubscription.unsubscribe();\n if (this._pendingValue) {\n this._assignValue(this._pendingValue);\n }\n this._valueChangesSubscription = this._model.selectionChanged.subscribe(event => {\n if (this._shouldHandleChangeEvent(event)) {\n const value = this._getValueFromModel(event.selection);\n this._lastValueValid = this._isValidValue(value);\n this._cvaOnChange(value);\n this._onTouched();\n this._formatValue(value);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n });\n }\n constructor(_elementRef, _dateAdapter, _dateFormats) {\n this._elementRef = _elementRef;\n this._dateAdapter = _dateAdapter;\n this._dateFormats = _dateFormats;\n /** Emits when a `change` event is fired on this ` `. */\n this.dateChange = new EventEmitter();\n /** Emits when an `input` event is fired on this ` `. */\n this.dateInput = new EventEmitter();\n /** Emits when the internal state has changed */\n this.stateChanges = new Subject();\n this._onTouched = () => {};\n this._validatorOnChange = () => {};\n this._cvaOnChange = () => {};\n this._valueChangesSubscription = Subscription.EMPTY;\n this._localeSubscription = Subscription.EMPTY;\n /** The form control validator for whether the input parses. */\n this._parseValidator = () => {\n return this._lastValueValid ? null : {\n 'matDatepickerParse': {\n 'text': this._elementRef.nativeElement.value\n }\n };\n };\n /** The form control validator for the date filter. */\n this._filterValidator = control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n return !controlValue || this._matchesFilter(controlValue) ? null : {\n 'matDatepickerFilter': true\n };\n };\n /** The form control validator for the min date. */\n this._minValidator = control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const min = this._getMinDate();\n return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0 ? null : {\n 'matDatepickerMin': {\n 'min': min,\n 'actual': controlValue\n }\n };\n };\n /** The form control validator for the max date. */\n this._maxValidator = control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const max = this._getMaxDate();\n return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0 ? null : {\n 'matDatepickerMax': {\n 'max': max,\n 'actual': controlValue\n }\n };\n };\n /** Whether the last value set on the input was valid. */\n this._lastValueValid = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n }\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this._assignValueProgrammatically(this.value);\n });\n }\n ngAfterViewInit() {\n this._isInitialized = true;\n }\n ngOnChanges(changes) {\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n ngOnDestroy() {\n this._valueChangesSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n /** @docs-private */\n registerOnValidatorChange(fn) {\n this._validatorOnChange = fn;\n }\n /** @docs-private */\n validate(c) {\n return this._validator ? this._validator(c) : null;\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n this._assignValueProgrammatically(value);\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._cvaOnChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n _onKeydown(event) {\n const ctrlShiftMetaModifiers = ['ctrlKey', 'shiftKey', 'metaKey'];\n const isAltDownArrow = hasModifierKey(event, 'altKey') && event.keyCode === DOWN_ARROW && ctrlShiftMetaModifiers.every(modifier => !hasModifierKey(event, modifier));\n if (isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n this._openPopup();\n event.preventDefault();\n }\n }\n _onInput(value) {\n const lastValueWasValid = this._lastValueValid;\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = this._isValidValue(date);\n date = this._dateAdapter.getValidDateOrNull(date);\n const hasChanged = !this._dateAdapter.sameDate(date, this.value);\n // We need to fire the CVA change event for all\n // nulls, otherwise the validators won't run.\n if (!date || hasChanged) {\n this._cvaOnChange(date);\n } else {\n // Call the CVA change handler for invalid values\n // since this is what marks the control as dirty.\n if (value && !this.value) {\n this._cvaOnChange(date);\n }\n if (lastValueWasValid !== this._lastValueValid) {\n this._validatorOnChange();\n }\n }\n if (hasChanged) {\n this._assignValue(date);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n }\n _onChange() {\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n this._onTouched();\n }\n /** Formats a value and sets it on the input element. */\n _formatValue(value) {\n this._elementRef.nativeElement.value = value != null ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n }\n /** Assigns a value to the model. */\n _assignValue(value) {\n // We may get some incoming values before the model was\n // assigned. Save the value so that we can assign it later.\n if (this._model) {\n this._assignValueToModel(value);\n this._pendingValue = null;\n } else {\n this._pendingValue = value;\n }\n }\n /** Whether a value is considered valid. */\n _isValidValue(value) {\n return !value || this._dateAdapter.isValid(value);\n }\n /**\n * Checks whether a parent control is disabled. This is in place so that it can be overridden\n * by inputs extending this one which can be placed inside of a group that can be disabled.\n */\n _parentDisabled() {\n return false;\n }\n /** Programmatically assigns a value to the input. */\n _assignValueProgrammatically(value) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = this._isValidValue(value);\n value = this._dateAdapter.getValidDateOrNull(value);\n this._assignValue(value);\n this._formatValue(value);\n }\n /** Gets whether a value matches the current date filter. */\n _matchesFilter(value) {\n const filter = this._getDateFilter();\n return !filter || filter(value);\n }\n static {\n this.ɵfac = function MatDatepickerInputBase_Factory(ɵt) {\n return new (ɵt || MatDatepickerInputBase)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerInputBase,\n inputs: {\n value: \"value\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute]\n },\n outputs: {\n dateChange: \"dateChange\",\n dateInput: \"dateInput\"\n },\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return MatDatepickerInputBase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Checks whether the `SimpleChanges` object from an `ngOnChanges`\n * callback has any changes, accounting for date objects.\n */\nfunction dateInputsHaveChanged(changes, adapter) {\n const keys = Object.keys(changes);\n for (let key of keys) {\n const {\n previousValue,\n currentValue\n } = changes[key];\n if (adapter.isDateInstance(previousValue) && adapter.isDateInstance(currentValue)) {\n if (!adapter.sameDate(previousValue, currentValue)) {\n return true;\n }\n } else {\n return true;\n }\n }\n return false;\n}\n\n/** @docs-private */\nconst MAT_DATEPICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => MatDatepickerInput),\n multi: true\n};\n/** @docs-private */\nconst MAT_DATEPICKER_VALIDATORS = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MatDatepickerInput),\n multi: true\n};\n/** Directive used to connect an input to a MatDatepicker. */\nlet MatDatepickerInput = /*#__PURE__*/(() => {\n class MatDatepickerInput extends MatDatepickerInputBase {\n /** The datepicker that this input is associated with. */\n set matDatepicker(datepicker) {\n if (datepicker) {\n this._datepicker = datepicker;\n this._ariaOwns.set(datepicker.opened ? datepicker.id : null);\n this._closedSubscription = datepicker.closedStream.subscribe(() => {\n this._onTouched();\n this._ariaOwns.set(null);\n });\n this._openedSubscription = datepicker.openedStream.subscribe(() => {\n this._ariaOwns.set(datepicker.id);\n });\n this._registerModel(datepicker.registerInput(this));\n }\n }\n /** The minimum valid date. */\n get min() {\n return this._min;\n }\n set min(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\n this._min = validValue;\n this._validatorOnChange();\n }\n }\n /** The maximum valid date. */\n get max() {\n return this._max;\n }\n set max(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\n this._max = validValue;\n this._validatorOnChange();\n }\n }\n /** Function that can be used to filter out dates within the datepicker. */\n get dateFilter() {\n return this._dateFilter;\n }\n set dateFilter(value) {\n const wasMatchingValue = this._matchesFilter(this.value);\n this._dateFilter = value;\n if (this._matchesFilter(this.value) !== wasMatchingValue) {\n this._validatorOnChange();\n }\n }\n constructor(elementRef, dateAdapter, dateFormats, _formField) {\n super(elementRef, dateAdapter, dateFormats);\n this._formField = _formField;\n this._closedSubscription = Subscription.EMPTY;\n this._openedSubscription = Subscription.EMPTY;\n /** The id of the panel owned by this input. */\n this._ariaOwns = signal(null);\n this._validator = Validators.compose(super._getValidators());\n }\n /**\n * Gets the element that the datepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin() {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\n getOverlayLabelId() {\n if (this._formField) {\n return this._formField.getLabelId();\n }\n return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n }\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette() {\n return this._formField ? this._formField.color : undefined;\n }\n /** Gets the value at which the calendar should start. */\n getStartValue() {\n return this.value;\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._closedSubscription.unsubscribe();\n this._openedSubscription.unsubscribe();\n }\n /** Opens the associated datepicker. */\n _openPopup() {\n if (this._datepicker) {\n this._datepicker.open();\n }\n }\n _getValueFromModel(modelValue) {\n return modelValue;\n }\n _assignValueToModel(value) {\n if (this._model) {\n this._model.updateSelection(value, this);\n }\n }\n /** Gets the input's minimum date. */\n _getMinDate() {\n return this._min;\n }\n /** Gets the input's maximum date. */\n _getMaxDate() {\n return this._max;\n }\n /** Gets the input's date filtering function. */\n _getDateFilter() {\n return this._dateFilter;\n }\n _shouldHandleChangeEvent(event) {\n return event.source !== this;\n }\n static {\n this.ɵfac = function MatDatepickerInput_Factory(ɵt) {\n return new (ɵt || MatDatepickerInput)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerInput,\n selectors: [[\"input\", \"matDatepicker\", \"\"]],\n hostAttrs: [1, \"mat-datepicker-input\"],\n hostVars: 6,\n hostBindings: function MatDatepickerInput_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function MatDatepickerInput_input_HostBindingHandler($event) {\n return ctx._onInput($event.target.value);\n })(\"change\", function MatDatepickerInput_change_HostBindingHandler() {\n return ctx._onChange();\n })(\"blur\", function MatDatepickerInput_blur_HostBindingHandler() {\n return ctx._onBlur();\n })(\"keydown\", function MatDatepickerInput_keydown_HostBindingHandler($event) {\n return ctx._onKeydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n i0.ɵɵattribute(\"aria-haspopup\", ctx._datepicker ? \"dialog\" : null)(\"aria-owns\", ctx._ariaOwns())(\"min\", ctx.min ? ctx._dateAdapter.toIso8601(ctx.min) : null)(\"max\", ctx.max ? ctx._dateAdapter.toIso8601(ctx.max) : null)(\"data-mat-calendar\", ctx._datepicker ? ctx._datepicker.id : null);\n }\n },\n inputs: {\n matDatepicker: \"matDatepicker\",\n min: \"min\",\n max: \"max\",\n dateFilter: [0, \"matDatepickerFilter\", \"dateFilter\"]\n },\n exportAs: [\"matDatepickerInput\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATEPICKER_VALIDATORS, {\n provide: MAT_INPUT_VALUE_ACCESSOR,\n useExisting: MatDatepickerInput\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDatepickerInput;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Can be used to override the icon of a `matDatepickerToggle`. */\nlet MatDatepickerToggleIcon = /*#__PURE__*/(() => {\n class MatDatepickerToggleIcon {\n static {\n this.ɵfac = function MatDatepickerToggleIcon_Factory(ɵt) {\n return new (ɵt || MatDatepickerToggleIcon)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerToggleIcon,\n selectors: [[\"\", \"matDatepickerToggleIcon\", \"\"]],\n standalone: true\n });\n }\n }\n return MatDatepickerToggleIcon;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDatepickerToggle = /*#__PURE__*/(() => {\n class MatDatepickerToggle {\n /** Whether the toggle button is disabled. */\n get disabled() {\n if (this._disabled === undefined && this.datepicker) {\n return this.datepicker.disabled;\n }\n return !!this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n }\n constructor(_intl, _changeDetectorRef, defaultTabIndex) {\n this._intl = _intl;\n this._changeDetectorRef = _changeDetectorRef;\n this._stateChanges = Subscription.EMPTY;\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n ngOnChanges(changes) {\n if (changes['datepicker']) {\n this._watchStateChanges();\n }\n }\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n _open(event) {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n _watchStateChanges() {\n const datepickerStateChanged = this.datepicker ? this.datepicker.stateChanges : of();\n const inputStateChanged = this.datepicker && this.datepicker.datepickerInput ? this.datepicker.datepickerInput.stateChanges : of();\n const datepickerToggled = this.datepicker ? merge(this.datepicker.openedStream, this.datepicker.closedStream) : of();\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n static {\n this.ɵfac = function MatDatepickerToggle_Factory(ɵt) {\n return new (ɵt || MatDatepickerToggle)(i0.ɵɵdirectiveInject(MatDatepickerIntl), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵinjectAttribute('tabindex'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDatepickerToggle,\n selectors: [[\"mat-datepicker-toggle\"]],\n contentQueries: function MatDatepickerToggle_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatDatepickerToggleIcon, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._customIcon = _t.first);\n }\n },\n viewQuery: function MatDatepickerToggle_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c2, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._button = _t.first);\n }\n },\n hostAttrs: [1, \"mat-datepicker-toggle\"],\n hostVars: 8,\n hostBindings: function MatDatepickerToggle_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDatepickerToggle_click_HostBindingHandler($event) {\n return ctx._open($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"tabindex\", null)(\"data-mat-calendar\", ctx.datepicker ? ctx.datepicker.id : null);\n i0.ɵɵclassProp(\"mat-datepicker-toggle-active\", ctx.datepicker && ctx.datepicker.opened)(\"mat-accent\", ctx.datepicker && ctx.datepicker.color === \"accent\")(\"mat-warn\", ctx.datepicker && ctx.datepicker.color === \"warn\");\n }\n },\n inputs: {\n datepicker: [0, \"for\", \"datepicker\"],\n tabIndex: \"tabIndex\",\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n disableRipple: \"disableRipple\"\n },\n exportAs: [\"matDatepickerToggle\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c4,\n decls: 4,\n vars: 6,\n consts: [[\"button\", \"\"], [\"mat-icon-button\", \"\", \"type\", \"button\", 3, \"disabled\", \"disableRipple\"], [\"viewBox\", \"0 0 24 24\", \"width\", \"24px\", \"height\", \"24px\", \"fill\", \"currentColor\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 1, \"mat-datepicker-toggle-default-icon\"], [\"d\", \"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"]],\n template: function MatDatepickerToggle_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c3);\n i0.ɵɵelementStart(0, \"button\", 1, 0);\n i0.ɵɵtemplate(2, MatDatepickerToggle_Conditional_2_Template, 2, 0, \":svg:svg\", 2);\n i0.ɵɵprojection(3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"disabled\", ctx.disabled)(\"disableRipple\", ctx.disableRipple);\n i0.ɵɵattribute(\"aria-haspopup\", ctx.datepicker ? \"dialog\" : null)(\"aria-label\", ctx.ariaLabel || ctx._intl.openCalendarLabel)(\"tabindex\", ctx.disabled ? -1 : ctx.tabIndex);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(!ctx._customIcon ? 2 : -1);\n }\n },\n dependencies: [MatIconButton],\n styles: [\".mat-datepicker-toggle{pointer-events:auto;color:var(--mat-datepicker-toggle-icon-color)}.mat-datepicker-toggle-active{color:var(--mat-datepicker-toggle-active-state-icon-color)}.cdk-high-contrast-active .mat-datepicker-toggle-default-icon{color:CanvasText}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDatepickerToggle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// This file contains the `_computeAriaAccessibleName` function, which computes what the *expected*\n// ARIA accessible name would be for a given element. Implements a subset of ARIA specification\n// [Accessible Name and Description Computation 1.2](https://www.w3.org/TR/accname-1.2/).\n//\n// Specification accname-1.2 can be summarized by returning the result of the first method\n// available.\n//\n// 1. `aria-labelledby` attribute\n// ```\n// \n// Start Date \n// \n// ```\n// 2. `aria-label` attribute (e.g. ` `)\n// 3. Label with `for`/`id`\n// ```\n// \n// Label \n// \n// ```\n// 4. `placeholder` attribute (e.g. ` `)\n// 5. `title` attribute (e.g. ` `)\n// 6. text content\n// ```\n// \n// Departure Date \n// \n// ```\n/**\n * Computes the *expected* ARIA accessible name for argument element based on [accname-1.2\n * specification](https://www.w3.org/TR/accname-1.2/). Implements a subset of accname-1.2,\n * and should only be used for the Datepicker's specific use case.\n *\n * Intended use:\n * This is not a general use implementation. Only implements the parts of accname-1.2 that are\n * required for the Datepicker's specific use case. This function is not intended for any other\n * use.\n *\n * Limitations:\n * - Only covers the needs of `matStartDate` and `matEndDate`. Does not support other use cases.\n * - See NOTES's in implementation for specific details on what parts of the accname-1.2\n * specification are not implemented.\n *\n * @param element {HTMLInputElement} native <input/> element of `matStartDate` or\n * `matEndDate` component. Corresponds to the 'Root Element' from accname-1.2\n *\n * @return expected ARIA accessible name of argument <input/>\n */\nfunction _computeAriaAccessibleName(element) {\n return _computeAriaAccessibleNameInternal(element, true);\n}\n/**\n * Determine if argument node is an Element based on `nodeType` property. This function is safe to\n * use with server-side rendering.\n */\nfunction ssrSafeIsElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Determine if argument node is an HTMLInputElement based on `nodeName` property. This funciton is\n * safe to use with server-side rendering.\n */\nfunction ssrSafeIsHTMLInputElement(node) {\n return node.nodeName === 'INPUT';\n}\n/**\n * Determine if argument node is an HTMLTextAreaElement based on `nodeName` property. This\n * funciton is safe to use with server-side rendering.\n */\nfunction ssrSafeIsHTMLTextAreaElement(node) {\n return node.nodeName === 'TEXTAREA';\n}\n/**\n * Calculate the expected ARIA accessible name for given DOM Node. Given DOM Node may be either the\n * \"Root node\" passed to `_computeAriaAccessibleName` or \"Current node\" as result of recursion.\n *\n * @return the accessible name of argument DOM Node\n *\n * @param currentNode node to determine accessible name of\n * @param isDirectlyReferenced true if `currentNode` is the root node to calculate ARIA accessible\n * name of. False if it is a result of recursion.\n */\nfunction _computeAriaAccessibleNameInternal(currentNode, isDirectlyReferenced) {\n // NOTE: this differs from accname-1.2 specification.\n // - Does not implement Step 1. of accname-1.2: '''If `currentNode`'s role prohibits naming,\n // return the empty string (\"\")'''.\n // - Does not implement Step 2.A. of accname-1.2: '''if current node is hidden and not directly\n // referenced by aria-labelledby... return the empty string.'''\n // acc-name-1.2 Step 2.B.: aria-labelledby\n if (ssrSafeIsElement(currentNode) && isDirectlyReferenced) {\n const labelledbyIds = currentNode.getAttribute?.('aria-labelledby')?.split(/\\s+/g) || [];\n const validIdRefs = labelledbyIds.reduce((validIds, id) => {\n const elem = document.getElementById(id);\n if (elem) {\n validIds.push(elem);\n }\n return validIds;\n }, []);\n if (validIdRefs.length) {\n return validIdRefs.map(idRef => {\n return _computeAriaAccessibleNameInternal(idRef, false);\n }).join(' ');\n }\n }\n // acc-name-1.2 Step 2.C.: aria-label\n if (ssrSafeIsElement(currentNode)) {\n const ariaLabel = currentNode.getAttribute('aria-label')?.trim();\n if (ariaLabel) {\n return ariaLabel;\n }\n }\n // acc-name-1.2 Step 2.D. attribute or element that defines a text alternative\n //\n // NOTE: this differs from accname-1.2 specification.\n // Only implements Step 2.D. for ``,` `, and `` element. Does not\n // implement other elements that have an attribute or element that defines a text alternative.\n if (ssrSafeIsHTMLInputElement(currentNode) || ssrSafeIsHTMLTextAreaElement(currentNode)) {\n // use label with a `for` attribute referencing the current node\n if (currentNode.labels?.length) {\n return Array.from(currentNode.labels).map(x => _computeAriaAccessibleNameInternal(x, false)).join(' ');\n }\n // use placeholder if available\n const placeholder = currentNode.getAttribute('placeholder')?.trim();\n if (placeholder) {\n return placeholder;\n }\n // use title if available\n const title = currentNode.getAttribute('title')?.trim();\n if (title) {\n return title;\n }\n }\n // NOTE: this differs from accname-1.2 specification.\n // - does not implement acc-name-1.2 Step 2.E.: '''if the current node is a control embedded\n // within the label... then include the embedded control as part of the text alternative in\n // the following manner...'''. Step 2E applies to embedded controls such as textbox, listbox,\n // range, etc.\n // - does not implement acc-name-1.2 step 2.F.: check that '''role allows name from content''',\n // which applies to `currentNode` and its children.\n // - does not implement acc-name-1.2 Step 2.F.ii.: '''Check for CSS generated textual content'''\n // (e.g. :before and :after).\n // - does not implement acc-name-1.2 Step 2.I.: '''if the current node has a Tooltip attribute,\n // return its value'''\n // Return text content with whitespace collapsed into a single space character. Accomplish\n // acc-name-1.2 steps 2F, 2G, and 2H.\n return (currentNode.textContent || '').replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Used to provide the date range input wrapper component\n * to the parts without circular dependencies.\n */\nconst MAT_DATE_RANGE_INPUT_PARENT = /*#__PURE__*/new InjectionToken('MAT_DATE_RANGE_INPUT_PARENT');\n/**\n * Base class for the individual inputs that can be projected inside a `mat-date-range-input`.\n */\nlet MatDateRangeInputPartBase = /*#__PURE__*/(() => {\n class MatDateRangeInputPartBase extends MatDatepickerInputBase {\n /** Object used to control when error messages are shown. */\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value) {\n this._errorStateTracker.matcher = value;\n }\n /** Whether the input is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value) {\n this._errorStateTracker.errorState = value;\n }\n constructor(_rangeInput, _elementRef, _defaultErrorStateMatcher, _injector, _parentForm, _parentFormGroup, dateAdapter, dateFormats) {\n super(_elementRef, dateAdapter, dateFormats);\n this._rangeInput = _rangeInput;\n this._elementRef = _elementRef;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._injector = _injector;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this._dir = inject(Directionality, {\n optional: true\n });\n this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, null, this._parentFormGroup, this._parentForm, this.stateChanges);\n }\n ngOnInit() {\n // We need the date input to provide itself as a `ControlValueAccessor` and a `Validator`, while\n // injecting its `NgControl` so that the error state is handled correctly. This introduces a\n // circular dependency, because both `ControlValueAccessor` and `Validator` depend on the input\n // itself. Usually we can work around it for the CVA, but there's no API to do it for the\n // validator. We work around it here by injecting the `NgControl` in `ngOnInit`, after\n // everything has been resolved.\n const ngControl = this._injector.get(NgControl, null, {\n optional: true,\n self: true\n });\n if (ngControl) {\n this.ngControl = ngControl;\n this._errorStateTracker.ngControl = ngControl;\n }\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n /** Gets whether the input is empty. */\n isEmpty() {\n return this._elementRef.nativeElement.value.length === 0;\n }\n /** Gets the placeholder of the input. */\n _getPlaceholder() {\n return this._elementRef.nativeElement.placeholder;\n }\n /** Focuses the input. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n /** Gets the value that should be used when mirroring the input's size. */\n getMirrorValue() {\n const element = this._elementRef.nativeElement;\n const value = element.value;\n return value.length > 0 ? value : element.placeholder;\n }\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n /** Handles `input` events on the input element. */\n _onInput(value) {\n super._onInput(value);\n this._rangeInput._handleChildValueChange();\n }\n /** Opens the datepicker associated with the input. */\n _openPopup() {\n this._rangeInput._openDatepicker();\n }\n /** Gets the minimum date from the range input. */\n _getMinDate() {\n return this._rangeInput.min;\n }\n /** Gets the maximum date from the range input. */\n _getMaxDate() {\n return this._rangeInput.max;\n }\n /** Gets the date filter function from the range input. */\n _getDateFilter() {\n return this._rangeInput.dateFilter;\n }\n _parentDisabled() {\n return this._rangeInput._groupDisabled;\n }\n _shouldHandleChangeEvent({\n source\n }) {\n return source !== this._rangeInput._startInput && source !== this._rangeInput._endInput;\n }\n _assignValueProgrammatically(value) {\n super._assignValueProgrammatically(value);\n const opposite = this === this._rangeInput._startInput ? this._rangeInput._endInput : this._rangeInput._startInput;\n opposite?._validatorOnChange();\n }\n /** return the ARIA accessible name of the input element */\n _getAccessibleName() {\n return _computeAriaAccessibleName(this._elementRef.nativeElement);\n }\n static {\n this.ɵfac = function MatDateRangeInputPartBase_Factory(ɵt) {\n return new (ɵt || MatDateRangeInputPartBase)(i0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ErrorStateMatcher), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2$1.NgForm, 8), i0.ɵɵdirectiveInject(i2$1.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDateRangeInputPartBase,\n inputs: {\n errorStateMatcher: \"errorStateMatcher\"\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatDateRangeInputPartBase;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Input for entering the start date in a `mat-date-range-input`. */\nlet MatStartDate = /*#__PURE__*/(() => {\n class MatStartDate extends MatDateRangeInputPartBase {\n constructor(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats) {\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n /** Validator that checks that the start date isn't after the end date. */\n this._startValidator = control => {\n const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const end = this._model ? this._model.selection.end : null;\n return !start || !end || this._dateAdapter.compareDate(start, end) <= 0 ? null : {\n 'matStartDateInvalid': {\n 'end': end,\n 'actual': start\n }\n };\n };\n this._validator = Validators.compose([...super._getValidators(), this._startValidator]);\n }\n _getValueFromModel(modelValue) {\n return modelValue.start;\n }\n _shouldHandleChangeEvent(change) {\n if (!super._shouldHandleChangeEvent(change)) {\n return false;\n } else {\n return !change.oldValue?.start ? !!change.selection.start : !change.selection.start || !!this._dateAdapter.compareDate(change.oldValue.start, change.selection.start);\n }\n }\n _assignValueToModel(value) {\n if (this._model) {\n const range = new DateRange(value, this._model.selection.end);\n this._model.updateSelection(range, this);\n }\n }\n _formatValue(value) {\n super._formatValue(value);\n // Any time the input value is reformatted we need to tell the parent.\n this._rangeInput._handleChildValueChange();\n }\n _onKeydown(event) {\n const endInput = this._rangeInput._endInput;\n const element = this._elementRef.nativeElement;\n const isLtr = this._dir?.value !== 'rtl';\n // If the user hits RIGHT (LTR) when at the end of the input (and no\n // selection), move the cursor to the start of the end input.\n if ((event.keyCode === RIGHT_ARROW && isLtr || event.keyCode === LEFT_ARROW && !isLtr) && element.selectionStart === element.value.length && element.selectionEnd === element.value.length) {\n event.preventDefault();\n endInput._elementRef.nativeElement.setSelectionRange(0, 0);\n endInput.focus();\n } else {\n super._onKeydown(event);\n }\n }\n static {\n this.ɵfac = function MatStartDate_Factory(ɵt) {\n return new (ɵt || MatStartDate)(i0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ErrorStateMatcher), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2$1.NgForm, 8), i0.ɵɵdirectiveInject(i2$1.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStartDate,\n selectors: [[\"input\", \"matStartDate\", \"\"]],\n hostAttrs: [\"type\", \"text\", 1, \"mat-start-date\", \"mat-date-range-input-inner\"],\n hostVars: 5,\n hostBindings: function MatStartDate_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function MatStartDate_input_HostBindingHandler($event) {\n return ctx._onInput($event.target.value);\n })(\"change\", function MatStartDate_change_HostBindingHandler() {\n return ctx._onChange();\n })(\"keydown\", function MatStartDate_keydown_HostBindingHandler($event) {\n return ctx._onKeydown($event);\n })(\"blur\", function MatStartDate_blur_HostBindingHandler() {\n return ctx._onBlur();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n i0.ɵɵattribute(\"aria-haspopup\", ctx._rangeInput.rangePicker ? \"dialog\" : null)(\"aria-owns\", ctx._rangeInput._ariaOwns ? ctx._rangeInput._ariaOwns() : (ctx._rangeInput.rangePicker == null ? null : ctx._rangeInput.rangePicker.opened) && ctx._rangeInput.rangePicker.id || null)(\"min\", ctx._getMinDate() ? ctx._dateAdapter.toIso8601(ctx._getMinDate()) : null)(\"max\", ctx._getMaxDate() ? ctx._dateAdapter.toIso8601(ctx._getMaxDate()) : null);\n }\n },\n outputs: {\n dateChange: \"dateChange\",\n dateInput: \"dateInput\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: MatStartDate,\n multi: true\n }, {\n provide: NG_VALIDATORS,\n useExisting: MatStartDate,\n multi: true\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatStartDate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Input for entering the end date in a `mat-date-range-input`. */\nlet MatEndDate = /*#__PURE__*/(() => {\n class MatEndDate extends MatDateRangeInputPartBase {\n constructor(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats) {\n super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);\n /** Validator that checks that the end date isn't before the start date. */\n this._endValidator = control => {\n const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n const start = this._model ? this._model.selection.start : null;\n return !end || !start || this._dateAdapter.compareDate(end, start) >= 0 ? null : {\n 'matEndDateInvalid': {\n 'start': start,\n 'actual': end\n }\n };\n };\n this._validator = Validators.compose([...super._getValidators(), this._endValidator]);\n }\n _getValueFromModel(modelValue) {\n return modelValue.end;\n }\n _shouldHandleChangeEvent(change) {\n if (!super._shouldHandleChangeEvent(change)) {\n return false;\n } else {\n return !change.oldValue?.end ? !!change.selection.end : !change.selection.end || !!this._dateAdapter.compareDate(change.oldValue.end, change.selection.end);\n }\n }\n _assignValueToModel(value) {\n if (this._model) {\n const range = new DateRange(this._model.selection.start, value);\n this._model.updateSelection(range, this);\n }\n }\n _moveCaretToEndOfStartInput() {\n const startInput = this._rangeInput._startInput._elementRef.nativeElement;\n const value = startInput.value;\n if (value.length > 0) {\n startInput.setSelectionRange(value.length, value.length);\n }\n startInput.focus();\n }\n _onKeydown(event) {\n const element = this._elementRef.nativeElement;\n const isLtr = this._dir?.value !== 'rtl';\n // If the user is pressing backspace on an empty end input, move focus back to the start.\n if (event.keyCode === BACKSPACE && !element.value) {\n this._moveCaretToEndOfStartInput();\n }\n // If the user hits LEFT (LTR) when at the start of the input (and no\n // selection), move the cursor to the end of the start input.\n else if ((event.keyCode === LEFT_ARROW && isLtr || event.keyCode === RIGHT_ARROW && !isLtr) && element.selectionStart === 0 && element.selectionEnd === 0) {\n event.preventDefault();\n this._moveCaretToEndOfStartInput();\n } else {\n super._onKeydown(event);\n }\n }\n static {\n this.ɵfac = function MatEndDate_Factory(ɵt) {\n return new (ɵt || MatEndDate)(i0.ɵɵdirectiveInject(MAT_DATE_RANGE_INPUT_PARENT), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ErrorStateMatcher), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2$1.NgForm, 8), i0.ɵɵdirectiveInject(i2$1.FormGroupDirective, 8), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_DATE_FORMATS, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatEndDate,\n selectors: [[\"input\", \"matEndDate\", \"\"]],\n hostAttrs: [\"type\", \"text\", 1, \"mat-end-date\", \"mat-date-range-input-inner\"],\n hostVars: 5,\n hostBindings: function MatEndDate_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"input\", function MatEndDate_input_HostBindingHandler($event) {\n return ctx._onInput($event.target.value);\n })(\"change\", function MatEndDate_change_HostBindingHandler() {\n return ctx._onChange();\n })(\"keydown\", function MatEndDate_keydown_HostBindingHandler($event) {\n return ctx._onKeydown($event);\n })(\"blur\", function MatEndDate_blur_HostBindingHandler() {\n return ctx._onBlur();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"disabled\", ctx.disabled);\n i0.ɵɵattribute(\"aria-haspopup\", ctx._rangeInput.rangePicker ? \"dialog\" : null)(\"aria-owns\", ctx._rangeInput._ariaOwns ? ctx._rangeInput._ariaOwns() : (ctx._rangeInput.rangePicker == null ? null : ctx._rangeInput.rangePicker.opened) && ctx._rangeInput.rangePicker.id || null)(\"min\", ctx._getMinDate() ? ctx._dateAdapter.toIso8601(ctx._getMinDate()) : null)(\"max\", ctx._getMaxDate() ? ctx._dateAdapter.toIso8601(ctx._getMaxDate()) : null);\n }\n },\n outputs: {\n dateChange: \"dateChange\",\n dateInput: \"dateInput\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: MatEndDate,\n multi: true\n }, {\n provide: NG_VALIDATORS,\n useExisting: MatEndDate,\n multi: true\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatEndDate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet nextUniqueId = 0;\nlet MatDateRangeInput = /*#__PURE__*/(() => {\n class MatDateRangeInput {\n /** Current value of the range input. */\n get value() {\n return this._model ? this._model.selection : null;\n }\n /** Whether the control's label should float. */\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * Set the placeholder attribute on `matStartDate` and `matEndDate`.\n * @docs-private\n */\n get placeholder() {\n const start = this._startInput?._getPlaceholder() || '';\n const end = this._endInput?._getPlaceholder() || '';\n return start || end ? `${start} ${this.separator} ${end}` : '';\n }\n /** The range picker that this input is associated with. */\n get rangePicker() {\n return this._rangePicker;\n }\n set rangePicker(rangePicker) {\n if (rangePicker) {\n this._model = rangePicker.registerInput(this);\n this._rangePicker = rangePicker;\n this._closedSubscription.unsubscribe();\n this._openedSubscription.unsubscribe();\n this._ariaOwns.set(this.rangePicker.opened ? rangePicker.id : null);\n this._closedSubscription = rangePicker.closedStream.subscribe(() => {\n this._startInput?._onTouched();\n this._endInput?._onTouched();\n this._ariaOwns.set(null);\n });\n this._openedSubscription = rangePicker.openedStream.subscribe(() => {\n this._ariaOwns.set(rangePicker.id);\n });\n this._registerModel(this._model);\n }\n }\n /** Whether the input is required. */\n get required() {\n return this._required ?? (this._isTargetRequired(this) || this._isTargetRequired(this._startInput) || this._isTargetRequired(this._endInput)) ?? false;\n }\n set required(value) {\n this._required = value;\n }\n /** Function that can be used to filter out dates within the date range picker. */\n get dateFilter() {\n return this._dateFilter;\n }\n set dateFilter(value) {\n const start = this._startInput;\n const end = this._endInput;\n const wasMatchingStart = start && start._matchesFilter(start.value);\n const wasMatchingEnd = end && end._matchesFilter(start.value);\n this._dateFilter = value;\n if (start && start._matchesFilter(start.value) !== wasMatchingStart) {\n start._validatorOnChange();\n }\n if (end && end._matchesFilter(end.value) !== wasMatchingEnd) {\n end._validatorOnChange();\n }\n }\n /** The minimum valid date. */\n get min() {\n return this._min;\n }\n set min(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._min)) {\n this._min = validValue;\n this._revalidate();\n }\n }\n /** The maximum valid date. */\n get max() {\n return this._max;\n }\n set max(value) {\n const validValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n if (!this._dateAdapter.sameDate(validValue, this._max)) {\n this._max = validValue;\n this._revalidate();\n }\n }\n /** Whether the input is disabled. */\n get disabled() {\n return this._startInput && this._endInput ? this._startInput.disabled && this._endInput.disabled : this._groupDisabled;\n }\n set disabled(value) {\n if (value !== this._groupDisabled) {\n this._groupDisabled = value;\n this.stateChanges.next(undefined);\n }\n }\n /** Whether the input is in an error state. */\n get errorState() {\n if (this._startInput && this._endInput) {\n return this._startInput.errorState || this._endInput.errorState;\n }\n return false;\n }\n /** Whether the datepicker input is empty. */\n get empty() {\n const startEmpty = this._startInput ? this._startInput.isEmpty() : false;\n const endEmpty = this._endInput ? this._endInput.isEmpty() : false;\n return startEmpty && endEmpty;\n }\n constructor(_changeDetectorRef, _elementRef, control, _dateAdapter, _formField) {\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dateAdapter = _dateAdapter;\n this._formField = _formField;\n this._closedSubscription = Subscription.EMPTY;\n this._openedSubscription = Subscription.EMPTY;\n /** Unique ID for the group. */\n this.id = `mat-date-range-input-${nextUniqueId++}`;\n /** Whether the control is focused. */\n this.focused = false;\n /** Name of the form control. */\n this.controlType = 'mat-date-range-input';\n /** The id of the panel owned by this input. */\n this._ariaOwns = signal(null);\n this._groupDisabled = false;\n /** Value for the `aria-describedby` attribute of the inputs. */\n this._ariaDescribedBy = null;\n /** Separator text to be shown between the inputs. */\n this.separator = '–';\n /** Start of the comparison range that should be shown in the calendar. */\n this.comparisonStart = null;\n /** End of the comparison range that should be shown in the calendar. */\n this.comparisonEnd = null;\n /** Emits when the input's state has changed. */\n this.stateChanges = new Subject();\n /**\n * Disable the automatic labeling to avoid issues like #27241.\n * @docs-private\n */\n this.disableAutomaticLabeling = true;\n if (!_dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw createMissingDateImplError('DateAdapter');\n }\n // The datepicker module can be used both with MDC and non-MDC form fields. We have\n // to conditionally add the MDC input class so that the range picker looks correctly.\n if (_formField?._elementRef.nativeElement.classList.contains('mat-mdc-form-field')) {\n _elementRef.nativeElement.classList.add('mat-mdc-input-element', 'mat-mdc-form-field-input-control', 'mdc-text-field__input');\n }\n // TODO(crisbeto): remove `as any` after #18206 lands.\n this.ngControl = control;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n setDescribedByIds(ids) {\n this._ariaDescribedBy = ids.length ? ids.join(' ') : null;\n }\n /**\n * Implemented as a part of `MatFormFieldControl`.\n * @docs-private\n */\n onContainerClick() {\n if (!this.focused && !this.disabled) {\n if (!this._model || !this._model.selection.start) {\n this._startInput.focus();\n } else {\n this._endInput.focus();\n }\n }\n }\n ngAfterContentInit() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._startInput) {\n throw Error('mat-date-range-input must contain a matStartDate input');\n }\n if (!this._endInput) {\n throw Error('mat-date-range-input must contain a matEndDate input');\n }\n }\n if (this._model) {\n this._registerModel(this._model);\n }\n // We don't need to unsubscribe from this, because we\n // know that the input streams will be completed on destroy.\n merge(this._startInput.stateChanges, this._endInput.stateChanges).subscribe(() => {\n this.stateChanges.next(undefined);\n });\n }\n ngOnChanges(changes) {\n if (dateInputsHaveChanged(changes, this._dateAdapter)) {\n this.stateChanges.next(undefined);\n }\n }\n ngOnDestroy() {\n this._closedSubscription.unsubscribe();\n this._openedSubscription.unsubscribe();\n this.stateChanges.complete();\n }\n /** Gets the date at which the calendar should start. */\n getStartValue() {\n return this.value ? this.value.start : null;\n }\n /** Gets the input's theme palette. */\n getThemePalette() {\n return this._formField ? this._formField.color : undefined;\n }\n /** Gets the element to which the calendar overlay should be attached. */\n getConnectedOverlayOrigin() {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\n getOverlayLabelId() {\n return this._formField ? this._formField.getLabelId() : null;\n }\n /** Gets the value that is used to mirror the state input. */\n _getInputMirrorValue(part) {\n const input = part === 'start' ? this._startInput : this._endInput;\n return input ? input.getMirrorValue() : '';\n }\n /** Whether the input placeholders should be hidden. */\n _shouldHidePlaceholders() {\n return this._startInput ? !this._startInput.isEmpty() : false;\n }\n /** Handles the value in one of the child inputs changing. */\n _handleChildValueChange() {\n this.stateChanges.next(undefined);\n this._changeDetectorRef.markForCheck();\n }\n /** Opens the date range picker associated with the input. */\n _openDatepicker() {\n if (this._rangePicker) {\n this._rangePicker.open();\n }\n }\n /** Whether the separate text should be hidden. */\n _shouldHideSeparator() {\n return (!this._formField || this._formField.getLabelId() && !this._formField._shouldLabelFloat()) && this.empty;\n }\n /** Gets the value for the `aria-labelledby` attribute of the inputs. */\n _getAriaLabelledby() {\n const formField = this._formField;\n return formField && formField._hasFloatingLabel() ? formField._labelId : null;\n }\n _getStartDateAccessibleName() {\n return this._startInput._getAccessibleName();\n }\n _getEndDateAccessibleName() {\n return this._endInput._getAccessibleName();\n }\n /** Updates the focused state of the range input. */\n _updateFocus(origin) {\n this.focused = origin !== null;\n this.stateChanges.next();\n }\n /** Re-runs the validators on the start/end inputs. */\n _revalidate() {\n if (this._startInput) {\n this._startInput._validatorOnChange();\n }\n if (this._endInput) {\n this._endInput._validatorOnChange();\n }\n }\n /** Registers the current date selection model with the start/end inputs. */\n _registerModel(model) {\n if (this._startInput) {\n this._startInput._registerModel(model);\n }\n if (this._endInput) {\n this._endInput._registerModel(model);\n }\n }\n /** Checks whether a specific range input directive is required. */\n _isTargetRequired(target) {\n return target?.ngControl?.control?.hasValidator(Validators.required);\n }\n static {\n this.ɵfac = function MatDateRangeInput_Factory(ɵt) {\n return new (ɵt || MatDateRangeInput)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2$1.ControlContainer, 10), i0.ɵɵdirectiveInject(i1.DateAdapter, 8), i0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDateRangeInput,\n selectors: [[\"mat-date-range-input\"]],\n contentQueries: function MatDateRangeInput_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatStartDate, 5);\n i0.ɵɵcontentQuery(dirIndex, MatEndDate, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._startInput = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._endInput = _t.first);\n }\n },\n hostAttrs: [\"role\", \"group\", 1, \"mat-date-range-input\"],\n hostVars: 8,\n hostBindings: function MatDateRangeInput_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx.id)(\"aria-labelledby\", ctx._getAriaLabelledby())(\"aria-describedby\", ctx._ariaDescribedBy)(\"data-mat-calendar\", ctx.rangePicker ? ctx.rangePicker.id : null);\n i0.ɵɵclassProp(\"mat-date-range-input-hide-placeholders\", ctx._shouldHidePlaceholders())(\"mat-date-range-input-required\", ctx.required);\n }\n },\n inputs: {\n rangePicker: \"rangePicker\",\n required: [2, \"required\", \"required\", booleanAttribute],\n dateFilter: \"dateFilter\",\n min: \"min\",\n max: \"max\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n separator: \"separator\",\n comparisonStart: \"comparisonStart\",\n comparisonEnd: \"comparisonEnd\"\n },\n exportAs: [\"matDateRangeInput\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MatFormFieldControl,\n useExisting: MatDateRangeInput\n }, {\n provide: MAT_DATE_RANGE_INPUT_PARENT,\n useExisting: MatDateRangeInput\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c6,\n decls: 11,\n vars: 5,\n consts: [[\"cdkMonitorSubtreeFocus\", \"\", 1, \"mat-date-range-input-container\", 3, \"cdkFocusChange\"], [1, \"mat-date-range-input-wrapper\"], [\"aria-hidden\", \"true\", 1, \"mat-date-range-input-mirror\"], [1, \"mat-date-range-input-separator\"], [1, \"mat-date-range-input-wrapper\", \"mat-date-range-input-end-wrapper\"]],\n template: function MatDateRangeInput_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c5);\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵlistener(\"cdkFocusChange\", function MatDateRangeInput_Template_div_cdkFocusChange_0_listener($event) {\n return ctx._updateFocus($event);\n });\n i0.ɵɵelementStart(1, \"div\", 1);\n i0.ɵɵprojection(2);\n i0.ɵɵelementStart(3, \"span\", 2);\n i0.ɵɵtext(4);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(5, \"span\", 3);\n i0.ɵɵtext(6);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(7, \"div\", 4);\n i0.ɵɵprojection(8, 1);\n i0.ɵɵelementStart(9, \"span\", 2);\n i0.ɵɵtext(10);\n i0.ɵɵelementEnd()()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(4);\n i0.ɵɵtextInterpolate(ctx._getInputMirrorValue(\"start\"));\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-date-range-input-separator-hidden\", ctx._shouldHideSeparator());\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx.separator);\n i0.ɵɵadvance(4);\n i0.ɵɵtextInterpolate(ctx._getInputMirrorValue(\"end\"));\n }\n },\n dependencies: [CdkMonitorFocus],\n styles: [\".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color)}.mat-form-field-disabled .mat-date-range-input-separator{color:var(--mat-datepicker-range-input-disabled-state-separator-color)}._mat-animation-noopable .mat-date-range-input-separator{transition:none}.mat-date-range-input-separator-hidden{-webkit-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-end-wrapper{flex-grow:1}.mat-date-range-input-inner{position:absolute;top:0;left:0;font:inherit;background:rgba(0,0,0,0);color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%;height:100%}.mat-date-range-input-inner:-moz-ui-invalid{box-shadow:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner[disabled]{color:var(--mat-datepicker-range-input-disabled-state-text-color)}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}.cdk-high-contrast-active .mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.cdk-high-contrast-active .mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{opacity:0}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}.cdk-high-contrast-active .mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.cdk-high-contrast-active .mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{opacity:0}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}.cdk-high-contrast-active .mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.cdk-high-contrast-active .mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{opacity:0}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}.cdk-high-contrast-active .mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.cdk-high-contrast-active .mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{opacity:0}._mat-animation-noopable .mat-date-range-input-inner::placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-moz-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-webkit-input-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner:-ms-input-placeholder{transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-mdc-form-field-type-mat-date-range-input .mat-mdc-form-field-infix{width:200px}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDateRangeInput;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDateRangePicker\"). We can change this to a\n// directive if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the date range picker popup/dialog. */\nlet MatDateRangePicker = /*#__PURE__*/(() => {\n class MatDateRangePicker extends MatDatepickerBase {\n _forwardContentValues(instance) {\n super._forwardContentValues(instance);\n const input = this.datepickerInput;\n if (input) {\n instance.comparisonStart = input.comparisonStart;\n instance.comparisonEnd = input.comparisonEnd;\n instance.startDateAccessibleName = input._getStartDateAccessibleName();\n instance.endDateAccessibleName = input._getEndDateAccessibleName();\n }\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatDateRangePicker_BaseFactory;\n return function MatDateRangePicker_Factory(ɵt) {\n return (ɵMatDateRangePicker_BaseFactory || (ɵMatDateRangePicker_BaseFactory = i0.ɵɵgetInheritedFactory(MatDateRangePicker)))(ɵt || MatDateRangePicker);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDateRangePicker,\n selectors: [[\"mat-date-range-picker\"]],\n exportAs: [\"matDateRangePicker\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER, {\n provide: MatDatepickerBase,\n useExisting: MatDateRangePicker\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function MatDateRangePicker_Template(rf, ctx) {},\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDateRangePicker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Button that will close the datepicker and assign the current selection to the data model. */\nlet MatDatepickerApply = /*#__PURE__*/(() => {\n class MatDatepickerApply {\n constructor(_datepicker) {\n this._datepicker = _datepicker;\n }\n _applySelection() {\n this._datepicker._applyPendingSelection();\n this._datepicker.close();\n }\n static {\n this.ɵfac = function MatDatepickerApply_Factory(ɵt) {\n return new (ɵt || MatDatepickerApply)(i0.ɵɵdirectiveInject(MatDatepickerBase));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerApply,\n selectors: [[\"\", \"matDatepickerApply\", \"\"], [\"\", \"matDateRangePickerApply\", \"\"]],\n hostBindings: function MatDatepickerApply_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDatepickerApply_click_HostBindingHandler() {\n return ctx._applySelection();\n });\n }\n },\n standalone: true\n });\n }\n }\n return MatDatepickerApply;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Button that will close the datepicker and discard the current selection. */\nlet MatDatepickerCancel = /*#__PURE__*/(() => {\n class MatDatepickerCancel {\n constructor(_datepicker) {\n this._datepicker = _datepicker;\n }\n static {\n this.ɵfac = function MatDatepickerCancel_Factory(ɵt) {\n return new (ɵt || MatDatepickerCancel)(i0.ɵɵdirectiveInject(MatDatepickerBase));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatDatepickerCancel,\n selectors: [[\"\", \"matDatepickerCancel\", \"\"], [\"\", \"matDateRangePickerCancel\", \"\"]],\n hostBindings: function MatDatepickerCancel_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatDatepickerCancel_click_HostBindingHandler() {\n return ctx._datepicker.close();\n });\n }\n },\n standalone: true\n });\n }\n }\n return MatDatepickerCancel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container that can be used to project a row of action buttons\n * to the bottom of a datepicker or date range picker.\n */\nlet MatDatepickerActions = /*#__PURE__*/(() => {\n class MatDatepickerActions {\n constructor(_datepicker, _viewContainerRef) {\n this._datepicker = _datepicker;\n this._viewContainerRef = _viewContainerRef;\n }\n ngAfterViewInit() {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n this._datepicker.registerActions(this._portal);\n }\n ngOnDestroy() {\n this._datepicker.removeActions(this._portal);\n // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n if (this._portal && this._portal.isAttached) {\n this._portal?.detach();\n }\n }\n static {\n this.ɵfac = function MatDatepickerActions_Factory(ɵt) {\n return new (ɵt || MatDatepickerActions)(i0.ɵɵdirectiveInject(MatDatepickerBase), i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatDatepickerActions,\n selectors: [[\"mat-datepicker-actions\"], [\"mat-date-range-picker-actions\"]],\n viewQuery: function MatDatepickerActions_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(TemplateRef, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._template = _t.first);\n }\n },\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c1,\n decls: 1,\n vars: 0,\n consts: [[1, \"mat-datepicker-actions\"]],\n template: function MatDatepickerActions_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, MatDatepickerActions_ng_template_0_Template, 2, 0, \"ng-template\");\n }\n },\n styles: [\".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatDatepickerActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDatepickerModule = /*#__PURE__*/(() => {\n class MatDatepickerModule {\n static {\n this.ɵfac = function MatDatepickerModule_Factory(ɵt) {\n return new (ɵt || MatDatepickerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatDatepickerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatDatepickerIntl, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER],\n imports: [CommonModule, MatButtonModule, OverlayModule, A11yModule, PortalModule, MatCommonModule, MatDatepickerContent, MatDatepickerToggle, MatCalendarHeader, CdkScrollableModule]\n });\n }\n }\n return MatDatepickerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerActions, MatDatepickerApply, MatDatepickerCancel, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow };\n","import * as i1 from '@angular/cdk/a11y';\nimport * as i2 from '@angular/cdk/collections';\nimport * as i0 from '@angular/core';\nimport { forwardRef, InjectionToken, EventEmitter, booleanAttribute, Directive, Output, ContentChildren, Input, inject, Injector, numberAttribute, afterNextRender, ANIMATION_MODULE_TYPE, ElementRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, ViewChild, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRipple, _MatInternalFormField, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { CommonModule } from '@angular/common';\n\n// Increasing integer for generating unique ids for radio components.\nconst _c0 = [\"input\"];\nconst _c1 = [\"formField\"];\nconst _c2 = [\"*\"];\nlet nextUniqueId = 0;\n/** Change event object emitted by radio button and radio group. */\nclass MatRadioChange {\n constructor( /** The radio button that emits the change event. */\n source, /** The value of the radio button. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => MatRadioGroup),\n multi: true\n};\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = /*#__PURE__*/new InjectionToken('MatRadioGroup');\nconst MAT_RADIO_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-radio-default-options', {\n providedIn: 'root',\n factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent'\n };\n}\n/**\n * A group of radio buttons. May contain one or more `` elements.\n */\nlet MatRadioGroup = /*#__PURE__*/(() => {\n class MatRadioGroup {\n /** Name of the radio button group. All radio buttons inside this group will use this name. */\n get name() {\n return this._name;\n }\n set name(value) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition;\n }\n set labelPosition(v) {\n this._labelPosition = v === 'before' ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n /**\n * Value for the radio-group. Should equal the value of the selected radio button if there is\n * a corresponding radio button with a matching value. If there is not such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n get value() {\n return this._value;\n }\n set value(newValue) {\n if (this._value !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n _checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n /**\n * The currently selected radio button. If set to a new radio button, the radio group value\n * will be updated to match the new selected button.\n */\n get selected() {\n return this._selected;\n }\n set selected(selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n /** Whether the radio group is disabled */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._markRadiosForCheck();\n }\n /** Whether the radio group is required */\n get required() {\n return this._required;\n }\n set required(value) {\n this._required = value;\n this._markRadiosForCheck();\n }\n constructor(_changeDetector) {\n this._changeDetector = _changeDetector;\n /** Selected value for the radio group. */\n this._value = null;\n /** The HTML name attribute applied to radio buttons in this group. */\n this._name = `mat-radio-group-${nextUniqueId++}`;\n /** The currently selected radio button. Should match value. */\n this._selected = null;\n /** Whether the `value` has been set to its initial value. */\n this._isInitialized = false;\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n this._labelPosition = 'after';\n /** Whether the radio group is disabled. */\n this._disabled = false;\n /** Whether the radio group is required. */\n this._required = false;\n /** The method to be called in order to update ngModel */\n this._controlValueAccessorChangeFn = () => {};\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @docs-private\n */\n this.onTouched = () => {};\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as ` `).\n */\n this.change = new EventEmitter();\n }\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MatRadioGroup.\n this._isInitialized = true;\n // Clear the `selected` button when it's destroyed since the tabindex of the rest of the\n // buttons depends on it. Note that we don't clear the `value`, because the radio button\n // may be swapped out with a similar one and there are some internal apps that depend on\n // that behavior.\n this._buttonChanges = this._radios.changes.subscribe(() => {\n if (this.selected && !this._radios.find(radio => radio === this.selected)) {\n this._selected = null;\n }\n });\n }\n ngOnDestroy() {\n this._buttonChanges?.unsubscribe();\n }\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n _touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n _updateRadioButtonNames() {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n radio._markForCheck();\n });\n }\n }\n /** Updates the `selected` radio button from the internal _value state. */\n _updateSelectedRadioFromValue() {\n // If the value already matches the selected radio, do nothing.\n const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n if (this._radios && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value === radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent() {\n if (this._isInitialized) {\n this.change.emit(new MatRadioChange(this._selected, this._value));\n }\n }\n _markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\n static {\n this.ɵfac = function MatRadioGroup_Factory(ɵt) {\n return new (ɵt || MatRadioGroup)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatRadioGroup,\n selectors: [[\"mat-radio-group\"]],\n contentQueries: function MatRadioGroup_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatRadioButton, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._radios = _t);\n }\n },\n hostAttrs: [\"role\", \"radiogroup\", 1, \"mat-mdc-radio-group\"],\n inputs: {\n color: \"color\",\n name: \"name\",\n labelPosition: \"labelPosition\",\n value: \"value\",\n selected: \"selected\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n required: [2, \"required\", \"required\", booleanAttribute]\n },\n outputs: {\n change: \"change\"\n },\n exportAs: [\"matRadioGroup\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, {\n provide: MAT_RADIO_GROUP,\n useExisting: MatRadioGroup\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return MatRadioGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatRadioButton = /*#__PURE__*/(() => {\n class MatRadioButton {\n /** Whether this radio button is checked. */\n get checked() {\n return this._checked;\n }\n set checked(value) {\n if (this._checked !== value) {\n this._checked = value;\n if (value && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n } else if (!value && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n if (value) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n /** The value of this radio button. */\n get value() {\n return this._value;\n }\n set value(value) {\n if (this._value !== value) {\n this._value = value;\n if (this.radioGroup !== null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition || this.radioGroup && this.radioGroup.labelPosition || 'after';\n }\n set labelPosition(value) {\n this._labelPosition = value;\n }\n /** Whether the radio button is disabled. */\n get disabled() {\n return this._disabled || this.radioGroup !== null && this.radioGroup.disabled;\n }\n set disabled(value) {\n this._setDisabled(value);\n }\n /** Whether the radio button is required. */\n get required() {\n return this._required || this.radioGroup && this.radioGroup.required;\n }\n set required(value) {\n this._required = value;\n }\n /**\n * Theme color of the radio button. This API is supported in M2 themes only, it\n * has no effect in M3 themes.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/theming#using-component-color-variants.\n */\n get color() {\n // As per M2 design specifications the selection control radio should use the accent color\n // palette by default. https://m2.material.io/components/radio-buttons#specs\n return this._color || this.radioGroup && this.radioGroup.color || this._providerOverride && this._providerOverride.color || 'accent';\n }\n set color(newValue) {\n this._color = newValue;\n }\n /** ID of the native input element inside `` */\n get inputId() {\n return `${this.id || this._uniqueId}-input`;\n }\n constructor(radioGroup, _elementRef, _changeDetector, _focusMonitor, _radioDispatcher, animationMode, _providerOverride, tabIndex) {\n this._elementRef = _elementRef;\n this._changeDetector = _changeDetector;\n this._focusMonitor = _focusMonitor;\n this._radioDispatcher = _radioDispatcher;\n this._providerOverride = _providerOverride;\n this._uniqueId = `mat-radio-${++nextUniqueId}`;\n /** The unique ID for the radio button. */\n this.id = this._uniqueId;\n /** Whether ripples are disabled inside the radio button */\n this.disableRipple = false;\n /** Tabindex of the radio button. */\n this.tabIndex = 0;\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as ` `).\n */\n this.change = new EventEmitter();\n /** Whether this radio is checked. */\n this._checked = false;\n /** Value assigned to this radio. */\n this._value = null;\n /** Unregister function for _radioDispatcher */\n this._removeUniqueSelectionListener = () => {};\n this._injector = inject(Injector);\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n this._noopAnimations = animationMode === 'NoopAnimations';\n if (tabIndex) {\n this.tabIndex = numberAttribute(tabIndex, 0);\n }\n }\n /** Focuses the radio button. */\n focus(options, origin) {\n if (origin) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n } else {\n this._inputElement.nativeElement.focus(options);\n }\n }\n /**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n this._removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n });\n }\n ngDoCheck() {\n this._updateTabIndex();\n }\n ngAfterViewInit() {\n this._updateTabIndex();\n this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup._touch();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._removeUniqueSelectionListener();\n }\n /** Dispatch change event with current value. */\n _emitChangeEvent() {\n this.change.emit(new MatRadioChange(this, this._value));\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /** Triggered when the radio button receives an interaction from the user. */\n _onInputInteraction(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n if (!this.checked && !this.disabled) {\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\n }\n }\n }\n /** Triggered when the user clicks on the touch target. */\n _onTouchTargetClick(event) {\n this._onInputInteraction(event);\n if (!this.disabled) {\n // Normally the input should be focused already, but if the click\n // comes from the touch target, then we might have to focus it ourselves.\n this._inputElement.nativeElement.focus();\n }\n }\n /** Sets the disabled state and marks for check if a change occurred. */\n _setDisabled(value) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._changeDetector.markForCheck();\n }\n }\n /** Gets the tabindex for the underlying input element. */\n _updateTabIndex() {\n const group = this.radioGroup;\n let value;\n // Implement a roving tabindex if the button is inside a group. For most cases this isn't\n // necessary, because the browser handles the tab order for inputs inside a group automatically,\n // but we need an explicitly higher tabindex for the selected button in order for things like\n // the focus trap to pick it up correctly.\n if (!group || !group.selected || this.disabled) {\n value = this.tabIndex;\n } else {\n value = group.selected === this ? this.tabIndex : -1;\n }\n if (value !== this._previousTabIndex) {\n // We have to set the tabindex directly on the DOM node, because it depends on\n // the selected state which is prone to \"changed after checked errors\".\n const input = this._inputElement?.nativeElement;\n if (input) {\n input.setAttribute('tabindex', value + '');\n this._previousTabIndex = value;\n // Wait for any pending tabindex changes to be applied\n afterNextRender(() => {\n queueMicrotask(() => {\n // The radio group uses a \"selection follows focus\" pattern for tab management, so if this\n // radio button is currently focused and another radio button in the group becomes\n // selected, we should move focus to the newly selected radio button to maintain\n // consistency between the focused and selected states.\n if (group && group.selected && group.selected !== this && document.activeElement === input) {\n group.selected?._inputElement.nativeElement.focus();\n // If this radio button still has focus, the selected one must be disabled. In this\n // case the radio group as a whole should lose focus.\n if (document.activeElement === input) {\n this._inputElement.nativeElement.blur();\n }\n }\n });\n }, {\n injector: this._injector\n });\n }\n }\n }\n static {\n this.ɵfac = function MatRadioButton_Factory(ɵt) {\n return new (ɵt || MatRadioButton)(i0.ɵɵdirectiveInject(MAT_RADIO_GROUP, 8), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.FocusMonitor), i0.ɵɵdirectiveInject(i2.UniqueSelectionDispatcher), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_RADIO_DEFAULT_OPTIONS, 8), i0.ɵɵinjectAttribute('tabindex'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatRadioButton,\n selectors: [[\"mat-radio-button\"]],\n viewQuery: function MatRadioButton_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n i0.ɵɵviewQuery(_c1, 7, ElementRef);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._rippleTrigger = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-radio-button\"],\n hostVars: 15,\n hostBindings: function MatRadioButton_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"focus\", function MatRadioButton_focus_HostBindingHandler() {\n return ctx._inputElement.nativeElement.focus();\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx.id)(\"tabindex\", null)(\"aria-label\", null)(\"aria-labelledby\", null)(\"aria-describedby\", null);\n i0.ɵɵclassProp(\"mat-primary\", ctx.color === \"primary\")(\"mat-accent\", ctx.color === \"accent\")(\"mat-warn\", ctx.color === \"warn\")(\"mat-mdc-radio-checked\", ctx.checked)(\"_mat-animation-noopable\", ctx._noopAnimations);\n }\n },\n inputs: {\n id: \"id\",\n name: \"name\",\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n ariaDescribedby: [0, \"aria-describedby\", \"ariaDescribedby\"],\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n tabIndex: [2, \"tabIndex\", \"tabIndex\", value => value == null ? 0 : numberAttribute(value)],\n checked: [2, \"checked\", \"checked\", booleanAttribute],\n value: \"value\",\n labelPosition: \"labelPosition\",\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n required: [2, \"required\", \"required\", booleanAttribute],\n color: \"color\"\n },\n outputs: {\n change: \"change\"\n },\n exportAs: [\"matRadioButton\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c2,\n decls: 13,\n vars: 16,\n consts: [[\"formField\", \"\"], [\"input\", \"\"], [\"mat-internal-form-field\", \"\", 3, \"labelPosition\"], [1, \"mdc-radio\"], [1, \"mat-mdc-radio-touch-target\", 3, \"click\"], [\"type\", \"radio\", 1, \"mdc-radio__native-control\", 3, \"change\", \"id\", \"checked\", \"disabled\", \"required\"], [1, \"mdc-radio__background\"], [1, \"mdc-radio__outer-circle\"], [1, \"mdc-radio__inner-circle\"], [\"mat-ripple\", \"\", 1, \"mat-radio-ripple\", \"mat-mdc-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\"], [1, \"mat-ripple-element\", \"mat-radio-persistent-ripple\"], [1, \"mdc-label\", 3, \"for\"]],\n template: function MatRadioButton_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 2, 0)(2, \"div\", 3)(3, \"div\", 4);\n i0.ɵɵlistener(\"click\", function MatRadioButton_Template_div_click_3_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onTouchTargetClick($event));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"input\", 5, 1);\n i0.ɵɵlistener(\"change\", function MatRadioButton_Template_input_change_4_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onInputInteraction($event));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(6, \"div\", 6);\n i0.ɵɵelement(7, \"div\", 7)(8, \"div\", 8);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(9, \"div\", 9);\n i0.ɵɵelement(10, \"div\", 10);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(11, \"label\", 11);\n i0.ɵɵprojection(12);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"labelPosition\", ctx.labelPosition);\n i0.ɵɵadvance(2);\n i0.ɵɵclassProp(\"mdc-radio--disabled\", ctx.disabled);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"id\", ctx.inputId)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"required\", ctx.required);\n i0.ɵɵattribute(\"name\", ctx.name)(\"value\", ctx.value)(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby);\n i0.ɵɵadvance(5);\n i0.ɵɵproperty(\"matRippleTrigger\", ctx._rippleTrigger.nativeElement)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", true);\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"for\", ctx.inputId);\n }\n },\n dependencies: [MatRipple, _MatInternalFormField],\n styles: [\".mat-mdc-radio-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-radio-button .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mdc-radio-state-layer-size) - 20px)/2)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:not([disabled]):not(:focus)~.mdc-radio__background::before{opacity:.04;transform:scale(1)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:not([disabled])~.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-hover-icon-color)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-hover-icon-color)}.mat-mdc-radio-button .mdc-radio:active .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-pressed-icon-color)}.mat-mdc-radio-button .mdc-radio:active .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio:active .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-pressed-icon-color)}.mat-mdc-radio-button .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-radio-button .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mdc-radio-state-layer-size);height:var(--mdc-radio-state-layer-size);top:calc(-1*(var(--mdc-radio-state-layer-size) - 20px)/2);left:calc(-1*(var(--mdc-radio-state-layer-size) - 20px)/2)}.mat-mdc-radio-button .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-radio-button .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-radio-button .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mdc-radio-state-layer-size);height:var(--mdc-radio-state-layer-size)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:focus+.mdc-radio__background::before{transform:scale(1);opacity:.12;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-unselected-icon-color);opacity:var(--mdc-radio-disabled-unselected-icon-opacity)}.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-selected-icon-color);opacity:var(--mdc-radio-disabled-selected-icon-opacity)}.mat-mdc-radio-button .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-icon-color)}.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-icon-color)}.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio__native-control:enabled:focus:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-selected-focus-icon-color)}.mat-mdc-radio-button .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-radio-button .mdc-radio--disabled{cursor:default;pointer-events:none}.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-radio-button .mdc-radio__background::before{background-color:var(--mat-radio-ripple-color)}.mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background::before{background-color:var(--mat-radio-checked-ripple-color)}.mat-mdc-radio-button.mat-mdc-radio-checked .mat-ripple-element{background-color:var(--mat-radio-checked-ripple-color)}.mat-mdc-radio-button .mat-internal-form-field{color:var(--mat-radio-label-text-color);font-family:var(--mat-radio-label-text-font);line-height:var(--mat-radio-label-text-line-height);font-size:var(--mat-radio-label-text-size);letter-spacing:var(--mat-radio-label-text-tracking);font-weight:var(--mat-radio-label-text-weight)}.mat-mdc-radio-button .mdc-radio--disabled+label{color:var(--mat-radio-disabled-label-color)}.mat-mdc-radio-button .mat-radio-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:50%}.mat-mdc-radio-button .mat-radio-ripple .mat-ripple-element{opacity:.14}.mat-mdc-radio-button .mat-radio-ripple::before{border-radius:50%}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:focus:enabled:not(:checked)~.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-focus-icon-color, black)}.mat-mdc-radio-button.cdk-focused .mat-mdc-focus-indicator::before{content:\\\"\\\"}.mat-mdc-radio-touch-target{position:absolute;top:50%;left:50%;height:48px;width:48px;transform:translate(-50%, -50%);display:var(--mat-radio-touch-target-display)}[dir=rtl] .mat-mdc-radio-touch-target{left:auto;right:50%;transform:translate(50%, -50%)}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatRadioButton;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatRadioModule = /*#__PURE__*/(() => {\n class MatRadioModule {\n static {\n this.ɵfac = function MatRadioModule_Factory(ɵt) {\n return new (ɵt || MatRadioModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatRadioModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CommonModule, MatRippleModule, MatRadioButton, MatCommonModule]\n });\n }\n }\n return MatRadioModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, Input, Directive, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Injection token that can be used to provide the default options the card module. */\nconst _c0 = [\"*\"];\nconst _c1 = [[[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"], [\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"], [\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"], [\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"], [\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]], \"*\"];\nconst _c2 = [\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"[mat-card-image], [matCardImage],\\n [mat-card-sm-image], [matCardImageSmall],\\n [mat-card-md-image], [matCardImageMedium],\\n [mat-card-lg-image], [matCardImageLarge],\\n [mat-card-xl-image], [matCardImageXLarge]\", \"*\"];\nconst _c3 = [[[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], [[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], \"*\"];\nconst _c4 = [\"[mat-card-avatar], [matCardAvatar]\", \"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"*\"];\nconst MAT_CARD_CONFIG = /*#__PURE__*/new InjectionToken('MAT_CARD_CONFIG');\n/**\n * Material Design card component. Cards contain content and actions about a single subject.\n * See https://material.io/design/components/cards.html\n *\n * MatCard provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCard = /*#__PURE__*/(() => {\n class MatCard {\n constructor(config) {\n this.appearance = config?.appearance || 'raised';\n }\n static {\n this.ɵfac = function MatCard_Factory(ɵt) {\n return new (ɵt || MatCard)(i0.ɵɵdirectiveInject(MAT_CARD_CONFIG, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCard,\n selectors: [[\"mat-card\"]],\n hostAttrs: [1, \"mat-mdc-card\", \"mdc-card\"],\n hostVars: 4,\n hostBindings: function MatCard_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-outlined\", ctx.appearance === \"outlined\")(\"mdc-card--outlined\", ctx.appearance === \"outlined\");\n }\n },\n inputs: {\n appearance: \"appearance\"\n },\n exportAs: [\"matCard\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MatCard_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\".mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mdc-elevated-card-container-color);border-color:var(--mdc-elevated-card-container-color);border-radius:var(--mdc-elevated-card-container-shape);box-shadow:var(--mdc-elevated-card-container-elevation)}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:\\\"\\\";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mdc-elevated-card-container-shape)}.mat-mdc-card-outlined{background-color:var(--mdc-outlined-card-container-color);border-radius:var(--mdc-outlined-card-container-shape);border-width:var(--mdc-outlined-card-outline-width);border-color:var(--mdc-outlined-card-outline-color);box-shadow:var(--mdc-outlined-card-container-elevation)}.mat-mdc-card-outlined::after{border:none}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:\\\"\\\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font);line-height:var(--mat-card-title-text-line-height);font-size:var(--mat-card-title-text-size);letter-spacing:var(--mat-card-title-text-tracking);font-weight:var(--mat-card-title-text-weight)}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color);font-family:var(--mat-card-subtitle-text-font);line-height:var(--mat-card-subtitle-text-line-height);font-size:var(--mat-card-subtitle-text-size);letter-spacing:var(--mat-card-subtitle-text-tracking);font-weight:var(--mat-card-subtitle-text-weight)}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCard;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): add `MatActionCard`, which is a card that acts like a button (and has a ripple).\n// Supported in MDC with `.mdc-card__primary-action`. Will require additional a11y docs for users.\n/**\n * Title of a card, intended for use within ``. This component is an optional\n * convenience for one variety of card title; any custom title element may be used in its place.\n *\n * MatCardTitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardTitle = /*#__PURE__*/(() => {\n class MatCardTitle {\n static {\n this.ɵfac = function MatCardTitle_Factory(ɵt) {\n return new (ɵt || MatCardTitle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardTitle,\n selectors: [[\"mat-card-title\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"matCardTitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-title\"],\n standalone: true\n });\n }\n }\n return MatCardTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container intended to be used within the `` component. Can contain exactly one\n * ``, one `` and one content image of any size\n * (e.g. ` `).\n */\nlet MatCardTitleGroup = /*#__PURE__*/(() => {\n class MatCardTitleGroup {\n static {\n this.ɵfac = function MatCardTitleGroup_Factory(ɵt) {\n return new (ɵt || MatCardTitleGroup)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardTitleGroup,\n selectors: [[\"mat-card-title-group\"]],\n hostAttrs: [1, \"mat-mdc-card-title-group\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c2,\n decls: 4,\n vars: 0,\n template: function MatCardTitleGroup_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵelementStart(0, \"div\");\n i0.ɵɵprojection(1);\n i0.ɵɵelementEnd();\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCardTitleGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Content of a card, intended for use within ``. This component is an optional\n * convenience for use with other convenience elements, such as ``; any custom\n * content block element may be used in its place.\n *\n * MatCardContent provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardContent = /*#__PURE__*/(() => {\n class MatCardContent {\n static {\n this.ɵfac = function MatCardContent_Factory(ɵt) {\n return new (ɵt || MatCardContent)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardContent,\n selectors: [[\"mat-card-content\"]],\n hostAttrs: [1, \"mat-mdc-card-content\"],\n standalone: true\n });\n }\n }\n return MatCardContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Sub-title of a card, intended for use within `` beneath a ``. This\n * component is an optional convenience for use with other convenience elements, such as\n * ``.\n *\n * MatCardSubtitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardSubtitle = /*#__PURE__*/(() => {\n class MatCardSubtitle {\n static {\n this.ɵfac = function MatCardSubtitle_Factory(ɵt) {\n return new (ɵt || MatCardSubtitle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSubtitle,\n selectors: [[\"mat-card-subtitle\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-subtitle\"],\n standalone: true\n });\n }\n }\n return MatCardSubtitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Bottom area of a card that contains action buttons, intended for use within ``.\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom action block element may be used in its place.\n *\n * MatCardActions provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardActions = /*#__PURE__*/(() => {\n class MatCardActions {\n constructor() {\n // TODO(jelbourn): deprecate `align` in favor of `actionPosition` or `actionAlignment`\n // as to not conflict with the native `align` attribute.\n /** Position of the actions inside the card. */\n this.align = 'start';\n }\n static {\n this.ɵfac = function MatCardActions_Factory(ɵt) {\n return new (ɵt || MatCardActions)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardActions,\n selectors: [[\"mat-card-actions\"]],\n hostAttrs: [1, \"mat-mdc-card-actions\", \"mdc-card__actions\"],\n hostVars: 2,\n hostBindings: function MatCardActions_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-mdc-card-actions-align-end\", ctx.align === \"end\");\n }\n },\n inputs: {\n align: \"align\"\n },\n exportAs: [\"matCardActions\"],\n standalone: true\n });\n }\n }\n return MatCardActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header region of a card, intended for use within ``. This header captures\n * a card title, subtitle, and avatar. This component is an optional convenience for use with\n * other convenience elements, such as ``; any custom header block element may be\n * used in its place.\n *\n * MatCardHeader provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardHeader = /*#__PURE__*/(() => {\n class MatCardHeader {\n static {\n this.ɵfac = function MatCardHeader_Factory(ɵt) {\n return new (ɵt || MatCardHeader)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCardHeader,\n selectors: [[\"mat-card-header\"]],\n hostAttrs: [1, \"mat-mdc-card-header\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c4,\n decls: 4,\n vars: 0,\n consts: [[1, \"mat-mdc-card-header-text\"]],\n template: function MatCardHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c3);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"div\", 0);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵelementEnd();\n i0.ɵɵprojection(3, 2);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCardHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer area a card, intended for use within ``.\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom footer block element may be used in its place.\n *\n * MatCardFooter provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardFooter = /*#__PURE__*/(() => {\n class MatCardFooter {\n static {\n this.ɵfac = function MatCardFooter_Factory(ɵt) {\n return new (ɵt || MatCardFooter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardFooter,\n selectors: [[\"mat-card-footer\"]],\n hostAttrs: [1, \"mat-mdc-card-footer\"],\n standalone: true\n });\n }\n }\n return MatCardFooter;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): deprecate the \"image\" selectors to replace with \"media\".\n// TODO(jelbourn): support `.mdc-card__media-content`.\n/**\n * Primary image content for a card, intended for use within ``. Can be applied to\n * any media element, such as ` ` or ``.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom media element may be used in its place.\n *\n * MatCardImage provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardImage = /*#__PURE__*/(() => {\n class MatCardImage {\n static {\n this.ɵfac = function MatCardImage_Factory(ɵt) {\n return new (ɵt || MatCardImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardImage,\n selectors: [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but small. */\nlet MatCardSmImage = /*#__PURE__*/(() => {\n class MatCardSmImage {\n static {\n this.ɵfac = function MatCardSmImage_Factory(ɵt) {\n return new (ɵt || MatCardSmImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardSmImage,\n selectors: [[\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-sm-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardSmImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but medium. */\nlet MatCardMdImage = /*#__PURE__*/(() => {\n class MatCardMdImage {\n static {\n this.ɵfac = function MatCardMdImage_Factory(ɵt) {\n return new (ɵt || MatCardMdImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardMdImage,\n selectors: [[\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-md-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardMdImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but large. */\nlet MatCardLgImage = /*#__PURE__*/(() => {\n class MatCardLgImage {\n static {\n this.ɵfac = function MatCardLgImage_Factory(ɵt) {\n return new (ɵt || MatCardLgImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardLgImage,\n selectors: [[\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-lg-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardLgImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but extra-large. */\nlet MatCardXlImage = /*#__PURE__*/(() => {\n class MatCardXlImage {\n static {\n this.ɵfac = function MatCardXlImage_Factory(ɵt) {\n return new (ɵt || MatCardXlImage)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardXlImage,\n selectors: [[\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-xl-image\", \"mdc-card__media\"],\n standalone: true\n });\n }\n }\n return MatCardXlImage;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Avatar image content for a card, intended for use within ``. Can be applied to\n * any media element, such as ` ` or ``.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * ``; any custom media element may be used in its place.\n *\n * MatCardAvatar provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardAvatar = /*#__PURE__*/(() => {\n class MatCardAvatar {\n static {\n this.ɵfac = function MatCardAvatar_Factory(ɵt) {\n return new (ɵt || MatCardAvatar)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCardAvatar,\n selectors: [[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]],\n hostAttrs: [1, \"mat-mdc-card-avatar\"],\n standalone: true\n });\n }\n }\n return MatCardAvatar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CARD_DIRECTIVES = [MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage];\nlet MatCardModule = /*#__PURE__*/(() => {\n class MatCardModule {\n static {\n this.ɵfac = function MatCardModule_Factory(ɵt) {\n return new (ɵt || MatCardModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatCardModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CommonModule, MatCommonModule]\n });\n }\n }\n return MatCardModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CARD_CONFIG, MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, ANIMATION_MODULE_TYPE, booleanAttribute, numberAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, Attribute, Optional, Inject, Input, Output, ViewChild, Directive, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator } from '@angular/forms';\nimport { MatRipple, _MatInternalFormField, MatCommonModule } from '@angular/material/core';\n\n/** Injection token to be used to override the default options for `mat-checkbox`. */\nconst _c0 = [\"input\"];\nconst _c1 = [\"label\"];\nconst _c2 = [\"*\"];\nconst MAT_CHECKBOX_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-checkbox-default-options', {\n providedIn: 'root',\n factory: MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\nfunction MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent',\n clickAction: 'check-indeterminate'\n };\n}\n\n/**\n * Represents the different states that require custom transitions between them.\n * @docs-private\n */\nvar TransitionCheckState = /*#__PURE__*/function (TransitionCheckState) {\n /** The initial state of the component before any user interaction. */\n TransitionCheckState[TransitionCheckState[\"Init\"] = 0] = \"Init\";\n /** The state representing the component when it's becoming checked. */\n TransitionCheckState[TransitionCheckState[\"Checked\"] = 1] = \"Checked\";\n /** The state representing the component when it's becoming unchecked. */\n TransitionCheckState[TransitionCheckState[\"Unchecked\"] = 2] = \"Unchecked\";\n /** The state representing the component when it's becoming indeterminate. */\n TransitionCheckState[TransitionCheckState[\"Indeterminate\"] = 3] = \"Indeterminate\";\n return TransitionCheckState;\n}(TransitionCheckState || {});\n/**\n * @deprecated Will stop being exported.\n * @breaking-change 19.0.0\n */\nconst MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: /*#__PURE__*/forwardRef(() => MatCheckbox),\n multi: true\n};\n/** Change event object emitted by checkbox. */\nclass MatCheckboxChange {}\n// Increasing integer for generating unique ids for checkbox components.\nlet nextUniqueId = 0;\n// Default checkbox configuration.\nconst defaults = /*#__PURE__*/MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY();\nlet MatCheckbox = /*#__PURE__*/(() => {\n class MatCheckbox {\n /** Focuses the checkbox. */\n focus() {\n this._inputElement.nativeElement.focus();\n }\n /** Creates the change event that will be emitted by the checkbox. */\n _createChangeEvent(isChecked) {\n const event = new MatCheckboxChange();\n event.source = this;\n event.checked = isChecked;\n return event;\n }\n /** Gets the element on which to add the animation CSS classes. */\n _getAnimationTargetElement() {\n return this._inputElement?.nativeElement;\n }\n /** Returns the unique id for the visual hidden input. */\n get inputId() {\n return `${this.id || this._uniqueId}-input`;\n }\n constructor(_elementRef, _changeDetectorRef, _ngZone, tabIndex, _animationMode, _options) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._options = _options;\n /** CSS classes to add when transitioning between the different checkbox states. */\n this._animationClasses = {\n uncheckedToChecked: 'mdc-checkbox--anim-unchecked-checked',\n uncheckedToIndeterminate: 'mdc-checkbox--anim-unchecked-indeterminate',\n checkedToUnchecked: 'mdc-checkbox--anim-checked-unchecked',\n checkedToIndeterminate: 'mdc-checkbox--anim-checked-indeterminate',\n indeterminateToChecked: 'mdc-checkbox--anim-indeterminate-checked',\n indeterminateToUnchecked: 'mdc-checkbox--anim-indeterminate-unchecked'\n };\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n this.ariaLabel = '';\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n this.ariaLabelledby = null;\n /** Whether the label should appear after or before the checkbox. Defaults to 'after' */\n this.labelPosition = 'after';\n /** Name value will be applied to the input element if present */\n this.name = null;\n /** Event emitted when the checkbox's `checked` value changes. */\n this.change = new EventEmitter();\n /** Event emitted when the checkbox's `indeterminate` value changes. */\n this.indeterminateChange = new EventEmitter();\n /**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * @docs-private\n */\n this._onTouched = () => {};\n this._currentAnimationClass = '';\n this._currentCheckState = TransitionCheckState.Init;\n this._controlValueAccessorChangeFn = () => {};\n this._validatorChangeFn = () => {};\n this._checked = false;\n this._disabled = false;\n this._indeterminate = false;\n this._options = this._options || defaults;\n this.color = this._options.color || defaults.color;\n this.tabIndex = parseInt(tabIndex) || 0;\n this.id = this._uniqueId = `mat-mdc-checkbox-${++nextUniqueId}`;\n }\n ngOnChanges(changes) {\n if (changes['required']) {\n this._validatorChangeFn();\n }\n }\n ngAfterViewInit() {\n this._syncIndeterminate(this._indeterminate);\n }\n /** Whether the checkbox is checked. */\n get checked() {\n return this._checked;\n }\n set checked(value) {\n if (value != this.checked) {\n this._checked = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the checkbox is disabled. */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n if (value !== this.disabled) {\n this._disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Whether the checkbox is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n */\n get indeterminate() {\n return this._indeterminate;\n }\n set indeterminate(value) {\n const changed = value != this._indeterminate;\n this._indeterminate = value;\n if (changed) {\n if (this._indeterminate) {\n this._transitionCheckState(TransitionCheckState.Indeterminate);\n } else {\n this._transitionCheckState(this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n }\n this.indeterminateChange.emit(this._indeterminate);\n }\n this._syncIndeterminate(this._indeterminate);\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the checkbox\n // component will be only marked for check, but no actual change detection runs automatically.\n // Instead of going back into the zone in order to trigger a change detection which causes\n // *all* components to be checked (if explicitly marked or not using OnPush), we only trigger\n // an explicit change detection for the checkbox view and its children.\n this._changeDetectorRef.detectChanges();\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n this.checked = !!value;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n // Implemented as a part of Validator.\n validate(control) {\n return this.required && control.value !== true ? {\n 'required': true\n } : null;\n }\n // Implemented as a part of Validator.\n registerOnValidatorChange(fn) {\n this._validatorChangeFn = fn;\n }\n _transitionCheckState(newState) {\n let oldState = this._currentCheckState;\n let element = this._getAnimationTargetElement();\n if (oldState === newState || !element) {\n return;\n }\n if (this._currentAnimationClass) {\n element.classList.remove(this._currentAnimationClass);\n }\n this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(oldState, newState);\n this._currentCheckState = newState;\n if (this._currentAnimationClass.length > 0) {\n element.classList.add(this._currentAnimationClass);\n // Remove the animation class to avoid animation when the checkbox is moved between containers\n const animationClass = this._currentAnimationClass;\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n element.classList.remove(animationClass);\n }, 1000);\n });\n }\n }\n _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.checked);\n this.change.emit(this._createChangeEvent(this.checked));\n // Assigning the value again here is redundant, but we have to do it in case it was\n // changed inside the `change` listener which will cause the input to be out of sync.\n if (this._inputElement) {\n this._inputElement.nativeElement.checked = this.checked;\n }\n }\n /** Toggles the `checked` state of the checkbox. */\n toggle() {\n this.checked = !this.checked;\n this._controlValueAccessorChangeFn(this.checked);\n }\n _handleInputClick() {\n const clickAction = this._options?.clickAction;\n // If resetIndeterminate is false, and the current state is indeterminate, do nothing on click\n if (!this.disabled && clickAction !== 'noop') {\n // When user manually click on the checkbox, `indeterminate` is set to false.\n if (this.indeterminate && clickAction !== 'check') {\n Promise.resolve().then(() => {\n this._indeterminate = false;\n this.indeterminateChange.emit(this._indeterminate);\n });\n }\n this._checked = !this._checked;\n this._transitionCheckState(this._checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this._emitChangeEvent();\n } else if (!this.disabled && clickAction === 'noop') {\n // Reset native input when clicked with noop. The native checkbox becomes checked after\n // click, reset it to be align with `checked` value of `mat-checkbox`.\n this._inputElement.nativeElement.checked = this.checked;\n this._inputElement.nativeElement.indeterminate = this.indeterminate;\n }\n }\n _onInteractionEvent(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n }\n _onBlur() {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state change\n // (such as a form control's 'ng-touched') will cause a changed-after-checked error.\n // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n // telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n });\n }\n _getAnimationClassForCheckStateTransition(oldState, newState) {\n // Don't transition if animations are disabled.\n if (this._animationMode === 'NoopAnimations') {\n return '';\n }\n switch (oldState) {\n case TransitionCheckState.Init:\n // Handle edge case where user interacts with checkbox that does not have [(ngModel)] or\n // [checked] bound to it.\n if (newState === TransitionCheckState.Checked) {\n return this._animationClasses.uncheckedToChecked;\n } else if (newState == TransitionCheckState.Indeterminate) {\n return this._checked ? this._animationClasses.checkedToIndeterminate : this._animationClasses.uncheckedToIndeterminate;\n }\n break;\n case TransitionCheckState.Unchecked:\n return newState === TransitionCheckState.Checked ? this._animationClasses.uncheckedToChecked : this._animationClasses.uncheckedToIndeterminate;\n case TransitionCheckState.Checked:\n return newState === TransitionCheckState.Unchecked ? this._animationClasses.checkedToUnchecked : this._animationClasses.checkedToIndeterminate;\n case TransitionCheckState.Indeterminate:\n return newState === TransitionCheckState.Checked ? this._animationClasses.indeterminateToChecked : this._animationClasses.indeterminateToUnchecked;\n }\n return '';\n }\n /**\n * Syncs the indeterminate value with the checkbox DOM node.\n *\n * We sync `indeterminate` directly on the DOM node, because in Ivy the check for whether a\n * property is supported on an element boils down to `if (propName in element)`. Domino's\n * HTMLInputElement doesn't have an `indeterminate` property so Ivy will warn during\n * server-side rendering.\n */\n _syncIndeterminate(value) {\n const nativeCheckbox = this._inputElement;\n if (nativeCheckbox) {\n nativeCheckbox.nativeElement.indeterminate = value;\n }\n }\n _onInputClick() {\n this._handleInputClick();\n }\n _onTouchTargetClick() {\n this._handleInputClick();\n if (!this.disabled) {\n // Normally the input should be focused already, but if the click\n // comes from the touch target, then we might have to focus it ourselves.\n this._inputElement.nativeElement.focus();\n }\n }\n /**\n * Prevent click events that come from the ` ` element from bubbling. This prevents the\n * click handler on the host from triggering twice when clicking on the ` ` element. After\n * the click event on the ` ` propagates, the browsers dispatches click on the associated\n * ` `. By preventing clicks on the label by bubbling, we ensure only one click event\n * bubbles when the label is clicked.\n */\n _preventBubblingFromLabel(event) {\n if (!!event.target && this._labelElement.nativeElement.contains(event.target)) {\n event.stopPropagation();\n }\n }\n static {\n this.ɵfac = function MatCheckbox_Factory(ɵt) {\n return new (ɵt || MatCheckbox)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵinjectAttribute('tabindex'), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_CHECKBOX_DEFAULT_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatCheckbox,\n selectors: [[\"mat-checkbox\"]],\n viewQuery: function MatCheckbox_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n i0.ɵɵviewQuery(_c1, 5);\n i0.ɵɵviewQuery(MatRipple, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._labelElement = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ripple = _t.first);\n }\n },\n hostAttrs: [1, \"mat-mdc-checkbox\"],\n hostVars: 14,\n hostBindings: function MatCheckbox_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"id\", ctx.id);\n i0.ɵɵattribute(\"tabindex\", null)(\"aria-label\", null)(\"aria-labelledby\", null);\n i0.ɵɵclassMap(ctx.color ? \"mat-\" + ctx.color : \"mat-accent\");\n i0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mdc-checkbox--disabled\", ctx.disabled)(\"mat-mdc-checkbox-disabled\", ctx.disabled)(\"mat-mdc-checkbox-checked\", ctx.checked);\n }\n },\n inputs: {\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n ariaDescribedby: [0, \"aria-describedby\", \"ariaDescribedby\"],\n id: \"id\",\n required: [2, \"required\", \"required\", booleanAttribute],\n labelPosition: \"labelPosition\",\n name: \"name\",\n value: \"value\",\n disableRipple: [2, \"disableRipple\", \"disableRipple\", booleanAttribute],\n tabIndex: [2, \"tabIndex\", \"tabIndex\", value => value == null ? undefined : numberAttribute(value)],\n color: \"color\",\n checked: [2, \"checked\", \"checked\", booleanAttribute],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute],\n indeterminate: [2, \"indeterminate\", \"indeterminate\", booleanAttribute]\n },\n outputs: {\n change: \"change\",\n indeterminateChange: \"indeterminateChange\"\n },\n exportAs: [\"matCheckbox\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR, {\n provide: NG_VALIDATORS,\n useExisting: MatCheckbox,\n multi: true\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c2,\n decls: 15,\n vars: 19,\n consts: [[\"checkbox\", \"\"], [\"input\", \"\"], [\"label\", \"\"], [\"mat-internal-form-field\", \"\", 3, \"click\", \"labelPosition\"], [1, \"mdc-checkbox\"], [1, \"mat-mdc-checkbox-touch-target\", 3, \"click\"], [\"type\", \"checkbox\", 1, \"mdc-checkbox__native-control\", 3, \"blur\", \"click\", \"change\", \"checked\", \"indeterminate\", \"disabled\", \"id\", \"required\", \"tabIndex\"], [1, \"mdc-checkbox__ripple\"], [1, \"mdc-checkbox__background\"], [\"focusable\", \"false\", \"viewBox\", \"0 0 24 24\", \"aria-hidden\", \"true\", 1, \"mdc-checkbox__checkmark\"], [\"fill\", \"none\", \"d\", \"M1.73,12.91 8.1,19.28 22.79,4.59\", 1, \"mdc-checkbox__checkmark-path\"], [1, \"mdc-checkbox__mixedmark\"], [\"mat-ripple\", \"\", 1, \"mat-mdc-checkbox-ripple\", \"mat-mdc-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\"], [1, \"mdc-label\", 3, \"for\"]],\n template: function MatCheckbox_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 3);\n i0.ɵɵlistener(\"click\", function MatCheckbox_Template_div_click_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._preventBubblingFromLabel($event));\n });\n i0.ɵɵelementStart(1, \"div\", 4, 0)(3, \"div\", 5);\n i0.ɵɵlistener(\"click\", function MatCheckbox_Template_div_click_3_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onTouchTargetClick());\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"input\", 6, 1);\n i0.ɵɵlistener(\"blur\", function MatCheckbox_Template_input_blur_4_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onBlur());\n })(\"click\", function MatCheckbox_Template_input_click_4_listener() {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onInputClick());\n })(\"change\", function MatCheckbox_Template_input_change_4_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._onInteractionEvent($event));\n });\n i0.ɵɵelementEnd();\n i0.ɵɵelement(6, \"div\", 7);\n i0.ɵɵelementStart(7, \"div\", 8);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(8, \"svg\", 9);\n i0.ɵɵelement(9, \"path\", 10);\n i0.ɵɵelementEnd();\n i0.ɵɵnamespaceHTML();\n i0.ɵɵelement(10, \"div\", 11);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(11, \"div\", 12);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(12, \"label\", 13, 2);\n i0.ɵɵprojection(14);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const checkbox_r2 = i0.ɵɵreference(2);\n i0.ɵɵproperty(\"labelPosition\", ctx.labelPosition);\n i0.ɵɵadvance(4);\n i0.ɵɵclassProp(\"mdc-checkbox--selected\", ctx.checked);\n i0.ɵɵproperty(\"checked\", ctx.checked)(\"indeterminate\", ctx.indeterminate)(\"disabled\", ctx.disabled)(\"id\", ctx.inputId)(\"required\", ctx.required)(\"tabIndex\", ctx.disabled ? -1 : ctx.tabIndex);\n i0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-describedby\", ctx.ariaDescribedby)(\"aria-checked\", ctx.indeterminate ? \"mixed\" : null)(\"name\", ctx.name)(\"value\", ctx.value);\n i0.ɵɵadvance(7);\n i0.ɵɵproperty(\"matRippleTrigger\", checkbox_r2)(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleCentered\", true);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"for\", ctx.inputId);\n }\n },\n dependencies: [MatRipple, _MatInternalFormField],\n styles: [\".mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox:hover .mdc-checkbox__ripple{opacity:var(--mdc-checkbox-unselected-hover-state-layer-opacity);background-color:var(--mdc-checkbox-unselected-hover-state-layer-color)}.mdc-checkbox:hover .mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-unselected-hover-state-layer-color)}.mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__ripple{opacity:var(--mdc-checkbox-unselected-focus-state-layer-opacity);background-color:var(--mdc-checkbox-unselected-focus-state-layer-color)}.mdc-checkbox .mdc-checkbox__native-control:focus~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-unselected-focus-state-layer-color)}.mdc-checkbox:active .mdc-checkbox__native-control~.mdc-checkbox__ripple{opacity:var(--mdc-checkbox-unselected-pressed-state-layer-opacity);background-color:var(--mdc-checkbox-unselected-pressed-state-layer-color)}.mdc-checkbox:active .mdc-checkbox__native-control~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-unselected-pressed-state-layer-color)}.mdc-checkbox:hover .mdc-checkbox__native-control:checked~.mdc-checkbox__ripple{opacity:var(--mdc-checkbox-selected-hover-state-layer-opacity);background-color:var(--mdc-checkbox-selected-hover-state-layer-color)}.mdc-checkbox:hover .mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-selected-hover-state-layer-color)}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mdc-checkbox__ripple{opacity:var(--mdc-checkbox-selected-focus-state-layer-opacity);background-color:var(--mdc-checkbox-selected-focus-state-layer-color)}.mdc-checkbox .mdc-checkbox__native-control:focus:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-selected-focus-state-layer-color)}.mdc-checkbox:active .mdc-checkbox__native-control:checked~.mdc-checkbox__ripple{opacity:var(--mdc-checkbox-selected-pressed-state-layer-opacity);background-color:var(--mdc-checkbox-selected-pressed-state-layer-color)}.mdc-checkbox:active .mdc-checkbox__native-control:checked~.mat-mdc-checkbox-ripple .mat-ripple-element{background-color:var(--mdc-checkbox-selected-pressed-state-layer-color)}.mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;width:var(--mdc-checkbox-state-layer-size, 40px);height:var(--mdc-checkbox-state-layer-size, 40px);top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px))/2);right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px))/2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px))/2)}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mdc-checkbox-unselected-icon-color);top:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px)/2)}.mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-icon-color);background-color:var(--mdc-checkbox-selected-icon-color)}.mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mdc-checkbox-disabled-unselected-icon-color)}.mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mdc-checkbox-disabled-selected-icon-color);border-color:rgba(0,0,0,0)}.mdc-checkbox:hover .mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mdc-checkbox:hover .mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-hover-icon-color);background-color:rgba(0,0,0,0)}.mdc-checkbox:hover .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox:hover .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-hover-icon-color);background-color:var(--mdc-checkbox-selected-hover-icon-color)}.mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-focus-icon-color)}.mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-focus-icon-color);background-color:var(--mdc-checkbox-selected-focus-icon-color)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mdc-checkbox-selected-checkmark-color)}.mdc-checkbox--disabled .mdc-checkbox__checkmark{color:var(--mdc-checkbox-disabled-selected-checkmark-color)}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mdc-checkbox-selected-checkmark-color)}.cdk-high-contrast-active .mdc-checkbox__mixedmark{margin:0 1px}.mdc-checkbox--disabled .mdc-checkbox__mixedmark{border-color:var(--mdc-checkbox-disabled-selected-checkmark-color)}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox._mat-animation-noopable .mdc-checkbox *,.mat-mdc-checkbox._mat-animation-noopable .mdc-checkbox *::before{transition:none !important;animation:none !important}.mat-mdc-checkbox .mdc-checkbox__background{-webkit-print-color-adjust:exact;color-adjust:exact}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox .mat-internal-form-field{color:var(--mat-checkbox-label-text-color);font-family:var(--mat-checkbox-label-text-font);line-height:var(--mat-checkbox-label-text-line-height);font-size:var(--mat-checkbox-label-text-size);letter-spacing:var(--mat-checkbox-label-text-tracking);font-weight:var(--mat-checkbox-label-text-weight)}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default;color:var(--mat-checkbox-disabled-label-color)}.mat-mdc-checkbox label:empty{display:none}.cdk-high-contrast-active .mat-mdc-checkbox.mat-mdc-checkbox-disabled{opacity:.5}.cdk-high-contrast-active .mat-mdc-checkbox .mdc-checkbox__checkmark{--mdc-checkbox-selected-checkmark-color: CanvasText;--mdc-checkbox-disabled-selected-checkmark-color: CanvasText}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-ripple .mat-ripple-element{opacity:.1}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;left:50%;height:48px;width:48px;transform:translate(-50%, -50%);display:var(--mat-checkbox-touch-target-display)}.mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus~.mat-mdc-focus-indicator::before{content:\\\"\\\"}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatCheckbox;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @deprecated No longer used, `MatCheckbox` implements required validation directly.\n * @breaking-change 19.0.0\n */\nconst MAT_CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: /*#__PURE__*/forwardRef(() => MatCheckboxRequiredValidator),\n multi: true\n};\n/**\n * Validator for Material checkbox's required attribute in template-driven checkbox.\n * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not\n * work with `mat-checkbox`.\n *\n * @deprecated No longer used, `MatCheckbox` implements required validation directly.\n * @breaking-change 19.0.0\n */\nlet MatCheckboxRequiredValidator = /*#__PURE__*/(() => {\n class MatCheckboxRequiredValidator extends CheckboxRequiredValidator {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatCheckboxRequiredValidator_BaseFactory;\n return function MatCheckboxRequiredValidator_Factory(ɵt) {\n return (ɵMatCheckboxRequiredValidator_BaseFactory || (ɵMatCheckboxRequiredValidator_BaseFactory = i0.ɵɵgetInheritedFactory(MatCheckboxRequiredValidator)))(ɵt || MatCheckboxRequiredValidator);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatCheckboxRequiredValidator,\n selectors: [[\"mat-checkbox\", \"required\", \"\", \"formControlName\", \"\"], [\"mat-checkbox\", \"required\", \"\", \"formControl\", \"\"], [\"mat-checkbox\", \"required\", \"\", \"ngModel\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([MAT_CHECKBOX_REQUIRED_VALIDATOR]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatCheckboxRequiredValidator;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @deprecated No longer used, `MatCheckbox` implements required validation directly.\n * @breaking-change 19.0.0\n */\nlet _MatCheckboxRequiredValidatorModule = /*#__PURE__*/(() => {\n class _MatCheckboxRequiredValidatorModule {\n static {\n this.ɵfac = function _MatCheckboxRequiredValidatorModule_Factory(ɵt) {\n return new (ɵt || _MatCheckboxRequiredValidatorModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: _MatCheckboxRequiredValidatorModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return _MatCheckboxRequiredValidatorModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatCheckboxModule = /*#__PURE__*/(() => {\n class MatCheckboxModule {\n static {\n this.ɵfac = function MatCheckboxModule_Factory(ɵt) {\n return new (ɵt || MatCheckboxModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatCheckboxModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCheckbox, MatCommonModule, MatCommonModule]\n });\n }\n }\n return MatCheckboxModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR, MAT_CHECKBOX_DEFAULT_OPTIONS, MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY, MAT_CHECKBOX_REQUIRED_VALIDATOR, MatCheckbox, MatCheckboxChange, MatCheckboxModule, MatCheckboxRequiredValidator, TransitionCheckState, _MatCheckboxRequiredValidatorModule };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, inject, ViewChild, Injector, TemplateRef, Injectable, Optional, SkipSelf, NgModule } from '@angular/core';\nimport { MatButton, MatButtonModule } from '@angular/material/button';\nimport { Subject } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport * as i1 from '@angular/cdk/platform';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/layout';\nimport { Breakpoints } from '@angular/cdk/layout';\nimport * as i1$1 from '@angular/cdk/overlay';\nimport { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { takeUntil } from 'rxjs/operators';\nimport { MatCommonModule } from '@angular/material/core';\n\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\nfunction SimpleSnackBar_Conditional_2_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"button\", 2);\n i0.ɵɵlistener(\"click\", function SimpleSnackBar_Conditional_2_Template_button_click_1_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1.action());\n });\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵtextInterpolate1(\" \", ctx_r1.data.action, \" \");\n }\n}\nconst _c0 = [\"label\"];\nfunction MatSnackBarContainer_ng_template_4_Template(rf, ctx) {}\nconst MAX_TIMEOUT = /*#__PURE__*/Math.pow(2, 31) - 1;\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nclass MatSnackBarRef {\n constructor(containerInstance, _overlayRef) {\n this._overlayRef = _overlayRef;\n /** Subject for notifying the user that the snack bar has been dismissed. */\n this._afterDismissed = new Subject();\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the snack bar action was called. */\n this._onAction = new Subject();\n /** Whether the snack bar was dismissed using the action button. */\n this._dismissedByAction = false;\n this.containerInstance = containerInstance;\n containerInstance._onExit.subscribe(() => this._finishDismiss());\n }\n /** Dismisses the snack bar. */\n dismiss() {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n }\n /** Marks the snackbar action clicked. */\n dismissWithAction() {\n if (!this._onAction.closed) {\n this._dismissedByAction = true;\n this._onAction.next();\n this._onAction.complete();\n this.dismiss();\n }\n clearTimeout(this._durationTimeoutId);\n }\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * @breaking-change 8.0.0\n */\n closeWithAction() {\n this.dismissWithAction();\n }\n /** Dismisses the snack bar after some duration */\n _dismissAfter(duration) {\n // Note that we need to cap the duration to the maximum value for setTimeout, because\n // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n }\n /** Marks the snackbar as opened */\n _open() {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n }\n /** Cleans up the DOM after closing. */\n _finishDismiss() {\n this._overlayRef.dispose();\n if (!this._onAction.closed) {\n this._onAction.complete();\n }\n this._afterDismissed.next({\n dismissedByAction: this._dismissedByAction\n });\n this._afterDismissed.complete();\n this._dismissedByAction = false;\n }\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed() {\n return this._afterDismissed;\n }\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened() {\n return this.containerInstance._onEnter;\n }\n /** Gets an observable that is notified when the snack bar action is called. */\n onAction() {\n return this._onAction;\n }\n}\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nconst MAT_SNACK_BAR_DATA = /*#__PURE__*/new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n */\nclass MatSnackBarConfig {\n constructor() {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n this.politeness = 'assertive';\n /**\n * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n * component or template, the announcement message will default to the specified message.\n */\n this.announcementMessage = '';\n /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n this.duration = 0;\n /** Data being injected into the child component. */\n this.data = null;\n /** The horizontal position to place the snack bar. */\n this.horizontalPosition = 'center';\n /** The vertical position to place the snack bar. */\n this.verticalPosition = 'bottom';\n }\n}\n\n/** Directive that should be applied to the text element to be rendered in the snack bar. */\nlet MatSnackBarLabel = /*#__PURE__*/(() => {\n class MatSnackBarLabel {\n static {\n this.ɵfac = function MatSnackBarLabel_Factory(ɵt) {\n return new (ɵt || MatSnackBarLabel)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarLabel,\n selectors: [[\"\", \"matSnackBarLabel\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-label\", \"mdc-snackbar__label\"],\n standalone: true\n });\n }\n }\n return MatSnackBarLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Directive that should be applied to the element containing the snack bar's action buttons. */\nlet MatSnackBarActions = /*#__PURE__*/(() => {\n class MatSnackBarActions {\n static {\n this.ɵfac = function MatSnackBarActions_Factory(ɵt) {\n return new (ɵt || MatSnackBarActions)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarActions,\n selectors: [[\"\", \"matSnackBarActions\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-actions\", \"mdc-snackbar__actions\"],\n standalone: true\n });\n }\n }\n return MatSnackBarActions;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Directive that should be applied to each of the snack bar's action buttons. */\nlet MatSnackBarAction = /*#__PURE__*/(() => {\n class MatSnackBarAction {\n static {\n this.ɵfac = function MatSnackBarAction_Factory(ɵt) {\n return new (ɵt || MatSnackBarAction)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatSnackBarAction,\n selectors: [[\"\", \"matSnackBarAction\", \"\"]],\n hostAttrs: [1, \"mat-mdc-snack-bar-action\", \"mdc-snackbar__action\"],\n standalone: true\n });\n }\n }\n return MatSnackBarAction;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SimpleSnackBar = /*#__PURE__*/(() => {\n class SimpleSnackBar {\n constructor(snackBarRef, data) {\n this.snackBarRef = snackBarRef;\n this.data = data;\n }\n /** Performs the action on the snack bar. */\n action() {\n this.snackBarRef.dismissWithAction();\n }\n /** If the action button should be shown. */\n get hasAction() {\n return !!this.data.action;\n }\n static {\n this.ɵfac = function SimpleSnackBar_Factory(ɵt) {\n return new (ɵt || SimpleSnackBar)(i0.ɵɵdirectiveInject(MatSnackBarRef), i0.ɵɵdirectiveInject(MAT_SNACK_BAR_DATA));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: SimpleSnackBar,\n selectors: [[\"simple-snack-bar\"]],\n hostAttrs: [1, \"mat-mdc-simple-snack-bar\"],\n exportAs: [\"matSnackBar\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 3,\n vars: 2,\n consts: [[\"matSnackBarLabel\", \"\"], [\"matSnackBarActions\", \"\"], [\"mat-button\", \"\", \"matSnackBarAction\", \"\", 3, \"click\"]],\n template: function SimpleSnackBar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(2, SimpleSnackBar_Conditional_2_Template, 3, 1, \"div\", 1);\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.data.message, \"\\n\");\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.hasAction ? 2 : -1);\n }\n },\n dependencies: [MatButton, MatSnackBarLabel, MatSnackBarActions, MatSnackBarAction],\n styles: [\".mat-mdc-simple-snack-bar{display:flex}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return SimpleSnackBar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\nconst matSnackBarAnimations = {\n /** Animation that shows and hides a snack bar. */\n snackBarState: /*#__PURE__*/trigger('state', [/*#__PURE__*/state('void, hidden', /*#__PURE__*/style({\n transform: 'scale(0.8)',\n opacity: 0\n })), /*#__PURE__*/state('visible', /*#__PURE__*/style({\n transform: 'scale(1)',\n opacity: 1\n })), /*#__PURE__*/transition('* => visible', /*#__PURE__*/animate('150ms cubic-bezier(0, 0, 0.2, 1)')), /*#__PURE__*/transition('* => void, * => hidden', /*#__PURE__*/animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', /*#__PURE__*/style({\n opacity: 0\n })))])\n};\nlet uniqueId = 0;\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\nlet MatSnackBarContainer = /*#__PURE__*/(() => {\n class MatSnackBarContainer extends BasePortalOutlet {\n constructor(_ngZone, _elementRef, _changeDetectorRef, _platform, /** The snack bar configuration. */\n snackBarConfig) {\n super();\n this._ngZone = _ngZone;\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._platform = _platform;\n this.snackBarConfig = snackBarConfig;\n this._document = inject(DOCUMENT);\n this._trackedModals = new Set();\n /** The number of milliseconds to wait before announcing the snack bar's content. */\n this._announceDelay = 150;\n /** Whether the component has been destroyed. */\n this._destroyed = false;\n /** Subject for notifying that the snack bar has announced to screen readers. */\n this._onAnnounce = new Subject();\n /** Subject for notifying that the snack bar has exited from view. */\n this._onExit = new Subject();\n /** Subject for notifying that the snack bar has finished entering the view. */\n this._onEnter = new Subject();\n /** The state of the snack bar animations. */\n this._animationState = 'void';\n /** Unique ID of the aria-live element. */\n this._liveElementId = `mat-snack-bar-container-live-${uniqueId++}`;\n /**\n * Attaches a DOM portal to the snack bar container.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = portal => {\n this._assertNotAttached();\n const result = this._portalOutlet.attachDomPortal(portal);\n this._afterPortalAttached();\n return result;\n };\n // Use aria-live rather than a live role like 'alert' or 'status'\n // because NVDA and JAWS have show inconsistent behavior with live roles.\n if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n this._live = 'assertive';\n } else if (snackBarConfig.politeness === 'off') {\n this._live = 'off';\n } else {\n this._live = 'polite';\n }\n // Only set role for Firefox. Set role based on aria-live because setting role=\"alert\" implies\n // aria-live=\"assertive\" which may cause issues if aria-live is set to \"polite\" above.\n if (this._platform.FIREFOX) {\n if (this._live === 'polite') {\n this._role = 'status';\n }\n if (this._live === 'assertive') {\n this._role = 'alert';\n }\n }\n }\n /** Attach a component portal as content to this snack bar container. */\n attachComponentPortal(portal) {\n this._assertNotAttached();\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._afterPortalAttached();\n return result;\n }\n /** Attach a template portal as content to this snack bar container. */\n attachTemplatePortal(portal) {\n this._assertNotAttached();\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._afterPortalAttached();\n return result;\n }\n /** Handle end of animations, updating the state of the snackbar. */\n onAnimationEnd(event) {\n const {\n fromState,\n toState\n } = event;\n if (toState === 'void' && fromState !== 'void' || toState === 'hidden') {\n this._completeExit();\n }\n if (toState === 'visible') {\n // Note: we shouldn't use `this` inside the zone callback,\n // because it can cause a memory leak.\n const onEnter = this._onEnter;\n this._ngZone.run(() => {\n onEnter.next();\n onEnter.complete();\n });\n }\n }\n /** Begin animation of snack bar entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n // _animationState lives in host bindings and `detectChanges` does not refresh host bindings\n // so we have to call `markForCheck` to ensure the host view is refreshed eventually.\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n this._screenReaderAnnounce();\n }\n }\n /** Begin animation of the snack bar exiting from view. */\n exit() {\n // It's common for snack bars to be opened by random outside calls like HTTP requests or\n // errors. Run inside the NgZone to ensure that it functions correctly.\n this._ngZone.run(() => {\n // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n // `MatSnackBar.open`).\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n // Mark this element with an 'exit' attribute to indicate that the snackbar has\n // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n // test harness.\n this._elementRef.nativeElement.setAttribute('mat-exit', '');\n // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n // long enough to visually read it either, so clear the timeout for announcing.\n clearTimeout(this._announceTimeoutId);\n });\n return this._onExit;\n }\n /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n ngOnDestroy() {\n this._destroyed = true;\n this._clearFromModals();\n this._completeExit();\n }\n /**\n * Removes the element in a microtask. Helps prevent errors where we end up\n * removing an element which is in the middle of an animation.\n */\n _completeExit() {\n queueMicrotask(() => {\n this._onExit.next();\n this._onExit.complete();\n });\n }\n /**\n * Called after the portal contents have been attached. Can be\n * used to modify the DOM once it's guaranteed to be in place.\n */\n _afterPortalAttached() {\n const element = this._elementRef.nativeElement;\n const panelClasses = this.snackBarConfig.panelClass;\n if (panelClasses) {\n if (Array.isArray(panelClasses)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClasses.forEach(cssClass => element.classList.add(cssClass));\n } else {\n element.classList.add(panelClasses);\n }\n }\n this._exposeToModals();\n // Check to see if the attached component or template uses the MDC template structure,\n // specifically the MDC label. If not, the container should apply the MDC label class to this\n // component's label container, which will apply MDC's label styles to the attached view.\n const label = this._label.nativeElement;\n const labelClass = 'mdc-snackbar__label';\n label.classList.toggle(labelClass, !label.querySelector(`.${labelClass}`));\n }\n /**\n * Some browsers won't expose the accessibility node of the live element if there is an\n * `aria-modal` and the live element is outside of it. This method works around the issue by\n * pointing the `aria-owns` of all modals to the live element.\n */\n _exposeToModals() {\n // TODO(http://github.com/angular/components/issues/26853): consider de-duplicating this with the\n // `LiveAnnouncer` and any other usages.\n //\n // Note that the selector here is limited to CDK overlays at the moment in order to reduce the\n // section of the DOM we need to look through. This should cover all the cases we support, but\n // the selector can be expanded if it turns out to be too narrow.\n const id = this._liveElementId;\n const modals = this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal=\"true\"]');\n for (let i = 0; i < modals.length; i++) {\n const modal = modals[i];\n const ariaOwns = modal.getAttribute('aria-owns');\n this._trackedModals.add(modal);\n if (!ariaOwns) {\n modal.setAttribute('aria-owns', id);\n } else if (ariaOwns.indexOf(id) === -1) {\n modal.setAttribute('aria-owns', ariaOwns + ' ' + id);\n }\n }\n }\n /** Clears the references to the live element from any modals it was added to. */\n _clearFromModals() {\n this._trackedModals.forEach(modal => {\n const ariaOwns = modal.getAttribute('aria-owns');\n if (ariaOwns) {\n const newValue = ariaOwns.replace(this._liveElementId, '').trim();\n if (newValue.length > 0) {\n modal.setAttribute('aria-owns', newValue);\n } else {\n modal.removeAttribute('aria-owns');\n }\n }\n });\n this._trackedModals.clear();\n }\n /** Asserts that no content is already attached to the container. */\n _assertNotAttached() {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempting to attach snack bar content after content is already attached');\n }\n }\n /**\n * Starts a timeout to move the snack bar content to the live region so screen readers will\n * announce it.\n */\n _screenReaderAnnounce() {\n if (!this._announceTimeoutId) {\n this._ngZone.runOutsideAngular(() => {\n this._announceTimeoutId = setTimeout(() => {\n const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n if (inertElement && liveElement) {\n // If an element in the snack bar content is focused before being moved\n // track it and restore focus after moving to the live region.\n let focusedElement = null;\n if (this._platform.isBrowser && document.activeElement instanceof HTMLElement && inertElement.contains(document.activeElement)) {\n focusedElement = document.activeElement;\n }\n inertElement.removeAttribute('aria-hidden');\n liveElement.appendChild(inertElement);\n focusedElement?.focus();\n this._onAnnounce.next();\n this._onAnnounce.complete();\n }\n }, this._announceDelay);\n });\n }\n }\n static {\n this.ɵfac = function MatSnackBarContainer_Factory(ɵt) {\n return new (ɵt || MatSnackBarContainer)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(MatSnackBarConfig));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatSnackBarContainer,\n selectors: [[\"mat-snack-bar-container\"]],\n viewQuery: function MatSnackBarContainer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(CdkPortalOutlet, 7);\n i0.ɵɵviewQuery(_c0, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._label = _t.first);\n }\n },\n hostAttrs: [1, \"mdc-snackbar\", \"mat-mdc-snack-bar-container\"],\n hostVars: 1,\n hostBindings: function MatSnackBarContainer_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵsyntheticHostListener(\"@state.done\", function MatSnackBarContainer_animation_state_done_HostBindingHandler($event) {\n return ctx.onAnimationEnd($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵsyntheticHostProperty(\"@state\", ctx._animationState);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 6,\n vars: 3,\n consts: [[\"label\", \"\"], [1, \"mdc-snackbar__surface\", \"mat-mdc-snackbar-surface\"], [1, \"mat-mdc-snack-bar-label\"], [\"aria-hidden\", \"true\"], [\"cdkPortalOutlet\", \"\"]],\n template: function MatSnackBarContainer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2, 0)(3, \"div\", 3);\n i0.ɵɵtemplate(4, MatSnackBarContainer_ng_template_4_Template, 0, 0, \"ng-template\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵelement(5, \"div\");\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(5);\n i0.ɵɵattribute(\"aria-live\", ctx._live)(\"role\", ctx._role)(\"id\", ctx._liveElementId);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-mdc-snack-bar-container{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);margin:8px}.mat-mdc-snack-bar-handset .mat-mdc-snack-bar-container{width:100vw}.mat-mdc-snackbar-surface{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box;padding-left:0;padding-right:8px}[dir=rtl] .mat-mdc-snackbar-surface{padding-right:0;padding-left:8px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{min-width:344px;max-width:672px}.mat-mdc-snack-bar-handset .mat-mdc-snackbar-surface{width:100%;min-width:0}.cdk-high-contrast-active .mat-mdc-snackbar-surface{outline:solid 1px}.mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{color:var(--mdc-snackbar-supporting-text-color);border-radius:var(--mdc-snackbar-container-shape);background-color:var(--mdc-snackbar-container-color)}.mdc-snackbar__label{width:100%;flex-grow:1;box-sizing:border-box;margin:0;padding:14px 8px 14px 16px}[dir=rtl] .mdc-snackbar__label{padding-left:8px;padding-right:16px}.mat-mdc-snack-bar-container .mdc-snackbar__label{font-family:var(--mdc-snackbar-supporting-text-font);font-size:var(--mdc-snackbar-supporting-text-size);font-weight:var(--mdc-snackbar-supporting-text-weight);line-height:var(--mdc-snackbar-supporting-text-line-height)}.mat-mdc-snack-bar-actions{display:flex;flex-shrink:0;align-items:center;box-sizing:border-box}.mat-mdc-snack-bar-handset,.mat-mdc-snack-bar-container,.mat-mdc-snack-bar-label{flex:1 1 auto}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled){color:var(--mat-snack-bar-button-color);--mat-text-button-state-layer-color:currentColor;--mat-text-button-ripple-color:currentColor}.mat-mdc-snack-bar-container .mat-mdc-button.mat-mdc-snack-bar-action:not(:disabled) .mat-ripple-element{opacity:.1}\"],\n encapsulation: 2,\n data: {\n animation: [matSnackBarAnimations.snackBarState]\n }\n });\n }\n }\n return MatSnackBarContainer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** @docs-private */\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n return new MatSnackBarConfig();\n}\n/** Injection token that can be used to specify default snack bar. */\nconst MAT_SNACK_BAR_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-snack-bar-default-options', {\n providedIn: 'root',\n factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY\n});\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nlet MatSnackBar = /*#__PURE__*/(() => {\n class MatSnackBar {\n /** Reference to the currently opened snackbar at *any* level. */\n get _openedSnackBarRef() {\n const parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n }\n set _openedSnackBarRef(value) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n } else {\n this._snackBarRefAtThisLevel = value;\n }\n }\n constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n this._overlay = _overlay;\n this._live = _live;\n this._injector = _injector;\n this._breakpointObserver = _breakpointObserver;\n this._parentSnackBar = _parentSnackBar;\n this._defaultConfig = _defaultConfig;\n /**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\n this._snackBarRefAtThisLevel = null;\n /** The component that should be rendered as the snack bar's simple component. */\n this.simpleSnackBarComponent = SimpleSnackBar;\n /** The container component that attaches the provided template or component. */\n this.snackBarContainerComponent = MatSnackBarContainer;\n /** The CSS class to apply for handset mode. */\n this.handsetCssClass = 'mat-mdc-snack-bar-handset';\n }\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @param component Component to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromComponent(component, config) {\n return this._attach(component, config);\n }\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param template Template to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromTemplate(template, config) {\n return this._attach(template, config);\n }\n /**\n * Opens a snackbar with a message and an optional action.\n * @param message The message to show in the snackbar.\n * @param action The label for the snackbar action.\n * @param config Additional configuration options for the snackbar.\n */\n open(message, action = '', config) {\n const _config = {\n ...this._defaultConfig,\n ...config\n };\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = {\n message,\n action\n };\n // Since the snack bar has `role=\"alert\"`, we don't\n // want to announce the same message twice.\n if (_config.announcementMessage === message) {\n _config.announcementMessage = undefined;\n }\n return this.openFromComponent(this.simpleSnackBarComponent, _config);\n }\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss() {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n ngOnDestroy() {\n // Only dismiss the snack bar at the current level on destroy.\n if (this._snackBarRefAtThisLevel) {\n this._snackBarRefAtThisLevel.dismiss();\n }\n }\n /**\n * Attaches the snack bar container component to the overlay.\n */\n _attachSnackBarContainer(overlayRef, config) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{\n provide: MatSnackBarConfig,\n useValue: config\n }]\n });\n const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n const containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n }\n /**\n * Places a new component or a template as the content of the snack bar container.\n */\n _attach(content, userConfig) {\n const config = {\n ...new MatSnackBarConfig(),\n ...this._defaultConfig,\n ...userConfig\n };\n const overlayRef = this._createOverlay(config);\n const container = this._attachSnackBarContainer(overlayRef, config);\n const snackBarRef = new MatSnackBarRef(container, overlayRef);\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null, {\n $implicit: config.data,\n snackBarRef\n });\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n }\n // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n // appropriate. This class is applied to the overlay element because the overlay must expand to\n // fill the width of the screen for full width snackbars.\n this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {\n overlayRef.overlayElement.classList.toggle(this.handsetCssClass, state.matches);\n });\n if (config.announcementMessage) {\n // Wait until the snack bar contents have been announced then deliver this message.\n container._onAnnounce.subscribe(() => {\n this._live.announce(config.announcementMessage, config.politeness);\n });\n }\n this._animateSnackBar(snackBarRef, config);\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n }\n /** Animates the old snack bar out and the new one in. */\n _animateSnackBar(snackBarRef, config) {\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(() => {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (this._openedSnackBarRef == snackBarRef) {\n this._openedSnackBarRef = null;\n }\n if (config.announcementMessage) {\n this._live.clear();\n }\n });\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(() => {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n } else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (config.duration && config.duration > 0) {\n snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));\n }\n }\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified snack bar config.\n */\n _createOverlay(config) {\n const overlayConfig = new OverlayConfig();\n overlayConfig.direction = config.direction;\n let positionStrategy = this._overlay.position().global();\n // Set horizontal position.\n const isRtl = config.direction === 'rtl';\n const isLeft = config.horizontalPosition === 'left' || config.horizontalPosition === 'start' && !isRtl || config.horizontalPosition === 'end' && isRtl;\n const isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n } else if (isRight) {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n overlayConfig.positionStrategy = positionStrategy;\n return this._overlay.create(overlayConfig);\n }\n /**\n * Creates an injector to be used inside of a snack bar component.\n * @param config Config that was used to create the snack bar.\n * @param snackBarRef Reference to the snack bar.\n */\n _createInjector(config, snackBarRef) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [{\n provide: MatSnackBarRef,\n useValue: snackBarRef\n }, {\n provide: MAT_SNACK_BAR_DATA,\n useValue: config.data\n }]\n });\n }\n static {\n this.ɵfac = function MatSnackBar_Factory(ɵt) {\n return new (ɵt || MatSnackBar)(i0.ɵɵinject(i1$1.Overlay), i0.ɵɵinject(i2.LiveAnnouncer), i0.ɵɵinject(i0.Injector), i0.ɵɵinject(i3.BreakpointObserver), i0.ɵɵinject(MatSnackBar, 12), i0.ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatSnackBar,\n factory: MatSnackBar.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatSnackBar;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DIRECTIVES = [MatSnackBarContainer, MatSnackBarLabel, MatSnackBarActions, MatSnackBarAction];\nlet MatSnackBarModule = /*#__PURE__*/(() => {\n class MatSnackBarModule {\n static {\n this.ɵfac = function MatSnackBarModule_Factory(ɵt) {\n return new (ɵt || MatSnackBarModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatSnackBarModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MatSnackBar],\n imports: [OverlayModule, PortalModule, MatButtonModule, MatCommonModule, SimpleSnackBar, MatCommonModule]\n });\n }\n }\n return MatSnackBarModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SNACK_BAR_DATA, MAT_SNACK_BAR_DEFAULT_OPTIONS, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MatSnackBar, MatSnackBarAction, MatSnackBarActions, MatSnackBarConfig, MatSnackBarContainer, MatSnackBarLabel, MatSnackBarModule, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };\n"],"mappings":"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","names":["BaseControlValueAccessor","_BaseControlValueAccessor","_renderer","_elementRef","_","key","value","fn","isDisabled","ɵt","ɵɵdirectiveInject","Renderer2","ElementRef","ɵɵdefineDirective","BuiltInControlValueAccessor","_BuiltInControlValueAccessor","ɵBuiltInControlValueAccessor_BaseFactory","ɵɵgetInheritedFactory","ɵɵInheritDefinitionFeature","NG_VALUE_ACCESSOR","InjectionToken","DEFAULT_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","DefaultValueAccessor","_isAndroid","userAgent","getDOM","COMPOSITION_BUFFER_MODE","InjectionToken","_DefaultValueAccessor","BaseControlValueAccessor","renderer","elementRef","_compositionMode","value","normalizedValue","ɵt","ɵɵdirectiveInject","Renderer2","ElementRef","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","isEmptyInputValue","hasValidLength","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","min","minValidator","max","maxValidator","control","requiredValidator","requiredTrueValidator","emailValidator","minLength","minLengthValidator","maxLength","maxLengthValidator","pattern","patternValidator","nullValidator","validators","compose","composeAsync","regex","regexStr","isPresent","o","toObservable","isPromise","from","mergeErrors","arrayOfErrors","res","errors","__spreadValues","executeValidators","validator","isValidatorFn","normalizeValidators","c","presentValidators","composeValidators","observables","forkJoin","map","composeAsyncValidators","mergeValidators","controlValidators","dirValidator","getControlValidators","getControlAsyncValidators","makeValidatorsArray","hasValidator","addValidators","currentValidators","current","v","removeValidators","AbstractControlDirective","fn","errorCode","path","ControlContainer","NgControl","AbstractControlStatus","cd","ngControlStatusHost","ngGroupStatusHost","__spreadProps","NgControlStatus","_NgControlStatus","ɵɵclassProp","NgControlStatusGroup","_NgControlStatusGroup","VALID","INVALID","PENDING","DISABLED","ControlEvent","ValueChangeEvent","value","source","PristineChangeEvent","pristine","TouchedChangeEvent","touched","StatusChangeEvent","status","FormSubmittedEvent","FormResetEvent","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","validator","composeValidators","pickAsyncValidators","asyncValidator","coerceToAsyncValidator","composeAsyncValidators","assertControlPresent","parent","isGroup","key","controls","RuntimeError","assertAllValuesPresent","control","_","AbstractControl","validators","asyncValidators","computed","signal","Subject","validatorFn","asyncValidatorFn","untracked","v","addValidators","removeValidators","hasValidator","opts","changed","sourceControl","__spreadProps","__spreadValues","skipPristineCheck","changeFn","shouldHaveEmitted","ctrl","emitEvent","obs","toObservable","errors","path","currPath","name","errorCode","x","changedControl","EventEmitter","newPristine","fn","onlySelf","parentDirty","FormGroup","options","controlName","acc","subtreeUpdated","updated","child","cb","condition","initValue","res","FormRecord","FormGroup","CALL_SET_DISABLED_STATE","InjectionToken","setDisabledStateDefault","controlPath","name","parent","setUpControl","control","dir","callSetDisabledState","setUpValidators","setUpViewChangePipeline","setUpModelChangePipeline","setUpBlurPipeline","setUpDisabledChangeHandler","cleanUpControl","validateControlPresenceOnChange","noop","cleanUpValidators","registerOnValidatorChange","validators","onChange","validator","onDisabledChange","isDisabled","getControlValidators","mergeValidators","asyncValidators","getControlAsyncValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","asyncValidator","newValue","updateControl","emitModelEvent","setUpFormContainer","cleanUpFormContainer","isPropertyUpdated","changes","viewModel","change","isBuiltInAccessor","valueAccessor","BuiltInControlValueAccessor","syncPendingControls","form","directives","dir","control","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","v","DefaultValueAccessor","removeListItem$1","list","el","index","formDirectiveProvider$1","ControlContainer","forwardRef","NgForm","resolvedPromise$1","_NgForm","untracked","validators","asyncValidators","callSetDisabledState","computed","signal","EventEmitter","FormGroup","composeValidators","composeAsyncValidators","dir","container","setUpControl","group","setUpFormContainer","value","$event","syncPendingControls","path","ɵt","ɵɵdirectiveInject","NG_VALIDATORS","NG_ASYNC_VALIDATORS","CALL_SET_DISABLED_STATE","ɵɵdefineDirective","rf","ctx","ɵɵlistener","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","removeListItem","list","el","index","isFormControlState","formState","FormControl","AbstractControl","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","isOptionsObj","options","changeFn","condition","fn","cb","isFormControl","control","FormControl","AbstractFormGroupDirective","_AbstractFormGroupDirective","ControlContainer","controlPath","ɵAbstractFormGroupDirective_BaseFactory","ɵt","ɵɵgetInheritedFactory","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","ɵNgNoValidate","_ɵNgNoValidate","ɵt","ɵɵdefineDirective","NUMBER_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","NumberValueAccessor","_NumberValueAccessor","BuiltInControlValueAccessor","value","normalizedValue","fn","ɵNumberValueAccessor_BaseFactory","ɵɵgetInheritedFactory","rf","ctx","ɵɵlistener","$event","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","NG_MODEL_WITH_FORM_CONTROL_WARNING","InjectionToken","formControlBinding","NgControl","forwardRef","FormControlDirective","_FormControlDirective","isDisabled","validators","asyncValidators","valueAccessors","_ngModelWarningConfig","callSetDisabledState","EventEmitter","selectValueAccessor","changes","previousForm","cleanUpControl","setUpControl","isPropertyUpdated","newValue","ɵt","ɵɵdirectiveInject","NG_VALIDATORS","NG_ASYNC_VALIDATORS","NG_VALUE_ACCESSOR","CALL_SET_DISABLED_STATE","ɵɵdefineDirective","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵNgOnChangesFeature","formDirectiveProvider","ControlContainer","FormGroupDirective","_FormGroupDirective","untracked","value","computed","signal","cleanUpValidators","dir","ctrl","removeListItem$1","$event","syncPendingControls","FormSubmittedEvent","FormResetEvent","oldCtrl","newCtrl","isFormControl","setUpFormContainer","cleanUpFormContainer","setUpValidators","rf","ctx","ɵɵlistener","formGroupNameProvider","FormGroupName","_FormGroupName","AbstractFormGroupDirective","parent","_hasInvalidParent","formArrayNameProvider","FormArrayName","_FormArrayName","controlPath","controlNameBinding","FormControlName","_FormControlName","AbstractValidatorDirective","_AbstractValidatorDirective","nullValidator","changes","input","control","fn","ɵt","ɵɵdefineDirective","ɵɵNgOnChangesFeature","REQUIRED_VALIDATOR","NG_VALIDATORS","forwardRef","RequiredValidator","RequiredValidator","_RequiredValidator","AbstractValidatorDirective","booleanAttribute","input","requiredValidator","ɵRequiredValidator_BaseFactory","ɵt","ɵɵgetInheritedFactory","ɵɵdefineDirective","rf","ctx","ɵɵattribute","ɵɵProvidersFeature","REQUIRED_VALIDATOR","ɵɵInheritDefinitionFeature","ɵInternalFormsSharedModule","_ɵInternalFormsSharedModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","FormArray","AbstractControl","controls","validatorOrOpts","asyncValidator","pickValidators","pickAsyncValidators","index","control","options","adjustedIndex","value","assertAllValuesPresent","newValue","assertControlPresent","subtreeUpdated","updated","child","cb","condition","name","isAbstractControlOptions","options","FormBuilder","_FormBuilder","nnfb","controls","reducedControls","newOptions","FormGroup","FormRecord","formState","validatorOrOpts","asyncValidator","FormControl","__spreadProps","__spreadValues","createdControls","c","FormArray","controlName","AbstractControl","value","validator","ɵt","ɵɵdefineInjectable","FormsModule","_FormsModule","opts","CALL_SET_DISABLED_STATE","setDisabledStateDefault","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","ɵInternalFormsSharedModule","ReactiveFormsModule","_ReactiveFormsModule","NG_MODEL_WITH_FORM_CONTROL_WARNING","SelectionModel","_multiple","initiallySelectedValues","_emitChanges","compareWith","Subject","value","values","changed","oldValues","newSelectedSet","flushEvent","predicate","inputValue","selection","selectedValue","UniqueSelectionDispatcher","_UniqueSelectionDispatcher","id","name","listener","registered","ɵt","ɵɵdefineInjectable","DEFAULT_SCROLL_TIME","ScrollDispatcher","_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","ɵt","ɵɵinject","NgZone","Platform","DOCUMENT","ɵɵdefineInjectable","CdkScrollable","_CdkScrollable","elementRef","scrollDispatcher","ngZone","dir","takeUntil","options","el","isRtl","getRtlScrollAxisType","RtlScrollAxisType","supportsScrollBehavior","from","LEFT","RIGHT","ɵɵdirectiveInject","ElementRef","Directionality","ɵɵdefineDirective","DEFAULT_RESIZE_TIME","ViewportRuler","_ViewportRuler","event","output","scrollPosition","width","height","documentElement","documentRect","top","left","throttleTime","CdkScrollableModule","_CdkScrollableModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","ScrollingModule","_ScrollingModule","BidiModule","Portal","host","ComponentPortal","component","viewContainerRef","injector","componentFactoryResolver","projectableNodes","TemplatePortal","templateRef","context","DomPortal","element","ElementRef","BasePortalOutlet","portal","fn","DomPortalOutlet","BasePortalOutlet","outletElement","_componentFactoryResolver","_appRef","_defaultInjector","_document","portal","element","anchorNode","componentFactory","componentRef","Injector","viewContainer","viewRef","rootNode","index","CdkPortalOutlet","_CdkPortalOutlet","BasePortalOutlet","_componentFactoryResolver","_viewContainerRef","_document","EventEmitter","portal","element","anchorNode","viewContainerRef","componentFactory","ref","viewRef","nativeElement","ɵt","ɵɵdirectiveInject","ComponentFactoryResolver$1","ViewContainerRef","DOCUMENT","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","PortalModule","_PortalModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","scrollBehaviorSupported","supportsScrollBehavior","BlockScrollStrategy","_viewportRuler","document","root","coerceCssPixelValue","html","body","htmlStyle","bodyStyle","previousHtmlScrollBehavior","previousBodyScrollBehavior","viewport","CloseScrollStrategy","_scrollDispatcher","_ngZone","_viewportRuler","_config","overlayRef","stream","filter","scrollable","scrollPosition","NoopScrollStrategy","isElementScrolledOutsideView","element","scrollContainers","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","isElementClippedByScrolling","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","RepositionScrollStrategy","throttle","overlayRect","width","height","ScrollStrategyOptions","_ScrollStrategyOptions","document","config","BlockScrollStrategy","ɵt","ɵɵinject","ScrollDispatcher","ViewportRuler","NgZone","DOCUMENT","ɵɵdefineInjectable","OverlayConfig","configKeys","key","ConnectedOverlayPositionChange","connectionPair","scrollableViewProperties","BaseOverlayDispatcher","_BaseOverlayDispatcher","document","overlayRef","index","ɵt","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","OverlayKeyboardDispatcher","_OverlayKeyboardDispatcher","_ngZone","event","overlays","i","keydownEvents","NgZone","OverlayOutsideClickDispatcher","_OverlayOutsideClickDispatcher","_platform","_getEventTarget","target","origin","containsPierceShadowDom","outsidePointerEvents","body","Platform","parent","child","supportsShadowRoot","current","OverlayContainer","_OverlayContainer","containerClass","_isTestEnvironment","oppositePlatformContainers","container","OverlayRef","_portalOutlet","_host","_pane","_config","_keyboardDispatcher","_document","_location","_outsideClickDispatcher","_animationsDisabled","_injector","Subject","Subscription","untracked","afterRender","portal","attachResult","afterNextRender","detachmentResult","isAttached","strategy","sizeConfig","__spreadValues","dir","__spreadProps","classes","direction","style","coerceCssPixelValue","enablePointer","showingClass","backdropToDetach","element","cssClasses","isAdd","coerceArray","c","subscription","takeUntil","merge","scrollStrategy","backdrop","boundingBoxClass","cssUnitPattern","FlexibleConnectedPositionStrategy","connectedTo","_viewportRuler","_overlayContainer","originRect","overlayRect","viewportRect","containerRect","flexibleFits","fallback","pos","originPoint","overlayPoint","overlayFit","bestFit","bestScore","fit","score","extendStyles","lastPosition","scrollables","positions","margin","flexibleDimensions","growAfterOpen","canPush","isLocked","offset","selector","x","startX","endX","y","overlayStartX","overlayStartY","point","rawOverlayRect","viewport","position","overlay","getRoundedBoundingClientRect","offsetX","offsetY","leftOverflow","rightOverflow","topOverflow","bottomOverflow","visibleWidth","visibleHeight","visibleArea","availableHeight","availableWidth","minHeight","getPixelValue","minWidth","verticalFit","horizontalFit","start","scrollPosition","overflowRight","overflowBottom","overflowTop","overflowLeft","pushX","pushY","scrollVisibility","compareScrollVisibility","changeEvent","ConnectedOverlayPositionChange","elements","xOrigin","yOrigin","isRtl","height","top","bottom","smallestDistanceToViewportEdge","previousHeight","isBoundedByRightViewportEdge","isBoundedByLeftViewportEdge","width","left","right","previousWidth","boundingBoxRect","styles","maxHeight","maxWidth","hasExactPosition","hasFlexibleDimensions","config","transformString","documentHeight","horizontalStyleProperty","documentWidth","originBounds","overlayBounds","scrollContainerBounds","scrollable","isElementClippedByScrolling","isElementScrolledOutsideView","length","overflows","currentValue","currentOverflow","axis","cssClass","ElementRef","destination","source","key","input","value","units","clientRect","a","b","wrapperClass","GlobalPositionStrategy","overlayRef","config","value","offset","styles","parentStyles","width","height","maxWidth","maxHeight","shouldBeFlushHorizontally","shouldBeFlushVertically","xPosition","xOffset","isRtl","marginLeft","marginRight","justifyContent","parent","OverlayPositionBuilder","_OverlayPositionBuilder","_viewportRuler","_document","_platform","_overlayContainer","origin","FlexibleConnectedPositionStrategy","ɵt","ɵɵinject","ViewportRuler","DOCUMENT","Platform","OverlayContainer","ɵɵdefineInjectable","nextUniqueId","Overlay","_Overlay","scrollStrategies","_componentFactoryResolver","_positionBuilder","_keyboardDispatcher","_injector","_ngZone","_directionality","_location","_outsideClickDispatcher","_animationsModuleType","host","pane","portalOutlet","overlayConfig","OverlayConfig","OverlayRef","EnvironmentInjector","ApplicationRef","DomPortalOutlet","ScrollStrategyOptions","ComponentFactoryResolver$1","OverlayKeyboardDispatcher","Injector","NgZone","Directionality","Location","OverlayOutsideClickDispatcher","ANIMATION_MODULE_TYPE","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","InjectionToken","overlay","inject","CdkOverlayOrigin","_CdkOverlayOrigin","elementRef","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","CdkConnectedOverlay","_CdkConnectedOverlay","offsetX","offsetY","_overlay","templateRef","viewContainerRef","scrollStrategyFactory","_dir","Subscription","EventEmitter","TemplatePortal","changes","event","hasModifierKey","target","_getEventTarget","positionStrategy","positions","currentPosition","strategy","takeWhile","position","TemplateRef","ViewContainerRef","booleanAttribute","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","OverlayModule","_OverlayModule","ɵɵdefineNgModule","ɵɵdefineInjector","BidiModule","PortalModule","ScrollingModule","CdkDialogContainer_ng_template_0_Template","rf","ctx","DialogConfig","CdkDialogContainer","_CdkDialogContainer","BasePortalOutlet","_elementRef","_focusTrapFactory","_document","_config","_interactivityChecker","_ngZone","_overlayRef","_focusMonitor","inject","Platform","ChangeDetectorRef","Injector","portal","result","id","index","element","options","callback","selector","elementToFocus","afterNextRender","focusConfig","focusTargetElement","activeElement","_getFocusedElementPierceShadowDom","ɵt","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","DialogConfig","InteractivityChecker","NgZone","OverlayRef","FocusMonitor","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","CdkPortalOutlet","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵattribute","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵtemplate","CdkDialogContainer_ng_template_0_Template","DialogRef","overlayRef","config","Subject","event","hasModifierKey","closedSubject","width","height","classes","DIALOG_SCROLL_STRATEGY","InjectionToken","overlay","Overlay","DIALOG_DATA","DEFAULT_DIALOG_CONFIG","uniqueId","Dialog","_Dialog","_overlay","_injector","_defaultOptions","_parentDialog","_overlayContainer","scrollStrategy","Subject","defer","startWith","componentOrTemplateRef","config","defaults","DialogConfig","__spreadValues","overlayConfig","overlayRef","dialogRef","DialogRef","dialogContainer","reverseForEach","dialog","id","state","OverlayConfig","overlay","userInjector","providers","OverlayRef","containerType","CdkDialogContainer","containerPortal","ComponentPortal","Injector","TemplateRef","injector","context","TemplatePortal","contentRef","fallbackInjector","DIALOG_DATA","Directionality","of","emitEvent","index","previousValue","element","overlayContainer","siblings","i","sibling","parent","ɵt","ɵɵinject","Overlay","DEFAULT_DIALOG_CONFIG","OverlayContainer","DIALOG_SCROLL_STRATEGY","ɵɵdefineInjectable","items","callback","DialogModule","_DialogModule","ɵɵdefineNgModule","ɵɵdefineInjector","OverlayModule","PortalModule","A11yModule","AnimationMetadataType","AUTO_STYLE","trigger","name","definitions","animate","timings","styles","sequence","steps","options","AnimationMetadataType","style","tokens","state","name","styles","keyframes","transition","stateChangeExpr","animateChild","options","AnimationMetadataType","query","selector","animation","options","AnimationMetadataType","NoopAnimationPlayer","duration","delay","fn","position","phaseName","methods","AnimationGroupPlayer","_players","doneCount","destroyCount","startCount","total","player","time","p","timeAtPosition","longestPlayer","longestSoFar","ɵPRE_STYLE","MatDialogContainer_ng_template_2_Template","rf","ctx","MatDialogConfig","OPEN_CLASS","OPENING_CLASS","CLOSING_CLASS","OPEN_ANIMATION_DURATION","CLOSE_ANIMATION_DURATION","MatDialogContainer","_MatDialogContainer","CdkDialogContainer","elementRef","focusTrapFactory","_document","dialogConfig","interactivityChecker","ngZone","overlayRef","_animationMode","focusMonitor","EventEmitter","parseCssTime","TRANSITION_DURATION_PROPERTY","delta","duration","callback","totalTime","portal","ref","ɵt","ɵɵdirectiveInject","ElementRef","FocusTrapFactory","DOCUMENT","InteractivityChecker","NgZone","OverlayRef","ANIMATION_MODULE_TYPE","FocusMonitor","ɵɵdefineComponent","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵtemplate","ɵɵelementEnd","CdkPortalOutlet","time","coerceNumberProperty","MatDialogState","MatDialogRef","_ref","config","_containerInstance","Subject","filter","event","take","merge","hasModifierKey","_closeDialogVia","dialogResult","position","strategy","width","height","classes","interactionType","result","MAT_DIALOG_DATA","InjectionToken","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","overlay","inject","Overlay","uniqueId","MatDialog","_MatDialog","parent","_overlay","injector","location","_defaultOptions","_scrollStrategy","_parentDialog","_overlayContainer","_animationMode","Subject","MatDialogConfig","defer","startWith","Dialog","MatDialogRef","MatDialogContainer","MAT_DIALOG_DATA","componentOrTemplateRef","config","dialogRef","__spreadValues","cdkRef","__spreadProps","DialogConfig","ref","cdkConfig","dialogContainer","index","id","dialog","dialogs","ɵt","ɵɵinject","Overlay","Injector","Location","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","OverlayContainer","ANIMATION_MODULE_TYPE","ɵɵdefineInjectable","dialogElementUid","MatDialogLayoutSection","_MatDialogLayoutSection","_dialogRef","_elementRef","_dialog","getClosestDialog","ɵt","ɵɵdirectiveInject","MatDialogRef","ElementRef","MatDialog","ɵɵdefineDirective","MatDialogTitle","_MatDialogTitle","dialogElementUid","ɵMatDialogTitle_BaseFactory","ɵɵgetInheritedFactory","rf","ctx","ɵɵhostProperty","ɵɵInheritDefinitionFeature","MatDialogContent","_MatDialogContent","ɵɵHostDirectivesFeature","CdkScrollable","MatDialogActions","_MatDialogActions","ɵMatDialogActions_BaseFactory","ɵɵclassProp","element","openDialogs","parent","dialog","MatDialogModule","_MatDialogModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MatDialog","DialogModule","OverlayModule","PortalModule","MatCommonModule","MatDivider","_MatDivider","value","coerceBooleanProperty","ɵt","ɵɵdefineComponent","rf","ctx","ɵɵattribute","ɵɵclassProp","ɵɵStandaloneFeature","MatDividerModule","_MatDividerModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","applyCssPrefixes","target","key","value","INLINE","LAYOUT_VALUES","buildLayoutCSS","direction","wrap","isInline","validateValue","buildCSS","inline","x","validateWrapValue","isFlowHorizontal","flow","extendObject","dest","sources","source","removeStyles","_document","platformId","isPlatformBrowser","elements","CLASS_NAME","classRegex","el","BROWSER_PROVIDER","APP_BOOTSTRAP_LISTENER","DOCUMENT","PLATFORM_ID","CoreModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MediaChange","_MediaChange","matches","mediaQuery","mqAlias","suffix","priority","StylesheetMap","element","style","value","stylesheet","styleName","styles","ɵɵdefineInjectable","DEFAULT_CONFIG","LAYOUT_CONFIG","InjectionToken","SERVER_TOKEN","BREAKPOINT","mergeAlias","dest","source","StyleBuilder","_input","_styles","_parent","StyleUtils","_serverStylesheet","_serverModuleLoaded","_platformId","layoutConfig","applyCssPrefixes","target","query","hasInlineValue","isPlatformServer","attribute","getServerStyle","inlineOnly","key","values","setServerStyle","ɵɵinject","readStyleAttribute","styleValue","styleMap","writeStyleAttribute","styleAttrValue","styleAttribute","styleList","colonIndex","name","sortDescendingPriority","a","b","priorityA","sortAscendingPriority","pA","pB","MatchMedia","_zone","BehaviorSubject","results","mql","m","mqList","filterOthers","matchMedia$","filter","change","registration$","Observable","observer","lastChange","e","merge","list","buildQueryCss","onMQLEvent","fn","constructMql","NgZone","ALL_STYLES","mediaQueries","it","styleEl","cssText","mq","buildMockMql","et","isBrowser","DEFAULT_BREAKPOINTS","HANDSET_PORTRAIT","HANDSET_LANDSCAPE","TABLET_PORTRAIT","TABLET_LANDSCAPE","WEB_PORTRAIT","WEB_LANDSCAPE","ScreenTypes","ORIENTATION_BREAKPOINTS","ALIAS_DELIMITERS","firstUpperCase","part","first","remainder","camelCase","validateSuffixes","bp","mergeByAlias","defaults","custom","dict","extendObject","k","BREAKPOINTS","breakpoints","inject","bpFlattenArray","v","builtIns","BreakPointRegistry","alias","searchFn","response","PRINT","BREAKPOINT_PRINT","PrintHook","PrintQueue","queries","event","beforePrintListener","afterPrintListener","bpList","hasFormerBp","wasActivated","l","isPrintBreakPoint","MediaMarshaller","matchMedia","hook","Subject","bps","mc","bpIndex","updateFn","clearFn","extraTriggers","initBuilderMap","bpMap","val","keyMap","valueMap","builders","watcherMap","s","elementMap","_","triggers","watchers","newSubscription","currentValue","i","activatedBp","lastHope","tap","map","input","oldMap","BaseDirective2","elementRef","styleBuilder","styler","marshal","changes","parent","builder","useCache","genStyles","__spreadValues","addIfMissing","buildLayoutCSS","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","ɵɵNgOnChangesFeature","validateBasis","basis","grow","shrink","parts","j","_validateCalcValue","matches","calc","LayoutStyleBuilder","StyleBuilder","input","display","css","buildLayoutCSS","__spreadProps","__spreadValues","ɵLayoutStyleBuilder_BaseFactory","ɵt","ɵɵgetInheritedFactory","ɵɵdefineInjectable","inputs$6","LayoutDirective","BaseDirective2","elRef","styleUtils","styleBuilder","marshal","_config","input","display","cacheMap","ɵt","ɵɵdirectiveInject","ElementRef","StyleUtils","LayoutStyleBuilder","MediaMarshaller","LAYOUT_CONFIG","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","DefaultLayoutDirective","inputs$6","ɵDefaultLayoutDirective_BaseFactory","ɵɵgetInheritedFactory","FlexStyleBuilder","StyleBuilder","layoutConfig","input","parent","grow","shrink","basisParts","basis","direction","max","isFlowHorizontal","min","hasCalc","usingCalc","isPercent","hasUnits","isValue","isFixed","css","clearStyles","useColumnBasisZero","extendObject","ɵt","ɵɵinject","LAYOUT_CONFIG","ɵɵdefineInjectable","inputs$4","FlexDirective","BaseDirective2","elRef","styleUtils","layoutConfig","styleBuilder","marshal","value","takeUntil","matcher","layoutParts","addFlexToParent","direction","isHorizontal","hasWrap","flexRowWrapCache","flexRowCache","flexColumnWrapCache","flexColumnCache","basis","parts","validateBasis","activatedValue","ɵt","ɵɵdirectiveInject","ElementRef","StyleUtils","LAYOUT_CONFIG","FlexStyleBuilder","MediaMarshaller","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","DefaultFlexDirective","inputs$4","ɵDefaultFlexDirective_BaseFactory","ɵɵgetInheritedFactory","LayoutAlignStyleBuilder","StyleBuilder","align","parent","css","mainAxis","crossAxis","extendObject","isFlowHorizontal","ɵLayoutAlignStyleBuilder_BaseFactory","ɵt","ɵɵgetInheritedFactory","ɵɵdefineInjectable","inputs","LayoutAlignDirective","BaseDirective2","elRef","styleUtils","styleBuilder","marshal","takeUntil","value","layout","inline","layoutAlignHorizontalInlineCache","layoutAlignHorizontalCache","layoutAlignHorizontalRevInlineCache","layoutAlignHorizontalRevCache","layoutAlignVerticalInlineCache","layoutAlignVerticalCache","layoutAlignVerticalRevInlineCache","layoutAlignVerticalRevCache","matcher","layoutKeys","LAYOUT_VALUES","x","ɵt","ɵɵdirectiveInject","ElementRef","StyleUtils","LayoutAlignStyleBuilder","MediaMarshaller","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","DefaultLayoutAlignDirective","inputs","ɵDefaultLayoutAlignDirective_BaseFactory","ɵɵgetInheritedFactory","FlexModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","CoreModule","BidiModule","ExtendedModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","CoreModule","GridModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","CoreModule","FlexLayoutModule","serverModuleLoaded","platformId","isPlatformServer","configOptions","breakpoints","LAYOUT_CONFIG","__spreadValues","DEFAULT_CONFIG","BREAKPOINT","SERVER_TOKEN","ɵt","ɵɵinject","PLATFORM_ID","ɵɵdefineNgModule","ɵɵdefineInjector","FlexModule","ExtendedModule","GridModule","JFlexLayoutModule","constructor","m","lastValue","subject","subscribe","x","activatedBreakpoints","filter","b","alias","length","hook","collectActivations","deactivations","ɵɵinject","MediaMarshaller","ngModule","FlexLayoutModule","providers","provide","LAYOUT_CONFIG","useValue","addFlexToParent","addOrientationBps","disableDefaultBps","disableVendorPrefixes","serverLoaded","useColumnBasisZero","_JFlexLayoutModule","SingleBoxSharedResizeObserver","_box","Subject","entries","target","Observable","observer","subscription","filter","entry","shareReplay","takeUntil","SharedResizeObserver","_SharedResizeObserver","inject","NgZone","options","box","ɵt","ɵɵdefineInjectable","_c0","_c1","_c2","_c3","_c4","_c5","_c6","_c7","MatFormField_ng_template_0_Conditional_0_Conditional_2_Template","rf","ctx","ɵɵelement","MatFormField_ng_template_0_Conditional_0_Template","ɵɵelementStart","ɵɵprojection","ɵɵtemplate","ɵɵelementEnd","ctx_r1","ɵɵnextContext","ɵɵproperty","ɵɵattribute","ɵɵadvance","ɵɵconditional","MatFormField_ng_template_0_Template","MatFormField_Conditional_4_Template","MatFormField_Conditional_6_Conditional_1_ng_template_0_Template","MatFormField_Conditional_6_Conditional_1_Template","labelTemplate_r3","ɵɵreference","MatFormField_Conditional_6_Template","MatFormField_Conditional_7_Template","MatFormField_Conditional_8_Template","MatFormField_Conditional_10_ng_template_0_Template","MatFormField_Conditional_10_Template","MatFormField_Conditional_12_Template","MatFormField_Conditional_13_Template","MatFormField_Conditional_14_Template","MatFormField_Case_16_Template","MatFormField_Case_17_Conditional_1_Template","ɵɵtext","ɵɵtextInterpolate","MatFormField_Case_17_Template","MatLabel","_MatLabel","ɵt","ɵɵdefineDirective","nextUniqueId$2","MAT_ERROR","InjectionToken","MatError","_MatError","ariaLive","elementRef","ɵɵinjectAttribute","ɵɵdirectiveInject","ElementRef","ɵɵhostProperty","ɵɵProvidersFeature","nextUniqueId$1","MatHint","_MatHint","ɵɵclassProp","MAT_PREFIX","MAT_SUFFIX","InjectionToken","MatSuffix","_MatSuffix","value","ɵt","ɵɵdefineDirective","ɵɵProvidersFeature","FLOATING_LABEL_PARENT","MatFormFieldFloatingLabel","_MatFormFieldFloatingLabel","_elementRef","inject","SharedResizeObserver","NgZone","Subscription","estimateScrollWidth","ɵɵdirectiveInject","ElementRef","rf","ctx","ɵɵclassProp","element","htmlEl","clone","scrollWidth","ACTIVATE_CLASS","DEACTIVATING_CLASS","MatFormFieldLineRipple","_MatFormFieldLineRipple","ngZone","event","classList","isDeactivating","MatFormFieldNotchedOutline","_MatFormFieldNotchedOutline","_ngZone","label","labelWidth","ɵɵdefineComponent","ɵɵviewQuery","_c0","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵStandaloneFeature","_c1","_c2","ɵɵprojectionDef","ɵɵelement","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","matFormFieldAnimations","trigger","state","style","transition","animate","MatFormFieldControl","_MatFormFieldControl","MAT_FORM_FIELD","InjectionToken","MAT_FORM_FIELD_DEFAULT_OPTIONS","nextUniqueId","DEFAULT_APPEARANCE","DEFAULT_FLOAT_LABEL","DEFAULT_SUBSCRIPT_SIZING","FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM","MatFormField","_MatFormField","value","coerceBooleanProperty","oldValue","newAppearance","_elementRef","_changeDetectorRef","_unusedNgZone","_dir","_platform","_defaults","_animationMode","_unusedDocument","contentChild","MatLabel","Subject","inject","Injector","computed","control","takeUntil","p","s","merge","afterRender","prop","ids","startHint","hint","endHint","error","floatingLabel","iconPrefixContainer","textPrefixContainer","iconPrefixContainerWidth","textPrefixContainerWidth","negate","prefixWidth","labelHorizontalOffset","element","rootNode","ɵt","ɵɵdirectiveInject","ElementRef","ChangeDetectorRef","NgZone","Directionality","Platform","ANIMATION_MODULE_TYPE","DOCUMENT","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuerySignal","ɵɵcontentQuery","MatFormFieldControl","MAT_PREFIX","MAT_SUFFIX","MAT_ERROR","MatHint","ɵɵqueryAdvance","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","_c3","_c4","_c5","MatFormFieldFloatingLabel","MatFormFieldNotchedOutline","MatFormFieldLineRipple","ɵɵclassProp","ɵɵProvidersFeature","FLOATING_LABEL_PARENT","ɵɵStandaloneFeature","_c7","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","_c6","ɵɵtemplate","MatFormField_ng_template_0_Template","ɵɵtemplateRefExtractor","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","MatFormField_Conditional_4_Template","MatFormField_Conditional_6_Template","MatFormField_Conditional_7_Template","MatFormField_Conditional_8_Template","MatFormField_Conditional_10_Template","ɵɵprojection","ɵɵelementEnd","MatFormField_Conditional_12_Template","MatFormField_Conditional_13_Template","MatFormField_Conditional_14_Template","MatFormField_Case_16_Template","MatFormField_Case_17_Template","tmp_16_0","ɵɵadvance","ɵɵconditional","NgTemplateOutlet","matFormFieldAnimations","MatFormFieldModule","_MatFormFieldModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CommonModule","ObserversModule","listenerOptions","normalizePassiveListenerOptions","AutofillMonitor","_AutofillMonitor","_platform","_ngZone","elementOrRef","EMPTY","element","coerceElement","info","result","Subject","cssClass","listener","event","_info","ɵt","ɵɵinject","Platform","NgZone","ɵɵdefineInjectable","TextFieldModule","_TextFieldModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_INPUT_VALUE_ACCESSOR","InjectionToken","MAT_INPUT_INVALID_TYPES","nextUniqueId","MatInput","_MatInput","value","coerceBooleanProperty","Validators","getSupportedInputTypes","_elementRef","_platform","ngControl","parentForm","parentFormGroup","defaultErrorStateMatcher","inputValueAccessor","_autofillMonitor","_ngZone","_formField","Subject","t","event","el","element","nodeName","_ErrorStateTracker","options","isFocused","newValue","placeholder","validity","selectElement","firstOption","ids","ɵt","ɵɵdirectiveInject","ElementRef","Platform","NgControl","NgForm","FormGroupDirective","ErrorStateMatcher","AutofillMonitor","NgZone","MAT_FORM_FIELD","ɵɵdefineDirective","rf","ctx","ɵɵlistener","ɵɵhostProperty","ɵɵattribute","ɵɵclassProp","ɵɵProvidersFeature","MatFormFieldControl","ɵɵNgOnChangesFeature","MatInputModule","_MatInputModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","MatFormFieldModule","TextFieldModule","_c0","_c1","_c2","_c3","MatSelect_Conditional_4_Template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ctx_r1","ɵɵnextContext","ɵɵadvance","ɵɵtextInterpolate","MatSelect_Conditional_5_Conditional_1_Template","ɵɵprojection","MatSelect_Conditional_5_Conditional_2_Template","MatSelect_Conditional_5_Template","ɵɵtemplate","ɵɵconditional","MatSelect_ng_template_10_Template","_r3","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","ɵɵclassMapInterpolate1","ɵɵproperty","ɵɵattribute","matSelectAnimations","trigger","transition","query","animateChild","state","style","animate","nextUniqueId","MAT_SELECT_SCROLL_STRATEGY","InjectionToken","overlay","inject","Overlay","MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","MAT_SELECT_TRIGGER","MatSelectChange","source","value","MatSelect","_MatSelect","index","option","panel","labelCount","_countGroupLabelsBeforeOption","element","_getOptionScrollPosition","Validators","fn","newValue","_viewportRuler","_changeDetectorRef","_unusedNgZone","defaultErrorStateMatcher","_elementRef","_dir","parentForm","parentFormGroup","_parentFormField","ngControl","tabIndex","scrollStrategyFactory","_liveAnnouncer","_defaultOptions","o1","o2","Subject","defer","options","startWith","switchMap","merge","EventEmitter","filter","o","map","_ErrorStateTracker","SelectionModel","distinctUntilChanged","takeUntil","event","newAriaLabelledby","changes","modal","panelId","removeAriaReferencedId","addAriaReferencedId","isDisabled","selectedOptions","keyCode","isArrowKey","isOpenKey","manager","hasModifierKey","previouslySelectedOption","selectedOption","isTyping","hasDeselectedOptions","opt","previouslyFocusedIndex","take","currentValue","correspondingOption","preferredOrigin","CdkOverlayOrigin","ActiveDescendantKeyManager","changedOrDestroyed","isUserInput","wasSelected","a","b","fallbackValue","valueToEmit","firstEnabledOptionIndex","labelId","labelExpression","isOpen","ids","ɵt","ɵɵdirectiveInject","ViewportRuler","ChangeDetectorRef","NgZone","ErrorStateMatcher","ElementRef","Directionality","NgForm","FormGroupDirective","MAT_FORM_FIELD","NgControl","ɵɵinjectAttribute","LiveAnnouncer","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","MatOption","MAT_OPTGROUP","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","_c0","_c1","CdkConnectedOverlay","ɵɵlistener","$event","ɵɵattribute","ɵɵclassProp","booleanAttribute","numberAttribute","ɵɵProvidersFeature","MatFormFieldControl","MAT_OPTION_PARENT_COMPONENT","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_c3","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","_c2","ɵɵelementStart","ɵɵrestoreView","ɵɵresetView","ɵɵtemplate","MatSelect_Conditional_4_Template","MatSelect_Conditional_5_Template","ɵɵelementEnd","ɵɵnamespaceSVG","ɵɵelement","MatSelect_ng_template_10_Template","fallbackOverlayOrigin_r4","ɵɵreference","ɵɵadvance","ɵɵconditional","ɵɵproperty","NgClass","matSelectAnimations","MatSelectModule","_MatSelectModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","CommonModule","OverlayModule","MatOptionModule","MatCommonModule","CdkScrollableModule","MatFormFieldModule","_c0","_forTrack0","$index","$item","_forTrack1","MatCalendarBody_Conditional_0_Template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ctx_r0","ɵɵnextContext","ɵɵadvance","ɵɵstyleProp","ɵɵattribute","ɵɵtextInterpolate1","MatCalendarBody_For_2_Conditional_1_Template","MatCalendarBody_For_2_For_3_Template","_r2","ɵɵgetCurrentView","ɵɵlistener","$event","item_r3","ɵɵrestoreView","ɵɵresetView","ɵɵelement","ɵ$index_14_r4","ɵ$index_7_r5","ɵɵclassProp","ɵɵproperty","MatCalendarBody_For_2_Template","ɵɵtemplate","ɵɵrepeaterCreate","row_r6","ɵɵconditional","ɵɵrepeater","MatMonthView_For_4_Template","day_r1","ɵɵtextInterpolate","_c1","MatCalendar_ng_template_0_Template","MatCalendar_Case_2_Template","_r1","ɵɵtwoWayListener","ctx_r1","ɵɵtwoWayBindingSet","ɵɵtwoWayProperty","MatCalendar_Case_3_Template","_r3","MatCalendar_Case_4_Template","_r4","MatDatepickerContent_ng_template_2_Template","_c2","_c3","_c4","MatDatepickerToggle_Conditional_2_Template","ɵɵnamespaceSVG","MatDatepickerIntl","_MatDatepickerIntl","Subject","start","end","ɵt","ɵɵdefineInjectable","uniqueIdCounter$1","MatCalendarCell","value","displayValue","ariaLabel","enabled","cssClasses","compareValue","rawValue","calendarBodyId","activeCapturingEventOptions","normalizePassiveListenerOptions","passiveCapturingEventOptions","passiveEventOptions","MatCalendarBody","_MatCalendarBody","_elementRef","_ngZone","inject","Platform","EventEmitter","Injector","row","event","cell","target","getActualTouchTarget","getCellElement","cellElement","element","changes","columnChanges","rows","numCols","rowIndex","colIndex","cellNumber","movePreview","afterNextRender","activeCell","isStart","isEnd","isInRange","previousCell","previousRow","nextCell","nextRow","col","ɵɵdirectiveInject","ElementRef","NgZone","ɵɵdefineComponent","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_c0","rf","ctx","ɵɵtemplate","MatCalendarBody_Conditional_0_Template","ɵɵrepeaterCreate","MatCalendarBody_For_2_Template","_forTrack0","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵconditional","ɵɵadvance","ɵɵrepeater","ɵɵproperty","ɵɵtextInterpolate1","NgClass","isTableCell","node","rangeEnabled","touchLocation","DateRange","MatDateSelectionModel","_MatDateSelectionModel","selection","_adapter","source","oldValue","date","ɵɵinvalidFactory","MatSingleDateSelectionModel","_MatSingleDateSelectionModel","adapter","clone","ɵɵinject","DateAdapter","MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY","parent","adapter","MatSingleDateSelectionModel","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","MatDateSelectionModel","Optional","SkipSelf","DateAdapter","MAT_DATE_RANGE_SELECTION_STRATEGY","InjectionToken","DAYS_PER_WEEK","uniqueIdCounter","MatMonthView","_MatMonthView","value","oldActiveDate","validDate","DateRange","_changeDetectorRef","_dateFormats","_dateAdapter","_dir","_rangeStrategy","Subscription","EventEmitter","startWith","changes","comparisonChange","event","date","selectedDate","rangeStartDate","rangeEndDate","month","isRtl","hasModifierKey","firstOfMonth","movePreview","cell","previewRange","dragRange","dragDropResult","dayOfMonth","firstDayOfWeek","narrowWeekdays","weekdays","long","i","daysInMonth","dateNames","enabled","ariaLabel","cellClasses","MatCalendarCell","d1","d2","year","day","selectedValue","ɵt","ɵɵdirectiveInject","ChangeDetectorRef","MAT_DATE_FORMATS","DateAdapter","Directionality","MAT_DATE_RANGE_SELECTION_STRATEGY","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","MatCalendarBody","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵrepeaterCreate","MatMonthView_For_4_Template","_forTrack1","ɵɵelementEnd","ɵɵelement","ɵɵlistener","$event","ɵɵadvance","ɵɵrepeater","ɵɵproperty","yearsPerPage","yearsPerRow","MatMultiYearView","_MatMultiYearView","isSameMultiYearView","minYearOfPage","getActiveOffset","row","selectedYear","activeMonth","yearName","firstOfYear","displayValue","dateAdapter","date1","date2","minDate","maxDate","year1","year2","startingYear","getStartingYear","activeDate","activeYear","euclideanModulo","a","b","MatYearView","_MatYearView","selectedMonth","monthNames","normalizedDate","monthName","maxYear","maxMonth","minYear","minMonth","calendarHeaderId","MatCalendarHeader","_MatCalendarHeader","_intl","calendar","changeDetectorRef","maxYearOfPage","minYearLabel","maxYearLabel","MatDatepickerIntl","forwardRef","MatCalendar","_c1","ɵɵprojectionDef","ɵɵtext","ɵɵnamespaceSVG","ɵɵnamespaceHTML","ɵɵprojection","ɵɵtextInterpolate","ɵɵattribute","ɵɵclassProp","MatButton","MatIconButton","_MatCalendar","viewChangedResult","Subject","ComponentPortal","minDateChange","maxDateChange","changeRequiringRerender","view","normalizedYear","normalizedMonth","ɵɵProvidersFeature","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","ɵɵtemplate","MatCalendar_ng_template_0_Template","MatCalendar_Case_2_Template","MatCalendar_Case_3_Template","MatCalendar_Case_4_Template","tmp_1_0","ɵɵconditional","CdkPortalOutlet","CdkMonitorFocus","matDatepickerAnimations","trigger","transition","animate","keyframes","style","state","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","InjectionToken","overlay","inject","Overlay","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","MatDatepickerContent","_MatDatepickerContent","_elementRef","_globalModel","_rangeSelectionStrategy","intl","selection","isRange","newSelection","portal","forceRerender","ElementRef","MatDateSelectionModel","ɵɵsyntheticHostListener","ɵɵsyntheticHostProperty","ɵɵclassMap","MatDatepickerContent_ng_template_2_Template","tmp_3_0","CdkTrapFocus","MatDatepickerBase","_MatDatepickerBase","coerceStringArray","_overlay","_unusedNgZone","_viewContainerRef","scrollStrategy","_model","DOCUMENT","Injector","positionChange","positionStrategy","FlexibleConnectedPositionStrategy","input","_getFocusedElementPierceShadowDom","canRestoreFocus","completeClose","instance","location","take","activeElement","isDialog","overlayRef","OverlayConfig","keyCode","afterNextRender","strategy","primaryX","secondaryX","primaryY","secondaryY","ctrlShiftMetaModifiers","merge","filter","modifier","NgZone","ViewContainerRef","ɵɵdefineDirective","booleanAttribute","ɵɵInputTransformsFeature","MatDatepicker","_MatDatepicker","ɵMatDatepicker_BaseFactory","ɵɵgetInheritedFactory","ɵɵInheritDefinitionFeature","MatDatepickerInputEvent","target","targetElement","MatDatepickerInputBase","_MatDatepickerInputBase","newValue","element","model","control","controlValue","min","max","dateInputsHaveChanged","fn","c","isDisabled","lastValueWasValid","hasChanged","adapter","keys","key","previousValue","currentValue","MAT_DATEPICKER_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","MatDatepickerInput","MAT_DATEPICKER_VALIDATORS","NG_VALIDATORS","_MatDatepickerInput","datepicker","validValue","wasMatchingValue","elementRef","dateFormats","_formField","signal","Validators","modelValue","MAT_FORM_FIELD","ɵɵhostProperty","MAT_INPUT_VALUE_ACCESSOR","MatDatepickerToggleIcon","_MatDatepickerToggleIcon","MatDatepickerToggle","_MatDatepickerToggle","defaultTabIndex","parsedTabIndex","datepickerStateChanged","of","inputStateChanged","datepickerToggled","ɵɵinjectAttribute","dirIndex","ɵɵcontentQuery","_c2","_c4","_c3","MatDatepickerToggle_Conditional_2_Template","MatDatepickerModule","_MatDatepickerModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MatDatepickerIntl","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","CommonModule","MatButtonModule","OverlayModule","A11yModule","PortalModule","MatCommonModule","MatDatepickerContent","MatDatepickerToggle","MatCalendarHeader","CdkScrollableModule","_c0","_c1","_c2","nextUniqueId","MatRadioChange","source","value","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatRadioGroup","MAT_RADIO_GROUP","InjectionToken","MAT_RADIO_DEFAULT_OPTIONS","MAT_RADIO_DEFAULT_OPTIONS_FACTORY","_MatRadioGroup","v","newValue","selected","_changeDetector","EventEmitter","radio","isAlreadySelected","fn","isDisabled","ɵt","ɵɵdirectiveInject","ChangeDetectorRef","ɵɵdefineDirective","rf","ctx","dirIndex","ɵɵcontentQuery","MatRadioButton","_t","ɵɵqueryRefresh","ɵɵloadQuery","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","_MatRadioButton","radioGroup","_elementRef","_focusMonitor","_radioDispatcher","animationMode","_providerOverride","tabIndex","inject","Injector","numberAttribute","options","origin","id","name","focusOrigin","event","groupValueChanged","group","input","afterNextRender","ElementRef","FocusMonitor","UniqueSelectionDispatcher","ANIMATION_MODULE_TYPE","ɵɵinjectAttribute","ɵɵdefineComponent","ɵɵviewQuery","ɵɵlistener","ɵɵattribute","ɵɵclassProp","ɵɵStandaloneFeature","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","ɵɵelementStart","$event","ɵɵrestoreView","ɵɵresetView","ɵɵelementEnd","ɵɵelement","ɵɵprojection","ɵɵproperty","ɵɵadvance","MatRipple","_MatInternalFormField","MatRadioModule","_MatRadioModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CommonModule","MatRippleModule","_c0","MAT_CARD_CONFIG","InjectionToken","MatCard","_MatCard","config","ɵt","ɵɵdirectiveInject","ɵɵdefineComponent","rf","ctx","ɵɵclassProp","ɵɵStandaloneFeature","_c0","ɵɵprojectionDef","ɵɵprojection","MatCardModule","_MatCardModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CommonModule","_c0","_c1","_c2","MAT_CHECKBOX_DEFAULT_OPTIONS","InjectionToken","MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY","TransitionCheckState","MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatCheckbox","MatCheckboxChange","nextUniqueId","defaults","_MatCheckbox","isChecked","event","_elementRef","_changeDetectorRef","_ngZone","tabIndex","_animationMode","_options","EventEmitter","changes","value","changed","fn","isDisabled","control","newState","oldState","element","animationClass","clickAction","nativeCheckbox","ɵt","ɵɵdirectiveInject","ElementRef","ChangeDetectorRef","NgZone","ɵɵinjectAttribute","ANIMATION_MODULE_TYPE","ɵɵdefineComponent","rf","ctx","ɵɵviewQuery","MatRipple","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵhostProperty","ɵɵattribute","ɵɵclassMap","ɵɵclassProp","booleanAttribute","numberAttribute","ɵɵProvidersFeature","NG_VALIDATORS","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","ɵɵelementEnd","ɵɵelement","ɵɵnamespaceSVG","ɵɵnamespaceHTML","ɵɵprojection","checkbox_r2","ɵɵreference","ɵɵproperty","ɵɵadvance","_MatInternalFormField","MatCheckboxModule","_MatCheckboxModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MatCheckbox","MatCommonModule","SimpleSnackBar_Conditional_2_Template","rf","ctx","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","_c0","MatSnackBarContainer_ng_template_4_Template","MAX_TIMEOUT","MatSnackBarRef","containerInstance","_overlayRef","Subject","duration","MAT_SNACK_BAR_DATA","InjectionToken","MatSnackBarConfig","MatSnackBarLabel","_MatSnackBarLabel","ɵt","ɵɵdefineDirective","MatSnackBarActions","_MatSnackBarActions","MatSnackBarAction","_MatSnackBarAction","SimpleSnackBar","_SimpleSnackBar","snackBarRef","data","ɵɵdirectiveInject","ɵɵdefineComponent","ɵɵStandaloneFeature","ɵɵtemplate","ɵɵconditional","MatButton","matSnackBarAnimations","trigger","state","style","transition","animate","uniqueId","MatSnackBarContainer","_MatSnackBarContainer","BasePortalOutlet","_ngZone","_elementRef","_changeDetectorRef","_platform","snackBarConfig","inject","DOCUMENT","portal","result","event","fromState","toState","onEnter","element","panelClasses","cssClass","label","labelClass","id","modals","i","modal","ariaOwns","newValue","inertElement","liveElement","focusedElement","NgZone","ElementRef","ChangeDetectorRef","Platform","ɵɵviewQuery","CdkPortalOutlet","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵsyntheticHostListener","$event","ɵɵsyntheticHostProperty","ɵɵInheritDefinitionFeature","ɵɵelement","ɵɵattribute","MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY","MAT_SNACK_BAR_DEFAULT_OPTIONS","MatSnackBar","_MatSnackBar","parent","value","_overlay","_live","_injector","_breakpointObserver","_parentSnackBar","_defaultConfig","component","config","template","message","action","_config","__spreadValues","overlayRef","userInjector","injector","Injector","containerPortal","ComponentPortal","containerRef","content","userConfig","container","TemplateRef","TemplatePortal","contentRef","Breakpoints","takeUntil","overlayConfig","OverlayConfig","positionStrategy","isRtl","isLeft","isRight","ɵɵinject","Overlay","LiveAnnouncer","BreakpointObserver","ɵɵdefineInjectable","MatSnackBarModule","_MatSnackBarModule","ɵt","ɵɵdefineNgModule","ɵɵdefineInjector","MatSnackBar","OverlayModule","PortalModule","MatButtonModule","MatCommonModule","SimpleSnackBar"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25]}