Index: trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,3801 @@
+import * as i0 from '@angular/core';
+import { Injectable, NgZone, Inject, InjectionToken, Directive, Input, EventEmitter, ElementRef, ChangeDetectorRef, Optional, SkipSelf, Output, TemplateRef, ViewContainerRef, Self, ContentChildren, ContentChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { DOCUMENT } from '@angular/common';
+import * as i2 from '@angular/cdk/scrolling';
+import { ViewportRuler, ScrollDispatcher, CdkScrollableModule } from '@angular/cdk/scrolling';
+import { _getEventTarget, normalizePassiveListenerOptions, _getShadowRoot } from '@angular/cdk/platform';
+import { coerceBooleanProperty, coerceElement, coerceArray, coerceNumberProperty } from '@angular/cdk/coercion';
+import { isFakeTouchstartFromScreenReader, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';
+import { Subject, Subscription, interval, animationFrameScheduler, Observable, merge } from 'rxjs';
+import { takeUntil, startWith, map, take, tap, switchMap } from 'rxjs/operators';
+import { Directionality } from '@angular/cdk/bidi';
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Shallow-extends a stylesheet object with another stylesheet-like object.
+ * Note that the keys in `source` have to be dash-cased.
+ * @docs-private
+ */
+import * as ɵngcc0 from '@angular/core';
+import * as ɵngcc1 from '@angular/cdk/scrolling';
+import * as ɵngcc2 from '@angular/cdk/bidi';
+function extendStyles(dest, source, importantProperties) {
+    for (let key in source) {
+        if (source.hasOwnProperty(key)) {
+            const value = source[key];
+            if (value) {
+                dest.setProperty(key, value, (importantProperties === null || importantProperties === void 0 ? void 0 : importantProperties.has(key)) ? 'important' : '');
+            }
+            else {
+                dest.removeProperty(key);
+            }
+        }
+    }
+    return dest;
+}
+/**
+ * Toggles whether the native drag interactions should be enabled for an element.
+ * @param element Element on which to toggle the drag interactions.
+ * @param enable Whether the drag interactions should be enabled.
+ * @docs-private
+ */
+function toggleNativeDragInteractions(element, enable) {
+    const userSelect = enable ? '' : 'none';
+    extendStyles(element.style, {
+        'touch-action': enable ? '' : 'none',
+        '-webkit-user-drag': enable ? '' : 'none',
+        '-webkit-tap-highlight-color': enable ? '' : 'transparent',
+        'user-select': userSelect,
+        '-ms-user-select': userSelect,
+        '-webkit-user-select': userSelect,
+        '-moz-user-select': userSelect
+    });
+}
+/**
+ * Toggles whether an element is visible while preserving its dimensions.
+ * @param element Element whose visibility to toggle
+ * @param enable Whether the element should be visible.
+ * @param importantProperties Properties to be set as `!important`.
+ * @docs-private
+ */
+function toggleVisibility(element, enable, importantProperties) {
+    extendStyles(element.style, {
+        position: enable ? '' : 'fixed',
+        top: enable ? '' : '0',
+        opacity: enable ? '' : '0',
+        left: enable ? '' : '-999em'
+    }, importantProperties);
+}
+/**
+ * Combines a transform string with an optional other transform
+ * that exited before the base transform was applied.
+ */
+function combineTransforms(transform, initialTransform) {
+    return initialTransform && initialTransform != 'none' ?
+        (transform + ' ' + initialTransform) :
+        transform;
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Parses a CSS time value to milliseconds. */
+function parseCssTimeUnitsToMs(value) {
+    // Some browsers will return it in seconds, whereas others will return milliseconds.
+    const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;
+    return parseFloat(value) * multiplier;
+}
+/** Gets the transform transition duration, including the delay, of an element in milliseconds. */
+function getTransformTransitionDurationInMs(element) {
+    const computedStyle = getComputedStyle(element);
+    const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');
+    const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');
+    // If there's no transition for `all` or `transform`, we shouldn't do anything.
+    if (!property) {
+        return 0;
+    }
+    // Get the index of the property that we're interested in and match
+    // it up to the same index in `transition-delay` and `transition-duration`.
+    const propertyIndex = transitionedProperties.indexOf(property);
+    const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');
+    const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');
+    return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +
+        parseCssTimeUnitsToMs(rawDelays[propertyIndex]);
+}
+/** Parses out multiple values from a computed style into an array. */
+function parseCssPropertyValue(computedStyle, name) {
+    const value = computedStyle.getPropertyValue(name);
+    return value.split(',').map(part => part.trim());
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Gets a mutable version of an element's bounding `ClientRect`. */
+function getMutableClientRect(element) {
+    const clientRect = element.getBoundingClientRect();
+    // We need to clone the `clientRect` here, because all the values on it are readonly
+    // and we need to be able to update them. Also we can't use a spread here, because
+    // the values on a `ClientRect` aren't own properties. See:
+    // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes
+    return {
+        top: clientRect.top,
+        right: clientRect.right,
+        bottom: clientRect.bottom,
+        left: clientRect.left,
+        width: clientRect.width,
+        height: clientRect.height
+    };
+}
+/**
+ * Checks whether some coordinates are within a `ClientRect`.
+ * @param clientRect ClientRect that is being checked.
+ * @param x Coordinates along the X axis.
+ * @param y Coordinates along the Y axis.
+ */
+function isInsideClientRect(clientRect, x, y) {
+    const { top, bottom, left, right } = clientRect;
+    return y >= top && y <= bottom && x >= left && x <= right;
+}
+/**
+ * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.
+ * @param clientRect `ClientRect` that should be updated.
+ * @param top Amount to add to the `top` position.
+ * @param left Amount to add to the `left` position.
+ */
+function adjustClientRect(clientRect, top, left) {
+    clientRect.top += top;
+    clientRect.bottom = clientRect.top + clientRect.height;
+    clientRect.left += left;
+    clientRect.right = clientRect.left + clientRect.width;
+}
+/**
+ * Checks whether the pointer coordinates are close to a ClientRect.
+ * @param rect ClientRect to check against.
+ * @param threshold Threshold around the ClientRect.
+ * @param pointerX Coordinates along the X axis.
+ * @param pointerY Coordinates along the Y axis.
+ */
+function isPointerNearClientRect(rect, threshold, pointerX, pointerY) {
+    const { top, right, bottom, left, width, height } = rect;
+    const xThreshold = width * threshold;
+    const yThreshold = height * threshold;
+    return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&
+        pointerX > left - xThreshold && pointerX < right + xThreshold;
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Keeps track of the scroll position and dimensions of the parents of an element. */
+class ParentPositionTracker {
+    constructor(_document, _viewportRuler) {
+        this._document = _document;
+        this._viewportRuler = _viewportRuler;
+        /** Cached positions of the scrollable parent elements. */
+        this.positions = new Map();
+    }
+    /** Clears the cached positions. */
+    clear() {
+        this.positions.clear();
+    }
+    /** Caches the positions. Should be called at the beginning of a drag sequence. */
+    cache(elements) {
+        this.clear();
+        this.positions.set(this._document, {
+            scrollPosition: this._viewportRuler.getViewportScrollPosition(),
+        });
+        elements.forEach(element => {
+            this.positions.set(element, {
+                scrollPosition: { top: element.scrollTop, left: element.scrollLeft },
+                clientRect: getMutableClientRect(element)
+            });
+        });
+    }
+    /** Handles scrolling while a drag is taking place. */
+    handleScroll(event) {
+        const target = _getEventTarget(event);
+        const cachedPosition = this.positions.get(target);
+        if (!cachedPosition) {
+            return null;
+        }
+        // Used when figuring out whether an element is inside the scroll parent. If the scrolled
+        // parent is the `document`, we use the `documentElement`, because IE doesn't support
+        // `contains` on the `document`.
+        const scrolledParentNode = target === this._document ? target.documentElement : target;
+        const scrollPosition = cachedPosition.scrollPosition;
+        let newTop;
+        let newLeft;
+        if (target === this._document) {
+            const viewportScrollPosition = this._viewportRuler.getViewportScrollPosition();
+            newTop = viewportScrollPosition.top;
+            newLeft = viewportScrollPosition.left;
+        }
+        else {
+            newTop = target.scrollTop;
+            newLeft = target.scrollLeft;
+        }
+        const topDifference = scrollPosition.top - newTop;
+        const leftDifference = scrollPosition.left - newLeft;
+        // Go through and update the cached positions of the scroll
+        // parents that are inside the element that was scrolled.
+        this.positions.forEach((position, node) => {
+            if (position.clientRect && target !== node && scrolledParentNode.contains(node)) {
+                adjustClientRect(position.clientRect, topDifference, leftDifference);
+            }
+        });
+        scrollPosition.top = newTop;
+        scrollPosition.left = newLeft;
+        return { top: topDifference, left: leftDifference };
+    }
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Creates a deep clone of an element. */
+function deepCloneNode(node) {
+    const clone = node.cloneNode(true);
+    const descendantsWithId = clone.querySelectorAll('[id]');
+    const nodeName = node.nodeName.toLowerCase();
+    // Remove the `id` to avoid having multiple elements with the same id on the page.
+    clone.removeAttribute('id');
+    for (let i = 0; i < descendantsWithId.length; i++) {
+        descendantsWithId[i].removeAttribute('id');
+    }
+    if (nodeName === 'canvas') {
+        transferCanvasData(node, clone);
+    }
+    else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {
+        transferInputData(node, clone);
+    }
+    transferData('canvas', node, clone, transferCanvasData);
+    transferData('input, textarea, select', node, clone, transferInputData);
+    return clone;
+}
+/** Matches elements between an element and its clone and allows for their data to be cloned. */
+function transferData(selector, node, clone, callback) {
+    const descendantElements = node.querySelectorAll(selector);
+    if (descendantElements.length) {
+        const cloneElements = clone.querySelectorAll(selector);
+        for (let i = 0; i < descendantElements.length; i++) {
+            callback(descendantElements[i], cloneElements[i]);
+        }
+    }
+}
+// Counter for unique cloned radio button names.
+let cloneUniqueId = 0;
+/** Transfers the data of one input element to another. */
+function transferInputData(source, clone) {
+    // Browsers throw an error when assigning the value of a file input programmatically.
+    if (clone.type !== 'file') {
+        clone.value = source.value;
+    }
+    // Radio button `name` attributes must be unique for radio button groups
+    // otherwise original radio buttons can lose their checked state
+    // once the clone is inserted in the DOM.
+    if (clone.type === 'radio' && clone.name) {
+        clone.name = `mat-clone-${clone.name}-${cloneUniqueId++}`;
+    }
+}
+/** Transfers the data of one canvas element to another. */
+function transferCanvasData(source, clone) {
+    const context = clone.getContext('2d');
+    if (context) {
+        // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).
+        // We can't do much about it so just ignore the error.
+        try {
+            context.drawImage(source, 0, 0);
+        }
+        catch (_a) { }
+    }
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Options that can be used to bind a passive event listener. */
+const passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });
+/** Options that can be used to bind an active event listener. */
+const activeEventListenerOptions = normalizePassiveListenerOptions({ passive: false });
+/**
+ * Time in milliseconds for which to ignore mouse events, after
+ * receiving a touch event. Used to avoid doing double work for
+ * touch devices where the browser fires fake mouse events, in
+ * addition to touch events.
+ */
+const MOUSE_EVENT_IGNORE_TIME = 800;
+/** Inline styles to be set as `!important` while dragging. */
+const dragImportantProperties = new Set([
+    // Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.
+    'position'
+]);
+/**
+ * Reference to a draggable item. Used to manipulate or dispose of the item.
+ */
+class DragRef {
+    constructor(element, _config, _document, _ngZone, _viewportRuler, _dragDropRegistry) {
+        this._config = _config;
+        this._document = _document;
+        this._ngZone = _ngZone;
+        this._viewportRuler = _viewportRuler;
+        this._dragDropRegistry = _dragDropRegistry;
+        /**
+         * CSS `transform` applied to the element when it isn't being dragged. We need a
+         * passive transform in order for the dragged element to retain its new position
+         * after the user has stopped dragging and because we need to know the relative
+         * position in case they start dragging again. This corresponds to `element.style.transform`.
+         */
+        this._passiveTransform = { x: 0, y: 0 };
+        /** CSS `transform` that is applied to the element while it's being dragged. */
+        this._activeTransform = { x: 0, y: 0 };
+        /**
+         * Whether the dragging sequence has been started. Doesn't
+         * necessarily mean that the element has been moved.
+         */
+        this._hasStartedDragging = false;
+        /** Emits when the item is being moved. */
+        this._moveEvents = new Subject();
+        /** Subscription to pointer movement events. */
+        this._pointerMoveSubscription = Subscription.EMPTY;
+        /** Subscription to the event that is dispatched when the user lifts their pointer. */
+        this._pointerUpSubscription = Subscription.EMPTY;
+        /** Subscription to the viewport being scrolled. */
+        this._scrollSubscription = Subscription.EMPTY;
+        /** Subscription to the viewport being resized. */
+        this._resizeSubscription = Subscription.EMPTY;
+        /** Cached reference to the boundary element. */
+        this._boundaryElement = null;
+        /** Whether the native dragging interactions have been enabled on the root element. */
+        this._nativeInteractionsEnabled = true;
+        /** Elements that can be used to drag the draggable item. */
+        this._handles = [];
+        /** Registered handles that are currently disabled. */
+        this._disabledHandles = new Set();
+        /** Layout direction of the item. */
+        this._direction = 'ltr';
+        /**
+         * Amount of milliseconds to wait after the user has put their
+         * pointer down before starting to drag the element.
+         */
+        this.dragStartDelay = 0;
+        this._disabled = false;
+        /** Emits as the drag sequence is being prepared. */
+        this.beforeStarted = new Subject();
+        /** Emits when the user starts dragging the item. */
+        this.started = new Subject();
+        /** Emits when the user has released a drag item, before any animations have started. */
+        this.released = new Subject();
+        /** Emits when the user stops dragging an item in the container. */
+        this.ended = new Subject();
+        /** Emits when the user has moved the item into a new container. */
+        this.entered = new Subject();
+        /** Emits when the user removes the item its container by dragging it into another container. */
+        this.exited = new Subject();
+        /** Emits when the user drops the item inside a container. */
+        this.dropped = new Subject();
+        /**
+         * Emits as the user is dragging the item. Use with caution,
+         * because this event will fire for every pixel that the user has dragged.
+         */
+        this.moved = this._moveEvents;
+        /** Handler for the `mousedown`/`touchstart` events. */
+        this._pointerDown = (event) => {
+            this.beforeStarted.next();
+            // Delegate the event based on whether it started from a handle or the element itself.
+            if (this._handles.length) {
+                const targetHandle = this._handles.find(handle => {
+                    const target = _getEventTarget(event);
+                    return !!target && (target === handle || handle.contains(target));
+                });
+                if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {
+                    this._initializeDragSequence(targetHandle, event);
+                }
+            }
+            else if (!this.disabled) {
+                this._initializeDragSequence(this._rootElement, event);
+            }
+        };
+        /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */
+        this._pointerMove = (event) => {
+            const pointerPosition = this._getPointerPositionOnPage(event);
+            if (!this._hasStartedDragging) {
+                const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);
+                const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);
+                const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;
+                // Only start dragging after the user has moved more than the minimum distance in either
+                // direction. Note that this is preferrable over doing something like `skip(minimumDistance)`
+                // in the `pointerMove` subscription, because we're not guaranteed to have one move event
+                // per pixel of movement (e.g. if the user moves their pointer quickly).
+                if (isOverThreshold) {
+                    const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);
+                    const container = this._dropContainer;
+                    if (!isDelayElapsed) {
+                        this._endDragSequence(event);
+                        return;
+                    }
+                    // Prevent other drag sequences from starting while something in the container is still
+                    // being dragged. This can happen while we're waiting for the drop animation to finish
+                    // and can cause errors, because some elements might still be moving around.
+                    if (!container || (!container.isDragging() && !container.isReceiving())) {
+                        // Prevent the default action as soon as the dragging sequence is considered as
+                        // "started" since waiting for the next event can allow the device to begin scrolling.
+                        event.preventDefault();
+                        this._hasStartedDragging = true;
+                        this._ngZone.run(() => this._startDragSequence(event));
+                    }
+                }
+                return;
+            }
+            // We only need the preview dimensions if we have a boundary element.
+            if (this._boundaryElement) {
+                // Cache the preview element rect if we haven't cached it already or if
+                // we cached it too early before the element dimensions were computed.
+                if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {
+                    this._previewRect = (this._preview || this._rootElement).getBoundingClientRect();
+                }
+            }
+            // We prevent the default action down here so that we know that dragging has started. This is
+            // important for touch devices where doing this too early can unnecessarily block scrolling,
+            // if there's a dragging delay.
+            event.preventDefault();
+            const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);
+            this._hasMoved = true;
+            this._lastKnownPointerPosition = pointerPosition;
+            this._updatePointerDirectionDelta(constrainedPointerPosition);
+            if (this._dropContainer) {
+                this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);
+            }
+            else {
+                const activeTransform = this._activeTransform;
+                activeTransform.x =
+                    constrainedPointerPosition.x - this._pickupPositionOnPage.x + this._passiveTransform.x;
+                activeTransform.y =
+                    constrainedPointerPosition.y - this._pickupPositionOnPage.y + this._passiveTransform.y;
+                this._applyRootElementTransform(activeTransform.x, activeTransform.y);
+                // Apply transform as attribute if dragging and svg element to work for IE
+                if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {
+                    const appliedTransform = `translate(${activeTransform.x} ${activeTransform.y})`;
+                    this._rootElement.setAttribute('transform', appliedTransform);
+                }
+            }
+            // Since this event gets fired for every pixel while dragging, we only
+            // want to fire it if the consumer opted into it. Also we have to
+            // re-enter the zone because we run all of the events on the outside.
+            if (this._moveEvents.observers.length) {
+                this._ngZone.run(() => {
+                    this._moveEvents.next({
+                        source: this,
+                        pointerPosition: constrainedPointerPosition,
+                        event,
+                        distance: this._getDragDistance(constrainedPointerPosition),
+                        delta: this._pointerDirectionDelta
+                    });
+                });
+            }
+        };
+        /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */
+        this._pointerUp = (event) => {
+            this._endDragSequence(event);
+        };
+        this.withRootElement(element).withParent(_config.parentDragRef || null);
+        this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);
+        _dragDropRegistry.registerDragItem(this);
+    }
+    /** Whether starting to drag this element is disabled. */
+    get disabled() {
+        return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);
+    }
+    set disabled(value) {
+        const newValue = coerceBooleanProperty(value);
+        if (newValue !== this._disabled) {
+            this._disabled = newValue;
+            this._toggleNativeDragInteractions();
+            this._handles.forEach(handle => toggleNativeDragInteractions(handle, newValue));
+        }
+    }
+    /**
+     * Returns the element that is being used as a placeholder
+     * while the current element is being dragged.
+     */
+    getPlaceholderElement() {
+        return this._placeholder;
+    }
+    /** Returns the root draggable element. */
+    getRootElement() {
+        return this._rootElement;
+    }
+    /**
+     * Gets the currently-visible element that represents the drag item.
+     * While dragging this is the placeholder, otherwise it's the root element.
+     */
+    getVisibleElement() {
+        return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();
+    }
+    /** Registers the handles that can be used to drag the element. */
+    withHandles(handles) {
+        this._handles = handles.map(handle => coerceElement(handle));
+        this._handles.forEach(handle => toggleNativeDragInteractions(handle, this.disabled));
+        this._toggleNativeDragInteractions();
+        // Delete any lingering disabled handles that may have been destroyed. Note that we re-create
+        // the set, rather than iterate over it and filter out the destroyed handles, because while
+        // the ES spec allows for sets to be modified while they're being iterated over, some polyfills
+        // use an array internally which may throw an error.
+        const disabledHandles = new Set();
+        this._disabledHandles.forEach(handle => {
+            if (this._handles.indexOf(handle) > -1) {
+                disabledHandles.add(handle);
+            }
+        });
+        this._disabledHandles = disabledHandles;
+        return this;
+    }
+    /**
+     * Registers the template that should be used for the drag preview.
+     * @param template Template that from which to stamp out the preview.
+     */
+    withPreviewTemplate(template) {
+        this._previewTemplate = template;
+        return this;
+    }
+    /**
+     * Registers the template that should be used for the drag placeholder.
+     * @param template Template that from which to stamp out the placeholder.
+     */
+    withPlaceholderTemplate(template) {
+        this._placeholderTemplate = template;
+        return this;
+    }
+    /**
+     * Sets an alternate drag root element. The root element is the element that will be moved as
+     * the user is dragging. Passing an alternate root element is useful when trying to enable
+     * dragging on an element that you might not have access to.
+     */
+    withRootElement(rootElement) {
+        const element = coerceElement(rootElement);
+        if (element !== this._rootElement) {
+            if (this._rootElement) {
+                this._removeRootElementListeners(this._rootElement);
+            }
+            this._ngZone.runOutsideAngular(() => {
+                element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);
+                element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);
+            });
+            this._initialTransform = undefined;
+            this._rootElement = element;
+        }
+        if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {
+            this._ownerSVGElement = this._rootElement.ownerSVGElement;
+        }
+        return this;
+    }
+    /**
+     * Element to which the draggable's position will be constrained.
+     */
+    withBoundaryElement(boundaryElement) {
+        this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;
+        this._resizeSubscription.unsubscribe();
+        if (boundaryElement) {
+            this._resizeSubscription = this._viewportRuler
+                .change(10)
+                .subscribe(() => this._containInsideBoundaryOnResize());
+        }
+        return this;
+    }
+    /** Sets the parent ref that the ref is nested in.  */
+    withParent(parent) {
+        this._parentDragRef = parent;
+        return this;
+    }
+    /** Removes the dragging functionality from the DOM element. */
+    dispose() {
+        this._removeRootElementListeners(this._rootElement);
+        // Do this check before removing from the registry since it'll
+        // stop being considered as dragged once it is removed.
+        if (this.isDragging()) {
+            // Since we move out the element to the end of the body while it's being
+            // dragged, we have to make sure that it's removed if it gets destroyed.
+            removeNode(this._rootElement);
+        }
+        removeNode(this._anchor);
+        this._destroyPreview();
+        this._destroyPlaceholder();
+        this._dragDropRegistry.removeDragItem(this);
+        this._removeSubscriptions();
+        this.beforeStarted.complete();
+        this.started.complete();
+        this.released.complete();
+        this.ended.complete();
+        this.entered.complete();
+        this.exited.complete();
+        this.dropped.complete();
+        this._moveEvents.complete();
+        this._handles = [];
+        this._disabledHandles.clear();
+        this._dropContainer = undefined;
+        this._resizeSubscription.unsubscribe();
+        this._parentPositions.clear();
+        this._boundaryElement = this._rootElement = this._ownerSVGElement = this._placeholderTemplate =
+            this._previewTemplate = this._anchor = this._parentDragRef = null;
+    }
+    /** Checks whether the element is currently being dragged. */
+    isDragging() {
+        return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);
+    }
+    /** Resets a standalone drag item to its initial position. */
+    reset() {
+        this._rootElement.style.transform = this._initialTransform || '';
+        this._activeTransform = { x: 0, y: 0 };
+        this._passiveTransform = { x: 0, y: 0 };
+    }
+    /**
+     * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.
+     * @param handle Handle element that should be disabled.
+     */
+    disableHandle(handle) {
+        if (!this._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {
+            this._disabledHandles.add(handle);
+            toggleNativeDragInteractions(handle, true);
+        }
+    }
+    /**
+     * Enables a handle, if it has been disabled.
+     * @param handle Handle element to be enabled.
+     */
+    enableHandle(handle) {
+        if (this._disabledHandles.has(handle)) {
+            this._disabledHandles.delete(handle);
+            toggleNativeDragInteractions(handle, this.disabled);
+        }
+    }
+    /** Sets the layout direction of the draggable item. */
+    withDirection(direction) {
+        this._direction = direction;
+        return this;
+    }
+    /** Sets the container that the item is part of. */
+    _withDropContainer(container) {
+        this._dropContainer = container;
+    }
+    /**
+     * Gets the current position in pixels the draggable outside of a drop container.
+     */
+    getFreeDragPosition() {
+        const position = this.isDragging() ? this._activeTransform : this._passiveTransform;
+        return { x: position.x, y: position.y };
+    }
+    /**
+     * Sets the current position in pixels the draggable outside of a drop container.
+     * @param value New position to be set.
+     */
+    setFreeDragPosition(value) {
+        this._activeTransform = { x: 0, y: 0 };
+        this._passiveTransform.x = value.x;
+        this._passiveTransform.y = value.y;
+        if (!this._dropContainer) {
+            this._applyRootElementTransform(value.x, value.y);
+        }
+        return this;
+    }
+    /**
+     * Sets the container into which to insert the preview element.
+     * @param value Container into which to insert the preview.
+     */
+    withPreviewContainer(value) {
+        this._previewContainer = value;
+        return this;
+    }
+    /** Updates the item's sort order based on the last-known pointer position. */
+    _sortFromLastPointerPosition() {
+        const position = this._lastKnownPointerPosition;
+        if (position && this._dropContainer) {
+            this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);
+        }
+    }
+    /** Unsubscribes from the global subscriptions. */
+    _removeSubscriptions() {
+        this._pointerMoveSubscription.unsubscribe();
+        this._pointerUpSubscription.unsubscribe();
+        this._scrollSubscription.unsubscribe();
+    }
+    /** Destroys the preview element and its ViewRef. */
+    _destroyPreview() {
+        if (this._preview) {
+            removeNode(this._preview);
+        }
+        if (this._previewRef) {
+            this._previewRef.destroy();
+        }
+        this._preview = this._previewRef = null;
+    }
+    /** Destroys the placeholder element and its ViewRef. */
+    _destroyPlaceholder() {
+        if (this._placeholder) {
+            removeNode(this._placeholder);
+        }
+        if (this._placeholderRef) {
+            this._placeholderRef.destroy();
+        }
+        this._placeholder = this._placeholderRef = null;
+    }
+    /**
+     * Clears subscriptions and stops the dragging sequence.
+     * @param event Browser event object that ended the sequence.
+     */
+    _endDragSequence(event) {
+        // Note that here we use `isDragging` from the service, rather than from `this`.
+        // The difference is that the one from the service reflects whether a dragging sequence
+        // has been initiated, whereas the one on `this` includes whether the user has passed
+        // the minimum dragging threshold.
+        if (!this._dragDropRegistry.isDragging(this)) {
+            return;
+        }
+        this._removeSubscriptions();
+        this._dragDropRegistry.stopDragging(this);
+        this._toggleNativeDragInteractions();
+        if (this._handles) {
+            this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;
+        }
+        if (!this._hasStartedDragging) {
+            return;
+        }
+        this.released.next({ source: this });
+        if (this._dropContainer) {
+            // Stop scrolling immediately, instead of waiting for the animation to finish.
+            this._dropContainer._stopScrolling();
+            this._animatePreviewToPlaceholder().then(() => {
+                this._cleanupDragArtifacts(event);
+                this._cleanupCachedDimensions();
+                this._dragDropRegistry.stopDragging(this);
+            });
+        }
+        else {
+            // Convert the active transform into a passive one. This means that next time
+            // the user starts dragging the item, its position will be calculated relatively
+            // to the new passive transform.
+            this._passiveTransform.x = this._activeTransform.x;
+            const pointerPosition = this._getPointerPositionOnPage(event);
+            this._passiveTransform.y = this._activeTransform.y;
+            this._ngZone.run(() => {
+                this.ended.next({
+                    source: this,
+                    distance: this._getDragDistance(pointerPosition),
+                    dropPoint: pointerPosition
+                });
+            });
+            this._cleanupCachedDimensions();
+            this._dragDropRegistry.stopDragging(this);
+        }
+    }
+    /** Starts the dragging sequence. */
+    _startDragSequence(event) {
+        if (isTouchEvent(event)) {
+            this._lastTouchEventTime = Date.now();
+        }
+        this._toggleNativeDragInteractions();
+        const dropContainer = this._dropContainer;
+        if (dropContainer) {
+            const element = this._rootElement;
+            const parent = element.parentNode;
+            const placeholder = this._placeholder = this._createPlaceholderElement();
+            const anchor = this._anchor = this._anchor || this._document.createComment('');
+            // Needs to happen before the root element is moved.
+            const shadowRoot = this._getShadowRoot();
+            // Insert an anchor node so that we can restore the element's position in the DOM.
+            parent.insertBefore(anchor, element);
+            // There's no risk of transforms stacking when inside a drop container so
+            // we can keep the initial transform up to date any time dragging starts.
+            this._initialTransform = element.style.transform || '';
+            // Create the preview after the initial transform has
+            // been cached, because it can be affected by the transform.
+            this._preview = this._createPreviewElement();
+            // We move the element out at the end of the body and we make it hidden, because keeping it in
+            // place will throw off the consumer's `:last-child` selectors. We can't remove the element
+            // from the DOM completely, because iOS will stop firing all subsequent events in the chain.
+            toggleVisibility(element, false, dragImportantProperties);
+            this._document.body.appendChild(parent.replaceChild(placeholder, element));
+            this._getPreviewInsertionPoint(parent, shadowRoot).appendChild(this._preview);
+            this.started.next({ source: this }); // Emit before notifying the container.
+            dropContainer.start();
+            this._initialContainer = dropContainer;
+            this._initialIndex = dropContainer.getItemIndex(this);
+        }
+        else {
+            this.started.next({ source: this });
+            this._initialContainer = this._initialIndex = undefined;
+        }
+        // Important to run after we've called `start` on the parent container
+        // so that it has had time to resolve its scrollable parents.
+        this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);
+    }
+    /**
+     * Sets up the different variables and subscriptions
+     * that will be necessary for the dragging sequence.
+     * @param referenceElement Element that started the drag sequence.
+     * @param event Browser event object that started the sequence.
+     */
+    _initializeDragSequence(referenceElement, event) {
+        // Stop propagation if the item is inside another
+        // draggable so we don't start multiple drag sequences.
+        if (this._parentDragRef) {
+            event.stopPropagation();
+        }
+        const isDragging = this.isDragging();
+        const isTouchSequence = isTouchEvent(event);
+        const isAuxiliaryMouseButton = !isTouchSequence && event.button !== 0;
+        const rootElement = this._rootElement;
+        const target = _getEventTarget(event);
+        const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime &&
+            this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();
+        const isFakeEvent = isTouchSequence ? isFakeTouchstartFromScreenReader(event) :
+            isFakeMousedownFromScreenReader(event);
+        // If the event started from an element with the native HTML drag&drop, it'll interfere
+        // with our own dragging (e.g. `img` tags do it by default). Prevent the default action
+        // to stop it from happening. Note that preventing on `dragstart` also seems to work, but
+        // it's flaky and it fails if the user drags it away quickly. Also note that we only want
+        // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`
+        // events from firing on touch devices.
+        if (target && target.draggable && event.type === 'mousedown') {
+            event.preventDefault();
+        }
+        // Abort if the user is already dragging or is using a mouse button other than the primary one.
+        if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent || isFakeEvent) {
+            return;
+        }
+        // If we've got handles, we need to disable the tap highlight on the entire root element,
+        // otherwise iOS will still add it, even though all the drag interactions on the handle
+        // are disabled.
+        if (this._handles.length) {
+            this._rootElementTapHighlight = rootElement.style.webkitTapHighlightColor || '';
+            rootElement.style.webkitTapHighlightColor = 'transparent';
+        }
+        this._hasStartedDragging = this._hasMoved = false;
+        // Avoid multiple subscriptions and memory leaks when multi touch
+        // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)
+        this._removeSubscriptions();
+        this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);
+        this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);
+        this._scrollSubscription = this._dragDropRegistry
+            .scrolled(this._getShadowRoot())
+            .subscribe(scrollEvent => this._updateOnScroll(scrollEvent));
+        if (this._boundaryElement) {
+            this._boundaryRect = getMutableClientRect(this._boundaryElement);
+        }
+        // If we have a custom preview we can't know ahead of time how large it'll be so we position
+        // it next to the cursor. The exception is when the consumer has opted into making the preview
+        // the same size as the root element, in which case we do know the size.
+        const previewTemplate = this._previewTemplate;
+        this._pickupPositionInElement = previewTemplate && previewTemplate.template &&
+            !previewTemplate.matchSize ? { x: 0, y: 0 } :
+            this._getPointerPositionInElement(referenceElement, event);
+        const pointerPosition = this._pickupPositionOnPage = this._lastKnownPointerPosition =
+            this._getPointerPositionOnPage(event);
+        this._pointerDirectionDelta = { x: 0, y: 0 };
+        this._pointerPositionAtLastDirectionChange = { x: pointerPosition.x, y: pointerPosition.y };
+        this._dragStartTime = Date.now();
+        this._dragDropRegistry.startDragging(this, event);
+    }
+    /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */
+    _cleanupDragArtifacts(event) {
+        // Restore the element's visibility and insert it at its old position in the DOM.
+        // It's important that we maintain the position, because moving the element around in the DOM
+        // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,
+        // while moving the existing elements in all other cases.
+        toggleVisibility(this._rootElement, true, dragImportantProperties);
+        this._anchor.parentNode.replaceChild(this._rootElement, this._anchor);
+        this._destroyPreview();
+        this._destroyPlaceholder();
+        this._boundaryRect = this._previewRect = this._initialTransform = undefined;
+        // Re-enter the NgZone since we bound `document` events on the outside.
+        this._ngZone.run(() => {
+            const container = this._dropContainer;
+            const currentIndex = container.getItemIndex(this);
+            const pointerPosition = this._getPointerPositionOnPage(event);
+            const distance = this._getDragDistance(pointerPosition);
+            const isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);
+            this.ended.next({ source: this, distance, dropPoint: pointerPosition });
+            this.dropped.next({
+                item: this,
+                currentIndex,
+                previousIndex: this._initialIndex,
+                container: container,
+                previousContainer: this._initialContainer,
+                isPointerOverContainer,
+                distance,
+                dropPoint: pointerPosition
+            });
+            container.drop(this, currentIndex, this._initialIndex, this._initialContainer, isPointerOverContainer, distance, pointerPosition);
+            this._dropContainer = this._initialContainer;
+        });
+    }
+    /**
+     * Updates the item's position in its drop container, or moves it
+     * into a new one, depending on its current drag position.
+     */
+    _updateActiveDropContainer({ x, y }, { x: rawX, y: rawY }) {
+        // Drop container that draggable has been moved into.
+        let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);
+        // If we couldn't find a new container to move the item into, and the item has left its
+        // initial container, check whether the it's over the initial container. This handles the
+        // case where two containers are connected one way and the user tries to undo dragging an
+        // item into a new container.
+        if (!newContainer && this._dropContainer !== this._initialContainer &&
+            this._initialContainer._isOverContainer(x, y)) {
+            newContainer = this._initialContainer;
+        }
+        if (newContainer && newContainer !== this._dropContainer) {
+            this._ngZone.run(() => {
+                // Notify the old container that the item has left.
+                this.exited.next({ item: this, container: this._dropContainer });
+                this._dropContainer.exit(this);
+                // Notify the new container that the item has entered.
+                this._dropContainer = newContainer;
+                this._dropContainer.enter(this, x, y, newContainer === this._initialContainer &&
+                    // If we're re-entering the initial container and sorting is disabled,
+                    // put item the into its starting index to begin with.
+                    newContainer.sortingDisabled ? this._initialIndex : undefined);
+                this.entered.next({
+                    item: this,
+                    container: newContainer,
+                    currentIndex: newContainer.getItemIndex(this)
+                });
+            });
+        }
+        // Dragging may have been interrupted as a result of the events above.
+        if (this.isDragging()) {
+            this._dropContainer._startScrollingIfNecessary(rawX, rawY);
+            this._dropContainer._sortItem(this, x, y, this._pointerDirectionDelta);
+            this._applyPreviewTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);
+        }
+    }
+    /**
+     * Creates the element that will be rendered next to the user's pointer
+     * and will be used as a preview of the element that is being dragged.
+     */
+    _createPreviewElement() {
+        const previewConfig = this._previewTemplate;
+        const previewClass = this.previewClass;
+        const previewTemplate = previewConfig ? previewConfig.template : null;
+        let preview;
+        if (previewTemplate && previewConfig) {
+            // Measure the element before we've inserted the preview
+            // since the insertion could throw off the measurement.
+            const rootRect = previewConfig.matchSize ? this._rootElement.getBoundingClientRect() : null;
+            const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate, previewConfig.context);
+            viewRef.detectChanges();
+            preview = getRootNode(viewRef, this._document);
+            this._previewRef = viewRef;
+            if (previewConfig.matchSize) {
+                matchElementSize(preview, rootRect);
+            }
+            else {
+                preview.style.transform =
+                    getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);
+            }
+        }
+        else {
+            const element = this._rootElement;
+            preview = deepCloneNode(element);
+            matchElementSize(preview, element.getBoundingClientRect());
+            if (this._initialTransform) {
+                preview.style.transform = this._initialTransform;
+            }
+        }
+        extendStyles(preview.style, {
+            // It's important that we disable the pointer events on the preview, because
+            // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.
+            'pointer-events': 'none',
+            // We have to reset the margin, because it can throw off positioning relative to the viewport.
+            'margin': '0',
+            'position': 'fixed',
+            'top': '0',
+            'left': '0',
+            'z-index': `${this._config.zIndex || 1000}`
+        }, dragImportantProperties);
+        toggleNativeDragInteractions(preview, false);
+        preview.classList.add('cdk-drag-preview');
+        preview.setAttribute('dir', this._direction);
+        if (previewClass) {
+            if (Array.isArray(previewClass)) {
+                previewClass.forEach(className => preview.classList.add(className));
+            }
+            else {
+                preview.classList.add(previewClass);
+            }
+        }
+        return preview;
+    }
+    /**
+     * Animates the preview element from its current position to the location of the drop placeholder.
+     * @returns Promise that resolves when the animation completes.
+     */
+    _animatePreviewToPlaceholder() {
+        // If the user hasn't moved yet, the transitionend event won't fire.
+        if (!this._hasMoved) {
+            return Promise.resolve();
+        }
+        const placeholderRect = this._placeholder.getBoundingClientRect();
+        // Apply the class that adds a transition to the preview.
+        this._preview.classList.add('cdk-drag-animating');
+        // Move the preview to the placeholder position.
+        this._applyPreviewTransform(placeholderRect.left, placeholderRect.top);
+        // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since
+        // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to
+        // apply its style, we take advantage of the available info to figure out whether we need to
+        // bind the event in the first place.
+        const duration = getTransformTransitionDurationInMs(this._preview);
+        if (duration === 0) {
+            return Promise.resolve();
+        }
+        return this._ngZone.runOutsideAngular(() => {
+            return new Promise(resolve => {
+                const handler = ((event) => {
+                    var _a;
+                    if (!event || (_getEventTarget(event) === this._preview &&
+                        event.propertyName === 'transform')) {
+                        (_a = this._preview) === null || _a === void 0 ? void 0 : _a.removeEventListener('transitionend', handler);
+                        resolve();
+                        clearTimeout(timeout);
+                    }
+                });
+                // If a transition is short enough, the browser might not fire the `transitionend` event.
+                // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll
+                // fire if the transition hasn't completed when it was supposed to.
+                const timeout = setTimeout(handler, duration * 1.5);
+                this._preview.addEventListener('transitionend', handler);
+            });
+        });
+    }
+    /** Creates an element that will be shown instead of the current element while dragging. */
+    _createPlaceholderElement() {
+        const placeholderConfig = this._placeholderTemplate;
+        const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;
+        let placeholder;
+        if (placeholderTemplate) {
+            this._placeholderRef = placeholderConfig.viewContainer.createEmbeddedView(placeholderTemplate, placeholderConfig.context);
+            this._placeholderRef.detectChanges();
+            placeholder = getRootNode(this._placeholderRef, this._document);
+        }
+        else {
+            placeholder = deepCloneNode(this._rootElement);
+        }
+        placeholder.classList.add('cdk-drag-placeholder');
+        return placeholder;
+    }
+    /**
+     * Figures out the coordinates at which an element was picked up.
+     * @param referenceElement Element that initiated the dragging.
+     * @param event Event that initiated the dragging.
+     */
+    _getPointerPositionInElement(referenceElement, event) {
+        const elementRect = this._rootElement.getBoundingClientRect();
+        const handleElement = referenceElement === this._rootElement ? null : referenceElement;
+        const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;
+        const point = isTouchEvent(event) ? event.targetTouches[0] : event;
+        const scrollPosition = this._getViewportScrollPosition();
+        const x = point.pageX - referenceRect.left - scrollPosition.left;
+        const y = point.pageY - referenceRect.top - scrollPosition.top;
+        return {
+            x: referenceRect.left - elementRect.left + x,
+            y: referenceRect.top - elementRect.top + y
+        };
+    }
+    /** Determines the point of the page that was touched by the user. */
+    _getPointerPositionOnPage(event) {
+        const scrollPosition = this._getViewportScrollPosition();
+        const point = isTouchEvent(event) ?
+            // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.
+            // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`
+            // to have a value, but Firefox in device emulation mode has a bug where both can be empty
+            // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid
+            // throwing an error. The value returned here will be incorrect, but since this only
+            // breaks inside a developer tool and the value is only used for secondary information,
+            // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.
+            (event.touches[0] || event.changedTouches[0] || { pageX: 0, pageY: 0 }) : event;
+        const x = point.pageX - scrollPosition.left;
+        const y = point.pageY - scrollPosition.top;
+        // if dragging SVG element, try to convert from the screen coordinate system to the SVG
+        // coordinate system
+        if (this._ownerSVGElement) {
+            const svgMatrix = this._ownerSVGElement.getScreenCTM();
+            if (svgMatrix) {
+                const svgPoint = this._ownerSVGElement.createSVGPoint();
+                svgPoint.x = x;
+                svgPoint.y = y;
+                return svgPoint.matrixTransform(svgMatrix.inverse());
+            }
+        }
+        return { x, y };
+    }
+    /** Gets the pointer position on the page, accounting for any position constraints. */
+    _getConstrainedPointerPosition(point) {
+        const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;
+        let { x, y } = this.constrainPosition ? this.constrainPosition(point, this) : point;
+        if (this.lockAxis === 'x' || dropContainerLock === 'x') {
+            y = this._pickupPositionOnPage.y;
+        }
+        else if (this.lockAxis === 'y' || dropContainerLock === 'y') {
+            x = this._pickupPositionOnPage.x;
+        }
+        if (this._boundaryRect) {
+            const { x: pickupX, y: pickupY } = this._pickupPositionInElement;
+            const boundaryRect = this._boundaryRect;
+            const previewRect = this._previewRect;
+            const minY = boundaryRect.top + pickupY;
+            const maxY = boundaryRect.bottom - (previewRect.height - pickupY);
+            const minX = boundaryRect.left + pickupX;
+            const maxX = boundaryRect.right - (previewRect.width - pickupX);
+            x = clamp$1(x, minX, maxX);
+            y = clamp$1(y, minY, maxY);
+        }
+        return { x, y };
+    }
+    /** Updates the current drag delta, based on the user's current pointer position on the page. */
+    _updatePointerDirectionDelta(pointerPositionOnPage) {
+        const { x, y } = pointerPositionOnPage;
+        const delta = this._pointerDirectionDelta;
+        const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;
+        // Amount of pixels the user has dragged since the last time the direction changed.
+        const changeX = Math.abs(x - positionSinceLastChange.x);
+        const changeY = Math.abs(y - positionSinceLastChange.y);
+        // Because we handle pointer events on a per-pixel basis, we don't want the delta
+        // to change for every pixel, otherwise anything that depends on it can look erratic.
+        // To make the delta more consistent, we track how much the user has moved since the last
+        // delta change and we only update it after it has reached a certain threshold.
+        if (changeX > this._config.pointerDirectionChangeThreshold) {
+            delta.x = x > positionSinceLastChange.x ? 1 : -1;
+            positionSinceLastChange.x = x;
+        }
+        if (changeY > this._config.pointerDirectionChangeThreshold) {
+            delta.y = y > positionSinceLastChange.y ? 1 : -1;
+            positionSinceLastChange.y = y;
+        }
+        return delta;
+    }
+    /** Toggles the native drag interactions, based on how many handles are registered. */
+    _toggleNativeDragInteractions() {
+        if (!this._rootElement || !this._handles) {
+            return;
+        }
+        const shouldEnable = this._handles.length > 0 || !this.isDragging();
+        if (shouldEnable !== this._nativeInteractionsEnabled) {
+            this._nativeInteractionsEnabled = shouldEnable;
+            toggleNativeDragInteractions(this._rootElement, shouldEnable);
+        }
+    }
+    /** Removes the manually-added event listeners from the root element. */
+    _removeRootElementListeners(element) {
+        element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);
+        element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);
+    }
+    /**
+     * Applies a `transform` to the root element, taking into account any existing transforms on it.
+     * @param x New transform value along the X axis.
+     * @param y New transform value along the Y axis.
+     */
+    _applyRootElementTransform(x, y) {
+        const transform = getTransform(x, y);
+        // Cache the previous transform amount only after the first drag sequence, because
+        // we don't want our own transforms to stack on top of each other.
+        // Should be excluded none because none + translate3d(x, y, x) is invalid css
+        if (this._initialTransform == null) {
+            this._initialTransform = this._rootElement.style.transform
+                && this._rootElement.style.transform != 'none'
+                ? this._rootElement.style.transform
+                : '';
+        }
+        // Preserve the previous `transform` value, if there was one. Note that we apply our own
+        // transform before the user's, because things like rotation can affect which direction
+        // the element will be translated towards.
+        this._rootElement.style.transform = combineTransforms(transform, this._initialTransform);
+    }
+    /**
+     * Applies a `transform` to the preview, taking into account any existing transforms on it.
+     * @param x New transform value along the X axis.
+     * @param y New transform value along the Y axis.
+     */
+    _applyPreviewTransform(x, y) {
+        var _a;
+        // Only apply the initial transform if the preview is a clone of the original element, otherwise
+        // it could be completely different and the transform might not make sense anymore.
+        const initialTransform = ((_a = this._previewTemplate) === null || _a === void 0 ? void 0 : _a.template) ? undefined : this._initialTransform;
+        const transform = getTransform(x, y);
+        this._preview.style.transform = combineTransforms(transform, initialTransform);
+    }
+    /**
+     * Gets the distance that the user has dragged during the current drag sequence.
+     * @param currentPosition Current position of the user's pointer.
+     */
+    _getDragDistance(currentPosition) {
+        const pickupPosition = this._pickupPositionOnPage;
+        if (pickupPosition) {
+            return { x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y };
+        }
+        return { x: 0, y: 0 };
+    }
+    /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */
+    _cleanupCachedDimensions() {
+        this._boundaryRect = this._previewRect = undefined;
+        this._parentPositions.clear();
+    }
+    /**
+     * Checks whether the element is still inside its boundary after the viewport has been resized.
+     * If not, the position is adjusted so that the element fits again.
+     */
+    _containInsideBoundaryOnResize() {
+        let { x, y } = this._passiveTransform;
+        if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {
+            return;
+        }
+        const boundaryRect = this._boundaryElement.getBoundingClientRect();
+        const elementRect = this._rootElement.getBoundingClientRect();
+        // It's possible that the element got hidden away after dragging (e.g. by switching to a
+        // different tab). Don't do anything in this case so we don't clear the user's position.
+        if ((boundaryRect.width === 0 && boundaryRect.height === 0) ||
+            (elementRect.width === 0 && elementRect.height === 0)) {
+            return;
+        }
+        const leftOverflow = boundaryRect.left - elementRect.left;
+        const rightOverflow = elementRect.right - boundaryRect.right;
+        const topOverflow = boundaryRect.top - elementRect.top;
+        const bottomOverflow = elementRect.bottom - boundaryRect.bottom;
+        // If the element has become wider than the boundary, we can't
+        // do much to make it fit so we just anchor it to the left.
+        if (boundaryRect.width > elementRect.width) {
+            if (leftOverflow > 0) {
+                x += leftOverflow;
+            }
+            if (rightOverflow > 0) {
+                x -= rightOverflow;
+            }
+        }
+        else {
+            x = 0;
+        }
+        // If the element has become taller than the boundary, we can't
+        // do much to make it fit so we just anchor it to the top.
+        if (boundaryRect.height > elementRect.height) {
+            if (topOverflow > 0) {
+                y += topOverflow;
+            }
+            if (bottomOverflow > 0) {
+                y -= bottomOverflow;
+            }
+        }
+        else {
+            y = 0;
+        }
+        if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {
+            this.setFreeDragPosition({ y, x });
+        }
+    }
+    /** Gets the drag start delay, based on the event type. */
+    _getDragStartDelay(event) {
+        const value = this.dragStartDelay;
+        if (typeof value === 'number') {
+            return value;
+        }
+        else if (isTouchEvent(event)) {
+            return value.touch;
+        }
+        return value ? value.mouse : 0;
+    }
+    /** Updates the internal state of the draggable element when scrolling has occurred. */
+    _updateOnScroll(event) {
+        const scrollDifference = this._parentPositions.handleScroll(event);
+        if (scrollDifference) {
+            const target = _getEventTarget(event);
+            // ClientRect dimensions are based on the scroll position of the page and its parent node so
+            // we have to update the cached boundary ClientRect if the user has scrolled. Check for
+            // the `document` specifically since IE doesn't support `contains` on it.
+            if (this._boundaryRect && (target === this._document ||
+                (target !== this._boundaryElement && target.contains(this._boundaryElement)))) {
+                adjustClientRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);
+            }
+            this._pickupPositionOnPage.x += scrollDifference.left;
+            this._pickupPositionOnPage.y += scrollDifference.top;
+            // If we're in free drag mode, we have to update the active transform, because
+            // it isn't relative to the viewport like the preview inside a drop list.
+            if (!this._dropContainer) {
+                this._activeTransform.x -= scrollDifference.left;
+                this._activeTransform.y -= scrollDifference.top;
+                this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);
+            }
+        }
+    }
+    /** Gets the scroll position of the viewport. */
+    _getViewportScrollPosition() {
+        const cachedPosition = this._parentPositions.positions.get(this._document);
+        return cachedPosition ? cachedPosition.scrollPosition :
+            this._viewportRuler.getViewportScrollPosition();
+    }
+    /**
+     * Lazily resolves and returns the shadow root of the element. We do this in a function, rather
+     * than saving it in property directly on init, because we want to resolve it as late as possible
+     * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the
+     * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.
+     */
+    _getShadowRoot() {
+        if (this._cachedShadowRoot === undefined) {
+            this._cachedShadowRoot = _getShadowRoot(this._rootElement);
+        }
+        return this._cachedShadowRoot;
+    }
+    /** Gets the element into which the drag preview should be inserted. */
+    _getPreviewInsertionPoint(initialParent, shadowRoot) {
+        const previewContainer = this._previewContainer || 'global';
+        if (previewContainer === 'parent') {
+            return initialParent;
+        }
+        if (previewContainer === 'global') {
+            const documentRef = this._document;
+            // We can't use the body if the user is in fullscreen mode,
+            // because the preview will render under the fullscreen element.
+            // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.
+            return shadowRoot ||
+                documentRef.fullscreenElement ||
+                documentRef.webkitFullscreenElement ||
+                documentRef.mozFullScreenElement ||
+                documentRef.msFullscreenElement ||
+                documentRef.body;
+        }
+        return coerceElement(previewContainer);
+    }
+}
+/**
+ * Gets a 3d `transform` that can be applied to an element.
+ * @param x Desired position of the element along the X axis.
+ * @param y Desired position of the element along the Y axis.
+ */
+function getTransform(x, y) {
+    // Round the transforms since some browsers will
+    // blur the elements for sub-pixel transforms.
+    return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;
+}
+/** Clamps a value between a minimum and a maximum. */
+function clamp$1(value, min, max) {
+    return Math.max(min, Math.min(max, value));
+}
+/**
+ * Helper to remove a node from the DOM and to do all the necessary null checks.
+ * @param node Node to be removed.
+ */
+function removeNode(node) {
+    if (node && node.parentNode) {
+        node.parentNode.removeChild(node);
+    }
+}
+/** Determines whether an event is a touch event. */
+function isTouchEvent(event) {
+    // This function is called for every pixel that the user has dragged so we need it to be
+    // as fast as possible. Since we only bind mouse events and touch events, we can assume
+    // that if the event's name starts with `t`, it's a touch event.
+    return event.type[0] === 't';
+}
+/**
+ * Gets the root HTML element of an embedded view.
+ * If the root is not an HTML element it gets wrapped in one.
+ */
+function getRootNode(viewRef, _document) {
+    const rootNodes = viewRef.rootNodes;
+    if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {
+        return rootNodes[0];
+    }
+    const wrapper = _document.createElement('div');
+    rootNodes.forEach(node => wrapper.appendChild(node));
+    return wrapper;
+}
+/**
+ * Matches the target element's size to the source's size.
+ * @param target Element that needs to be resized.
+ * @param sourceRect Dimensions of the source element.
+ */
+function matchElementSize(target, sourceRect) {
+    target.style.width = `${sourceRect.width}px`;
+    target.style.height = `${sourceRect.height}px`;
+    target.style.transform = getTransform(sourceRect.left, sourceRect.top);
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Moves an item one index in an array to another.
+ * @param array Array in which to move the item.
+ * @param fromIndex Starting index of the item.
+ * @param toIndex Index to which the item should be moved.
+ */
+function moveItemInArray(array, fromIndex, toIndex) {
+    const from = clamp(fromIndex, array.length - 1);
+    const to = clamp(toIndex, array.length - 1);
+    if (from === to) {
+        return;
+    }
+    const target = array[from];
+    const delta = to < from ? -1 : 1;
+    for (let i = from; i !== to; i += delta) {
+        array[i] = array[i + delta];
+    }
+    array[to] = target;
+}
+/**
+ * Moves an item from one array to another.
+ * @param currentArray Array from which to transfer the item.
+ * @param targetArray Array into which to put the item.
+ * @param currentIndex Index of the item in its current array.
+ * @param targetIndex Index at which to insert the item.
+ */
+function transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {
+    const from = clamp(currentIndex, currentArray.length - 1);
+    const to = clamp(targetIndex, targetArray.length);
+    if (currentArray.length) {
+        targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);
+    }
+}
+/**
+ * Copies an item from one array to another, leaving it in its
+ * original position in current array.
+ * @param currentArray Array from which to copy the item.
+ * @param targetArray Array into which is copy the item.
+ * @param currentIndex Index of the item in its current array.
+ * @param targetIndex Index at which to insert the item.
+ *
+ */
+function copyArrayItem(currentArray, targetArray, currentIndex, targetIndex) {
+    const to = clamp(targetIndex, targetArray.length);
+    if (currentArray.length) {
+        targetArray.splice(to, 0, currentArray[currentIndex]);
+    }
+}
+/** Clamps a number between zero and a maximum. */
+function clamp(value, max) {
+    return Math.max(0, Math.min(max, value));
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Proximity, as a ratio to width/height, at which a
+ * dragged item will affect the drop container.
+ */
+const DROP_PROXIMITY_THRESHOLD = 0.05;
+/**
+ * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the
+ * viewport. The value comes from trying it out manually until it feels right.
+ */
+const SCROLL_PROXIMITY_THRESHOLD = 0.05;
+/**
+ * Reference to a drop list. Used to manipulate or dispose of the container.
+ */
+class DropListRef {
+    constructor(element, _dragDropRegistry, _document, _ngZone, _viewportRuler) {
+        this._dragDropRegistry = _dragDropRegistry;
+        this._ngZone = _ngZone;
+        this._viewportRuler = _viewportRuler;
+        /** Whether starting a dragging sequence from this container is disabled. */
+        this.disabled = false;
+        /** Whether sorting items within the list is disabled. */
+        this.sortingDisabled = false;
+        /**
+         * Whether auto-scrolling the view when the user
+         * moves their pointer close to the edges is disabled.
+         */
+        this.autoScrollDisabled = false;
+        /** Number of pixels to scroll for each frame when auto-scrolling an element. */
+        this.autoScrollStep = 2;
+        /**
+         * Function that is used to determine whether an item
+         * is allowed to be moved into a drop container.
+         */
+        this.enterPredicate = () => true;
+        /** Functions that is used to determine whether an item can be sorted into a particular index. */
+        this.sortPredicate = () => true;
+        /** Emits right before dragging has started. */
+        this.beforeStarted = new Subject();
+        /**
+         * Emits when the user has moved a new drag item into this container.
+         */
+        this.entered = new Subject();
+        /**
+         * Emits when the user removes an item from the container
+         * by dragging it into another container.
+         */
+        this.exited = new Subject();
+        /** Emits when the user drops an item inside the container. */
+        this.dropped = new Subject();
+        /** Emits as the user is swapping items while actively dragging. */
+        this.sorted = new Subject();
+        /** Whether an item in the list is being dragged. */
+        this._isDragging = false;
+        /** Cache of the dimensions of all the items inside the container. */
+        this._itemPositions = [];
+        /**
+         * Keeps track of the item that was last swapped with the dragged item, as well as what direction
+         * the pointer was moving in when the swap occured and whether the user's pointer continued to
+         * overlap with the swapped item after the swapping occurred.
+         */
+        this._previousSwap = { drag: null, delta: 0, overlaps: false };
+        /** Draggable items in the container. */
+        this._draggables = [];
+        /** Drop lists that are connected to the current one. */
+        this._siblings = [];
+        /** Direction in which the list is oriented. */
+        this._orientation = 'vertical';
+        /** Connected siblings that currently have a dragged item. */
+        this._activeSiblings = new Set();
+        /** Layout direction of the drop list. */
+        this._direction = 'ltr';
+        /** Subscription to the window being scrolled. */
+        this._viewportScrollSubscription = Subscription.EMPTY;
+        /** Vertical direction in which the list is currently scrolling. */
+        this._verticalScrollDirection = 0 /* NONE */;
+        /** Horizontal direction in which the list is currently scrolling. */
+        this._horizontalScrollDirection = 0 /* NONE */;
+        /** Used to signal to the current auto-scroll sequence when to stop. */
+        this._stopScrollTimers = new Subject();
+        /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */
+        this._cachedShadowRoot = null;
+        /** Starts the interval that'll auto-scroll the element. */
+        this._startScrollInterval = () => {
+            this._stopScrolling();
+            interval(0, animationFrameScheduler)
+                .pipe(takeUntil(this._stopScrollTimers))
+                .subscribe(() => {
+                const node = this._scrollNode;
+                const scrollStep = this.autoScrollStep;
+                if (this._verticalScrollDirection === 1 /* UP */) {
+                    incrementVerticalScroll(node, -scrollStep);
+                }
+                else if (this._verticalScrollDirection === 2 /* DOWN */) {
+                    incrementVerticalScroll(node, scrollStep);
+                }
+                if (this._horizontalScrollDirection === 1 /* LEFT */) {
+                    incrementHorizontalScroll(node, -scrollStep);
+                }
+                else if (this._horizontalScrollDirection === 2 /* RIGHT */) {
+                    incrementHorizontalScroll(node, scrollStep);
+                }
+            });
+        };
+        this.element = coerceElement(element);
+        this._document = _document;
+        this.withScrollableParents([this.element]);
+        _dragDropRegistry.registerDropContainer(this);
+        this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);
+    }
+    /** Removes the drop list functionality from the DOM element. */
+    dispose() {
+        this._stopScrolling();
+        this._stopScrollTimers.complete();
+        this._viewportScrollSubscription.unsubscribe();
+        this.beforeStarted.complete();
+        this.entered.complete();
+        this.exited.complete();
+        this.dropped.complete();
+        this.sorted.complete();
+        this._activeSiblings.clear();
+        this._scrollNode = null;
+        this._parentPositions.clear();
+        this._dragDropRegistry.removeDropContainer(this);
+    }
+    /** Whether an item from this list is currently being dragged. */
+    isDragging() {
+        return this._isDragging;
+    }
+    /** Starts dragging an item. */
+    start() {
+        this._draggingStarted();
+        this._notifyReceivingSiblings();
+    }
+    /**
+     * Emits an event to indicate that the user moved an item into the container.
+     * @param item Item that was moved into the container.
+     * @param pointerX Position of the item along the X axis.
+     * @param pointerY Position of the item along the Y axis.
+     * @param index Index at which the item entered. If omitted, the container will try to figure it
+     *   out automatically.
+     */
+    enter(item, pointerX, pointerY, index) {
+        this._draggingStarted();
+        // If sorting is disabled, we want the item to return to its starting
+        // position if the user is returning it to its initial container.
+        let newIndex;
+        if (index == null) {
+            newIndex = this.sortingDisabled ? this._draggables.indexOf(item) : -1;
+            if (newIndex === -1) {
+                // We use the coordinates of where the item entered the drop
+                // zone to figure out at which index it should be inserted.
+                newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);
+            }
+        }
+        else {
+            newIndex = index;
+        }
+        const activeDraggables = this._activeDraggables;
+        const currentIndex = activeDraggables.indexOf(item);
+        const placeholder = item.getPlaceholderElement();
+        let newPositionReference = activeDraggables[newIndex];
+        // If the item at the new position is the same as the item that is being dragged,
+        // it means that we're trying to restore the item to its initial position. In this
+        // case we should use the next item from the list as the reference.
+        if (newPositionReference === item) {
+            newPositionReference = activeDraggables[newIndex + 1];
+        }
+        // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it
+        // into another container and back again), we have to ensure that it isn't duplicated.
+        if (currentIndex > -1) {
+            activeDraggables.splice(currentIndex, 1);
+        }
+        // Don't use items that are being dragged as a reference, because
+        // their element has been moved down to the bottom of the body.
+        if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {
+            const element = newPositionReference.getRootElement();
+            element.parentElement.insertBefore(placeholder, element);
+            activeDraggables.splice(newIndex, 0, item);
+        }
+        else if (this._shouldEnterAsFirstChild(pointerX, pointerY)) {
+            const reference = activeDraggables[0].getRootElement();
+            reference.parentNode.insertBefore(placeholder, reference);
+            activeDraggables.unshift(item);
+        }
+        else {
+            coerceElement(this.element).appendChild(placeholder);
+            activeDraggables.push(item);
+        }
+        // The transform needs to be cleared so it doesn't throw off the measurements.
+        placeholder.style.transform = '';
+        // Note that the positions were already cached when we called `start` above,
+        // but we need to refresh them since the amount of items has changed and also parent rects.
+        this._cacheItemPositions();
+        this._cacheParentPositions();
+        // Notify siblings at the end so that the item has been inserted into the `activeDraggables`.
+        this._notifyReceivingSiblings();
+        this.entered.next({ item, container: this, currentIndex: this.getItemIndex(item) });
+    }
+    /**
+     * Removes an item from the container after it was dragged into another container by the user.
+     * @param item Item that was dragged out.
+     */
+    exit(item) {
+        this._reset();
+        this.exited.next({ item, container: this });
+    }
+    /**
+     * Drops an item into this container.
+     * @param item Item being dropped into the container.
+     * @param currentIndex Index at which the item should be inserted.
+     * @param previousIndex Index of the item when dragging started.
+     * @param previousContainer Container from which the item got dragged in.
+     * @param isPointerOverContainer Whether the user's pointer was over the
+     *    container when the item was dropped.
+     * @param distance Distance the user has dragged since the start of the dragging sequence.
+     */
+    drop(item, currentIndex, previousIndex, previousContainer, isPointerOverContainer, distance, dropPoint) {
+        this._reset();
+        this.dropped.next({
+            item,
+            currentIndex,
+            previousIndex,
+            container: this,
+            previousContainer,
+            isPointerOverContainer,
+            distance,
+            dropPoint
+        });
+    }
+    /**
+     * Sets the draggable items that are a part of this list.
+     * @param items Items that are a part of this list.
+     */
+    withItems(items) {
+        const previousItems = this._draggables;
+        this._draggables = items;
+        items.forEach(item => item._withDropContainer(this));
+        if (this.isDragging()) {
+            const draggedItems = previousItems.filter(item => item.isDragging());
+            // If all of the items being dragged were removed
+            // from the list, abort the current drag sequence.
+            if (draggedItems.every(item => items.indexOf(item) === -1)) {
+                this._reset();
+            }
+            else {
+                this._cacheItems();
+            }
+        }
+        return this;
+    }
+    /** Sets the layout direction of the drop list. */
+    withDirection(direction) {
+        this._direction = direction;
+        return this;
+    }
+    /**
+     * Sets the containers that are connected to this one. When two or more containers are
+     * connected, the user will be allowed to transfer items between them.
+     * @param connectedTo Other containers that the current containers should be connected to.
+     */
+    connectedTo(connectedTo) {
+        this._siblings = connectedTo.slice();
+        return this;
+    }
+    /**
+     * Sets the orientation of the container.
+     * @param orientation New orientation for the container.
+     */
+    withOrientation(orientation) {
+        this._orientation = orientation;
+        return this;
+    }
+    /**
+     * Sets which parent elements are can be scrolled while the user is dragging.
+     * @param elements Elements that can be scrolled.
+     */
+    withScrollableParents(elements) {
+        const element = coerceElement(this.element);
+        // We always allow the current element to be scrollable
+        // so we need to ensure that it's in the array.
+        this._scrollableElements =
+            elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();
+        return this;
+    }
+    /** Gets the scrollable parents that are registered with this drop container. */
+    getScrollableParents() {
+        return this._scrollableElements;
+    }
+    /**
+     * Figures out the index of an item in the container.
+     * @param item Item whose index should be determined.
+     */
+    getItemIndex(item) {
+        if (!this._isDragging) {
+            return this._draggables.indexOf(item);
+        }
+        // Items are sorted always by top/left in the cache, however they flow differently in RTL.
+        // The rest of the logic still stands no matter what orientation we're in, however
+        // we need to invert the array when determining the index.
+        const items = this._orientation === 'horizontal' && this._direction === 'rtl' ?
+            this._itemPositions.slice().reverse() : this._itemPositions;
+        return findIndex(items, currentItem => currentItem.drag === item);
+    }
+    /**
+     * Whether the list is able to receive the item that
+     * is currently being dragged inside a connected drop list.
+     */
+    isReceiving() {
+        return this._activeSiblings.size > 0;
+    }
+    /**
+     * Sorts an item inside the container based on its position.
+     * @param item Item to be sorted.
+     * @param pointerX Position of the item along the X axis.
+     * @param pointerY Position of the item along the Y axis.
+     * @param pointerDelta Direction in which the pointer is moving along each axis.
+     */
+    _sortItem(item, pointerX, pointerY, pointerDelta) {
+        // Don't sort the item if sorting is disabled or it's out of range.
+        if (this.sortingDisabled || !this._clientRect ||
+            !isPointerNearClientRect(this._clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {
+            return;
+        }
+        const siblings = this._itemPositions;
+        const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);
+        if (newIndex === -1 && siblings.length > 0) {
+            return;
+        }
+        const isHorizontal = this._orientation === 'horizontal';
+        const currentIndex = findIndex(siblings, currentItem => currentItem.drag === item);
+        const siblingAtNewPosition = siblings[newIndex];
+        const currentPosition = siblings[currentIndex].clientRect;
+        const newPosition = siblingAtNewPosition.clientRect;
+        const delta = currentIndex > newIndex ? 1 : -1;
+        // How many pixels the item's placeholder should be offset.
+        const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);
+        // How many pixels all the other items should be offset.
+        const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);
+        // Save the previous order of the items before moving the item to its new index.
+        // We use this to check whether an item has been moved as a result of the sorting.
+        const oldOrder = siblings.slice();
+        // Shuffle the array in place.
+        moveItemInArray(siblings, currentIndex, newIndex);
+        this.sorted.next({
+            previousIndex: currentIndex,
+            currentIndex: newIndex,
+            container: this,
+            item
+        });
+        siblings.forEach((sibling, index) => {
+            // Don't do anything if the position hasn't changed.
+            if (oldOrder[index] === sibling) {
+                return;
+            }
+            const isDraggedItem = sibling.drag === item;
+            const offset = isDraggedItem ? itemOffset : siblingOffset;
+            const elementToOffset = isDraggedItem ? item.getPlaceholderElement() :
+                sibling.drag.getRootElement();
+            // Update the offset to reflect the new position.
+            sibling.offset += offset;
+            // Since we're moving the items with a `transform`, we need to adjust their cached
+            // client rects to reflect their new position, as well as swap their positions in the cache.
+            // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the
+            // elements may be mid-animation which will give us a wrong result.
+            if (isHorizontal) {
+                // Round the transforms since some browsers will
+                // blur the elements, for sub-pixel transforms.
+                elementToOffset.style.transform = combineTransforms(`translate3d(${Math.round(sibling.offset)}px, 0, 0)`, sibling.initialTransform);
+                adjustClientRect(sibling.clientRect, 0, offset);
+            }
+            else {
+                elementToOffset.style.transform = combineTransforms(`translate3d(0, ${Math.round(sibling.offset)}px, 0)`, sibling.initialTransform);
+                adjustClientRect(sibling.clientRect, offset, 0);
+            }
+        });
+        // Note that it's important that we do this after the client rects have been adjusted.
+        this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);
+        this._previousSwap.drag = siblingAtNewPosition.drag;
+        this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;
+    }
+    /**
+     * Checks whether the user's pointer is close to the edges of either the
+     * viewport or the drop list and starts the auto-scroll sequence.
+     * @param pointerX User's pointer position along the x axis.
+     * @param pointerY User's pointer position along the y axis.
+     */
+    _startScrollingIfNecessary(pointerX, pointerY) {
+        if (this.autoScrollDisabled) {
+            return;
+        }
+        let scrollNode;
+        let verticalScrollDirection = 0 /* NONE */;
+        let horizontalScrollDirection = 0 /* NONE */;
+        // Check whether we should start scrolling any of the parent containers.
+        this._parentPositions.positions.forEach((position, element) => {
+            // We have special handling for the `document` below. Also this would be
+            // nicer with a  for...of loop, but it requires changing a compiler flag.
+            if (element === this._document || !position.clientRect || scrollNode) {
+                return;
+            }
+            if (isPointerNearClientRect(position.clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {
+                [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(element, position.clientRect, pointerX, pointerY);
+                if (verticalScrollDirection || horizontalScrollDirection) {
+                    scrollNode = element;
+                }
+            }
+        });
+        // Otherwise check if we can start scrolling the viewport.
+        if (!verticalScrollDirection && !horizontalScrollDirection) {
+            const { width, height } = this._viewportRuler.getViewportSize();
+            const clientRect = { width, height, top: 0, right: width, bottom: height, left: 0 };
+            verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);
+            horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);
+            scrollNode = window;
+        }
+        if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection ||
+            horizontalScrollDirection !== this._horizontalScrollDirection ||
+            scrollNode !== this._scrollNode)) {
+            this._verticalScrollDirection = verticalScrollDirection;
+            this._horizontalScrollDirection = horizontalScrollDirection;
+            this._scrollNode = scrollNode;
+            if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {
+                this._ngZone.runOutsideAngular(this._startScrollInterval);
+            }
+            else {
+                this._stopScrolling();
+            }
+        }
+    }
+    /** Stops any currently-running auto-scroll sequences. */
+    _stopScrolling() {
+        this._stopScrollTimers.next();
+    }
+    /** Starts the dragging sequence within the list. */
+    _draggingStarted() {
+        const styles = coerceElement(this.element).style;
+        this.beforeStarted.next();
+        this._isDragging = true;
+        // We need to disable scroll snapping while the user is dragging, because it breaks automatic
+        // scrolling. The browser seems to round the value based on the snapping points which means
+        // that we can't increment/decrement the scroll position.
+        this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';
+        styles.scrollSnapType = styles.msScrollSnapType = 'none';
+        this._cacheItems();
+        this._viewportScrollSubscription.unsubscribe();
+        this._listenToScrollEvents();
+    }
+    /** Caches the positions of the configured scrollable parents. */
+    _cacheParentPositions() {
+        const element = coerceElement(this.element);
+        this._parentPositions.cache(this._scrollableElements);
+        // The list element is always in the `scrollableElements`
+        // so we can take advantage of the cached `ClientRect`.
+        this._clientRect = this._parentPositions.positions.get(element).clientRect;
+    }
+    /** Refreshes the position cache of the items and sibling containers. */
+    _cacheItemPositions() {
+        const isHorizontal = this._orientation === 'horizontal';
+        this._itemPositions = this._activeDraggables.map(drag => {
+            const elementToMeasure = drag.getVisibleElement();
+            return {
+                drag,
+                offset: 0,
+                initialTransform: elementToMeasure.style.transform || '',
+                clientRect: getMutableClientRect(elementToMeasure),
+            };
+        }).sort((a, b) => {
+            return isHorizontal ? a.clientRect.left - b.clientRect.left :
+                a.clientRect.top - b.clientRect.top;
+        });
+    }
+    /** Resets the container to its initial state. */
+    _reset() {
+        this._isDragging = false;
+        const styles = coerceElement(this.element).style;
+        styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;
+        // TODO(crisbeto): may have to wait for the animations to finish.
+        this._activeDraggables.forEach(item => {
+            var _a;
+            const rootElement = item.getRootElement();
+            if (rootElement) {
+                const initialTransform = (_a = this._itemPositions
+                    .find(current => current.drag === item)) === null || _a === void 0 ? void 0 : _a.initialTransform;
+                rootElement.style.transform = initialTransform || '';
+            }
+        });
+        this._siblings.forEach(sibling => sibling._stopReceiving(this));
+        this._activeDraggables = [];
+        this._itemPositions = [];
+        this._previousSwap.drag = null;
+        this._previousSwap.delta = 0;
+        this._previousSwap.overlaps = false;
+        this._stopScrolling();
+        this._viewportScrollSubscription.unsubscribe();
+        this._parentPositions.clear();
+    }
+    /**
+     * Gets the offset in pixels by which the items that aren't being dragged should be moved.
+     * @param currentIndex Index of the item currently being dragged.
+     * @param siblings All of the items in the list.
+     * @param delta Direction in which the user is moving.
+     */
+    _getSiblingOffsetPx(currentIndex, siblings, delta) {
+        const isHorizontal = this._orientation === 'horizontal';
+        const currentPosition = siblings[currentIndex].clientRect;
+        const immediateSibling = siblings[currentIndex + delta * -1];
+        let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;
+        if (immediateSibling) {
+            const start = isHorizontal ? 'left' : 'top';
+            const end = isHorizontal ? 'right' : 'bottom';
+            // Get the spacing between the start of the current item and the end of the one immediately
+            // after it in the direction in which the user is dragging, or vice versa. We add it to the
+            // offset in order to push the element to where it will be when it's inline and is influenced
+            // by the `margin` of its siblings.
+            if (delta === -1) {
+                siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];
+            }
+            else {
+                siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];
+            }
+        }
+        return siblingOffset;
+    }
+    /**
+     * Gets the offset in pixels by which the item that is being dragged should be moved.
+     * @param currentPosition Current position of the item.
+     * @param newPosition Position of the item where the current item should be moved.
+     * @param delta Direction in which the user is moving.
+     */
+    _getItemOffsetPx(currentPosition, newPosition, delta) {
+        const isHorizontal = this._orientation === 'horizontal';
+        let itemOffset = isHorizontal ? newPosition.left - currentPosition.left :
+            newPosition.top - currentPosition.top;
+        // Account for differences in the item width/height.
+        if (delta === -1) {
+            itemOffset += isHorizontal ? newPosition.width - currentPosition.width :
+                newPosition.height - currentPosition.height;
+        }
+        return itemOffset;
+    }
+    /**
+     * Checks if pointer is entering in the first position
+     * @param pointerX Position of the user's pointer along the X axis.
+     * @param pointerY Position of the user's pointer along the Y axis.
+     */
+    _shouldEnterAsFirstChild(pointerX, pointerY) {
+        if (!this._activeDraggables.length) {
+            return false;
+        }
+        const itemPositions = this._itemPositions;
+        const isHorizontal = this._orientation === 'horizontal';
+        // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index
+        // check if container is using some sort of "reverse" ordering (eg: flex-direction: row-reverse)
+        const reversed = itemPositions[0].drag !== this._activeDraggables[0];
+        if (reversed) {
+            const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;
+            return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;
+        }
+        else {
+            const firstItemRect = itemPositions[0].clientRect;
+            return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;
+        }
+    }
+    /**
+     * Gets the index of an item in the drop container, based on the position of the user's pointer.
+     * @param item Item that is being sorted.
+     * @param pointerX Position of the user's pointer along the X axis.
+     * @param pointerY Position of the user's pointer along the Y axis.
+     * @param delta Direction in which the user is moving their pointer.
+     */
+    _getItemIndexFromPointerPosition(item, pointerX, pointerY, delta) {
+        const isHorizontal = this._orientation === 'horizontal';
+        const index = findIndex(this._itemPositions, ({ drag, clientRect }, _, array) => {
+            if (drag === item) {
+                // If there's only one item left in the container, it must be
+                // the dragged item itself so we use it as a reference.
+                return array.length < 2;
+            }
+            if (delta) {
+                const direction = isHorizontal ? delta.x : delta.y;
+                // If the user is still hovering over the same item as last time, their cursor hasn't left
+                // the item after we made the swap, and they didn't change the direction in which they're
+                // dragging, we don't consider it a direction swap.
+                if (drag === this._previousSwap.drag && this._previousSwap.overlaps &&
+                    direction === this._previousSwap.delta) {
+                    return false;
+                }
+            }
+            return isHorizontal ?
+                // Round these down since most browsers report client rects with
+                // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.
+                pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right) :
+                pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);
+        });
+        return (index === -1 || !this.sortPredicate(index, item, this)) ? -1 : index;
+    }
+    /** Caches the current items in the list and their positions. */
+    _cacheItems() {
+        this._activeDraggables = this._draggables.slice();
+        this._cacheItemPositions();
+        this._cacheParentPositions();
+    }
+    /**
+     * Checks whether the user's pointer is positioned over the container.
+     * @param x Pointer position along the X axis.
+     * @param y Pointer position along the Y axis.
+     */
+    _isOverContainer(x, y) {
+        return this._clientRect != null && isInsideClientRect(this._clientRect, x, y);
+    }
+    /**
+     * Figures out whether an item should be moved into a sibling
+     * drop container, based on its current position.
+     * @param item Drag item that is being moved.
+     * @param x Position of the item along the X axis.
+     * @param y Position of the item along the Y axis.
+     */
+    _getSiblingContainerFromPosition(item, x, y) {
+        return this._siblings.find(sibling => sibling._canReceive(item, x, y));
+    }
+    /**
+     * Checks whether the drop list can receive the passed-in item.
+     * @param item Item that is being dragged into the list.
+     * @param x Position of the item along the X axis.
+     * @param y Position of the item along the Y axis.
+     */
+    _canReceive(item, x, y) {
+        if (!this._clientRect || !isInsideClientRect(this._clientRect, x, y) ||
+            !this.enterPredicate(item, this)) {
+            return false;
+        }
+        const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y);
+        // If there's no element at the pointer position, then
+        // the client rect is probably scrolled out of the view.
+        if (!elementFromPoint) {
+            return false;
+        }
+        const nativeElement = coerceElement(this.element);
+        // The `ClientRect`, that we're using to find the container over which the user is
+        // hovering, doesn't give us any information on whether the element has been scrolled
+        // out of the view or whether it's overlapping with other containers. This means that
+        // we could end up transferring the item into a container that's invisible or is positioned
+        // below another one. We use the result from `elementFromPoint` to get the top-most element
+        // at the pointer position and to find whether it's one of the intersecting drop containers.
+        return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);
+    }
+    /**
+     * Called by one of the connected drop lists when a dragging sequence has started.
+     * @param sibling Sibling in which dragging has started.
+     */
+    _startReceiving(sibling, items) {
+        const activeSiblings = this._activeSiblings;
+        if (!activeSiblings.has(sibling) && items.every(item => {
+            // Note that we have to add an exception to the `enterPredicate` for items that started off
+            // in this drop list. The drag ref has logic that allows an item to return to its initial
+            // container, if it has left the initial container and none of the connected containers
+            // allow it to enter. See `DragRef._updateActiveDropContainer` for more context.
+            return this.enterPredicate(item, this) || this._draggables.indexOf(item) > -1;
+        })) {
+            activeSiblings.add(sibling);
+            this._cacheParentPositions();
+            this._listenToScrollEvents();
+        }
+    }
+    /**
+     * Called by a connected drop list when dragging has stopped.
+     * @param sibling Sibling whose dragging has stopped.
+     */
+    _stopReceiving(sibling) {
+        this._activeSiblings.delete(sibling);
+        this._viewportScrollSubscription.unsubscribe();
+    }
+    /**
+     * Starts listening to scroll events on the viewport.
+     * Used for updating the internal state of the list.
+     */
+    _listenToScrollEvents() {
+        this._viewportScrollSubscription = this._dragDropRegistry
+            .scrolled(this._getShadowRoot())
+            .subscribe(event => {
+            if (this.isDragging()) {
+                const scrollDifference = this._parentPositions.handleScroll(event);
+                if (scrollDifference) {
+                    // Since we know the amount that the user has scrolled we can shift all of the
+                    // client rectangles ourselves. This is cheaper than re-measuring everything and
+                    // we can avoid inconsistent behavior where we might be measuring the element before
+                    // its position has changed.
+                    this._itemPositions.forEach(({ clientRect }) => {
+                        adjustClientRect(clientRect, scrollDifference.top, scrollDifference.left);
+                    });
+                    // We need two loops for this, because we want all of the cached
+                    // positions to be up-to-date before we re-sort the item.
+                    this._itemPositions.forEach(({ drag }) => {
+                        if (this._dragDropRegistry.isDragging(drag)) {
+                            // We need to re-sort the item manually, because the pointer move
+                            // events won't be dispatched while the user is scrolling.
+                            drag._sortFromLastPointerPosition();
+                        }
+                    });
+                }
+            }
+            else if (this.isReceiving()) {
+                this._cacheParentPositions();
+            }
+        });
+    }
+    /**
+     * Lazily resolves and returns the shadow root of the element. We do this in a function, rather
+     * than saving it in property directly on init, because we want to resolve it as late as possible
+     * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the
+     * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.
+     */
+    _getShadowRoot() {
+        if (!this._cachedShadowRoot) {
+            const shadowRoot = _getShadowRoot(coerceElement(this.element));
+            this._cachedShadowRoot = shadowRoot || this._document;
+        }
+        return this._cachedShadowRoot;
+    }
+    /** Notifies any siblings that may potentially receive the item. */
+    _notifyReceivingSiblings() {
+        const draggedItems = this._activeDraggables.filter(item => item.isDragging());
+        this._siblings.forEach(sibling => sibling._startReceiving(this, draggedItems));
+    }
+}
+/**
+ * Finds the index of an item that matches a predicate function. Used as an equivalent
+ * of `Array.prototype.findIndex` which isn't part of the standard Google typings.
+ * @param array Array in which to look for matches.
+ * @param predicate Function used to determine whether an item is a match.
+ */
+function findIndex(array, predicate) {
+    for (let i = 0; i < array.length; i++) {
+        if (predicate(array[i], i, array)) {
+            return i;
+        }
+    }
+    return -1;
+}
+/**
+ * Increments the vertical scroll position of a node.
+ * @param node Node whose scroll position should change.
+ * @param amount Amount of pixels that the `node` should be scrolled.
+ */
+function incrementVerticalScroll(node, amount) {
+    if (node === window) {
+        node.scrollBy(0, amount);
+    }
+    else {
+        // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.
+        node.scrollTop += amount;
+    }
+}
+/**
+ * Increments the horizontal scroll position of a node.
+ * @param node Node whose scroll position should change.
+ * @param amount Amount of pixels that the `node` should be scrolled.
+ */
+function incrementHorizontalScroll(node, amount) {
+    if (node === window) {
+        node.scrollBy(amount, 0);
+    }
+    else {
+        // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.
+        node.scrollLeft += amount;
+    }
+}
+/**
+ * Gets whether the vertical auto-scroll direction of a node.
+ * @param clientRect Dimensions of the node.
+ * @param pointerY Position of the user's pointer along the y axis.
+ */
+function getVerticalScrollDirection(clientRect, pointerY) {
+    const { top, bottom, height } = clientRect;
+    const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;
+    if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {
+        return 1 /* UP */;
+    }
+    else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {
+        return 2 /* DOWN */;
+    }
+    return 0 /* NONE */;
+}
+/**
+ * Gets whether the horizontal auto-scroll direction of a node.
+ * @param clientRect Dimensions of the node.
+ * @param pointerX Position of the user's pointer along the x axis.
+ */
+function getHorizontalScrollDirection(clientRect, pointerX) {
+    const { left, right, width } = clientRect;
+    const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;
+    if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {
+        return 1 /* LEFT */;
+    }
+    else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {
+        return 2 /* RIGHT */;
+    }
+    return 0 /* NONE */;
+}
+/**
+ * Gets the directions in which an element node should be scrolled,
+ * assuming that the user's pointer is already within it scrollable region.
+ * @param element Element for which we should calculate the scroll direction.
+ * @param clientRect Bounding client rectangle of the element.
+ * @param pointerX Position of the user's pointer along the x axis.
+ * @param pointerY Position of the user's pointer along the y axis.
+ */
+function getElementScrollDirections(element, clientRect, pointerX, pointerY) {
+    const computedVertical = getVerticalScrollDirection(clientRect, pointerY);
+    const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);
+    let verticalScrollDirection = 0 /* NONE */;
+    let horizontalScrollDirection = 0 /* NONE */;
+    // Note that we here we do some extra checks for whether the element is actually scrollable in
+    // a certain direction and we only assign the scroll direction if it is. We do this so that we
+    // can allow other elements to be scrolled, if the current element can't be scrolled anymore.
+    // This allows us to handle cases where the scroll regions of two scrollable elements overlap.
+    if (computedVertical) {
+        const scrollTop = element.scrollTop;
+        if (computedVertical === 1 /* UP */) {
+            if (scrollTop > 0) {
+                verticalScrollDirection = 1 /* UP */;
+            }
+        }
+        else if (element.scrollHeight - scrollTop > element.clientHeight) {
+            verticalScrollDirection = 2 /* DOWN */;
+        }
+    }
+    if (computedHorizontal) {
+        const scrollLeft = element.scrollLeft;
+        if (computedHorizontal === 1 /* LEFT */) {
+            if (scrollLeft > 0) {
+                horizontalScrollDirection = 1 /* LEFT */;
+            }
+        }
+        else if (element.scrollWidth - scrollLeft > element.clientWidth) {
+            horizontalScrollDirection = 2 /* RIGHT */;
+        }
+    }
+    return [verticalScrollDirection, horizontalScrollDirection];
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Event options that can be used to bind an active, capturing event. */
+const activeCapturingEventOptions = normalizePassiveListenerOptions({
+    passive: false,
+    capture: true
+});
+/**
+ * Service that keeps track of all the drag item and drop container
+ * instances, and manages global event listeners on the `document`.
+ * @docs-private
+ */
+// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order
+// to avoid circular imports. If we were to reference them here, importing the registry into the
+// classes that are registering themselves will introduce a circular import.
+class DragDropRegistry {
+    constructor(_ngZone, _document) {
+        this._ngZone = _ngZone;
+        /** Registered drop container instances. */
+        this._dropInstances = new Set();
+        /** Registered drag item instances. */
+        this._dragInstances = new Set();
+        /** Drag item instances that are currently being dragged. */
+        this._activeDragInstances = [];
+        /** Keeps track of the event listeners that we've bound to the `document`. */
+        this._globalListeners = new Map();
+        /**
+         * Predicate function to check if an item is being dragged.  Moved out into a property,
+         * because it'll be called a lot and we don't want to create a new function every time.
+         */
+        this._draggingPredicate = (item) => item.isDragging();
+        /**
+         * Emits the `touchmove` or `mousemove` events that are dispatched
+         * while the user is dragging a drag item instance.
+         */
+        this.pointerMove = new Subject();
+        /**
+         * Emits the `touchend` or `mouseup` events that are dispatched
+         * while the user is dragging a drag item instance.
+         */
+        this.pointerUp = new Subject();
+        /**
+         * Emits when the viewport has been scrolled while the user is dragging an item.
+         * @deprecated To be turned into a private member. Use the `scrolled` method instead.
+         * @breaking-change 13.0.0
+         */
+        this.scroll = new Subject();
+        /**
+         * Event listener that will prevent the default browser action while the user is dragging.
+         * @param event Event whose default action should be prevented.
+         */
+        this._preventDefaultWhileDragging = (event) => {
+            if (this._activeDragInstances.length > 0) {
+                event.preventDefault();
+            }
+        };
+        /** Event listener for `touchmove` that is bound even if no dragging is happening. */
+        this._persistentTouchmoveListener = (event) => {
+            if (this._activeDragInstances.length > 0) {
+                // Note that we only want to prevent the default action after dragging has actually started.
+                // Usually this is the same time at which the item is added to the `_activeDragInstances`,
+                // but it could be pushed back if the user has set up a drag delay or threshold.
+                if (this._activeDragInstances.some(this._draggingPredicate)) {
+                    event.preventDefault();
+                }
+                this.pointerMove.next(event);
+            }
+        };
+        this._document = _document;
+    }
+    /** Adds a drop container to the registry. */
+    registerDropContainer(drop) {
+        if (!this._dropInstances.has(drop)) {
+            this._dropInstances.add(drop);
+        }
+    }
+    /** Adds a drag item instance to the registry. */
+    registerDragItem(drag) {
+        this._dragInstances.add(drag);
+        // The `touchmove` event gets bound once, ahead of time, because WebKit
+        // won't preventDefault on a dynamically-added `touchmove` listener.
+        // See https://bugs.webkit.org/show_bug.cgi?id=184250.
+        if (this._dragInstances.size === 1) {
+            this._ngZone.runOutsideAngular(() => {
+                // The event handler has to be explicitly active,
+                // because newer browsers make it passive by default.
+                this._document.addEventListener('touchmove', this._persistentTouchmoveListener, activeCapturingEventOptions);
+            });
+        }
+    }
+    /** Removes a drop container from the registry. */
+    removeDropContainer(drop) {
+        this._dropInstances.delete(drop);
+    }
+    /** Removes a drag item instance from the registry. */
+    removeDragItem(drag) {
+        this._dragInstances.delete(drag);
+        this.stopDragging(drag);
+        if (this._dragInstances.size === 0) {
+            this._document.removeEventListener('touchmove', this._persistentTouchmoveListener, activeCapturingEventOptions);
+        }
+    }
+    /**
+     * Starts the dragging sequence for a drag instance.
+     * @param drag Drag instance which is being dragged.
+     * @param event Event that initiated the dragging.
+     */
+    startDragging(drag, event) {
+        // Do not process the same drag twice to avoid memory leaks and redundant listeners
+        if (this._activeDragInstances.indexOf(drag) > -1) {
+            return;
+        }
+        this._activeDragInstances.push(drag);
+        if (this._activeDragInstances.length === 1) {
+            const isTouchEvent = event.type.startsWith('touch');
+            // We explicitly bind __active__ listeners here, because newer browsers will default to
+            // passive ones for `mousemove` and `touchmove`. The events need to be active, because we
+            // use `preventDefault` to prevent the page from scrolling while the user is dragging.
+            this._globalListeners
+                .set(isTouchEvent ? 'touchend' : 'mouseup', {
+                handler: (e) => this.pointerUp.next(e),
+                options: true
+            })
+                .set('scroll', {
+                handler: (e) => this.scroll.next(e),
+                // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't
+                // the document. See https://github.com/angular/components/issues/17144.
+                options: true
+            })
+                // Preventing the default action on `mousemove` isn't enough to disable text selection
+                // on Safari so we need to prevent the selection event as well. Alternatively this can
+                // be done by setting `user-select: none` on the `body`, however it has causes a style
+                // recalculation which can be expensive on pages with a lot of elements.
+                .set('selectstart', {
+                handler: this._preventDefaultWhileDragging,
+                options: activeCapturingEventOptions
+            });
+            // We don't have to bind a move event for touch drag sequences, because
+            // we already have a persistent global one bound from `registerDragItem`.
+            if (!isTouchEvent) {
+                this._globalListeners.set('mousemove', {
+                    handler: (e) => this.pointerMove.next(e),
+                    options: activeCapturingEventOptions
+                });
+            }
+            this._ngZone.runOutsideAngular(() => {
+                this._globalListeners.forEach((config, name) => {
+                    this._document.addEventListener(name, config.handler, config.options);
+                });
+            });
+        }
+    }
+    /** Stops dragging a drag item instance. */
+    stopDragging(drag) {
+        const index = this._activeDragInstances.indexOf(drag);
+        if (index > -1) {
+            this._activeDragInstances.splice(index, 1);
+            if (this._activeDragInstances.length === 0) {
+                this._clearGlobalListeners();
+            }
+        }
+    }
+    /** Gets whether a drag item instance is currently being dragged. */
+    isDragging(drag) {
+        return this._activeDragInstances.indexOf(drag) > -1;
+    }
+    /**
+     * Gets a stream that will emit when any element on the page is scrolled while an item is being
+     * dragged.
+     * @param shadowRoot Optional shadow root that the current dragging sequence started from.
+     *   Top-level listeners won't pick up events coming from the shadow DOM so this parameter can
+     *   be used to include an additional top-level listener at the shadow root level.
+     */
+    scrolled(shadowRoot) {
+        const streams = [this.scroll];
+        if (shadowRoot && shadowRoot !== this._document) {
+            // Note that this is basically the same as `fromEvent` from rjxs, but we do it ourselves,
+            // because we want to guarantee that the event is bound outside of the `NgZone`. With
+            // `fromEvent` it'll only happen if the subscription is outside the `NgZone`.
+            streams.push(new Observable((observer) => {
+                return this._ngZone.runOutsideAngular(() => {
+                    const eventOptions = true;
+                    const callback = (event) => {
+                        if (this._activeDragInstances.length) {
+                            observer.next(event);
+                        }
+                    };
+                    shadowRoot.addEventListener('scroll', callback, eventOptions);
+                    return () => {
+                        shadowRoot.removeEventListener('scroll', callback, eventOptions);
+                    };
+                });
+            }));
+        }
+        return merge(...streams);
+    }
+    ngOnDestroy() {
+        this._dragInstances.forEach(instance => this.removeDragItem(instance));
+        this._dropInstances.forEach(instance => this.removeDropContainer(instance));
+        this._clearGlobalListeners();
+        this.pointerMove.complete();
+        this.pointerUp.complete();
+    }
+    /** Clears out the global event listeners from the `document`. */
+    _clearGlobalListeners() {
+        this._globalListeners.forEach((config, name) => {
+            this._document.removeEventListener(name, config.handler, config.options);
+        });
+        this._globalListeners.clear();
+    }
+}
+DragDropRegistry.ɵfac = function DragDropRegistry_Factory(t) { return new (t || DragDropRegistry)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DOCUMENT)); };
+DragDropRegistry.ɵprov = i0.ɵɵdefineInjectable({ factory: function DragDropRegistry_Factory() { return new DragDropRegistry(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.DOCUMENT)); }, token: DragDropRegistry, providedIn: "root" });
+DragDropRegistry.ctorParameters = () => [
+    { type: NgZone },
+    { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
+];
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragDropRegistry, [{
+        type: Injectable,
+        args: [{ providedIn: 'root' }]
+    }], function () { return [{ type: ɵngcc0.NgZone }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [DOCUMENT]
+            }] }]; }, null); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Default configuration to be used when creating a `DragRef`. */
+const DEFAULT_CONFIG = {
+    dragStartThreshold: 5,
+    pointerDirectionChangeThreshold: 5
+};
+/**
+ * Service that allows for drag-and-drop functionality to be attached to DOM elements.
+ */
+class DragDrop {
+    constructor(_document, _ngZone, _viewportRuler, _dragDropRegistry) {
+        this._document = _document;
+        this._ngZone = _ngZone;
+        this._viewportRuler = _viewportRuler;
+        this._dragDropRegistry = _dragDropRegistry;
+    }
+    /**
+     * Turns an element into a draggable item.
+     * @param element Element to which to attach the dragging functionality.
+     * @param config Object used to configure the dragging behavior.
+     */
+    createDrag(element, config = DEFAULT_CONFIG) {
+        return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);
+    }
+    /**
+     * Turns an element into a drop list.
+     * @param element Element to which to attach the drop list functionality.
+     */
+    createDropList(element) {
+        return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);
+    }
+}
+DragDrop.ɵfac = function DragDrop_Factory(t) { return new (t || DragDrop)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵinject(DragDropRegistry)); };
+DragDrop.ɵprov = i0.ɵɵdefineInjectable({ factory: function DragDrop_Factory() { return new DragDrop(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i2.ViewportRuler), i0.ɵɵinject(DragDropRegistry)); }, token: DragDrop, providedIn: "root" });
+DragDrop.ctorParameters = () => [
+    { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
+    { type: NgZone },
+    { type: ViewportRuler },
+    { type: DragDropRegistry }
+];
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragDrop, [{
+        type: Injectable,
+        args: [{ providedIn: 'root' }]
+    }], function () { return [{ type: undefined, decorators: [{
+                type: Inject,
+                args: [DOCUMENT]
+            }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.ViewportRuler }, { type: DragDropRegistry }]; }, null); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the
+ * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily
+ * to avoid circular imports.
+ * @docs-private
+ */
+const CDK_DRAG_PARENT = new InjectionToken('CDK_DRAG_PARENT');
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as
+ * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+const CDK_DROP_LIST_GROUP = new InjectionToken('CdkDropListGroup');
+/**
+ * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`
+ * elements that are placed inside a `cdkDropListGroup` will be connected to each other
+ * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input
+ * from `cdkDropList`.
+ */
+class CdkDropListGroup {
+    constructor() {
+        /** Drop lists registered inside the group. */
+        this._items = new Set();
+        this._disabled = false;
+    }
+    /** Whether starting a dragging sequence from inside this group is disabled. */
+    get disabled() { return this._disabled; }
+    set disabled(value) {
+        this._disabled = coerceBooleanProperty(value);
+    }
+    ngOnDestroy() {
+        this._items.clear();
+    }
+}
+CdkDropListGroup.ɵfac = function CdkDropListGroup_Factory(t) { return new (t || CdkDropListGroup)(); };
+CdkDropListGroup.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDropListGroup, selectors: [["", "cdkDropListGroup", ""]], inputs: { disabled: ["cdkDropListGroupDisabled", "disabled"] }, exportAs: ["cdkDropListGroup"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }])] });
+CdkDropListGroup.propDecorators = {
+    disabled: [{ type: Input, args: ['cdkDropListGroupDisabled',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDropListGroup, [{
+        type: Directive,
+        args: [{
+                selector: '[cdkDropListGroup]',
+                exportAs: 'cdkDropListGroup',
+                providers: [{ provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup }]
+            }]
+    }], function () { return []; }, { disabled: [{
+            type: Input,
+            args: ['cdkDropListGroupDisabled']
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used to configure the
+ * behavior of the drag&drop-related components.
+ */
+const CDK_DRAG_CONFIG = new InjectionToken('CDK_DRAG_CONFIG');
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Asserts that a particular node is an element.
+ * @param node Node to be checked.
+ * @param name Name to attach to the error message.
+ */
+function assertElementNode(node, name) {
+    if (node.nodeType !== 1) {
+        throw Error(`${name} must be attached to an element node. ` +
+            `Currently attached to "${node.nodeName}".`);
+    }
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Counter used to generate unique ids for drop zones. */
+let _uniqueIdCounter = 0;
+/**
+ * Injection token that can be used to reference instances of `CdkDropList`. It serves as
+ * alternative token to the actual `CdkDropList` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+const CDK_DROP_LIST = new InjectionToken('CdkDropList');
+const ɵ0 = undefined;
+/** Container that wraps a set of draggable items. */
+class CdkDropList {
+    constructor(
+    /** Element that the drop list is attached to. */
+    element, dragDrop, _changeDetectorRef, _scrollDispatcher, _dir, _group, config) {
+        this.element = element;
+        this._changeDetectorRef = _changeDetectorRef;
+        this._scrollDispatcher = _scrollDispatcher;
+        this._dir = _dir;
+        this._group = _group;
+        /** Emits when the list has been destroyed. */
+        this._destroyed = new Subject();
+        /**
+         * Other draggable containers that this container is connected to and into which the
+         * container's items can be transferred. Can either be references to other drop containers,
+         * or their unique IDs.
+         */
+        this.connectedTo = [];
+        /**
+         * Unique ID for the drop zone. Can be used as a reference
+         * in the `connectedTo` of another `CdkDropList`.
+         */
+        this.id = `cdk-drop-list-${_uniqueIdCounter++}`;
+        /**
+         * Function that is used to determine whether an item
+         * is allowed to be moved into a drop container.
+         */
+        this.enterPredicate = () => true;
+        /** Functions that is used to determine whether an item can be sorted into a particular index. */
+        this.sortPredicate = () => true;
+        /** Emits when the user drops an item inside the container. */
+        this.dropped = new EventEmitter();
+        /**
+         * Emits when the user has moved a new drag item into this container.
+         */
+        this.entered = new EventEmitter();
+        /**
+         * Emits when the user removes an item from the container
+         * by dragging it into another container.
+         */
+        this.exited = new EventEmitter();
+        /** Emits as the user is swapping items while actively dragging. */
+        this.sorted = new EventEmitter();
+        /**
+         * Keeps track of the items that are registered with this container. Historically we used to
+         * do this with a `ContentChildren` query, however queries don't handle transplanted views very
+         * well which means that we can't handle cases like dragging the headers of a `mat-table`
+         * correctly. What we do instead is to have the items register themselves with the container
+         * and then we sort them based on their position in the DOM.
+         */
+        this._unsortedItems = new Set();
+        if (typeof ngDevMode === 'undefined' || ngDevMode) {
+            assertElementNode(element.nativeElement, 'cdkDropList');
+        }
+        this._dropListRef = dragDrop.createDropList(element);
+        this._dropListRef.data = this;
+        if (config) {
+            this._assignDefaults(config);
+        }
+        this._dropListRef.enterPredicate = (drag, drop) => {
+            return this.enterPredicate(drag.data, drop.data);
+        };
+        this._dropListRef.sortPredicate =
+            (index, drag, drop) => {
+                return this.sortPredicate(index, drag.data, drop.data);
+            };
+        this._setupInputSyncSubscription(this._dropListRef);
+        this._handleEvents(this._dropListRef);
+        CdkDropList._dropLists.push(this);
+        if (_group) {
+            _group._items.add(this);
+        }
+    }
+    /** Whether starting a dragging sequence from this container is disabled. */
+    get disabled() {
+        return this._disabled || (!!this._group && this._group.disabled);
+    }
+    set disabled(value) {
+        // Usually we sync the directive and ref state right before dragging starts, in order to have
+        // a single point of failure and to avoid having to use setters for everything. `disabled` is
+        // a special case, because it can prevent the `beforeStarted` event from firing, which can lock
+        // the user in a disabled state, so we also need to sync it as it's being set.
+        this._dropListRef.disabled = this._disabled = coerceBooleanProperty(value);
+    }
+    /** Registers an items with the drop list. */
+    addItem(item) {
+        this._unsortedItems.add(item);
+        if (this._dropListRef.isDragging()) {
+            this._syncItemsWithRef();
+        }
+    }
+    /** Removes an item from the drop list. */
+    removeItem(item) {
+        this._unsortedItems.delete(item);
+        if (this._dropListRef.isDragging()) {
+            this._syncItemsWithRef();
+        }
+    }
+    /** Gets the registered items in the list, sorted by their position in the DOM. */
+    getSortedItems() {
+        return Array.from(this._unsortedItems).sort((a, b) => {
+            const documentPosition = a._dragRef.getVisibleElement().compareDocumentPosition(b._dragRef.getVisibleElement());
+            // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.
+            // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
+            // tslint:disable-next-line:no-bitwise
+            return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;
+        });
+    }
+    ngOnDestroy() {
+        const index = CdkDropList._dropLists.indexOf(this);
+        if (index > -1) {
+            CdkDropList._dropLists.splice(index, 1);
+        }
+        if (this._group) {
+            this._group._items.delete(this);
+        }
+        this._unsortedItems.clear();
+        this._dropListRef.dispose();
+        this._destroyed.next();
+        this._destroyed.complete();
+    }
+    /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */
+    _setupInputSyncSubscription(ref) {
+        if (this._dir) {
+            this._dir.change
+                .pipe(startWith(this._dir.value), takeUntil(this._destroyed))
+                .subscribe(value => ref.withDirection(value));
+        }
+        ref.beforeStarted.subscribe(() => {
+            const siblings = coerceArray(this.connectedTo).map(drop => {
+                if (typeof drop === 'string') {
+                    const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);
+                    if (!correspondingDropList && (typeof ngDevMode === 'undefined' || ngDevMode)) {
+                        console.warn(`CdkDropList could not find connected drop list with id "${drop}"`);
+                    }
+                    return correspondingDropList;
+                }
+                return drop;
+            });
+            if (this._group) {
+                this._group._items.forEach(drop => {
+                    if (siblings.indexOf(drop) === -1) {
+                        siblings.push(drop);
+                    }
+                });
+            }
+            // Note that we resolve the scrollable parents here so that we delay the resolution
+            // as long as possible, ensuring that the element is in its final place in the DOM.
+            if (!this._scrollableParentsResolved) {
+                const scrollableParents = this._scrollDispatcher
+                    .getAncestorScrollContainers(this.element)
+                    .map(scrollable => scrollable.getElementRef().nativeElement);
+                this._dropListRef.withScrollableParents(scrollableParents);
+                // Only do this once since it involves traversing the DOM and the parents
+                // shouldn't be able to change without the drop list being destroyed.
+                this._scrollableParentsResolved = true;
+            }
+            ref.disabled = this.disabled;
+            ref.lockAxis = this.lockAxis;
+            ref.sortingDisabled = coerceBooleanProperty(this.sortingDisabled);
+            ref.autoScrollDisabled = coerceBooleanProperty(this.autoScrollDisabled);
+            ref.autoScrollStep = coerceNumberProperty(this.autoScrollStep, 2);
+            ref
+                .connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef))
+                .withOrientation(this.orientation);
+        });
+    }
+    /** Handles events from the underlying DropListRef. */
+    _handleEvents(ref) {
+        ref.beforeStarted.subscribe(() => {
+            this._syncItemsWithRef();
+            this._changeDetectorRef.markForCheck();
+        });
+        ref.entered.subscribe(event => {
+            this.entered.emit({
+                container: this,
+                item: event.item.data,
+                currentIndex: event.currentIndex
+            });
+        });
+        ref.exited.subscribe(event => {
+            this.exited.emit({
+                container: this,
+                item: event.item.data
+            });
+            this._changeDetectorRef.markForCheck();
+        });
+        ref.sorted.subscribe(event => {
+            this.sorted.emit({
+                previousIndex: event.previousIndex,
+                currentIndex: event.currentIndex,
+                container: this,
+                item: event.item.data
+            });
+        });
+        ref.dropped.subscribe(event => {
+            this.dropped.emit({
+                previousIndex: event.previousIndex,
+                currentIndex: event.currentIndex,
+                previousContainer: event.previousContainer.data,
+                container: event.container.data,
+                item: event.item.data,
+                isPointerOverContainer: event.isPointerOverContainer,
+                distance: event.distance,
+                dropPoint: event.dropPoint
+            });
+            // Mark for check since all of these events run outside of change
+            // detection and we're not guaranteed for something else to have triggered it.
+            this._changeDetectorRef.markForCheck();
+        });
+    }
+    /** Assigns the default input values based on a provided config object. */
+    _assignDefaults(config) {
+        const { lockAxis, draggingDisabled, sortingDisabled, listAutoScrollDisabled, listOrientation } = config;
+        this.disabled = draggingDisabled == null ? false : draggingDisabled;
+        this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;
+        this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;
+        this.orientation = listOrientation || 'vertical';
+        if (lockAxis) {
+            this.lockAxis = lockAxis;
+        }
+    }
+    /** Syncs up the registered drag items with underlying drop list ref. */
+    _syncItemsWithRef() {
+        this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));
+    }
+}
+CdkDropList.ɵfac = function CdkDropList_Factory(t) { return new (t || CdkDropList)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST_GROUP, 12), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8)); };
+CdkDropList.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDropList, selectors: [["", "cdkDropList", ""], ["cdk-drop-list"]], hostAttrs: [1, "cdk-drop-list"], hostVars: 7, hostBindings: function CdkDropList_HostBindings(rf, ctx) { if (rf & 2) {
+        ɵngcc0.ɵɵattribute("id", ctx.id);
+        ɵngcc0.ɵɵclassProp("cdk-drop-list-disabled", ctx.disabled)("cdk-drop-list-dragging", ctx._dropListRef.isDragging())("cdk-drop-list-receiving", ctx._dropListRef.isReceiving());
+    } }, inputs: { connectedTo: ["cdkDropListConnectedTo", "connectedTo"], id: "id", enterPredicate: ["cdkDropListEnterPredicate", "enterPredicate"], sortPredicate: ["cdkDropListSortPredicate", "sortPredicate"], disabled: ["cdkDropListDisabled", "disabled"], sortingDisabled: ["cdkDropListSortingDisabled", "sortingDisabled"], autoScrollDisabled: ["cdkDropListAutoScrollDisabled", "autoScrollDisabled"], orientation: ["cdkDropListOrientation", "orientation"], lockAxis: ["cdkDropListLockAxis", "lockAxis"], data: ["cdkDropListData", "data"], autoScrollStep: ["cdkDropListAutoScrollStep", "autoScrollStep"] }, outputs: { dropped: "cdkDropListDropped", entered: "cdkDropListEntered", exited: "cdkDropListExited", sorted: "cdkDropListSorted" }, exportAs: ["cdkDropList"], features: [ɵngcc0.ɵɵProvidersFeature([
+            // Prevent child drop lists from picking up the same group as their parent.
+            { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },
+            { provide: CDK_DROP_LIST, useExisting: CdkDropList },
+        ])] });
+/** Keeps track of the drop lists that are currently on the page. */
+CdkDropList._dropLists = [];
+CdkDropList.ctorParameters = () => [
+    { type: ElementRef },
+    { type: DragDrop },
+    { type: ChangeDetectorRef },
+    { type: ScrollDispatcher },
+    { type: Directionality, decorators: [{ type: Optional }] },
+    { type: CdkDropListGroup, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DROP_LIST_GROUP,] }, { type: SkipSelf }] },
+    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] }
+];
+CdkDropList.propDecorators = {
+    connectedTo: [{ type: Input, args: ['cdkDropListConnectedTo',] }],
+    data: [{ type: Input, args: ['cdkDropListData',] }],
+    orientation: [{ type: Input, args: ['cdkDropListOrientation',] }],
+    id: [{ type: Input }],
+    lockAxis: [{ type: Input, args: ['cdkDropListLockAxis',] }],
+    disabled: [{ type: Input, args: ['cdkDropListDisabled',] }],
+    sortingDisabled: [{ type: Input, args: ['cdkDropListSortingDisabled',] }],
+    enterPredicate: [{ type: Input, args: ['cdkDropListEnterPredicate',] }],
+    sortPredicate: [{ type: Input, args: ['cdkDropListSortPredicate',] }],
+    autoScrollDisabled: [{ type: Input, args: ['cdkDropListAutoScrollDisabled',] }],
+    autoScrollStep: [{ type: Input, args: ['cdkDropListAutoScrollStep',] }],
+    dropped: [{ type: Output, args: ['cdkDropListDropped',] }],
+    entered: [{ type: Output, args: ['cdkDropListEntered',] }],
+    exited: [{ type: Output, args: ['cdkDropListExited',] }],
+    sorted: [{ type: Output, args: ['cdkDropListSorted',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDropList, [{
+        type: Directive,
+        args: [{
+                selector: '[cdkDropList], cdk-drop-list',
+                exportAs: 'cdkDropList',
+                providers: [
+                    // Prevent child drop lists from picking up the same group as their parent.
+                    { provide: CDK_DROP_LIST_GROUP, useValue: ɵ0 },
+                    { provide: CDK_DROP_LIST, useExisting: CdkDropList },
+                ],
+                host: {
+                    'class': 'cdk-drop-list',
+                    '[attr.id]': 'id',
+                    '[class.cdk-drop-list-disabled]': 'disabled',
+                    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',
+                    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()'
+                }
+            }]
+    }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc2.Directionality, decorators: [{
+                type: Optional
+            }] }, { type: CdkDropListGroup, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [CDK_DROP_LIST_GROUP]
+            }, {
+                type: SkipSelf
+            }] }, { type: undefined, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [CDK_DRAG_CONFIG]
+            }] }]; }, { connectedTo: [{
+            type: Input,
+            args: ['cdkDropListConnectedTo']
+        }], id: [{
+            type: Input
+        }], enterPredicate: [{
+            type: Input,
+            args: ['cdkDropListEnterPredicate']
+        }], sortPredicate: [{
+            type: Input,
+            args: ['cdkDropListSortPredicate']
+        }], dropped: [{
+            type: Output,
+            args: ['cdkDropListDropped']
+        }], entered: [{
+            type: Output,
+            args: ['cdkDropListEntered']
+        }], exited: [{
+            type: Output,
+            args: ['cdkDropListExited']
+        }], sorted: [{
+            type: Output,
+            args: ['cdkDropListSorted']
+        }], disabled: [{
+            type: Input,
+            args: ['cdkDropListDisabled']
+        }], sortingDisabled: [{
+            type: Input,
+            args: ['cdkDropListSortingDisabled']
+        }], autoScrollDisabled: [{
+            type: Input,
+            args: ['cdkDropListAutoScrollDisabled']
+        }], orientation: [{
+            type: Input,
+            args: ['cdkDropListOrientation']
+        }], lockAxis: [{
+            type: Input,
+            args: ['cdkDropListLockAxis']
+        }], data: [{
+            type: Input,
+            args: ['cdkDropListData']
+        }], autoScrollStep: [{
+            type: Input,
+            args: ['cdkDropListAutoScrollStep']
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as
+ * alternative token to the actual `CdkDragHandle` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+const CDK_DRAG_HANDLE = new InjectionToken('CdkDragHandle');
+/** Handle that can be used to drag a CdkDrag instance. */
+class CdkDragHandle {
+    constructor(element, parentDrag) {
+        this.element = element;
+        /** Emits when the state of the handle has changed. */
+        this._stateChanges = new Subject();
+        this._disabled = false;
+        if (typeof ngDevMode === 'undefined' || ngDevMode) {
+            assertElementNode(element.nativeElement, 'cdkDragHandle');
+        }
+        this._parentDrag = parentDrag;
+    }
+    /** Whether starting to drag through this handle is disabled. */
+    get disabled() { return this._disabled; }
+    set disabled(value) {
+        this._disabled = coerceBooleanProperty(value);
+        this._stateChanges.next(this);
+    }
+    ngOnDestroy() {
+        this._stateChanges.complete();
+    }
+}
+CdkDragHandle.ɵfac = function CdkDragHandle_Factory(t) { return new (t || CdkDragHandle)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12)); };
+CdkDragHandle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDragHandle, selectors: [["", "cdkDragHandle", ""]], hostAttrs: [1, "cdk-drag-handle"], inputs: { disabled: ["cdkDragHandleDisabled", "disabled"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }])] });
+CdkDragHandle.ctorParameters = () => [
+    { type: ElementRef },
+    { type: undefined, decorators: [{ type: Inject, args: [CDK_DRAG_PARENT,] }, { type: Optional }, { type: SkipSelf }] }
+];
+CdkDragHandle.propDecorators = {
+    disabled: [{ type: Input, args: ['cdkDragHandleDisabled',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDragHandle, [{
+        type: Directive,
+        args: [{
+                selector: '[cdkDragHandle]',
+                host: {
+                    'class': 'cdk-drag-handle'
+                },
+                providers: [{ provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle }]
+            }]
+    }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [CDK_DRAG_PARENT]
+            }, {
+                type: Optional
+            }, {
+                type: SkipSelf
+            }] }]; }, { disabled: [{
+            type: Input,
+            args: ['cdkDragHandleDisabled']
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as
+ * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+const CDK_DRAG_PLACEHOLDER = new InjectionToken('CdkDragPlaceholder');
+/**
+ * Element that will be used as a template for the placeholder of a CdkDrag when
+ * it is being dragged. The placeholder is displayed in place of the element being dragged.
+ */
+class CdkDragPlaceholder {
+    constructor(templateRef) {
+        this.templateRef = templateRef;
+    }
+}
+CdkDragPlaceholder.ɵfac = function CdkDragPlaceholder_Factory(t) { return new (t || CdkDragPlaceholder)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };
+CdkDragPlaceholder.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDragPlaceholder, selectors: [["ng-template", "cdkDragPlaceholder", ""]], inputs: { data: "data" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }])] });
+CdkDragPlaceholder.ctorParameters = () => [
+    { type: TemplateRef }
+];
+CdkDragPlaceholder.propDecorators = {
+    data: [{ type: Input }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDragPlaceholder, [{
+        type: Directive,
+        args: [{
+                selector: 'ng-template[cdkDragPlaceholder]',
+                providers: [{ provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder }]
+            }]
+    }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { data: [{
+            type: Input
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as
+ * alternative token to the actual `CdkDragPreview` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+const CDK_DRAG_PREVIEW = new InjectionToken('CdkDragPreview');
+/**
+ * Element that will be used as a template for the preview
+ * of a CdkDrag when it is being dragged.
+ */
+class CdkDragPreview {
+    constructor(templateRef) {
+        this.templateRef = templateRef;
+        this._matchSize = false;
+    }
+    /** Whether the preview should preserve the same size as the item that is being dragged. */
+    get matchSize() { return this._matchSize; }
+    set matchSize(value) { this._matchSize = coerceBooleanProperty(value); }
+}
+CdkDragPreview.ɵfac = function CdkDragPreview_Factory(t) { return new (t || CdkDragPreview)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };
+CdkDragPreview.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDragPreview, selectors: [["ng-template", "cdkDragPreview", ""]], inputs: { matchSize: "matchSize", data: "data" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }])] });
+CdkDragPreview.ctorParameters = () => [
+    { type: TemplateRef }
+];
+CdkDragPreview.propDecorators = {
+    data: [{ type: Input }],
+    matchSize: [{ type: Input }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDragPreview, [{
+        type: Directive,
+        args: [{
+                selector: 'ng-template[cdkDragPreview]',
+                providers: [{ provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview }]
+            }]
+    }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, { matchSize: [{
+            type: Input
+        }], data: [{
+            type: Input
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+const DRAG_HOST_CLASS = 'cdk-drag';
+/** Element that can be moved inside a CdkDropList container. */
+class CdkDrag {
+    constructor(
+    /** Element that the draggable is attached to. */
+    element, 
+    /** Droppable container that the draggable is a part of. */
+    dropContainer, 
+    /**
+     * @deprecated `_document` parameter no longer being used and will be removed.
+     * @breaking-change 12.0.0
+     */
+    _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef, _selfHandle, _parentDrag) {
+        this.element = element;
+        this.dropContainer = dropContainer;
+        this._ngZone = _ngZone;
+        this._viewContainerRef = _viewContainerRef;
+        this._dir = _dir;
+        this._changeDetectorRef = _changeDetectorRef;
+        this._selfHandle = _selfHandle;
+        this._parentDrag = _parentDrag;
+        this._destroyed = new Subject();
+        /** Emits when the user starts dragging the item. */
+        this.started = new EventEmitter();
+        /** Emits when the user has released a drag item, before any animations have started. */
+        this.released = new EventEmitter();
+        /** Emits when the user stops dragging an item in the container. */
+        this.ended = new EventEmitter();
+        /** Emits when the user has moved the item into a new container. */
+        this.entered = new EventEmitter();
+        /** Emits when the user removes the item its container by dragging it into another container. */
+        this.exited = new EventEmitter();
+        /** Emits when the user drops the item inside a container. */
+        this.dropped = new EventEmitter();
+        /**
+         * Emits as the user is dragging the item. Use with caution,
+         * because this event will fire for every pixel that the user has dragged.
+         */
+        this.moved = new Observable((observer) => {
+            const subscription = this._dragRef.moved.pipe(map(movedEvent => ({
+                source: this,
+                pointerPosition: movedEvent.pointerPosition,
+                event: movedEvent.event,
+                delta: movedEvent.delta,
+                distance: movedEvent.distance
+            }))).subscribe(observer);
+            return () => {
+                subscription.unsubscribe();
+            };
+        });
+        this._dragRef = dragDrop.createDrag(element, {
+            dragStartThreshold: config && config.dragStartThreshold != null ?
+                config.dragStartThreshold : 5,
+            pointerDirectionChangeThreshold: config && config.pointerDirectionChangeThreshold != null ?
+                config.pointerDirectionChangeThreshold : 5,
+            zIndex: config === null || config === void 0 ? void 0 : config.zIndex,
+        });
+        this._dragRef.data = this;
+        // We have to keep track of the drag instances in order to be able to match an element to
+        // a drag instance. We can't go through the global registry of `DragRef`, because the root
+        // element could be different.
+        CdkDrag._dragInstances.push(this);
+        if (config) {
+            this._assignDefaults(config);
+        }
+        // Note that usually the container is assigned when the drop list is picks up the item, but in
+        // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation
+        // where there are no items on the first change detection pass, but the items get picked up as
+        // soon as the user triggers another pass by dragging. This is a problem, because the item would
+        // have to switch from standalone mode to drag mode in the middle of the dragging sequence which
+        // is too late since the two modes save different kinds of information. We work around it by
+        // assigning the drop container both from here and the list.
+        if (dropContainer) {
+            this._dragRef._withDropContainer(dropContainer._dropListRef);
+            dropContainer.addItem(this);
+        }
+        this._syncInputs(this._dragRef);
+        this._handleEvents(this._dragRef);
+    }
+    /** Whether starting to drag this element is disabled. */
+    get disabled() {
+        return this._disabled || (this.dropContainer && this.dropContainer.disabled);
+    }
+    set disabled(value) {
+        this._disabled = coerceBooleanProperty(value);
+        this._dragRef.disabled = this._disabled;
+    }
+    /**
+     * Returns the element that is being used as a placeholder
+     * while the current element is being dragged.
+     */
+    getPlaceholderElement() {
+        return this._dragRef.getPlaceholderElement();
+    }
+    /** Returns the root draggable element. */
+    getRootElement() {
+        return this._dragRef.getRootElement();
+    }
+    /** Resets a standalone drag item to its initial position. */
+    reset() {
+        this._dragRef.reset();
+    }
+    /**
+     * Gets the pixel coordinates of the draggable outside of a drop container.
+     */
+    getFreeDragPosition() {
+        return this._dragRef.getFreeDragPosition();
+    }
+    ngAfterViewInit() {
+        // Normally this isn't in the zone, but it can cause major performance regressions for apps
+        // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
+        this._ngZone.runOutsideAngular(() => {
+            // We need to wait for the zone to stabilize, in order for the reference
+            // element to be in the proper place in the DOM. This is mostly relevant
+            // for draggable elements inside portals since they get stamped out in
+            // their original DOM position and then they get transferred to the portal.
+            this._ngZone.onStable
+                .pipe(take(1), takeUntil(this._destroyed))
+                .subscribe(() => {
+                this._updateRootElement();
+                this._setupHandlesListener();
+                if (this.freeDragPosition) {
+                    this._dragRef.setFreeDragPosition(this.freeDragPosition);
+                }
+            });
+        });
+    }
+    ngOnChanges(changes) {
+        const rootSelectorChange = changes['rootElementSelector'];
+        const positionChange = changes['freeDragPosition'];
+        // We don't have to react to the first change since it's being
+        // handled in `ngAfterViewInit` where it needs to be deferred.
+        if (rootSelectorChange && !rootSelectorChange.firstChange) {
+            this._updateRootElement();
+        }
+        // Skip the first change since it's being handled in `ngAfterViewInit`.
+        if (positionChange && !positionChange.firstChange && this.freeDragPosition) {
+            this._dragRef.setFreeDragPosition(this.freeDragPosition);
+        }
+    }
+    ngOnDestroy() {
+        if (this.dropContainer) {
+            this.dropContainer.removeItem(this);
+        }
+        const index = CdkDrag._dragInstances.indexOf(this);
+        if (index > -1) {
+            CdkDrag._dragInstances.splice(index, 1);
+        }
+        // Unnecessary in most cases, but used to avoid extra change detections with `zone-paths-rxjs`.
+        this._ngZone.runOutsideAngular(() => {
+            this._destroyed.next();
+            this._destroyed.complete();
+            this._dragRef.dispose();
+        });
+    }
+    /** Syncs the root element with the `DragRef`. */
+    _updateRootElement() {
+        const element = this.element.nativeElement;
+        const rootElement = this.rootElementSelector ?
+            getClosestMatchingAncestor(element, this.rootElementSelector) : element;
+        if (rootElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {
+            assertElementNode(rootElement, 'cdkDrag');
+        }
+        this._dragRef.withRootElement(rootElement || element);
+    }
+    /** Gets the boundary element, based on the `boundaryElement` value. */
+    _getBoundaryElement() {
+        const boundary = this.boundaryElement;
+        if (!boundary) {
+            return null;
+        }
+        if (typeof boundary === 'string') {
+            return getClosestMatchingAncestor(this.element.nativeElement, boundary);
+        }
+        const element = coerceElement(boundary);
+        if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
+            !element.contains(this.element.nativeElement)) {
+            throw Error('Draggable element is not inside of the node passed into cdkDragBoundary.');
+        }
+        return element;
+    }
+    /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */
+    _syncInputs(ref) {
+        ref.beforeStarted.subscribe(() => {
+            if (!ref.isDragging()) {
+                const dir = this._dir;
+                const dragStartDelay = this.dragStartDelay;
+                const placeholder = this._placeholderTemplate ? {
+                    template: this._placeholderTemplate.templateRef,
+                    context: this._placeholderTemplate.data,
+                    viewContainer: this._viewContainerRef
+                } : null;
+                const preview = this._previewTemplate ? {
+                    template: this._previewTemplate.templateRef,
+                    context: this._previewTemplate.data,
+                    matchSize: this._previewTemplate.matchSize,
+                    viewContainer: this._viewContainerRef
+                } : null;
+                ref.disabled = this.disabled;
+                ref.lockAxis = this.lockAxis;
+                ref.dragStartDelay = (typeof dragStartDelay === 'object' && dragStartDelay) ?
+                    dragStartDelay : coerceNumberProperty(dragStartDelay);
+                ref.constrainPosition = this.constrainPosition;
+                ref.previewClass = this.previewClass;
+                ref
+                    .withBoundaryElement(this._getBoundaryElement())
+                    .withPlaceholderTemplate(placeholder)
+                    .withPreviewTemplate(preview)
+                    .withPreviewContainer(this.previewContainer || 'global');
+                if (dir) {
+                    ref.withDirection(dir.value);
+                }
+            }
+        });
+        // This only needs to be resolved once.
+        ref.beforeStarted.pipe(take(1)).subscribe(() => {
+            var _a, _b;
+            // If we managed to resolve a parent through DI, use it.
+            if (this._parentDrag) {
+                ref.withParent(this._parentDrag._dragRef);
+                return;
+            }
+            // Otherwise fall back to resolving the parent by looking up the DOM. This can happen if
+            // the item was projected into another item by something like `ngTemplateOutlet`.
+            let parent = this.element.nativeElement.parentElement;
+            while (parent) {
+                // `classList` needs to be null checked, because IE doesn't have it on some elements.
+                if ((_a = parent.classList) === null || _a === void 0 ? void 0 : _a.contains(DRAG_HOST_CLASS)) {
+                    ref.withParent(((_b = CdkDrag._dragInstances.find(drag => {
+                        return drag.element.nativeElement === parent;
+                    })) === null || _b === void 0 ? void 0 : _b._dragRef) || null);
+                    break;
+                }
+                parent = parent.parentElement;
+            }
+        });
+    }
+    /** Handles the events from the underlying `DragRef`. */
+    _handleEvents(ref) {
+        ref.started.subscribe(() => {
+            this.started.emit({ source: this });
+            // Since all of these events run outside of change detection,
+            // we need to ensure that everything is marked correctly.
+            this._changeDetectorRef.markForCheck();
+        });
+        ref.released.subscribe(() => {
+            this.released.emit({ source: this });
+        });
+        ref.ended.subscribe(event => {
+            this.ended.emit({
+                source: this,
+                distance: event.distance,
+                dropPoint: event.dropPoint
+            });
+            // Since all of these events run outside of change detection,
+            // we need to ensure that everything is marked correctly.
+            this._changeDetectorRef.markForCheck();
+        });
+        ref.entered.subscribe(event => {
+            this.entered.emit({
+                container: event.container.data,
+                item: this,
+                currentIndex: event.currentIndex
+            });
+        });
+        ref.exited.subscribe(event => {
+            this.exited.emit({
+                container: event.container.data,
+                item: this
+            });
+        });
+        ref.dropped.subscribe(event => {
+            this.dropped.emit({
+                previousIndex: event.previousIndex,
+                currentIndex: event.currentIndex,
+                previousContainer: event.previousContainer.data,
+                container: event.container.data,
+                isPointerOverContainer: event.isPointerOverContainer,
+                item: this,
+                distance: event.distance,
+                dropPoint: event.dropPoint
+            });
+        });
+    }
+    /** Assigns the default input values based on a provided config object. */
+    _assignDefaults(config) {
+        const { lockAxis, dragStartDelay, constrainPosition, previewClass, boundaryElement, draggingDisabled, rootElementSelector, previewContainer } = config;
+        this.disabled = draggingDisabled == null ? false : draggingDisabled;
+        this.dragStartDelay = dragStartDelay || 0;
+        if (lockAxis) {
+            this.lockAxis = lockAxis;
+        }
+        if (constrainPosition) {
+            this.constrainPosition = constrainPosition;
+        }
+        if (previewClass) {
+            this.previewClass = previewClass;
+        }
+        if (boundaryElement) {
+            this.boundaryElement = boundaryElement;
+        }
+        if (rootElementSelector) {
+            this.rootElementSelector = rootElementSelector;
+        }
+        if (previewContainer) {
+            this.previewContainer = previewContainer;
+        }
+    }
+    /** Sets up the listener that syncs the handles with the drag ref. */
+    _setupHandlesListener() {
+        // Listen for any newly-added handles.
+        this._handles.changes.pipe(startWith(this._handles), 
+        // Sync the new handles with the DragRef.
+        tap((handles) => {
+            const childHandleElements = handles
+                .filter(handle => handle._parentDrag === this)
+                .map(handle => handle.element);
+            // Usually handles are only allowed to be a descendant of the drag element, but if
+            // the consumer defined a different drag root, we should allow the drag element
+            // itself to be a handle too.
+            if (this._selfHandle && this.rootElementSelector) {
+                childHandleElements.push(this.element);
+            }
+            this._dragRef.withHandles(childHandleElements);
+        }), 
+        // Listen if the state of any of the handles changes.
+        switchMap((handles) => {
+            return merge(...handles.map(item => {
+                return item._stateChanges.pipe(startWith(item));
+            }));
+        }), takeUntil(this._destroyed)).subscribe(handleInstance => {
+            // Enabled/disable the handle that changed in the DragRef.
+            const dragRef = this._dragRef;
+            const handle = handleInstance.element.nativeElement;
+            handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);
+        });
+    }
+}
+CdkDrag.ɵfac = function CdkDrag_Factory(t) { return new (t || CdkDrag)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CDK_DROP_LIST, 12), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(DragDrop), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_HANDLE, 10), ɵngcc0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12)); };
+CdkDrag.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkDrag, selectors: [["", "cdkDrag", ""]], contentQueries: function CdkDrag_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
+        ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PREVIEW, 5);
+        ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_PLACEHOLDER, 5);
+        ɵngcc0.ɵɵcontentQuery(dirIndex, CDK_DRAG_HANDLE, 5);
+    } if (rf & 2) {
+        let _t;
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._previewTemplate = _t.first);
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._placeholderTemplate = _t.first);
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._handles = _t);
+    } }, hostAttrs: [1, "cdk-drag"], hostVars: 4, hostBindings: function CdkDrag_HostBindings(rf, ctx) { if (rf & 2) {
+        ɵngcc0.ɵɵclassProp("cdk-drag-disabled", ctx.disabled)("cdk-drag-dragging", ctx._dragRef.isDragging());
+    } }, inputs: { disabled: ["cdkDragDisabled", "disabled"], dragStartDelay: ["cdkDragStartDelay", "dragStartDelay"], lockAxis: ["cdkDragLockAxis", "lockAxis"], constrainPosition: ["cdkDragConstrainPosition", "constrainPosition"], previewClass: ["cdkDragPreviewClass", "previewClass"], boundaryElement: ["cdkDragBoundary", "boundaryElement"], rootElementSelector: ["cdkDragRootElement", "rootElementSelector"], previewContainer: ["cdkDragPreviewContainer", "previewContainer"], data: ["cdkDragData", "data"], freeDragPosition: ["cdkDragFreeDragPosition", "freeDragPosition"] }, outputs: { started: "cdkDragStarted", released: "cdkDragReleased", ended: "cdkDragEnded", entered: "cdkDragEntered", exited: "cdkDragExited", dropped: "cdkDragDropped", moved: "cdkDragMoved" }, exportAs: ["cdkDrag"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]), ɵngcc0.ɵɵNgOnChangesFeature] });
+CdkDrag._dragInstances = [];
+CdkDrag.ctorParameters = () => [
+    { type: ElementRef },
+    { type: undefined, decorators: [{ type: Inject, args: [CDK_DROP_LIST,] }, { type: Optional }, { type: SkipSelf }] },
+    { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
+    { type: NgZone },
+    { type: ViewContainerRef },
+    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CDK_DRAG_CONFIG,] }] },
+    { type: Directionality, decorators: [{ type: Optional }] },
+    { type: DragDrop },
+    { type: ChangeDetectorRef },
+    { type: CdkDragHandle, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [CDK_DRAG_HANDLE,] }] },
+    { type: CdkDrag, decorators: [{ type: Optional }, { type: SkipSelf }, { type: Inject, args: [CDK_DRAG_PARENT,] }] }
+];
+CdkDrag.propDecorators = {
+    _handles: [{ type: ContentChildren, args: [CDK_DRAG_HANDLE, { descendants: true },] }],
+    _previewTemplate: [{ type: ContentChild, args: [CDK_DRAG_PREVIEW,] }],
+    _placeholderTemplate: [{ type: ContentChild, args: [CDK_DRAG_PLACEHOLDER,] }],
+    data: [{ type: Input, args: ['cdkDragData',] }],
+    lockAxis: [{ type: Input, args: ['cdkDragLockAxis',] }],
+    rootElementSelector: [{ type: Input, args: ['cdkDragRootElement',] }],
+    boundaryElement: [{ type: Input, args: ['cdkDragBoundary',] }],
+    dragStartDelay: [{ type: Input, args: ['cdkDragStartDelay',] }],
+    freeDragPosition: [{ type: Input, args: ['cdkDragFreeDragPosition',] }],
+    disabled: [{ type: Input, args: ['cdkDragDisabled',] }],
+    constrainPosition: [{ type: Input, args: ['cdkDragConstrainPosition',] }],
+    previewClass: [{ type: Input, args: ['cdkDragPreviewClass',] }],
+    previewContainer: [{ type: Input, args: ['cdkDragPreviewContainer',] }],
+    started: [{ type: Output, args: ['cdkDragStarted',] }],
+    released: [{ type: Output, args: ['cdkDragReleased',] }],
+    ended: [{ type: Output, args: ['cdkDragEnded',] }],
+    entered: [{ type: Output, args: ['cdkDragEntered',] }],
+    exited: [{ type: Output, args: ['cdkDragExited',] }],
+    dropped: [{ type: Output, args: ['cdkDragDropped',] }],
+    moved: [{ type: Output, args: ['cdkDragMoved',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkDrag, [{
+        type: Directive,
+        args: [{
+                selector: '[cdkDrag]',
+                exportAs: 'cdkDrag',
+                host: {
+                    'class': DRAG_HOST_CLASS,
+                    '[class.cdk-drag-disabled]': 'disabled',
+                    '[class.cdk-drag-dragging]': '_dragRef.isDragging()'
+                },
+                providers: [{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]
+            }]
+    }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [CDK_DROP_LIST]
+            }, {
+                type: Optional
+            }, {
+                type: SkipSelf
+            }] }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [DOCUMENT]
+            }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [CDK_DRAG_CONFIG]
+            }] }, { type: ɵngcc2.Directionality, decorators: [{
+                type: Optional
+            }] }, { type: DragDrop }, { type: ɵngcc0.ChangeDetectorRef }, { type: CdkDragHandle, decorators: [{
+                type: Optional
+            }, {
+                type: Self
+            }, {
+                type: Inject,
+                args: [CDK_DRAG_HANDLE]
+            }] }, { type: CdkDrag, decorators: [{
+                type: Optional
+            }, {
+                type: SkipSelf
+            }, {
+                type: Inject,
+                args: [CDK_DRAG_PARENT]
+            }] }]; }, { started: [{
+            type: Output,
+            args: ['cdkDragStarted']
+        }], released: [{
+            type: Output,
+            args: ['cdkDragReleased']
+        }], ended: [{
+            type: Output,
+            args: ['cdkDragEnded']
+        }], entered: [{
+            type: Output,
+            args: ['cdkDragEntered']
+        }], exited: [{
+            type: Output,
+            args: ['cdkDragExited']
+        }], dropped: [{
+            type: Output,
+            args: ['cdkDragDropped']
+        }], moved: [{
+            type: Output,
+            args: ['cdkDragMoved']
+        }], disabled: [{
+            type: Input,
+            args: ['cdkDragDisabled']
+        }], dragStartDelay: [{
+            type: Input,
+            args: ['cdkDragStartDelay']
+        }], lockAxis: [{
+            type: Input,
+            args: ['cdkDragLockAxis']
+        }], constrainPosition: [{
+            type: Input,
+            args: ['cdkDragConstrainPosition']
+        }], previewClass: [{
+            type: Input,
+            args: ['cdkDragPreviewClass']
+        }], boundaryElement: [{
+            type: Input,
+            args: ['cdkDragBoundary']
+        }], rootElementSelector: [{
+            type: Input,
+            args: ['cdkDragRootElement']
+        }], previewContainer: [{
+            type: Input,
+            args: ['cdkDragPreviewContainer']
+        }], _handles: [{
+            type: ContentChildren,
+            args: [CDK_DRAG_HANDLE, { descendants: true }]
+        }], _previewTemplate: [{
+            type: ContentChild,
+            args: [CDK_DRAG_PREVIEW]
+        }], _placeholderTemplate: [{
+            type: ContentChild,
+            args: [CDK_DRAG_PLACEHOLDER]
+        }], data: [{
+            type: Input,
+            args: ['cdkDragData']
+        }], freeDragPosition: [{
+            type: Input,
+            args: ['cdkDragFreeDragPosition']
+        }] }); })();
+/** Gets the closest ancestor of an element that matches a selector. */
+function getClosestMatchingAncestor(element, selector) {
+    let currentElement = element.parentElement;
+    while (currentElement) {
+        // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.
+        if (currentElement.matches ? currentElement.matches(selector) :
+            currentElement.msMatchesSelector(selector)) {
+            return currentElement;
+        }
+        currentElement = currentElement.parentElement;
+    }
+    return null;
+}
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+class DragDropModule {
+}
+DragDropModule.ɵfac = function DragDropModule_Factory(t) { return new (t || DragDropModule)(); };
+DragDropModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DragDropModule });
+DragDropModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [
+        DragDrop,
+    ], imports: [CdkScrollableModule] });
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragDropModule, [{
+        type: NgModule,
+        args: [{
+                declarations: [
+                    CdkDropList,
+                    CdkDropListGroup,
+                    CdkDrag,
+                    CdkDragHandle,
+                    CdkDragPreview,
+                    CdkDragPlaceholder,
+                ],
+                exports: [
+                    CdkScrollableModule,
+                    CdkDropList,
+                    CdkDropListGroup,
+                    CdkDrag,
+                    CdkDragHandle,
+                    CdkDragPreview,
+                    CdkDragPlaceholder,
+                ],
+                providers: [
+                    DragDrop,
+                ]
+            }]
+    }], null, null); })();
+(function () { (typeof ngJitMode === "undefined" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragDropModule, { declarations: function () { return [CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; }, exports: function () { return [CdkScrollableModule, CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder]; } }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CDK_DRAG_CONFIG, CDK_DRAG_HANDLE, CDK_DRAG_PARENT, CDK_DRAG_PLACEHOLDER, CDK_DRAG_PREVIEW, CDK_DROP_LIST, CDK_DROP_LIST_GROUP, CdkDrag, CdkDragHandle, CdkDragPlaceholder, CdkDragPreview, CdkDropList, CdkDropListGroup, DragDrop, DragDropModule, DragDropRegistry, DragRef, DropListRef, copyArrayItem, moveItemInArray, transferArrayItem };
+
+//# sourceMappingURL=drag-drop.js.map
Index: trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/drag-drop.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-drop.js","sources":["../../../../../../src/cdk/drag-drop/drag-styling.ts","../../../../../../src/cdk/drag-drop/transition-duration.ts","../../../../../../src/cdk/drag-drop/client-rect.ts","../../../../../../src/cdk/drag-drop/parent-position-tracker.ts","../../../../../../src/cdk/drag-drop/clone-node.ts","../../../../../../src/cdk/drag-drop/drag-ref.ts","../../../../../../src/cdk/drag-drop/drag-utils.ts","../../../../../../src/cdk/drag-drop/drop-list-ref.ts","../../../../../../src/cdk/drag-drop/drag-drop-registry.ts","../../../../../../src/cdk/drag-drop/drag-drop.ts","../../../../../../src/cdk/drag-drop/drag-parent.ts","../../../../../../src/cdk/drag-drop/drag-events.ts","../../../../../../src/cdk/drag-drop/directives/drop-list-group.ts","../../../../../../src/cdk/drag-drop/directives/config.ts","../../../../../../src/cdk/drag-drop/directives/assertions.ts","../../../../../../src/cdk/drag-drop/directives/drop-list.ts","../../../../../../src/cdk/drag-drop/directives/drag-handle.ts","../../../../../../src/cdk/drag-drop/directives/drag-placeholder.ts","../../../../../../src/cdk/drag-drop/directives/drag-preview.ts","../../../../../../src/cdk/drag-drop/directives/drag.ts","../../../../../../src/cdk/drag-drop/drag-drop-module.ts","../../../../../../src/cdk/drag-drop/public-api.ts","../../../../../../src/cdk/drag-drop/index.ts"],"names":["clamp"],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Extended CSSStyleDeclaration that includes a couple of drag-related\n * properties that aren't in the built-in TS typings.\n */\n export interface DragCSSStyleDeclaration extends CSSStyleDeclaration {\n  msScrollSnapType: string;\n  scrollSnapType: string;\n}\n\n/**\n * Shallow-extends a stylesheet object with another stylesheet-like object.\n * Note that the keys in `source` have to be dash-cased.\n * @docs-private\n */\nexport function extendStyles(dest: CSSStyleDeclaration,\n                             source: Record<string, string>,\n                             importantProperties?: Set<string>) {\n  for (let key in source) {\n    if (source.hasOwnProperty(key)) {\n      const value = source[key];\n\n      if (value) {\n        dest.setProperty(key, value, importantProperties?.has(key) ? 'important' : '');\n      } else {\n        dest.removeProperty(key);\n      }\n    }\n  }\n\n  return dest;\n}\n\n\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nexport function toggleNativeDragInteractions(element: HTMLElement, enable: boolean) {\n  const userSelect = enable ? '' : 'none';\n\n  extendStyles(element.style, {\n    'touch-action': enable ? '' : 'none',\n    '-webkit-user-drag': enable ? '' : 'none',\n    '-webkit-tap-highlight-color': enable ? '' : 'transparent',\n    'user-select': userSelect,\n    '-ms-user-select': userSelect,\n    '-webkit-user-select': userSelect,\n    '-moz-user-select': userSelect\n  });\n}\n\n/**\n * Toggles whether an element is visible while preserving its dimensions.\n * @param element Element whose visibility to toggle\n * @param enable Whether the element should be visible.\n * @param importantProperties Properties to be set as `!important`.\n * @docs-private\n */\nexport function toggleVisibility(element: HTMLElement,\n                                 enable: boolean,\n                                 importantProperties?: Set<string>) {\n  extendStyles(element.style, {\n    position: enable ? '' : 'fixed',\n    top: enable ? '' : '0',\n    opacity: enable ? '' : '0',\n    left: enable ? '' : '-999em'\n  }, importantProperties);\n}\n\n/**\n * Combines a transform string with an optional other transform\n * that exited before the base transform was applied.\n */\nexport function combineTransforms(transform: string, initialTransform?: string): string {\n  return initialTransform && initialTransform != 'none' ?\n      (transform + ' ' + initialTransform) :\n      transform;\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/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value: string): number {\n  // Some browsers will return it in seconds, whereas others will return milliseconds.\n  const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n  return parseFloat(value) * multiplier;\n}\n\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nexport function getTransformTransitionDurationInMs(element: HTMLElement): number {\n  const computedStyle = getComputedStyle(element);\n  const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n  const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n\n  // If there's no transition for `all` or `transform`, we shouldn't do anything.\n  if (!property) {\n    return 0;\n  }\n\n  // Get the index of the property that we're interested in and match\n  // it up to the same index in `transition-delay` and `transition-duration`.\n  const propertyIndex = transitionedProperties.indexOf(property);\n  const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n  const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n\n  return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n         parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle: CSSStyleDeclaration, name: string): string[] {\n  const value = computedStyle.getPropertyValue(name);\n  return value.split(',').map(part => part.trim());\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** Gets a mutable version of an element's bounding `ClientRect`. */\nexport function getMutableClientRect(element: Element): ClientRect {\n  const clientRect = element.getBoundingClientRect();\n\n  // We need to clone the `clientRect` here, because all the values on it are readonly\n  // and we need to be able to update them. Also we can't use a spread here, because\n  // the values on a `ClientRect` aren't own properties. See:\n  // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n  return {\n    top: clientRect.top,\n    right: clientRect.right,\n    bottom: clientRect.bottom,\n    left: clientRect.left,\n    width: clientRect.width,\n    height: clientRect.height\n  };\n}\n\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nexport function isInsideClientRect(clientRect: ClientRect, x: number, y: number) {\n  const {top, bottom, left, right} = clientRect;\n  return y >= top && y <= bottom && x >= left && x <= right;\n}\n\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nexport function adjustClientRect(clientRect: ClientRect, top: number, left: number) {\n  clientRect.top += top;\n  clientRect.bottom = clientRect.top + clientRect.height;\n\n  clientRect.left += left;\n  clientRect.right = clientRect.left + clientRect.width;\n}\n\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nexport function isPointerNearClientRect(rect: ClientRect,\n                                        threshold: number,\n                                        pointerX: number,\n                                        pointerY: number): boolean {\n  const {top, right, bottom, left, width, height} = rect;\n  const xThreshold = width * threshold;\n  const yThreshold = height * threshold;\n\n  return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n         pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {getMutableClientRect, adjustClientRect} from './client-rect';\n\n/** Object holding the scroll position of something. */\ninterface ScrollPosition {\n  top: number;\n  left: number;\n}\n\n/** Keeps track of the scroll position and dimensions of the parents of an element. */\nexport class ParentPositionTracker {\n  /** Cached positions of the scrollable parent elements. */\n  readonly positions = new Map<Document|HTMLElement, {\n    scrollPosition: ScrollPosition,\n    clientRect?: ClientRect\n  }>();\n\n  constructor(private _document: Document, private _viewportRuler: ViewportRuler) {}\n\n  /** Clears the cached positions. */\n  clear() {\n    this.positions.clear();\n  }\n\n  /** Caches the positions. Should be called at the beginning of a drag sequence. */\n  cache(elements: readonly HTMLElement[]) {\n    this.clear();\n    this.positions.set(this._document, {\n      scrollPosition: this._viewportRuler.getViewportScrollPosition(),\n    });\n\n    elements.forEach(element => {\n      this.positions.set(element, {\n        scrollPosition: {top: element.scrollTop, left: element.scrollLeft},\n        clientRect: getMutableClientRect(element)\n      });\n    });\n  }\n\n  /** Handles scrolling while a drag is taking place. */\n  handleScroll(event: Event): ScrollPosition | null {\n    const target = _getEventTarget<HTMLElement|Document>(event)!;\n    const cachedPosition = this.positions.get(target);\n\n    if (!cachedPosition) {\n      return null;\n    }\n\n    // Used when figuring out whether an element is inside the scroll parent. If the scrolled\n    // parent is the `document`, we use the `documentElement`, because IE doesn't support\n    // `contains` on the `document`.\n    const scrolledParentNode = target === this._document ? target.documentElement : target;\n    const scrollPosition = cachedPosition.scrollPosition;\n    let newTop: number;\n    let newLeft: number;\n\n    if (target === this._document) {\n      const viewportScrollPosition = this._viewportRuler!.getViewportScrollPosition();\n      newTop = viewportScrollPosition.top;\n      newLeft = viewportScrollPosition.left;\n    } else {\n      newTop = (target as HTMLElement).scrollTop;\n      newLeft = (target as HTMLElement).scrollLeft;\n    }\n\n    const topDifference = scrollPosition.top - newTop;\n    const leftDifference = scrollPosition.left - newLeft;\n\n    // Go through and update the cached positions of the scroll\n    // parents that are inside the element that was scrolled.\n    this.positions.forEach((position, node) => {\n      if (position.clientRect && target !== node && scrolledParentNode.contains(node)) {\n        adjustClientRect(position.clientRect, topDifference, leftDifference);\n      }\n    });\n\n    scrollPosition.top = newTop;\n    scrollPosition.left = newLeft;\n\n    return {top: topDifference, left: leftDifference};\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/** Creates a deep clone of an element. */\nexport function deepCloneNode(node: HTMLElement): HTMLElement {\n  const clone = node.cloneNode(true) as HTMLElement;\n  const descendantsWithId = clone.querySelectorAll('[id]');\n  const nodeName = node.nodeName.toLowerCase();\n\n  // Remove the `id` to avoid having multiple elements with the same id on the page.\n  clone.removeAttribute('id');\n\n  for (let i = 0; i < descendantsWithId.length; i++) {\n    descendantsWithId[i].removeAttribute('id');\n  }\n\n  if (nodeName === 'canvas') {\n    transferCanvasData(node as HTMLCanvasElement, clone as HTMLCanvasElement);\n  } else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {\n    transferInputData(node as HTMLInputElement, clone as HTMLInputElement);\n  }\n\n  transferData('canvas', node, clone, transferCanvasData);\n  transferData('input, textarea, select', node, clone, transferInputData);\n  return clone;\n}\n\n/** Matches elements between an element and its clone and allows for their data to be cloned. */\nfunction transferData<T extends Element>(selector: string, node: HTMLElement, clone: HTMLElement,\n                                         callback: (source: T, clone: T) => void) {\n  const descendantElements = node.querySelectorAll<T>(selector);\n\n  if (descendantElements.length) {\n    const cloneElements = clone.querySelectorAll<T>(selector);\n\n    for (let i = 0; i < descendantElements.length; i++) {\n      callback(descendantElements[i], cloneElements[i]);\n    }\n  }\n}\n\n// Counter for unique cloned radio button names.\nlet cloneUniqueId = 0;\n\n/** Transfers the data of one input element to another. */\nfunction transferInputData(source: Element & {value: string},\n                           clone: Element & {value: string; name: string; type: string}) {\n  // Browsers throw an error when assigning the value of a file input programmatically.\n  if (clone.type !== 'file') {\n    clone.value = source.value;\n  }\n\n  // Radio button `name` attributes must be unique for radio button groups\n  // otherwise original radio buttons can lose their checked state\n  // once the clone is inserted in the DOM.\n  if (clone.type === 'radio' && clone.name) {\n    clone.name = `mat-clone-${clone.name}-${cloneUniqueId++}`;\n  }\n}\n\n/** Transfers the data of one canvas element to another. */\nfunction transferCanvasData(source: HTMLCanvasElement, clone: HTMLCanvasElement) {\n  const context = clone.getContext('2d');\n\n  if (context) {\n    // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).\n    // We can't do much about it so just ignore the error.\n    try {\n      context.drawImage(source, 0, 0);\n    } catch {}\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {EmbeddedViewRef, ElementRef, NgZone, ViewContainerRef, TemplateRef} from '@angular/core';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {Direction} from '@angular/cdk/bidi';\nimport {\n  normalizePassiveListenerOptions,\n  _getEventTarget,\n  _getShadowRoot,\n} from '@angular/cdk/platform';\nimport {coerceBooleanProperty, coerceElement} from '@angular/cdk/coercion';\nimport {\n  isFakeMousedownFromScreenReader,\n  isFakeTouchstartFromScreenReader,\n} from '@angular/cdk/a11y';\nimport {Subscription, Subject, Observable} from 'rxjs';\nimport {DropListRefInternal as DropListRef} from './drop-list-ref';\nimport {DragDropRegistry} from './drag-drop-registry';\nimport {\n  combineTransforms,\n  extendStyles,\n  toggleNativeDragInteractions,\n  toggleVisibility,\n} from './drag-styling';\nimport {getTransformTransitionDurationInMs} from './transition-duration';\nimport {getMutableClientRect, adjustClientRect} from './client-rect';\nimport {ParentPositionTracker} from './parent-position-tracker';\nimport {deepCloneNode} from './clone-node';\n\n/** Object that can be used to configure the behavior of DragRef. */\nexport interface DragRefConfig {\n  /**\n   * Minimum amount of pixels that the user should\n   * drag, before the CDK initiates a drag sequence.\n   */\n  dragStartThreshold: number;\n\n  /**\n   * Amount the pixels the user should drag before the CDK\n   * considers them to have changed the drag direction.\n   */\n  pointerDirectionChangeThreshold: number;\n\n  /** `z-index` for the absolutely-positioned elements that are created by the drag item. */\n  zIndex?: number;\n\n  /** Ref that the current drag item is nested in. */\n  parentDragRef?: DragRef;\n}\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = normalizePassiveListenerOptions({passive: false});\n\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n */\nconst MOUSE_EVENT_IGNORE_TIME = 800;\n\n// TODO(crisbeto): add an API for moving a draggable up/down the\n// list programmatically. Useful for keyboard controls.\n\n/**\n * Internal compile-time-only representation of a `DragRef`.\n * Used to avoid circular import issues between the `DragRef` and the `DropListRef`.\n * @docs-private\n */\nexport interface DragRefInternal extends DragRef {}\n\n/** Template that can be used to create a drag helper element (e.g. a preview or a placeholder). */\ninterface DragHelperTemplate<T = any> {\n  template: TemplateRef<T> | null;\n  viewContainer: ViewContainerRef;\n  context: T;\n}\n\n/** Template that can be used to create a drag preview element. */\ninterface DragPreviewTemplate<T = any> extends DragHelperTemplate<T> {\n  matchSize?: boolean;\n}\n\n/** Point on the page or within an element. */\nexport interface Point {\n  x: number;\n  y: number;\n}\n\n/** Inline styles to be set as `!important` while dragging. */\nconst dragImportantProperties = new Set([\n  // Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.\n  'position'\n]);\n\n/**\n * Possible places into which the preview of a drag item can be inserted.\n * - `global` - Preview will be inserted at the bottom of the `<body>`. The advantage is that\n * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain\n * its inherited styles.\n * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that\n * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be\n * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors\n * like `:nth-child` and some flexbox configurations.\n * - `ElementRef<HTMLElement> | HTMLElement` - Preview will be inserted into a specific element.\n * Same advantages and disadvantages as `parent`.\n */\nexport type PreviewContainer = 'global' | 'parent' | ElementRef<HTMLElement> | HTMLElement;\n\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n */\nexport class DragRef<T = any> {\n  /** Element displayed next to the user's pointer while the element is dragged. */\n  private _preview: HTMLElement;\n\n  /** Reference to the view of the preview element. */\n  private _previewRef: EmbeddedViewRef<any> | null;\n\n  /** Container into which to insert the preview. */\n  private _previewContainer: PreviewContainer | undefined;\n\n  /** Reference to the view of the placeholder element. */\n  private _placeholderRef: EmbeddedViewRef<any> | null;\n\n  /** Element that is rendered instead of the draggable item while it is being sorted. */\n  private _placeholder: HTMLElement;\n\n  /** Coordinates within the element at which the user picked up the element. */\n  private _pickupPositionInElement: Point;\n\n  /** Coordinates on the page at which the user picked up the element. */\n  private _pickupPositionOnPage: Point;\n\n  /**\n   * Anchor node used to save the place in the DOM where the element was\n   * picked up so that it can be restored at the end of the drag sequence.\n   */\n  private _anchor: Comment;\n\n  /**\n   * CSS `transform` applied to the element when it isn't being dragged. We need a\n   * passive transform in order for the dragged element to retain its new position\n   * after the user has stopped dragging and because we need to know the relative\n   * position in case they start dragging again. This corresponds to `element.style.transform`.\n   */\n  private _passiveTransform: Point = {x: 0, y: 0};\n\n  /** CSS `transform` that is applied to the element while it's being dragged. */\n  private _activeTransform: Point = {x: 0, y: 0};\n\n  /** Inline `transform` value that the element had before the first dragging sequence. */\n  private _initialTransform?: string;\n\n  /**\n   * Whether the dragging sequence has been started. Doesn't\n   * necessarily mean that the element has been moved.\n   */\n  private _hasStartedDragging = false;\n\n  /** Whether the element has moved since the user started dragging it. */\n  private _hasMoved: boolean;\n\n  /** Drop container in which the DragRef resided when dragging began. */\n  private _initialContainer: DropListRef;\n\n  /** Index at which the item started in its initial container. */\n  private _initialIndex: number;\n\n  /** Cached positions of scrollable parent elements. */\n  private _parentPositions: ParentPositionTracker;\n\n  /** Emits when the item is being moved. */\n  private readonly _moveEvents = new Subject<{\n    source: DragRef;\n    pointerPosition: {x: number, y: number};\n    event: MouseEvent | TouchEvent;\n    distance: Point;\n    delta: {x: -1 | 0 | 1, y: -1 | 0 | 1};\n  }>();\n\n  /** Keeps track of the direction in which the user is dragging along each axis. */\n  private _pointerDirectionDelta: {x: -1 | 0 | 1, y: -1 | 0 | 1};\n\n  /** Pointer position at which the last change in the delta occurred. */\n  private _pointerPositionAtLastDirectionChange: Point;\n\n  /** Position of the pointer at the last pointer event. */\n  private _lastKnownPointerPosition: Point;\n\n  /**\n   * Root DOM node of the drag instance. This is the element that will\n   * be moved around as the user is dragging.\n   */\n  private _rootElement: HTMLElement;\n\n  /**\n   * Nearest ancestor SVG, relative to which coordinates are calculated if dragging SVGElement\n   */\n  private _ownerSVGElement: SVGSVGElement | null;\n\n  /**\n   * Inline style value of `-webkit-tap-highlight-color` at the time the\n   * dragging was started. Used to restore the value once we're done dragging.\n   */\n  private _rootElementTapHighlight: string;\n\n  /** Subscription to pointer movement events. */\n  private _pointerMoveSubscription = Subscription.EMPTY;\n\n  /** Subscription to the event that is dispatched when the user lifts their pointer. */\n  private _pointerUpSubscription = Subscription.EMPTY;\n\n  /** Subscription to the viewport being scrolled. */\n  private _scrollSubscription = Subscription.EMPTY;\n\n  /** Subscription to the viewport being resized. */\n  private _resizeSubscription = Subscription.EMPTY;\n\n  /**\n   * Time at which the last touch event occurred. Used to avoid firing the same\n   * events multiple times on touch devices where the browser will fire a fake\n   * mouse event for each touch event, after a certain time.\n   */\n  private _lastTouchEventTime: number;\n\n  /** Time at which the last dragging sequence was started. */\n  private _dragStartTime: number;\n\n  /** Cached reference to the boundary element. */\n  private _boundaryElement: HTMLElement | null = null;\n\n  /** Whether the native dragging interactions have been enabled on the root element. */\n  private _nativeInteractionsEnabled = true;\n\n  /** Cached dimensions of the preview element. */\n  private _previewRect?: ClientRect;\n\n  /** Cached dimensions of the boundary element. */\n  private _boundaryRect?: ClientRect;\n\n  /** Element that will be used as a template to create the draggable item's preview. */\n  private _previewTemplate?: DragPreviewTemplate | null;\n\n  /** Template for placeholder element rendered to show where a draggable would be dropped. */\n  private _placeholderTemplate?: DragHelperTemplate | null;\n\n  /** Elements that can be used to drag the draggable item. */\n  private _handles: HTMLElement[] = [];\n\n  /** Registered handles that are currently disabled. */\n  private _disabledHandles = new Set<HTMLElement>();\n\n  /** Droppable container that the draggable is a part of. */\n  private _dropContainer?: DropListRef;\n\n  /** Layout direction of the item. */\n  private _direction: Direction = 'ltr';\n\n  /** Ref that the current drag item is nested in. */\n  private _parentDragRef: DragRef<unknown> | null;\n\n  /**\n   * Cached shadow root that the element is placed in. `null` means that the element isn't in\n   * the shadow DOM and `undefined` means that it hasn't been resolved yet. Should be read via\n   * `_getShadowRoot`, not directly.\n   */\n  private _cachedShadowRoot: ShadowRoot | null | undefined;\n\n  /** Axis along which dragging is locked. */\n  lockAxis: 'x' | 'y';\n\n  /**\n   * Amount of milliseconds to wait after the user has put their\n   * pointer down before starting to drag the element.\n   */\n  dragStartDelay: number | {touch: number, mouse: number} = 0;\n\n  /** Class to be added to the preview element. */\n  previewClass: string|string[]|undefined;\n\n  /** Whether starting to drag this element is disabled. */\n  get disabled(): boolean {\n    return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n  }\n  set disabled(value: boolean) {\n    const newValue = coerceBooleanProperty(value);\n\n    if (newValue !== this._disabled) {\n      this._disabled = newValue;\n      this._toggleNativeDragInteractions();\n      this._handles.forEach(handle => toggleNativeDragInteractions(handle, newValue));\n    }\n  }\n  private _disabled = false;\n\n  /** Emits as the drag sequence is being prepared. */\n  readonly beforeStarted = new Subject<void>();\n\n  /** Emits when the user starts dragging the item. */\n  readonly started = new Subject<{source: DragRef}>();\n\n  /** Emits when the user has released a drag item, before any animations have started. */\n  readonly released = new Subject<{source: DragRef}>();\n\n  /** Emits when the user stops dragging an item in the container. */\n  readonly ended = new Subject<{source: DragRef, distance: Point, dropPoint: Point}>();\n\n  /** Emits when the user has moved the item into a new container. */\n  readonly entered = new Subject<{container: DropListRef, item: DragRef, currentIndex: number}>();\n\n  /** Emits when the user removes the item its container by dragging it into another container. */\n  readonly exited = new Subject<{container: DropListRef, item: DragRef}>();\n\n  /** Emits when the user drops the item inside a container. */\n  readonly dropped = new Subject<{\n    previousIndex: number;\n    currentIndex: number;\n    item: DragRef;\n    container: DropListRef;\n    previousContainer: DropListRef;\n    distance: Point;\n    dropPoint: Point;\n    isPointerOverContainer: boolean;\n  }>();\n\n  /**\n   * Emits as the user is dragging the item. Use with caution,\n   * because this event will fire for every pixel that the user has dragged.\n   */\n  readonly moved: Observable<{\n    source: DragRef;\n    pointerPosition: {x: number, y: number};\n    event: MouseEvent | TouchEvent;\n    distance: Point;\n    delta: {x: -1 | 0 | 1, y: -1 | 0 | 1};\n  }> = this._moveEvents;\n\n  /** Arbitrary data that can be attached to the drag item. */\n  data: T;\n\n  /**\n   * Function that can be used to customize the logic of how the position of the drag item\n   * is limited while it's being dragged. Gets called with a point containing the current position\n   * of the user's pointer on the page and should return a point describing where the item should\n   * be rendered.\n   */\n  constrainPosition?: (point: Point, dragRef: DragRef) => Point;\n\n  constructor(\n    element: ElementRef<HTMLElement> | HTMLElement,\n    private _config: DragRefConfig,\n    private _document: Document,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler,\n    private _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>) {\n\n    this.withRootElement(element).withParent(_config.parentDragRef || null);\n    this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n    _dragDropRegistry.registerDragItem(this);\n  }\n\n  /**\n   * Returns the element that is being used as a placeholder\n   * while the current element is being dragged.\n   */\n  getPlaceholderElement(): HTMLElement {\n    return this._placeholder;\n  }\n\n  /** Returns the root draggable element. */\n  getRootElement(): HTMLElement {\n    return this._rootElement;\n  }\n\n  /**\n   * Gets the currently-visible element that represents the drag item.\n   * While dragging this is the placeholder, otherwise it's the root element.\n   */\n  getVisibleElement(): HTMLElement {\n    return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();\n  }\n\n  /** Registers the handles that can be used to drag the element. */\n  withHandles(handles: (HTMLElement | ElementRef<HTMLElement>)[]): this {\n    this._handles = handles.map(handle => coerceElement(handle));\n    this._handles.forEach(handle => toggleNativeDragInteractions(handle, this.disabled));\n    this._toggleNativeDragInteractions();\n\n    // Delete any lingering disabled handles that may have been destroyed. Note that we re-create\n    // the set, rather than iterate over it and filter out the destroyed handles, because while\n    // the ES spec allows for sets to be modified while they're being iterated over, some polyfills\n    // use an array internally which may throw an error.\n    const disabledHandles = new Set<HTMLElement>();\n    this._disabledHandles.forEach(handle => {\n      if (this._handles.indexOf(handle) > -1) {\n        disabledHandles.add(handle);\n      }\n    });\n    this._disabledHandles = disabledHandles;\n    return this;\n  }\n\n  /**\n   * Registers the template that should be used for the drag preview.\n   * @param template Template that from which to stamp out the preview.\n   */\n  withPreviewTemplate(template: DragPreviewTemplate | null): this {\n    this._previewTemplate = template;\n    return this;\n  }\n\n  /**\n   * Registers the template that should be used for the drag placeholder.\n   * @param template Template that from which to stamp out the placeholder.\n   */\n  withPlaceholderTemplate(template: DragHelperTemplate | null): this {\n    this._placeholderTemplate = template;\n    return this;\n  }\n\n  /**\n   * Sets an alternate drag root element. The root element is the element that will be moved as\n   * the user is dragging. Passing an alternate root element is useful when trying to enable\n   * dragging on an element that you might not have access to.\n   */\n  withRootElement(rootElement: ElementRef<HTMLElement> | HTMLElement): this {\n    const element = coerceElement(rootElement);\n\n    if (element !== this._rootElement) {\n      if (this._rootElement) {\n        this._removeRootElementListeners(this._rootElement);\n      }\n\n      this._ngZone.runOutsideAngular(() => {\n        element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n        element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n      });\n      this._initialTransform = undefined;\n      this._rootElement = element;\n    }\n\n    if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n      this._ownerSVGElement = this._rootElement.ownerSVGElement;\n    }\n\n    return this;\n  }\n\n  /**\n   * Element to which the draggable's position will be constrained.\n   */\n  withBoundaryElement(boundaryElement: ElementRef<HTMLElement> | HTMLElement | null): this {\n    this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n    this._resizeSubscription.unsubscribe();\n    if (boundaryElement) {\n      this._resizeSubscription = this._viewportRuler\n        .change(10)\n        .subscribe(() => this._containInsideBoundaryOnResize());\n    }\n    return this;\n  }\n\n  /** Sets the parent ref that the ref is nested in.  */\n  withParent(parent: DragRef<unknown> | null): this {\n    this._parentDragRef = parent;\n    return this;\n  }\n\n  /** Removes the dragging functionality from the DOM element. */\n  dispose() {\n    this._removeRootElementListeners(this._rootElement);\n\n    // Do this check before removing from the registry since it'll\n    // stop being considered as dragged once it is removed.\n    if (this.isDragging()) {\n      // Since we move out the element to the end of the body while it's being\n      // dragged, we have to make sure that it's removed if it gets destroyed.\n      removeNode(this._rootElement);\n    }\n\n    removeNode(this._anchor);\n    this._destroyPreview();\n    this._destroyPlaceholder();\n    this._dragDropRegistry.removeDragItem(this);\n    this._removeSubscriptions();\n    this.beforeStarted.complete();\n    this.started.complete();\n    this.released.complete();\n    this.ended.complete();\n    this.entered.complete();\n    this.exited.complete();\n    this.dropped.complete();\n    this._moveEvents.complete();\n    this._handles = [];\n    this._disabledHandles.clear();\n    this._dropContainer = undefined;\n    this._resizeSubscription.unsubscribe();\n    this._parentPositions.clear();\n    this._boundaryElement = this._rootElement = this._ownerSVGElement = this._placeholderTemplate =\n        this._previewTemplate = this._anchor = this._parentDragRef = null!;\n  }\n\n  /** Checks whether the element is currently being dragged. */\n  isDragging(): boolean {\n    return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);\n  }\n\n  /** Resets a standalone drag item to its initial position. */\n  reset(): void {\n    this._rootElement.style.transform = this._initialTransform || '';\n    this._activeTransform = {x: 0, y: 0};\n    this._passiveTransform = {x: 0, y: 0};\n  }\n\n  /**\n   * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n   * @param handle Handle element that should be disabled.\n   */\n  disableHandle(handle: HTMLElement) {\n    if (!this._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {\n      this._disabledHandles.add(handle);\n      toggleNativeDragInteractions(handle, true);\n    }\n  }\n\n  /**\n   * Enables a handle, if it has been disabled.\n   * @param handle Handle element to be enabled.\n   */\n  enableHandle(handle: HTMLElement) {\n    if (this._disabledHandles.has(handle)) {\n      this._disabledHandles.delete(handle);\n      toggleNativeDragInteractions(handle, this.disabled);\n    }\n  }\n\n  /** Sets the layout direction of the draggable item. */\n  withDirection(direction: Direction): this {\n    this._direction = direction;\n    return this;\n  }\n\n  /** Sets the container that the item is part of. */\n  _withDropContainer(container: DropListRef) {\n    this._dropContainer = container;\n  }\n\n  /**\n   * Gets the current position in pixels the draggable outside of a drop container.\n   */\n  getFreeDragPosition(): Readonly<Point> {\n    const position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n    return {x: position.x, y: position.y};\n  }\n\n  /**\n   * Sets the current position in pixels the draggable outside of a drop container.\n   * @param value New position to be set.\n   */\n  setFreeDragPosition(value: Point): this {\n    this._activeTransform = {x: 0, y: 0};\n    this._passiveTransform.x = value.x;\n    this._passiveTransform.y = value.y;\n\n    if (!this._dropContainer) {\n      this._applyRootElementTransform(value.x, value.y);\n    }\n\n    return this;\n  }\n\n  /**\n   * Sets the container into which to insert the preview element.\n   * @param value Container into which to insert the preview.\n   */\n  withPreviewContainer(value: PreviewContainer): this {\n    this._previewContainer = value;\n    return this;\n  }\n\n  /** Updates the item's sort order based on the last-known pointer position. */\n  _sortFromLastPointerPosition() {\n    const position = this._lastKnownPointerPosition;\n\n    if (position && this._dropContainer) {\n      this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);\n    }\n  }\n\n  /** Unsubscribes from the global subscriptions. */\n  private _removeSubscriptions() {\n    this._pointerMoveSubscription.unsubscribe();\n    this._pointerUpSubscription.unsubscribe();\n    this._scrollSubscription.unsubscribe();\n  }\n\n  /** Destroys the preview element and its ViewRef. */\n  private _destroyPreview() {\n    if (this._preview) {\n      removeNode(this._preview);\n    }\n\n    if (this._previewRef) {\n      this._previewRef.destroy();\n    }\n\n    this._preview = this._previewRef = null!;\n  }\n\n  /** Destroys the placeholder element and its ViewRef. */\n  private _destroyPlaceholder() {\n    if (this._placeholder) {\n      removeNode(this._placeholder);\n    }\n\n    if (this._placeholderRef) {\n      this._placeholderRef.destroy();\n    }\n\n    this._placeholder = this._placeholderRef = null!;\n  }\n\n  /** Handler for the `mousedown`/`touchstart` events. */\n  private _pointerDown = (event: MouseEvent | TouchEvent) => {\n    this.beforeStarted.next();\n\n    // Delegate the event based on whether it started from a handle or the element itself.\n    if (this._handles.length) {\n      const targetHandle = this._handles.find(handle => {\n        const target = _getEventTarget(event);\n        return !!target && (target === handle || handle.contains(target as HTMLElement));\n      });\n\n      if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n        this._initializeDragSequence(targetHandle, event);\n      }\n    } else if (!this.disabled) {\n      this._initializeDragSequence(this._rootElement, event);\n    }\n  }\n\n  /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n  private _pointerMove = (event: MouseEvent | TouchEvent) => {\n    const pointerPosition = this._getPointerPositionOnPage(event);\n\n    if (!this._hasStartedDragging) {\n      const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);\n      const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);\n      const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;\n\n      // Only start dragging after the user has moved more than the minimum distance in either\n      // direction. Note that this is preferrable over doing something like `skip(minimumDistance)`\n      // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n      // per pixel of movement (e.g. if the user moves their pointer quickly).\n      if (isOverThreshold) {\n        const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);\n        const container = this._dropContainer;\n\n        if (!isDelayElapsed) {\n          this._endDragSequence(event);\n          return;\n        }\n\n        // Prevent other drag sequences from starting while something in the container is still\n        // being dragged. This can happen while we're waiting for the drop animation to finish\n        // and can cause errors, because some elements might still be moving around.\n        if (!container || (!container.isDragging() && !container.isReceiving())) {\n          // Prevent the default action as soon as the dragging sequence is considered as\n          // \"started\" since waiting for the next event can allow the device to begin scrolling.\n          event.preventDefault();\n          this._hasStartedDragging = true;\n          this._ngZone.run(() => this._startDragSequence(event));\n        }\n      }\n\n      return;\n    }\n\n    // We only need the preview dimensions if we have a boundary element.\n    if (this._boundaryElement) {\n      // Cache the preview element rect if we haven't cached it already or if\n      // we cached it too early before the element dimensions were computed.\n      if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {\n        this._previewRect = (this._preview || this._rootElement).getBoundingClientRect();\n      }\n    }\n\n    // We prevent the default action down here so that we know that dragging has started. This is\n    // important for touch devices where doing this too early can unnecessarily block scrolling,\n    // if there's a dragging delay.\n    event.preventDefault();\n\n    const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);\n    this._hasMoved = true;\n    this._lastKnownPointerPosition = pointerPosition;\n    this._updatePointerDirectionDelta(constrainedPointerPosition);\n\n    if (this._dropContainer) {\n      this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);\n    } else {\n      const activeTransform = this._activeTransform;\n      activeTransform.x =\n          constrainedPointerPosition.x - this._pickupPositionOnPage.x + this._passiveTransform.x;\n      activeTransform.y =\n          constrainedPointerPosition.y - this._pickupPositionOnPage.y + this._passiveTransform.y;\n\n      this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n\n      // Apply transform as attribute if dragging and svg element to work for IE\n      if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n        const appliedTransform = `translate(${activeTransform.x} ${activeTransform.y})`;\n        this._rootElement.setAttribute('transform', appliedTransform);\n      }\n    }\n\n    // Since this event gets fired for every pixel while dragging, we only\n    // want to fire it if the consumer opted into it. Also we have to\n    // re-enter the zone because we run all of the events on the outside.\n    if (this._moveEvents.observers.length) {\n      this._ngZone.run(() => {\n        this._moveEvents.next({\n          source: this,\n          pointerPosition: constrainedPointerPosition,\n          event,\n          distance: this._getDragDistance(constrainedPointerPosition),\n          delta: this._pointerDirectionDelta\n        });\n      });\n    }\n  }\n\n  /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n  private _pointerUp = (event: MouseEvent | TouchEvent) => {\n    this._endDragSequence(event);\n  }\n\n  /**\n   * Clears subscriptions and stops the dragging sequence.\n   * @param event Browser event object that ended the sequence.\n   */\n  private _endDragSequence(event: MouseEvent | TouchEvent) {\n    // Note that here we use `isDragging` from the service, rather than from `this`.\n    // The difference is that the one from the service reflects whether a dragging sequence\n    // has been initiated, whereas the one on `this` includes whether the user has passed\n    // the minimum dragging threshold.\n    if (!this._dragDropRegistry.isDragging(this)) {\n      return;\n    }\n\n    this._removeSubscriptions();\n    this._dragDropRegistry.stopDragging(this);\n    this._toggleNativeDragInteractions();\n\n    if (this._handles) {\n      this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;\n    }\n\n    if (!this._hasStartedDragging) {\n      return;\n    }\n\n    this.released.next({source: this});\n\n    if (this._dropContainer) {\n      // Stop scrolling immediately, instead of waiting for the animation to finish.\n      this._dropContainer._stopScrolling();\n      this._animatePreviewToPlaceholder().then(() => {\n        this._cleanupDragArtifacts(event);\n        this._cleanupCachedDimensions();\n        this._dragDropRegistry.stopDragging(this);\n      });\n    } else {\n      // Convert the active transform into a passive one. This means that next time\n      // the user starts dragging the item, its position will be calculated relatively\n      // to the new passive transform.\n      this._passiveTransform.x = this._activeTransform.x;\n      const pointerPosition = this._getPointerPositionOnPage(event);\n      this._passiveTransform.y = this._activeTransform.y;\n      this._ngZone.run(() => {\n        this.ended.next({\n          source: this,\n          distance: this._getDragDistance(pointerPosition),\n          dropPoint: pointerPosition\n        });\n      });\n      this._cleanupCachedDimensions();\n      this._dragDropRegistry.stopDragging(this);\n    }\n  }\n\n  /** Starts the dragging sequence. */\n  private _startDragSequence(event: MouseEvent | TouchEvent) {\n    if (isTouchEvent(event)) {\n      this._lastTouchEventTime = Date.now();\n    }\n\n    this._toggleNativeDragInteractions();\n\n    const dropContainer = this._dropContainer;\n\n    if (dropContainer) {\n      const element = this._rootElement;\n      const parent = element.parentNode as HTMLElement;\n      const placeholder = this._placeholder = this._createPlaceholderElement();\n      const anchor = this._anchor = this._anchor || this._document.createComment('');\n\n      // Needs to happen before the root element is moved.\n      const shadowRoot = this._getShadowRoot();\n\n      // Insert an anchor node so that we can restore the element's position in the DOM.\n      parent.insertBefore(anchor, element);\n\n      // There's no risk of transforms stacking when inside a drop container so\n      // we can keep the initial transform up to date any time dragging starts.\n      this._initialTransform = element.style.transform || '';\n\n      // Create the preview after the initial transform has\n      // been cached, because it can be affected by the transform.\n      this._preview = this._createPreviewElement();\n\n      // We move the element out at the end of the body and we make it hidden, because keeping it in\n      // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n      // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n      toggleVisibility(element, false, dragImportantProperties);\n      this._document.body.appendChild(parent.replaceChild(placeholder, element));\n      this._getPreviewInsertionPoint(parent, shadowRoot).appendChild(this._preview);\n      this.started.next({source: this}); // Emit before notifying the container.\n      dropContainer.start();\n      this._initialContainer = dropContainer;\n      this._initialIndex = dropContainer.getItemIndex(this);\n    } else {\n      this.started.next({source: this});\n      this._initialContainer = this._initialIndex = undefined!;\n    }\n\n    // Important to run after we've called `start` on the parent container\n    // so that it has had time to resolve its scrollable parents.\n    this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);\n  }\n\n  /**\n   * Sets up the different variables and subscriptions\n   * that will be necessary for the dragging sequence.\n   * @param referenceElement Element that started the drag sequence.\n   * @param event Browser event object that started the sequence.\n   */\n  private _initializeDragSequence(referenceElement: HTMLElement, event: MouseEvent | TouchEvent) {\n    // Stop propagation if the item is inside another\n    // draggable so we don't start multiple drag sequences.\n    if (this._parentDragRef) {\n      event.stopPropagation();\n    }\n\n    const isDragging = this.isDragging();\n    const isTouchSequence = isTouchEvent(event);\n    const isAuxiliaryMouseButton = !isTouchSequence && (event as MouseEvent).button !== 0;\n    const rootElement = this._rootElement;\n    const target = _getEventTarget(event);\n    const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime &&\n      this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n    const isFakeEvent = isTouchSequence ? isFakeTouchstartFromScreenReader(event as TouchEvent) :\n      isFakeMousedownFromScreenReader(event as MouseEvent);\n\n    // If the event started from an element with the native HTML drag&drop, it'll interfere\n    // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n    // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n    // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n    // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n    // events from firing on touch devices.\n    if (target && (target as HTMLElement).draggable && event.type === 'mousedown') {\n      event.preventDefault();\n    }\n\n    // Abort if the user is already dragging or is using a mouse button other than the primary one.\n    if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent || isFakeEvent) {\n      return;\n    }\n\n    // If we've got handles, we need to disable the tap highlight on the entire root element,\n    // otherwise iOS will still add it, even though all the drag interactions on the handle\n    // are disabled.\n    if (this._handles.length) {\n      this._rootElementTapHighlight = rootElement.style.webkitTapHighlightColor || '';\n      rootElement.style.webkitTapHighlightColor = 'transparent';\n    }\n\n    this._hasStartedDragging = this._hasMoved = false;\n\n    // Avoid multiple subscriptions and memory leaks when multi touch\n    // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n    this._removeSubscriptions();\n    this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n    this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n    this._scrollSubscription = this._dragDropRegistry\n      .scrolled(this._getShadowRoot())\n      .subscribe(scrollEvent => this._updateOnScroll(scrollEvent));\n\n    if (this._boundaryElement) {\n      this._boundaryRect = getMutableClientRect(this._boundaryElement);\n    }\n\n    // If we have a custom preview we can't know ahead of time how large it'll be so we position\n    // it next to the cursor. The exception is when the consumer has opted into making the preview\n    // the same size as the root element, in which case we do know the size.\n    const previewTemplate = this._previewTemplate;\n    this._pickupPositionInElement = previewTemplate && previewTemplate.template &&\n      !previewTemplate.matchSize ? {x: 0, y: 0} :\n      this._getPointerPositionInElement(referenceElement, event);\n    const pointerPosition = this._pickupPositionOnPage = this._lastKnownPointerPosition =\n        this._getPointerPositionOnPage(event);\n    this._pointerDirectionDelta = {x: 0, y: 0};\n    this._pointerPositionAtLastDirectionChange = {x: pointerPosition.x, y: pointerPosition.y};\n    this._dragStartTime = Date.now();\n    this._dragDropRegistry.startDragging(this, event);\n  }\n\n  /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n  private _cleanupDragArtifacts(event: MouseEvent | TouchEvent) {\n    // Restore the element's visibility and insert it at its old position in the DOM.\n    // It's important that we maintain the position, because moving the element around in the DOM\n    // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n    // while moving the existing elements in all other cases.\n    toggleVisibility(this._rootElement, true, dragImportantProperties);\n    this._anchor.parentNode!.replaceChild(this._rootElement, this._anchor);\n\n    this._destroyPreview();\n    this._destroyPlaceholder();\n    this._boundaryRect = this._previewRect = this._initialTransform = undefined;\n\n    // Re-enter the NgZone since we bound `document` events on the outside.\n    this._ngZone.run(() => {\n      const container = this._dropContainer!;\n      const currentIndex = container.getItemIndex(this);\n      const pointerPosition = this._getPointerPositionOnPage(event);\n      const distance = this._getDragDistance(pointerPosition);\n      const isPointerOverContainer = container._isOverContainer(\n        pointerPosition.x, pointerPosition.y);\n\n      this.ended.next({source: this, distance, dropPoint: pointerPosition});\n      this.dropped.next({\n        item: this,\n        currentIndex,\n        previousIndex: this._initialIndex,\n        container: container,\n        previousContainer: this._initialContainer,\n        isPointerOverContainer,\n        distance,\n        dropPoint: pointerPosition\n      });\n      container.drop(this, currentIndex, this._initialIndex, this._initialContainer,\n        isPointerOverContainer, distance, pointerPosition);\n      this._dropContainer = this._initialContainer;\n    });\n  }\n\n  /**\n   * Updates the item's position in its drop container, or moves it\n   * into a new one, depending on its current drag position.\n   */\n  private _updateActiveDropContainer({x, y}: Point, {x: rawX, y: rawY}: Point) {\n    // Drop container that draggable has been moved into.\n    let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n\n    // If we couldn't find a new container to move the item into, and the item has left its\n    // initial container, check whether the it's over the initial container. This handles the\n    // case where two containers are connected one way and the user tries to undo dragging an\n    // item into a new container.\n    if (!newContainer && this._dropContainer !== this._initialContainer &&\n        this._initialContainer._isOverContainer(x, y)) {\n      newContainer = this._initialContainer;\n    }\n\n    if (newContainer && newContainer !== this._dropContainer) {\n      this._ngZone.run(() => {\n        // Notify the old container that the item has left.\n        this.exited.next({item: this, container: this._dropContainer!});\n        this._dropContainer!.exit(this);\n        // Notify the new container that the item has entered.\n        this._dropContainer = newContainer!;\n        this._dropContainer.enter(this, x, y, newContainer === this._initialContainer &&\n            // If we're re-entering the initial container and sorting is disabled,\n            // put item the into its starting index to begin with.\n            newContainer.sortingDisabled ? this._initialIndex : undefined);\n        this.entered.next({\n          item: this,\n          container: newContainer!,\n          currentIndex: newContainer!.getItemIndex(this)\n        });\n      });\n    }\n\n    // Dragging may have been interrupted as a result of the events above.\n    if (this.isDragging()) {\n      this._dropContainer!._startScrollingIfNecessary(rawX, rawY);\n      this._dropContainer!._sortItem(this, x, y, this._pointerDirectionDelta);\n      this._applyPreviewTransform(\n        x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);\n    }\n  }\n\n  /**\n   * Creates the element that will be rendered next to the user's pointer\n   * and will be used as a preview of the element that is being dragged.\n   */\n  private _createPreviewElement(): HTMLElement {\n    const previewConfig = this._previewTemplate;\n    const previewClass = this.previewClass;\n    const previewTemplate = previewConfig ? previewConfig.template : null;\n    let preview: HTMLElement;\n\n    if (previewTemplate && previewConfig) {\n      // Measure the element before we've inserted the preview\n      // since the insertion could throw off the measurement.\n      const rootRect = previewConfig.matchSize ? this._rootElement.getBoundingClientRect() : null;\n      const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate,\n                                                                     previewConfig.context);\n      viewRef.detectChanges();\n      preview = getRootNode(viewRef, this._document);\n      this._previewRef = viewRef;\n      if (previewConfig.matchSize) {\n        matchElementSize(preview, rootRect!);\n      } else {\n        preview.style.transform =\n            getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);\n      }\n    } else {\n      const element = this._rootElement;\n      preview = deepCloneNode(element);\n      matchElementSize(preview, element.getBoundingClientRect());\n\n      if (this._initialTransform) {\n        preview.style.transform = this._initialTransform;\n      }\n    }\n\n    extendStyles(preview.style, {\n      // It's important that we disable the pointer events on the preview, because\n      // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n      'pointer-events': 'none',\n      // We have to reset the margin, because it can throw off positioning relative to the viewport.\n      'margin': '0',\n      'position': 'fixed',\n      'top': '0',\n      'left': '0',\n      'z-index': `${this._config.zIndex || 1000}`\n    }, dragImportantProperties);\n\n    toggleNativeDragInteractions(preview, false);\n    preview.classList.add('cdk-drag-preview');\n    preview.setAttribute('dir', this._direction);\n\n    if (previewClass) {\n      if (Array.isArray(previewClass)) {\n        previewClass.forEach(className => preview.classList.add(className));\n      } else {\n        preview.classList.add(previewClass);\n      }\n    }\n\n    return preview;\n  }\n\n  /**\n   * Animates the preview element from its current position to the location of the drop placeholder.\n   * @returns Promise that resolves when the animation completes.\n   */\n  private _animatePreviewToPlaceholder(): Promise<void> {\n    // If the user hasn't moved yet, the transitionend event won't fire.\n    if (!this._hasMoved) {\n      return Promise.resolve();\n    }\n\n    const placeholderRect = this._placeholder.getBoundingClientRect();\n\n    // Apply the class that adds a transition to the preview.\n    this._preview.classList.add('cdk-drag-animating');\n\n    // Move the preview to the placeholder position.\n    this._applyPreviewTransform(placeholderRect.left, placeholderRect.top);\n\n    // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n    // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n    // apply its style, we take advantage of the available info to figure out whether we need to\n    // bind the event in the first place.\n    const duration = getTransformTransitionDurationInMs(this._preview);\n\n    if (duration === 0) {\n      return Promise.resolve();\n    }\n\n    return this._ngZone.runOutsideAngular(() => {\n      return new Promise(resolve => {\n        const handler = ((event: TransitionEvent) => {\n          if (!event || (_getEventTarget(event) === this._preview &&\n              event.propertyName === 'transform')) {\n            this._preview?.removeEventListener('transitionend', handler);\n            resolve();\n            clearTimeout(timeout);\n          }\n        }) as EventListenerOrEventListenerObject;\n\n        // If a transition is short enough, the browser might not fire the `transitionend` event.\n        // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n        // fire if the transition hasn't completed when it was supposed to.\n        const timeout = setTimeout(handler as Function, duration * 1.5);\n        this._preview.addEventListener('transitionend', handler);\n      });\n    });\n  }\n\n  /** Creates an element that will be shown instead of the current element while dragging. */\n  private _createPlaceholderElement(): HTMLElement {\n    const placeholderConfig = this._placeholderTemplate;\n    const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n    let placeholder: HTMLElement;\n\n    if (placeholderTemplate) {\n      this._placeholderRef = placeholderConfig!.viewContainer.createEmbeddedView(\n        placeholderTemplate,\n        placeholderConfig!.context\n      );\n      this._placeholderRef.detectChanges();\n      placeholder = getRootNode(this._placeholderRef, this._document);\n    } else {\n      placeholder = deepCloneNode(this._rootElement);\n    }\n\n    placeholder.classList.add('cdk-drag-placeholder');\n    return placeholder;\n  }\n\n  /**\n   * Figures out the coordinates at which an element was picked up.\n   * @param referenceElement Element that initiated the dragging.\n   * @param event Event that initiated the dragging.\n   */\n  private _getPointerPositionInElement(referenceElement: HTMLElement,\n                                       event: MouseEvent | TouchEvent): Point {\n    const elementRect = this._rootElement.getBoundingClientRect();\n    const handleElement = referenceElement === this._rootElement ? null : referenceElement;\n    const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n    const point = isTouchEvent(event) ? event.targetTouches[0] : event;\n    const scrollPosition = this._getViewportScrollPosition();\n    const x = point.pageX - referenceRect.left - scrollPosition.left;\n    const y = point.pageY - referenceRect.top - scrollPosition.top;\n\n    return {\n      x: referenceRect.left - elementRect.left + x,\n      y: referenceRect.top - elementRect.top + y\n    };\n  }\n\n  /** Determines the point of the page that was touched by the user. */\n  private _getPointerPositionOnPage(event: MouseEvent | TouchEvent): Point {\n    const scrollPosition = this._getViewportScrollPosition();\n    const point = isTouchEvent(event) ?\n        // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n        // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`\n        // to have a value, but Firefox in device emulation mode has a bug where both can be empty\n        // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid\n        // throwing an error. The value returned here will be incorrect, but since this only\n        // breaks inside a developer tool and the value is only used for secondary information,\n        // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.\n        (event.touches[0] || event.changedTouches[0] || {pageX: 0, pageY: 0}) : event;\n\n    const x = point.pageX - scrollPosition.left;\n    const y = point.pageY - scrollPosition.top;\n\n    // if dragging SVG element, try to convert from the screen coordinate system to the SVG\n    // coordinate system\n    if (this._ownerSVGElement) {\n      const svgMatrix = this._ownerSVGElement.getScreenCTM();\n      if (svgMatrix) {\n        const svgPoint = this._ownerSVGElement.createSVGPoint();\n        svgPoint.x = x;\n        svgPoint.y = y;\n        return svgPoint.matrixTransform(svgMatrix.inverse());\n      }\n    }\n\n    return {x, y};\n  }\n\n\n  /** Gets the pointer position on the page, accounting for any position constraints. */\n  private _getConstrainedPointerPosition(point: Point): Point {\n    const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n    let {x, y} = this.constrainPosition ? this.constrainPosition(point, this) : point;\n\n    if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n      y = this._pickupPositionOnPage.y;\n    } else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n      x = this._pickupPositionOnPage.x;\n    }\n\n    if (this._boundaryRect) {\n      const {x: pickupX, y: pickupY} = this._pickupPositionInElement;\n      const boundaryRect = this._boundaryRect;\n      const previewRect = this._previewRect!;\n      const minY = boundaryRect.top + pickupY;\n      const maxY = boundaryRect.bottom - (previewRect.height - pickupY);\n      const minX = boundaryRect.left + pickupX;\n      const maxX = boundaryRect.right - (previewRect.width - pickupX);\n\n      x = clamp(x, minX, maxX);\n      y = clamp(y, minY, maxY);\n    }\n\n    return {x, y};\n  }\n\n\n  /** Updates the current drag delta, based on the user's current pointer position on the page. */\n  private _updatePointerDirectionDelta(pointerPositionOnPage: Point) {\n    const {x, y} = pointerPositionOnPage;\n    const delta = this._pointerDirectionDelta;\n    const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n\n    // Amount of pixels the user has dragged since the last time the direction changed.\n    const changeX = Math.abs(x - positionSinceLastChange.x);\n    const changeY = Math.abs(y - positionSinceLastChange.y);\n\n    // Because we handle pointer events on a per-pixel basis, we don't want the delta\n    // to change for every pixel, otherwise anything that depends on it can look erratic.\n    // To make the delta more consistent, we track how much the user has moved since the last\n    // delta change and we only update it after it has reached a certain threshold.\n    if (changeX > this._config.pointerDirectionChangeThreshold) {\n      delta.x = x > positionSinceLastChange.x ? 1 : -1;\n      positionSinceLastChange.x = x;\n    }\n\n    if (changeY > this._config.pointerDirectionChangeThreshold) {\n      delta.y = y > positionSinceLastChange.y ? 1 : -1;\n      positionSinceLastChange.y = y;\n    }\n\n    return delta;\n  }\n\n  /** Toggles the native drag interactions, based on how many handles are registered. */\n  private _toggleNativeDragInteractions() {\n    if (!this._rootElement || !this._handles) {\n      return;\n    }\n\n    const shouldEnable = this._handles.length > 0 || !this.isDragging();\n\n    if (shouldEnable !== this._nativeInteractionsEnabled) {\n      this._nativeInteractionsEnabled = shouldEnable;\n      toggleNativeDragInteractions(this._rootElement, shouldEnable);\n    }\n  }\n\n  /** Removes the manually-added event listeners from the root element. */\n  private _removeRootElementListeners(element: HTMLElement) {\n    element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n    element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n  }\n\n  /**\n   * Applies a `transform` to the root element, taking into account any existing transforms on it.\n   * @param x New transform value along the X axis.\n   * @param y New transform value along the Y axis.\n   */\n  private _applyRootElementTransform(x: number, y: number) {\n    const transform = getTransform(x, y);\n\n    // Cache the previous transform amount only after the first drag sequence, because\n    // we don't want our own transforms to stack on top of each other.\n    // Should be excluded none because none + translate3d(x, y, x) is invalid css\n    if (this._initialTransform == null) {\n      this._initialTransform = this._rootElement.style.transform\n                               && this._rootElement.style.transform != 'none'\n                               ? this._rootElement.style.transform\n                               : '';\n    }\n\n    // Preserve the previous `transform` value, if there was one. Note that we apply our own\n    // transform before the user's, because things like rotation can affect which direction\n    // the element will be translated towards.\n    this._rootElement.style.transform = combineTransforms(transform, this._initialTransform);\n  }\n\n  /**\n   * Applies a `transform` to the preview, taking into account any existing transforms on it.\n   * @param x New transform value along the X axis.\n   * @param y New transform value along the Y axis.\n   */\n  private _applyPreviewTransform(x: number, y: number) {\n    // Only apply the initial transform if the preview is a clone of the original element, otherwise\n    // it could be completely different and the transform might not make sense anymore.\n    const initialTransform = this._previewTemplate?.template ? undefined : this._initialTransform;\n    const transform = getTransform(x, y);\n    this._preview.style.transform = combineTransforms(transform, initialTransform);\n  }\n\n  /**\n   * Gets the distance that the user has dragged during the current drag sequence.\n   * @param currentPosition Current position of the user's pointer.\n   */\n  private _getDragDistance(currentPosition: Point): Point {\n    const pickupPosition = this._pickupPositionOnPage;\n\n    if (pickupPosition) {\n      return {x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y};\n    }\n\n    return {x: 0, y: 0};\n  }\n\n  /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n  private _cleanupCachedDimensions() {\n    this._boundaryRect = this._previewRect = undefined;\n    this._parentPositions.clear();\n  }\n\n  /**\n   * Checks whether the element is still inside its boundary after the viewport has been resized.\n   * If not, the position is adjusted so that the element fits again.\n   */\n  private _containInsideBoundaryOnResize() {\n    let {x, y} = this._passiveTransform;\n\n    if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {\n      return;\n    }\n\n    const boundaryRect = this._boundaryElement.getBoundingClientRect();\n    const elementRect = this._rootElement.getBoundingClientRect();\n\n    // It's possible that the element got hidden away after dragging (e.g. by switching to a\n    // different tab). Don't do anything in this case so we don't clear the user's position.\n    if ((boundaryRect.width === 0 && boundaryRect.height === 0) ||\n        (elementRect.width === 0 && elementRect.height === 0)) {\n      return;\n    }\n\n    const leftOverflow = boundaryRect.left - elementRect.left;\n    const rightOverflow = elementRect.right - boundaryRect.right;\n    const topOverflow = boundaryRect.top - elementRect.top;\n    const bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n\n    // If the element has become wider than the boundary, we can't\n    // do much to make it fit so we just anchor it to the left.\n    if (boundaryRect.width > elementRect.width) {\n      if (leftOverflow > 0) {\n        x += leftOverflow;\n      }\n\n      if (rightOverflow > 0) {\n        x -= rightOverflow;\n      }\n    } else {\n      x = 0;\n    }\n\n    // If the element has become taller than the boundary, we can't\n    // do much to make it fit so we just anchor it to the top.\n    if (boundaryRect.height > elementRect.height) {\n      if (topOverflow > 0) {\n        y += topOverflow;\n      }\n\n      if (bottomOverflow > 0) {\n        y -= bottomOverflow;\n      }\n    } else {\n      y = 0;\n    }\n\n    if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n      this.setFreeDragPosition({y, x});\n    }\n  }\n\n  /** Gets the drag start delay, based on the event type. */\n  private _getDragStartDelay(event: MouseEvent | TouchEvent): number {\n    const value = this.dragStartDelay;\n\n    if (typeof value === 'number') {\n      return value;\n    } else if (isTouchEvent(event)) {\n      return value.touch;\n    }\n\n    return value ? value.mouse : 0;\n  }\n\n  /** Updates the internal state of the draggable element when scrolling has occurred. */\n  private _updateOnScroll(event: Event) {\n    const scrollDifference = this._parentPositions.handleScroll(event);\n\n    if (scrollDifference) {\n      const target = _getEventTarget<HTMLElement|Document>(event)!;\n\n      // ClientRect dimensions are based on the scroll position of the page and its parent node so\n      // we have to update the cached boundary ClientRect if the user has scrolled. Check for\n      // the `document` specifically since IE doesn't support `contains` on it.\n      if (this._boundaryRect && (target === this._document ||\n          (target !== this._boundaryElement && target.contains(this._boundaryElement)))) {\n        adjustClientRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);\n      }\n\n      this._pickupPositionOnPage.x += scrollDifference.left;\n      this._pickupPositionOnPage.y += scrollDifference.top;\n\n      // If we're in free drag mode, we have to update the active transform, because\n      // it isn't relative to the viewport like the preview inside a drop list.\n      if (!this._dropContainer) {\n        this._activeTransform.x -= scrollDifference.left;\n        this._activeTransform.y -= scrollDifference.top;\n        this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);\n      }\n    }\n  }\n\n  /** Gets the scroll position of the viewport. */\n  private _getViewportScrollPosition() {\n    const cachedPosition = this._parentPositions.positions.get(this._document);\n    return cachedPosition ? cachedPosition.scrollPosition :\n        this._viewportRuler.getViewportScrollPosition();\n  }\n\n  /**\n   * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n   * than saving it in property directly on init, because we want to resolve it as late as possible\n   * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n   * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n   */\n  private _getShadowRoot(): ShadowRoot | null {\n    if (this._cachedShadowRoot === undefined) {\n      this._cachedShadowRoot = _getShadowRoot(this._rootElement);\n    }\n\n    return this._cachedShadowRoot;\n  }\n\n  /** Gets the element into which the drag preview should be inserted. */\n  private _getPreviewInsertionPoint(initialParent: HTMLElement,\n                                    shadowRoot: ShadowRoot | null): HTMLElement {\n    const previewContainer = this._previewContainer || 'global';\n\n    if (previewContainer === 'parent') {\n      return initialParent;\n    }\n\n    if (previewContainer === 'global') {\n      const documentRef = this._document;\n\n      // We can't use the body if the user is in fullscreen mode,\n      // because the preview will render under the fullscreen element.\n      // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n      return shadowRoot ||\n             documentRef.fullscreenElement ||\n             (documentRef as any).webkitFullscreenElement ||\n             (documentRef as any).mozFullScreenElement ||\n             (documentRef as any).msFullscreenElement ||\n             documentRef.body;\n    }\n\n    return coerceElement(previewContainer);\n  }\n}\n\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param x Desired position of the element along the X axis.\n * @param y Desired position of the element along the Y axis.\n */\nfunction getTransform(x: number, y: number): string {\n  // Round the transforms since some browsers will\n  // blur the elements for sub-pixel transforms.\n  return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n\n/** Clamps a value between a minimum and a maximum. */\nfunction clamp(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * Helper to remove a node from the DOM and to do all the necessary null checks.\n * @param node Node to be removed.\n */\nfunction removeNode(node: Node | null) {\n  if (node && node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n}\n\n/** Determines whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n  // This function is called for every pixel that the user has dragged so we need it to be\n  // as fast as possible. Since we only bind mouse events and touch events, we can assume\n  // that if the event's name starts with `t`, it's a touch event.\n  return event.type[0] === 't';\n}\n\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n */\nfunction getRootNode(viewRef: EmbeddedViewRef<any>, _document: Document): HTMLElement {\n  const rootNodes: Node[] = viewRef.rootNodes;\n\n  if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {\n    return rootNodes[0] as HTMLElement;\n  }\n\n  const wrapper = _document.createElement('div');\n  rootNodes.forEach(node => wrapper.appendChild(node));\n  return wrapper;\n}\n\n/**\n * Matches the target element's size to the source's size.\n * @param target Element that needs to be resized.\n * @param sourceRect Dimensions of the source element.\n */\nfunction matchElementSize(target: HTMLElement, sourceRect: ClientRect): void {\n  target.style.width = `${sourceRect.width}px`;\n  target.style.height = `${sourceRect.height}px`;\n  target.style.transform = getTransform(sourceRect.left, sourceRect.top);\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 * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nexport function moveItemInArray<T = any>(array: T[], fromIndex: number, toIndex: number): void {\n  const from = clamp(fromIndex, array.length - 1);\n  const to = clamp(toIndex, array.length - 1);\n\n  if (from === to) {\n    return;\n  }\n\n  const target = array[from];\n  const delta = to < from ? -1 : 1;\n\n  for (let i = from; i !== to; i += delta) {\n    array[i] = array[i + delta];\n  }\n\n  array[to] = target;\n}\n\n\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nexport function transferArrayItem<T = any>(currentArray: T[],\n                                           targetArray: T[],\n                                           currentIndex: number,\n                                           targetIndex: number): void {\n  const from = clamp(currentIndex, currentArray.length - 1);\n  const to = clamp(targetIndex, targetArray.length);\n\n  if (currentArray.length) {\n    targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n  }\n}\n\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nexport function copyArrayItem<T = any>(currentArray: T[],\n                                       targetArray: T[],\n                                       currentIndex: number,\n                                       targetIndex: number): void {\n  const to = clamp(targetIndex, targetArray.length);\n\n  if (currentArray.length) {\n    targetArray.splice(to, 0, currentArray[currentIndex]);\n  }\n}\n\n/** Clamps a number between zero and a maximum. */\nfunction clamp(value: number, max: number): number {\n  return Math.max(0, Math.min(max, value));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {_getShadowRoot} from '@angular/cdk/platform';\nimport {Subject, Subscription, interval, animationFrameScheduler} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {moveItemInArray} from './drag-utils';\nimport {DragDropRegistry} from './drag-drop-registry';\nimport {DragRefInternal as DragRef, Point} from './drag-ref';\nimport {\n  isPointerNearClientRect,\n  adjustClientRect,\n  getMutableClientRect,\n  isInsideClientRect,\n} from './client-rect';\nimport {ParentPositionTracker} from './parent-position-tracker';\nimport {combineTransforms, DragCSSStyleDeclaration} from './drag-styling';\n\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n\n/**\n * Entry in the position cache for draggable items.\n * @docs-private\n */\ninterface CachedItemPosition {\n  /** Instance of the drag item. */\n  drag: DragRef;\n  /** Dimensions of the item. */\n  clientRect: ClientRect;\n  /** Amount by which the item has been moved since dragging started. */\n  offset: number;\n  /** Inline transform that the drag item had when dragging started. */\n  initialTransform: string;\n}\n\n/** Vertical direction in which we can auto-scroll. */\nconst enum AutoScrollVerticalDirection {NONE, UP, DOWN}\n\n/** Horizontal direction in which we can auto-scroll. */\nconst enum AutoScrollHorizontalDirection {NONE, LEFT, RIGHT}\n\n/**\n * Internal compile-time-only representation of a `DropListRef`.\n * Used to avoid circular import issues between the `DropListRef` and the `DragRef`.\n * @docs-private\n */\nexport interface DropListRefInternal extends DropListRef {}\n\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n */\nexport class DropListRef<T = any> {\n  /** Element that the drop list is attached to. */\n  element: HTMLElement | ElementRef<HTMLElement>;\n\n  /** Whether starting a dragging sequence from this container is disabled. */\n  disabled: boolean = false;\n\n  /** Whether sorting items within the list is disabled. */\n  sortingDisabled: boolean = false;\n\n  /** Locks the position of the draggable elements inside the container along the specified axis. */\n  lockAxis: 'x' | 'y';\n\n  /**\n   * Whether auto-scrolling the view when the user\n   * moves their pointer close to the edges is disabled.\n   */\n  autoScrollDisabled: boolean = false;\n\n  /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n  autoScrollStep: number = 2;\n\n  /**\n   * Function that is used to determine whether an item\n   * is allowed to be moved into a drop container.\n   */\n  enterPredicate: (drag: DragRef, drop: DropListRef) => boolean = () => true;\n\n  /** Functions that is used to determine whether an item can be sorted into a particular index. */\n  sortPredicate: (index: number, drag: DragRef, drop: DropListRef) => boolean = () => true;\n\n  /** Emits right before dragging has started. */\n  readonly beforeStarted = new Subject<void>();\n\n  /**\n   * Emits when the user has moved a new drag item into this container.\n   */\n  readonly entered = new Subject<{item: DragRef, container: DropListRef, currentIndex: number}>();\n\n  /**\n   * Emits when the user removes an item from the container\n   * by dragging it into another container.\n   */\n  readonly exited = new Subject<{item: DragRef, container: DropListRef}>();\n\n  /** Emits when the user drops an item inside the container. */\n  readonly dropped = new Subject<{\n    item: DragRef,\n    currentIndex: number,\n    previousIndex: number,\n    container: DropListRef,\n    previousContainer: DropListRef,\n    isPointerOverContainer: boolean,\n    distance: Point;\n    dropPoint: Point;\n  }>();\n\n  /** Emits as the user is swapping items while actively dragging. */\n  readonly sorted = new Subject<{\n    previousIndex: number,\n    currentIndex: number,\n    container: DropListRef,\n    item: DragRef\n  }>();\n\n  /** Arbitrary data that can be attached to the drop list. */\n  data: T;\n\n  /** Whether an item in the list is being dragged. */\n  private _isDragging = false;\n\n  /** Cache of the dimensions of all the items inside the container. */\n  private _itemPositions: CachedItemPosition[] = [];\n\n  /** Keeps track of the positions of any parent scrollable elements. */\n  private _parentPositions: ParentPositionTracker;\n\n  /** Cached `ClientRect` of the drop list. */\n  private _clientRect: ClientRect | undefined;\n\n  /**\n   * Draggable items that are currently active inside the container. Includes the items\n   * from `_draggables`, as well as any items that have been dragged in, but haven't\n   * been dropped yet.\n   */\n  private _activeDraggables: DragRef[];\n\n  /**\n   * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n   * the pointer was moving in when the swap occured and whether the user's pointer continued to\n   * overlap with the swapped item after the swapping occurred.\n   */\n  private _previousSwap = {drag: null as DragRef | null, delta: 0, overlaps: false};\n\n  /** Draggable items in the container. */\n  private _draggables: readonly DragRef[] = [];\n\n  /** Drop lists that are connected to the current one. */\n  private _siblings: readonly DropListRef[] = [];\n\n  /** Direction in which the list is oriented. */\n  private _orientation: 'horizontal' | 'vertical' = 'vertical';\n\n  /** Connected siblings that currently have a dragged item. */\n  private _activeSiblings = new Set<DropListRef>();\n\n  /** Layout direction of the drop list. */\n  private _direction: Direction = 'ltr';\n\n  /** Subscription to the window being scrolled. */\n  private _viewportScrollSubscription = Subscription.EMPTY;\n\n  /** Vertical direction in which the list is currently scrolling. */\n  private _verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n\n  /** Horizontal direction in which the list is currently scrolling. */\n  private _horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n  /** Node that is being auto-scrolled. */\n  private _scrollNode: HTMLElement | Window;\n\n  /** Used to signal to the current auto-scroll sequence when to stop. */\n  private readonly _stopScrollTimers = new Subject<void>();\n\n  /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\n  private _cachedShadowRoot: DocumentOrShadowRoot | null = null;\n\n  /** Reference to the document. */\n  private _document: Document;\n\n  /** Elements that can be scrolled while the user is dragging. */\n  private _scrollableElements: HTMLElement[];\n\n  /** Initial value for the element's `scroll-snap-type` style. */\n  private _initialScrollSnap: string;\n\n  constructor(\n    element: ElementRef<HTMLElement> | HTMLElement,\n    private _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>,\n    _document: any,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler) {\n    this.element = coerceElement(element);\n    this._document = _document;\n    this.withScrollableParents([this.element]);\n    _dragDropRegistry.registerDropContainer(this);\n    this._parentPositions = new ParentPositionTracker(_document, _viewportRuler);\n  }\n\n  /** Removes the drop list functionality from the DOM element. */\n  dispose() {\n    this._stopScrolling();\n    this._stopScrollTimers.complete();\n    this._viewportScrollSubscription.unsubscribe();\n    this.beforeStarted.complete();\n    this.entered.complete();\n    this.exited.complete();\n    this.dropped.complete();\n    this.sorted.complete();\n    this._activeSiblings.clear();\n    this._scrollNode = null!;\n    this._parentPositions.clear();\n    this._dragDropRegistry.removeDropContainer(this);\n  }\n\n  /** Whether an item from this list is currently being dragged. */\n  isDragging() {\n    return this._isDragging;\n  }\n\n  /** Starts dragging an item. */\n  start(): void {\n    this._draggingStarted();\n    this._notifyReceivingSiblings();\n  }\n\n  /**\n   * Emits an event to indicate that the user moved an item into the container.\n   * @param item Item that was moved into the container.\n   * @param pointerX Position of the item along the X axis.\n   * @param pointerY Position of the item along the Y axis.\n   * @param index Index at which the item entered. If omitted, the container will try to figure it\n   *   out automatically.\n   */\n  enter(item: DragRef, pointerX: number, pointerY: number, index?: number): void {\n    this._draggingStarted();\n\n    // If sorting is disabled, we want the item to return to its starting\n    // position if the user is returning it to its initial container.\n    let newIndex: number;\n\n    if (index == null) {\n      newIndex = this.sortingDisabled ? this._draggables.indexOf(item) : -1;\n\n      if (newIndex === -1) {\n        // We use the coordinates of where the item entered the drop\n        // zone to figure out at which index it should be inserted.\n        newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);\n      }\n    } else {\n      newIndex = index;\n    }\n\n    const activeDraggables = this._activeDraggables;\n    const currentIndex = activeDraggables.indexOf(item);\n    const placeholder = item.getPlaceholderElement();\n    let newPositionReference: DragRef | undefined = activeDraggables[newIndex];\n\n    // If the item at the new position is the same as the item that is being dragged,\n    // it means that we're trying to restore the item to its initial position. In this\n    // case we should use the next item from the list as the reference.\n    if (newPositionReference === item) {\n      newPositionReference = activeDraggables[newIndex + 1];\n    }\n\n    // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n    // into another container and back again), we have to ensure that it isn't duplicated.\n    if (currentIndex > -1) {\n      activeDraggables.splice(currentIndex, 1);\n    }\n\n    // Don't use items that are being dragged as a reference, because\n    // their element has been moved down to the bottom of the body.\n    if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n      const element = newPositionReference.getRootElement();\n      element.parentElement!.insertBefore(placeholder, element);\n      activeDraggables.splice(newIndex, 0, item);\n    } else if (this._shouldEnterAsFirstChild(pointerX, pointerY)) {\n      const reference = activeDraggables[0].getRootElement();\n      reference.parentNode!.insertBefore(placeholder, reference);\n      activeDraggables.unshift(item);\n    } else {\n      coerceElement(this.element).appendChild(placeholder);\n      activeDraggables.push(item);\n    }\n\n    // The transform needs to be cleared so it doesn't throw off the measurements.\n    placeholder.style.transform = '';\n\n    // Note that the positions were already cached when we called `start` above,\n    // but we need to refresh them since the amount of items has changed and also parent rects.\n    this._cacheItemPositions();\n    this._cacheParentPositions();\n\n    // Notify siblings at the end so that the item has been inserted into the `activeDraggables`.\n    this._notifyReceivingSiblings();\n    this.entered.next({item, container: this, currentIndex: this.getItemIndex(item)});\n  }\n\n  /**\n   * Removes an item from the container after it was dragged into another container by the user.\n   * @param item Item that was dragged out.\n   */\n  exit(item: DragRef): void {\n    this._reset();\n    this.exited.next({item, container: this});\n  }\n\n  /**\n   * Drops an item into this container.\n   * @param item Item being dropped into the container.\n   * @param currentIndex Index at which the item should be inserted.\n   * @param previousIndex Index of the item when dragging started.\n   * @param previousContainer Container from which the item got dragged in.\n   * @param isPointerOverContainer Whether the user's pointer was over the\n   *    container when the item was dropped.\n   * @param distance Distance the user has dragged since the start of the dragging sequence.\n   */\n  drop(item: DragRef, currentIndex: number, previousIndex: number, previousContainer: DropListRef,\n    isPointerOverContainer: boolean, distance: Point, dropPoint: Point): void {\n    this._reset();\n    this.dropped.next({\n      item,\n      currentIndex,\n      previousIndex,\n      container: this,\n      previousContainer,\n      isPointerOverContainer,\n      distance,\n      dropPoint\n    });\n  }\n\n  /**\n   * Sets the draggable items that are a part of this list.\n   * @param items Items that are a part of this list.\n   */\n  withItems(items: DragRef[]): this {\n    const previousItems = this._draggables;\n    this._draggables = items;\n    items.forEach(item => item._withDropContainer(this));\n\n    if (this.isDragging()) {\n      const draggedItems = previousItems.filter(item => item.isDragging());\n\n      // If all of the items being dragged were removed\n      // from the list, abort the current drag sequence.\n      if (draggedItems.every(item => items.indexOf(item) === -1)) {\n        this._reset();\n      } else {\n        this._cacheItems();\n      }\n    }\n\n    return this;\n  }\n\n  /** Sets the layout direction of the drop list. */\n  withDirection(direction: Direction): this {\n    this._direction = direction;\n    return this;\n  }\n\n  /**\n   * Sets the containers that are connected to this one. When two or more containers are\n   * connected, the user will be allowed to transfer items between them.\n   * @param connectedTo Other containers that the current containers should be connected to.\n   */\n  connectedTo(connectedTo: DropListRef[]): this {\n    this._siblings = connectedTo.slice();\n    return this;\n  }\n\n  /**\n   * Sets the orientation of the container.\n   * @param orientation New orientation for the container.\n   */\n  withOrientation(orientation: 'vertical' | 'horizontal'): this {\n    this._orientation = orientation;\n    return this;\n  }\n\n  /**\n   * Sets which parent elements are can be scrolled while the user is dragging.\n   * @param elements Elements that can be scrolled.\n   */\n  withScrollableParents(elements: HTMLElement[]): this {\n    const element = coerceElement(this.element);\n\n    // We always allow the current element to be scrollable\n    // so we need to ensure that it's in the array.\n    this._scrollableElements =\n        elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();\n    return this;\n  }\n\n  /** Gets the scrollable parents that are registered with this drop container. */\n  getScrollableParents(): readonly HTMLElement[] {\n    return this._scrollableElements;\n  }\n\n  /**\n   * Figures out the index of an item in the container.\n   * @param item Item whose index should be determined.\n   */\n  getItemIndex(item: DragRef): number {\n    if (!this._isDragging) {\n      return this._draggables.indexOf(item);\n    }\n\n    // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n    // The rest of the logic still stands no matter what orientation we're in, however\n    // we need to invert the array when determining the index.\n    const items = this._orientation === 'horizontal' && this._direction === 'rtl' ?\n        this._itemPositions.slice().reverse() : this._itemPositions;\n\n    return findIndex(items, currentItem => currentItem.drag === item);\n  }\n\n  /**\n   * Whether the list is able to receive the item that\n   * is currently being dragged inside a connected drop list.\n   */\n  isReceiving(): boolean {\n    return this._activeSiblings.size > 0;\n  }\n\n  /**\n   * Sorts an item inside the container based on its position.\n   * @param item Item to be sorted.\n   * @param pointerX Position of the item along the X axis.\n   * @param pointerY Position of the item along the Y axis.\n   * @param pointerDelta Direction in which the pointer is moving along each axis.\n   */\n  _sortItem(item: DragRef, pointerX: number, pointerY: number,\n            pointerDelta: {x: number, y: number}): void {\n    // Don't sort the item if sorting is disabled or it's out of range.\n    if (this.sortingDisabled || !this._clientRect ||\n        !isPointerNearClientRect(this._clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n      return;\n    }\n\n    const siblings = this._itemPositions;\n    const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n\n    if (newIndex === -1 && siblings.length > 0) {\n      return;\n    }\n\n    const isHorizontal = this._orientation === 'horizontal';\n    const currentIndex = findIndex(siblings, currentItem => currentItem.drag === item);\n    const siblingAtNewPosition = siblings[newIndex];\n    const currentPosition = siblings[currentIndex].clientRect;\n    const newPosition = siblingAtNewPosition.clientRect;\n    const delta = currentIndex > newIndex ? 1 : -1;\n\n    // How many pixels the item's placeholder should be offset.\n    const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n\n    // How many pixels all the other items should be offset.\n    const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n\n    // Save the previous order of the items before moving the item to its new index.\n    // We use this to check whether an item has been moved as a result of the sorting.\n    const oldOrder = siblings.slice();\n\n    // Shuffle the array in place.\n    moveItemInArray(siblings, currentIndex, newIndex);\n\n    this.sorted.next({\n      previousIndex: currentIndex,\n      currentIndex: newIndex,\n      container: this,\n      item\n    });\n\n    siblings.forEach((sibling, index) => {\n      // Don't do anything if the position hasn't changed.\n      if (oldOrder[index] === sibling) {\n        return;\n      }\n\n      const isDraggedItem = sibling.drag === item;\n      const offset = isDraggedItem ? itemOffset : siblingOffset;\n      const elementToOffset = isDraggedItem ? item.getPlaceholderElement() :\n                                              sibling.drag.getRootElement();\n\n      // Update the offset to reflect the new position.\n      sibling.offset += offset;\n\n      // Since we're moving the items with a `transform`, we need to adjust their cached\n      // client rects to reflect their new position, as well as swap their positions in the cache.\n      // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n      // elements may be mid-animation which will give us a wrong result.\n      if (isHorizontal) {\n        // Round the transforms since some browsers will\n        // blur the elements, for sub-pixel transforms.\n        elementToOffset.style.transform = combineTransforms(\n          `translate3d(${Math.round(sibling.offset)}px, 0, 0)`, sibling.initialTransform);\n        adjustClientRect(sibling.clientRect, 0, offset);\n      } else {\n        elementToOffset.style.transform = combineTransforms(\n          `translate3d(0, ${Math.round(sibling.offset)}px, 0)`, sibling.initialTransform);\n        adjustClientRect(sibling.clientRect, offset, 0);\n      }\n    });\n\n    // Note that it's important that we do this after the client rects have been adjusted.\n    this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);\n    this._previousSwap.drag = siblingAtNewPosition.drag;\n    this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n  }\n\n  /**\n   * Checks whether the user's pointer is close to the edges of either the\n   * viewport or the drop list and starts the auto-scroll sequence.\n   * @param pointerX User's pointer position along the x axis.\n   * @param pointerY User's pointer position along the y axis.\n   */\n  _startScrollingIfNecessary(pointerX: number, pointerY: number) {\n    if (this.autoScrollDisabled) {\n      return;\n    }\n\n    let scrollNode: HTMLElement | Window | undefined;\n    let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n    let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n    // Check whether we should start scrolling any of the parent containers.\n    this._parentPositions.positions.forEach((position, element) => {\n      // We have special handling for the `document` below. Also this would be\n      // nicer with a  for...of loop, but it requires changing a compiler flag.\n      if (element === this._document || !position.clientRect || scrollNode) {\n        return;\n      }\n\n      if (isPointerNearClientRect(position.clientRect, DROP_PROXIMITY_THRESHOLD,\n          pointerX, pointerY)) {\n        [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(\n            element as HTMLElement, position.clientRect, pointerX, pointerY);\n\n        if (verticalScrollDirection || horizontalScrollDirection) {\n          scrollNode = element as HTMLElement;\n        }\n      }\n    });\n\n    // Otherwise check if we can start scrolling the viewport.\n    if (!verticalScrollDirection && !horizontalScrollDirection) {\n      const {width, height} = this._viewportRuler.getViewportSize();\n      const clientRect = {width, height, top: 0, right: width, bottom: height, left: 0};\n      verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);\n      horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n      scrollNode = window;\n    }\n\n    if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection ||\n        horizontalScrollDirection !== this._horizontalScrollDirection ||\n        scrollNode !== this._scrollNode)) {\n      this._verticalScrollDirection = verticalScrollDirection;\n      this._horizontalScrollDirection = horizontalScrollDirection;\n      this._scrollNode = scrollNode;\n\n      if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n        this._ngZone.runOutsideAngular(this._startScrollInterval);\n      } else {\n        this._stopScrolling();\n      }\n    }\n  }\n\n  /** Stops any currently-running auto-scroll sequences. */\n  _stopScrolling() {\n    this._stopScrollTimers.next();\n  }\n\n  /** Starts the dragging sequence within the list. */\n  private _draggingStarted() {\n    const styles = coerceElement(this.element).style as DragCSSStyleDeclaration;\n    this.beforeStarted.next();\n    this._isDragging = true;\n\n    // We need to disable scroll snapping while the user is dragging, because it breaks automatic\n    // scrolling. The browser seems to round the value based on the snapping points which means\n    // that we can't increment/decrement the scroll position.\n    this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';\n    styles.scrollSnapType = styles.msScrollSnapType = 'none';\n    this._cacheItems();\n    this._viewportScrollSubscription.unsubscribe();\n    this._listenToScrollEvents();\n  }\n\n  /** Caches the positions of the configured scrollable parents. */\n  private _cacheParentPositions() {\n    const element = coerceElement(this.element);\n    this._parentPositions.cache(this._scrollableElements);\n\n    // The list element is always in the `scrollableElements`\n    // so we can take advantage of the cached `ClientRect`.\n    this._clientRect = this._parentPositions.positions.get(element)!.clientRect!;\n  }\n\n  /** Refreshes the position cache of the items and sibling containers. */\n  private _cacheItemPositions() {\n    const isHorizontal = this._orientation === 'horizontal';\n\n    this._itemPositions = this._activeDraggables.map(drag => {\n      const elementToMeasure = drag.getVisibleElement();\n      return {\n        drag,\n        offset: 0,\n        initialTransform: elementToMeasure.style.transform || '',\n        clientRect: getMutableClientRect(elementToMeasure),\n      };\n    }).sort((a, b) => {\n      return isHorizontal ? a.clientRect.left - b.clientRect.left :\n                            a.clientRect.top - b.clientRect.top;\n    });\n  }\n\n  /** Resets the container to its initial state. */\n  private _reset() {\n    this._isDragging = false;\n\n    const styles = coerceElement(this.element).style as DragCSSStyleDeclaration;\n    styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;\n\n    // TODO(crisbeto): may have to wait for the animations to finish.\n    this._activeDraggables.forEach(item => {\n      const rootElement = item.getRootElement();\n\n      if (rootElement) {\n        const initialTransform = this._itemPositions\n          .find(current => current.drag === item)?.initialTransform;\n        rootElement.style.transform = initialTransform || '';\n      }\n    });\n    this._siblings.forEach(sibling => sibling._stopReceiving(this));\n    this._activeDraggables = [];\n    this._itemPositions = [];\n    this._previousSwap.drag = null;\n    this._previousSwap.delta = 0;\n    this._previousSwap.overlaps = false;\n    this._stopScrolling();\n    this._viewportScrollSubscription.unsubscribe();\n    this._parentPositions.clear();\n  }\n\n  /**\n   * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n   * @param currentIndex Index of the item currently being dragged.\n   * @param siblings All of the items in the list.\n   * @param delta Direction in which the user is moving.\n   */\n  private _getSiblingOffsetPx(currentIndex: number,\n                              siblings: CachedItemPosition[],\n                              delta: 1 | -1) {\n\n    const isHorizontal = this._orientation === 'horizontal';\n    const currentPosition = siblings[currentIndex].clientRect;\n    const immediateSibling = siblings[currentIndex + delta * -1];\n    let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n\n    if (immediateSibling) {\n      const start = isHorizontal ? 'left' : 'top';\n      const end = isHorizontal ? 'right' : 'bottom';\n\n      // Get the spacing between the start of the current item and the end of the one immediately\n      // after it in the direction in which the user is dragging, or vice versa. We add it to the\n      // offset in order to push the element to where it will be when it's inline and is influenced\n      // by the `margin` of its siblings.\n      if (delta === -1) {\n        siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n      } else {\n        siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n      }\n    }\n\n    return siblingOffset;\n  }\n\n  /**\n   * Gets the offset in pixels by which the item that is being dragged should be moved.\n   * @param currentPosition Current position of the item.\n   * @param newPosition Position of the item where the current item should be moved.\n   * @param delta Direction in which the user is moving.\n   */\n  private _getItemOffsetPx(currentPosition: ClientRect, newPosition: ClientRect, delta: 1 | -1) {\n    const isHorizontal = this._orientation === 'horizontal';\n    let itemOffset = isHorizontal ? newPosition.left - currentPosition.left :\n                                    newPosition.top - currentPosition.top;\n\n    // Account for differences in the item width/height.\n    if (delta === -1) {\n      itemOffset += isHorizontal ? newPosition.width - currentPosition.width :\n                                   newPosition.height - currentPosition.height;\n    }\n\n    return itemOffset;\n  }\n\n  /**\n   * Checks if pointer is entering in the first position\n   * @param pointerX Position of the user's pointer along the X axis.\n   * @param pointerY Position of the user's pointer along the Y axis.\n   */\n  private _shouldEnterAsFirstChild(pointerX: number, pointerY: number) {\n    if (!this._activeDraggables.length) {\n      return false;\n    }\n\n    const itemPositions = this._itemPositions;\n    const isHorizontal = this._orientation === 'horizontal';\n\n    // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index\n    // check if container is using some sort of \"reverse\" ordering (eg: flex-direction: row-reverse)\n    const reversed = itemPositions[0].drag !== this._activeDraggables[0];\n    if (reversed) {\n      const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;\n      return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;\n    } else {\n      const firstItemRect = itemPositions[0].clientRect;\n      return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;\n    }\n  }\n\n  /**\n   * Gets the index of an item in the drop container, based on the position of the user's pointer.\n   * @param item Item that is being sorted.\n   * @param pointerX Position of the user's pointer along the X axis.\n   * @param pointerY Position of the user's pointer along the Y axis.\n   * @param delta Direction in which the user is moving their pointer.\n   */\n  private _getItemIndexFromPointerPosition(item: DragRef, pointerX: number, pointerY: number,\n                                           delta?: {x: number, y: number}): number {\n    const isHorizontal = this._orientation === 'horizontal';\n    const index = findIndex(this._itemPositions, ({drag, clientRect}, _, array) => {\n      if (drag === item) {\n        // If there's only one item left in the container, it must be\n        // the dragged item itself so we use it as a reference.\n        return array.length < 2;\n      }\n\n      if (delta) {\n        const direction = isHorizontal ? delta.x : delta.y;\n\n        // If the user is still hovering over the same item as last time, their cursor hasn't left\n        // the item after we made the swap, and they didn't change the direction in which they're\n        // dragging, we don't consider it a direction swap.\n        if (drag === this._previousSwap.drag && this._previousSwap.overlaps &&\n            direction === this._previousSwap.delta) {\n          return false;\n        }\n      }\n\n      return isHorizontal ?\n          // Round these down since most browsers report client rects with\n          // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n          pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right) :\n          pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);\n    });\n\n    return (index === -1 || !this.sortPredicate(index, item, this)) ? -1 : index;\n  }\n\n  /** Caches the current items in the list and their positions. */\n  private _cacheItems(): void {\n    this._activeDraggables = this._draggables.slice();\n    this._cacheItemPositions();\n    this._cacheParentPositions();\n  }\n\n  /** Starts the interval that'll auto-scroll the element. */\n  private _startScrollInterval = () => {\n    this._stopScrolling();\n\n    interval(0, animationFrameScheduler)\n      .pipe(takeUntil(this._stopScrollTimers))\n      .subscribe(() => {\n        const node = this._scrollNode;\n        const scrollStep = this.autoScrollStep;\n\n        if (this._verticalScrollDirection === AutoScrollVerticalDirection.UP) {\n          incrementVerticalScroll(node, -scrollStep);\n        } else if (this._verticalScrollDirection === AutoScrollVerticalDirection.DOWN) {\n          incrementVerticalScroll(node, scrollStep);\n        }\n\n        if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n          incrementHorizontalScroll(node, -scrollStep);\n        } else if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n          incrementHorizontalScroll(node, scrollStep);\n        }\n      });\n  }\n\n  /**\n   * Checks whether the user's pointer is positioned over the container.\n   * @param x Pointer position along the X axis.\n   * @param y Pointer position along the Y axis.\n   */\n  _isOverContainer(x: number, y: number): boolean {\n    return this._clientRect != null && isInsideClientRect(this._clientRect, x, y);\n  }\n\n  /**\n   * Figures out whether an item should be moved into a sibling\n   * drop container, based on its current position.\n   * @param item Drag item that is being moved.\n   * @param x Position of the item along the X axis.\n   * @param y Position of the item along the Y axis.\n   */\n  _getSiblingContainerFromPosition(item: DragRef, x: number, y: number): DropListRef | undefined {\n    return this._siblings.find(sibling => sibling._canReceive(item, x, y));\n  }\n\n  /**\n   * Checks whether the drop list can receive the passed-in item.\n   * @param item Item that is being dragged into the list.\n   * @param x Position of the item along the X axis.\n   * @param y Position of the item along the Y axis.\n   */\n  _canReceive(item: DragRef, x: number, y: number): boolean {\n    if (!this._clientRect || !isInsideClientRect(this._clientRect, x, y) ||\n        !this.enterPredicate(item, this)) {\n      return false;\n    }\n\n    const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y) as HTMLElement | null;\n\n    // If there's no element at the pointer position, then\n    // the client rect is probably scrolled out of the view.\n    if (!elementFromPoint) {\n      return false;\n    }\n\n    const nativeElement = coerceElement(this.element);\n\n    // The `ClientRect`, that we're using to find the container over which the user is\n    // hovering, doesn't give us any information on whether the element has been scrolled\n    // out of the view or whether it's overlapping with other containers. This means that\n    // we could end up transferring the item into a container that's invisible or is positioned\n    // below another one. We use the result from `elementFromPoint` to get the top-most element\n    // at the pointer position and to find whether it's one of the intersecting drop containers.\n    return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);\n  }\n\n  /**\n   * Called by one of the connected drop lists when a dragging sequence has started.\n   * @param sibling Sibling in which dragging has started.\n   */\n  _startReceiving(sibling: DropListRef, items: DragRef[]) {\n    const activeSiblings = this._activeSiblings;\n\n    if (!activeSiblings.has(sibling) && items.every(item => {\n      // Note that we have to add an exception to the `enterPredicate` for items that started off\n      // in this drop list. The drag ref has logic that allows an item to return to its initial\n      // container, if it has left the initial container and none of the connected containers\n      // allow it to enter. See `DragRef._updateActiveDropContainer` for more context.\n      return this.enterPredicate(item, this) || this._draggables.indexOf(item) > -1;\n    })) {\n      activeSiblings.add(sibling);\n      this._cacheParentPositions();\n      this._listenToScrollEvents();\n    }\n  }\n\n  /**\n   * Called by a connected drop list when dragging has stopped.\n   * @param sibling Sibling whose dragging has stopped.\n   */\n  _stopReceiving(sibling: DropListRef) {\n    this._activeSiblings.delete(sibling);\n    this._viewportScrollSubscription.unsubscribe();\n  }\n\n  /**\n   * Starts listening to scroll events on the viewport.\n   * Used for updating the internal state of the list.\n   */\n  private _listenToScrollEvents() {\n    this._viewportScrollSubscription = this._dragDropRegistry\n      .scrolled(this._getShadowRoot())\n      .subscribe(event => {\n        if (this.isDragging()) {\n          const scrollDifference = this._parentPositions.handleScroll(event);\n\n          if (scrollDifference) {\n            // Since we know the amount that the user has scrolled we can shift all of the\n            // client rectangles ourselves. This is cheaper than re-measuring everything and\n            // we can avoid inconsistent behavior where we might be measuring the element before\n            // its position has changed.\n            this._itemPositions.forEach(({clientRect}) => {\n              adjustClientRect(clientRect, scrollDifference.top, scrollDifference.left);\n            });\n\n            // We need two loops for this, because we want all of the cached\n            // positions to be up-to-date before we re-sort the item.\n            this._itemPositions.forEach(({drag}) => {\n              if (this._dragDropRegistry.isDragging(drag)) {\n                // We need to re-sort the item manually, because the pointer move\n                // events won't be dispatched while the user is scrolling.\n                drag._sortFromLastPointerPosition();\n              }\n            });\n          }\n        } else if (this.isReceiving()) {\n          this._cacheParentPositions();\n        }\n      });\n  }\n\n  /**\n   * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n   * than saving it in property directly on init, because we want to resolve it as late as possible\n   * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n   * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n   */\n  private _getShadowRoot(): DocumentOrShadowRoot {\n    if (!this._cachedShadowRoot) {\n      const shadowRoot = _getShadowRoot(coerceElement(this.element));\n      this._cachedShadowRoot = shadowRoot || this._document;\n    }\n\n    return this._cachedShadowRoot;\n  }\n\n  /** Notifies any siblings that may potentially receive the item. */\n  private _notifyReceivingSiblings() {\n    const draggedItems = this._activeDraggables.filter(item => item.isDragging());\n    this._siblings.forEach(sibling => sibling._startReceiving(this, draggedItems));\n  }\n}\n\n\n/**\n * Finds the index of an item that matches a predicate function. Used as an equivalent\n * of `Array.prototype.findIndex` which isn't part of the standard Google typings.\n * @param array Array in which to look for matches.\n * @param predicate Function used to determine whether an item is a match.\n */\nfunction findIndex<T>(array: T[],\n                      predicate: (value: T, index: number, obj: T[]) => boolean): number {\n\n  for (let i = 0; i < array.length; i++) {\n    if (predicate(array[i], i, array)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Increments the vertical scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementVerticalScroll(node: HTMLElement | Window, amount: number) {\n  if (node === window) {\n    (node as Window).scrollBy(0, amount);\n  } else {\n    // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n    (node as HTMLElement).scrollTop += amount;\n  }\n}\n\n/**\n * Increments the horizontal scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementHorizontalScroll(node: HTMLElement | Window, amount: number) {\n  if (node === window) {\n    (node as Window).scrollBy(amount, 0);\n  } else {\n    // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n    (node as HTMLElement).scrollLeft += amount;\n  }\n}\n\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect: ClientRect, pointerY: number) {\n  const {top, bottom, height} = clientRect;\n  const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n\n  if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n    return AutoScrollVerticalDirection.UP;\n  } else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n    return AutoScrollVerticalDirection.DOWN;\n  }\n\n  return AutoScrollVerticalDirection.NONE;\n}\n\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect: ClientRect, pointerX: number) {\n  const {left, right, width} = clientRect;\n  const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n  if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n    return AutoScrollHorizontalDirection.LEFT;\n  } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n    return AutoScrollHorizontalDirection.RIGHT;\n  }\n\n  return AutoScrollHorizontalDirection.NONE;\n}\n\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param element Element for which we should calculate the scroll direction.\n * @param clientRect Bounding client rectangle of the element.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getElementScrollDirections(element: HTMLElement, clientRect: ClientRect, pointerX: number,\n  pointerY: number): [AutoScrollVerticalDirection, AutoScrollHorizontalDirection] {\n  const computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n  const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n  let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n  let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n\n  // Note that we here we do some extra checks for whether the element is actually scrollable in\n  // a certain direction and we only assign the scroll direction if it is. We do this so that we\n  // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n  // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n  if (computedVertical) {\n    const scrollTop = element.scrollTop;\n\n    if (computedVertical === AutoScrollVerticalDirection.UP) {\n      if (scrollTop > 0) {\n        verticalScrollDirection = AutoScrollVerticalDirection.UP;\n      }\n    } else if (element.scrollHeight - scrollTop > element.clientHeight) {\n      verticalScrollDirection = AutoScrollVerticalDirection.DOWN;\n    }\n  }\n\n  if (computedHorizontal) {\n    const scrollLeft = element.scrollLeft;\n\n    if (computedHorizontal === AutoScrollHorizontalDirection.LEFT) {\n      if (scrollLeft > 0) {\n        horizontalScrollDirection = AutoScrollHorizontalDirection.LEFT;\n      }\n    } else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n      horizontalScrollDirection = AutoScrollHorizontalDirection.RIGHT;\n    }\n  }\n\n  return [verticalScrollDirection, horizontalScrollDirection];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, NgZone, OnDestroy, Inject} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {merge, Observable, Observer, Subject} from 'rxjs';\n\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = normalizePassiveListenerOptions({\n  passive: false,\n  capture: true\n});\n\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\n// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order\n// to avoid circular imports. If we were to reference them here, importing the registry into the\n// classes that are registering themselves will introduce a circular import.\n@Injectable({providedIn: 'root'})\nexport class DragDropRegistry<I extends {isDragging(): boolean}, C> implements OnDestroy {\n  private _document: Document;\n\n  /** Registered drop container instances. */\n  private _dropInstances = new Set<C>();\n\n  /** Registered drag item instances. */\n  private _dragInstances = new Set<I>();\n\n  /** Drag item instances that are currently being dragged. */\n  private _activeDragInstances: I[] = [];\n\n  /** Keeps track of the event listeners that we've bound to the `document`. */\n  private _globalListeners = new Map<string, {\n    handler: (event: Event) => void,\n    options?: AddEventListenerOptions | boolean\n  }>();\n\n  /**\n   * Predicate function to check if an item is being dragged.  Moved out into a property,\n   * because it'll be called a lot and we don't want to create a new function every time.\n   */\n  private _draggingPredicate = (item: I) => item.isDragging();\n\n  /**\n   * Emits the `touchmove` or `mousemove` events that are dispatched\n   * while the user is dragging a drag item instance.\n   */\n  readonly pointerMove: Subject<TouchEvent | MouseEvent> = new Subject<TouchEvent | MouseEvent>();\n\n  /**\n   * Emits the `touchend` or `mouseup` events that are dispatched\n   * while the user is dragging a drag item instance.\n   */\n  readonly pointerUp: Subject<TouchEvent | MouseEvent> = new Subject<TouchEvent | MouseEvent>();\n\n  /**\n   * Emits when the viewport has been scrolled while the user is dragging an item.\n   * @deprecated To be turned into a private member. Use the `scrolled` method instead.\n   * @breaking-change 13.0.0\n   */\n  readonly scroll: Subject<Event> = new Subject<Event>();\n\n  constructor(\n    private _ngZone: NgZone,\n    @Inject(DOCUMENT) _document: any) {\n    this._document = _document;\n  }\n\n  /** Adds a drop container to the registry. */\n  registerDropContainer(drop: C) {\n    if (!this._dropInstances.has(drop)) {\n      this._dropInstances.add(drop);\n    }\n  }\n\n  /** Adds a drag item instance to the registry. */\n  registerDragItem(drag: I) {\n    this._dragInstances.add(drag);\n\n    // The `touchmove` event gets bound once, ahead of time, because WebKit\n    // won't preventDefault on a dynamically-added `touchmove` listener.\n    // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n    if (this._dragInstances.size === 1) {\n      this._ngZone.runOutsideAngular(() => {\n        // The event handler has to be explicitly active,\n        // because newer browsers make it passive by default.\n        this._document.addEventListener('touchmove', this._persistentTouchmoveListener,\n            activeCapturingEventOptions);\n      });\n    }\n  }\n\n  /** Removes a drop container from the registry. */\n  removeDropContainer(drop: C) {\n    this._dropInstances.delete(drop);\n  }\n\n  /** Removes a drag item instance from the registry. */\n  removeDragItem(drag: I) {\n    this._dragInstances.delete(drag);\n    this.stopDragging(drag);\n\n    if (this._dragInstances.size === 0) {\n      this._document.removeEventListener('touchmove', this._persistentTouchmoveListener,\n          activeCapturingEventOptions);\n    }\n  }\n\n  /**\n   * Starts the dragging sequence for a drag instance.\n   * @param drag Drag instance which is being dragged.\n   * @param event Event that initiated the dragging.\n   */\n  startDragging(drag: I, event: TouchEvent | MouseEvent) {\n    // Do not process the same drag twice to avoid memory leaks and redundant listeners\n    if (this._activeDragInstances.indexOf(drag) > -1) {\n      return;\n    }\n\n    this._activeDragInstances.push(drag);\n\n    if (this._activeDragInstances.length === 1) {\n      const isTouchEvent = event.type.startsWith('touch');\n\n      // We explicitly bind __active__ listeners here, because newer browsers will default to\n      // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n      // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n      this._globalListeners\n        .set(isTouchEvent ? 'touchend' : 'mouseup', {\n          handler: (e: Event) => this.pointerUp.next(e as TouchEvent | MouseEvent),\n          options: true\n        })\n        .set('scroll', {\n          handler: (e: Event) => this.scroll.next(e),\n          // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n          // the document. See https://github.com/angular/components/issues/17144.\n          options: true\n        })\n        // Preventing the default action on `mousemove` isn't enough to disable text selection\n        // on Safari so we need to prevent the selection event as well. Alternatively this can\n        // be done by setting `user-select: none` on the `body`, however it has causes a style\n        // recalculation which can be expensive on pages with a lot of elements.\n        .set('selectstart', {\n          handler: this._preventDefaultWhileDragging,\n          options: activeCapturingEventOptions\n        });\n\n      // We don't have to bind a move event for touch drag sequences, because\n      // we already have a persistent global one bound from `registerDragItem`.\n      if (!isTouchEvent) {\n        this._globalListeners.set('mousemove', {\n          handler: (e: Event) => this.pointerMove.next(e as MouseEvent),\n          options: activeCapturingEventOptions\n        });\n      }\n\n      this._ngZone.runOutsideAngular(() => {\n        this._globalListeners.forEach((config, name) => {\n          this._document.addEventListener(name, config.handler, config.options);\n        });\n      });\n    }\n  }\n\n  /** Stops dragging a drag item instance. */\n  stopDragging(drag: I) {\n    const index = this._activeDragInstances.indexOf(drag);\n\n    if (index > -1) {\n      this._activeDragInstances.splice(index, 1);\n\n      if (this._activeDragInstances.length === 0) {\n        this._clearGlobalListeners();\n      }\n    }\n  }\n\n  /** Gets whether a drag item instance is currently being dragged. */\n  isDragging(drag: I) {\n    return this._activeDragInstances.indexOf(drag) > -1;\n  }\n\n  /**\n   * Gets a stream that will emit when any element on the page is scrolled while an item is being\n   * dragged.\n   * @param shadowRoot Optional shadow root that the current dragging sequence started from.\n   *   Top-level listeners won't pick up events coming from the shadow DOM so this parameter can\n   *   be used to include an additional top-level listener at the shadow root level.\n   */\n  scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable<Event> {\n    const streams: Observable<Event>[] = [this.scroll];\n\n    if (shadowRoot && shadowRoot !== this._document) {\n      // Note that this is basically the same as `fromEvent` from rjxs, but we do it ourselves,\n      // because we want to guarantee that the event is bound outside of the `NgZone`. With\n      // `fromEvent` it'll only happen if the subscription is outside the `NgZone`.\n      streams.push(new Observable((observer: Observer<Event>) => {\n        return this._ngZone.runOutsideAngular(() => {\n          const eventOptions = true;\n          const callback = (event: Event) => {\n            if (this._activeDragInstances.length) {\n              observer.next(event);\n            }\n          };\n\n          (shadowRoot as ShadowRoot).addEventListener('scroll', callback, eventOptions);\n\n          return () => {\n            (shadowRoot as ShadowRoot).removeEventListener('scroll', callback, eventOptions);\n          };\n        });\n      }));\n    }\n\n    return merge(...streams);\n  }\n\n  ngOnDestroy() {\n    this._dragInstances.forEach(instance => this.removeDragItem(instance));\n    this._dropInstances.forEach(instance => this.removeDropContainer(instance));\n    this._clearGlobalListeners();\n    this.pointerMove.complete();\n    this.pointerUp.complete();\n  }\n\n  /**\n   * Event listener that will prevent the default browser action while the user is dragging.\n   * @param event Event whose default action should be prevented.\n   */\n  private _preventDefaultWhileDragging = (event: Event) => {\n    if (this._activeDragInstances.length > 0) {\n      event.preventDefault();\n    }\n  }\n\n  /** Event listener for `touchmove` that is bound even if no dragging is happening. */\n  private _persistentTouchmoveListener = (event: TouchEvent) => {\n    if (this._activeDragInstances.length > 0) {\n      // Note that we only want to prevent the default action after dragging has actually started.\n      // Usually this is the same time at which the item is added to the `_activeDragInstances`,\n      // but it could be pushed back if the user has set up a drag delay or threshold.\n      if (this._activeDragInstances.some(this._draggingPredicate)) {\n        event.preventDefault();\n      }\n\n      this.pointerMove.next(event);\n    }\n  }\n\n  /** Clears out the global event listeners from the `document`. */\n  private _clearGlobalListeners() {\n    this._globalListeners.forEach((config, name) => {\n      this._document.removeEventListener(name, config.handler, config.options);\n    });\n\n    this._globalListeners.clear();\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, Inject, NgZone, ElementRef} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DragRef, DragRefConfig} from './drag-ref';\nimport {DropListRef} from './drop-list-ref';\nimport {DragDropRegistry} from './drag-drop-registry';\n\n/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n  dragStartThreshold: 5,\n  pointerDirectionChangeThreshold: 5\n};\n\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\n@Injectable({providedIn: 'root'})\nexport class DragDrop {\n  constructor(\n    @Inject(DOCUMENT) private _document: any,\n    private _ngZone: NgZone,\n    private _viewportRuler: ViewportRuler,\n    private _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>) {}\n\n  /**\n   * Turns an element into a draggable item.\n   * @param element Element to which to attach the dragging functionality.\n   * @param config Object used to configure the dragging behavior.\n   */\n  createDrag<T = any>(element: ElementRef<HTMLElement> | HTMLElement,\n                config: DragRefConfig = DEFAULT_CONFIG): DragRef<T> {\n\n    return new DragRef<T>(element, config, this._document, this._ngZone, this._viewportRuler,\n        this._dragDropRegistry);\n  }\n\n  /**\n   * Turns an element into a drop list.\n   * @param element Element to which to attach the drop list functionality.\n   */\n  createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DropListRef<T> {\n    return new DropListRef<T>(element, this._dragDropRegistry, this._document, this._ngZone,\n        this._viewportRuler);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * @docs-private\n */\nexport const CDK_DRAG_PARENT = new InjectionToken<{}>('CDK_DRAG_PARENT');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {CdkDrag} from './directives/drag';\nimport {CdkDropList} from './directives/drop-list';\n\n/** Event emitted when the user starts dragging a draggable. */\nexport interface CdkDragStart<T = any> {\n  /** Draggable that emitted the event. */\n  source: CdkDrag<T>;\n}\n\n/** Event emitted when the user releases an item, before any animations have started. */\nexport interface CdkDragRelease<T = any> {\n  /** Draggable that emitted the event. */\n  source: CdkDrag<T>;\n}\n\n/** Event emitted when the user stops dragging a draggable. */\nexport interface CdkDragEnd<T = any> {\n  /** Draggable that emitted the event. */\n  source: CdkDrag<T>;\n  /** Distance in pixels that the user has dragged since the drag sequence started. */\n  distance: {x: number, y: number};\n  /** Position where the pointer was when the item was dropped */\n  dropPoint: {x: number, y: number};\n}\n\n/** Event emitted when the user moves an item into a new drop container. */\nexport interface CdkDragEnter<T = any, I = T> {\n  /** Container into which the user has moved the item. */\n  container: CdkDropList<T>;\n  /** Item that was moved into the container. */\n  item: CdkDrag<I>;\n  /** Index at which the item has entered the container. */\n  currentIndex: number;\n}\n\n/**\n * Event emitted when the user removes an item from a\n * drop container by moving it into another one.\n */\nexport interface CdkDragExit<T = any, I = T> {\n  /** Container from which the user has a removed an item. */\n  container: CdkDropList<T>;\n  /** Item that was removed from the container. */\n  item: CdkDrag<I>;\n}\n\n\n/** Event emitted when the user drops a draggable item inside a drop container. */\nexport interface CdkDragDrop<T, O = T, I = any> {\n  /** Index of the item when it was picked up. */\n  previousIndex: number;\n  /** Current index of the item. */\n  currentIndex: number;\n  /** Item that is being dropped. */\n  item: CdkDrag<I>;\n  /** Container in which the item was dropped. */\n  container: CdkDropList<T>;\n  /** Container from which the item was picked up. Can be the same as the `container`. */\n  previousContainer: CdkDropList<O>;\n  /** Whether the user's pointer was over the container when the item was dropped. */\n  isPointerOverContainer: boolean;\n  /** Distance in pixels that the user has dragged since the drag sequence started. */\n  distance: {x: number, y: number};\n  /** Position where the pointer was when the item was dropped */\n  dropPoint: {x: number, y: number};\n}\n\n/** Event emitted as the user is dragging a draggable item. */\nexport interface CdkDragMove<T = any> {\n  /** Item that is being dragged. */\n  source: CdkDrag<T>;\n  /** Position of the user's pointer on the page. */\n  pointerPosition: {x: number, y: number};\n  /** Native event that is causing the dragging. */\n  event: MouseEvent | TouchEvent;\n  /** Distance in pixels that the user has dragged since the drag sequence started. */\n  distance: {x: number, y: number};\n  /**\n   * Indicates the direction in which the user is dragging the element along each axis.\n   * `1` means that the position is increasing (e.g. the user is moving to the right or downwards),\n   * whereas `-1` means that it's decreasing (they're moving to the left or upwards). `0` means\n   * that the position hasn't changed.\n   */\n  delta: {x: -1 | 0 | 1, y: -1 | 0 | 1};\n}\n\n/** Event emitted when the user swaps the position of two drag items. */\nexport interface CdkDragSortEvent<T = any, I = T> {\n  /** Index from which the item was sorted previously. */\n  previousIndex: number;\n  /** Index that the item is currently in. */\n  currentIndex: number;\n  /** Container that the item belongs to. */\n  container: CdkDropList<T>;\n  /** Item that is being sorted. */\n  item: CdkDrag<I>;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, OnDestroy, Input, InjectionToken} from '@angular/core';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\n\n/**\n * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DROP_LIST_GROUP =\n    new InjectionToken<CdkDropListGroup<unknown>>('CdkDropListGroup');\n\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\n@Directive({\n  selector: '[cdkDropListGroup]',\n  exportAs: 'cdkDropListGroup',\n  providers: [{provide: CDK_DROP_LIST_GROUP, useExisting: CdkDropListGroup}],\n})\nexport class CdkDropListGroup<T> implements OnDestroy {\n  /** Drop lists registered inside the group. */\n  readonly _items = new Set<T>();\n\n  /** Whether starting a dragging sequence from inside this group is disabled. */\n  @Input('cdkDropListGroupDisabled')\n  get disabled(): boolean { return this._disabled; }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n  private _disabled = false;\n\n  ngOnDestroy() {\n    this._items.clear();\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {DragRefConfig, Point, DragRef} from '../drag-ref';\n\n/** Possible values that can be used to configure the drag start delay. */\nexport type DragStartDelay = number | {touch: number, mouse: number};\n\n/** Possible axis along which dragging can be locked. */\nexport type DragAxis = 'x' | 'y';\n\n/** Function that can be used to constrain the position of a dragged element. */\nexport type DragConstrainPosition = (point: Point, dragRef: DragRef) => Point;\n\n/** Possible orientations for a drop list. */\nexport type DropListOrientation = 'horizontal' | 'vertical';\n\n/**\n * Injection token that can be used to configure the\n * behavior of the drag&drop-related components.\n */\nexport const CDK_DRAG_CONFIG = new InjectionToken<DragDropConfig>('CDK_DRAG_CONFIG');\n\n/**\n * Object that can be used to configure the drag\n * items and drop lists within a module or a component.\n */\nexport interface DragDropConfig extends Partial<DragRefConfig> {\n  lockAxis?: DragAxis;\n  dragStartDelay?: DragStartDelay;\n  constrainPosition?: DragConstrainPosition;\n  previewClass?: string | string[];\n  boundaryElement?: string;\n  rootElementSelector?: string;\n  draggingDisabled?: boolean;\n  sortingDisabled?: boolean;\n  listAutoScrollDisabled?: boolean;\n  listOrientation?: DropListOrientation;\n  zIndex?: number;\n  previewContainer?: 'global' | 'parent';\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 * Asserts that a particular node is an element.\n * @param node Node to be checked.\n * @param name Name to attach to the error message.\n */\nexport function assertElementNode(node: Node, name: string): asserts node is HTMLElement {\n  if (node.nodeType !== 1) {\n    throw Error(`${name} must be attached to an element node. ` +\n                `Currently attached to \"${node.nodeName}\".`);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  BooleanInput,\n  coerceArray,\n  coerceNumberProperty,\n  coerceBooleanProperty,\n  NumberInput,\n} from '@angular/cdk/coercion';\nimport {\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  Optional,\n  Directive,\n  ChangeDetectorRef,\n  SkipSelf,\n  Inject,\n  InjectionToken,\n} from '@angular/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {CdkDrag} from './drag';\nimport {CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDragSortEvent} from '../drag-events';\nimport {CDK_DROP_LIST_GROUP, CdkDropListGroup} from './drop-list-group';\nimport {DropListRef} from '../drop-list-ref';\nimport {DragRef} from '../drag-ref';\nimport {DragDrop} from '../drag-drop';\nimport {DropListOrientation, DragAxis, DragDropConfig, CDK_DRAG_CONFIG} from './config';\nimport {Subject} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {assertElementNode} from './assertions';\n\n/** Counter used to generate unique ids for drop zones. */\nlet _uniqueIdCounter = 0;\n\n/**\n * Internal compile-time-only representation of a `CdkDropList`.\n * Used to avoid circular import issues between the `CdkDropList` and the `CdkDrag`.\n * @docs-private\n */\nexport interface CdkDropListInternal extends CdkDropList {}\n\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DROP_LIST = new InjectionToken<CdkDropList>('CdkDropList');\n\n/** Container that wraps a set of draggable items. */\n@Directive({\n  selector: '[cdkDropList], cdk-drop-list',\n  exportAs: 'cdkDropList',\n  providers: [\n    // Prevent child drop lists from picking up the same group as their parent.\n    {provide: CDK_DROP_LIST_GROUP, useValue: undefined},\n    {provide: CDK_DROP_LIST, useExisting: CdkDropList},\n  ],\n  host: {\n    'class': 'cdk-drop-list',\n    '[attr.id]': 'id',\n    '[class.cdk-drop-list-disabled]': 'disabled',\n    '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n    '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n  }\n})\nexport class CdkDropList<T = any> implements OnDestroy {\n  /** Emits when the list has been destroyed. */\n  private readonly _destroyed = new Subject<void>();\n\n  /** Whether the element's scrollable parents have been resolved. */\n  private _scrollableParentsResolved: boolean;\n\n  /** Keeps track of the drop lists that are currently on the page. */\n  private static _dropLists: CdkDropList[] = [];\n\n  /** Reference to the underlying drop list instance. */\n  _dropListRef: DropListRef<CdkDropList<T>>;\n\n  /**\n   * Other draggable containers that this container is connected to and into which the\n   * container's items can be transferred. Can either be references to other drop containers,\n   * or their unique IDs.\n   */\n  @Input('cdkDropListConnectedTo')\n  connectedTo: (CdkDropList | string)[] | CdkDropList | string = [];\n\n  /** Arbitrary data to attach to this container. */\n  @Input('cdkDropListData') data: T;\n\n  /** Direction in which the list is oriented. */\n  @Input('cdkDropListOrientation') orientation: DropListOrientation;\n\n  /**\n   * Unique ID for the drop zone. Can be used as a reference\n   * in the `connectedTo` of another `CdkDropList`.\n   */\n  @Input() id: string = `cdk-drop-list-${_uniqueIdCounter++}`;\n\n  /** Locks the position of the draggable elements inside the container along the specified axis. */\n  @Input('cdkDropListLockAxis') lockAxis: DragAxis;\n\n  /** Whether starting a dragging sequence from this container is disabled. */\n  @Input('cdkDropListDisabled')\n  get disabled(): boolean {\n    return this._disabled || (!!this._group && this._group.disabled);\n  }\n  set disabled(value: boolean) {\n    // Usually we sync the directive and ref state right before dragging starts, in order to have\n    // a single point of failure and to avoid having to use setters for everything. `disabled` is\n    // a special case, because it can prevent the `beforeStarted` event from firing, which can lock\n    // the user in a disabled state, so we also need to sync it as it's being set.\n    this._dropListRef.disabled = this._disabled = coerceBooleanProperty(value);\n  }\n  private _disabled: boolean;\n\n  /** Whether sorting within this drop list is disabled. */\n  @Input('cdkDropListSortingDisabled')\n  sortingDisabled: boolean;\n\n  /**\n   * Function that is used to determine whether an item\n   * is allowed to be moved into a drop container.\n   */\n  @Input('cdkDropListEnterPredicate')\n  enterPredicate: (drag: CdkDrag, drop: CdkDropList) => boolean = () => true\n\n  /** Functions that is used to determine whether an item can be sorted into a particular index. */\n  @Input('cdkDropListSortPredicate')\n  sortPredicate: (index: number, drag: CdkDrag, drop: CdkDropList) => boolean = () => true\n\n  /** Whether to auto-scroll the view when the user moves their pointer close to the edges. */\n  @Input('cdkDropListAutoScrollDisabled')\n  autoScrollDisabled: boolean;\n\n  /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n  @Input('cdkDropListAutoScrollStep')\n  autoScrollStep: number;\n\n  /** Emits when the user drops an item inside the container. */\n  @Output('cdkDropListDropped')\n  readonly dropped: EventEmitter<CdkDragDrop<T, any>> = new EventEmitter<CdkDragDrop<T, any>>();\n\n  /**\n   * Emits when the user has moved a new drag item into this container.\n   */\n  @Output('cdkDropListEntered')\n  readonly entered: EventEmitter<CdkDragEnter<T>> = new EventEmitter<CdkDragEnter<T>>();\n\n  /**\n   * Emits when the user removes an item from the container\n   * by dragging it into another container.\n   */\n  @Output('cdkDropListExited')\n  readonly exited: EventEmitter<CdkDragExit<T>> = new EventEmitter<CdkDragExit<T>>();\n\n  /** Emits as the user is swapping items while actively dragging. */\n  @Output('cdkDropListSorted')\n  readonly sorted: EventEmitter<CdkDragSortEvent<T>> = new EventEmitter<CdkDragSortEvent<T>>();\n\n  /**\n   * Keeps track of the items that are registered with this container. Historically we used to\n   * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n   * well which means that we can't handle cases like dragging the headers of a `mat-table`\n   * correctly. What we do instead is to have the items register themselves with the container\n   * and then we sort them based on their position in the DOM.\n   */\n  private _unsortedItems = new Set<CdkDrag>();\n\n  constructor(\n      /** Element that the drop list is attached to. */\n      public element: ElementRef<HTMLElement>, dragDrop: DragDrop,\n      private _changeDetectorRef: ChangeDetectorRef,\n      private _scrollDispatcher: ScrollDispatcher,\n      @Optional() private _dir?: Directionality,\n      @Optional() @Inject(CDK_DROP_LIST_GROUP) @SkipSelf()\n      private _group?: CdkDropListGroup<CdkDropList>,\n      @Optional() @Inject(CDK_DRAG_CONFIG) config?: DragDropConfig) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      assertElementNode(element.nativeElement, 'cdkDropList');\n    }\n\n    this._dropListRef = dragDrop.createDropList(element);\n    this._dropListRef.data = this;\n\n    if (config) {\n      this._assignDefaults(config);\n    }\n\n    this._dropListRef.enterPredicate = (drag: DragRef<CdkDrag>, drop: DropListRef<CdkDropList>) => {\n      return this.enterPredicate(drag.data, drop.data);\n    };\n\n    this._dropListRef.sortPredicate =\n      (index: number, drag: DragRef<CdkDrag>, drop: DropListRef<CdkDropList>) => {\n        return this.sortPredicate(index, drag.data, drop.data);\n      };\n\n    this._setupInputSyncSubscription(this._dropListRef);\n    this._handleEvents(this._dropListRef);\n    CdkDropList._dropLists.push(this);\n\n    if (_group) {\n      _group._items.add(this);\n    }\n  }\n\n  /** Registers an items with the drop list. */\n  addItem(item: CdkDrag): void {\n    this._unsortedItems.add(item);\n\n    if (this._dropListRef.isDragging()) {\n      this._syncItemsWithRef();\n    }\n  }\n\n  /** Removes an item from the drop list. */\n  removeItem(item: CdkDrag): void {\n    this._unsortedItems.delete(item);\n\n    if (this._dropListRef.isDragging()) {\n      this._syncItemsWithRef();\n    }\n  }\n\n  /** Gets the registered items in the list, sorted by their position in the DOM. */\n  getSortedItems(): CdkDrag[] {\n    return Array.from(this._unsortedItems).sort((a: CdkDrag, b: CdkDrag) => {\n      const documentPosition =\n          a._dragRef.getVisibleElement().compareDocumentPosition(b._dragRef.getVisibleElement());\n\n      // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n      // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n      // tslint:disable-next-line:no-bitwise\n      return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n    });\n  }\n\n  ngOnDestroy() {\n    const index = CdkDropList._dropLists.indexOf(this);\n\n    if (index > -1) {\n      CdkDropList._dropLists.splice(index, 1);\n    }\n\n    if (this._group) {\n      this._group._items.delete(this);\n    }\n\n    this._unsortedItems.clear();\n    this._dropListRef.dispose();\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n  private _setupInputSyncSubscription(ref: DropListRef<CdkDropList>) {\n    if (this._dir) {\n      this._dir.change\n        .pipe(startWith(this._dir.value), takeUntil(this._destroyed))\n        .subscribe(value => ref.withDirection(value));\n    }\n\n    ref.beforeStarted.subscribe(() => {\n      const siblings = coerceArray(this.connectedTo).map(drop => {\n        if (typeof drop === 'string') {\n          const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);\n\n          if (!correspondingDropList && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n            console.warn(`CdkDropList could not find connected drop list with id \"${drop}\"`);\n          }\n\n          return correspondingDropList!;\n        }\n\n        return drop;\n      });\n\n      if (this._group) {\n        this._group._items.forEach(drop => {\n          if (siblings.indexOf(drop) === -1) {\n            siblings.push(drop);\n          }\n        });\n      }\n\n      // Note that we resolve the scrollable parents here so that we delay the resolution\n      // as long as possible, ensuring that the element is in its final place in the DOM.\n      if (!this._scrollableParentsResolved) {\n        const scrollableParents = this._scrollDispatcher\n          .getAncestorScrollContainers(this.element)\n          .map(scrollable => scrollable.getElementRef().nativeElement);\n        this._dropListRef.withScrollableParents(scrollableParents);\n\n        // Only do this once since it involves traversing the DOM and the parents\n        // shouldn't be able to change without the drop list being destroyed.\n        this._scrollableParentsResolved = true;\n      }\n\n      ref.disabled = this.disabled;\n      ref.lockAxis = this.lockAxis;\n      ref.sortingDisabled = coerceBooleanProperty(this.sortingDisabled);\n      ref.autoScrollDisabled = coerceBooleanProperty(this.autoScrollDisabled);\n      ref.autoScrollStep = coerceNumberProperty(this.autoScrollStep, 2);\n      ref\n        .connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef))\n        .withOrientation(this.orientation);\n    });\n  }\n\n  /** Handles events from the underlying DropListRef. */\n  private _handleEvents(ref: DropListRef<CdkDropList>) {\n    ref.beforeStarted.subscribe(() => {\n      this._syncItemsWithRef();\n      this._changeDetectorRef.markForCheck();\n    });\n\n    ref.entered.subscribe(event => {\n      this.entered.emit({\n        container: this,\n        item: event.item.data,\n        currentIndex: event.currentIndex\n      });\n    });\n\n    ref.exited.subscribe(event => {\n      this.exited.emit({\n        container: this,\n        item: event.item.data\n      });\n      this._changeDetectorRef.markForCheck();\n    });\n\n    ref.sorted.subscribe(event => {\n      this.sorted.emit({\n        previousIndex: event.previousIndex,\n        currentIndex: event.currentIndex,\n        container: this,\n        item: event.item.data\n      });\n    });\n\n    ref.dropped.subscribe(event => {\n      this.dropped.emit({\n        previousIndex: event.previousIndex,\n        currentIndex: event.currentIndex,\n        previousContainer: event.previousContainer.data,\n        container: event.container.data,\n        item: event.item.data,\n        isPointerOverContainer: event.isPointerOverContainer,\n        distance: event.distance,\n        dropPoint: event.dropPoint\n      });\n\n      // Mark for check since all of these events run outside of change\n      // detection and we're not guaranteed for something else to have triggered it.\n      this._changeDetectorRef.markForCheck();\n    });\n  }\n\n  /** Assigns the default input values based on a provided config object. */\n  private _assignDefaults(config: DragDropConfig) {\n    const {\n      lockAxis, draggingDisabled, sortingDisabled, listAutoScrollDisabled, listOrientation\n    } = config;\n\n    this.disabled = draggingDisabled == null ? false : draggingDisabled;\n    this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;\n    this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;\n    this.orientation = listOrientation || 'vertical';\n\n    if (lockAxis) {\n      this.lockAxis = lockAxis;\n    }\n  }\n\n  /** Syncs up the registered drag items with underlying drop list ref. */\n  private _syncItemsWithRef() {\n    this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_sortingDisabled: BooleanInput;\n  static ngAcceptInputType_autoScrollDisabled: BooleanInput;\n  static ngAcceptInputType_autoScrollStep: NumberInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {CDK_DRAG_PARENT} from '../drag-parent';\nimport {assertElementNode} from './assertions';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_HANDLE = new InjectionToken<CdkDragHandle>('CdkDragHandle');\n\n/** Handle that can be used to drag a CdkDrag instance. */\n@Directive({\n  selector: '[cdkDragHandle]',\n  host: {\n    'class': 'cdk-drag-handle'\n  },\n  providers: [{provide: CDK_DRAG_HANDLE, useExisting: CdkDragHandle}],\n})\nexport class CdkDragHandle implements OnDestroy {\n  /** Closest parent draggable instance. */\n  _parentDrag: {} | undefined;\n\n  /** Emits when the state of the handle has changed. */\n  readonly _stateChanges = new Subject<CdkDragHandle>();\n\n  /** Whether starting to drag through this handle is disabled. */\n  @Input('cdkDragHandleDisabled')\n  get disabled(): boolean { return this._disabled; }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n    this._stateChanges.next(this);\n  }\n  private _disabled = false;\n\n  constructor(\n    public element: ElementRef<HTMLElement>,\n    @Inject(CDK_DRAG_PARENT) @Optional() @SkipSelf() parentDrag?: any) {\n\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      assertElementNode(element.nativeElement, 'cdkDragHandle');\n    }\n\n    this._parentDrag = parentDrag;\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, TemplateRef, Input, InjectionToken} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_PLACEHOLDER = new InjectionToken<CdkDragPlaceholder>('CdkDragPlaceholder');\n\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\n@Directive({\n  selector: 'ng-template[cdkDragPlaceholder]',\n  providers: [{provide: CDK_DRAG_PLACEHOLDER, useExisting: CdkDragPlaceholder}],\n})\nexport class CdkDragPlaceholder<T = any> {\n  /** Context data to be added to the placeholder template instance. */\n  @Input() data: T;\n  constructor(public templateRef: TemplateRef<T>) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Directive, InjectionToken, Input, TemplateRef} from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const CDK_DRAG_PREVIEW = new InjectionToken<CdkDragPreview>('CdkDragPreview');\n\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\n@Directive({\n  selector: 'ng-template[cdkDragPreview]',\n  providers: [{provide: CDK_DRAG_PREVIEW, useExisting: CdkDragPreview}],\n})\nexport class CdkDragPreview<T = any> {\n  /** Context data to be added to the preview template instance. */\n  @Input() data: T;\n\n  /** Whether the preview should preserve the same size as the item that is being dragged. */\n  @Input()\n  get matchSize(): boolean { return this._matchSize; }\n  set matchSize(value: boolean) { this._matchSize = coerceBooleanProperty(value); }\n  private _matchSize = false;\n\n  constructor(public templateRef: TemplateRef<T>) {}\n\n  static ngAcceptInputType_matchSize: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  AfterViewInit,\n  ContentChild,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  SkipSelf,\n  ViewContainerRef,\n  OnChanges,\n  SimpleChanges,\n  ChangeDetectorRef,\n  Self,\n} from '@angular/core';\nimport {\n  coerceBooleanProperty,\n  coerceNumberProperty,\n  coerceElement,\n  BooleanInput\n} from '@angular/cdk/coercion';\nimport {Observable, Observer, Subject, merge} from 'rxjs';\nimport {startWith, take, map, takeUntil, switchMap, tap} from 'rxjs/operators';\nimport {\n  CdkDragDrop,\n  CdkDragEnd,\n  CdkDragEnter,\n  CdkDragExit,\n  CdkDragMove,\n  CdkDragStart,\n  CdkDragRelease,\n} from '../drag-events';\nimport {CDK_DRAG_HANDLE, CdkDragHandle} from './drag-handle';\nimport {CDK_DRAG_PLACEHOLDER, CdkDragPlaceholder} from './drag-placeholder';\nimport {CDK_DRAG_PREVIEW, CdkDragPreview} from './drag-preview';\nimport {CDK_DRAG_PARENT} from '../drag-parent';\nimport {DragRef, Point, PreviewContainer} from '../drag-ref';\nimport {CDK_DROP_LIST, CdkDropListInternal as CdkDropList} from './drop-list';\nimport {DragDrop} from '../drag-drop';\nimport {CDK_DRAG_CONFIG, DragDropConfig, DragStartDelay, DragAxis} from './config';\nimport {assertElementNode} from './assertions';\n\nconst DRAG_HOST_CLASS = 'cdk-drag';\n\n/** Element that can be moved inside a CdkDropList container. */\n@Directive({\n  selector: '[cdkDrag]',\n  exportAs: 'cdkDrag',\n  host: {\n    'class': DRAG_HOST_CLASS,\n    '[class.cdk-drag-disabled]': 'disabled',\n    '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n  },\n  providers: [{provide: CDK_DRAG_PARENT, useExisting: CdkDrag}]\n})\nexport class CdkDrag<T = any> implements AfterViewInit, OnChanges, OnDestroy {\n  private readonly _destroyed = new Subject<void>();\n  private static _dragInstances: CdkDrag[] = [];\n\n  /** Reference to the underlying drag instance. */\n  _dragRef: DragRef<CdkDrag<T>>;\n\n  /** Elements that can be used to drag the draggable item. */\n  @ContentChildren(CDK_DRAG_HANDLE, {descendants: true}) _handles: QueryList<CdkDragHandle>;\n\n  /** Element that will be used as a template to create the draggable item's preview. */\n  @ContentChild(CDK_DRAG_PREVIEW) _previewTemplate: CdkDragPreview;\n\n  /** Template for placeholder element rendered to show where a draggable would be dropped. */\n  @ContentChild(CDK_DRAG_PLACEHOLDER) _placeholderTemplate: CdkDragPlaceholder;\n\n  /** Arbitrary data to attach to this drag instance. */\n  @Input('cdkDragData') data: T;\n\n  /** Locks the position of the dragged element along the specified axis. */\n  @Input('cdkDragLockAxis') lockAxis: DragAxis;\n\n  /**\n   * Selector that will be used to determine the root draggable element, starting from\n   * the `cdkDrag` element and going up the DOM. Passing an alternate root element is useful\n   * when trying to enable dragging on an element that you might not have access to.\n   */\n  @Input('cdkDragRootElement') rootElementSelector: string;\n\n  /**\n   * Node or selector that will be used to determine the element to which the draggable's\n   * position will be constrained. If a string is passed in, it'll be used as a selector that\n   * will be matched starting from the element's parent and going up the DOM until a match\n   * has been found.\n   */\n  @Input('cdkDragBoundary') boundaryElement: string | ElementRef<HTMLElement> | HTMLElement;\n\n  /**\n   * Amount of milliseconds to wait after the user has put their\n   * pointer down before starting to drag the element.\n   */\n  @Input('cdkDragStartDelay') dragStartDelay: DragStartDelay;\n\n  /**\n   * Sets the position of a `CdkDrag` that is outside of a drop container.\n   * Can be used to restore the element's position for a returning user.\n   */\n  @Input('cdkDragFreeDragPosition') freeDragPosition: {x: number, y: number};\n\n  /** Whether starting to drag this element is disabled. */\n  @Input('cdkDragDisabled')\n  get disabled(): boolean {\n    return this._disabled || (this.dropContainer && this.dropContainer.disabled);\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n    this._dragRef.disabled = this._disabled;\n  }\n  private _disabled: boolean;\n\n  /**\n   * Function that can be used to customize the logic of how the position of the drag item\n   * is limited while it's being dragged. Gets called with a point containing the current position\n   * of the user's pointer on the page and should return a point describing where the item should\n   * be rendered.\n   */\n  @Input('cdkDragConstrainPosition') constrainPosition?: (point: Point, dragRef: DragRef) => Point;\n\n  /** Class to be added to the preview element. */\n  @Input('cdkDragPreviewClass') previewClass: string | string[];\n\n  /**\n   * Configures the place into which the preview of the item will be inserted. Can be configured\n   * globally through `CDK_DROP_LIST`. Possible values:\n   * - `global` - Preview will be inserted at the bottom of the `<body>`. The advantage is that\n   * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain\n   * its inherited styles.\n   * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that\n   * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be\n   * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors\n   * like `:nth-child` and some flexbox configurations.\n   * - `ElementRef<HTMLElement> | HTMLElement` - Preview will be inserted into a specific element.\n   * Same advantages and disadvantages as `parent`.\n   */\n  @Input('cdkDragPreviewContainer') previewContainer: PreviewContainer;\n\n  /** Emits when the user starts dragging the item. */\n  @Output('cdkDragStarted') readonly started: EventEmitter<CdkDragStart> =\n      new EventEmitter<CdkDragStart>();\n\n  /** Emits when the user has released a drag item, before any animations have started. */\n  @Output('cdkDragReleased') readonly released: EventEmitter<CdkDragRelease> =\n      new EventEmitter<CdkDragRelease>();\n\n  /** Emits when the user stops dragging an item in the container. */\n  @Output('cdkDragEnded') readonly ended: EventEmitter<CdkDragEnd> = new EventEmitter<CdkDragEnd>();\n\n  /** Emits when the user has moved the item into a new container. */\n  @Output('cdkDragEntered') readonly entered: EventEmitter<CdkDragEnter<any>> =\n      new EventEmitter<CdkDragEnter<any>>();\n\n  /** Emits when the user removes the item its container by dragging it into another container. */\n  @Output('cdkDragExited') readonly exited: EventEmitter<CdkDragExit<any>> =\n      new EventEmitter<CdkDragExit<any>>();\n\n  /** Emits when the user drops the item inside a container. */\n  @Output('cdkDragDropped') readonly dropped: EventEmitter<CdkDragDrop<any>> =\n      new EventEmitter<CdkDragDrop<any>>();\n\n  /**\n   * Emits as the user is dragging the item. Use with caution,\n   * because this event will fire for every pixel that the user has dragged.\n   */\n  @Output('cdkDragMoved')\n  readonly moved:  Observable<CdkDragMove<T>> =\n      new Observable((observer: Observer<CdkDragMove<T>>) => {\n        const subscription = this._dragRef.moved.pipe(map(movedEvent => ({\n          source: this,\n          pointerPosition: movedEvent.pointerPosition,\n          event: movedEvent.event,\n          delta: movedEvent.delta,\n          distance: movedEvent.distance\n        }))).subscribe(observer);\n\n        return () => {\n          subscription.unsubscribe();\n        };\n      });\n\n  constructor(\n      /** Element that the draggable is attached to. */\n      public element: ElementRef<HTMLElement>,\n      /** Droppable container that the draggable is a part of. */\n      @Inject(CDK_DROP_LIST) @Optional() @SkipSelf() public dropContainer: CdkDropList,\n      /**\n       * @deprecated `_document` parameter no longer being used and will be removed.\n       * @breaking-change 12.0.0\n       */\n      @Inject(DOCUMENT) _document: any, private _ngZone: NgZone,\n      private _viewContainerRef: ViewContainerRef,\n      @Optional() @Inject(CDK_DRAG_CONFIG) config: DragDropConfig,\n      @Optional() private _dir: Directionality, dragDrop: DragDrop,\n      private _changeDetectorRef: ChangeDetectorRef,\n      @Optional() @Self() @Inject(CDK_DRAG_HANDLE) private _selfHandle?: CdkDragHandle,\n      @Optional() @SkipSelf() @Inject(CDK_DRAG_PARENT) private _parentDrag?: CdkDrag) {\n    this._dragRef = dragDrop.createDrag(element, {\n      dragStartThreshold: config && config.dragStartThreshold != null ?\n          config.dragStartThreshold : 5,\n      pointerDirectionChangeThreshold: config && config.pointerDirectionChangeThreshold != null ?\n          config.pointerDirectionChangeThreshold : 5,\n      zIndex: config?.zIndex,\n    });\n    this._dragRef.data = this;\n\n    // We have to keep track of the drag instances in order to be able to match an element to\n    // a drag instance. We can't go through the global registry of `DragRef`, because the root\n    // element could be different.\n    CdkDrag._dragInstances.push(this);\n\n    if (config) {\n      this._assignDefaults(config);\n    }\n\n    // Note that usually the container is assigned when the drop list is picks up the item, but in\n    // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation\n    // where there are no items on the first change detection pass, but the items get picked up as\n    // soon as the user triggers another pass by dragging. This is a problem, because the item would\n    // have to switch from standalone mode to drag mode in the middle of the dragging sequence which\n    // is too late since the two modes save different kinds of information. We work around it by\n    // assigning the drop container both from here and the list.\n    if (dropContainer) {\n      this._dragRef._withDropContainer(dropContainer._dropListRef);\n      dropContainer.addItem(this);\n    }\n\n    this._syncInputs(this._dragRef);\n    this._handleEvents(this._dragRef);\n  }\n\n  /**\n   * Returns the element that is being used as a placeholder\n   * while the current element is being dragged.\n   */\n  getPlaceholderElement(): HTMLElement {\n    return this._dragRef.getPlaceholderElement();\n  }\n\n  /** Returns the root draggable element. */\n  getRootElement(): HTMLElement {\n    return this._dragRef.getRootElement();\n  }\n\n  /** Resets a standalone drag item to its initial position. */\n  reset(): void {\n    this._dragRef.reset();\n  }\n\n  /**\n   * Gets the pixel coordinates of the draggable outside of a drop container.\n   */\n  getFreeDragPosition(): {readonly x: number, readonly y: number} {\n    return this._dragRef.getFreeDragPosition();\n  }\n\n  ngAfterViewInit() {\n    // Normally this isn't in the zone, but it can cause major performance regressions for apps\n    // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.\n    this._ngZone.runOutsideAngular(() => {\n      // We need to wait for the zone to stabilize, in order for the reference\n      // element to be in the proper place in the DOM. This is mostly relevant\n      // for draggable elements inside portals since they get stamped out in\n      // their original DOM position and then they get transferred to the portal.\n      this._ngZone.onStable\n        .pipe(take(1), takeUntil(this._destroyed))\n        .subscribe(() => {\n          this._updateRootElement();\n          this._setupHandlesListener();\n\n          if (this.freeDragPosition) {\n            this._dragRef.setFreeDragPosition(this.freeDragPosition);\n          }\n        });\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const rootSelectorChange = changes['rootElementSelector'];\n    const positionChange = changes['freeDragPosition'];\n\n    // We don't have to react to the first change since it's being\n    // handled in `ngAfterViewInit` where it needs to be deferred.\n    if (rootSelectorChange && !rootSelectorChange.firstChange) {\n      this._updateRootElement();\n    }\n\n    // Skip the first change since it's being handled in `ngAfterViewInit`.\n    if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n      this._dragRef.setFreeDragPosition(this.freeDragPosition);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.dropContainer) {\n      this.dropContainer.removeItem(this);\n    }\n\n    const index = CdkDrag._dragInstances.indexOf(this);\n    if (index > -1) {\n      CdkDrag._dragInstances.splice(index, 1);\n    }\n\n    // Unnecessary in most cases, but used to avoid extra change detections with `zone-paths-rxjs`.\n    this._ngZone.runOutsideAngular(() => {\n      this._destroyed.next();\n      this._destroyed.complete();\n      this._dragRef.dispose();\n    });\n  }\n\n  /** Syncs the root element with the `DragRef`. */\n  private _updateRootElement() {\n    const element = this.element.nativeElement;\n    const rootElement = this.rootElementSelector ?\n        getClosestMatchingAncestor(element, this.rootElementSelector) : element;\n\n    if (rootElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      assertElementNode(rootElement, 'cdkDrag');\n    }\n\n    this._dragRef.withRootElement(rootElement || element);\n  }\n\n  /** Gets the boundary element, based on the `boundaryElement` value. */\n  private _getBoundaryElement() {\n    const boundary = this.boundaryElement;\n\n    if (!boundary) {\n      return null;\n    }\n\n    if (typeof boundary === 'string') {\n      return getClosestMatchingAncestor(this.element.nativeElement, boundary);\n    }\n\n    const element = coerceElement(boundary);\n\n    if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n      !element.contains(this.element.nativeElement)) {\n      throw Error('Draggable element is not inside of the node passed into cdkDragBoundary.');\n    }\n\n    return element;\n  }\n\n  /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n  private _syncInputs(ref: DragRef<CdkDrag<T>>) {\n    ref.beforeStarted.subscribe(() => {\n      if (!ref.isDragging()) {\n        const dir = this._dir;\n        const dragStartDelay = this.dragStartDelay;\n        const placeholder = this._placeholderTemplate ? {\n          template: this._placeholderTemplate.templateRef,\n          context: this._placeholderTemplate.data,\n          viewContainer: this._viewContainerRef\n        } : null;\n        const preview = this._previewTemplate ? {\n          template: this._previewTemplate.templateRef,\n          context: this._previewTemplate.data,\n          matchSize: this._previewTemplate.matchSize,\n          viewContainer: this._viewContainerRef\n        } : null;\n\n        ref.disabled = this.disabled;\n        ref.lockAxis = this.lockAxis;\n        ref.dragStartDelay = (typeof dragStartDelay === 'object' && dragStartDelay) ?\n            dragStartDelay : coerceNumberProperty(dragStartDelay);\n        ref.constrainPosition = this.constrainPosition;\n        ref.previewClass = this.previewClass;\n        ref\n          .withBoundaryElement(this._getBoundaryElement())\n          .withPlaceholderTemplate(placeholder)\n          .withPreviewTemplate(preview)\n          .withPreviewContainer(this.previewContainer || 'global');\n\n        if (dir) {\n          ref.withDirection(dir.value);\n        }\n      }\n    });\n\n    // This only needs to be resolved once.\n    ref.beforeStarted.pipe(take(1)).subscribe(() => {\n      // If we managed to resolve a parent through DI, use it.\n      if (this._parentDrag) {\n        ref.withParent(this._parentDrag._dragRef);\n        return;\n      }\n\n      // Otherwise fall back to resolving the parent by looking up the DOM. This can happen if\n      // the item was projected into another item by something like `ngTemplateOutlet`.\n      let parent = this.element.nativeElement.parentElement;\n      while (parent) {\n        // `classList` needs to be null checked, because IE doesn't have it on some elements.\n        if (parent.classList?.contains(DRAG_HOST_CLASS)) {\n          ref.withParent(CdkDrag._dragInstances.find(drag => {\n            return drag.element.nativeElement === parent;\n          })?._dragRef || null);\n          break;\n        }\n        parent = parent.parentElement;\n      }\n    });\n  }\n\n  /** Handles the events from the underlying `DragRef`. */\n  private _handleEvents(ref: DragRef<CdkDrag<T>>) {\n    ref.started.subscribe(() => {\n      this.started.emit({source: this});\n\n      // Since all of these events run outside of change detection,\n      // we need to ensure that everything is marked correctly.\n      this._changeDetectorRef.markForCheck();\n    });\n\n    ref.released.subscribe(() => {\n      this.released.emit({source: this});\n    });\n\n    ref.ended.subscribe(event => {\n      this.ended.emit({\n        source: this,\n        distance: event.distance,\n        dropPoint: event.dropPoint\n      });\n\n      // Since all of these events run outside of change detection,\n      // we need to ensure that everything is marked correctly.\n      this._changeDetectorRef.markForCheck();\n    });\n\n    ref.entered.subscribe(event => {\n      this.entered.emit({\n        container: event.container.data,\n        item: this,\n        currentIndex: event.currentIndex\n      });\n    });\n\n    ref.exited.subscribe(event => {\n      this.exited.emit({\n        container: event.container.data,\n        item: this\n      });\n    });\n\n    ref.dropped.subscribe(event => {\n      this.dropped.emit({\n        previousIndex: event.previousIndex,\n        currentIndex: event.currentIndex,\n        previousContainer: event.previousContainer.data,\n        container: event.container.data,\n        isPointerOverContainer: event.isPointerOverContainer,\n        item: this,\n        distance: event.distance,\n        dropPoint: event.dropPoint\n      });\n    });\n  }\n\n  /** Assigns the default input values based on a provided config object. */\n  private _assignDefaults(config: DragDropConfig) {\n    const {\n      lockAxis, dragStartDelay, constrainPosition, previewClass, boundaryElement, draggingDisabled,\n      rootElementSelector, previewContainer\n    } = config;\n\n    this.disabled = draggingDisabled == null ? false : draggingDisabled;\n    this.dragStartDelay = dragStartDelay || 0;\n\n    if (lockAxis) {\n      this.lockAxis = lockAxis;\n    }\n\n    if (constrainPosition) {\n      this.constrainPosition = constrainPosition;\n    }\n\n    if (previewClass) {\n      this.previewClass = previewClass;\n    }\n\n    if (boundaryElement) {\n      this.boundaryElement = boundaryElement;\n    }\n\n    if (rootElementSelector) {\n      this.rootElementSelector = rootElementSelector;\n    }\n\n    if (previewContainer) {\n      this.previewContainer = previewContainer;\n    }\n  }\n\n  /** Sets up the listener that syncs the handles with the drag ref. */\n  private _setupHandlesListener() {\n    // Listen for any newly-added handles.\n    this._handles.changes.pipe(\n      startWith(this._handles),\n      // Sync the new handles with the DragRef.\n      tap((handles: QueryList<CdkDragHandle>) => {\n        const childHandleElements = handles\n          .filter(handle => handle._parentDrag === this)\n          .map(handle => handle.element);\n\n        // Usually handles are only allowed to be a descendant of the drag element, but if\n        // the consumer defined a different drag root, we should allow the drag element\n        // itself to be a handle too.\n        if (this._selfHandle && this.rootElementSelector) {\n          childHandleElements.push(this.element);\n        }\n\n        this._dragRef.withHandles(childHandleElements);\n      }),\n      // Listen if the state of any of the handles changes.\n      switchMap((handles: QueryList<CdkDragHandle>) => {\n        return merge(...handles.map(item => {\n          return item._stateChanges.pipe(startWith(item));\n        })) as Observable<CdkDragHandle>;\n      }),\n      takeUntil(this._destroyed)\n    ).subscribe(handleInstance => {\n      // Enabled/disable the handle that changed in the DragRef.\n      const dragRef = this._dragRef;\n      const handle = handleInstance.element.nativeElement;\n      handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n    });\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/** Gets the closest ancestor of an element that matches a selector. */\nfunction getClosestMatchingAncestor(element: HTMLElement, selector: string) {\n  let currentElement = element.parentElement as HTMLElement | null;\n\n  while (currentElement) {\n    // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.\n    if (currentElement.matches ? currentElement.matches(selector) :\n        (currentElement as any).msMatchesSelector(selector)) {\n      return currentElement;\n    }\n\n    currentElement = currentElement.parentElement;\n  }\n\n  return null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {CdkDropList} from './directives/drop-list';\nimport {CdkDropListGroup} from './directives/drop-list-group';\nimport {CdkDrag} from './directives/drag';\nimport {CdkDragHandle} from './directives/drag-handle';\nimport {CdkDragPreview} from './directives/drag-preview';\nimport {CdkDragPlaceholder} from './directives/drag-placeholder';\nimport {DragDrop} from './drag-drop';\n\n@NgModule({\n  declarations: [\n    CdkDropList,\n    CdkDropListGroup,\n    CdkDrag,\n    CdkDragHandle,\n    CdkDragPreview,\n    CdkDragPlaceholder,\n  ],\n  exports: [\n    CdkScrollableModule,\n    CdkDropList,\n    CdkDropListGroup,\n    CdkDrag,\n    CdkDragHandle,\n    CdkDragPreview,\n    CdkDragPlaceholder,\n  ],\n  providers: [\n    DragDrop,\n  ]\n})\nexport class DragDropModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport {DragDrop} from './drag-drop';\nexport {DragRef, DragRefConfig, Point, PreviewContainer} from './drag-ref';\nexport {DropListRef} from './drop-list-ref';\nexport {CDK_DRAG_PARENT} from './drag-parent';\n\nexport * from './drag-events';\nexport * from './drag-utils';\nexport * from './drag-drop-module';\nexport * from './drag-drop-registry';\n\nexport {CdkDropList, CDK_DROP_LIST} from './directives/drop-list';\nexport * from './directives/config';\nexport * from './directives/drop-list-group';\nexport * from './directives/drag';\nexport * from './directives/drag-handle';\nexport * from './directives/drag-preview';\nexport * from './directives/drag-placeholder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {CdkDropListInternal as ɵangular_material_src_cdk_drag_drop_drag_drop_a} from './directives/drop-list';"]}
Index: trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -13,5 +13,5 @@
 	 */
 	/** Current version of the Angular Component Development Kit. */
-	var VERSION = new core.Version('12.2.9');
+	var VERSION = new core.Version('12.2.10');
 
 	/**
Index: trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/bundles/cdk.umd.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"cdk.umd.js","sources":["../../../../../src/cdk/version.ts","../../../../../src/cdk/public-api.ts","../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('12.2.9');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["Version"],"mappings":";;;;;;CAAA;;;;;;;CAUA;KACa,OAAO,GAAG,IAAIA,YAAO,CAAC,mBAAmB;;CCXtD;;;;;;;;CCAA;;;;;;;;;;;;;;;;"}
+{"version":3,"file":"cdk.umd.js","sources":["../../../../../src/cdk/version.ts","../../../../../src/cdk/public-api.ts","../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('12.2.10');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["Version"],"mappings":";;;;;;CAAA;;;;;;;CAUA;KACa,OAAO,GAAG,IAAIA,YAAO,CAAC,mBAAmB;;CCXtD;;;;;;;;CCAA;;;;;;;;;;;;;;;;"}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -14,4 +14,5 @@
  * retention of the class and its directive metadata.
  */
+import * as ɵngcc0 from '@angular/core';
 export declare const CDK_DRAG_HANDLE: InjectionToken<CdkDragHandle>;
 /** Handle that can be used to drag a CdkDrag instance. */
@@ -29,3 +30,7 @@
     ngOnDestroy(): void;
     static ngAcceptInputType_disabled: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDragHandle, [null, { optional: true; skipSelf: true; }]>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDragHandle, "[cdkDragHandle]", never, { "disabled": "cdkDragHandleDisabled"; }, {}, never>;
 }
+
+//# sourceMappingURL=drag-handle.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,31 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { BooleanInput } from '@angular/cdk/coercion';
+import { ElementRef, InjectionToken, OnDestroy } from '@angular/core';
+import { Subject } from 'rxjs';
+/**
+ * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as
+ * alternative token to the actual `CdkDragHandle` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+export declare const CDK_DRAG_HANDLE: InjectionToken<CdkDragHandle>;
+/** Handle that can be used to drag a CdkDrag instance. */
+export declare class CdkDragHandle implements OnDestroy {
+    element: ElementRef<HTMLElement>;
+    /** Closest parent draggable instance. */
+    _parentDrag: {} | undefined;
+    /** Emits when the state of the handle has changed. */
+    readonly _stateChanges: Subject<CdkDragHandle>;
+    /** Whether starting to drag through this handle is disabled. */
+    get disabled(): boolean;
+    set disabled(value: boolean);
+    private _disabled;
+    constructor(element: ElementRef<HTMLElement>, parentDrag?: any);
+    ngOnDestroy(): void;
+    static ngAcceptInputType_disabled: BooleanInput;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-handle.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-handle.d.ts","sources":["drag-handle.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { ElementRef, InjectionToken, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n/**\n * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport declare const CDK_DRAG_HANDLE: InjectionToken<CdkDragHandle>;\n/** Handle that can be used to drag a CdkDrag instance. */\nexport declare class CdkDragHandle implements OnDestroy {\n    element: ElementRef<HTMLElement>;\n    /** Closest parent draggable instance. */\n    _parentDrag: {} | undefined;\n    /** Emits when the state of the handle has changed. */\n    readonly _stateChanges: Subject<CdkDragHandle>;\n    /** Whether starting to drag through this handle is disabled. */\n    get disabled(): boolean;\n    set disabled(value: boolean);\n    private _disabled;\n    constructor(element: ElementRef<HTMLElement>, parentDrag?: any);\n    ngOnDestroy(): void;\n    static ngAcceptInputType_disabled: BooleanInput;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -12,4 +12,5 @@
  * retention of the class and its directive metadata.
  */
+import * as ɵngcc0 from '@angular/core';
 export declare const CDK_DRAG_PLACEHOLDER: InjectionToken<CdkDragPlaceholder<any>>;
 /**
@@ -22,3 +23,7 @@
     data: T;
     constructor(templateRef: TemplateRef<T>);
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDragPlaceholder<any>, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDragPlaceholder<any>, "ng-template[cdkDragPlaceholder]", never, { "data": "data"; }, {}, never>;
 }
+
+//# sourceMappingURL=drag-placeholder.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,24 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { TemplateRef, InjectionToken } from '@angular/core';
+/**
+ * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as
+ * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+export declare const CDK_DRAG_PLACEHOLDER: InjectionToken<CdkDragPlaceholder<any>>;
+/**
+ * Element that will be used as a template for the placeholder of a CdkDrag when
+ * it is being dragged. The placeholder is displayed in place of the element being dragged.
+ */
+export declare class CdkDragPlaceholder<T = any> {
+    templateRef: TemplateRef<T>;
+    /** Context data to be added to the placeholder template instance. */
+    data: T;
+    constructor(templateRef: TemplateRef<T>);
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-placeholder.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-placeholder.d.ts","sources":["drag-placeholder.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { TemplateRef, InjectionToken } from '@angular/core';\n/**\n * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport declare const CDK_DRAG_PLACEHOLDER: InjectionToken<CdkDragPlaceholder<any>>;\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\nexport declare class CdkDragPlaceholder<T = any> {\n    templateRef: TemplateRef<T>;\n    /** Context data to be added to the placeholder template instance. */\n    data: T;\n    constructor(templateRef: TemplateRef<T>);\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -13,4 +13,5 @@
  * retention of the class and its directive metadata.
  */
+import * as ɵngcc0 from '@angular/core';
 export declare const CDK_DRAG_PREVIEW: InjectionToken<CdkDragPreview<any>>;
 /**
@@ -28,3 +29,7 @@
     constructor(templateRef: TemplateRef<T>);
     static ngAcceptInputType_matchSize: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDragPreview<any>, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDragPreview<any>, "ng-template[cdkDragPreview]", never, { "matchSize": "matchSize"; "data": "data"; }, {}, never>;
 }
+
+//# sourceMappingURL=drag-preview.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,30 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { BooleanInput } from '@angular/cdk/coercion';
+import { InjectionToken, TemplateRef } from '@angular/core';
+/**
+ * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as
+ * alternative token to the actual `CdkDragPreview` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+export declare const CDK_DRAG_PREVIEW: InjectionToken<CdkDragPreview<any>>;
+/**
+ * Element that will be used as a template for the preview
+ * of a CdkDrag when it is being dragged.
+ */
+export declare class CdkDragPreview<T = any> {
+    templateRef: TemplateRef<T>;
+    /** Context data to be added to the preview template instance. */
+    data: T;
+    /** Whether the preview should preserve the same size as the item that is being dragged. */
+    get matchSize(): boolean;
+    set matchSize(value: boolean);
+    private _matchSize;
+    constructor(templateRef: TemplateRef<T>);
+    static ngAcceptInputType_matchSize: BooleanInput;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag-preview.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-preview.d.ts","sources":["drag-preview.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { InjectionToken, TemplateRef } from '@angular/core';\n/**\n * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport declare const CDK_DRAG_PREVIEW: InjectionToken<CdkDragPreview<any>>;\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\nexport declare class CdkDragPreview<T = any> {\n    templateRef: TemplateRef<T>;\n    /** Context data to be added to the preview template instance. */\n    data: T;\n    /** Whether the preview should preserve the same size as the item that is being dragged. */\n    get matchSize(): boolean;\n    set matchSize(value: boolean);\n    private _matchSize;\n    constructor(templateRef: TemplateRef<T>);\n    static ngAcceptInputType_matchSize: BooleanInput;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -19,4 +19,5 @@
 import { DragDropConfig, DragStartDelay, DragAxis } from './config';
 /** Element that can be moved inside a CdkDropList container. */
+import * as ɵngcc0 from '@angular/core';
 export declare class CdkDrag<T = any> implements AfterViewInit, OnChanges, OnDestroy {
     /** Element that the draggable is attached to. */
@@ -156,3 +157,7 @@
     private _setupHandlesListener;
     static ngAcceptInputType_disabled: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDrag<any>, [null, { optional: true; skipSelf: true; }, null, null, null, { optional: true; }, { optional: true; }, null, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }]>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDrag<any>, "[cdkDrag]", ["cdkDrag"], { "disabled": "cdkDragDisabled"; "dragStartDelay": "cdkDragStartDelay"; "lockAxis": "cdkDragLockAxis"; "constrainPosition": "cdkDragConstrainPosition"; "previewClass": "cdkDragPreviewClass"; "boundaryElement": "cdkDragBoundary"; "rootElementSelector": "cdkDragRootElement"; "previewContainer": "cdkDragPreviewContainer"; "data": "cdkDragData"; "freeDragPosition": "cdkDragFreeDragPosition"; }, { "started": "cdkDragStarted"; "released": "cdkDragReleased"; "ended": "cdkDragEnded"; "entered": "cdkDragEntered"; "exited": "cdkDragExited"; "dropped": "cdkDragDropped"; "moved": "cdkDragMoved"; }, ["_previewTemplate", "_placeholderTemplate", "_handles"]>;
 }
+
+//# sourceMappingURL=drag.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,158 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { Directionality } from '@angular/cdk/bidi';
+import { AfterViewInit, ElementRef, EventEmitter, NgZone, OnDestroy, QueryList, ViewContainerRef, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
+import { BooleanInput } from '@angular/cdk/coercion';
+import { Observable } from 'rxjs';
+import { CdkDragDrop, CdkDragEnd, CdkDragEnter, CdkDragExit, CdkDragMove, CdkDragStart, CdkDragRelease } from '../drag-events';
+import { CdkDragHandle } from './drag-handle';
+import { CdkDragPlaceholder } from './drag-placeholder';
+import { CdkDragPreview } from './drag-preview';
+import { DragRef, Point, PreviewContainer } from '../drag-ref';
+import { CdkDropListInternal as CdkDropList } from './drop-list';
+import { DragDrop } from '../drag-drop';
+import { DragDropConfig, DragStartDelay, DragAxis } from './config';
+/** Element that can be moved inside a CdkDropList container. */
+export declare class CdkDrag<T = any> implements AfterViewInit, OnChanges, OnDestroy {
+    /** Element that the draggable is attached to. */
+    element: ElementRef<HTMLElement>;
+    /** Droppable container that the draggable is a part of. */
+    dropContainer: CdkDropList;
+    private _ngZone;
+    private _viewContainerRef;
+    private _dir;
+    private _changeDetectorRef;
+    private _selfHandle?;
+    private _parentDrag?;
+    private readonly _destroyed;
+    private static _dragInstances;
+    /** Reference to the underlying drag instance. */
+    _dragRef: DragRef<CdkDrag<T>>;
+    /** Elements that can be used to drag the draggable item. */
+    _handles: QueryList<CdkDragHandle>;
+    /** Element that will be used as a template to create the draggable item's preview. */
+    _previewTemplate: CdkDragPreview;
+    /** Template for placeholder element rendered to show where a draggable would be dropped. */
+    _placeholderTemplate: CdkDragPlaceholder;
+    /** Arbitrary data to attach to this drag instance. */
+    data: T;
+    /** Locks the position of the dragged element along the specified axis. */
+    lockAxis: DragAxis;
+    /**
+     * Selector that will be used to determine the root draggable element, starting from
+     * the `cdkDrag` element and going up the DOM. Passing an alternate root element is useful
+     * when trying to enable dragging on an element that you might not have access to.
+     */
+    rootElementSelector: string;
+    /**
+     * Node or selector that will be used to determine the element to which the draggable's
+     * position will be constrained. If a string is passed in, it'll be used as a selector that
+     * will be matched starting from the element's parent and going up the DOM until a match
+     * has been found.
+     */
+    boundaryElement: string | ElementRef<HTMLElement> | HTMLElement;
+    /**
+     * Amount of milliseconds to wait after the user has put their
+     * pointer down before starting to drag the element.
+     */
+    dragStartDelay: DragStartDelay;
+    /**
+     * Sets the position of a `CdkDrag` that is outside of a drop container.
+     * Can be used to restore the element's position for a returning user.
+     */
+    freeDragPosition: {
+        x: number;
+        y: number;
+    };
+    /** Whether starting to drag this element is disabled. */
+    get disabled(): boolean;
+    set disabled(value: boolean);
+    private _disabled;
+    /**
+     * Function that can be used to customize the logic of how the position of the drag item
+     * is limited while it's being dragged. Gets called with a point containing the current position
+     * of the user's pointer on the page and should return a point describing where the item should
+     * be rendered.
+     */
+    constrainPosition?: (point: Point, dragRef: DragRef) => Point;
+    /** Class to be added to the preview element. */
+    previewClass: string | string[];
+    /**
+     * Configures the place into which the preview of the item will be inserted. Can be configured
+     * globally through `CDK_DROP_LIST`. Possible values:
+     * - `global` - Preview will be inserted at the bottom of the `<body>`. The advantage is that
+     * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain
+     * its inherited styles.
+     * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that
+     * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be
+     * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors
+     * like `:nth-child` and some flexbox configurations.
+     * - `ElementRef<HTMLElement> | HTMLElement` - Preview will be inserted into a specific element.
+     * Same advantages and disadvantages as `parent`.
+     */
+    previewContainer: PreviewContainer;
+    /** Emits when the user starts dragging the item. */
+    readonly started: EventEmitter<CdkDragStart>;
+    /** Emits when the user has released a drag item, before any animations have started. */
+    readonly released: EventEmitter<CdkDragRelease>;
+    /** Emits when the user stops dragging an item in the container. */
+    readonly ended: EventEmitter<CdkDragEnd>;
+    /** Emits when the user has moved the item into a new container. */
+    readonly entered: EventEmitter<CdkDragEnter<any>>;
+    /** Emits when the user removes the item its container by dragging it into another container. */
+    readonly exited: EventEmitter<CdkDragExit<any>>;
+    /** Emits when the user drops the item inside a container. */
+    readonly dropped: EventEmitter<CdkDragDrop<any>>;
+    /**
+     * Emits as the user is dragging the item. Use with caution,
+     * because this event will fire for every pixel that the user has dragged.
+     */
+    readonly moved: Observable<CdkDragMove<T>>;
+    constructor(
+    /** Element that the draggable is attached to. */
+    element: ElementRef<HTMLElement>, 
+    /** Droppable container that the draggable is a part of. */
+    dropContainer: CdkDropList, 
+    /**
+     * @deprecated `_document` parameter no longer being used and will be removed.
+     * @breaking-change 12.0.0
+     */
+    _document: any, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, config: DragDropConfig, _dir: Directionality, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef, _selfHandle?: CdkDragHandle | undefined, _parentDrag?: CdkDrag<any> | undefined);
+    /**
+     * Returns the element that is being used as a placeholder
+     * while the current element is being dragged.
+     */
+    getPlaceholderElement(): HTMLElement;
+    /** Returns the root draggable element. */
+    getRootElement(): HTMLElement;
+    /** Resets a standalone drag item to its initial position. */
+    reset(): void;
+    /**
+     * Gets the pixel coordinates of the draggable outside of a drop container.
+     */
+    getFreeDragPosition(): {
+        readonly x: number;
+        readonly y: number;
+    };
+    ngAfterViewInit(): void;
+    ngOnChanges(changes: SimpleChanges): void;
+    ngOnDestroy(): void;
+    /** Syncs the root element with the `DragRef`. */
+    private _updateRootElement;
+    /** Gets the boundary element, based on the `boundaryElement` value. */
+    private _getBoundaryElement;
+    /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */
+    private _syncInputs;
+    /** Handles the events from the underlying `DragRef`. */
+    private _handleEvents;
+    /** Assigns the default input values based on a provided config object. */
+    private _assignDefaults;
+    /** Sets up the listener that syncs the handles with the drag ref. */
+    private _setupHandlesListener;
+    static ngAcceptInputType_disabled: BooleanInput;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drag.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag.d.ts","sources":["drag.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { AfterViewInit, ElementRef, EventEmitter, NgZone, OnDestroy, QueryList, ViewContainerRef, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { Observable } from 'rxjs';\nimport { CdkDragDrop, CdkDragEnd, CdkDragEnter, CdkDragExit, CdkDragMove, CdkDragStart, CdkDragRelease } from '../drag-events';\nimport { CdkDragHandle } from './drag-handle';\nimport { CdkDragPlaceholder } from './drag-placeholder';\nimport { CdkDragPreview } from './drag-preview';\nimport { DragRef, Point, PreviewContainer } from '../drag-ref';\nimport { CdkDropListInternal as CdkDropList } from './drop-list';\nimport { DragDrop } from '../drag-drop';\nimport { DragDropConfig, DragStartDelay, DragAxis } from './config';\n/** Element that can be moved inside a CdkDropList container. */\nexport declare class CdkDrag<T = any> implements AfterViewInit, OnChanges, OnDestroy {\n    /** Element that the draggable is attached to. */\n    element: ElementRef<HTMLElement>;\n    /** Droppable container that the draggable is a part of. */\n    dropContainer: CdkDropList;\n    private _ngZone;\n    private _viewContainerRef;\n    private _dir;\n    private _changeDetectorRef;\n    private _selfHandle?;\n    private _parentDrag?;\n    private readonly _destroyed;\n    private static _dragInstances;\n    /** Reference to the underlying drag instance. */\n    _dragRef: DragRef<CdkDrag<T>>;\n    /** Elements that can be used to drag the draggable item. */\n    _handles: QueryList<CdkDragHandle>;\n    /** Element that will be used as a template to create the draggable item's preview. */\n    _previewTemplate: CdkDragPreview;\n    /** Template for placeholder element rendered to show where a draggable would be dropped. */\n    _placeholderTemplate: CdkDragPlaceholder;\n    /** Arbitrary data to attach to this drag instance. */\n    data: T;\n    /** Locks the position of the dragged element along the specified axis. */\n    lockAxis: DragAxis;\n    /**\n     * Selector that will be used to determine the root draggable element, starting from\n     * the `cdkDrag` element and going up the DOM. Passing an alternate root element is useful\n     * when trying to enable dragging on an element that you might not have access to.\n     */\n    rootElementSelector: string;\n    /**\n     * Node or selector that will be used to determine the element to which the draggable's\n     * position will be constrained. If a string is passed in, it'll be used as a selector that\n     * will be matched starting from the element's parent and going up the DOM until a match\n     * has been found.\n     */\n    boundaryElement: string | ElementRef<HTMLElement> | HTMLElement;\n    /**\n     * Amount of milliseconds to wait after the user has put their\n     * pointer down before starting to drag the element.\n     */\n    dragStartDelay: DragStartDelay;\n    /**\n     * Sets the position of a `CdkDrag` that is outside of a drop container.\n     * Can be used to restore the element's position for a returning user.\n     */\n    freeDragPosition: {\n        x: number;\n        y: number;\n    };\n    /** Whether starting to drag this element is disabled. */\n    get disabled(): boolean;\n    set disabled(value: boolean);\n    private _disabled;\n    /**\n     * Function that can be used to customize the logic of how the position of the drag item\n     * is limited while it's being dragged. Gets called with a point containing the current position\n     * of the user's pointer on the page and should return a point describing where the item should\n     * be rendered.\n     */\n    constrainPosition?: (point: Point, dragRef: DragRef) => Point;\n    /** Class to be added to the preview element. */\n    previewClass: string | string[];\n    /**\n     * Configures the place into which the preview of the item will be inserted. Can be configured\n     * globally through `CDK_DROP_LIST`. Possible values:\n     * - `global` - Preview will be inserted at the bottom of the `<body>`. The advantage is that\n     * you don't have to worry about `overflow: hidden` or `z-index`, but the item won't retain\n     * its inherited styles.\n     * - `parent` - Preview will be inserted into the parent of the drag item. The advantage is that\n     * inherited styles will be preserved, but it may be clipped by `overflow: hidden` or not be\n     * visible due to `z-index`. Furthermore, the preview is going to have an effect over selectors\n     * like `:nth-child` and some flexbox configurations.\n     * - `ElementRef<HTMLElement> | HTMLElement` - Preview will be inserted into a specific element.\n     * Same advantages and disadvantages as `parent`.\n     */\n    previewContainer: PreviewContainer;\n    /** Emits when the user starts dragging the item. */\n    readonly started: EventEmitter<CdkDragStart>;\n    /** Emits when the user has released a drag item, before any animations have started. */\n    readonly released: EventEmitter<CdkDragRelease>;\n    /** Emits when the user stops dragging an item in the container. */\n    readonly ended: EventEmitter<CdkDragEnd>;\n    /** Emits when the user has moved the item into a new container. */\n    readonly entered: EventEmitter<CdkDragEnter<any>>;\n    /** Emits when the user removes the item its container by dragging it into another container. */\n    readonly exited: EventEmitter<CdkDragExit<any>>;\n    /** Emits when the user drops the item inside a container. */\n    readonly dropped: EventEmitter<CdkDragDrop<any>>;\n    /**\n     * Emits as the user is dragging the item. Use with caution,\n     * because this event will fire for every pixel that the user has dragged.\n     */\n    readonly moved: Observable<CdkDragMove<T>>;\n    constructor(\n    /** Element that the draggable is attached to. */\n    element: ElementRef<HTMLElement>, \n    /** Droppable container that the draggable is a part of. */\n    dropContainer: CdkDropList, \n    /**\n     * @deprecated `_document` parameter no longer being used and will be removed.\n     * @breaking-change 12.0.0\n     */\n    _document: any, _ngZone: NgZone, _viewContainerRef: ViewContainerRef, config: DragDropConfig, _dir: Directionality, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef, _selfHandle?: CdkDragHandle | undefined, _parentDrag?: CdkDrag<any> | undefined);\n    /**\n     * Returns the element that is being used as a placeholder\n     * while the current element is being dragged.\n     */\n    getPlaceholderElement(): HTMLElement;\n    /** Returns the root draggable element. */\n    getRootElement(): HTMLElement;\n    /** Resets a standalone drag item to its initial position. */\n    reset(): void;\n    /**\n     * Gets the pixel coordinates of the draggable outside of a drop container.\n     */\n    getFreeDragPosition(): {\n        readonly x: number;\n        readonly y: number;\n    };\n    ngAfterViewInit(): void;\n    ngOnChanges(changes: SimpleChanges): void;\n    ngOnDestroy(): void;\n    /** Syncs the root element with the `DragRef`. */\n    private _updateRootElement;\n    /** Gets the boundary element, based on the `boundaryElement` value. */\n    private _getBoundaryElement;\n    /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n    private _syncInputs;\n    /** Handles the events from the underlying `DragRef`. */\n    private _handleEvents;\n    /** Assigns the default input values based on a provided config object. */\n    private _assignDefaults;\n    /** Sets up the listener that syncs the handles with the drag ref. */\n    private _setupHandlesListener;\n    static ngAcceptInputType_disabled: BooleanInput;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -13,4 +13,5 @@
  * retention of the class and its directive metadata.
  */
+import * as ɵngcc0 from '@angular/core';
 export declare const CDK_DROP_LIST_GROUP: InjectionToken<CdkDropListGroup<unknown>>;
 /**
@@ -29,3 +30,7 @@
     ngOnDestroy(): void;
     static ngAcceptInputType_disabled: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDropListGroup<any>, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDropListGroup<any>, "[cdkDropListGroup]", ["cdkDropListGroup"], { "disabled": "cdkDropListGroupDisabled"; }, {}, never>;
 }
+
+//# sourceMappingURL=drop-list-group.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,31 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { OnDestroy, InjectionToken } from '@angular/core';
+import { BooleanInput } from '@angular/cdk/coercion';
+/**
+ * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as
+ * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+export declare const CDK_DROP_LIST_GROUP: InjectionToken<CdkDropListGroup<unknown>>;
+/**
+ * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`
+ * elements that are placed inside a `cdkDropListGroup` will be connected to each other
+ * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input
+ * from `cdkDropList`.
+ */
+export declare class CdkDropListGroup<T> implements OnDestroy {
+    /** Drop lists registered inside the group. */
+    readonly _items: Set<T>;
+    /** Whether starting a dragging sequence from inside this group is disabled. */
+    get disabled(): boolean;
+    set disabled(value: boolean);
+    private _disabled;
+    ngOnDestroy(): void;
+    static ngAcceptInputType_disabled: BooleanInput;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list-group.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drop-list-group.d.ts","sources":["drop-list-group.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { OnDestroy, InjectionToken } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n/**\n * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport declare const CDK_DROP_LIST_GROUP: InjectionToken<CdkDropListGroup<unknown>>;\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\nexport declare class CdkDropListGroup<T> implements OnDestroy {\n    /** Drop lists registered inside the group. */\n    readonly _items: Set<T>;\n    /** Whether starting a dragging sequence from inside this group is disabled. */\n    get disabled(): boolean;\n    set disabled(value: boolean);\n    private _disabled;\n    ngOnDestroy(): void;\n    static ngAcceptInputType_disabled: BooleanInput;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -21,4 +21,5 @@
  * @docs-private
  */
+import * as ɵngcc0 from '@angular/core';
 export interface CdkDropListInternal extends CdkDropList {
 }
@@ -122,3 +123,7 @@
     static ngAcceptInputType_autoScrollDisabled: BooleanInput;
     static ngAcceptInputType_autoScrollStep: NumberInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<CdkDropList<any>, [null, null, null, null, { optional: true; }, { optional: true; skipSelf: true; }, { optional: true; }]>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<CdkDropList<any>, "[cdkDropList], cdk-drop-list", ["cdkDropList"], { "connectedTo": "cdkDropListConnectedTo"; "id": "id"; "enterPredicate": "cdkDropListEnterPredicate"; "sortPredicate": "cdkDropListSortPredicate"; "disabled": "cdkDropListDisabled"; "sortingDisabled": "cdkDropListSortingDisabled"; "autoScrollDisabled": "cdkDropListAutoScrollDisabled"; "orientation": "cdkDropListOrientation"; "lockAxis": "cdkDropListLockAxis"; "data": "cdkDropListData"; "autoScrollStep": "cdkDropListAutoScrollStep"; }, { "dropped": "cdkDropListDropped"; "entered": "cdkDropListEntered"; "exited": "cdkDropListExited"; "sorted": "cdkDropListSorted"; }, never>;
 }
+
+//# sourceMappingURL=drop-list.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,124 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
+import { ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, InjectionToken } from '@angular/core';
+import { Directionality } from '@angular/cdk/bidi';
+import { ScrollDispatcher } from '@angular/cdk/scrolling';
+import { CdkDrag } from './drag';
+import { CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDragSortEvent } from '../drag-events';
+import { CdkDropListGroup } from './drop-list-group';
+import { DropListRef } from '../drop-list-ref';
+import { DragDrop } from '../drag-drop';
+import { DropListOrientation, DragAxis, DragDropConfig } from './config';
+/**
+ * Internal compile-time-only representation of a `CdkDropList`.
+ * Used to avoid circular import issues between the `CdkDropList` and the `CdkDrag`.
+ * @docs-private
+ */
+export interface CdkDropListInternal extends CdkDropList {
+}
+/**
+ * Injection token that can be used to reference instances of `CdkDropList`. It serves as
+ * alternative token to the actual `CdkDropList` class which could cause unnecessary
+ * retention of the class and its directive metadata.
+ */
+export declare const CDK_DROP_LIST: InjectionToken<CdkDropList<any>>;
+/** Container that wraps a set of draggable items. */
+export declare class CdkDropList<T = any> implements OnDestroy {
+    /** Element that the drop list is attached to. */
+    element: ElementRef<HTMLElement>;
+    private _changeDetectorRef;
+    private _scrollDispatcher;
+    private _dir?;
+    private _group?;
+    /** Emits when the list has been destroyed. */
+    private readonly _destroyed;
+    /** Whether the element's scrollable parents have been resolved. */
+    private _scrollableParentsResolved;
+    /** Keeps track of the drop lists that are currently on the page. */
+    private static _dropLists;
+    /** Reference to the underlying drop list instance. */
+    _dropListRef: DropListRef<CdkDropList<T>>;
+    /**
+     * Other draggable containers that this container is connected to and into which the
+     * container's items can be transferred. Can either be references to other drop containers,
+     * or their unique IDs.
+     */
+    connectedTo: (CdkDropList | string)[] | CdkDropList | string;
+    /** Arbitrary data to attach to this container. */
+    data: T;
+    /** Direction in which the list is oriented. */
+    orientation: DropListOrientation;
+    /**
+     * Unique ID for the drop zone. Can be used as a reference
+     * in the `connectedTo` of another `CdkDropList`.
+     */
+    id: string;
+    /** Locks the position of the draggable elements inside the container along the specified axis. */
+    lockAxis: DragAxis;
+    /** Whether starting a dragging sequence from this container is disabled. */
+    get disabled(): boolean;
+    set disabled(value: boolean);
+    private _disabled;
+    /** Whether sorting within this drop list is disabled. */
+    sortingDisabled: boolean;
+    /**
+     * Function that is used to determine whether an item
+     * is allowed to be moved into a drop container.
+     */
+    enterPredicate: (drag: CdkDrag, drop: CdkDropList) => boolean;
+    /** Functions that is used to determine whether an item can be sorted into a particular index. */
+    sortPredicate: (index: number, drag: CdkDrag, drop: CdkDropList) => boolean;
+    /** Whether to auto-scroll the view when the user moves their pointer close to the edges. */
+    autoScrollDisabled: boolean;
+    /** Number of pixels to scroll for each frame when auto-scrolling an element. */
+    autoScrollStep: number;
+    /** Emits when the user drops an item inside the container. */
+    readonly dropped: EventEmitter<CdkDragDrop<T, any>>;
+    /**
+     * Emits when the user has moved a new drag item into this container.
+     */
+    readonly entered: EventEmitter<CdkDragEnter<T>>;
+    /**
+     * Emits when the user removes an item from the container
+     * by dragging it into another container.
+     */
+    readonly exited: EventEmitter<CdkDragExit<T>>;
+    /** Emits as the user is swapping items while actively dragging. */
+    readonly sorted: EventEmitter<CdkDragSortEvent<T>>;
+    /**
+     * Keeps track of the items that are registered with this container. Historically we used to
+     * do this with a `ContentChildren` query, however queries don't handle transplanted views very
+     * well which means that we can't handle cases like dragging the headers of a `mat-table`
+     * correctly. What we do instead is to have the items register themselves with the container
+     * and then we sort them based on their position in the DOM.
+     */
+    private _unsortedItems;
+    constructor(
+    /** Element that the drop list is attached to. */
+    element: ElementRef<HTMLElement>, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef, _scrollDispatcher: ScrollDispatcher, _dir?: Directionality | undefined, _group?: CdkDropListGroup<CdkDropList<any>> | undefined, config?: DragDropConfig);
+    /** Registers an items with the drop list. */
+    addItem(item: CdkDrag): void;
+    /** Removes an item from the drop list. */
+    removeItem(item: CdkDrag): void;
+    /** Gets the registered items in the list, sorted by their position in the DOM. */
+    getSortedItems(): CdkDrag[];
+    ngOnDestroy(): void;
+    /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */
+    private _setupInputSyncSubscription;
+    /** Handles events from the underlying DropListRef. */
+    private _handleEvents;
+    /** Assigns the default input values based on a provided config object. */
+    private _assignDefaults;
+    /** Syncs up the registered drag items with underlying drop list ref. */
+    private _syncItemsWithRef;
+    static ngAcceptInputType_disabled: BooleanInput;
+    static ngAcceptInputType_sortingDisabled: BooleanInput;
+    static ngAcceptInputType_autoScrollDisabled: BooleanInput;
+    static ngAcceptInputType_autoScrollStep: NumberInput;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/directives/drop-list.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drop-list.d.ts","sources":["drop-list.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, InjectionToken } from '@angular/core';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { CdkDrag } from './drag';\nimport { CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDragSortEvent } from '../drag-events';\nimport { CdkDropListGroup } from './drop-list-group';\nimport { DropListRef } from '../drop-list-ref';\nimport { DragDrop } from '../drag-drop';\nimport { DropListOrientation, DragAxis, DragDropConfig } from './config';\n/**\n * Internal compile-time-only representation of a `CdkDropList`.\n * Used to avoid circular import issues between the `CdkDropList` and the `CdkDrag`.\n * @docs-private\n */\nexport interface CdkDropListInternal extends CdkDropList {\n}\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport declare const CDK_DROP_LIST: InjectionToken<CdkDropList<any>>;\n/** Container that wraps a set of draggable items. */\nexport declare class CdkDropList<T = any> implements OnDestroy {\n    /** Element that the drop list is attached to. */\n    element: ElementRef<HTMLElement>;\n    private _changeDetectorRef;\n    private _scrollDispatcher;\n    private _dir?;\n    private _group?;\n    /** Emits when the list has been destroyed. */\n    private readonly _destroyed;\n    /** Whether the element's scrollable parents have been resolved. */\n    private _scrollableParentsResolved;\n    /** Keeps track of the drop lists that are currently on the page. */\n    private static _dropLists;\n    /** Reference to the underlying drop list instance. */\n    _dropListRef: DropListRef<CdkDropList<T>>;\n    /**\n     * Other draggable containers that this container is connected to and into which the\n     * container's items can be transferred. Can either be references to other drop containers,\n     * or their unique IDs.\n     */\n    connectedTo: (CdkDropList | string)[] | CdkDropList | string;\n    /** Arbitrary data to attach to this container. */\n    data: T;\n    /** Direction in which the list is oriented. */\n    orientation: DropListOrientation;\n    /**\n     * Unique ID for the drop zone. Can be used as a reference\n     * in the `connectedTo` of another `CdkDropList`.\n     */\n    id: string;\n    /** Locks the position of the draggable elements inside the container along the specified axis. */\n    lockAxis: DragAxis;\n    /** Whether starting a dragging sequence from this container is disabled. */\n    get disabled(): boolean;\n    set disabled(value: boolean);\n    private _disabled;\n    /** Whether sorting within this drop list is disabled. */\n    sortingDisabled: boolean;\n    /**\n     * Function that is used to determine whether an item\n     * is allowed to be moved into a drop container.\n     */\n    enterPredicate: (drag: CdkDrag, drop: CdkDropList) => boolean;\n    /** Functions that is used to determine whether an item can be sorted into a particular index. */\n    sortPredicate: (index: number, drag: CdkDrag, drop: CdkDropList) => boolean;\n    /** Whether to auto-scroll the view when the user moves their pointer close to the edges. */\n    autoScrollDisabled: boolean;\n    /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n    autoScrollStep: number;\n    /** Emits when the user drops an item inside the container. */\n    readonly dropped: EventEmitter<CdkDragDrop<T, any>>;\n    /**\n     * Emits when the user has moved a new drag item into this container.\n     */\n    readonly entered: EventEmitter<CdkDragEnter<T>>;\n    /**\n     * Emits when the user removes an item from the container\n     * by dragging it into another container.\n     */\n    readonly exited: EventEmitter<CdkDragExit<T>>;\n    /** Emits as the user is swapping items while actively dragging. */\n    readonly sorted: EventEmitter<CdkDragSortEvent<T>>;\n    /**\n     * Keeps track of the items that are registered with this container. Historically we used to\n     * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n     * well which means that we can't handle cases like dragging the headers of a `mat-table`\n     * correctly. What we do instead is to have the items register themselves with the container\n     * and then we sort them based on their position in the DOM.\n     */\n    private _unsortedItems;\n    constructor(\n    /** Element that the drop list is attached to. */\n    element: ElementRef<HTMLElement>, dragDrop: DragDrop, _changeDetectorRef: ChangeDetectorRef, _scrollDispatcher: ScrollDispatcher, _dir?: Directionality | undefined, _group?: CdkDropListGroup<CdkDropList<any>> | undefined, config?: DragDropConfig);\n    /** Registers an items with the drop list. */\n    addItem(item: CdkDrag): void;\n    /** Removes an item from the drop list. */\n    removeItem(item: CdkDrag): void;\n    /** Gets the registered items in the list, sorted by their position in the DOM. */\n    getSortedItems(): CdkDrag[];\n    ngOnDestroy(): void;\n    /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n    private _setupInputSyncSubscription;\n    /** Handles events from the underlying DropListRef. */\n    private _handleEvents;\n    /** Assigns the default input values based on a provided config object. */\n    private _assignDefaults;\n    /** Syncs up the registered drag items with underlying drop list ref. */\n    private _syncItemsWithRef;\n    static ngAcceptInputType_disabled: BooleanInput;\n    static ngAcceptInputType_sortingDisabled: BooleanInput;\n    static ngAcceptInputType_autoScrollDisabled: BooleanInput;\n    static ngAcceptInputType_autoScrollStep: NumberInput;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -6,4 +6,17 @@
  * found in the LICENSE file at https://angular.io/license
  */
+import * as ɵngcc0 from '@angular/core';
+import * as ɵngcc1 from './directives/drop-list';
+import * as ɵngcc2 from './directives/drop-list-group';
+import * as ɵngcc3 from './directives/drag';
+import * as ɵngcc4 from './directives/drag-handle';
+import * as ɵngcc5 from './directives/drag-preview';
+import * as ɵngcc6 from './directives/drag-placeholder';
+import * as ɵngcc7 from '@angular/cdk/scrolling';
 export declare class DragDropModule {
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<DragDropModule, never>;
+    static ɵmod: ɵngcc0.ɵɵNgModuleDeclaration<DragDropModule, [typeof ɵngcc1.CdkDropList, typeof ɵngcc2.CdkDropListGroup, typeof ɵngcc3.CdkDrag, typeof ɵngcc4.CdkDragHandle, typeof ɵngcc5.CdkDragPreview, typeof ɵngcc6.CdkDragPlaceholder], never, [typeof ɵngcc7.CdkScrollableModule, typeof ɵngcc1.CdkDropList, typeof ɵngcc2.CdkDropListGroup, typeof ɵngcc3.CdkDrag, typeof ɵngcc4.CdkDragHandle, typeof ɵngcc5.CdkDragPreview, typeof ɵngcc6.CdkDragPlaceholder]>;
+    static ɵinj: ɵngcc0.ɵɵInjectorDeclaration<DragDropModule>;
 }
+
+//# sourceMappingURL=drag-drop-module.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,9 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+export declare class DragDropModule {
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-module.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-drop-module.d.ts","sources":["drag-drop-module.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AACA;;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport declare class DragDropModule {\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -13,4 +13,5 @@
  * @docs-private
  */
+import * as ɵngcc0 from '@angular/core';
 export declare class DragDropRegistry<I extends {
     isDragging(): boolean;
@@ -84,3 +85,6 @@
     /** Clears out the global event listeners from the `document`. */
     private _clearGlobalListeners;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<DragDropRegistry<any, any>, never>;
 }
+
+//# sourceMappingURL=drag-drop-registry.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,86 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { NgZone, OnDestroy } from '@angular/core';
+import { Observable, Subject } from 'rxjs';
+/**
+ * Service that keeps track of all the drag item and drop container
+ * instances, and manages global event listeners on the `document`.
+ * @docs-private
+ */
+export declare class DragDropRegistry<I extends {
+    isDragging(): boolean;
+}, C> implements OnDestroy {
+    private _ngZone;
+    private _document;
+    /** Registered drop container instances. */
+    private _dropInstances;
+    /** Registered drag item instances. */
+    private _dragInstances;
+    /** Drag item instances that are currently being dragged. */
+    private _activeDragInstances;
+    /** Keeps track of the event listeners that we've bound to the `document`. */
+    private _globalListeners;
+    /**
+     * Predicate function to check if an item is being dragged.  Moved out into a property,
+     * because it'll be called a lot and we don't want to create a new function every time.
+     */
+    private _draggingPredicate;
+    /**
+     * Emits the `touchmove` or `mousemove` events that are dispatched
+     * while the user is dragging a drag item instance.
+     */
+    readonly pointerMove: Subject<TouchEvent | MouseEvent>;
+    /**
+     * Emits the `touchend` or `mouseup` events that are dispatched
+     * while the user is dragging a drag item instance.
+     */
+    readonly pointerUp: Subject<TouchEvent | MouseEvent>;
+    /**
+     * Emits when the viewport has been scrolled while the user is dragging an item.
+     * @deprecated To be turned into a private member. Use the `scrolled` method instead.
+     * @breaking-change 13.0.0
+     */
+    readonly scroll: Subject<Event>;
+    constructor(_ngZone: NgZone, _document: any);
+    /** Adds a drop container to the registry. */
+    registerDropContainer(drop: C): void;
+    /** Adds a drag item instance to the registry. */
+    registerDragItem(drag: I): void;
+    /** Removes a drop container from the registry. */
+    removeDropContainer(drop: C): void;
+    /** Removes a drag item instance from the registry. */
+    removeDragItem(drag: I): void;
+    /**
+     * Starts the dragging sequence for a drag instance.
+     * @param drag Drag instance which is being dragged.
+     * @param event Event that initiated the dragging.
+     */
+    startDragging(drag: I, event: TouchEvent | MouseEvent): void;
+    /** Stops dragging a drag item instance. */
+    stopDragging(drag: I): void;
+    /** Gets whether a drag item instance is currently being dragged. */
+    isDragging(drag: I): boolean;
+    /**
+     * Gets a stream that will emit when any element on the page is scrolled while an item is being
+     * dragged.
+     * @param shadowRoot Optional shadow root that the current dragging sequence started from.
+     *   Top-level listeners won't pick up events coming from the shadow DOM so this parameter can
+     *   be used to include an additional top-level listener at the shadow root level.
+     */
+    scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable<Event>;
+    ngOnDestroy(): void;
+    /**
+     * Event listener that will prevent the default browser action while the user is dragging.
+     * @param event Event whose default action should be prevented.
+     */
+    private _preventDefaultWhileDragging;
+    /** Event listener for `touchmove` that is bound even if no dragging is happening. */
+    private _persistentTouchmoveListener;
+    /** Clears out the global event listeners from the `document`. */
+    private _clearGlobalListeners;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop-registry.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-drop-registry.d.ts","sources":["drag-drop-registry.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgZone, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\nexport declare class DragDropRegistry<I extends {\n    isDragging(): boolean;\n}, C> implements OnDestroy {\n    private _ngZone;\n    private _document;\n    /** Registered drop container instances. */\n    private _dropInstances;\n    /** Registered drag item instances. */\n    private _dragInstances;\n    /** Drag item instances that are currently being dragged. */\n    private _activeDragInstances;\n    /** Keeps track of the event listeners that we've bound to the `document`. */\n    private _globalListeners;\n    /**\n     * Predicate function to check if an item is being dragged.  Moved out into a property,\n     * because it'll be called a lot and we don't want to create a new function every time.\n     */\n    private _draggingPredicate;\n    /**\n     * Emits the `touchmove` or `mousemove` events that are dispatched\n     * while the user is dragging a drag item instance.\n     */\n    readonly pointerMove: Subject<TouchEvent | MouseEvent>;\n    /**\n     * Emits the `touchend` or `mouseup` events that are dispatched\n     * while the user is dragging a drag item instance.\n     */\n    readonly pointerUp: Subject<TouchEvent | MouseEvent>;\n    /**\n     * Emits when the viewport has been scrolled while the user is dragging an item.\n     * @deprecated To be turned into a private member. Use the `scrolled` method instead.\n     * @breaking-change 13.0.0\n     */\n    readonly scroll: Subject<Event>;\n    constructor(_ngZone: NgZone, _document: any);\n    /** Adds a drop container to the registry. */\n    registerDropContainer(drop: C): void;\n    /** Adds a drag item instance to the registry. */\n    registerDragItem(drag: I): void;\n    /** Removes a drop container from the registry. */\n    removeDropContainer(drop: C): void;\n    /** Removes a drag item instance from the registry. */\n    removeDragItem(drag: I): void;\n    /**\n     * Starts the dragging sequence for a drag instance.\n     * @param drag Drag instance which is being dragged.\n     * @param event Event that initiated the dragging.\n     */\n    startDragging(drag: I, event: TouchEvent | MouseEvent): void;\n    /** Stops dragging a drag item instance. */\n    stopDragging(drag: I): void;\n    /** Gets whether a drag item instance is currently being dragged. */\n    isDragging(drag: I): boolean;\n    /**\n     * Gets a stream that will emit when any element on the page is scrolled while an item is being\n     * dragged.\n     * @param shadowRoot Optional shadow root that the current dragging sequence started from.\n     *   Top-level listeners won't pick up events coming from the shadow DOM so this parameter can\n     *   be used to include an additional top-level listener at the shadow root level.\n     */\n    scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable<Event>;\n    ngOnDestroy(): void;\n    /**\n     * Event listener that will prevent the default browser action while the user is dragging.\n     * @param event Event whose default action should be prevented.\n     */\n    private _preventDefaultWhileDragging;\n    /** Event listener for `touchmove` that is bound even if no dragging is happening. */\n    private _persistentTouchmoveListener;\n    /** Clears out the global event listeners from the `document`. */\n    private _clearGlobalListeners;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -14,4 +14,5 @@
  * Service that allows for drag-and-drop functionality to be attached to DOM elements.
  */
+import * as ɵngcc0 from '@angular/core';
 export declare class DragDrop {
     private _document;
@@ -31,3 +32,6 @@
      */
     createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DropListRef<T>;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<DragDrop, never>;
 }
+
+//# sourceMappingURL=drag-drop.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,33 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { NgZone, ElementRef } from '@angular/core';
+import { ViewportRuler } from '@angular/cdk/scrolling';
+import { DragRef, DragRefConfig } from './drag-ref';
+import { DropListRef } from './drop-list-ref';
+import { DragDropRegistry } from './drag-drop-registry';
+/**
+ * Service that allows for drag-and-drop functionality to be attached to DOM elements.
+ */
+export declare class DragDrop {
+    private _document;
+    private _ngZone;
+    private _viewportRuler;
+    private _dragDropRegistry;
+    constructor(_document: any, _ngZone: NgZone, _viewportRuler: ViewportRuler, _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>);
+    /**
+     * Turns an element into a draggable item.
+     * @param element Element to which to attach the dragging functionality.
+     * @param config Object used to configure the dragging behavior.
+     */
+    createDrag<T = any>(element: ElementRef<HTMLElement> | HTMLElement, config?: DragRefConfig): DragRef<T>;
+    /**
+     * Turns an element into a drop list.
+     * @param element Element to which to attach the drop list functionality.
+     */
+    createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DropListRef<T>;
+}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/drag-drop.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"drag-drop.d.ts","sources":["drag-drop.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { NgZone, ElementRef } from '@angular/core';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { DragRef, DragRefConfig } from './drag-ref';\nimport { DropListRef } from './drop-list-ref';\nimport { DragDropRegistry } from './drag-drop-registry';\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\nexport declare class DragDrop {\n    private _document;\n    private _ngZone;\n    private _viewportRuler;\n    private _dragDropRegistry;\n    constructor(_document: any, _ngZone: NgZone, _viewportRuler: ViewportRuler, _dragDropRegistry: DragDropRegistry<DragRef, DropListRef>);\n    /**\n     * Turns an element into a draggable item.\n     * @param element Element to which to attach the dragging functionality.\n     * @param config Object used to configure the dragging behavior.\n     */\n    createDrag<T = any>(element: ElementRef<HTMLElement> | HTMLElement, config?: DragRefConfig): DragRef<T>;\n    /**\n     * Turns an element into a drop list.\n     * @param element Element to which to attach the drop list functionality.\n     */\n    createDropList<T = any>(element: ElementRef<HTMLElement> | HTMLElement): DropListRef<T>;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -4,2 +4,4 @@
 export * from './public-api';
 export { CdkDropListInternal as ɵangular_material_src_cdk_drag_drop_drag_drop_a } from './directives/drop-list';
+
+//# sourceMappingURL=index.d.ts.map
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,5 @@
+/**
+ * Generated bundle index. Do not edit.
+ */
+export * from './public-api';
+export { CdkDropListInternal as ɵangular_material_src_cdk_drag_drop_drag_drop_a } from './directives/drop-list';
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/index.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.d.ts","sources":["index.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\nexport { CdkDropListInternal as ɵangular_material_src_cdk_drag_drop_drag_drop_a } from './directives/drop-list';\n"]}
Index: trip-planner-front/node_modules/@angular/cdk/drag-drop/package.json
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/drag-drop/package.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/drag-drop/package.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -2,8 +2,20 @@
   "name": "@angular/cdk/drag-drop",
   "main": "../bundles/cdk-drag-drop.umd.js",
+  "fesm2015_ivy_ngcc": "../__ivy_ngcc__/fesm2015/drag-drop.js",
   "fesm2015": "../fesm2015/drag-drop.js",
   "esm2015": "../esm2015/drag-drop/index.js",
   "typings": "./index.d.ts",
+  "module_ivy_ngcc": "../__ivy_ngcc__/fesm2015/drag-drop.js",
   "module": "../fesm2015/drag-drop.js",
-  "es2015": "../fesm2015/drag-drop.js"
+  "es2015_ivy_ngcc": "../__ivy_ngcc__/fesm2015/drag-drop.js",
+  "es2015": "../fesm2015/drag-drop.js",
+  "__processed_by_ivy_ngcc__": {
+    "es2015": "12.2.9",
+    "fesm2015": "12.2.9",
+    "module": "12.2.9",
+    "typings": "12.2.9"
+  },
+  "scripts": {
+    "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by NGCC. This is not allowed.\\nPlease delete and rebuild the package, without compiling with NGCC, before attempting to publish.\\nNote that NGCC may have been run by importing this package into another project that is being built with Ivy enabled.\\n')\" && exit 1"
+  }
 }
Index: trip-planner-front/node_modules/@angular/cdk/esm2015/version.js
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/esm2015/version.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/esm2015/version.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -8,4 +8,4 @@
 import { Version } from '@angular/core';
 /** Current version of the Angular Component Development Kit. */
-export const VERSION = new Version('12.2.9');
+export const VERSION = new Version('12.2.10');
 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1ZlcnNpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBBbmd1bGFyIENvbXBvbmVudCBEZXZlbG9wbWVudCBLaXQuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcwLjAuMC1QTEFDRUhPTERFUicpO1xuIl19
Index: trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -9,5 +9,5 @@
  */
 /** Current version of the Angular Component Development Kit. */
-const VERSION = new Version('12.2.9');
+const VERSION = new Version('12.2.10');
 
 /**
Index: trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/fesm2015/cdk.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"cdk.js","sources":["../../../../../../src/cdk/version.ts","../../../../../../src/cdk/public-api.ts","../../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('12.2.9');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;;;;;;;AAUA;MACa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB;;ACXtD;;;;;;;;ACAA;;;;;;;;;;"}
+{"version":3,"file":"cdk.js","sources":["../../../../../../src/cdk/version.ts","../../../../../../src/cdk/public-api.ts","../../../../../../src/cdk/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the Angular Component Development Kit. */\nexport const VERSION = new Version('12.2.10');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;;;;;;;AAUA;MACa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB;;ACXtD;;;;;;;;ACAA;;;;;;;;;;"}
Index: trip-planner-front/node_modules/@angular/cdk/package.json
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/package.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/package.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,5 +1,5 @@
 {
   "name": "@angular/cdk",
-  "version": "12.2.9",
+  "version": "12.2.10",
   "description": "Angular Material Component Development Kit",
   "repository": {
Index: trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.js
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -29,5 +29,5 @@
             // `@schematics/angular`, we use tilde instead of caret. This is default for Angular
             // dependencies in new CLI projects.
-            package_config_1.addPackageToPackageJson(host, '@angular/cdk', `~12.2.9`);
+            package_config_1.addPackageToPackageJson(host, '@angular/cdk', `~12.2.10`);
             // Add a task to run the package manager. This is necessary because we updated the
             // workspace "package.json" file and we want lock files to reflect the new version range.
Index: trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.mjs
===================================================================
--- trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.mjs	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/cdk/schematics/ng-add/index.mjs	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -29,5 +29,5 @@
             // `@schematics/angular`, we use tilde instead of caret. This is default for Angular
             // dependencies in new CLI projects.
-            package_config_1.addPackageToPackageJson(host, '@angular/cdk', `~12.2.9`);
+            package_config_1.addPackageToPackageJson(host, '@angular/cdk', `~12.2.10`);
             // Add a task to run the package manager. This is necessary because we updated the
             // workspace "package.json" file and we want lock files to reflect the new version range.
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1052 @@
+import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
+import { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';
+import { Platform, _getEventTarget } from '@angular/cdk/platform';
+import { InjectionToken, EventEmitter, Directive, ChangeDetectorRef, ElementRef, Inject, ViewChild, TemplateRef, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, forwardRef, ViewContainerRef, NgZone, Optional, Host, NgModule } from '@angular/core';
+import { mixinDisableRipple, MAT_OPTION_PARENT_COMPONENT, MAT_OPTGROUP, MatOption, MatOptionSelectionChange, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MatOptionModule, MatCommonModule } from '@angular/material/core';
+import { Subscription, Subject, defer, merge, of, fromEvent } from 'rxjs';
+import { DOCUMENT, CommonModule } from '@angular/common';
+import { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
+import { ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';
+import { Directionality } from '@angular/cdk/bidi';
+import { ESCAPE, hasModifierKey, ENTER, UP_ARROW, DOWN_ARROW, TAB } from '@angular/cdk/keycodes';
+import { TemplatePortal } from '@angular/cdk/portal';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { MatFormField, MAT_FORM_FIELD } from '@angular/material/form-field';
+import { take, switchMap, filter, map, tap, delay } from 'rxjs/operators';
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/**
+ * Autocomplete IDs need to be unique across components, so this counter exists outside of
+ * the component definition.
+ */
+import * as ɵngcc0 from '@angular/core';
+import * as ɵngcc1 from '@angular/cdk/platform';
+import * as ɵngcc2 from '@angular/common';
+import * as ɵngcc3 from '@angular/cdk/overlay';
+import * as ɵngcc4 from '@angular/cdk/bidi';
+import * as ɵngcc5 from '@angular/cdk/scrolling';
+import * as ɵngcc6 from '@angular/material/form-field';
+
+const _c0 = ["panel"];
+function MatAutocomplete_ng_template_0_Template(rf, ctx) { if (rf & 1) {
+    ɵngcc0.ɵɵelementStart(0, "div", 0, 1);
+    ɵngcc0.ɵɵprojection(2);
+    ɵngcc0.ɵɵelementEnd();
+} if (rf & 2) {
+    const formFieldId_r1 = ctx.id;
+    const ctx_r0 = ɵngcc0.ɵɵnextContext();
+    ɵngcc0.ɵɵproperty("id", ctx_r0.id)("ngClass", ctx_r0._classList);
+    ɵngcc0.ɵɵattribute("aria-label", ctx_r0.ariaLabel || null)("aria-labelledby", ctx_r0._getPanelAriaLabelledby(formFieldId_r1));
+} }
+const _c1 = ["*"];
+let _uniqueAutocompleteIdCounter = 0;
+/** Event object that is emitted when an autocomplete option is selected. */
+class MatAutocompleteSelectedEvent {
+    constructor(
+    /** Reference to the autocomplete panel that emitted the event. */
+    source, 
+    /** Option that was selected. */
+    option) {
+        this.source = source;
+        this.option = option;
+    }
+}
+// Boilerplate for applying mixins to MatAutocomplete.
+/** @docs-private */
+const _MatAutocompleteMixinBase = mixinDisableRipple(class {
+});
+/** Injection token to be used to override the default options for `mat-autocomplete`. */
+const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken('mat-autocomplete-default-options', {
+    providedIn: 'root',
+    factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,
+});
+/** @docs-private */
+function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {
+    return { autoActiveFirstOption: false };
+}
+/** Base class with all of the `MatAutocomplete` functionality. */
+class _MatAutocompleteBase extends _MatAutocompleteMixinBase {
+    constructor(_changeDetectorRef, _elementRef, defaults, platform) {
+        super();
+        this._changeDetectorRef = _changeDetectorRef;
+        this._elementRef = _elementRef;
+        this._activeOptionChanges = Subscription.EMPTY;
+        /** Whether the autocomplete panel should be visible, depending on option length. */
+        this.showPanel = false;
+        this._isOpen = false;
+        /** Function that maps an option's control value to its display value in the trigger. */
+        this.displayWith = null;
+        /** Event that is emitted whenever an option from the list is selected. */
+        this.optionSelected = new EventEmitter();
+        /** Event that is emitted when the autocomplete panel is opened. */
+        this.opened = new EventEmitter();
+        /** Event that is emitted when the autocomplete panel is closed. */
+        this.closed = new EventEmitter();
+        /** Emits whenever an option is activated using the keyboard. */
+        this.optionActivated = new EventEmitter();
+        this._classList = {};
+        /** Unique ID to be used by autocomplete trigger's "aria-owns" property. */
+        this.id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;
+        // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on
+        // Safari using VoiceOver. We should occasionally check back to see whether the bug
+        // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`
+        // option altogether.
+        this.inertGroups = (platform === null || platform === void 0 ? void 0 : platform.SAFARI) || false;
+        this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;
+    }
+    /** Whether the autocomplete panel is open. */
+    get isOpen() { return this._isOpen && this.showPanel; }
+    /**
+     * Whether the first option should be highlighted when the autocomplete panel is opened.
+     * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.
+     */
+    get autoActiveFirstOption() { return this._autoActiveFirstOption; }
+    set autoActiveFirstOption(value) {
+        this._autoActiveFirstOption = coerceBooleanProperty(value);
+    }
+    /**
+     * Takes classes set on the host mat-autocomplete element and applies them to the panel
+     * inside the overlay container to allow for easy styling.
+     */
+    set classList(value) {
+        if (value && value.length) {
+            this._classList = coerceStringArray(value).reduce((classList, className) => {
+                classList[className] = true;
+                return classList;
+            }, {});
+        }
+        else {
+            this._classList = {};
+        }
+        this._setVisibilityClasses(this._classList);
+        this._elementRef.nativeElement.className = '';
+    }
+    ngAfterContentInit() {
+        this._keyManager = new ActiveDescendantKeyManager(this.options).withWrap();
+        this._activeOptionChanges = this._keyManager.change.subscribe(index => {
+            if (this.isOpen) {
+                this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });
+            }
+        });
+        // Set the initial visibility state.
+        this._setVisibility();
+    }
+    ngOnDestroy() {
+        this._activeOptionChanges.unsubscribe();
+    }
+    /**
+     * Sets the panel scrollTop. This allows us to manually scroll to display options
+     * above or below the fold, as they are not actually being focused when active.
+     */
+    _setScrollTop(scrollTop) {
+        if (this.panel) {
+            this.panel.nativeElement.scrollTop = scrollTop;
+        }
+    }
+    /** Returns the panel's scrollTop. */
+    _getScrollTop() {
+        return this.panel ? this.panel.nativeElement.scrollTop : 0;
+    }
+    /** Panel should hide itself when the option list is empty. */
+    _setVisibility() {
+        this.showPanel = !!this.options.length;
+        this._setVisibilityClasses(this._classList);
+        this._changeDetectorRef.markForCheck();
+    }
+    /** Emits the `select` event. */
+    _emitSelectEvent(option) {
+        const event = new MatAutocompleteSelectedEvent(this, option);
+        this.optionSelected.emit(event);
+    }
+    /** Gets the aria-labelledby for the autocomplete panel. */
+    _getPanelAriaLabelledby(labelId) {
+        if (this.ariaLabel) {
+            return null;
+        }
+        const labelExpression = labelId ? labelId + ' ' : '';
+        return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;
+    }
+    /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */
+    _setVisibilityClasses(classList) {
+        classList[this._visibleClass] = this.showPanel;
+        classList[this._hiddenClass] = !this.showPanel;
+    }
+}
+_MatAutocompleteBase.ɵfac = function _MatAutocompleteBase_Factory(t) { return new (t || _MatAutocompleteBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform)); };
+_MatAutocompleteBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteBase, viewQuery: function _MatAutocompleteBase_Query(rf, ctx) { if (rf & 1) {
+        ɵngcc0.ɵɵviewQuery(TemplateRef, 7);
+        ɵngcc0.ɵɵviewQuery(_c0, 5);
+    } if (rf & 2) {
+        let _t;
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.panel = _t.first);
+    } }, inputs: { displayWith: "displayWith", autoActiveFirstOption: "autoActiveFirstOption", classList: ["class", "classList"], ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], panelWidth: "panelWidth" }, outputs: { optionSelected: "optionSelected", opened: "opened", closed: "closed", optionActivated: "optionActivated" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });
+_MatAutocompleteBase.ctorParameters = () => [
+    { type: ChangeDetectorRef },
+    { type: ElementRef },
+    { type: undefined, decorators: [{ type: Inject, args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,] }] },
+    { type: Platform }
+];
+_MatAutocompleteBase.propDecorators = {
+    template: [{ type: ViewChild, args: [TemplateRef, { static: true },] }],
+    panel: [{ type: ViewChild, args: ['panel',] }],
+    ariaLabel: [{ type: Input, args: ['aria-label',] }],
+    ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],
+    displayWith: [{ type: Input }],
+    autoActiveFirstOption: [{ type: Input }],
+    panelWidth: [{ type: Input }],
+    optionSelected: [{ type: Output }],
+    opened: [{ type: Output }],
+    closed: [{ type: Output }],
+    optionActivated: [{ type: Output }],
+    classList: [{ type: Input, args: ['class',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteBase, [{
+        type: Directive
+    }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]
+            }] }, { type: ɵngcc1.Platform }]; }, { displayWith: [{
+            type: Input
+        }], optionSelected: [{
+            type: Output
+        }], opened: [{
+            type: Output
+        }], closed: [{
+            type: Output
+        }], optionActivated: [{
+            type: Output
+        }], autoActiveFirstOption: [{
+            type: Input
+        }], classList: [{
+            type: Input,
+            args: ['class']
+        }], template: [{
+            type: ViewChild,
+            args: [TemplateRef, { static: true }]
+        }], panel: [{
+            type: ViewChild,
+            args: ['panel']
+        }], ariaLabel: [{
+            type: Input,
+            args: ['aria-label']
+        }], ariaLabelledby: [{
+            type: Input,
+            args: ['aria-labelledby']
+        }], panelWidth: [{
+            type: Input
+        }] }); })();
+class MatAutocomplete extends _MatAutocompleteBase {
+    constructor() {
+        super(...arguments);
+        this._visibleClass = 'mat-autocomplete-visible';
+        this._hiddenClass = 'mat-autocomplete-hidden';
+    }
+}
+MatAutocomplete.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocomplete_BaseFactory; return function MatAutocomplete_Factory(t) { return (ɵMatAutocomplete_BaseFactory || (ɵMatAutocomplete_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocomplete)))(t || MatAutocomplete); }; }();
+MatAutocomplete.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatAutocomplete, selectors: [["mat-autocomplete"]], contentQueries: function MatAutocomplete_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
+        ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, 5);
+        ɵngcc0.ɵɵcontentQuery(dirIndex, MatOption, 5);
+    } if (rf & 2) {
+        let _t;
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionGroups = _t);
+        ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.options = _t);
+    } }, hostAttrs: [1, "mat-autocomplete"], inputs: { disableRipple: "disableRipple" }, exportAs: ["matAutocomplete"], features: [ɵngcc0.ɵɵProvidersFeature([
+            { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }
+        ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 1, vars: 0, consts: [["role", "listbox", 1, "mat-autocomplete-panel", 3, "id", "ngClass"], ["panel", ""]], template: function MatAutocomplete_Template(rf, ctx) { if (rf & 1) {
+        ɵngcc0.ɵɵprojectionDef();
+        ɵngcc0.ɵɵtemplate(0, MatAutocomplete_ng_template_0_Template, 3, 4, "ng-template");
+    } }, directives: [ɵngcc2.NgClass], styles: [".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\n"], encapsulation: 2, changeDetection: 0 });
+MatAutocomplete.propDecorators = {
+    optionGroups: [{ type: ContentChildren, args: [MAT_OPTGROUP, { descendants: true },] }],
+    options: [{ type: ContentChildren, args: [MatOption, { descendants: true },] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocomplete, [{
+        type: Component,
+        args: [{
+                selector: 'mat-autocomplete',
+                template: "<ng-template let-formFieldId=\"id\">\n  <div class=\"mat-autocomplete-panel\"\n       role=\"listbox\"\n       [id]=\"id\"\n       [attr.aria-label]=\"ariaLabel || null\"\n       [attr.aria-labelledby]=\"_getPanelAriaLabelledby(formFieldId)\"\n       [ngClass]=\"_classList\"\n       #panel>\n    <ng-content></ng-content>\n  </div>\n</ng-template>\n",
+                encapsulation: ViewEncapsulation.None,
+                changeDetection: ChangeDetectionStrategy.OnPush,
+                exportAs: 'matAutocomplete',
+                inputs: ['disableRipple'],
+                host: {
+                    'class': 'mat-autocomplete'
+                },
+                providers: [
+                    { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }
+                ],
+                styles: [".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\n"]
+            }]
+    }], null, { optionGroups: [{
+            type: ContentChildren,
+            args: [MAT_OPTGROUP, { descendants: true }]
+        }], options: [{
+            type: ContentChildren,
+            args: [MatOption, { descendants: true }]
+        }] }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */
+class _MatAutocompleteOriginBase {
+    constructor(
+    /** Reference to the element on which the directive is applied. */
+    elementRef) {
+        this.elementRef = elementRef;
+    }
+}
+_MatAutocompleteOriginBase.ɵfac = function _MatAutocompleteOriginBase_Factory(t) { return new (t || _MatAutocompleteOriginBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };
+_MatAutocompleteOriginBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteOriginBase });
+_MatAutocompleteOriginBase.ctorParameters = () => [
+    { type: ElementRef }
+];
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteOriginBase, [{
+        type: Directive
+    }], function () { return [{ type: ɵngcc0.ElementRef }]; }, null); })();
+/**
+ * Directive applied to an element to make it usable
+ * as a connection point for an autocomplete panel.
+ */
+class MatAutocompleteOrigin extends _MatAutocompleteOriginBase {
+}
+MatAutocompleteOrigin.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocompleteOrigin_BaseFactory; return function MatAutocompleteOrigin_Factory(t) { return (ɵMatAutocompleteOrigin_BaseFactory || (ɵMatAutocompleteOrigin_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocompleteOrigin)))(t || MatAutocompleteOrigin); }; }();
+MatAutocompleteOrigin.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAutocompleteOrigin, selectors: [["", "matAutocompleteOrigin", ""]], exportAs: ["matAutocompleteOrigin"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteOrigin, [{
+        type: Directive,
+        args: [{
+                selector: '[matAutocompleteOrigin]',
+                exportAs: 'matAutocompleteOrigin'
+            }]
+    }], null, null); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/** Injection token that determines the scroll handling while the autocomplete panel is open. */
+const MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken('mat-autocomplete-scroll-strategy');
+/** @docs-private */
+function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay) {
+    return () => overlay.scrollStrategies.reposition();
+}
+/** @docs-private */
+const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {
+    provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,
+    deps: [Overlay],
+    useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,
+};
+/**
+ * Provider that allows the autocomplete to register as a ControlValueAccessor.
+ * @docs-private
+ */
+const MAT_AUTOCOMPLETE_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => MatAutocompleteTrigger),
+    multi: true
+};
+/**
+ * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.
+ * @docs-private
+ */
+function getMatAutocompleteMissingPanelError() {
+    return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +
+        'Make sure that the id passed to the `matAutocomplete` is correct and that ' +
+        'you\'re attempting to open it after the ngAfterContentInit hook.');
+}
+/** Base class with all of the `MatAutocompleteTrigger` functionality. */
+class _MatAutocompleteTriggerBase {
+    constructor(_element, _overlay, _viewContainerRef, _zone, _changeDetectorRef, scrollStrategy, _dir, _formField, _document, _viewportRuler, _defaults) {
+        this._element = _element;
+        this._overlay = _overlay;
+        this._viewContainerRef = _viewContainerRef;
+        this._zone = _zone;
+        this._changeDetectorRef = _changeDetectorRef;
+        this._dir = _dir;
+        this._formField = _formField;
+        this._document = _document;
+        this._viewportRuler = _viewportRuler;
+        this._defaults = _defaults;
+        this._componentDestroyed = false;
+        this._autocompleteDisabled = false;
+        /** Whether or not the label state is being overridden. */
+        this._manuallyFloatingLabel = false;
+        /** Subscription to viewport size changes. */
+        this._viewportSubscription = Subscription.EMPTY;
+        /**
+         * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,
+         * closed autocomplete from being reopened if the user switches to another browser tab and then
+         * comes back.
+         */
+        this._canOpenOnNextFocus = true;
+        /** Stream of keyboard events that can close the panel. */
+        this._closeKeyEventStream = new Subject();
+        /**
+         * Event handler for when the window is blurred. Needs to be an
+         * arrow function in order to preserve the context.
+         */
+        this._windowBlurHandler = () => {
+            // If the user blurred the window while the autocomplete is focused, it means that it'll be
+            // refocused when they come back. In this case we want to skip the first focus event, if the
+            // pane was closed, in order to avoid reopening it unintentionally.
+            this._canOpenOnNextFocus =
+                this._document.activeElement !== this._element.nativeElement || this.panelOpen;
+        };
+        /** `View -> model callback called when value changes` */
+        this._onChange = () => { };
+        /** `View -> model callback called when autocomplete has been touched` */
+        this._onTouched = () => { };
+        /**
+         * Position of the autocomplete panel relative to the trigger element. A position of `auto`
+         * will render the panel underneath the trigger if there is enough space for it to fit in
+         * the viewport, otherwise the panel will be shown above it. If the position is set to
+         * `above` or `below`, the panel will always be shown above or below the trigger. no matter
+         * whether it fits completely in the viewport.
+         */
+        this.position = 'auto';
+        /**
+         * `autocomplete` attribute to be set on the input element.
+         * @docs-private
+         */
+        this.autocompleteAttribute = 'off';
+        this._overlayAttached = false;
+        /** Stream of autocomplete option selections. */
+        this.optionSelections = defer(() => {
+            if (this.autocomplete && this.autocomplete.options) {
+                return merge(...this.autocomplete.options.map(option => option.onSelectionChange));
+            }
+            // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.
+            // Return a stream that we'll replace with the real one once everything is in place.
+            return this._zone.onStable
+                .pipe(take(1), switchMap(() => this.optionSelections));
+        });
+        this._scrollStrategy = scrollStrategy;
+    }
+    /**
+     * Whether the autocomplete is disabled. When disabled, the element will
+     * act as a regular input and the user won't be able to open the panel.
+     */
+    get autocompleteDisabled() { return this._autocompleteDisabled; }
+    set autocompleteDisabled(value) {
+        this._autocompleteDisabled = coerceBooleanProperty(value);
+    }
+    ngAfterViewInit() {
+        const window = this._getWindow();
+        if (typeof window !== 'undefined') {
+            this._zone.runOutsideAngular(() => window.addEventListener('blur', this._windowBlurHandler));
+        }
+    }
+    ngOnChanges(changes) {
+        if (changes['position'] && this._positionStrategy) {
+            this._setStrategyPositions(this._positionStrategy);
+            if (this.panelOpen) {
+                this._overlayRef.updatePosition();
+            }
+        }
+    }
+    ngOnDestroy() {
+        const window = this._getWindow();
+        if (typeof window !== 'undefined') {
+            window.removeEventListener('blur', this._windowBlurHandler);
+        }
+        this._viewportSubscription.unsubscribe();
+        this._componentDestroyed = true;
+        this._destroyPanel();
+        this._closeKeyEventStream.complete();
+    }
+    /** Whether or not the autocomplete panel is open. */
+    get panelOpen() {
+        return this._overlayAttached && this.autocomplete.showPanel;
+    }
+    /** Opens the autocomplete suggestion panel. */
+    openPanel() {
+        this._attachOverlay();
+        this._floatLabel();
+    }
+    /** Closes the autocomplete suggestion panel. */
+    closePanel() {
+        this._resetLabel();
+        if (!this._overlayAttached) {
+            return;
+        }
+        if (this.panelOpen) {
+            // Only emit if the panel was visible.
+            this.autocomplete.closed.emit();
+        }
+        this.autocomplete._isOpen = this._overlayAttached = false;
+        if (this._overlayRef && this._overlayRef.hasAttached()) {
+            this._overlayRef.detach();
+            this._closingActionsSubscription.unsubscribe();
+        }
+        // Note that in some cases this can end up being called after the component is destroyed.
+        // Add a check to ensure that we don't try to run change detection on a destroyed view.
+        if (!this._componentDestroyed) {
+            // We need to trigger change detection manually, because
+            // `fromEvent` doesn't seem to do it at the proper time.
+            // This ensures that the label is reset when the
+            // user clicks outside.
+            this._changeDetectorRef.detectChanges();
+        }
+    }
+    /**
+     * Updates the position of the autocomplete suggestion panel to ensure that it fits all options
+     * within the viewport.
+     */
+    updatePosition() {
+        if (this._overlayAttached) {
+            this._overlayRef.updatePosition();
+        }
+    }
+    /**
+     * A stream of actions that should close the autocomplete panel, including
+     * when an option is selected, on blur, and when TAB is pressed.
+     */
+    get panelClosingActions() {
+        return merge(this.optionSelections, this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)), this._closeKeyEventStream, this._getOutsideClickStream(), this._overlayRef ?
+            this._overlayRef.detachments().pipe(filter(() => this._overlayAttached)) :
+            of()).pipe(
+        // Normalize the output so we return a consistent type.
+        map(event => event instanceof MatOptionSelectionChange ? event : null));
+    }
+    /** The currently active option, coerced to MatOption type. */
+    get activeOption() {
+        if (this.autocomplete && this.autocomplete._keyManager) {
+            return this.autocomplete._keyManager.activeItem;
+        }
+        return null;
+    }
+    /** Stream of clicks outside of the autocomplete panel. */
+    _getOutsideClickStream() {
+        return merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'auxclick'), fromEvent(this._document, 'touchend'))
+            .pipe(filter(event => {
+            // If we're in the Shadow DOM, the event target will be the shadow root, so we have to
+            // fall back to check the first element in the path of the click event.
+            const clickTarget = _getEventTarget(event);
+            const formField = this._formField ? this._formField._elementRef.nativeElement : null;
+            const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;
+            return this._overlayAttached && clickTarget !== this._element.nativeElement &&
+                (!formField || !formField.contains(clickTarget)) &&
+                (!customOrigin || !customOrigin.contains(clickTarget)) &&
+                (!!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget));
+        }));
+    }
+    // Implemented as part of ControlValueAccessor.
+    writeValue(value) {
+        Promise.resolve(null).then(() => this._setTriggerValue(value));
+    }
+    // Implemented as part of ControlValueAccessor.
+    registerOnChange(fn) {
+        this._onChange = fn;
+    }
+    // Implemented as part of ControlValueAccessor.
+    registerOnTouched(fn) {
+        this._onTouched = fn;
+    }
+    // Implemented as part of ControlValueAccessor.
+    setDisabledState(isDisabled) {
+        this._element.nativeElement.disabled = isDisabled;
+    }
+    _handleKeydown(event) {
+        const keyCode = event.keyCode;
+        // Prevent the default action on all escape key presses. This is here primarily to bring IE
+        // in line with other browsers. By default, pressing escape on IE will cause it to revert
+        // the input value to the one that it had on focus, however it won't dispatch any events
+        // which means that the model value will be out of sync with the view.
+        if (keyCode === ESCAPE && !hasModifierKey(event)) {
+            event.preventDefault();
+        }
+        if (this.activeOption && keyCode === ENTER && this.panelOpen) {
+            this.activeOption._selectViaInteraction();
+            this._resetActiveItem();
+            event.preventDefault();
+        }
+        else if (this.autocomplete) {
+            const prevActiveItem = this.autocomplete._keyManager.activeItem;
+            const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;
+            if (this.panelOpen || keyCode === TAB) {
+                this.autocomplete._keyManager.onKeydown(event);
+            }
+            else if (isArrowKey && this._canOpen()) {
+                this.openPanel();
+            }
+            if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {
+                this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);
+            }
+        }
+    }
+    _handleInput(event) {
+        let target = event.target;
+        let value = target.value;
+        // Based on `NumberValueAccessor` from forms.
+        if (target.type === 'number') {
+            value = value == '' ? null : parseFloat(value);
+        }
+        // If the input has a placeholder, IE will fire the `input` event on page load,
+        // focus and blur, in addition to when the user actually changed the value. To
+        // filter out all of the extra events, we save the value on focus and between
+        // `input` events, and we check whether it changed.
+        // See: https://connect.microsoft.com/IE/feedback/details/885747/
+        if (this._previousValue !== value) {
+            this._previousValue = value;
+            this._onChange(value);
+            if (this._canOpen() && this._document.activeElement === event.target) {
+                this.openPanel();
+            }
+        }
+    }
+    _handleFocus() {
+        if (!this._canOpenOnNextFocus) {
+            this._canOpenOnNextFocus = true;
+        }
+        else if (this._canOpen()) {
+            this._previousValue = this._element.nativeElement.value;
+            this._attachOverlay();
+            this._floatLabel(true);
+        }
+    }
+    /**
+     * In "auto" mode, the label will animate down as soon as focus is lost.
+     * This causes the value to jump when selecting an option with the mouse.
+     * This method manually floats the label until the panel can be closed.
+     * @param shouldAnimate Whether the label should be animated when it is floated.
+     */
+    _floatLabel(shouldAnimate = false) {
+        if (this._formField && this._formField.floatLabel === 'auto') {
+            if (shouldAnimate) {
+                this._formField._animateAndLockLabel();
+            }
+            else {
+                this._formField.floatLabel = 'always';
+            }
+            this._manuallyFloatingLabel = true;
+        }
+    }
+    /** If the label has been manually elevated, return it to its normal state. */
+    _resetLabel() {
+        if (this._manuallyFloatingLabel) {
+            this._formField.floatLabel = 'auto';
+            this._manuallyFloatingLabel = false;
+        }
+    }
+    /**
+     * This method listens to a stream of panel closing actions and resets the
+     * stream every time the option list changes.
+     */
+    _subscribeToClosingActions() {
+        const firstStable = this._zone.onStable.pipe(take(1));
+        const optionChanges = this.autocomplete.options.changes.pipe(tap(() => this._positionStrategy.reapplyLastPosition()), 
+        // Defer emitting to the stream until the next tick, because changing
+        // bindings in here will cause "changed after checked" errors.
+        delay(0));
+        // When the zone is stable initially, and when the option list changes...
+        return merge(firstStable, optionChanges)
+            .pipe(
+        // create a new stream of panelClosingActions, replacing any previous streams
+        // that were created, and flatten it so our stream only emits closing events...
+        switchMap(() => {
+            const wasOpen = this.panelOpen;
+            this._resetActiveItem();
+            this.autocomplete._setVisibility();
+            if (this.panelOpen) {
+                this._overlayRef.updatePosition();
+                // If the `panelOpen` state changed, we need to make sure to emit the `opened`
+                // event, because we may not have emitted it when the panel was attached. This
+                // can happen if the users opens the panel and there are no options, but the
+                // options come in slightly later or as a result of the value changing.
+                if (wasOpen !== this.panelOpen) {
+                    this.autocomplete.opened.emit();
+                }
+            }
+            return this.panelClosingActions;
+        }), 
+        // when the first closing event occurs...
+        take(1))
+            // set the value, close the panel, and complete.
+            .subscribe(event => this._setValueAndClose(event));
+    }
+    /** Destroys the autocomplete suggestion panel. */
+    _destroyPanel() {
+        if (this._overlayRef) {
+            this.closePanel();
+            this._overlayRef.dispose();
+            this._overlayRef = null;
+        }
+    }
+    _setTriggerValue(value) {
+        const toDisplay = this.autocomplete && this.autocomplete.displayWith ?
+            this.autocomplete.displayWith(value) :
+            value;
+        // Simply falling back to an empty string if the display value is falsy does not work properly.
+        // The display value can also be the number zero and shouldn't fall back to an empty string.
+        const inputValue = toDisplay != null ? toDisplay : '';
+        // If it's used within a `MatFormField`, we should set it through the property so it can go
+        // through change detection.
+        if (this._formField) {
+            this._formField._control.value = inputValue;
+        }
+        else {
+            this._element.nativeElement.value = inputValue;
+        }
+        this._previousValue = inputValue;
+    }
+    /**
+     * This method closes the panel, and if a value is specified, also sets the associated
+     * control to that value. It will also mark the control as dirty if this interaction
+     * stemmed from the user.
+     */
+    _setValueAndClose(event) {
+        if (event && event.source) {
+            this._clearPreviousSelectedOption(event.source);
+            this._setTriggerValue(event.source.value);
+            this._onChange(event.source.value);
+            this._element.nativeElement.focus();
+            this.autocomplete._emitSelectEvent(event.source);
+        }
+        this.closePanel();
+    }
+    /**
+     * Clear any previous selected option and emit a selection change event for this option
+     */
+    _clearPreviousSelectedOption(skip) {
+        this.autocomplete.options.forEach(option => {
+            if (option !== skip && option.selected) {
+                option.deselect();
+            }
+        });
+    }
+    _attachOverlay() {
+        var _a;
+        if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {
+            throw getMatAutocompleteMissingPanelError();
+        }
+        let overlayRef = this._overlayRef;
+        if (!overlayRef) {
+            this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef, { id: (_a = this._formField) === null || _a === void 0 ? void 0 : _a.getLabelId() });
+            overlayRef = this._overlay.create(this._getOverlayConfig());
+            this._overlayRef = overlayRef;
+            // Use the `keydownEvents` in order to take advantage of
+            // the overlay event targeting provided by the CDK overlay.
+            overlayRef.keydownEvents().subscribe(event => {
+                // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.
+                // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction
+                if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||
+                    (event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {
+                    this._closeKeyEventStream.next();
+                    this._resetActiveItem();
+                    // We need to stop propagation, otherwise the event will eventually
+                    // reach the input itself and cause the overlay to be reopened.
+                    event.stopPropagation();
+                    event.preventDefault();
+                }
+            });
+            this._viewportSubscription = this._viewportRuler.change().subscribe(() => {
+                if (this.panelOpen && overlayRef) {
+                    overlayRef.updateSize({ width: this._getPanelWidth() });
+                }
+            });
+        }
+        else {
+            // Update the trigger, panel width and direction, in case anything has changed.
+            this._positionStrategy.setOrigin(this._getConnectedElement());
+            overlayRef.updateSize({ width: this._getPanelWidth() });
+        }
+        if (overlayRef && !overlayRef.hasAttached()) {
+            overlayRef.attach(this._portal);
+            this._closingActionsSubscription = this._subscribeToClosingActions();
+        }
+        const wasOpen = this.panelOpen;
+        this.autocomplete._setVisibility();
+        this.autocomplete._isOpen = this._overlayAttached = true;
+        // We need to do an extra `panelOpen` check in here, because the
+        // autocomplete won't be shown if there are no options.
+        if (this.panelOpen && wasOpen !== this.panelOpen) {
+            this.autocomplete.opened.emit();
+        }
+    }
+    _getOverlayConfig() {
+        var _a;
+        return new OverlayConfig({
+            positionStrategy: this._getOverlayPosition(),
+            scrollStrategy: this._scrollStrategy(),
+            width: this._getPanelWidth(),
+            direction: this._dir,
+            panelClass: (_a = this._defaults) === null || _a === void 0 ? void 0 : _a.overlayPanelClass,
+        });
+    }
+    _getOverlayPosition() {
+        const strategy = this._overlay.position()
+            .flexibleConnectedTo(this._getConnectedElement())
+            .withFlexibleDimensions(false)
+            .withPush(false);
+        this._setStrategyPositions(strategy);
+        this._positionStrategy = strategy;
+        return strategy;
+    }
+    /** Sets the positions on a position strategy based on the directive's input state. */
+    _setStrategyPositions(positionStrategy) {
+        // Note that we provide horizontal fallback positions, even though by default the dropdown
+        // width matches the input, because consumers can override the width. See #18854.
+        const belowPositions = [
+            { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },
+            { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' }
+        ];
+        // The overlay edge connected to the trigger should have squared corners, while
+        // the opposite end has rounded corners. We apply a CSS class to swap the
+        // border-radius based on the overlay position.
+        const panelClass = this._aboveClass;
+        const abovePositions = [
+            { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', panelClass },
+            { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', panelClass }
+        ];
+        let positions;
+        if (this.position === 'above') {
+            positions = abovePositions;
+        }
+        else if (this.position === 'below') {
+            positions = belowPositions;
+        }
+        else {
+            positions = [...belowPositions, ...abovePositions];
+        }
+        positionStrategy.withPositions(positions);
+    }
+    _getConnectedElement() {
+        if (this.connectedTo) {
+            return this.connectedTo.elementRef;
+        }
+        return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;
+    }
+    _getPanelWidth() {
+        return this.autocomplete.panelWidth || this._getHostWidth();
+    }
+    /** Returns the width of the input element, so the panel width can match it. */
+    _getHostWidth() {
+        return this._getConnectedElement().nativeElement.getBoundingClientRect().width;
+    }
+    /**
+     * Resets the active item to -1 so arrow events will activate the
+     * correct options, or to 0 if the consumer opted into it.
+     */
+    _resetActiveItem() {
+        const autocomplete = this.autocomplete;
+        if (autocomplete.autoActiveFirstOption) {
+            // Note that we go through `setFirstItemActive`, rather than `setActiveItem(0)`, because
+            // the former will find the next enabled option, if the first one is disabled.
+            autocomplete._keyManager.setFirstItemActive();
+        }
+        else {
+            autocomplete._keyManager.setActiveItem(-1);
+        }
+    }
+    /** Determines whether the panel can be opened. */
+    _canOpen() {
+        const element = this._element.nativeElement;
+        return !element.readOnly && !element.disabled && !this._autocompleteDisabled;
+    }
+    /** Use defaultView of injected document if available or fallback to global window reference */
+    _getWindow() {
+        var _a;
+        return ((_a = this._document) === null || _a === void 0 ? void 0 : _a.defaultView) || window;
+    }
+    /** Scrolls to a particular option in the list. */
+    _scrollToOption(index) {
+        // Given that we are not actually focusing active options, we must manually adjust scroll
+        // to reveal options below the fold. First, we find the offset of the option from the top
+        // of the panel. If that offset is below the fold, the new scrollTop will be the offset -
+        // the panel height + the option height, so the active option will be just visible at the
+        // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop
+        // will become the offset. If that offset is visible within the panel already, the scrollTop is
+        // not adjusted.
+        const autocomplete = this.autocomplete;
+        const labelCount = _countGroupLabelsBeforeOption(index, autocomplete.options, autocomplete.optionGroups);
+        if (index === 0 && labelCount === 1) {
+            // If we've got one group label before the option and we're at the top option,
+            // scroll the list to the top. This is better UX than scrolling the list to the
+            // top of the option, because it allows the user to read the top group's label.
+            autocomplete._setScrollTop(0);
+        }
+        else if (autocomplete.panel) {
+            const option = autocomplete.options.toArray()[index];
+            if (option) {
+                const element = option._getHostElement();
+                const newScrollPosition = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, autocomplete._getScrollTop(), autocomplete.panel.nativeElement.offsetHeight);
+                autocomplete._setScrollTop(newScrollPosition);
+            }
+        }
+    }
+}
+_MatAutocompleteTriggerBase.ɵfac = function _MatAutocompleteTriggerBase_Factory(t) { return new (t || _MatAutocompleteTriggerBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD, 9), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, 8)); };
+_MatAutocompleteTriggerBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteTriggerBase, inputs: { position: ["matAutocompletePosition", "position"], autocompleteAttribute: ["autocomplete", "autocompleteAttribute"], autocompleteDisabled: ["matAutocompleteDisabled", "autocompleteDisabled"], autocomplete: ["matAutocomplete", "autocomplete"], connectedTo: ["matAutocompleteConnectedTo", "connectedTo"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });
+_MatAutocompleteTriggerBase.ctorParameters = () => [
+    { type: ElementRef },
+    { type: Overlay },
+    { type: ViewContainerRef },
+    { type: NgZone },
+    { type: ChangeDetectorRef },
+    { type: undefined, decorators: [{ type: Inject, args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY,] }] },
+    { type: Directionality, decorators: [{ type: Optional }] },
+    { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }, { type: Host }] },
+    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
+    { type: ViewportRuler },
+    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,] }] }
+];
+_MatAutocompleteTriggerBase.propDecorators = {
+    autocomplete: [{ type: Input, args: ['matAutocomplete',] }],
+    position: [{ type: Input, args: ['matAutocompletePosition',] }],
+    connectedTo: [{ type: Input, args: ['matAutocompleteConnectedTo',] }],
+    autocompleteAttribute: [{ type: Input, args: ['autocomplete',] }],
+    autocompleteDisabled: [{ type: Input, args: ['matAutocompleteDisabled',] }]
+};
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteTriggerBase, [{
+        type: Directive
+    }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc3.Overlay }, { type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{
+                type: Inject,
+                args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY]
+            }] }, { type: ɵngcc4.Directionality, decorators: [{
+                type: Optional
+            }] }, { type: ɵngcc6.MatFormField, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [MAT_FORM_FIELD]
+            }, {
+                type: Host
+            }] }, { type: undefined, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [DOCUMENT]
+            }] }, { type: ɵngcc5.ViewportRuler }, { type: undefined, decorators: [{
+                type: Optional
+            }, {
+                type: Inject,
+                args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]
+            }] }]; }, { position: [{
+            type: Input,
+            args: ['matAutocompletePosition']
+        }], autocompleteAttribute: [{
+            type: Input,
+            args: ['autocomplete']
+        }], autocompleteDisabled: [{
+            type: Input,
+            args: ['matAutocompleteDisabled']
+        }], autocomplete: [{
+            type: Input,
+            args: ['matAutocomplete']
+        }], connectedTo: [{
+            type: Input,
+            args: ['matAutocompleteConnectedTo']
+        }] }); })();
+class MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {
+    constructor() {
+        super(...arguments);
+        this._aboveClass = 'mat-autocomplete-panel-above';
+    }
+}
+MatAutocompleteTrigger.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocompleteTrigger_BaseFactory; return function MatAutocompleteTrigger_Factory(t) { return (ɵMatAutocompleteTrigger_BaseFactory || (ɵMatAutocompleteTrigger_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocompleteTrigger)))(t || MatAutocompleteTrigger); }; }();
+MatAutocompleteTrigger.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAutocompleteTrigger, selectors: [["input", "matAutocomplete", ""], ["textarea", "matAutocomplete", ""]], hostAttrs: [1, "mat-autocomplete-trigger"], hostVars: 7, hostBindings: function MatAutocompleteTrigger_HostBindings(rf, ctx) { if (rf & 1) {
+        ɵngcc0.ɵɵlistener("focusin", function MatAutocompleteTrigger_focusin_HostBindingHandler() { return ctx._handleFocus(); })("blur", function MatAutocompleteTrigger_blur_HostBindingHandler() { return ctx._onTouched(); })("input", function MatAutocompleteTrigger_input_HostBindingHandler($event) { return ctx._handleInput($event); })("keydown", function MatAutocompleteTrigger_keydown_HostBindingHandler($event) { return ctx._handleKeydown($event); });
+    } if (rf & 2) {
+        ɵngcc0.ɵɵattribute("autocomplete", ctx.autocompleteAttribute)("role", ctx.autocompleteDisabled ? null : "combobox")("aria-autocomplete", ctx.autocompleteDisabled ? null : "list")("aria-activedescendant", ctx.panelOpen && ctx.activeOption ? ctx.activeOption.id : null)("aria-expanded", ctx.autocompleteDisabled ? null : ctx.panelOpen.toString())("aria-owns", ctx.autocompleteDisabled || !ctx.panelOpen ? null : ctx.autocomplete == null ? null : ctx.autocomplete.id)("aria-haspopup", !ctx.autocompleteDisabled);
+    } }, exportAs: ["matAutocompleteTrigger"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_AUTOCOMPLETE_VALUE_ACCESSOR]), ɵngcc0.ɵɵInheritDefinitionFeature] });
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteTrigger, [{
+        type: Directive,
+        args: [{
+                selector: `input[matAutocomplete], textarea[matAutocomplete]`,
+                host: {
+                    'class': 'mat-autocomplete-trigger',
+                    '[attr.autocomplete]': 'autocompleteAttribute',
+                    '[attr.role]': 'autocompleteDisabled ? null : "combobox"',
+                    '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : "list"',
+                    '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',
+                    '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',
+                    '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',
+                    '[attr.aria-haspopup]': '!autocompleteDisabled',
+                    // Note: we use `focusin`, as opposed to `focus`, in order to open the panel
+                    // a little earlier. This avoids issues where IE delays the focusing of the input.
+                    '(focusin)': '_handleFocus()',
+                    '(blur)': '_onTouched()',
+                    '(input)': '_handleInput($event)',
+                    '(keydown)': '_handleKeydown($event)'
+                },
+                exportAs: 'matAutocompleteTrigger',
+                providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR]
+            }]
+    }], null, null); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+class MatAutocompleteModule {
+}
+MatAutocompleteModule.ɵfac = function MatAutocompleteModule_Factory(t) { return new (t || MatAutocompleteModule)(); };
+MatAutocompleteModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatAutocompleteModule });
+MatAutocompleteModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [[
+            OverlayModule,
+            MatOptionModule,
+            MatCommonModule,
+            CommonModule
+        ], CdkScrollableModule,
+        MatOptionModule,
+        MatCommonModule] });
+(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteModule, [{
+        type: NgModule,
+        args: [{
+                imports: [
+                    OverlayModule,
+                    MatOptionModule,
+                    MatCommonModule,
+                    CommonModule
+                ],
+                exports: [
+                    MatAutocomplete,
+                    MatAutocompleteTrigger,
+                    MatAutocompleteOrigin,
+                    CdkScrollableModule,
+                    MatOptionModule,
+                    MatCommonModule,
+                ],
+                declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],
+                providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER]
+            }]
+    }], null, null); })();
+(function () { (typeof ngJitMode === "undefined" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatAutocompleteModule, { declarations: function () { return [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin]; }, imports: function () { return [OverlayModule,
+        MatOptionModule,
+        MatCommonModule,
+        CommonModule]; }, exports: function () { return [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin, CdkScrollableModule,
+        MatOptionModule,
+        MatCommonModule]; } }); })();
+
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_AUTOCOMPLETE_VALUE_ACCESSOR, MatAutocomplete, MatAutocompleteModule, MatAutocompleteOrigin, MatAutocompleteSelectedEvent, MatAutocompleteTrigger, _MatAutocompleteBase, _MatAutocompleteOriginBase, _MatAutocompleteTriggerBase, getMatAutocompleteMissingPanelError };
+
+//# sourceMappingURL=autocomplete.js.map
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"autocomplete.js","sources":["../../../../../../src/material/autocomplete/autocomplete.ts","../../../../../../src/material/autocomplete/autocomplete-origin.ts","../../../../../../src/material/autocomplete/autocomplete-trigger.ts","../../../../../../src/material/autocomplete/autocomplete-module.ts","../../../../../../src/material/autocomplete/public-api.ts","../../../../../../src/material/autocomplete/index.ts"],"names":["observableOf"],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty, coerceStringArray} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  Output,\n  QueryList,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n  Directive,\n} from '@angular/core';\nimport {\n  CanDisableRipple,\n  MAT_OPTGROUP,\n  MAT_OPTION_PARENT_COMPONENT,\n  _MatOptgroupBase,\n  _MatOptionBase,\n  mixinDisableRipple,\n  MatOption,\n  MatOptgroup,\n} from '@angular/material/core';\nimport {Subscription} from 'rxjs';\n\n\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueAutocompleteIdCounter = 0;\n\n/** Event object that is emitted when an autocomplete option is selected. */\nexport class MatAutocompleteSelectedEvent {\n  constructor(\n    /** Reference to the autocomplete panel that emitted the event. */\n    public source: _MatAutocompleteBase,\n    /** Option that was selected. */\n    public option: _MatOptionBase) { }\n}\n\n/** Event object that is emitted when an autocomplete option is activated. */\nexport interface MatAutocompleteActivatedEvent {\n  /** Reference to the autocomplete panel that emitted the event. */\n  source: _MatAutocompleteBase;\n\n  /** Option that was selected. */\n  option: _MatOptionBase|null;\n}\n\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nconst _MatAutocompleteMixinBase = mixinDisableRipple(class {});\n\n/** Default `mat-autocomplete` options that can be overridden. */\nexport interface MatAutocompleteDefaultOptions {\n  /** Whether the first option should be highlighted when an autocomplete panel is opened. */\n  autoActiveFirstOption?: boolean;\n\n  /** Class or list of classes to be applied to the autocomplete's overlay panel. */\n  overlayPanelClass?: string | string[];\n}\n\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nexport const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS =\n    new InjectionToken<MatAutocompleteDefaultOptions>('mat-autocomplete-default-options', {\n      providedIn: 'root',\n      factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,\n    });\n\n/** @docs-private */\nexport function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefaultOptions {\n  return {autoActiveFirstOption: false};\n}\n\n/** Base class with all of the `MatAutocomplete` functionality. */\n@Directive()\nexport abstract class _MatAutocompleteBase extends _MatAutocompleteMixinBase implements\n  AfterContentInit, CanDisableRipple, OnDestroy {\n  private _activeOptionChanges = Subscription.EMPTY;\n\n  /** Class to apply to the panel when it's visible. */\n  protected abstract _visibleClass: string;\n\n  /** Class to apply to the panel when it's hidden. */\n  protected abstract _hiddenClass: string;\n\n  /** Manages active item in option list based on key events. */\n  _keyManager: ActiveDescendantKeyManager<_MatOptionBase>;\n\n  /** Whether the autocomplete panel should be visible, depending on option length. */\n  showPanel: boolean = false;\n\n  /** Whether the autocomplete panel is open. */\n  get isOpen(): boolean { return this._isOpen && this.showPanel; }\n  _isOpen: boolean = false;\n\n  // The @ViewChild query for TemplateRef here needs to be static because some code paths\n  // lead to the overlay being created before change detection has finished for this component.\n  // Notably, another component may trigger `focus` on the autocomplete-trigger.\n\n  /** @docs-private */\n  @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\n\n  /** Element for the panel containing the autocomplete options. */\n  @ViewChild('panel') panel: ElementRef;\n\n  /** Reference to all options within the autocomplete. */\n  abstract options: QueryList<_MatOptionBase>;\n\n  /** Reference to all option groups within the autocomplete. */\n  abstract optionGroups: QueryList<_MatOptgroupBase>;\n\n  /** Aria label of the autocomplete. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Input that can be used to specify the `aria-labelledby` attribute. */\n  @Input('aria-labelledby') ariaLabelledby: string;\n\n  /** Function that maps an option's control value to its display value in the trigger. */\n  @Input() displayWith: ((value: any) => string) | null = null;\n\n  /**\n   * Whether the first option should be highlighted when the autocomplete panel is opened.\n   * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n   */\n  @Input()\n  get autoActiveFirstOption(): boolean { return this._autoActiveFirstOption; }\n  set autoActiveFirstOption(value: boolean) {\n    this._autoActiveFirstOption = coerceBooleanProperty(value);\n  }\n  private _autoActiveFirstOption: boolean;\n\n  /**\n   * Specify the width of the autocomplete panel.  Can be any CSS sizing value, otherwise it will\n   * match the width of its host.\n   */\n  @Input() panelWidth: string | number;\n\n  /** Event that is emitted whenever an option from the list is selected. */\n  @Output() readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent> =\n      new EventEmitter<MatAutocompleteSelectedEvent>();\n\n  /** Event that is emitted when the autocomplete panel is opened. */\n  @Output() readonly opened: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Event that is emitted when the autocomplete panel is closed. */\n  @Output() readonly closed: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Emits whenever an option is activated using the keyboard. */\n  @Output() readonly optionActivated: EventEmitter<MatAutocompleteActivatedEvent> =\n      new EventEmitter<MatAutocompleteActivatedEvent>();\n\n  /**\n   * Takes classes set on the host mat-autocomplete element and applies them to the panel\n   * inside the overlay container to allow for easy styling.\n   */\n  @Input('class')\n  set classList(value: string | string[]) {\n    if (value && value.length) {\n      this._classList = coerceStringArray(value).reduce((classList, className) => {\n        classList[className] = true;\n        return classList;\n      }, {} as {[key: string]: boolean});\n    } else {\n      this._classList = {};\n    }\n\n    this._setVisibilityClasses(this._classList);\n    this._elementRef.nativeElement.className = '';\n  }\n  _classList: {[key: string]: boolean} = {};\n\n  /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n  id: string = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n\n  /**\n   * Tells any descendant `mat-optgroup` to use the inert a11y pattern.\n   * @docs-private\n   */\n  readonly inertGroups: boolean;\n\n  constructor(\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _elementRef: ElementRef<HTMLElement>,\n    @Inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS) defaults: MatAutocompleteDefaultOptions,\n    platform?: Platform) {\n    super();\n\n    // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on\n    // Safari using VoiceOver. We should occasionally check back to see whether the bug\n    // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`\n    // option altogether.\n    this.inertGroups = platform?.SAFARI || false;\n    this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n  }\n\n  ngAfterContentInit() {\n    this._keyManager = new ActiveDescendantKeyManager<_MatOptionBase>(this.options).withWrap();\n    this._activeOptionChanges = this._keyManager.change.subscribe(index => {\n      if (this.isOpen) {\n        this.optionActivated.emit({source: this, option: this.options.toArray()[index] || null});\n      }\n    });\n\n    // Set the initial visibility state.\n    this._setVisibility();\n  }\n\n  ngOnDestroy() {\n    this._activeOptionChanges.unsubscribe();\n  }\n\n  /**\n   * Sets the panel scrollTop. This allows us to manually scroll to display options\n   * above or below the fold, as they are not actually being focused when active.\n   */\n  _setScrollTop(scrollTop: number): void {\n    if (this.panel) {\n      this.panel.nativeElement.scrollTop = scrollTop;\n    }\n  }\n\n  /** Returns the panel's scrollTop. */\n  _getScrollTop(): number {\n    return this.panel ? this.panel.nativeElement.scrollTop : 0;\n  }\n\n  /** Panel should hide itself when the option list is empty. */\n  _setVisibility() {\n    this.showPanel = !!this.options.length;\n    this._setVisibilityClasses(this._classList);\n    this._changeDetectorRef.markForCheck();\n  }\n\n  /** Emits the `select` event. */\n  _emitSelectEvent(option: _MatOptionBase): void {\n    const event = new MatAutocompleteSelectedEvent(this, option);\n    this.optionSelected.emit(event);\n  }\n\n  /** Gets the aria-labelledby for the autocomplete panel. */\n  _getPanelAriaLabelledby(labelId: string | null): string | null {\n    if (this.ariaLabel) {\n      return null;\n    }\n\n    const labelExpression = labelId ? labelId + ' ' : '';\n    return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n  }\n\n\n  /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n  private _setVisibilityClasses(classList: {[key: string]: boolean}) {\n    classList[this._visibleClass] = this.showPanel;\n    classList[this._hiddenClass] = !this.showPanel;\n  }\n\n  static ngAcceptInputType_autoActiveFirstOption: BooleanInput;\n  static ngAcceptInputType_disableRipple: BooleanInput;\n}\n\n@Component({\n  selector: 'mat-autocomplete',\n  templateUrl: 'autocomplete.html',\n  styleUrls: ['autocomplete.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  exportAs: 'matAutocomplete',\n  inputs: ['disableRipple'],\n  host: {\n    'class': 'mat-autocomplete'\n  },\n  providers: [\n    {provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete}\n  ]\n})\nexport class MatAutocomplete extends _MatAutocompleteBase {\n  /** Reference to all option groups within the autocomplete. */\n  @ContentChildren(MAT_OPTGROUP, {descendants: true}) optionGroups: QueryList<MatOptgroup>;\n  /** Reference to all options within the autocomplete. */\n  @ContentChildren(MatOption, {descendants: true}) options: QueryList<MatOption>;\n  protected _visibleClass = 'mat-autocomplete-visible';\n  protected _hiddenClass = 'mat-autocomplete-hidden';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directive, ElementRef} from '@angular/core';\n\n/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */\n@Directive()\nexport abstract class _MatAutocompleteOriginBase {\n  constructor(\n    /** Reference to the element on which the directive is applied. */\n    public elementRef: ElementRef<HTMLElement>) {}\n}\n\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\n@Directive({\n  selector: '[matAutocompleteOrigin]',\n  exportAs: 'matAutocompleteOrigin',\n})\nexport class MatAutocompleteOrigin extends _MatAutocompleteOriginBase {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {Directionality} from '@angular/cdk/bidi';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOWN_ARROW, ENTER, ESCAPE, TAB, UP_ARROW, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  FlexibleConnectedPositionStrategy,\n  Overlay,\n  OverlayConfig,\n  OverlayRef,\n  PositionStrategy,\n  ScrollStrategy,\n  ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  forwardRef,\n  Host,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  Optional,\n  ViewContainerRef,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n  _countGroupLabelsBeforeOption,\n  _getOptionScrollPosition,\n  MatOption,\n  MatOptionSelectionChange,\n} from '@angular/material/core';\nimport {MAT_FORM_FIELD, MatFormField} from '@angular/material/form-field';\nimport {defer, fromEvent, merge, Observable, of as observableOf, Subject, Subscription} from 'rxjs';\nimport {delay, filter, map, switchMap, take, tap} from 'rxjs/operators';\n\nimport {\n  _MatAutocompleteBase,\n  MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\n  MatAutocompleteDefaultOptions\n} from './autocomplete';\nimport {_MatAutocompleteOriginBase} from './autocomplete-origin';\n\n\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nexport const MAT_AUTOCOMPLETE_SCROLL_STRATEGY =\n    new InjectionToken<() => ScrollStrategy>('mat-autocomplete-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,\n};\n\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nexport const MAT_AUTOCOMPLETE_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MatAutocompleteTrigger),\n  multi: true\n};\n\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nexport function getMatAutocompleteMissingPanelError(): Error {\n  return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +\n               'Make sure that the id passed to the `matAutocomplete` is correct and that ' +\n               'you\\'re attempting to open it after the ngAfterContentInit hook.');\n}\n\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\n@Directive()\nexport abstract class _MatAutocompleteTriggerBase implements ControlValueAccessor, AfterViewInit,\n  OnChanges, OnDestroy {\n\n  private _overlayRef: OverlayRef | null;\n  private _portal: TemplatePortal;\n  private _componentDestroyed = false;\n  private _autocompleteDisabled = false;\n  private _scrollStrategy: () => ScrollStrategy;\n\n  /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n  private _previousValue: string | number | null;\n\n  /** Strategy that is used to position the panel. */\n  private _positionStrategy: FlexibleConnectedPositionStrategy;\n\n  /** Whether or not the label state is being overridden. */\n  private _manuallyFloatingLabel = false;\n\n  /** The subscription for closing actions (some are bound to document). */\n  private _closingActionsSubscription: Subscription;\n\n  /** Subscription to viewport size changes. */\n  private _viewportSubscription = Subscription.EMPTY;\n\n  /**\n   * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n   * closed autocomplete from being reopened if the user switches to another browser tab and then\n   * comes back.\n   */\n  private _canOpenOnNextFocus = true;\n\n  /** Stream of keyboard events that can close the panel. */\n  private readonly _closeKeyEventStream = new Subject<void>();\n\n  /**\n   * Event handler for when the window is blurred. Needs to be an\n   * arrow function in order to preserve the context.\n   */\n  private _windowBlurHandler = () => {\n    // If the user blurred the window while the autocomplete is focused, it means that it'll be\n    // refocused when they come back. In this case we want to skip the first focus event, if the\n    // pane was closed, in order to avoid reopening it unintentionally.\n    this._canOpenOnNextFocus =\n        this._document.activeElement !== this._element.nativeElement || this.panelOpen;\n  }\n\n  /** `View -> model callback called when value changes` */\n  _onChange: (value: any) => void = () => {};\n\n  /** `View -> model callback called when autocomplete has been touched` */\n  _onTouched = () => {};\n\n  /** The autocomplete panel to be attached to this trigger. */\n  @Input('matAutocomplete') autocomplete: _MatAutocompleteBase;\n\n  /**\n   * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n   * will render the panel underneath the trigger if there is enough space for it to fit in\n   * the viewport, otherwise the panel will be shown above it. If the position is set to\n   * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n   * whether it fits completely in the viewport.\n   */\n  @Input('matAutocompletePosition') position: 'auto' | 'above' | 'below' = 'auto';\n\n  /**\n   * Reference relative to which to position the autocomplete panel.\n   * Defaults to the autocomplete trigger element.\n   */\n  @Input('matAutocompleteConnectedTo') connectedTo: _MatAutocompleteOriginBase;\n\n  /**\n   * `autocomplete` attribute to be set on the input element.\n   * @docs-private\n   */\n  @Input('autocomplete') autocompleteAttribute: string = 'off';\n\n  /**\n   * Whether the autocomplete is disabled. When disabled, the element will\n   * act as a regular input and the user won't be able to open the panel.\n   */\n  @Input('matAutocompleteDisabled')\n  get autocompleteDisabled(): boolean { return this._autocompleteDisabled; }\n  set autocompleteDisabled(value: boolean) {\n    this._autocompleteDisabled = coerceBooleanProperty(value);\n  }\n\n  constructor(private _element: ElementRef<HTMLInputElement>, private _overlay: Overlay,\n              private _viewContainerRef: ViewContainerRef,\n              private _zone: NgZone,\n              private _changeDetectorRef: ChangeDetectorRef,\n              @Inject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY) scrollStrategy: any,\n              @Optional() private _dir: Directionality,\n              @Optional() @Inject(MAT_FORM_FIELD) @Host() private _formField: MatFormField,\n              @Optional() @Inject(DOCUMENT) private _document: any,\n              private _viewportRuler: ViewportRuler,\n              @Optional() @Inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS)\n              private _defaults?: MatAutocompleteDefaultOptions) {\n    this._scrollStrategy = scrollStrategy;\n  }\n\n  /** Class to apply to the panel when it's above the input. */\n  protected abstract _aboveClass: string;\n\n  ngAfterViewInit() {\n    const window = this._getWindow();\n\n    if (typeof window !== 'undefined') {\n      this._zone.runOutsideAngular(() => window.addEventListener('blur', this._windowBlurHandler));\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['position'] && this._positionStrategy) {\n      this._setStrategyPositions(this._positionStrategy);\n\n      if (this.panelOpen) {\n        this._overlayRef!.updatePosition();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    const window = this._getWindow();\n\n    if (typeof window !== 'undefined') {\n      window.removeEventListener('blur', this._windowBlurHandler);\n    }\n\n    this._viewportSubscription.unsubscribe();\n    this._componentDestroyed = true;\n    this._destroyPanel();\n    this._closeKeyEventStream.complete();\n  }\n\n  /** Whether or not the autocomplete panel is open. */\n  get panelOpen(): boolean {\n    return this._overlayAttached && this.autocomplete.showPanel;\n  }\n  private _overlayAttached: boolean = false;\n\n  /** Opens the autocomplete suggestion panel. */\n  openPanel(): void {\n    this._attachOverlay();\n    this._floatLabel();\n  }\n\n  /** Closes the autocomplete suggestion panel. */\n  closePanel(): void {\n    this._resetLabel();\n\n    if (!this._overlayAttached) {\n      return;\n    }\n\n    if (this.panelOpen) {\n      // Only emit if the panel was visible.\n      this.autocomplete.closed.emit();\n    }\n\n    this.autocomplete._isOpen = this._overlayAttached = false;\n\n    if (this._overlayRef && this._overlayRef.hasAttached()) {\n      this._overlayRef.detach();\n      this._closingActionsSubscription.unsubscribe();\n    }\n\n    // Note that in some cases this can end up being called after the component is destroyed.\n    // Add a check to ensure that we don't try to run change detection on a destroyed view.\n    if (!this._componentDestroyed) {\n      // We need to trigger change detection manually, because\n      // `fromEvent` doesn't seem to do it at the proper time.\n      // This ensures that the label is reset when the\n      // user clicks outside.\n      this._changeDetectorRef.detectChanges();\n    }\n  }\n\n  /**\n   * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n   * within the viewport.\n   */\n  updatePosition(): void {\n    if (this._overlayAttached) {\n      this._overlayRef!.updatePosition();\n    }\n  }\n\n  /**\n   * A stream of actions that should close the autocomplete panel, including\n   * when an option is selected, on blur, and when TAB is pressed.\n   */\n  get panelClosingActions(): Observable<MatOptionSelectionChange|null> {\n    return merge(\n      this.optionSelections,\n      this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)),\n      this._closeKeyEventStream,\n      this._getOutsideClickStream(),\n      this._overlayRef ?\n          this._overlayRef.detachments().pipe(filter(() => this._overlayAttached)) :\n          observableOf()\n    ).pipe(\n      // Normalize the output so we return a consistent type.\n      map(event => event instanceof MatOptionSelectionChange ? event : null)\n    );\n  }\n\n  /** Stream of autocomplete option selections. */\n  readonly optionSelections: Observable<MatOptionSelectionChange> = defer(() => {\n    if (this.autocomplete && this.autocomplete.options) {\n      return merge(...this.autocomplete.options.map(option => option.onSelectionChange));\n    }\n\n    // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n    // Return a stream that we'll replace with the real one once everything is in place.\n    return this._zone.onStable\n        .pipe(take(1), switchMap(() => this.optionSelections));\n  }) as Observable<MatOptionSelectionChange>;\n\n  /** The currently active option, coerced to MatOption type. */\n  get activeOption(): MatOption | null {\n    if (this.autocomplete && this.autocomplete._keyManager) {\n      return this.autocomplete._keyManager.activeItem;\n    }\n\n    return null;\n  }\n\n  /** Stream of clicks outside of the autocomplete panel. */\n  private _getOutsideClickStream(): Observable<any> {\n    return merge(\n            fromEvent(this._document, 'click') as Observable<MouseEvent>,\n            fromEvent(this._document, 'auxclick') as Observable<MouseEvent>,\n            fromEvent(this._document, 'touchend') as Observable<TouchEvent>)\n        .pipe(filter(event => {\n          // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n          // fall back to check the first element in the path of the click event.\n          const clickTarget = _getEventTarget<HTMLElement>(event)!;\n          const formField = this._formField ? this._formField._elementRef.nativeElement : null;\n          const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n\n          return this._overlayAttached && clickTarget !== this._element.nativeElement &&\n              (!formField || !formField.contains(clickTarget)) &&\n              (!customOrigin || !customOrigin.contains(clickTarget)) &&\n              (!!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget));\n        }));\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  writeValue(value: any): void {\n    Promise.resolve(null).then(() => this._setTriggerValue(value));\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnChange(fn: (value: any) => {}): void {\n    this._onChange = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  registerOnTouched(fn: () => {}) {\n    this._onTouched = fn;\n  }\n\n  // Implemented as part of ControlValueAccessor.\n  setDisabledState(isDisabled: boolean) {\n    this._element.nativeElement.disabled = isDisabled;\n  }\n\n  _handleKeydown(event: KeyboardEvent): void {\n    const keyCode = event.keyCode;\n\n    // Prevent the default action on all escape key presses. This is here primarily to bring IE\n    // in line with other browsers. By default, pressing escape on IE will cause it to revert\n    // the input value to the one that it had on focus, however it won't dispatch any events\n    // which means that the model value will be out of sync with the view.\n    if (keyCode === ESCAPE && !hasModifierKey(event)) {\n      event.preventDefault();\n    }\n\n    if (this.activeOption && keyCode === ENTER && this.panelOpen) {\n      this.activeOption._selectViaInteraction();\n      this._resetActiveItem();\n      event.preventDefault();\n    } else if (this.autocomplete) {\n      const prevActiveItem = this.autocomplete._keyManager.activeItem;\n      const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n\n      if (this.panelOpen || keyCode === TAB) {\n        this.autocomplete._keyManager.onKeydown(event);\n      } else if (isArrowKey && this._canOpen()) {\n        this.openPanel();\n      }\n\n      if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n        this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n      }\n    }\n  }\n\n  _handleInput(event: KeyboardEvent): void {\n    let target = event.target as HTMLInputElement;\n    let value: number | string | null = target.value;\n\n    // Based on `NumberValueAccessor` from forms.\n    if (target.type === 'number') {\n      value = value == '' ? null : parseFloat(value);\n    }\n\n    // If the input has a placeholder, IE will fire the `input` event on page load,\n    // focus and blur, in addition to when the user actually changed the value. To\n    // filter out all of the extra events, we save the value on focus and between\n    // `input` events, and we check whether it changed.\n    // See: https://connect.microsoft.com/IE/feedback/details/885747/\n    if (this._previousValue !== value) {\n      this._previousValue = value;\n      this._onChange(value);\n\n      if (this._canOpen() && this._document.activeElement === event.target) {\n        this.openPanel();\n      }\n    }\n  }\n\n  _handleFocus(): void {\n    if (!this._canOpenOnNextFocus) {\n      this._canOpenOnNextFocus = true;\n    } else if (this._canOpen()) {\n      this._previousValue = this._element.nativeElement.value;\n      this._attachOverlay();\n      this._floatLabel(true);\n    }\n  }\n\n  /**\n   * In \"auto\" mode, the label will animate down as soon as focus is lost.\n   * This causes the value to jump when selecting an option with the mouse.\n   * This method manually floats the label until the panel can be closed.\n   * @param shouldAnimate Whether the label should be animated when it is floated.\n   */\n  private _floatLabel(shouldAnimate = false): void {\n    if (this._formField && this._formField.floatLabel === 'auto') {\n      if (shouldAnimate) {\n        this._formField._animateAndLockLabel();\n      } else {\n        this._formField.floatLabel = 'always';\n      }\n\n      this._manuallyFloatingLabel = true;\n    }\n  }\n\n  /** If the label has been manually elevated, return it to its normal state. */\n  private _resetLabel(): void  {\n    if (this._manuallyFloatingLabel) {\n      this._formField.floatLabel = 'auto';\n      this._manuallyFloatingLabel = false;\n    }\n  }\n\n  /**\n   * This method listens to a stream of panel closing actions and resets the\n   * stream every time the option list changes.\n   */\n  private _subscribeToClosingActions(): Subscription {\n    const firstStable = this._zone.onStable.pipe(take(1));\n    const optionChanges = this.autocomplete.options.changes.pipe(\n      tap(() => this._positionStrategy.reapplyLastPosition()),\n      // Defer emitting to the stream until the next tick, because changing\n      // bindings in here will cause \"changed after checked\" errors.\n      delay(0)\n    );\n\n    // When the zone is stable initially, and when the option list changes...\n    return merge(firstStable, optionChanges)\n        .pipe(\n            // create a new stream of panelClosingActions, replacing any previous streams\n            // that were created, and flatten it so our stream only emits closing events...\n            switchMap(() => {\n              const wasOpen = this.panelOpen;\n              this._resetActiveItem();\n              this.autocomplete._setVisibility();\n\n              if (this.panelOpen) {\n                this._overlayRef!.updatePosition();\n\n                // If the `panelOpen` state changed, we need to make sure to emit the `opened`\n                // event, because we may not have emitted it when the panel was attached. This\n                // can happen if the users opens the panel and there are no options, but the\n                // options come in slightly later or as a result of the value changing.\n                if (wasOpen !== this.panelOpen) {\n                  this.autocomplete.opened.emit();\n                }\n              }\n\n              return this.panelClosingActions;\n            }),\n            // when the first closing event occurs...\n            take(1))\n        // set the value, close the panel, and complete.\n        .subscribe(event => this._setValueAndClose(event));\n  }\n\n  /** Destroys the autocomplete suggestion panel. */\n  private _destroyPanel(): void {\n    if (this._overlayRef) {\n      this.closePanel();\n      this._overlayRef.dispose();\n      this._overlayRef = null;\n    }\n  }\n\n  private _setTriggerValue(value: any): void {\n    const toDisplay = this.autocomplete && this.autocomplete.displayWith ?\n      this.autocomplete.displayWith(value) :\n      value;\n\n    // Simply falling back to an empty string if the display value is falsy does not work properly.\n    // The display value can also be the number zero and shouldn't fall back to an empty string.\n    const inputValue = toDisplay != null ? toDisplay : '';\n\n    // If it's used within a `MatFormField`, we should set it through the property so it can go\n    // through change detection.\n    if (this._formField) {\n      this._formField._control.value = inputValue;\n    } else {\n      this._element.nativeElement.value = inputValue;\n    }\n\n    this._previousValue = inputValue;\n  }\n\n  /**\n   * This method closes the panel, and if a value is specified, also sets the associated\n   * control to that value. It will also mark the control as dirty if this interaction\n   * stemmed from the user.\n   */\n  private _setValueAndClose(event: MatOptionSelectionChange | null): void {\n    if (event && event.source) {\n      this._clearPreviousSelectedOption(event.source);\n      this._setTriggerValue(event.source.value);\n      this._onChange(event.source.value);\n      this._element.nativeElement.focus();\n      this.autocomplete._emitSelectEvent(event.source);\n    }\n\n    this.closePanel();\n  }\n\n  /**\n   * Clear any previous selected option and emit a selection change event for this option\n   */\n  private _clearPreviousSelectedOption(skip: MatOption) {\n    this.autocomplete.options.forEach(option => {\n      if (option !== skip && option.selected) {\n        option.deselect();\n      }\n    });\n  }\n\n  private _attachOverlay(): void {\n    if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getMatAutocompleteMissingPanelError();\n    }\n\n    let overlayRef = this._overlayRef;\n\n    if (!overlayRef) {\n      this._portal = new TemplatePortal(this.autocomplete.template,\n        this._viewContainerRef,\n        {id: this._formField?.getLabelId()});\n      overlayRef = this._overlay.create(this._getOverlayConfig());\n      this._overlayRef = overlayRef;\n\n      // Use the `keydownEvents` in order to take advantage of\n      // the overlay event targeting provided by the CDK overlay.\n      overlayRef.keydownEvents().subscribe(event => {\n        // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n        // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n        if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n            (event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {\n          this._closeKeyEventStream.next();\n          this._resetActiveItem();\n\n          // We need to stop propagation, otherwise the event will eventually\n          // reach the input itself and cause the overlay to be reopened.\n          event.stopPropagation();\n          event.preventDefault();\n        }\n      });\n\n      this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n        if (this.panelOpen && overlayRef) {\n          overlayRef.updateSize({width: this._getPanelWidth()});\n        }\n      });\n    } else {\n      // Update the trigger, panel width and direction, in case anything has changed.\n      this._positionStrategy.setOrigin(this._getConnectedElement());\n      overlayRef.updateSize({width: this._getPanelWidth()});\n    }\n\n    if (overlayRef && !overlayRef.hasAttached()) {\n      overlayRef.attach(this._portal);\n      this._closingActionsSubscription = this._subscribeToClosingActions();\n    }\n\n    const wasOpen = this.panelOpen;\n\n    this.autocomplete._setVisibility();\n    this.autocomplete._isOpen = this._overlayAttached = true;\n\n    // We need to do an extra `panelOpen` check in here, because the\n    // autocomplete won't be shown if there are no options.\n    if (this.panelOpen && wasOpen !== this.panelOpen) {\n      this.autocomplete.opened.emit();\n    }\n  }\n\n  private _getOverlayConfig(): OverlayConfig {\n    return new OverlayConfig({\n      positionStrategy: this._getOverlayPosition(),\n      scrollStrategy: this._scrollStrategy(),\n      width: this._getPanelWidth(),\n      direction: this._dir,\n      panelClass: this._defaults?.overlayPanelClass,\n    });\n  }\n\n  private _getOverlayPosition(): PositionStrategy {\n    const strategy = this._overlay.position()\n      .flexibleConnectedTo(this._getConnectedElement())\n      .withFlexibleDimensions(false)\n      .withPush(false);\n\n    this._setStrategyPositions(strategy);\n    this._positionStrategy = strategy;\n    return strategy;\n  }\n\n  /** Sets the positions on a position strategy based on the directive's input state. */\n  private _setStrategyPositions(positionStrategy: FlexibleConnectedPositionStrategy) {\n    // Note that we provide horizontal fallback positions, even though by default the dropdown\n    // width matches the input, because consumers can override the width. See #18854.\n    const belowPositions: ConnectedPosition[] = [\n      {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n      {originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top'}\n    ];\n\n    // The overlay edge connected to the trigger should have squared corners, while\n    // the opposite end has rounded corners. We apply a CSS class to swap the\n    // border-radius based on the overlay position.\n    const panelClass = this._aboveClass;\n    const abovePositions: ConnectedPosition[] = [\n      {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', panelClass},\n      {originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', panelClass}\n    ];\n\n    let positions: ConnectedPosition[];\n\n    if (this.position === 'above') {\n      positions = abovePositions;\n    } else if (this.position === 'below') {\n      positions = belowPositions;\n    } else {\n      positions = [...belowPositions, ...abovePositions];\n    }\n\n    positionStrategy.withPositions(positions);\n  }\n\n  private _getConnectedElement(): ElementRef<HTMLElement> {\n    if (this.connectedTo) {\n      return this.connectedTo.elementRef;\n    }\n\n    return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n  }\n\n  private _getPanelWidth(): number | string {\n    return this.autocomplete.panelWidth || this._getHostWidth();\n  }\n\n  /** Returns the width of the input element, so the panel width can match it. */\n  private _getHostWidth(): number {\n    return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n  }\n\n  /**\n   * Resets the active item to -1 so arrow events will activate the\n   * correct options, or to 0 if the consumer opted into it.\n   */\n  private _resetActiveItem(): void {\n    const autocomplete = this.autocomplete;\n\n    if (autocomplete.autoActiveFirstOption) {\n      // Note that we go through `setFirstItemActive`, rather than `setActiveItem(0)`, because\n      // the former will find the next enabled option, if the first one is disabled.\n      autocomplete._keyManager.setFirstItemActive();\n    } else {\n      autocomplete._keyManager.setActiveItem(-1);\n    }\n  }\n\n  /** Determines whether the panel can be opened. */\n  private _canOpen(): boolean {\n    const element = this._element.nativeElement;\n    return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n  }\n\n  /** Use defaultView of injected document if available or fallback to global window reference */\n  private _getWindow(): Window {\n    return this._document?.defaultView || window;\n  }\n\n  /** Scrolls to a particular option in the list. */\n  private _scrollToOption(index: number): void {\n    // Given that we are not actually focusing active options, we must manually adjust scroll\n    // to reveal options below the fold. First, we find the offset of the option from the top\n    // of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n    // the panel height + the option height, so the active option will be just visible at the\n    // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n    // will become the offset. If that offset is visible within the panel already, the scrollTop is\n    // not adjusted.\n    const autocomplete = this.autocomplete;\n    const labelCount = _countGroupLabelsBeforeOption(index,\n      autocomplete.options, autocomplete.optionGroups);\n\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      autocomplete._setScrollTop(0);\n    } else if (autocomplete.panel) {\n      const option = autocomplete.options.toArray()[index];\n\n      if (option) {\n        const element = option._getHostElement();\n        const newScrollPosition = _getOptionScrollPosition(\n          element.offsetTop,\n          element.offsetHeight,\n          autocomplete._getScrollTop(),\n          autocomplete.panel.nativeElement.offsetHeight\n        );\n\n        autocomplete._setScrollTop(newScrollPosition);\n      }\n    }\n  }\n\n  static ngAcceptInputType_autocompleteDisabled: BooleanInput;\n}\n\n\n@Directive({\n  selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n  host: {\n    'class': 'mat-autocomplete-trigger',\n    '[attr.autocomplete]': 'autocompleteAttribute',\n    '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n    '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n    '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n    '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n    '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n    '[attr.aria-haspopup]': '!autocompleteDisabled',\n    // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n    // a little earlier. This avoids issues where IE delays the focusing of the input.\n    '(focusin)': '_handleFocus()',\n    '(blur)': '_onTouched()',\n    '(input)': '_handleInput($event)',\n    '(keydown)': '_handleKeydown($event)',\n  },\n  exportAs: 'matAutocompleteTrigger',\n  providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR]\n})\nexport class MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {\n  protected _aboveClass = 'mat-autocomplete-panel-above';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {MatOptionModule, MatCommonModule} from '@angular/material/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatAutocomplete} from './autocomplete';\nimport {\n  MatAutocompleteTrigger,\n  MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './autocomplete-trigger';\nimport {MatAutocompleteOrigin} from './autocomplete-origin';\n\n\n@NgModule({\n  imports: [\n    OverlayModule,\n    MatOptionModule,\n    MatCommonModule,\n    CommonModule\n  ],\n  exports: [\n    MatAutocomplete,\n    MatAutocompleteTrigger,\n    MatAutocompleteOrigin,\n    CdkScrollableModule,\n    MatOptionModule,\n    MatCommonModule,\n  ],\n  declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n  providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class MatAutocompleteModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './autocomplete';\nexport * from './autocomplete-module';\nexport * from './autocomplete-trigger';\nexport * from './autocomplete-origin';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -19,5 +19,4 @@
 const _MatBadgeBase = mixinDisabled(class {
 });
-const BADGE_CONTENT_CLASS = 'mat-badge-content';
 /** Directive to display a text badge. */
 class MatBadge extends _MatBadgeBase {
@@ -29,4 +28,6 @@
         this._renderer = _renderer;
         this._animationMode = _animationMode;
+        /** Whether the badge has any content. */
+        this._hasContent = false;
         this._color = 'primary';
         this._overlap = true;
@@ -40,6 +41,4 @@
         /** Unique id for the badge */
         this._id = nextId++;
-        /** Whether the OnInit lifecycle hook has run yet */
-        this._isInitialized = false;
         if (typeof ngDevMode === 'undefined' || ngDevMode) {
             const nativeElement = _elementRef.nativeElement;
@@ -60,15 +59,16 @@
         this._overlap = coerceBooleanProperty(val);
     }
-    /** The content for the badge */
-    get content() {
-        return this._content;
-    }
-    set content(newContent) {
-        this._updateRenderedContent(newContent);
-    }
     /** Message used to describe the decorated element via aria-describedby */
     get description() { return this._description; }
     set description(newDescription) {
-        this._updateHostAriaDescription(newDescription);
+        if (newDescription !== this._description) {
+            const badgeElement = this._badgeElement;
+            this._updateHostAriaDescription(newDescription, this._description);
+            this._description = newDescription;
+            if (badgeElement) {
+                newDescription ? badgeElement.setAttribute('aria-label', newDescription) :
+                    badgeElement.removeAttribute('aria-label');
+            }
+        }
     }
     /** Whether the badge is hidden. */
@@ -85,29 +85,41 @@
         return this.position.indexOf('before') === -1;
     }
+    ngOnChanges(changes) {
+        const contentChange = changes['content'];
+        if (contentChange) {
+            const value = contentChange.currentValue;
+            this._hasContent = value != null && `${value}`.trim().length > 0;
+            this._updateTextContent();
+        }
+    }
+    ngOnDestroy() {
+        const badgeElement = this._badgeElement;
+        if (badgeElement) {
+            if (this.description) {
+                this._ariaDescriber.removeDescription(badgeElement, this.description);
+            }
+            // When creating a badge through the Renderer, Angular will keep it in an index.
+            // We have to destroy it ourselves, otherwise it'll be retained in memory.
+            if (this._renderer.destroyNode) {
+                this._renderer.destroyNode(badgeElement);
+            }
+        }
+    }
     /**
-     * Gets the element into which the badge's content is being rendered. Undefined if the element
-     * hasn't been created (e.g. if the badge doesn't have content).
+     * Gets the element into which the badge's content is being rendered.
+     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
      */
     getBadgeElement() {
         return this._badgeElement;
     }
-    ngOnInit() {
-        // We may have server-side rendered badge that we need to clear.
-        // We need to do this in ngOnInit because the full content of the component
-        // on which the badge is attached won't necessarily be in the DOM until this point.
-        this._clearExistingBadges();
-        if (this.content && !this._badgeElement) {
+    /** Injects a span element into the DOM with the content. */
+    _updateTextContent() {
+        if (!this._badgeElement) {
             this._badgeElement = this._createBadgeElement();
-            this._updateRenderedContent(this.content);
-        }
-        this._isInitialized = true;
-    }
-    ngOnDestroy() {
-        // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.
-        // We have to destroy it ourselves, otherwise it'll be retained in memory.
-        if (this._renderer.destroyNode) {
-            this._renderer.destroyNode(this._badgeElement);
-        }
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+        }
+        else {
+            this._badgeElement.textContent = this._stringifyContent();
+        }
+        return this._badgeElement;
     }
     /** Creates the badge element */
@@ -115,11 +127,15 @@
         const badgeElement = this._renderer.createElement('span');
         const activeClass = 'mat-badge-active';
+        const contentClass = 'mat-badge-content';
+        // Clear any existing badges which may have persisted from a server-side render.
+        this._clearExistingBadges(contentClass);
         badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);
-        // The badge is aria-hidden because we don't want it to appear in the page's navigation
-        // flow. Instead, we use the badge to describe the decorated element with aria-describedby.
-        badgeElement.setAttribute('aria-hidden', 'true');
-        badgeElement.classList.add(BADGE_CONTENT_CLASS);
+        badgeElement.classList.add(contentClass);
+        badgeElement.textContent = this._stringifyContent();
         if (this._animationMode === 'NoopAnimations') {
             badgeElement.classList.add('_mat-animation-noopable');
+        }
+        if (this.description) {
+            badgeElement.setAttribute('aria-label', this.description);
         }
         this._elementRef.nativeElement.appendChild(badgeElement);
@@ -137,50 +153,51 @@
         return badgeElement;
     }
-    /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-    _updateRenderedContent(newContent) {
-        const newContentNormalized = `${newContent !== null && newContent !== void 0 ? newContent : ''}`.trim();
-        // Don't create the badge element if the directive isn't initialized because we want to
-        // append the badge element to the *end* of the host element's content for backwards
-        // compatibility.
-        if (this._isInitialized && newContentNormalized && !this._badgeElement) {
-            this._badgeElement = this._createBadgeElement();
-        }
-        if (this._badgeElement) {
-            this._badgeElement.textContent = newContentNormalized;
-        }
-        this._content = newContentNormalized;
-    }
-    /** Updates the host element's aria description via AriaDescriber. */
-    _updateHostAriaDescription(newDescription) {
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+    /** Sets the aria-label property on the element */
+    _updateHostAriaDescription(newDescription, oldDescription) {
+        // ensure content available before setting label
+        const content = this._updateTextContent();
+        if (oldDescription) {
+            this._ariaDescriber.removeDescription(content, oldDescription);
+        }
         if (newDescription) {
-            this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);
-        }
-        this._description = newDescription;
+            this._ariaDescriber.describe(content, newDescription);
+        }
     }
     /** Adds css theme class given the color to the component host */
     _setColor(colorPalette) {
-        const classList = this._elementRef.nativeElement.classList;
-        classList.remove(`mat-badge-${this._color}`);
-        if (colorPalette) {
-            classList.add(`mat-badge-${colorPalette}`);
+        if (colorPalette !== this._color) {
+            const classList = this._elementRef.nativeElement.classList;
+            if (this._color) {
+                classList.remove(`mat-badge-${this._color}`);
+            }
+            if (colorPalette) {
+                classList.add(`mat-badge-${colorPalette}`);
+            }
         }
     }
     /** Clears any existing badges that might be left over from server-side rendering. */
-    _clearExistingBadges() {
-        // Only check direct children of this host element in order to avoid deleting
-        // any badges that might exist in descendant elements.
-        const badges = this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);
-        for (const badgeElement of Array.from(badges)) {
-            if (badgeElement !== this._badgeElement) {
-                badgeElement.remove();
-            }
-        }
+    _clearExistingBadges(cssClass) {
+        const element = this._elementRef.nativeElement;
+        let childCount = element.children.length;
+        // Use a reverse while, because we'll be removing elements from the list as we're iterating.
+        while (childCount--) {
+            const currentChild = element.children[childCount];
+            if (currentChild.classList.contains(cssClass)) {
+                element.removeChild(currentChild);
+            }
+        }
+    }
+    /** Gets the string representation of the badge content. */
+    _stringifyContent() {
+        // Convert null and undefined to an empty string which is consistent
+        // with how Angular handles them in inside template interpolations.
+        const content = this.content;
+        return content == null ? '' : `${content}`;
     }
 }
 MatBadge.ɵfac = function MatBadge_Factory(t) { return new (t || MatBadge)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.AriaDescriber), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };
 MatBadge.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatBadge, selectors: [["", "matBadge", ""]], hostAttrs: [1, "mat-badge"], hostVars: 20, hostBindings: function MatBadge_HostBindings(rf, ctx) { if (rf & 2) {
-        ɵngcc0.ɵɵclassProp("mat-badge-overlap", ctx.overlap)("mat-badge-above", ctx.isAbove())("mat-badge-below", !ctx.isAbove())("mat-badge-before", !ctx.isAfter())("mat-badge-after", ctx.isAfter())("mat-badge-small", ctx.size === "small")("mat-badge-medium", ctx.size === "medium")("mat-badge-large", ctx.size === "large")("mat-badge-hidden", ctx.hidden || !ctx.content)("mat-badge-disabled", ctx.disabled);
-    } }, inputs: { disabled: ["matBadgeDisabled", "disabled"], position: ["matBadgePosition", "position"], size: ["matBadgeSize", "size"], color: ["matBadgeColor", "color"], overlap: ["matBadgeOverlap", "overlap"], content: ["matBadge", "content"], description: ["matBadgeDescription", "description"], hidden: ["matBadgeHidden", "hidden"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });
+        ɵngcc0.ɵɵclassProp("mat-badge-overlap", ctx.overlap)("mat-badge-above", ctx.isAbove())("mat-badge-below", !ctx.isAbove())("mat-badge-before", !ctx.isAfter())("mat-badge-after", ctx.isAfter())("mat-badge-small", ctx.size === "small")("mat-badge-medium", ctx.size === "medium")("mat-badge-large", ctx.size === "large")("mat-badge-hidden", ctx.hidden || !ctx._hasContent)("mat-badge-disabled", ctx.disabled);
+    } }, inputs: { disabled: ["matBadgeDisabled", "disabled"], position: ["matBadgePosition", "position"], size: ["matBadgeSize", "size"], color: ["matBadgeColor", "color"], overlap: ["matBadgeOverlap", "overlap"], description: ["matBadgeDescription", "description"], hidden: ["matBadgeHidden", "hidden"], content: ["matBadge", "content"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });
 MatBadge.ctorParameters = () => [
     { type: NgZone },
@@ -214,5 +231,5 @@
                     '[class.mat-badge-medium]': 'size === "medium"',
                     '[class.mat-badge-large]': 'size === "large"',
-                    '[class.mat-badge-hidden]': 'hidden || !content',
+                    '[class.mat-badge-hidden]': 'hidden || !_hasContent',
                     '[class.mat-badge-disabled]': 'disabled'
                 }
@@ -235,7 +252,4 @@
             type: Input,
             args: ['matBadgeOverlap']
-        }], content: [{
-            type: Input,
-            args: ['matBadge']
         }], description: [{
             type: Input,
@@ -244,4 +258,7 @@
             type: Input,
             args: ['matBadgeHidden']
+        }], content: [{
+            type: Input,
+            args: ['matBadge']
         }] }); })();
 
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"badge.js","sources":["../../../../../../src/material/badge/badge.ts","../../../../../../src/material/badge/badge-module.ts","../../../../../../src/material/badge/public-api.ts","../../../../../../src/material/badge/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Renderer2,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\nconst BADGE_CONTENT_CLASS = 'mat-badge-content';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !content',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge')\n  get content(): string | number | undefined | null {\n    return this._content;\n  }\n  set content(newContent: string | number | undefined | null) {\n    this._updateRenderedContent(newContent);\n  }\n  private _content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    this._updateHostAriaDescription(newDescription);\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  /** Visible badge element. */\n  private _badgeElement: HTMLElement | undefined;\n\n  /** Whether the OnInit lifecycle hook has run yet */\n  private _isInitialized = false;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered. Undefined if the element\n   * hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  ngOnInit() {\n    // We may have server-side rendered badge that we need to clear.\n    // We need to do this in ngOnInit because the full content of the component\n    // on which the badge is attached won't necessarily be in the DOM until this point.\n    this._clearExistingBadges();\n\n    if (this.content && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n      this._updateRenderedContent(this.content);\n    }\n\n    this._isInitialized = true;\n  }\n\n  ngOnDestroy() {\n    // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.\n    // We have to destroy it ourselves, otherwise it'll be retained in memory.\n    if (this._renderer.destroyNode) {\n      this._renderer.destroyNode(this._badgeElement);\n    }\n\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n\n    // The badge is aria-hidden because we don't want it to appear in the page's navigation\n    // flow. Instead, we use the badge to describe the decorated element with aria-describedby.\n    badgeElement.setAttribute('aria-hidden', 'true');\n    badgeElement.classList.add(BADGE_CONTENT_CLASS);\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n  private _updateRenderedContent(newContent: string | number | undefined | null): void {\n    const newContentNormalized: string = `${newContent ?? ''}`.trim();\n\n    // Don't create the badge element if the directive isn't initialized because we want to\n    // append the badge element to the *end* of the host element's content for backwards\n    // compatibility.\n    if (this._isInitialized && newContentNormalized && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    }\n\n    if (this._badgeElement) {\n      this._badgeElement.textContent = newContentNormalized;\n    }\n\n    this._content = newContentNormalized;\n  }\n\n  /** Updates the host element's aria description via AriaDescriber. */\n  private _updateHostAriaDescription(newDescription: string): void {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n    if (newDescription) {\n      this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);\n    }\n    this._description = newDescription;\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    const classList = this._elementRef.nativeElement.classList;\n    classList.remove(`mat-badge-${this._color}`);\n    if (colorPalette) {\n      classList.add(`mat-badge-${colorPalette}`);\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges() {\n    // Only check direct children of this host element in order to avoid deleting\n    // any badges that might exist in descendant elements.\n    const badges =\n        this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);\n    for (const badgeElement of Array.from(badges)) {\n      if (badgeElement !== this._badgeElement) {\n        badgeElement.remove();\n      }\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
+{"version":3,"file":"badge.js","sources":["../../../../../../src/material/badge/badge.ts","../../../../../../src/material/badge/badge-module.ts","../../../../../../src/material/badge/public-api.ts","../../../../../../src/material/badge/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !_hasContent',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {\n  /** Whether the badge has any content. */\n  _hasContent = false;\n\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge') content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    if (newDescription !== this._description) {\n      const badgeElement = this._badgeElement;\n      this._updateHostAriaDescription(newDescription, this._description);\n      this._description = newDescription;\n\n      if (badgeElement) {\n        newDescription ? badgeElement.setAttribute('aria-label', newDescription) :\n            badgeElement.removeAttribute('aria-label');\n      }\n    }\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  private _badgeElement: HTMLElement | undefined;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const contentChange = changes['content'];\n\n    if (contentChange) {\n      const value = contentChange.currentValue;\n      this._hasContent = value != null && `${value}`.trim().length > 0;\n      this._updateTextContent();\n    }\n  }\n\n  ngOnDestroy() {\n    const badgeElement = this._badgeElement;\n\n    if (badgeElement) {\n      if (this.description) {\n        this._ariaDescriber.removeDescription(badgeElement, this.description);\n      }\n\n      // When creating a badge through the Renderer, Angular will keep it in an index.\n      // We have to destroy it ourselves, otherwise it'll be retained in memory.\n      if (this._renderer.destroyNode) {\n        this._renderer.destroyNode(badgeElement);\n      }\n    }\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered.\n   * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  /** Injects a span element into the DOM with the content. */\n  private _updateTextContent(): HTMLSpanElement {\n    if (!this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    } else {\n      this._badgeElement.textContent = this._stringifyContent();\n    }\n    return this._badgeElement;\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n    const contentClass = 'mat-badge-content';\n\n    // Clear any existing badges which may have persisted from a server-side render.\n    this._clearExistingBadges(contentClass);\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n    badgeElement.classList.add(contentClass);\n    badgeElement.textContent = this._stringifyContent();\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    if (this.description) {\n      badgeElement.setAttribute('aria-label', this.description);\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Sets the aria-label property on the element */\n  private _updateHostAriaDescription(newDescription: string, oldDescription: string): void {\n    // ensure content available before setting label\n    const content = this._updateTextContent();\n\n    if (oldDescription) {\n      this._ariaDescriber.removeDescription(content, oldDescription);\n    }\n\n    if (newDescription) {\n      this._ariaDescriber.describe(content, newDescription);\n    }\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    if (colorPalette !== this._color) {\n      const classList = this._elementRef.nativeElement.classList;\n      if (this._color) {\n        classList.remove(`mat-badge-${this._color}`);\n      }\n      if (colorPalette) {\n        classList.add(`mat-badge-${colorPalette}`);\n      }\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges(cssClass: string) {\n    const element = this._elementRef.nativeElement;\n    let childCount = element.children.length;\n\n    // Use a reverse while, because we'll be removing elements from the list as we're iterating.\n    while (childCount--) {\n      const currentChild = element.children[childCount];\n\n      if (currentChild.classList.contains(cssClass)) {\n        element.removeChild(currentChild);\n      }\n    }\n  }\n\n  /** Gets the string representation of the badge content. */\n  private _stringifyContent(): string {\n    // Convert null and undefined to an empty string which is consistent\n    // with how Angular handles them in inside template interpolations.\n    const content = this.content;\n    return content == null ? '' : `${content}`;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -43,5 +43,5 @@
 } }
 const _c2 = ["*"];
-const VERSION$1 = new Version('12.2.9');
+const VERSION$1 = new Version('12.2.10');
 
 /**
@@ -77,5 +77,5 @@
 // Can be removed once the Material primary entry-point no longer
 // re-exports all secondary entry-points
-const VERSION = new Version('12.2.9');
+const VERSION = new Version('12.2.10');
 /** @docs-private */
 function MATERIAL_SANITY_CHECKS_FACTORY() {
Index: trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/index.ts"],"names":["VERSION","CDK_VERSION"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAaA,SAAO,GAAG,IAAI,OAAO,CAAC;AACnC;AAAC;AAAI,GADiD,HCVtD;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,MAAa,eAAe;AAC5B;AAAS,8BAAc,GAAG,6BAA6B,CAAC;AAC/C,kCAAkB,GAAG,6BAA6B,CAAC;AACnD,kCAAkB,GAAG,2BAA2B,CAAC;AACjD,2BAAW,GAAG,6BAA6B,CAAC;AAIrD;AACA,MAAa,kBAAkB;AAC/B;AAAS,0BAAO,GAAG,OAAO,CAAC;AAClB,2BAAQ,GAAG,OAAO,CAAC;AACnB,0BAAO,GAAG,OAAO;AAC1B;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;AAC5B,QAD+C,CAAC,CAAC,VAEjD;AACA,SAAgB,8BAA8B;AAAK,IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;AACA,MAAa,sBAAsB,GAAG,IAAI,cAAc,CAAe,mBAAmB,EAAE;AAC5F,IAAE,UAAU,EAAE,MAAM;AACpB,IAAE,OAAO,EAAE,8BAA8B;AACzC,CAAC,EAAE;AAeH;AACA;AACA;AACA;AACA;AACA;AACA,MAIa,eAAe;AAC5B,IASE,YACI,wBAAkD,EACN,YAAiB,EAC3C,QAAa;AACrC;AAEyE,QAd/D,yBAAoB,GAAG,KAAK,CAAC;AACvC,QAWI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC9B;AAEG;AACI,QAAH,wBAAwB,CAAC,oCAAoC,EAAE,CAAC;AACpE;AAEG;AACI,QAAH,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;AACtC,QACI,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACpC,YAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC,YAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAClC,YAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnC,YAAM,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACvC,SAAK;AACL,KAAG;AACH;AAEC,IAAS,eAAe,CAAC,IAAgC;AAAI;AACiC;AACD;AAE3F;AACI,QAAH,IAAI,CAAC,SAAS,EAAE,IAAI,kBAAkB,EAAE,EAAE;AAC9C,YAAM,OAAO,KAAK,CAAC;AACnB,SAAK;AACL,QACI,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AACjD,YAAM,OAAO,IAAI,CAAC,aAAa,CAAC;AAChC,SAAK;AACL,QACI,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACtC,KAAG;AACH,IACU,sBAAsB;AAAK,QACjC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACpE,YAAM,OAAO,CAAC,IAAI,CACV,2DAA2D;AACnE,gBAAQ,6DAA6D,CAC9D,CAAC;AACR,SAAK;AACL,KAAG;AACH,IACU,oBAAoB;AAAK;AACoD;AAErF,QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;AAC9D,YAAQ,OAAO,gBAAgB,KAAK,UAAU,EAAE;AAChD,YAAM,OAAO;AACb,SAAK;AACL,QACI,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D,QACI,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACzD,QAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACjD,QACI,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACxD;AAEG;AACI;AACI,QAAP,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,KAAK,MAAM,EAAE;AAC3D,YAAM,OAAO,CAAC,IAAI,CACV,4DAA4D;AACpE,gBAAQ,2DAA2D;AACnE,gBAAQ,iEAAiE,CAClE,CAAC;AACR,SAAK;AACL,QACI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACjD,KAAG;AACH;AAEC,IAAS,qBAAqB;AAAK,QAChC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,KAAKC,SAAW,CAAC,IAAI,EAAE;AAC9E,YAAM,OAAO,CAAC,IAAI,CACR,gCAAgC,GAAG,OAAO,CAAC,IAAI,GAAG,mBAAmB;AAC/E,gBAAU,2BAA2B,GAAGA,SAAW,CAAC,IAAI,GAAG,MAAM;AACjE,gBAAU,iEAAiE,CACpE,CAAC;AACR,SAAK;AACL,KAAG;AACH;2CArGC,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC,UAAU,CAAC,kBACrB,OAAO,EAAE,CAAC,UAAU,CAAC,eACtB;;sGACI;AAAC;AACU,YAhDR,wBAAwB;AAAI,4CA2D7B,QAAQ,YAAI,MAAM,SAAC,sBAAsB;AAAS,4CAClD,MAAM,SAAC,QAAQ;AAAQ;;;;;;;;;;;;;;;;qNAAE;AAAC;ACpEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAmBgB,aAAa,CAA4B,IAAO;AAAI,IAClE,OAAO,cAAc,IAAI;AAC3B,QAKI,YAAY,GAAG,IAAW;AAAI,YAAA,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAAC,YALtC,cAAS,GAAY,KAAK,CAAC;AACvC,SAImD;AACnD,QAJI,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;AAC7C,QAAI,IAAI,QAAQ,CAAC,KAAU,IAAI,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/E,KAEG,CAAC;AACJ;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SA+BgB,UAAU,CACtB,IAAO,EAAE,YAA2B;AAAI,IAC1C,OAAO,cAAc,IAAI;AAC3B,QAmBI,YAAY,GAAG,IAAW;AAC9B,YAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrB,YApBI,iBAAY,GAAG,YAAY,CAAC;AAChC;AAEoB,YAmBd,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;AAChC,SAAK;AACL,QAtBI,IAAI,KAAK,KAAmB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;AACrD,QAAI,IAAI,KAAK,CAAC,KAAmB;AACjC,YAAM,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;AACtD,YACM,IAAI,YAAY,KAAK,IAAI,CAAC,MAAM,EAAE;AACxC,gBAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,oBAAU,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAChF,iBAAS;AACT,gBAAQ,IAAI,YAAY,EAAE;AAC1B,oBAAU,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,YAAY,EAAE,CAAC,CAAC;AAC9E,iBAAS;AACT,gBACQ,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;AACnC,aAAO;AACP,SAAK;AACL,KAOG,CAAC;AACJ;AACA;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAqBgB,kBAAkB,CAA4B,IAAO;AAAI,IACvE,OAAO,cAAc,IAAI;AAC3B,QAMI,YAAY,GAAG,IAAW;AAAI,YAAA,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAAC,YANtC,mBAAc,GAAY,KAAK,CAAC;AAC5C,SAKmD;AACnD;AAEsD,QANlD,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;AACvD,QAAI,IAAI,aAAa,CAAC,KAAU,IAAI,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;AACzF,KAEG,CAAC;AACJ;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAyBgB,aAAa,CAC3B,IAAO,EAAE,eAAe,GAAG,CAAC;AAAI,IAChC,OAAO,cAAc,IAAI;AAAG,QAU1B,YAAY,GAAG,IAAW;AAC9B,YAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrB,YAXY,cAAS,GAAW,eAAe,CAAC;AAChD,YAAI,oBAAe,GAAG,eAAe,CAAC;AACtC,SASK;AACL,QATI,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;AAC1E,QAAI,IAAI,QAAQ,CAAC,KAAa;AAC9B;AACM,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAC1F,SAAK;AACL,KAIG,CAAC;AACJ;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAyCgB,eAAe,CAAuC,IAAO;AAC5E,IACC,OAAO,cAAc,IAAI;AAC3B,QA2BI,YAAY,GAAG,IAAW;AAC9B,YAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrB;AAGkF;AAAqG;AAAqG;AAAkE;AAA+D,YA3BhZ,iBAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AAChD;AAEO,YAAH,eAAU,GAAY,KAAK,CAAC;AAChC,SAoBK;AACL;AAE2E,QAlBvE,gBAAgB;AACpB,YAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC,YAAM,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,CAAC;AAC/D,YAAM,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,yBAAyB,CAAC;AAC/E,YAAM,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAsB,GAAG,IAAI,CAAC;AACpF,YAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7D,YACM,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACjC,gBAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AACnC,gBAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACjC,aAAO;AACP,SAAK;AACL,KAIG,CAAC;AACJ;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AAgCA;AACA,SAAgB,gBAAgB,CAA4B,IAAO;AAClE,IACC,OAAO,cAAc,IAAI;AAC3B,QAwBI,YAAY,GAAG,IAAW;AAAI,YAAA,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAAC;AAGa,YA1B3D,mBAAc,GAAG,KAAK,CAAC;AAC3B;AAEO;AACQ;AACQ;AAEA;AAAgB,YAAnC,wBAAmB,GAA8B,EAAE,CAAC;AACxD;AAEO;AACQ;AAEA;AAAgB,YAA3B,gBAAW,GAAG,IAAI,UAAU,CAAO,UAAU;AACjD;AACU;AACU,gBAAd,IAAI,IAAI,CAAC,cAAc,EAAE;AAC/B,oBAAQ,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAC3C,iBAAO;AAAC,qBAAK;AACb,oBAAQ,IAAI,CAAC,mBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACnD,iBAAO;AACP,aAAK,CAAC,CAAC;AACP,SACmD;AACnD;AAEG;AACI;AACI;AAEJ;AAAY,QAAf,gBAAgB;AAAK,YACnB,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AAClF,gBAAQ,MAAM,KAAK,CAAC,4DAA4D;AAChF,oBAAY,6BAA6B,CAAC,CAAC;AAC3C,aAAO;AACP,YACM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACjC,YACM,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAChE,YAAM,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACtC,SAAK;AACL;AAEG,QAAC,iBAAiB,CAAC,UAA4B;AAAI,YAChD,UAAU,CAAC,IAAI,EAAE,CAAC;AACxB,YAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC5B,SAAK;AACL,KAAG,CAAC;AACJ;AACA;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA,MAAa,eAAe,GAAG,IAAI,cAAc,CAAS,iBAAiB,EAAE;AAC7E,IAAE,UAAU,EAAE,MAAM;AACpB,IAAE,OAAO,EAAE,uBAAuB;AAClC,CAAC,EAAE;AAEH;AACA,SAAgB,uBAAuB;AAAK,IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED;AACA,MAAsB,WAAW;AAAG,IAApC;AAAgB,QAGK,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC1D;AAEK,QAAM,kBAAa,GAAqB,IAAI,CAAC,cAAc,CAAC;AACjE,KA8PC;AACD;AAAQ;AAA6E;AAAyD;AAAuC;AAAkC;AAAQ,IAlF7N,kBAAkB,CAAC,GAAY;AAAI,QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAQ,CAAC,GAAG,GAAQ,GAAG,IAAI,CAAC;AAChF,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AACE;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAArB,WAAW,CAAC,KAAU;AAAI,QACxB,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC5E,YAAM,OAAO,KAAK,CAAC;AACnB,SAAK;AACL,QAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1B,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,SAAS,CAAC,MAAW;AACvB,QAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,QAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AAC/B,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAAX,WAAW,CAAC,KAAQ,EAAE,MAAS;AAAI,QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACrD,YAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpD,YAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnD,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAAX,QAAQ,CAAC,KAAe,EAAE,MAAgB;AAAI,QAC5C,IAAI,KAAK,IAAI,MAAM,EAAE;AACzB,YAAM,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAM,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,YAAM,IAAI,UAAU,IAAI,WAAW,EAAE;AACrC,gBAAQ,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,aAAO;AACP,YAAM,OAAO,UAAU,IAAI,WAAW,CAAC;AACvC,SAAK;AACL,QAAI,OAAO,KAAK,IAAI,MAAM,CAAC;AAC3B,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAAb,SAAS,CAAC,IAAO,EAAE,GAAc,EAAE,GAAc;AAAI,QACnD,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AAChD,YAAM,OAAO,GAAG,CAAC;AACjB,SAAK;AACL,QAAI,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AAChD,YAAM,OAAO,GAAG,CAAC;AACjB,SAAK;AACL,QAAI,OAAO,IAAI,CAAC;AAChB,KAAG;AACH;AACA;AC7RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAkBa,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;AACrF;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA,IAAI,iBAA0B,CAAC;AAE/B;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,IAAE,iBAAiB,GAAG,OAAO,IAAI,IAAI,WAAW,CAAC;AACjD,CAAC;AAAC,WAAM;AACR,IAAE,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC;AAED;AACA,MAAM,mBAAmB,GAAG;AAC5B,IAAE,MAAM,EAAE;AACV,QAAI,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW;AACzF,QAAI,SAAS,EAAE,UAAU,EAAE,UAAU;AACrC,KAAG;AACH,IAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC/F,IAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxE,CAAC,CAAC;AACF,aAGqC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AADvD;AACA,MAAM,kBAAkB,GAAG,KAAK,CAAC,EAAE,OAAqB,CAAC;AAGzD;AACA,MAAM,yBAAyB,GAAG;AAClC,IAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AACxF,IAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5D,IAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/C,CAAC,CAAC;AAGF;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAChB,oFAAoF,CAAC;AAGzF;AACA,SAAS,KAAK,CAAI,MAAc,EAAE,aAAmC;AAAI,IACvE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,QAAI,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,KAAG;AACH,IAAE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;AACA,MACa,iBAAkB,SAAQ,WAAiB;AACxD,IAgBE,YAAiD,aAAqB,EAAE,QAAkB;AAC5F,QAAI,KAAK,EAAE,CAAC;AACZ;AAAY;AAEyD;AAEd;AAOpC;AACM;AAGtB;AAKD;AAIU;AAC2E;AACtE;AAChB,QA/BC,qBAAgB,GAAY,IAAI,CAAC;AACnC,QAGI,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACnC;AAEG,QAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9C,QAAI,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC;AACxD,KAAG;AACH,IACE,OAAO,CAAC,IAAU;AAAI,QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,KAAG;AACH,IACE,QAAQ,CAAC,IAAU;AAAI,QACrB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3B,KAAG;AACH,IACE,OAAO,CAAC,IAAU;AAAI,QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AAC1B,KAAG;AACH,IACE,YAAY,CAAC,IAAU;AAAI,QACzB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACzB,KAAG;AACH,IACE,aAAa,CAAC,KAAkC;AAAI,QAClD,IAAI,iBAAiB,EAAE;AAC3B,YAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AACxF,YAAM,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,IACd,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,SAAK;AACL,QAAI,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACtC,KAAG;AACH,IACE,YAAY;AAAK,QACf,IAAI,iBAAiB,EAAE;AAC3B,YAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AAC1F,YAAM,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,8BAA8B,CACrD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,SAAK;AACL,QAAI,OAAO,kBAAkB,CAAC;AAC9B,KAAG;AACH,IACE,iBAAiB,CAAC,KAAkC;AAAI,QACtD,IAAI,iBAAiB,EAAE;AAC3B,YAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AAC1F,YAAM,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,8BAA8B,CACpD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,SAAK;AACL,QAAI,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAC5C,KAAG;AACH,IACE,WAAW,CAAC,IAAU;AAAI,QACxB,IAAI,iBAAiB,EAAE;AAC3B,YAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AAC3F,YAAM,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,SAAK;AACL,QAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,KAAG;AACH,IACE,iBAAiB;AAAK;AACuE,QAC3F,OAAO,CAAC,CAAC;AACb,KAAG;AACH,IACE,iBAAiB,CAAC,IAAU;AAAI,QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,KAAG;AACH,IACE,KAAK,CAAC,IAAU;AAAI,QAClB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,KAAG;AACH,IACE,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY;AAAI,QACtD,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;AACvD;AACM;AACM,YAAN,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;AACnC,gBAAQ,MAAM,KAAK,CAAC,wBAAwB,KAAK,4CAA4C,CAAC,CAAC;AAC/F,aAAO;AACP,YACM,IAAI,IAAI,GAAG,CAAC,EAAE;AACpB,gBAAQ,MAAM,KAAK,CAAC,iBAAiB,IAAI,mCAAmC,CAAC,CAAC;AAC9E,aAAO;AACP,SAAK;AACL,QACI,IAAI,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACjE;AACI,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AACvF,YAAM,MAAM,KAAK,CAAC,iBAAiB,IAAI,2BAA2B,KAAK,IAAI,CAAC,CAAC;AAC7E,SAAK;AACL,QACI,OAAO,MAAM,CAAC;AAClB,KAAG;AACH,IACE,KAAK;AAAK,QACR,OAAO,IAAI,IAAI,EAAE,CAAC;AACtB,KAAG;AACH,IACE,KAAK,CAAC,KAAU;AAAI;AACsE;AAC9E,QACV,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;AAClC,YAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAK;AACL,QAAI,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;AACtD,KAAG;AACH,IACE,MAAM,CAAC,IAAU,EAAE,aAAqB;AAAI,QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAM,MAAM,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACpE,SAAK;AACL,QACI,IAAI,iBAAiB,EAAE;AAC3B;AACM;AACM,YAAN,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE;AACpF,gBAAQ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,gBAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,aAAO;AACP,YACM,aAAa,mCAAO,aAAa,KAAE,QAAQ,EAAE,KAAK,GAAC,CAAC;AAC1D,YACM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACtE,YAAM,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,SAAK;AACL,QAAI,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACpE,KAAG;AACH,IACE,gBAAgB,CAAC,IAAU,EAAE,KAAa;AAAI,QAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;AACpD,KAAG;AACH,IACE,iBAAiB,CAAC,IAAU,EAAE,MAAc;AAAI,QAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,uBAAuB,CACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E;AAEG;AACI;AACI;AACI,QAAX,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;AACnF,YAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/F,SAAK;AACL,QACI,OAAO,OAAO,CAAC;AACnB,KAAG;AACH,IACE,eAAe,CAAC,IAAU,EAAE,IAAY;AAAI,QAC1C,OAAO,IAAI,CAAC,uBAAuB,CAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5E,KAAG;AACH,IACE,SAAS,CAAC,IAAU;AAAI,QACtB,OAAO;AACX,YAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,YAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1C,YAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,SAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,KAAG;AACH;AAEC;AACE;AACE;AAEJ;AAAQ,IAAE,WAAW,CAAC,KAAU;AAAI,QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAM,IAAI,CAAC,KAAK,EAAE;AAClB,gBAAQ,OAAO,IAAI,CAAC;AACpB,aAAO;AACP;AACM;AACM,YAAN,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACtC,gBAAQ,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAChC,oBAAU,OAAO,IAAI,CAAC;AACtB,iBAAS;AACT,aAAO;AACP,SAAK;AACL,QAAI,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACpC,KAAG;AACH,IACE,cAAc,CAAC,GAAQ;AACzB,QAAI,OAAO,GAAG,YAAY,IAAI,CAAC;AAC/B,KAAG;AACH,IACE,OAAO,CAAC,IAAU;AACpB,QAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAClC,KAAG;AACH,IACE,OAAO;AAAK,QACV,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,KAAG;AACH;AAEC,IAAS,uBAAuB,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY;AAC3E;AACI;AACI,QAAJ,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB,QAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACrC,QAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,QAAI,OAAO,CAAC,CAAC;AACb,KAAG;AACH;AAEC;AACE;AACE;AAEJ;AAAQ,IAAC,OAAO,CAAC,CAAS;AAC3B,QAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAAH,8BAA8B,CAAC,GAAW;AACpD,QAAI,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC9C,KAAG;AACH;AAEC;AACE;AACE;AACE;AACE;AACE;AACE;AACE;AACE;AAEJ;AAAQ,IAAX,OAAO,CAAC,GAAwB,EAAE,IAAU;AACtD;AACI;AACI,QAAJ,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACzB,QAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1E,QAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACjG,QAAI,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,KAAG;AACH;6CAvQC,UAAU;iIACT;AAAC;AAA2C,yCAiB/B,QAAQ,YAAI,MAAM,SAAC,eAAe;AAAS,YA/ElD,QAAQ;AAAG;;;;;;;;6DAAE;AAAC;ACRtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAIa,uBAAuB,GAAmB;AACvD,IAAE,KAAK,EAAE;AACT,QAAI,SAAS,EAAE,IAAI;AACnB,KAAG;AACH,IAAE,OAAO,EAAE;AACX,QAAI,SAAS,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAC;AAClE,QAAI,cAAc,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC;AACrD,QAAI,aAAa,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAC;AACnE,QAAI,kBAAkB,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAC;AACxD,KAAG;AACH;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAoBa,gBAAgB;AAAG;4CAN/B,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC,cAAc;AAAC,kBACzB,SAAS,EAAE,sBACT,EAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE;WAAiB,EAAC,mBACpD,eACF;;;;;;;;;;;;2KACI;AAAC,WAK8C;AAAyB,MAEhE,mBAAmB;AAAG;+CAJlC,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC,gBAAgB,CAAC;cAC3B,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,IAAyB,EAAC,CAAC,eAC5E;;;;;;;;;wJACI;AAAC;AClCN;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA,MACa,4BAA4B;AAAG,IAC1C,YAAY,CAAC,OAA2B,EAAE,IAAwC;AAAI,QACpF,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACzF,KAAG;AACH;wDALC,UAAU;;;;0BACT;AAMF;AACA,MACa,iBAAiB;AAC9B,IAAE,YAAY,CAAC,OAA2B,EAAE,IAAwC;AAAI,QACpF,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3F,KAAG;AACH;0GAAC;AACD;6CANC,UAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;0BAC3B;AAAC;ACrBN;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA,MAIa,OAAO;AAAG;mCAJtB,SAAS,SAAC,kBACT;EAAQ,EAAE,uBAAuB,kBACjC,IAAI,EAAE,EAAC,OAAO,EAAE,UAAU,EAAC,cAC5B;;;;;;;0BACI;AAEL;AACA;AACA;AACA;AACA,SAAgB,QAAQ,CAAC,KAAyB,EAAE,OAAgC,EAC3D,MAAM,GAAG,KAAK;AACvC;AACE;AACE,IAAF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,MAAM,EAAC;AAC1D,QAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC;AACjD,QAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC;AACjD,QAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,KAAK,CAAC,CAAC;AACrD,QACI,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;AACtC,YAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,IAAI,MAAM,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1D,SAAK;AAAC,aAAK,IAAI,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,aAAa,EAAE,IAAI,CAAC,CAAC;AACtD,SAAK;AACL,KAAG,CAAC,CAAC;AACL,CAAC;AAED;AACA,SAAS,QAAQ,CAAC,OAAgC,EAAE,SAAiB,EAAE,KAAc;AAAI,IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;AACpD,IAAE,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjE,CAAC;AACD,MAMa,aAAa;AAAG;yCAL5B,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC;MAAe,CAAC,kBAC1B,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,kBACnC;KAAY,EAAE,CAAC,OAAO,CAAC,eACxB;;;;;;;;;+MACI;AAAC;AC7DN;AACA;AACA;AACA;AACA;AACA;AACA;AA2BA;AACA;AACA;AACA,MAAa,SAAS;AACtB,IAIE,YACU,SAAgD;AAC3D;AACA,IAAU,OAAoB;AAC9B;AACA,IAAU,MAAoB;AAC/B,QALY,cAAS,GAAT,SAAS,CAAuC;AAAC,QAElD,YAAO,GAAP,OAAO,CAAa;AAAC,QAErB,WAAM,GAAN,MAAM,CAAc;AAAC;AAGI,QAVlC,UAAK,kBAAmC;AAC1C,KAOG;AACH;AAEC,IAAC,OAAO;AACT,QAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvC,KAAG;AACH;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA,MAAa,4BAA4B,GAAG;AAC5C,IAAE,aAAa,EAAE,GAAG;AACpB,IAAE,YAAY,EAAE,GAAG;AACnB,EAAE;AAEF;AACA;AACA;AACA;AACA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC;AACA,MAAM,mBAAmB,GAAG,+BAA+B,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;AAE7E;AACA,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAEtD;AACA,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAa,cAAc;AAAG,IA4B5B,YAAoB,OAAqB,EACrB,OAAe,EACvB,mBAA0D,EAC1D,QAAkB;AAChC,QAJsB,YAAO,GAAP,OAAO,CAAc;AAAC,QACtB,YAAO,GAAP,OAAO,CAAQ;AAAC;AACsB,QAtBlD,mBAAc,GAAG,KAAK,CAAC;AACjC;AAEK,QAAK,mBAAc,GAAG,IAAI,GAAG,EAAa,CAAC;AAChD;AAEa,QAMH,+BAA0B,GAAG,KAAK,CAAC;AAC7C;AAE8C,QAW1C,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,YAAM,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAClE,SAAK;AACL,KAAG;AACH;AAEC;AACE;AACE;AACE;AAEJ;AAAQ,IAAT,YAAY,CAAC,CAAS,EAAE,CAAS,EAAE,SAAuB,EAAE;AAAI,QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc;AAC7C,YAA0B,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;AAChG,QAAI,MAAM,eAAe,mCAAO,4BAA4B,GAAK,MAAM,CAAC,SAAS,CAAC,CAAC;AACnF,QACI,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzB,YAAM,CAAC,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;AACvD,YAAM,CAAC,GAAG,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,SAAK;AACL,QACI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AAClF,QAAI,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;AAC3C,QAAI,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;AAC1C,QAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC;AACnD,QACI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACjD,QAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC/C,QACI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,GAAG,MAAM,IAAI,CAAC;AAChD,QAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,IAAI,CAAC;AAC/C,QAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;AAC5C,QAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;AAC3C;AAEG;AACI,QAAH,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;AAC9B,YAAM,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;AAClD,SAAK;AACL,QACI,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,QAAQ,IAAI,CAAC;AACtD,QACI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/C;AAEG;AACI,QAAH,yBAAyB,CAAC,MAAM,CAAC,CAAC;AACtC,QACI,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;AACxC;AAEG,QAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1D,QACI,SAAS,CAAC,KAAK,qBAAyB;AAC5C;AAEG,QAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvC,QACI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC5B,YAAM,IAAI,CAAC,0BAA0B,GAAG,SAAS,CAAC;AAClD,SAAK;AACL;AAEG;AACI,QAAH,IAAI,CAAC,sBAAsB,CAAC;AAChC,YAAM,MAAM,2BAA2B,GAAG,SAAS,KAAK,IAAI,CAAC,0BAA0B,CAAC;AACxF,YACM,SAAS,CAAC,KAAK,mBAAuB;AAC5C;AAEK;AACM;AACM;AACM,YAAjB,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AACxF,gBAAQ,SAAS,CAAC,OAAO,EAAE,CAAC;AAC5B,aAAO;AACP,SAAK,EAAE,QAAQ,CAAC,CAAC;AACjB,QACI,OAAO,SAAS,CAAC;AACrB,KAAG;AACH;AAEC,IAAC,aAAa,CAAC,SAAoB;AACpC,QAAI,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5D,QACI,IAAI,SAAS,KAAK,IAAI,CAAC,0BAA0B,EAAE;AACvD,YAAM,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC7C,SAAK;AACL;AAEG,QAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AACnC,YAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACjC,SAAK;AACL;AAEG,QAAC,IAAI,CAAC,SAAS,EAAE;AACpB,YAAM,OAAO;AACb,SAAK;AACL,QACI,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AACvC,QAAI,MAAM,eAAe,mCAAO,4BAA4B,GAAK,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7F,QACI,QAAQ,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,eAAe,CAAC,YAAY,IAAI,CAAC;AAC5E,QAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;AACjC,QAAI,SAAS,CAAC,KAAK,sBAA0B;AAC7C;AAEG,QAAC,IAAI,CAAC,sBAAsB,CAAC;AAChC,YAAM,SAAS,CAAC,KAAK,kBAAsB;AAC3C,YAAM,QAAQ,CAAC,UAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjD,SAAK,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;AACrC,KAAG;AACH;AAEC,IAAC,UAAU;AACZ,QAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5D,KAAG;AACH;AAEC,IAAC,uBAAuB;AACzB,QAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM;AACtC,YAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;AACrC,gBAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;AACzB,aAAO;AACP,SAAK,CAAC,CAAC;AACP,KAAG;AACH;AAEC,IAAC,kBAAkB,CAAC,mBAA0D;AAC/E,QAAI,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;AACvD,QACI,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE;AACtD,YAAM,OAAO;AACb,SAAK;AACL;AAEG,QAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,QACI,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;AACnC,QAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAC5C,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,WAAW,CAAC,KAAY;AAC1B,QAAI,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAM,IAAI,CAAC,YAAY,CAAC,KAAmB,CAAC,CAAC;AAC7C,SAAK;AAAC,aAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAC5C,YAAM,IAAI,CAAC,aAAa,CAAC,KAAmB,CAAC,CAAC;AAC9C,SAAK;AAAC,aAAK;AACX,YAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAK;AACL;AAEG;AACI;AACI,QAAP,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC1C,YAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AAC5C,YAAM,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AAC7C,SAAK;AACL,KAAG;AACH;AAEC,IAAS,YAAY,CAAC,KAAiB;AACxC;AACI;AACI,QAAJ,MAAM,eAAe,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;AACnE,QAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB;AACtD,YAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,oBAAoB,GAAG,wBAAwB,CAAC;AAC1E,QACI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,EAAE;AAC/E,YAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACjC,YAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjF,SAAK;AACL,KAAG;AACH;AAEC,IAAS,aAAa,CAAC,KAAiB;AACzC,QAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,EAAE;AAClF;AACM;AACM;AACM,YAAZ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7C,YAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AACjC;AAEK;AACM,YAAL,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC;AAC3C,YACM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC7F,aAAO;AACP,SAAK;AACL,KAAG;AACH;AAEC,IAAS,YAAY;AACtB,QAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,YAAM,OAAO;AACb,SAAK;AACL,QACI,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAChC;AAEG,QAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM;AACtC;AACM;AACM,YAAN,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;AAAwB,gBACpD,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,KAAK,uBAA2B;AACrF,YACM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE;AAClD,gBAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;AACzB,aAAO;AACP,SAAK,CAAC,CAAC;AACP,KAAG;AACH;AAEC,IAAS,sBAAsB,CAAC,EAAY,EAAE,KAAK,GAAG,CAAC;AACxD,QAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,KAAG;AACH;AAEC,IAAS,eAAe,CAAC,UAAoB;AAC9C,QAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACnC,YAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI;AAC9B,gBAAQ,IAAI,CAAC,eAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAChF,aAAO,CAAC,CAAC;AACT,SAAK,CAAC,CAAC;AACP,KAAG;AACH;AAEC,IAAC,oBAAoB;AACtB,QAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AAC9B,YAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI;AACrC,gBAAQ,IAAI,CAAC,eAAgB,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACnF,aAAO,CAAC,CAAC;AACT,YACM,IAAI,IAAI,CAAC,0BAA0B,EAAE;AAC3C,gBAAQ,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI;AACrC,oBAAU,IAAI,CAAC,eAAgB,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACrF,iBAAS,CAAC,CAAC;AACX,aAAO;AACP,SAAK;AACL,KAAG;AACH,CAAC;AAED;AACA,SAAS,yBAAyB,CAAC,OAAoB;AACvD;AACE;AACE;AACE,IAAJ,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,CAAS,EAAE,CAAS,EAAE,IAAgB;AACxE,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,IAAE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;AAClD;AACA;ACpWA;AACA;AACA;AACA;AACA;AACA;AACA;AAwCA;AACA,MAAa,yBAAyB,GAClC,IAAI,cAAc,CAAsB,2BAA2B,EAAE;AACzE,MASa,SAAS;AAAG,IAgEvB,YAAoB,WAAoC,EAC5C,MAAc,EACd,QAAkB,EAC6B,aAAmC,EAC/B,cAAuB;AACxF,QALsB,gBAAW,GAAX,WAAW,CAAyB;AAAC,QAIM,mBAAc,GAAd,cAAc,CAAS;AAAC;AAEjF;AACyD;AAK7B;AAIjC;AAAY,QA7Da,WAAM,GAAW,CAAC,CAAC;AAC/C,QAqBU,cAAS,GAAY,KAAK,CAAC;AACrC;AAGM,QAiBI,mBAAc,GAAY,KAAK,CAAC;AAC1C,QAOI,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,EAAE,CAAC;AAC9C,QAAI,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACnF,KAAG;AACH;AACO;AAKG;AACqB;AAAQ,IAhDrC,IACI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;AAC3C,IAAE,IAAI,QAAQ,CAAC,KAAc;AAC7B,QAAI,IAAI,KAAK,EAAE;AACf,YAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACrC,SAAK;AACL,QAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC3B,QAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACxC,KAAG;AACH;AAAQ;AAG+B;AACzB;AAAQ,IAEpB,IACI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;AAC3E,IAAE,IAAI,OAAO,CAAC,OAAoB;AAClC,QAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC5B,QAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACxC,KAAG;AACH,IAqBE,QAAQ;AACV,QAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/B,QAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACxC,KAAG;AACH,IACE,WAAW;AACb,QAAI,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;AAChD,KAAG;AACH;AAEC,IAAC,UAAU;AACZ,QAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACtC,KAAG;AACH;AAEC,IAAC,uBAAuB;AACzB,QAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,CAAC;AACnD,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,IAAI,YAAY;AAAK,QACnB,OAAO;AACX,YAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,YAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,YAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,YAAM,SAAS,gDACJ,IAAI,CAAC,cAAc,CAAC,SAAS,IAC5B,IAAI,CAAC,cAAc,KAAK,gBAAgB,GAAG,EAAC,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAC,GAAG,EAAE,IACpF,IAAI,CAAC,SAAS,CAClB;AACP,YAAM,oBAAoB,EAAE,IAAI,CAAC,cAAc,CAAC,oBAAoB;AACpE,SAAK,CAAC;AACN,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,IAAI,cAAc;AAAK,QACrB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3D,KAAG;AACH;AAEC,IAAS,4BAA4B;AACtC,QAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AAC/C,YAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5D,SAAK;AACL,KAAG;AACH;AAGgB,IAed,MAAM,CAAC,SAAgC,EAAE,IAAY,CAAC,EAAE,MAAqB;AAAI,QAC/E,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACvC,YAAM,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,kCAAM,IAAI,CAAC,YAAY,GAAK,MAAM,EAAE,CAAC;AAChG,SAAK;AAAC,aAAK;AACX,YAAM,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,kCAAM,IAAI,CAAC,YAAY,GAAK,SAAS,EAAE,CAAC;AAC3F,SAAK;AACL,KAAG;AACH;qCA9JC,SAAS,SAAC,kBACT,QAAQ,EAAE,2BAA2B,kBACrC,QAAQ,EAAE,WAAW,kBACrB,IAAI,EAAE,sBACJ,OAAO,EAAE,YAAY,sBACrB,8BAA8B,EAAE,WAAW,kBAC5C,cACF;;;+VACI;AAAC;AAAmC,YA/CvC,UAAU;AACV,YAGA,MAAM;AACN,YARM,QAAQ;AAAI,4CAqHL,QAAQ,YAAI,MAAM,SAAC,yBAAyB;AAAS,yCACrD,QAAQ,YAAI,MAAM,SAAC,qBAAqB;AAAQ;AAAG;AAEhE,oBAnEC,KAAK,SAAC,gBAAgB;AAAO,wBAG7B,KAAK,SAAC,oBAAoB;AAAO,uBAMjC,KAAK,SAAC,mBAAmB;AAAO,qBAOhC,KAAK,SAAC,iBAAiB;AAAO,wBAO9B,KAAK,SAAC,oBAAoB;AAAO,uBAMjC,KAAK,SAAC,mBAAmB;AACvB,sBAcF,KAAK,SAAC,kBAAkB;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAE;AAAC;AC1GP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAea,eAAe;AAAG;2CAL9B,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC;EAAe,EAAE,cAAc,CAAC,kBAC1C,OAAO,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;GACrC,YAAY,EAAE,CAAC,SAAS,CAAC,eAC1B;;;;;;;;;6SACI;AAAC;ACtBN;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAca,iBAAiB;AAC9B,IAME,YAA8D,cAAuB;AAAI,QAA3B,mBAAc,GAAd,cAAc,CAAS;AAAC;AAEjD,QAP5B,UAAK,GAA2B,WAAW,CAAC;AACvD;AAEK,QAAM,aAAQ,GAAY,KAAK,CAAC;AACrC,KAC4F;AAC5F;6CAtBC,SAAS,SAAC,kBACT,aAAa,EAAE,iBAAiB,CAAC,IAAI,kBACrC,eAAe,EAAE;mBAAuB,CAAC,MAAM,kBAC/C,QAAQ,EAAE,qBAAqB,kBAE/B,QAAQ,EAAE,EAAE,kBACZ,IAAI,EAAE,sBACJ,OAAO,EAAE,qBAAqB,sBAC9B,2CAA2C,EAAE;eAA2B,sBACxE,qCAAqC,EAAE,qBAAqB,sBAC5D,sCAAsC,EAAE,UAAU,sBAClD,iCAAiC,EAAE,qCAAqC;gBACzE,kkCACF,oIACI;AAAC;AACU,yCAMD,QAAQ,YAAI,MAAM,SAAC,qBAAqB;AAAQ;AAAG;AAE1D,oBAPL,KAAK;AAAK,uBAGV,KAAK;AAAI;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAE;AAAC;ACxDf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAWa,uBAAuB;AAAG;mDALtC,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC,eAAe,CAAC;KAC1B,OAAO,EAAE,CAAC,iBAAiB,CAAC,kBAC5B,YAAY,EAAE,CAAC,iBAAiB,CAAC,cAClC;;;;;;;;;;4NACI;AAAC;AClBN;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA,MAAa,2BAA2B,GACpC,IAAI,cAAc,CAA2B,6BAA6B;AAC9E;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAAQ,CAAA,CAAC,CAAC;AAEtD;AACA,IAAI,wBAAwB,GAAG,CAAC,CAAC;AACjC,MAEa,gBAAiB,SAAQ,qBAAqB;AAAG,IAU5D,YAA6D,MAAiC;AAChG;AACG,QADC,KAAK,EAAE,CAAC;AACZ;AACG,QARD,aAAQ,GAAW,sBAAsB,wBAAwB,EAAE,EAAE,CAAC;AACxE,QAMI,IAAI,CAAC,MAAM,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,mCAAI,KAAK,CAAC;AAC/C,KAAG;AACH;4CAfC,SAAS;sKACR;AAAC;AAA0C,4CAU9B,MAAM,SAAC,2BAA2B,cAAG,QAAQ;AAAM;AAAG;AAChE,oBATF,KAAK;AAAI;;;;;;;;;;oBAAE;AAgBd;AACA;AACA;AACA;AACA;AACA,MAAa,YAAY,GAAG,IAAI,cAAc,CAAc,aAAa,EAAE;AAE3E;AACA;AACA;AACA,MAiBa,WAAY,SAAQ,gBAAgB;AACjD;uCAlBC,SAAS,SAAC,kBACT,QAAQ,EAAE,cAAc,kBACxB,QAAQ,EAAE,aAAa,kBACvB;oGAA4B,kBAC5B,aAAa,EAAE,iBAAiB,CAAC,IAAI,kBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;UAC/C,MAAM,EAAE,CAAC,UAAU,CAAC,kBAEpB,IAAI,EAAE,sBACJ,OAAO,EAAE,cAAc,sBACvB,aAAa,EAAE,yBAAyB;GACxC,sBAAsB,EAAE,qCAAqC;mBAC7D,wBAAwB,EAAE,0BAA0B,sBACpD,+BAA+B,EAAE,UAAU,mBAC5C,kBACD,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAC,CAAC;;;;;;;;;;;4HAC/D;;;;;;;;;;;;;;;;;;;;0BACI;AAAC;AC7FN;AACA;AACA;AACA;AACA;AACA;AACA;AAyBA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB;AACA,MAAa,wBAAwB;AACrC,IAAE;AACF;AACA,IAAW,MAAsB;AAChC;AACA,IAAU,cAAc,KAAK;AAAI,QAFvB,WAAM,GAAN,MAAM,CAAgB;AAAC,QAEvB,gBAAW,GAAX,WAAW,CAAQ;AAAC,KAAI;AACnC,CAAC;AACD,MAEa,cAAc;AAAG,IAiC5B,YACU,QAAiC,EACjC,kBAAqC,EACrC,OAAiC,EAChC,KAAuB;AAAI,QAH5B,aAAQ,GAAR,QAAQ,CAAyB;AAAC,QAClC,uBAAkB,GAAlB,kBAAkB,CAAmB;AAAC,QACtC,YAAO,GAAP,OAAO,CAA0B;AAAC,QACjC,UAAK,GAAL,KAAK,CAAkB;AAAC,QApC3B,cAAS,GAAG,KAAK,CAAC;AAC5B,QAAU,YAAO,GAAG,KAAK,CAAC;AAC1B,QAAU,cAAS,GAAG,KAAK,CAAC;AAC5B,QAAU,yBAAoB,GAAG,EAAE,CAAC;AACpC;AAC2C,QAUhC,OAAE,GAAW,cAAc,gBAAgB,EAAE,EAAE,CAAC;AAC3D;AAGmB;AAAwD,QAQtD,sBAAiB,GAAG,IAAI,YAAY,EAA4B,CAAC;AACtF;AAEK,QAAM,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/C,KAKwC;AACxC;AAEkE,IAjChE,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAClE;AAEC,IAAC,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;AACpD;AAEG,IAMD,IACI,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;AAClF,IAAE,IAAI,QAAQ,CAAC,KAAU,IAAI,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7E;AAEC,IAAC,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAC5E;AACO;AACa;AACmB;AAElB;AACX;AAAQ,IAchB,IAAI,MAAM;AAAK,QACb,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,IAAI,SAAS;AAAK;AACyC,QACzD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;AAC7D,KAAG;AACH;AAEC,IAAC,MAAM;AAAK,QACT,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,YAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,YAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC7C,YAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACvC,SAAK;AACL,KAAG;AACH;AAEC,IAAC,QAAQ;AAAK,QACX,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,YAAM,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B,YAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC7C,YAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACvC,SAAK;AACL,KAAG;AACH;AAEC,IAAC,KAAK,CAAC,OAAqB,EAAE,OAAsB;AAAI;AACwC;AAE/F,QAAE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3C,QACI,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AAC7C,YAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,SAAK;AACL,KAAG;AACH;AAEC;AACE;AACE;AAEJ;AAAQ,IAAP,eAAe;AAAK,QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvB,YAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1B,YAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC7C,SAAK;AACL,KAAG;AACH;AAEC;AACE;AACE;AAEJ;AAAQ,IAAP,iBAAiB;AAAK,QACpB,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,YAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AAC3B,YAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC7C,SAAK;AACL,KAAG;AACH;AAEC,IAAC,QAAQ;AAAK,QACX,OAAO,IAAI,CAAC,SAAS,CAAC;AAC1B,KAAG;AACH;AAEC,IAAC,cAAc,CAAC,KAAoB;AAAI,QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACxF,YAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnC;AAEK,YAAC,KAAK,CAAC,cAAc,EAAE,CAAC;AAC7B,SAAK;AACL,KAAG;AACH;AAEC;AACE;AACE;AACE,IAAL,qBAAqB;AAAK,QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9D,YAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC7C,YAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAC3C,SAAK;AACL,KAAG;AACH;AAEC;AACE;AACE;AACE;AAEJ;AAAQ,IAAT,gBAAgB;AAAK,QACnB,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AAC3D,KAAG;AACH;AAEC,IAAC,YAAY;AAAK,QACf,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;AACtC,KAAG;AACH;AAEC,IAAC,eAAe;AAAK,QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvC,KAAG;AACH,IACE,kBAAkB;AACpB;AACI;AACI;AACI;AACI;AACI,QAAhB,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,YAAM,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,YACM,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,EAAE;AACnD,gBAAQ,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;AAC9C,gBAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAClC,aAAO;AACP,SAAK;AACL,KAAG;AACH,IACE,WAAW;AACb,QAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAClC,KAAG;AACH;AAEC,IAAS,yBAAyB,CAAC,WAAW,GAAG,KAAK;AAAI,QACvD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACjF,KAAG;AACH;0CAvLC,SAAS;wMACR;AAAC;AAAwC,YAhCzC,UAAU;AACV,YAHA,iBAAiB;AACjB;AAEF,YAYqB,gBAAgB;AAAG;AAAG;AACtC,oBA+BF,KAAK;AAAK,iBAGV,KAAK;AAAK,uBAGV,KAAK;AACN,gCAQC,MAAM;AAAI;;;;;;;;;;;oBAAE;AA8Jf;AACA;AACA;AACA,MAsBa,SAAU,SAAQ,cAAc;AAC7C,IAAE,YACE,OAAgC,EAChC,iBAAoC,EACa,MAAgC,EAC/C,KAAkB;AACxD,QAAI,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,KAAG;AACH;qCA9BC,SAAS,SAAC,kBACT,QAAQ,EAAE,YAAY,kBACtB,QAAQ,EAAE,WAAW,kBACrB,IAAI,EAAE,sBACJ,MAAM,EAAE,QAAQ,sBAChB,iBAAiB,EAAE,gBAAgB,sBACnC;kBAAsB,EAAE,UAAU,sBAClC,6BAA6B,EAAE,UAAU,sBACzC,oBAAoB,EAAE,QAAQ,sBAC9B,MAAM,EAAE,IAAI,sBACZ,sBAAsB,EAAE,oBAAoB;OAC5C,sBAAsB,EAAE,qBAAqB,sBAC7C,6BAA6B,EAAE,UAAU,sBACzC,SAAS,EAAE,yBAAyB,sBACpC,WAAW,EAAE;IAAwB;MACrC,OAAO,EAAE;EAAgC,mBAC1C,kBAED;;yUAA0B,kBAC1B,aAAa,EAAE,iBAAiB,CAAC,IAAI,kBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;;;;;;;;;;;;;usBAChD,uzBACI;AAAC;AAAmC,YAnPvC,UAAU;AACV,YAHA,iBAAiB;AACjB,4CAwPG,QAAQ,YAAI,MAAM,SAAC,2BAA2B;AAAS,YA1OpD,WAAW,uBA2Od,QAAQ,YAAI,MAAM,SAAC,YAAY;AAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAAE;AAK9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAgB,6BAA6B,CAAC,WAAmB,EAAE,OAA6B,EAC9F,YAAoC;AAAI,IAExC,IAAI,YAAY,CAAC,MAAM,EAAE;AAC3B,QAAI,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACzC,QAAI,IAAI,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;AACxC,QAAI,IAAI,YAAY,GAAG,CAAC,CAAC;AACzB,QACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,YAAY,CAAC,EAAE;AACnF,gBAAQ,YAAY,EAAE,CAAC;AACvB,aAAO;AACP,SAAK;AACL,QACI,OAAO,YAAY,CAAC;AACxB,KAAG;AACH,IACE,OAAO,CAAC,CAAC;AACX,CAAC;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAgB,wBAAwB,CAAC,YAAoB,EAAE,YAAoB,EAC/E,qBAA6B,EAAE,WAAmB;AAAI,IACxD,IAAI,YAAY,GAAG,qBAAqB,EAAE;AAC5C,QAAI,OAAO,YAAY,CAAC;AACxB,KAAG;AACH,IACE,IAAI,YAAY,GAAG,YAAY,GAAG,qBAAqB,GAAG,WAAW,EAAE;AACzE,QAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAClE,KAAG;AACH,IACE,OAAO,qBAAqB,CAAC;AAC/B;AACA;AC3TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAea,eAAe;AAAG;2CAL9B,QAAQ,SAAC,kBACR,OAAO,EAAE,CAAC;EAAe,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,CAAC,kBAClF,OAAO,EAAE,CAAC;OAAS,EAAE,WAAW,CAAC,kBACjC,YAAY,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,cACvC;;;;;;;;;8VACI;AAAC;ACtBN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AAEu1B","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.9');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.9');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"]}
+{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/index.ts"],"names":["VERSION","CDK_VERSION"],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.10');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.10');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -6,4 +6,17 @@
  * found in the LICENSE file at https://angular.io/license
  */
+import * as ɵngcc0 from '@angular/core';
+import * as ɵngcc1 from './autocomplete';
+import * as ɵngcc2 from './autocomplete-trigger';
+import * as ɵngcc3 from './autocomplete-origin';
+import * as ɵngcc4 from '@angular/cdk/overlay';
+import * as ɵngcc5 from '@angular/material/core';
+import * as ɵngcc6 from '@angular/common';
+import * as ɵngcc7 from '@angular/cdk/scrolling';
 export declare class MatAutocompleteModule {
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<MatAutocompleteModule, never>;
+    static ɵmod: ɵngcc0.ɵɵNgModuleDeclaration<MatAutocompleteModule, [typeof ɵngcc1.MatAutocomplete, typeof ɵngcc2.MatAutocompleteTrigger, typeof ɵngcc3.MatAutocompleteOrigin], [typeof ɵngcc4.OverlayModule, typeof ɵngcc5.MatOptionModule, typeof ɵngcc5.MatCommonModule, typeof ɵngcc6.CommonModule], [typeof ɵngcc1.MatAutocomplete, typeof ɵngcc2.MatAutocompleteTrigger, typeof ɵngcc3.MatAutocompleteOrigin, typeof ɵngcc7.CdkScrollableModule, typeof ɵngcc5.MatOptionModule, typeof ɵngcc5.MatCommonModule]>;
+    static ɵinj: ɵngcc0.ɵɵInjectorDeclaration<MatAutocompleteModule>;
 }
+
+//# sourceMappingURL=autocomplete-module.d.ts.map
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,9 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+export declare class MatAutocompleteModule {
+}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-module.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"autocomplete-module.d.ts","sources":["autocomplete-module.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AACA;;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport declare class MatAutocompleteModule {\n}\n"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -8,4 +8,5 @@
 import { ElementRef } from '@angular/core';
 /** Base class containing all of the functionality for `MatAutocompleteOrigin`. */
+import * as ɵngcc0 from '@angular/core';
 export declare abstract class _MatAutocompleteOriginBase {
     /** Reference to the element on which the directive is applied. */
@@ -14,4 +15,6 @@
     /** Reference to the element on which the directive is applied. */
     elementRef: ElementRef<HTMLElement>);
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<_MatAutocompleteOriginBase, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<_MatAutocompleteOriginBase, never, never, {}, {}, never>;
 }
 /**
@@ -20,3 +23,7 @@
  */
 export declare class MatAutocompleteOrigin extends _MatAutocompleteOriginBase {
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<MatAutocompleteOrigin, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<MatAutocompleteOrigin, "[matAutocompleteOrigin]", ["matAutocompleteOrigin"], {}, {}, never>;
 }
+
+//# sourceMappingURL=autocomplete-origin.d.ts.map
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,22 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { ElementRef } from '@angular/core';
+/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */
+export declare abstract class _MatAutocompleteOriginBase {
+    /** Reference to the element on which the directive is applied. */
+    elementRef: ElementRef<HTMLElement>;
+    constructor(
+    /** Reference to the element on which the directive is applied. */
+    elementRef: ElementRef<HTMLElement>);
+}
+/**
+ * Directive applied to an element to make it usable
+ * as a connection point for an autocomplete panel.
+ */
+export declare class MatAutocompleteOrigin extends _MatAutocompleteOriginBase {
+}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-origin.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"autocomplete-origin.d.ts","sources":["autocomplete-origin.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ElementRef } from '@angular/core';\n/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */\nexport declare abstract class _MatAutocompleteOriginBase {\n    /** Reference to the element on which the directive is applied. */\n    elementRef: ElementRef<HTMLElement>;\n    constructor(\n    /** Reference to the element on which the directive is applied. */\n    elementRef: ElementRef<HTMLElement>);\n}\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\nexport declare class MatAutocompleteOrigin extends _MatAutocompleteOriginBase {\n}\n"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -18,4 +18,5 @@
 import { _MatAutocompleteOriginBase } from './autocomplete-origin';
 /** Injection token that determines the scroll handling while the autocomplete panel is open. */
+import * as ɵngcc0 from '@angular/core';
 export declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;
 /** @docs-private */
@@ -191,6 +192,12 @@
     private _scrollToOption;
     static ngAcceptInputType_autocompleteDisabled: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<_MatAutocompleteTriggerBase, [null, null, null, null, null, null, { optional: true; }, { optional: true; host: true; }, { optional: true; }, null, { optional: true; }]>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<_MatAutocompleteTriggerBase, never, never, { "position": "matAutocompletePosition"; "autocompleteAttribute": "autocomplete"; "autocompleteDisabled": "matAutocompleteDisabled"; "autocomplete": "matAutocomplete"; "connectedTo": "matAutocompleteConnectedTo"; }, {}, never>;
 }
 export declare class MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {
     protected _aboveClass: string;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<MatAutocompleteTrigger, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<MatAutocompleteTrigger, "input[matAutocomplete], textarea[matAutocomplete]", ["matAutocompleteTrigger"], {}, {}, never>;
 }
+
+//# sourceMappingURL=autocomplete-trigger.d.ts.map
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,196 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { Directionality } from '@angular/cdk/bidi';
+import { BooleanInput } from '@angular/cdk/coercion';
+import { Overlay, ScrollStrategy } from '@angular/cdk/overlay';
+import { ViewportRuler } from '@angular/cdk/scrolling';
+import { AfterViewInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy, ViewContainerRef, OnChanges, SimpleChanges } from '@angular/core';
+import { ControlValueAccessor } from '@angular/forms';
+import { MatOption, MatOptionSelectionChange } from '@angular/material/core';
+import { MatFormField } from '@angular/material/form-field';
+import { Observable } from 'rxjs';
+import { _MatAutocompleteBase, MatAutocompleteDefaultOptions } from './autocomplete';
+import { _MatAutocompleteOriginBase } from './autocomplete-origin';
+/** Injection token that determines the scroll handling while the autocomplete panel is open. */
+export declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;
+/** @docs-private */
+export declare function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;
+/** @docs-private */
+export declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER: {
+    provide: InjectionToken<() => ScrollStrategy>;
+    deps: (typeof Overlay)[];
+    useFactory: typeof MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY;
+};
+/**
+ * Provider that allows the autocomplete to register as a ControlValueAccessor.
+ * @docs-private
+ */
+export declare const MAT_AUTOCOMPLETE_VALUE_ACCESSOR: any;
+/**
+ * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.
+ * @docs-private
+ */
+export declare function getMatAutocompleteMissingPanelError(): Error;
+/** Base class with all of the `MatAutocompleteTrigger` functionality. */
+export declare abstract class _MatAutocompleteTriggerBase implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {
+    private _element;
+    private _overlay;
+    private _viewContainerRef;
+    private _zone;
+    private _changeDetectorRef;
+    private _dir;
+    private _formField;
+    private _document;
+    private _viewportRuler;
+    private _defaults?;
+    private _overlayRef;
+    private _portal;
+    private _componentDestroyed;
+    private _autocompleteDisabled;
+    private _scrollStrategy;
+    /** Old value of the native input. Used to work around issues with the `input` event on IE. */
+    private _previousValue;
+    /** Strategy that is used to position the panel. */
+    private _positionStrategy;
+    /** Whether or not the label state is being overridden. */
+    private _manuallyFloatingLabel;
+    /** The subscription for closing actions (some are bound to document). */
+    private _closingActionsSubscription;
+    /** Subscription to viewport size changes. */
+    private _viewportSubscription;
+    /**
+     * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,
+     * closed autocomplete from being reopened if the user switches to another browser tab and then
+     * comes back.
+     */
+    private _canOpenOnNextFocus;
+    /** Stream of keyboard events that can close the panel. */
+    private readonly _closeKeyEventStream;
+    /**
+     * Event handler for when the window is blurred. Needs to be an
+     * arrow function in order to preserve the context.
+     */
+    private _windowBlurHandler;
+    /** `View -> model callback called when value changes` */
+    _onChange: (value: any) => void;
+    /** `View -> model callback called when autocomplete has been touched` */
+    _onTouched: () => void;
+    /** The autocomplete panel to be attached to this trigger. */
+    autocomplete: _MatAutocompleteBase;
+    /**
+     * Position of the autocomplete panel relative to the trigger element. A position of `auto`
+     * will render the panel underneath the trigger if there is enough space for it to fit in
+     * the viewport, otherwise the panel will be shown above it. If the position is set to
+     * `above` or `below`, the panel will always be shown above or below the trigger. no matter
+     * whether it fits completely in the viewport.
+     */
+    position: 'auto' | 'above' | 'below';
+    /**
+     * Reference relative to which to position the autocomplete panel.
+     * Defaults to the autocomplete trigger element.
+     */
+    connectedTo: _MatAutocompleteOriginBase;
+    /**
+     * `autocomplete` attribute to be set on the input element.
+     * @docs-private
+     */
+    autocompleteAttribute: string;
+    /**
+     * Whether the autocomplete is disabled. When disabled, the element will
+     * act as a regular input and the user won't be able to open the panel.
+     */
+    get autocompleteDisabled(): boolean;
+    set autocompleteDisabled(value: boolean);
+    constructor(_element: ElementRef<HTMLInputElement>, _overlay: Overlay, _viewContainerRef: ViewContainerRef, _zone: NgZone, _changeDetectorRef: ChangeDetectorRef, scrollStrategy: any, _dir: Directionality, _formField: MatFormField, _document: any, _viewportRuler: ViewportRuler, _defaults?: MatAutocompleteDefaultOptions | undefined);
+    /** Class to apply to the panel when it's above the input. */
+    protected abstract _aboveClass: string;
+    ngAfterViewInit(): void;
+    ngOnChanges(changes: SimpleChanges): void;
+    ngOnDestroy(): void;
+    /** Whether or not the autocomplete panel is open. */
+    get panelOpen(): boolean;
+    private _overlayAttached;
+    /** Opens the autocomplete suggestion panel. */
+    openPanel(): void;
+    /** Closes the autocomplete suggestion panel. */
+    closePanel(): void;
+    /**
+     * Updates the position of the autocomplete suggestion panel to ensure that it fits all options
+     * within the viewport.
+     */
+    updatePosition(): void;
+    /**
+     * A stream of actions that should close the autocomplete panel, including
+     * when an option is selected, on blur, and when TAB is pressed.
+     */
+    get panelClosingActions(): Observable<MatOptionSelectionChange | null>;
+    /** Stream of autocomplete option selections. */
+    readonly optionSelections: Observable<MatOptionSelectionChange>;
+    /** The currently active option, coerced to MatOption type. */
+    get activeOption(): MatOption | null;
+    /** Stream of clicks outside of the autocomplete panel. */
+    private _getOutsideClickStream;
+    writeValue(value: any): void;
+    registerOnChange(fn: (value: any) => {}): void;
+    registerOnTouched(fn: () => {}): void;
+    setDisabledState(isDisabled: boolean): void;
+    _handleKeydown(event: KeyboardEvent): void;
+    _handleInput(event: KeyboardEvent): void;
+    _handleFocus(): void;
+    /**
+     * In "auto" mode, the label will animate down as soon as focus is lost.
+     * This causes the value to jump when selecting an option with the mouse.
+     * This method manually floats the label until the panel can be closed.
+     * @param shouldAnimate Whether the label should be animated when it is floated.
+     */
+    private _floatLabel;
+    /** If the label has been manually elevated, return it to its normal state. */
+    private _resetLabel;
+    /**
+     * This method listens to a stream of panel closing actions and resets the
+     * stream every time the option list changes.
+     */
+    private _subscribeToClosingActions;
+    /** Destroys the autocomplete suggestion panel. */
+    private _destroyPanel;
+    private _setTriggerValue;
+    /**
+     * This method closes the panel, and if a value is specified, also sets the associated
+     * control to that value. It will also mark the control as dirty if this interaction
+     * stemmed from the user.
+     */
+    private _setValueAndClose;
+    /**
+     * Clear any previous selected option and emit a selection change event for this option
+     */
+    private _clearPreviousSelectedOption;
+    private _attachOverlay;
+    private _getOverlayConfig;
+    private _getOverlayPosition;
+    /** Sets the positions on a position strategy based on the directive's input state. */
+    private _setStrategyPositions;
+    private _getConnectedElement;
+    private _getPanelWidth;
+    /** Returns the width of the input element, so the panel width can match it. */
+    private _getHostWidth;
+    /**
+     * Resets the active item to -1 so arrow events will activate the
+     * correct options, or to 0 if the consumer opted into it.
+     */
+    private _resetActiveItem;
+    /** Determines whether the panel can be opened. */
+    private _canOpen;
+    /** Use defaultView of injected document if available or fallback to global window reference */
+    private _getWindow;
+    /** Scrolls to a particular option in the list. */
+    private _scrollToOption;
+    static ngAcceptInputType_autocompleteDisabled: BooleanInput;
+}
+export declare class MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {
+    protected _aboveClass: string;
+}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete-trigger.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"autocomplete-trigger.d.ts","sources":["autocomplete-trigger.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;;;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { AfterViewInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy, ViewContainerRef, OnChanges, SimpleChanges } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { MatOption, MatOptionSelectionChange } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { Observable } from 'rxjs';\nimport { _MatAutocompleteBase, MatAutocompleteDefaultOptions } from './autocomplete';\nimport { _MatAutocompleteOriginBase } from './autocomplete-origin';\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nexport declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>;\n/** @docs-private */\nexport declare function MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy;\n/** @docs-private */\nexport declare const MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER: {\n    provide: InjectionToken<() => ScrollStrategy>;\n    deps: (typeof Overlay)[];\n    useFactory: typeof MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY;\n};\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nexport declare const MAT_AUTOCOMPLETE_VALUE_ACCESSOR: any;\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nexport declare function getMatAutocompleteMissingPanelError(): Error;\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\nexport declare abstract class _MatAutocompleteTriggerBase implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\n    private _element;\n    private _overlay;\n    private _viewContainerRef;\n    private _zone;\n    private _changeDetectorRef;\n    private _dir;\n    private _formField;\n    private _document;\n    private _viewportRuler;\n    private _defaults?;\n    private _overlayRef;\n    private _portal;\n    private _componentDestroyed;\n    private _autocompleteDisabled;\n    private _scrollStrategy;\n    /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n    private _previousValue;\n    /** Strategy that is used to position the panel. */\n    private _positionStrategy;\n    /** Whether or not the label state is being overridden. */\n    private _manuallyFloatingLabel;\n    /** The subscription for closing actions (some are bound to document). */\n    private _closingActionsSubscription;\n    /** Subscription to viewport size changes. */\n    private _viewportSubscription;\n    /**\n     * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n     * closed autocomplete from being reopened if the user switches to another browser tab and then\n     * comes back.\n     */\n    private _canOpenOnNextFocus;\n    /** Stream of keyboard events that can close the panel. */\n    private readonly _closeKeyEventStream;\n    /**\n     * Event handler for when the window is blurred. Needs to be an\n     * arrow function in order to preserve the context.\n     */\n    private _windowBlurHandler;\n    /** `View -> model callback called when value changes` */\n    _onChange: (value: any) => void;\n    /** `View -> model callback called when autocomplete has been touched` */\n    _onTouched: () => void;\n    /** The autocomplete panel to be attached to this trigger. */\n    autocomplete: _MatAutocompleteBase;\n    /**\n     * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n     * will render the panel underneath the trigger if there is enough space for it to fit in\n     * the viewport, otherwise the panel will be shown above it. If the position is set to\n     * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n     * whether it fits completely in the viewport.\n     */\n    position: 'auto' | 'above' | 'below';\n    /**\n     * Reference relative to which to position the autocomplete panel.\n     * Defaults to the autocomplete trigger element.\n     */\n    connectedTo: _MatAutocompleteOriginBase;\n    /**\n     * `autocomplete` attribute to be set on the input element.\n     * @docs-private\n     */\n    autocompleteAttribute: string;\n    /**\n     * Whether the autocomplete is disabled. When disabled, the element will\n     * act as a regular input and the user won't be able to open the panel.\n     */\n    get autocompleteDisabled(): boolean;\n    set autocompleteDisabled(value: boolean);\n    constructor(_element: ElementRef<HTMLInputElement>, _overlay: Overlay, _viewContainerRef: ViewContainerRef, _zone: NgZone, _changeDetectorRef: ChangeDetectorRef, scrollStrategy: any, _dir: Directionality, _formField: MatFormField, _document: any, _viewportRuler: ViewportRuler, _defaults?: MatAutocompleteDefaultOptions | undefined);\n    /** Class to apply to the panel when it's above the input. */\n    protected abstract _aboveClass: string;\n    ngAfterViewInit(): void;\n    ngOnChanges(changes: SimpleChanges): void;\n    ngOnDestroy(): void;\n    /** Whether or not the autocomplete panel is open. */\n    get panelOpen(): boolean;\n    private _overlayAttached;\n    /** Opens the autocomplete suggestion panel. */\n    openPanel(): void;\n    /** Closes the autocomplete suggestion panel. */\n    closePanel(): void;\n    /**\n     * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n     * within the viewport.\n     */\n    updatePosition(): void;\n    /**\n     * A stream of actions that should close the autocomplete panel, including\n     * when an option is selected, on blur, and when TAB is pressed.\n     */\n    get panelClosingActions(): Observable<MatOptionSelectionChange | null>;\n    /** Stream of autocomplete option selections. */\n    readonly optionSelections: Observable<MatOptionSelectionChange>;\n    /** The currently active option, coerced to MatOption type. */\n    get activeOption(): MatOption | null;\n    /** Stream of clicks outside of the autocomplete panel. */\n    private _getOutsideClickStream;\n    writeValue(value: any): void;\n    registerOnChange(fn: (value: any) => {}): void;\n    registerOnTouched(fn: () => {}): void;\n    setDisabledState(isDisabled: boolean): void;\n    _handleKeydown(event: KeyboardEvent): void;\n    _handleInput(event: KeyboardEvent): void;\n    _handleFocus(): void;\n    /**\n     * In \"auto\" mode, the label will animate down as soon as focus is lost.\n     * This causes the value to jump when selecting an option with the mouse.\n     * This method manually floats the label until the panel can be closed.\n     * @param shouldAnimate Whether the label should be animated when it is floated.\n     */\n    private _floatLabel;\n    /** If the label has been manually elevated, return it to its normal state. */\n    private _resetLabel;\n    /**\n     * This method listens to a stream of panel closing actions and resets the\n     * stream every time the option list changes.\n     */\n    private _subscribeToClosingActions;\n    /** Destroys the autocomplete suggestion panel. */\n    private _destroyPanel;\n    private _setTriggerValue;\n    /**\n     * This method closes the panel, and if a value is specified, also sets the associated\n     * control to that value. It will also mark the control as dirty if this interaction\n     * stemmed from the user.\n     */\n    private _setValueAndClose;\n    /**\n     * Clear any previous selected option and emit a selection change event for this option\n     */\n    private _clearPreviousSelectedOption;\n    private _attachOverlay;\n    private _getOverlayConfig;\n    private _getOverlayPosition;\n    /** Sets the positions on a position strategy based on the directive's input state. */\n    private _setStrategyPositions;\n    private _getConnectedElement;\n    private _getPanelWidth;\n    /** Returns the width of the input element, so the panel width can match it. */\n    private _getHostWidth;\n    /**\n     * Resets the active item to -1 so arrow events will activate the\n     * correct options, or to 0 if the consumer opted into it.\n     */\n    private _resetActiveItem;\n    /** Determines whether the panel can be opened. */\n    private _canOpen;\n    /** Use defaultView of injected document if available or fallback to global window reference */\n    private _getWindow;\n    /** Scrolls to a particular option in the list. */\n    private _scrollToOption;\n    static ngAcceptInputType_autocompleteDisabled: BooleanInput;\n}\nexport declare class MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {\n    protected _aboveClass: string;\n}\n"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -12,4 +12,5 @@
 import { CanDisableRipple, _MatOptgroupBase, _MatOptionBase, MatOption, MatOptgroup } from '@angular/material/core';
 /** Event object that is emitted when an autocomplete option is selected. */
+import * as ɵngcc0 from '@angular/core';
 export declare class MatAutocompleteSelectedEvent {
     /** Reference to the autocomplete panel that emitted the event. */
@@ -130,4 +131,6 @@
     static ngAcceptInputType_autoActiveFirstOption: BooleanInput;
     static ngAcceptInputType_disableRipple: BooleanInput;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<_MatAutocompleteBase, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<_MatAutocompleteBase, never, never, { "displayWith": "displayWith"; "autoActiveFirstOption": "autoActiveFirstOption"; "classList": "class"; "ariaLabel": "aria-label"; "ariaLabelledby": "aria-labelledby"; "panelWidth": "panelWidth"; }, { "optionSelected": "optionSelected"; "opened": "opened"; "closed": "closed"; "optionActivated": "optionActivated"; }, never>;
 }
 export declare class MatAutocomplete extends _MatAutocompleteBase {
@@ -138,4 +141,8 @@
     protected _visibleClass: string;
     protected _hiddenClass: string;
+    static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<MatAutocomplete, never>;
+    static ɵcmp: ɵngcc0.ɵɵComponentDeclaration<MatAutocomplete, "mat-autocomplete", ["matAutocomplete"], { "disableRipple": "disableRipple"; }, {}, ["optionGroups", "options"], ["*"]>;
 }
 export {};
+
+//# sourceMappingURL=autocomplete.d.ts.map
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,141 @@
+/**
+ * @license
+ * Copyright Google LLC All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
+import { BooleanInput } from '@angular/cdk/coercion';
+import { Platform } from '@angular/cdk/platform';
+import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef, OnDestroy } from '@angular/core';
+import { CanDisableRipple, _MatOptgroupBase, _MatOptionBase, MatOption, MatOptgroup } from '@angular/material/core';
+/** Event object that is emitted when an autocomplete option is selected. */
+export declare class MatAutocompleteSelectedEvent {
+    /** Reference to the autocomplete panel that emitted the event. */
+    source: _MatAutocompleteBase;
+    /** Option that was selected. */
+    option: _MatOptionBase;
+    constructor(
+    /** Reference to the autocomplete panel that emitted the event. */
+    source: _MatAutocompleteBase, 
+    /** Option that was selected. */
+    option: _MatOptionBase);
+}
+/** Event object that is emitted when an autocomplete option is activated. */
+export interface MatAutocompleteActivatedEvent {
+    /** Reference to the autocomplete panel that emitted the event. */
+    source: _MatAutocompleteBase;
+    /** Option that was selected. */
+    option: _MatOptionBase | null;
+}
+/** @docs-private */
+declare const _MatAutocompleteMixinBase: import("@angular/material/core/common-behaviors/constructor").Constructor<CanDisableRipple> & import("@angular/material/core/common-behaviors/constructor").AbstractConstructor<CanDisableRipple> & {
+    new (): {};
+};
+/** Default `mat-autocomplete` options that can be overridden. */
+export interface MatAutocompleteDefaultOptions {
+    /** Whether the first option should be highlighted when an autocomplete panel is opened. */
+    autoActiveFirstOption?: boolean;
+    /** Class or list of classes to be applied to the autocomplete's overlay panel. */
+    overlayPanelClass?: string | string[];
+}
+/** Injection token to be used to override the default options for `mat-autocomplete`. */
+export declare const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS: InjectionToken<MatAutocompleteDefaultOptions>;
+/** @docs-private */
+export declare function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefaultOptions;
+/** Base class with all of the `MatAutocomplete` functionality. */
+export declare abstract class _MatAutocompleteBase extends _MatAutocompleteMixinBase implements AfterContentInit, CanDisableRipple, OnDestroy {
+    private _changeDetectorRef;
+    private _elementRef;
+    private _activeOptionChanges;
+    /** Class to apply to the panel when it's visible. */
+    protected abstract _visibleClass: string;
+    /** Class to apply to the panel when it's hidden. */
+    protected abstract _hiddenClass: string;
+    /** Manages active item in option list based on key events. */
+    _keyManager: ActiveDescendantKeyManager<_MatOptionBase>;
+    /** Whether the autocomplete panel should be visible, depending on option length. */
+    showPanel: boolean;
+    /** Whether the autocomplete panel is open. */
+    get isOpen(): boolean;
+    _isOpen: boolean;
+    /** @docs-private */
+    template: TemplateRef<any>;
+    /** Element for the panel containing the autocomplete options. */
+    panel: ElementRef;
+    /** Reference to all options within the autocomplete. */
+    abstract options: QueryList<_MatOptionBase>;
+    /** Reference to all option groups within the autocomplete. */
+    abstract optionGroups: QueryList<_MatOptgroupBase>;
+    /** Aria label of the autocomplete. */
+    ariaLabel: string;
+    /** Input that can be used to specify the `aria-labelledby` attribute. */
+    ariaLabelledby: string;
+    /** Function that maps an option's control value to its display value in the trigger. */
+    displayWith: ((value: any) => string) | null;
+    /**
+     * Whether the first option should be highlighted when the autocomplete panel is opened.
+     * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.
+     */
+    get autoActiveFirstOption(): boolean;
+    set autoActiveFirstOption(value: boolean);
+    private _autoActiveFirstOption;
+    /**
+     * Specify the width of the autocomplete panel.  Can be any CSS sizing value, otherwise it will
+     * match the width of its host.
+     */
+    panelWidth: string | number;
+    /** Event that is emitted whenever an option from the list is selected. */
+    readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent>;
+    /** Event that is emitted when the autocomplete panel is opened. */
+    readonly opened: EventEmitter<void>;
+    /** Event that is emitted when the autocomplete panel is closed. */
+    readonly closed: EventEmitter<void>;
+    /** Emits whenever an option is activated using the keyboard. */
+    readonly optionActivated: EventEmitter<MatAutocompleteActivatedEvent>;
+    /**
+     * Takes classes set on the host mat-autocomplete element and applies them to the panel
+     * inside the overlay container to allow for easy styling.
+     */
+    set classList(value: string | string[]);
+    _classList: {
+        [key: string]: boolean;
+    };
+    /** Unique ID to be used by autocomplete trigger's "aria-owns" property. */
+    id: string;
+    /**
+     * Tells any descendant `mat-optgroup` to use the inert a11y pattern.
+     * @docs-private
+     */
+    readonly inertGroups: boolean;
+    constructor(_changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>, defaults: MatAutocompleteDefaultOptions, platform?: Platform);
+    ngAfterContentInit(): void;
+    ngOnDestroy(): void;
+    /**
+     * Sets the panel scrollTop. This allows us to manually scroll to display options
+     * above or below the fold, as they are not actually being focused when active.
+     */
+    _setScrollTop(scrollTop: number): void;
+    /** Returns the panel's scrollTop. */
+    _getScrollTop(): number;
+    /** Panel should hide itself when the option list is empty. */
+    _setVisibility(): void;
+    /** Emits the `select` event. */
+    _emitSelectEvent(option: _MatOptionBase): void;
+    /** Gets the aria-labelledby for the autocomplete panel. */
+    _getPanelAriaLabelledby(labelId: string | null): string | null;
+    /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */
+    private _setVisibilityClasses;
+    static ngAcceptInputType_autoActiveFirstOption: BooleanInput;
+    static ngAcceptInputType_disableRipple: BooleanInput;
+}
+export declare class MatAutocomplete extends _MatAutocompleteBase {
+    /** Reference to all option groups within the autocomplete. */
+    optionGroups: QueryList<MatOptgroup>;
+    /** Reference to all options within the autocomplete. */
+    options: QueryList<MatOption>;
+    protected _visibleClass: string;
+    protected _hiddenClass: string;
+}
+export {};
Index: trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/autocomplete.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"autocomplete.d.ts","sources":["autocomplete.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { Platform } from '@angular/cdk/platform';\nimport { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef, OnDestroy } from '@angular/core';\nimport { CanDisableRipple, _MatOptgroupBase, _MatOptionBase, MatOption, MatOptgroup } from '@angular/material/core';\n/** Event object that is emitted when an autocomplete option is selected. */\nexport declare class MatAutocompleteSelectedEvent {\n    /** Reference to the autocomplete panel that emitted the event. */\n    source: _MatAutocompleteBase;\n    /** Option that was selected. */\n    option: _MatOptionBase;\n    constructor(\n    /** Reference to the autocomplete panel that emitted the event. */\n    source: _MatAutocompleteBase, \n    /** Option that was selected. */\n    option: _MatOptionBase);\n}\n/** Event object that is emitted when an autocomplete option is activated. */\nexport interface MatAutocompleteActivatedEvent {\n    /** Reference to the autocomplete panel that emitted the event. */\n    source: _MatAutocompleteBase;\n    /** Option that was selected. */\n    option: _MatOptionBase | null;\n}\n/** @docs-private */\ndeclare const _MatAutocompleteMixinBase: import(\"@angular/material/core/common-behaviors/constructor\").Constructor<CanDisableRipple> & import(\"@angular/material/core/common-behaviors/constructor\").AbstractConstructor<CanDisableRipple> & {\n    new (): {};\n};\n/** Default `mat-autocomplete` options that can be overridden. */\nexport interface MatAutocompleteDefaultOptions {\n    /** Whether the first option should be highlighted when an autocomplete panel is opened. */\n    autoActiveFirstOption?: boolean;\n    /** Class or list of classes to be applied to the autocomplete's overlay panel. */\n    overlayPanelClass?: string | string[];\n}\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nexport declare const MAT_AUTOCOMPLETE_DEFAULT_OPTIONS: InjectionToken<MatAutocompleteDefaultOptions>;\n/** @docs-private */\nexport declare function MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY(): MatAutocompleteDefaultOptions;\n/** Base class with all of the `MatAutocomplete` functionality. */\nexport declare abstract class _MatAutocompleteBase extends _MatAutocompleteMixinBase implements AfterContentInit, CanDisableRipple, OnDestroy {\n    private _changeDetectorRef;\n    private _elementRef;\n    private _activeOptionChanges;\n    /** Class to apply to the panel when it's visible. */\n    protected abstract _visibleClass: string;\n    /** Class to apply to the panel when it's hidden. */\n    protected abstract _hiddenClass: string;\n    /** Manages active item in option list based on key events. */\n    _keyManager: ActiveDescendantKeyManager<_MatOptionBase>;\n    /** Whether the autocomplete panel should be visible, depending on option length. */\n    showPanel: boolean;\n    /** Whether the autocomplete panel is open. */\n    get isOpen(): boolean;\n    _isOpen: boolean;\n    /** @docs-private */\n    template: TemplateRef<any>;\n    /** Element for the panel containing the autocomplete options. */\n    panel: ElementRef;\n    /** Reference to all options within the autocomplete. */\n    abstract options: QueryList<_MatOptionBase>;\n    /** Reference to all option groups within the autocomplete. */\n    abstract optionGroups: QueryList<_MatOptgroupBase>;\n    /** Aria label of the autocomplete. */\n    ariaLabel: string;\n    /** Input that can be used to specify the `aria-labelledby` attribute. */\n    ariaLabelledby: string;\n    /** Function that maps an option's control value to its display value in the trigger. */\n    displayWith: ((value: any) => string) | null;\n    /**\n     * Whether the first option should be highlighted when the autocomplete panel is opened.\n     * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n     */\n    get autoActiveFirstOption(): boolean;\n    set autoActiveFirstOption(value: boolean);\n    private _autoActiveFirstOption;\n    /**\n     * Specify the width of the autocomplete panel.  Can be any CSS sizing value, otherwise it will\n     * match the width of its host.\n     */\n    panelWidth: string | number;\n    /** Event that is emitted whenever an option from the list is selected. */\n    readonly optionSelected: EventEmitter<MatAutocompleteSelectedEvent>;\n    /** Event that is emitted when the autocomplete panel is opened. */\n    readonly opened: EventEmitter<void>;\n    /** Event that is emitted when the autocomplete panel is closed. */\n    readonly closed: EventEmitter<void>;\n    /** Emits whenever an option is activated using the keyboard. */\n    readonly optionActivated: EventEmitter<MatAutocompleteActivatedEvent>;\n    /**\n     * Takes classes set on the host mat-autocomplete element and applies them to the panel\n     * inside the overlay container to allow for easy styling.\n     */\n    set classList(value: string | string[]);\n    _classList: {\n        [key: string]: boolean;\n    };\n    /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n    id: string;\n    /**\n     * Tells any descendant `mat-optgroup` to use the inert a11y pattern.\n     * @docs-private\n     */\n    readonly inertGroups: boolean;\n    constructor(_changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>, defaults: MatAutocompleteDefaultOptions, platform?: Platform);\n    ngAfterContentInit(): void;\n    ngOnDestroy(): void;\n    /**\n     * Sets the panel scrollTop. This allows us to manually scroll to display options\n     * above or below the fold, as they are not actually being focused when active.\n     */\n    _setScrollTop(scrollTop: number): void;\n    /** Returns the panel's scrollTop. */\n    _getScrollTop(): number;\n    /** Panel should hide itself when the option list is empty. */\n    _setVisibility(): void;\n    /** Emits the `select` event. */\n    _emitSelectEvent(option: _MatOptionBase): void;\n    /** Gets the aria-labelledby for the autocomplete panel. */\n    _getPanelAriaLabelledby(labelId: string | null): string | null;\n    /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n    private _setVisibilityClasses;\n    static ngAcceptInputType_autoActiveFirstOption: BooleanInput;\n    static ngAcceptInputType_disableRipple: BooleanInput;\n}\nexport declare class MatAutocomplete extends _MatAutocompleteBase {\n    /** Reference to all option groups within the autocomplete. */\n    optionGroups: QueryList<MatOptgroup>;\n    /** Reference to all options within the autocomplete. */\n    options: QueryList<MatOption>;\n    protected _visibleClass: string;\n    protected _hiddenClass: string;\n}\nexport {};\n"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -3,2 +3,4 @@
  */
 export * from './public-api';
+
+//# sourceMappingURL=index.d.ts.map
Index: trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,4 @@
+/**
+ * Generated bundle index. Do not edit.
+ */
+export * from './public-api';
Index: trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/index.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.d.ts","sources":["index.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n"]}
Index: trip-planner-front/node_modules/@angular/material/autocomplete/package.json
===================================================================
--- trip-planner-front/node_modules/@angular/material/autocomplete/package.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/autocomplete/package.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -2,8 +2,20 @@
   "name": "@angular/material/autocomplete",
   "main": "../bundles/material-autocomplete.umd.js",
+  "fesm2015_ivy_ngcc": "../__ivy_ngcc__/fesm2015/autocomplete.js",
   "fesm2015": "../fesm2015/autocomplete.js",
   "esm2015": "../esm2015/autocomplete/index.js",
   "typings": "./index.d.ts",
+  "module_ivy_ngcc": "../__ivy_ngcc__/fesm2015/autocomplete.js",
   "module": "../fesm2015/autocomplete.js",
-  "es2015": "../fesm2015/autocomplete.js"
+  "es2015_ivy_ngcc": "../__ivy_ngcc__/fesm2015/autocomplete.js",
+  "es2015": "../fesm2015/autocomplete.js",
+  "__processed_by_ivy_ngcc__": {
+    "es2015": "12.2.9",
+    "fesm2015": "12.2.9",
+    "module": "12.2.9",
+    "typings": "12.2.9"
+  },
+  "scripts": {
+    "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by NGCC. This is not allowed.\\nPlease delete and rebuild the package, without compiling with NGCC, before attempting to publish.\\nNote that NGCC may have been run by importing this package into another project that is being built with Ivy enabled.\\n')\" && exit 1"
+  }
 }
Index: trip-planner-front/node_modules/@angular/material/badge/badge.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/badge/badge.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/badge/badge.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -8,5 +8,5 @@
 import { AriaDescriber } from '@angular/cdk/a11y';
 import { BooleanInput } from '@angular/cdk/coercion';
-import { ElementRef, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';
+import { ElementRef, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
 import { CanDisable, ThemePalette } from '@angular/material/core';
 /** @docs-private */
@@ -20,5 +20,5 @@
 export declare type MatBadgeSize = 'small' | 'medium' | 'large';
 /** Directive to display a text badge. */
-export declare class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {
+export declare class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {
     private _ngZone;
     private _elementRef;
@@ -26,4 +26,6 @@
     private _renderer;
     private _animationMode?;
+    /** Whether the badge has any content. */
+    _hasContent: boolean;
     /** The color of the badge. Can be `primary`, `accent`, or `warn`. */
     get color(): ThemePalette;
@@ -40,7 +42,5 @@
     position: MatBadgePosition;
     /** The content for the badge */
-    get content(): string | number | undefined | null;
-    set content(newContent: string | number | undefined | null);
-    private _content;
+    content: string | number | undefined | null;
     /** Message used to describe the decorated element via aria-describedby */
     get description(): string;
@@ -55,8 +55,5 @@
     /** Unique id for the badge */
     _id: number;
-    /** Visible badge element. */
     private _badgeElement;
-    /** Whether the OnInit lifecycle hook has run yet */
-    private _isInitialized;
     constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _ariaDescriber: AriaDescriber, _renderer: Renderer2, _animationMode?: string | undefined);
     /** Whether the badge is above the host or not */
@@ -64,16 +61,16 @@
     /** Whether the badge is after the host or not */
     isAfter(): boolean;
+    ngOnChanges(changes: SimpleChanges): void;
+    ngOnDestroy(): void;
     /**
-     * Gets the element into which the badge's content is being rendered. Undefined if the element
-     * hasn't been created (e.g. if the badge doesn't have content).
+     * Gets the element into which the badge's content is being rendered.
+     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
      */
     getBadgeElement(): HTMLElement | undefined;
-    ngOnInit(): void;
-    ngOnDestroy(): void;
+    /** Injects a span element into the DOM with the content. */
+    private _updateTextContent;
     /** Creates the badge element */
     private _createBadgeElement;
-    /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-    private _updateRenderedContent;
-    /** Updates the host element's aria description via AriaDescriber. */
+    /** Sets the aria-label property on the element */
     private _updateHostAriaDescription;
     /** Adds css theme class given the color to the component host */
@@ -81,9 +78,11 @@
     /** Clears any existing badges that might be left over from server-side rendering. */
     private _clearExistingBadges;
+    /** Gets the string representation of the badge content. */
+    private _stringifyContent;
     static ngAcceptInputType_disabled: BooleanInput;
     static ngAcceptInputType_hidden: BooleanInput;
     static ngAcceptInputType_overlap: BooleanInput;
     static ɵfac: ɵngcc0.ɵɵFactoryDeclaration<MatBadge, [null, null, null, null, { optional: true; }]>;
-    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<MatBadge, "[matBadge]", never, { "disabled": "matBadgeDisabled"; "position": "matBadgePosition"; "size": "matBadgeSize"; "color": "matBadgeColor"; "overlap": "matBadgeOverlap"; "content": "matBadge"; "description": "matBadgeDescription"; "hidden": "matBadgeHidden"; }, {}, never>;
+    static ɵdir: ɵngcc0.ɵɵDirectiveDeclaration<MatBadge, "[matBadge]", never, { "disabled": "matBadgeDisabled"; "position": "matBadgePosition"; "size": "matBadgeSize"; "color": "matBadgeColor"; "overlap": "matBadgeOverlap"; "description": "matBadgeDescription"; "hidden": "matBadgeHidden"; "content": "matBadge"; }, {}, never>;
 }
 export {};
Index: trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.__ivy_ngcc_bak
===================================================================
--- trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.__ivy_ngcc_bak	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.__ivy_ngcc_bak	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -8,5 +8,5 @@
 import { AriaDescriber } from '@angular/cdk/a11y';
 import { BooleanInput } from '@angular/cdk/coercion';
-import { ElementRef, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';
+import { ElementRef, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
 import { CanDisable, ThemePalette } from '@angular/material/core';
 /** @docs-private */
@@ -19,5 +19,5 @@
 export declare type MatBadgeSize = 'small' | 'medium' | 'large';
 /** Directive to display a text badge. */
-export declare class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {
+export declare class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {
     private _ngZone;
     private _elementRef;
@@ -25,4 +25,6 @@
     private _renderer;
     private _animationMode?;
+    /** Whether the badge has any content. */
+    _hasContent: boolean;
     /** The color of the badge. Can be `primary`, `accent`, or `warn`. */
     get color(): ThemePalette;
@@ -39,7 +41,5 @@
     position: MatBadgePosition;
     /** The content for the badge */
-    get content(): string | number | undefined | null;
-    set content(newContent: string | number | undefined | null);
-    private _content;
+    content: string | number | undefined | null;
     /** Message used to describe the decorated element via aria-describedby */
     get description(): string;
@@ -54,8 +54,5 @@
     /** Unique id for the badge */
     _id: number;
-    /** Visible badge element. */
     private _badgeElement;
-    /** Whether the OnInit lifecycle hook has run yet */
-    private _isInitialized;
     constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _ariaDescriber: AriaDescriber, _renderer: Renderer2, _animationMode?: string | undefined);
     /** Whether the badge is above the host or not */
@@ -63,16 +60,16 @@
     /** Whether the badge is after the host or not */
     isAfter(): boolean;
+    ngOnChanges(changes: SimpleChanges): void;
+    ngOnDestroy(): void;
     /**
-     * Gets the element into which the badge's content is being rendered. Undefined if the element
-     * hasn't been created (e.g. if the badge doesn't have content).
+     * Gets the element into which the badge's content is being rendered.
+     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
      */
     getBadgeElement(): HTMLElement | undefined;
-    ngOnInit(): void;
-    ngOnDestroy(): void;
+    /** Injects a span element into the DOM with the content. */
+    private _updateTextContent;
     /** Creates the badge element */
     private _createBadgeElement;
-    /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-    private _updateRenderedContent;
-    /** Updates the host element's aria description via AriaDescriber. */
+    /** Sets the aria-label property on the element */
     private _updateHostAriaDescription;
     /** Adds css theme class given the color to the component host */
@@ -80,4 +77,6 @@
     /** Clears any existing badges that might be left over from server-side rendering. */
     private _clearExistingBadges;
+    /** Gets the string representation of the badge content. */
+    private _stringifyContent;
     static ngAcceptInputType_disabled: BooleanInput;
     static ngAcceptInputType_hidden: BooleanInput;
Index: trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/badge/badge.d.ts.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"badge.d.ts","sources":["badge.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AriaDescriber } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { ElementRef, NgZone, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { CanDisable, ThemePalette } from '@angular/material/core';\n/** @docs-private */\ndeclare const _MatBadgeBase: import(\"@angular/material/core/common-behaviors/constructor\").Constructor<CanDisable> & import(\"@angular/material/core/common-behaviors/constructor\").AbstractConstructor<CanDisable> & {\n    new (): {};\n};\n/** Allowed position options for matBadgePosition */\nexport declare type MatBadgePosition = 'above after' | 'above before' | 'below before' | 'below after' | 'before' | 'after' | 'above' | 'below';\n/** Allowed size options for matBadgeSize */\nexport declare type MatBadgeSize = 'small' | 'medium' | 'large';\n/** Directive to display a text badge. */\nexport declare class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {\n    private _ngZone;\n    private _elementRef;\n    private _ariaDescriber;\n    private _renderer;\n    private _animationMode?;\n    /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n    get color(): ThemePalette;\n    set color(value: ThemePalette);\n    private _color;\n    /** Whether the badge should overlap its contents or not */\n    get overlap(): boolean;\n    set overlap(val: boolean);\n    private _overlap;\n    /**\n     * Position the badge should reside.\n     * Accepts any combination of 'above'|'below' and 'before'|'after'\n     */\n    position: MatBadgePosition;\n    /** The content for the badge */\n    get content(): string | number | undefined | null;\n    set content(newContent: string | number | undefined | null);\n    private _content;\n    /** Message used to describe the decorated element via aria-describedby */\n    get description(): string;\n    set description(newDescription: string);\n    private _description;\n    /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n    size: MatBadgeSize;\n    /** Whether the badge is hidden. */\n    get hidden(): boolean;\n    set hidden(val: boolean);\n    private _hidden;\n    /** Unique id for the badge */\n    _id: number;\n    /** Visible badge element. */\n    private _badgeElement;\n    /** Whether the OnInit lifecycle hook has run yet */\n    private _isInitialized;\n    constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _ariaDescriber: AriaDescriber, _renderer: Renderer2, _animationMode?: string | undefined);\n    /** Whether the badge is above the host or not */\n    isAbove(): boolean;\n    /** Whether the badge is after the host or not */\n    isAfter(): boolean;\n    /**\n     * Gets the element into which the badge's content is being rendered. Undefined if the element\n     * hasn't been created (e.g. if the badge doesn't have content).\n     */\n    getBadgeElement(): HTMLElement | undefined;\n    ngOnInit(): void;\n    ngOnDestroy(): void;\n    /** Creates the badge element */\n    private _createBadgeElement;\n    /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n    private _updateRenderedContent;\n    /** Updates the host element's aria description via AriaDescriber. */\n    private _updateHostAriaDescription;\n    /** Adds css theme class given the color to the component host */\n    private _setColor;\n    /** Clears any existing badges that might be left over from server-side rendering. */\n    private _clearExistingBadges;\n    static ngAcceptInputType_disabled: BooleanInput;\n    static ngAcceptInputType_hidden: BooleanInput;\n    static ngAcceptInputType_overlap: BooleanInput;\n}\nexport {};\n"]}
+{"version":3,"file":"badge.d.ts","sources":["badge.d.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AriaDescriber } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { ElementRef, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';\nimport { CanDisable, ThemePalette } from '@angular/material/core';\n/** @docs-private */\ndeclare const _MatBadgeBase: import(\"@angular/material/core/common-behaviors/constructor\").Constructor<CanDisable> & import(\"@angular/material/core/common-behaviors/constructor\").AbstractConstructor<CanDisable> & {\n    new (): {};\n};\n/** Allowed position options for matBadgePosition */\nexport declare type MatBadgePosition = 'above after' | 'above before' | 'below before' | 'below after' | 'before' | 'after' | 'above' | 'below';\n/** Allowed size options for matBadgeSize */\nexport declare type MatBadgeSize = 'small' | 'medium' | 'large';\n/** Directive to display a text badge. */\nexport declare class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {\n    private _ngZone;\n    private _elementRef;\n    private _ariaDescriber;\n    private _renderer;\n    private _animationMode?;\n    /** Whether the badge has any content. */\n    _hasContent: boolean;\n    /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n    get color(): ThemePalette;\n    set color(value: ThemePalette);\n    private _color;\n    /** Whether the badge should overlap its contents or not */\n    get overlap(): boolean;\n    set overlap(val: boolean);\n    private _overlap;\n    /**\n     * Position the badge should reside.\n     * Accepts any combination of 'above'|'below' and 'before'|'after'\n     */\n    position: MatBadgePosition;\n    /** The content for the badge */\n    content: string | number | undefined | null;\n    /** Message used to describe the decorated element via aria-describedby */\n    get description(): string;\n    set description(newDescription: string);\n    private _description;\n    /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n    size: MatBadgeSize;\n    /** Whether the badge is hidden. */\n    get hidden(): boolean;\n    set hidden(val: boolean);\n    private _hidden;\n    /** Unique id for the badge */\n    _id: number;\n    private _badgeElement;\n    constructor(_ngZone: NgZone, _elementRef: ElementRef<HTMLElement>, _ariaDescriber: AriaDescriber, _renderer: Renderer2, _animationMode?: string | undefined);\n    /** Whether the badge is above the host or not */\n    isAbove(): boolean;\n    /** Whether the badge is after the host or not */\n    isAfter(): boolean;\n    ngOnChanges(changes: SimpleChanges): void;\n    ngOnDestroy(): void;\n    /**\n     * Gets the element into which the badge's content is being rendered.\n     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\n     */\n    getBadgeElement(): HTMLElement | undefined;\n    /** Injects a span element into the DOM with the content. */\n    private _updateTextContent;\n    /** Creates the badge element */\n    private _createBadgeElement;\n    /** Sets the aria-label property on the element */\n    private _updateHostAriaDescription;\n    /** Adds css theme class given the color to the component host */\n    private _setColor;\n    /** Clears any existing badges that might be left over from server-side rendering. */\n    private _clearExistingBadges;\n    /** Gets the string representation of the badge content. */\n    private _stringifyContent;\n    static ngAcceptInputType_disabled: BooleanInput;\n    static ngAcceptInputType_hidden: BooleanInput;\n    static ngAcceptInputType_overlap: BooleanInput;\n}\nexport {};\n"]}
Index: trip-planner-front/node_modules/@angular/material/badge/index.metadata.json
===================================================================
--- trip-planner-front/node_modules/@angular/material/badge/index.metadata.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/badge/index.metadata.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"__symbolic":"module","version":4,"metadata":{"MatBadgeModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"A11yModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":17,"character":4}],"exports":[{"__symbolic":"reference","name":"MatBadge"},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":19,"character":22}],"declarations":[{"__symbolic":"reference","name":"MatBadge"}]}]}],"members":{}},"MatBadgePosition":{"__symbolic":"interface"},"MatBadgeSize":{"__symbolic":"interface"},"MatBadge":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":59,"character":30,"module":"./badge"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":42,"character":1},"arguments":[{"selector":"[matBadge]","inputs":["disabled: matBadgeDisabled"],"host":{"class":"mat-badge","[class.mat-badge-overlap]":"overlap","[class.mat-badge-above]":"isAbove()","[class.mat-badge-below]":"!isAbove()","[class.mat-badge-before]":"!isAfter()","[class.mat-badge-after]":"isAfter()","[class.mat-badge-small]":"size === \"small\"","[class.mat-badge-medium]":"size === \"medium\"","[class.mat-badge-large]":"size === \"large\"","[class.mat-badge-hidden]":"hidden || !content","[class.mat-badge-disabled]":"disabled","$quoted$":["class","[class.mat-badge-overlap]","[class.mat-badge-above]","[class.mat-badge-below]","[class.mat-badge-before]","[class.mat-badge-after]","[class.mat-badge-small]","[class.mat-badge-medium]","[class.mat-badge-large]","[class.mat-badge-hidden]","[class.mat-badge-disabled]"]}}]}],"members":{"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3},"arguments":["matBadgeColor"]}]}],"overlap":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3},"arguments":["matBadgeOverlap"]}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3},"arguments":["matBadgePosition"]}]}],"content":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3},"arguments":["matBadge"]}]}],"description":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3},"arguments":["matBadgeDescription"]}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3},"arguments":["matBadgeSize"]}]}],"hidden":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3},"arguments":["matBadgeHidden"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":126,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":126,"character":19},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":126,"character":26}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":122,"character":23},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":123,"character":38,"context":{"typeName":"HTMLElement"},"module":"./badge"}]},{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"AriaDescriber","line":124,"character":30},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":25},{"__symbolic":"reference","name":"string"}]}],"isAbove":[{"__symbolic":"method"}],"isAfter":[{"__symbolic":"method"}],"getBadgeElement":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_createBadgeElement":[{"__symbolic":"method"}],"_updateRenderedContent":[{"__symbolic":"method"}],"_updateHostAriaDescription":[{"__symbolic":"method"}],"_setColor":[{"__symbolic":"method"}],"_clearExistingBadges":[{"__symbolic":"method"}]}}},"origins":{"MatBadgeModule":"./badge-module","MatBadgePosition":"./badge","MatBadgeSize":"./badge","MatBadge":"./badge"},"importAs":"@angular/material/badge"}
+{"__symbolic":"module","version":4,"metadata":{"MatBadgeModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"A11yModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":17,"character":4}],"exports":[{"__symbolic":"reference","name":"MatBadge"},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":19,"character":22}],"declarations":[{"__symbolic":"reference","name":"MatBadge"}]}]}],"members":{}},"MatBadgePosition":{"__symbolic":"interface"},"MatBadgeSize":{"__symbolic":"interface"},"MatBadge":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":58,"character":30,"module":"./badge"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":41,"character":1},"arguments":[{"selector":"[matBadge]","inputs":["disabled: matBadgeDisabled"],"host":{"class":"mat-badge","[class.mat-badge-overlap]":"overlap","[class.mat-badge-above]":"isAbove()","[class.mat-badge-below]":"!isAbove()","[class.mat-badge-before]":"!isAfter()","[class.mat-badge-after]":"isAfter()","[class.mat-badge-small]":"size === \"small\"","[class.mat-badge-medium]":"size === \"medium\"","[class.mat-badge-large]":"size === \"large\"","[class.mat-badge-hidden]":"hidden || !_hasContent","[class.mat-badge-disabled]":"disabled","$quoted$":["class","[class.mat-badge-overlap]","[class.mat-badge-above]","[class.mat-badge-below]","[class.mat-badge-before]","[class.mat-badge-after]","[class.mat-badge-small]","[class.mat-badge-medium]","[class.mat-badge-large]","[class.mat-badge-hidden]","[class.mat-badge-disabled]"]}}]}],"members":{"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3},"arguments":["matBadgeColor"]}]}],"overlap":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3},"arguments":["matBadgeOverlap"]}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3},"arguments":["matBadgePosition"]}]}],"content":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3},"arguments":["matBadge"]}]}],"description":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3},"arguments":["matBadgeDescription"]}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":3},"arguments":["matBadgeSize"]}]}],"hidden":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3},"arguments":["matBadgeHidden"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":126,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":126,"character":19},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":126,"character":26}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":122,"character":23},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":123,"character":38,"context":{"typeName":"HTMLElement"},"module":"./badge"}]},{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"AriaDescriber","line":124,"character":30},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":125,"character":25},{"__symbolic":"reference","name":"string"}]}],"isAbove":[{"__symbolic":"method"}],"isAfter":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getBadgeElement":[{"__symbolic":"method"}],"_updateTextContent":[{"__symbolic":"method"}],"_createBadgeElement":[{"__symbolic":"method"}],"_updateHostAriaDescription":[{"__symbolic":"method"}],"_setColor":[{"__symbolic":"method"}],"_clearExistingBadges":[{"__symbolic":"method"}],"_stringifyContent":[{"__symbolic":"method"}]}}},"origins":{"MatBadgeModule":"./badge-module","MatBadgePosition":"./badge","MatBadgeSize":"./badge","MatBadge":"./badge"},"importAs":"@angular/material/badge"}
Index: trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -331,5 +331,4 @@
         return class_1;
     }()));
-    var BADGE_CONTENT_CLASS = 'mat-badge-content';
     /** Directive to display a text badge. */
     var MatBadge = /** @class */ (function (_super) {
@@ -342,4 +341,6 @@
             _this._renderer = _renderer;
             _this._animationMode = _animationMode;
+            /** Whether the badge has any content. */
+            _this._hasContent = false;
             _this._color = 'primary';
             _this._overlap = true;
@@ -353,6 +354,4 @@
             /** Unique id for the badge */
             _this._id = nextId++;
-            /** Whether the OnInit lifecycle hook has run yet */
-            _this._isInitialized = false;
             if (typeof ngDevMode === 'undefined' || ngDevMode) {
                 var nativeElement = _elementRef.nativeElement;
@@ -382,20 +381,17 @@
             configurable: true
         });
-        Object.defineProperty(MatBadge.prototype, "content", {
-            /** The content for the badge */
-            get: function () {
-                return this._content;
-            },
-            set: function (newContent) {
-                this._updateRenderedContent(newContent);
-            },
-            enumerable: false,
-            configurable: true
-        });
         Object.defineProperty(MatBadge.prototype, "description", {
             /** Message used to describe the decorated element via aria-describedby */
             get: function () { return this._description; },
             set: function (newDescription) {
-                this._updateHostAriaDescription(newDescription);
+                if (newDescription !== this._description) {
+                    var badgeElement = this._badgeElement;
+                    this._updateHostAriaDescription(newDescription, this._description);
+                    this._description = newDescription;
+                    if (badgeElement) {
+                        newDescription ? badgeElement.setAttribute('aria-label', newDescription) :
+                            badgeElement.removeAttribute('aria-label');
+                    }
+                }
             },
             enumerable: false,
@@ -419,29 +415,41 @@
             return this.position.indexOf('before') === -1;
         };
+        MatBadge.prototype.ngOnChanges = function (changes) {
+            var contentChange = changes['content'];
+            if (contentChange) {
+                var value = contentChange.currentValue;
+                this._hasContent = value != null && ("" + value).trim().length > 0;
+                this._updateTextContent();
+            }
+        };
+        MatBadge.prototype.ngOnDestroy = function () {
+            var badgeElement = this._badgeElement;
+            if (badgeElement) {
+                if (this.description) {
+                    this._ariaDescriber.removeDescription(badgeElement, this.description);
+                }
+                // When creating a badge through the Renderer, Angular will keep it in an index.
+                // We have to destroy it ourselves, otherwise it'll be retained in memory.
+                if (this._renderer.destroyNode) {
+                    this._renderer.destroyNode(badgeElement);
+                }
+            }
+        };
         /**
-         * Gets the element into which the badge's content is being rendered. Undefined if the element
-         * hasn't been created (e.g. if the badge doesn't have content).
+         * Gets the element into which the badge's content is being rendered.
+         * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
          */
         MatBadge.prototype.getBadgeElement = function () {
             return this._badgeElement;
         };
-        MatBadge.prototype.ngOnInit = function () {
-            // We may have server-side rendered badge that we need to clear.
-            // We need to do this in ngOnInit because the full content of the component
-            // on which the badge is attached won't necessarily be in the DOM until this point.
-            this._clearExistingBadges();
-            if (this.content && !this._badgeElement) {
+        /** Injects a span element into the DOM with the content. */
+        MatBadge.prototype._updateTextContent = function () {
+            if (!this._badgeElement) {
                 this._badgeElement = this._createBadgeElement();
-                this._updateRenderedContent(this.content);
-            }
-            this._isInitialized = true;
-        };
-        MatBadge.prototype.ngOnDestroy = function () {
-            // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.
-            // We have to destroy it ourselves, otherwise it'll be retained in memory.
-            if (this._renderer.destroyNode) {
-                this._renderer.destroyNode(this._badgeElement);
-            }
-            this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+            }
+            else {
+                this._badgeElement.textContent = this._stringifyContent();
+            }
+            return this._badgeElement;
         };
         /** Creates the badge element */
@@ -449,11 +457,15 @@
             var badgeElement = this._renderer.createElement('span');
             var activeClass = 'mat-badge-active';
+            var contentClass = 'mat-badge-content';
+            // Clear any existing badges which may have persisted from a server-side render.
+            this._clearExistingBadges(contentClass);
             badgeElement.setAttribute('id', "mat-badge-content-" + this._id);
-            // The badge is aria-hidden because we don't want it to appear in the page's navigation
-            // flow. Instead, we use the badge to describe the decorated element with aria-describedby.
-            badgeElement.setAttribute('aria-hidden', 'true');
-            badgeElement.classList.add(BADGE_CONTENT_CLASS);
+            badgeElement.classList.add(contentClass);
+            badgeElement.textContent = this._stringifyContent();
             if (this._animationMode === 'NoopAnimations') {
                 badgeElement.classList.add('_mat-animation-noopable');
+            }
+            if (this.description) {
+                badgeElement.setAttribute('aria-label', this.description);
             }
             this._elementRef.nativeElement.appendChild(badgeElement);
@@ -471,55 +483,45 @@
             return badgeElement;
         };
-        /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-        MatBadge.prototype._updateRenderedContent = function (newContent) {
-            var newContentNormalized = ("" + (newContent !== null && newContent !== void 0 ? newContent : '')).trim();
-            // Don't create the badge element if the directive isn't initialized because we want to
-            // append the badge element to the *end* of the host element's content for backwards
-            // compatibility.
-            if (this._isInitialized && newContentNormalized && !this._badgeElement) {
-                this._badgeElement = this._createBadgeElement();
-            }
-            if (this._badgeElement) {
-                this._badgeElement.textContent = newContentNormalized;
-            }
-            this._content = newContentNormalized;
-        };
-        /** Updates the host element's aria description via AriaDescriber. */
-        MatBadge.prototype._updateHostAriaDescription = function (newDescription) {
-            this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+        /** Sets the aria-label property on the element */
+        MatBadge.prototype._updateHostAriaDescription = function (newDescription, oldDescription) {
+            // ensure content available before setting label
+            var content = this._updateTextContent();
+            if (oldDescription) {
+                this._ariaDescriber.removeDescription(content, oldDescription);
+            }
             if (newDescription) {
-                this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);
-            }
-            this._description = newDescription;
+                this._ariaDescriber.describe(content, newDescription);
+            }
         };
         /** Adds css theme class given the color to the component host */
         MatBadge.prototype._setColor = function (colorPalette) {
-            var classList = this._elementRef.nativeElement.classList;
-            classList.remove("mat-badge-" + this._color);
-            if (colorPalette) {
-                classList.add("mat-badge-" + colorPalette);
+            if (colorPalette !== this._color) {
+                var classList = this._elementRef.nativeElement.classList;
+                if (this._color) {
+                    classList.remove("mat-badge-" + this._color);
+                }
+                if (colorPalette) {
+                    classList.add("mat-badge-" + colorPalette);
+                }
             }
         };
         /** Clears any existing badges that might be left over from server-side rendering. */
-        MatBadge.prototype._clearExistingBadges = function () {
-            var e_1, _a;
-            // Only check direct children of this host element in order to avoid deleting
-            // any badges that might exist in descendant elements.
-            var badges = this._elementRef.nativeElement.querySelectorAll(":scope > ." + BADGE_CONTENT_CLASS);
-            try {
-                for (var _b = __values(Array.from(badges)), _c = _b.next(); !_c.done; _c = _b.next()) {
-                    var badgeElement = _c.value;
-                    if (badgeElement !== this._badgeElement) {
-                        badgeElement.remove();
-                    }
-                }
-            }
-            catch (e_1_1) { e_1 = { error: e_1_1 }; }
-            finally {
-                try {
-                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-                }
-                finally { if (e_1) throw e_1.error; }
-            }
+        MatBadge.prototype._clearExistingBadges = function (cssClass) {
+            var element = this._elementRef.nativeElement;
+            var childCount = element.children.length;
+            // Use a reverse while, because we'll be removing elements from the list as we're iterating.
+            while (childCount--) {
+                var currentChild = element.children[childCount];
+                if (currentChild.classList.contains(cssClass)) {
+                    element.removeChild(currentChild);
+                }
+            }
+        };
+        /** Gets the string representation of the badge content. */
+        MatBadge.prototype._stringifyContent = function () {
+            // Convert null and undefined to an empty string which is consistent
+            // with how Angular handles them in inside template interpolations.
+            var content = this.content;
+            return content == null ? '' : "" + content;
         };
         return MatBadge;
@@ -539,5 +541,5 @@
                         '[class.mat-badge-medium]': 'size === "medium"',
                         '[class.mat-badge-large]': 'size === "large"',
-                        '[class.mat-badge-hidden]': 'hidden || !content',
+                        '[class.mat-badge-hidden]': 'hidden || !_hasContent',
                         '[class.mat-badge-disabled]': 'disabled',
                     },
Index: trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-badge.umd.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"material-badge.umd.js","sources":["../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/badge/badge.ts","../../../../../src/material/badge/badge-module.ts","../../../../../src/material/badge/public-api.ts","../../../../../src/material/badge/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Renderer2,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\nconst BADGE_CONTENT_CLASS = 'mat-badge-content';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !content',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge')\n  get content(): string | number | undefined | null {\n    return this._content;\n  }\n  set content(newContent: string | number | undefined | null) {\n    this._updateRenderedContent(newContent);\n  }\n  private _content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    this._updateHostAriaDescription(newDescription);\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  /** Visible badge element. */\n  private _badgeElement: HTMLElement | undefined;\n\n  /** Whether the OnInit lifecycle hook has run yet */\n  private _isInitialized = false;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered. Undefined if the element\n   * hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  ngOnInit() {\n    // We may have server-side rendered badge that we need to clear.\n    // We need to do this in ngOnInit because the full content of the component\n    // on which the badge is attached won't necessarily be in the DOM until this point.\n    this._clearExistingBadges();\n\n    if (this.content && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n      this._updateRenderedContent(this.content);\n    }\n\n    this._isInitialized = true;\n  }\n\n  ngOnDestroy() {\n    // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.\n    // We have to destroy it ourselves, otherwise it'll be retained in memory.\n    if (this._renderer.destroyNode) {\n      this._renderer.destroyNode(this._badgeElement);\n    }\n\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n\n    // The badge is aria-hidden because we don't want it to appear in the page's navigation\n    // flow. Instead, we use the badge to describe the decorated element with aria-describedby.\n    badgeElement.setAttribute('aria-hidden', 'true');\n    badgeElement.classList.add(BADGE_CONTENT_CLASS);\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n  private _updateRenderedContent(newContent: string | number | undefined | null): void {\n    const newContentNormalized: string = `${newContent ?? ''}`.trim();\n\n    // Don't create the badge element if the directive isn't initialized because we want to\n    // append the badge element to the *end* of the host element's content for backwards\n    // compatibility.\n    if (this._isInitialized && newContentNormalized && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    }\n\n    if (this._badgeElement) {\n      this._badgeElement.textContent = newContentNormalized;\n    }\n\n    this._content = newContentNormalized;\n  }\n\n  /** Updates the host element's aria description via AriaDescriber. */\n  private _updateHostAriaDescription(newDescription: string): void {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n    if (newDescription) {\n      this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);\n    }\n    this._description = newDescription;\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    const classList = this._elementRef.nativeElement.classList;\n    classList.remove(`mat-badge-${this._color}`);\n    if (colorPalette) {\n      classList.add(`mat-badge-${colorPalette}`);\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges() {\n    // Only check direct children of this host element in order to avoid deleting\n    // any badges that might exist in descendant elements.\n    const badges =\n        this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);\n    for (const badgeElement of Array.from(badges)) {\n      if (badgeElement !== this._badgeElement) {\n        badgeElement.remove();\n      }\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["mixinDisabled","coerceBooleanProperty","Directive","NgZone","ElementRef","AriaDescriber","Renderer2","Optional","Inject","ANIMATION_MODULE_TYPE","Input","NgModule","A11yModule","MatCommonModule"],"mappings":"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"}
+{"version":3,"file":"material-badge.umd.js","sources":["../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/badge/badge.ts","../../../../../src/material/badge/badge-module.ts","../../../../../src/material/badge/public-api.ts","../../../../../src/material/badge/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !_hasContent',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {\n  /** Whether the badge has any content. */\n  _hasContent = false;\n\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge') content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    if (newDescription !== this._description) {\n      const badgeElement = this._badgeElement;\n      this._updateHostAriaDescription(newDescription, this._description);\n      this._description = newDescription;\n\n      if (badgeElement) {\n        newDescription ? badgeElement.setAttribute('aria-label', newDescription) :\n            badgeElement.removeAttribute('aria-label');\n      }\n    }\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  private _badgeElement: HTMLElement | undefined;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const contentChange = changes['content'];\n\n    if (contentChange) {\n      const value = contentChange.currentValue;\n      this._hasContent = value != null && `${value}`.trim().length > 0;\n      this._updateTextContent();\n    }\n  }\n\n  ngOnDestroy() {\n    const badgeElement = this._badgeElement;\n\n    if (badgeElement) {\n      if (this.description) {\n        this._ariaDescriber.removeDescription(badgeElement, this.description);\n      }\n\n      // When creating a badge through the Renderer, Angular will keep it in an index.\n      // We have to destroy it ourselves, otherwise it'll be retained in memory.\n      if (this._renderer.destroyNode) {\n        this._renderer.destroyNode(badgeElement);\n      }\n    }\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered.\n   * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  /** Injects a span element into the DOM with the content. */\n  private _updateTextContent(): HTMLSpanElement {\n    if (!this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    } else {\n      this._badgeElement.textContent = this._stringifyContent();\n    }\n    return this._badgeElement;\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n    const contentClass = 'mat-badge-content';\n\n    // Clear any existing badges which may have persisted from a server-side render.\n    this._clearExistingBadges(contentClass);\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n    badgeElement.classList.add(contentClass);\n    badgeElement.textContent = this._stringifyContent();\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    if (this.description) {\n      badgeElement.setAttribute('aria-label', this.description);\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Sets the aria-label property on the element */\n  private _updateHostAriaDescription(newDescription: string, oldDescription: string): void {\n    // ensure content available before setting label\n    const content = this._updateTextContent();\n\n    if (oldDescription) {\n      this._ariaDescriber.removeDescription(content, oldDescription);\n    }\n\n    if (newDescription) {\n      this._ariaDescriber.describe(content, newDescription);\n    }\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    if (colorPalette !== this._color) {\n      const classList = this._elementRef.nativeElement.classList;\n      if (this._color) {\n        classList.remove(`mat-badge-${this._color}`);\n      }\n      if (colorPalette) {\n        classList.add(`mat-badge-${colorPalette}`);\n      }\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges(cssClass: string) {\n    const element = this._elementRef.nativeElement;\n    let childCount = element.children.length;\n\n    // Use a reverse while, because we'll be removing elements from the list as we're iterating.\n    while (childCount--) {\n      const currentChild = element.children[childCount];\n\n      if (currentChild.classList.contains(cssClass)) {\n        element.removeChild(currentChild);\n      }\n    }\n  }\n\n  /** Gets the string representation of the badge content. */\n  private _stringifyContent(): string {\n    // Convert null and undefined to an empty string which is consistent\n    // with how Angular handles them in inside template interpolations.\n    const content = this.content;\n    return content == null ? '' : `${content}`;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["mixinDisabled","coerceBooleanProperty","Directive","NgZone","ElementRef","AriaDescriber","Renderer2","Optional","Inject","ANIMATION_MODULE_TYPE","Input","NgModule","A11yModule","MatCommonModule"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -35,5 +35,5 @@
      */
     /** Current version of Angular Material. */
-    var VERSION$1 = new i0.Version('12.2.9');
+    var VERSION$1 = new i0.Version('12.2.10');
 
     /**
@@ -75,5 +75,5 @@
     // Can be removed once the Material primary entry-point no longer
     // re-exports all secondary entry-points
-    var VERSION = new i0.Version('12.2.9');
+    var VERSION = new i0.Version('12.2.10');
     /** @docs-private */
     function MATERIAL_SANITY_CHECKS_FACTORY() {
Index: trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-core.umd.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"material-core.umd.js","sources":["../../../../../src/material/core/version.ts","../../../../../src/material/core/animation/animation.ts","../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../src/material/core/common-behaviors/color.ts","../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../src/material/core/common-behaviors/index.ts","../../../../../src/material/core/datetime/date-adapter.ts","../../../../../src/material/core/datetime/date-formats.ts","../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../src/material/core/datetime/index.ts","../../../../../src/material/core/error/error-options.ts","../../../../../src/material/core/line/line.ts","../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../src/material/core/ripple/ripple.ts","../../../../../src/material/core/ripple/index.ts","../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../src/material/core/selection/index.ts","../../../../../src/material/core/option/option-parent.ts","../../../../../src/material/core/option/optgroup.ts","../../../../../src/material/core/option/option.ts","../../../../../src/material/core/option/index.ts","../../../../../src/material/core/public-api.ts","../../../../../src/material/core/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.9');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.9');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","Version","InjectionToken","isDevMode","_isTestEnvironment","CDK_VERSION","NgModule","BidiModule","HighContrastModeDetector","Optional","Inject","DOCUMENT","coerceBooleanProperty","coerceNumberProperty","Subject","Observable","inject","LOCALE_ID","Injectable","Platform","PlatformModule","Directive","startWith","normalizePassiveListenerOptions","coerceElement","isFakeMousedownFromScreenReader","isFakeTouchstartFromScreenReader","ElementRef","NgZone","ANIMATION_MODULE_TYPE","Input","Component","ViewEncapsulation","ChangeDetectionStrategy","EventEmitter","ENTER","SPACE","hasModifierKey","ChangeDetectorRef","Output","CommonModule"],"mappings":"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"}
+{"version":3,"file":"material-core.umd.js","sources":["../../../../../src/material/core/version.ts","../../../../../src/material/core/animation/animation.ts","../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../src/material/core/common-behaviors/color.ts","../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../src/material/core/common-behaviors/index.ts","../../../../../src/material/core/datetime/date-adapter.ts","../../../../../src/material/core/datetime/date-formats.ts","../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../src/material/core/datetime/index.ts","../../../../../src/material/core/error/error-options.ts","../../../../../src/material/core/line/line.ts","../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../src/material/core/ripple/ripple.ts","../../../../../src/material/core/ripple/index.ts","../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../src/material/core/selection/index.ts","../../../../../src/material/core/option/option-parent.ts","../../../../../src/material/core/option/optgroup.ts","../../../../../src/material/core/option/option.ts","../../../../../src/material/core/option/index.ts","../../../../../src/material/core/public-api.ts","../../../../../src/material/core/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.10');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.10');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","Version","InjectionToken","isDevMode","_isTestEnvironment","CDK_VERSION","NgModule","BidiModule","HighContrastModeDetector","Optional","Inject","DOCUMENT","coerceBooleanProperty","coerceNumberProperty","Subject","Observable","inject","LOCALE_ID","Injectable","Platform","PlatformModule","Directive","startWith","normalizePassiveListenerOptions","coerceElement","isFakeMousedownFromScreenReader","isFakeTouchstartFromScreenReader","ElementRef","NgZone","ANIMATION_MODULE_TYPE","Input","Component","ViewEncapsulation","ChangeDetectionStrategy","EventEmitter","ENTER","SPACE","hasModifierKey","ChangeDetectorRef","Output","CommonModule"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,7 +1,7 @@
 (function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/cdk/coercion'), require('@angular/material/core'), require('@angular/cdk/a11y'), require('@angular/cdk/keycodes'), require('rxjs'), require('@angular/animations'), require('@angular/common')) :
-    typeof define === 'function' && define.amd ? define('@angular/material/sort', ['exports', '@angular/core', '@angular/cdk/coercion', '@angular/material/core', '@angular/cdk/a11y', '@angular/cdk/keycodes', 'rxjs', '@angular/animations', '@angular/common'], factory) :
-    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ng = global.ng || {}, global.ng.material = global.ng.material || {}, global.ng.material.sort = {}), global.ng.core, global.ng.cdk.coercion, global.ng.material.core, global.ng.cdk.a11y, global.ng.cdk.keycodes, global.rxjs, global.ng.animations, global.ng.common));
-}(this, (function (exports, i0, coercion, core, a11y, keycodes, rxjs, animations, common) { 'use strict';
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/cdk/a11y'), require('@angular/cdk/coercion'), require('@angular/cdk/keycodes'), require('@angular/material/core'), require('rxjs'), require('@angular/animations'), require('@angular/common')) :
+    typeof define === 'function' && define.amd ? define('@angular/material/sort', ['exports', '@angular/core', '@angular/cdk/a11y', '@angular/cdk/coercion', '@angular/cdk/keycodes', '@angular/material/core', 'rxjs', '@angular/animations', '@angular/common'], factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ng = global.ng || {}, global.ng.material = global.ng.material || {}, global.ng.material.sort = {}), global.ng.core, global.ng.cdk.a11y, global.ng.cdk.coercion, global.ng.cdk.keycodes, global.ng.material.core, global.rxjs, global.ng.animations, global.ng.common));
+}(this, (function (exports, i0, a11y, coercion, keycodes, core, rxjs, animations, common) { 'use strict';
 
     function _interopNamespace(e) {
@@ -603,6 +603,4 @@
      * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and
      * include it in a custom provider.
-     * @deprecated No longer being used. To be removed.
-     * @breaking-change 13.0.0
      */
     var MatSortHeaderIntl = /** @class */ (function () {
@@ -658,5 +656,7 @@
         // `MatSort` is not optionally injected, but just asserted manually w/ better error.
         // tslint:disable-next-line: lightweight-tokens
-        _sort, _columnDef, _focusMonitor, _elementRef) {
+        _sort, _columnDef, _focusMonitor, _elementRef, 
+        /** @breaking-change 14.0.0 _ariaDescriber will be required. */
+        _ariaDescriber) {
             var _this = 
             // Note that we use a string token for the `_columnDef`, because the value is provided both by
@@ -671,4 +671,5 @@
             _this._focusMonitor = _focusMonitor;
             _this._elementRef = _elementRef;
+            _this._ariaDescriber = _ariaDescriber;
             /**
              * Flag set to true when the indicator should be displayed while the sort is not active. Used to
@@ -690,4 +691,8 @@
             /** Sets the position of the arrow that displays when sorted. */
             _this.arrowPosition = 'after';
+            // Default the action description to "Sort" because it's better than nothing.
+            // Without a description, the button's label comes from the sort header text content,
+            // which doesn't give any indication that it performs a sorting operation.
+            _this._sortActionDescription = 'Sort';
             if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {
                 throw getSortHeaderNotContainedWithinSortError();
@@ -696,4 +701,18 @@
             return _this;
         }
+        Object.defineProperty(MatSortHeader.prototype, "sortActionDescription", {
+            /**
+             * Description applied to MatSortHeader's button element with aria-describedby. This text should
+             * describe the action that will occur when the user clicks the sort header.
+             */
+            get: function () {
+                return this._sortActionDescription;
+            },
+            set: function (value) {
+                this._updateSortActionDescription(value);
+            },
+            enumerable: false,
+            configurable: true
+        });
         Object.defineProperty(MatSortHeader.prototype, "disableClear", {
             /** Overrides the disable clear value of the containing MatSort for this MatSortable. */
@@ -711,4 +730,6 @@
             this._setAnimationTransitionState({ toState: this._isSorted() ? 'active' : this._arrowDirection });
             this._sort.register(this);
+            this._sortButton = this._elementRef.nativeElement.querySelector('[role="button"]');
+            this._updateSortActionDescription(this._sortActionDescription);
         };
         MatSortHeader.prototype.ngAfterViewInit = function () {
@@ -828,4 +849,19 @@
         MatSortHeader.prototype._renderArrow = function () {
             return !this._isDisabled() || this._isSorted();
+        };
+        MatSortHeader.prototype._updateSortActionDescription = function (newDescription) {
+            // We use AriaDescriber for the sort button instead of setting an `aria-label` because some
+            // screen readers (notably VoiceOver) will read both the column header *and* the button's label
+            // for every *cell* in the table, creating a lot of unnecessary noise.
+            var _a, _b;
+            // If _sortButton is undefined, the component hasn't been initialized yet so there's
+            // nothing to update in the DOM.
+            if (this._sortButton) {
+                // removeDescription will no-op if there is no existing message.
+                // TODO(jelbourn): remove optional chaining when AriaDescriber is required.
+                (_a = this._ariaDescriber) === null || _a === void 0 ? void 0 : _a.removeDescription(this._sortButton, this._sortActionDescription);
+                (_b = this._ariaDescriber) === null || _b === void 0 ? void 0 : _b.describe(this._sortButton, newDescription);
+            }
+            this._sortActionDescription = newDescription;
         };
         /** Handles changes in the sorting state. */
@@ -887,5 +923,6 @@
         { type: undefined, decorators: [{ type: i0.Inject, args: ['MAT_SORT_HEADER_COLUMN_DEF',] }, { type: i0.Optional }] },
         { type: a11y.FocusMonitor },
-        { type: i0.ElementRef }
+        { type: i0.ElementRef },
+        { type: a11y.AriaDescriber, decorators: [{ type: i0.Inject, args: [a11y.AriaDescriber,] }, { type: i0.Optional }] }
     ]; };
     MatSortHeader.propDecorators = {
@@ -893,4 +930,5 @@
         arrowPosition: [{ type: i0.Input }],
         start: [{ type: i0.Input }],
+        sortActionDescription: [{ type: i0.Input }],
         disableClear: [{ type: i0.Input }]
     };
Index: trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/bundles/material-sort.umd.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"material-sort.umd.js","sources":["../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/sort/sort-errors.ts","../../../../../src/material/sort/sort.ts","../../../../../src/material/sort/sort-animations.ts","../../../../../src/material/sort/sort-header-intl.ts","../../../../../src/material/sort/sort-header.ts","../../../../../src/material/sort/sort-module.ts","../../../../../src/material/sort/public-api.ts","../../../../../src/material/sort/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @docs-private */\nexport function getSortDuplicateSortableIdError(id: string): Error {\n  return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n\n/** @docs-private */\nexport function getSortHeaderNotContainedWithinSortError(): Error {\n  return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n\n/** @docs-private */\nexport function getSortHeaderMissingIdError(): Error {\n  return Error(`MatSortHeader must be provided with a unique id.`);\n}\n\n/** @docs-private */\nexport function getSortInvalidDirectionError(direction: string): Error {\n  return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CanDisable,\n  HasInitialized,\n  mixinDisabled,\n  mixinInitialized,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {SortDirection} from './sort-direction';\nimport {\n  getSortDuplicateSortableIdError,\n  getSortHeaderMissingIdError,\n  getSortInvalidDirectionError,\n} from './sort-errors';\n\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\nexport interface MatSortable {\n  /** The id of the column being sorted. */\n  id: string;\n\n  /** Starting sort direction. */\n  start: 'asc' | 'desc';\n\n  /** Whether to disable clearing the sorting state. */\n  disableClear: boolean;\n}\n\n/** The current sort state. */\nexport interface Sort {\n  /** The id of the column being sorted. */\n  active: string;\n\n  /** The sort direction. */\n  direction: SortDirection;\n}\n\n/** Default options for `mat-sort`.  */\nexport interface MatSortDefaultOptions {\n  /** Whether to disable clearing the sorting state. */\n  disableClear?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-sort`. */\nexport const MAT_SORT_DEFAULT_OPTIONS =\n    new InjectionToken<MatSortDefaultOptions>('MAT_SORT_DEFAULT_OPTIONS');\n\n\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {}));\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n  selector: '[matSort]',\n  exportAs: 'matSort',\n  host: {'class': 'mat-sort'},\n  inputs: ['disabled: matSortDisabled']\n})\nexport class MatSort extends _MatSortBase\n    implements CanDisable, HasInitialized, OnChanges, OnDestroy, OnInit {\n  /** Collection of all registered sortables that this directive manages. */\n  sortables = new Map<string, MatSortable>();\n\n  /** Used to notify any child components listening to state changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  /** The id of the most recently sorted MatSortable. */\n  @Input('matSortActive') active: string;\n\n  /**\n   * The direction to set when an MatSortable is initially sorted.\n   * May be overriden by the MatSortable's sort start.\n   */\n  @Input('matSortStart') start: 'asc' | 'desc' = 'asc';\n\n  /** The sort direction of the currently active MatSortable. */\n  @Input('matSortDirection')\n  get direction(): SortDirection { return this._direction; }\n  set direction(direction: SortDirection) {\n    if (direction && direction !== 'asc' && direction !== 'desc' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortInvalidDirectionError(direction);\n    }\n    this._direction = direction;\n  }\n  private _direction: SortDirection = '';\n\n  /**\n   * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n   * May be overriden by the MatSortable's disable clear input.\n   */\n  @Input('matSortDisableClear')\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v: boolean) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  /** Event emitted when the user changes either the active sort or sort direction. */\n  @Output('matSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n  constructor(@Optional() @Inject(MAT_SORT_DEFAULT_OPTIONS)\n              private _defaultOptions?: MatSortDefaultOptions) {\n    super();\n  }\n\n  /**\n   * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n   * collection of MatSortables.\n   */\n  register(sortable: MatSortable): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!sortable.id) {\n        throw getSortHeaderMissingIdError();\n      }\n\n      if (this.sortables.has(sortable.id)) {\n        throw getSortDuplicateSortableIdError(sortable.id);\n      }\n    }\n\n    this.sortables.set(sortable.id, sortable);\n  }\n\n  /**\n   * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n   * collection of contained MatSortables.\n   */\n  deregister(sortable: MatSortable): void {\n    this.sortables.delete(sortable.id);\n  }\n\n  /** Sets the active sort id and determines the new sort direction. */\n  sort(sortable: MatSortable): void {\n    if (this.active != sortable.id) {\n      this.active = sortable.id;\n      this.direction = sortable.start ? sortable.start : this.start;\n    } else {\n      this.direction = this.getNextSortDirection(sortable);\n    }\n\n    this.sortChange.emit({active: this.active, direction: this.direction});\n  }\n\n  /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n  getNextSortDirection(sortable: MatSortable): SortDirection {\n    if (!sortable) { return ''; }\n\n    // Get the sort direction cycle with the potential sortable overrides.\n    const disableClear = sortable?.disableClear ??\n        this.disableClear ?? !!this._defaultOptions?.disableClear;\n    let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n    // Get and return the next direction in the cycle\n    let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n    if (nextDirectionIndex >= sortDirectionCycle.length) { nextDirectionIndex = 0; }\n    return sortDirectionCycle[nextDirectionIndex];\n  }\n\n  ngOnInit() {\n    this._markInitialized();\n  }\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start: 'asc' | 'desc',\n                               disableClear: boolean): SortDirection[] {\n  let sortOrder: SortDirection[] = ['asc', 'desc'];\n  if (start == 'desc') { sortOrder.reverse(); }\n  if (!disableClear) { sortOrder.push(''); }\n\n  return sortOrder;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  keyframes,\n  AnimationTriggerMetadata, query, animateChild,\n} from '@angular/animations';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\nconst SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' +\n                                  AnimationCurves.STANDARD_CURVE;\n\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nexport const matSortAnimations: {\n  readonly indicator: AnimationTriggerMetadata;\n  readonly leftPointer: AnimationTriggerMetadata;\n  readonly rightPointer: AnimationTriggerMetadata;\n  readonly arrowOpacity: AnimationTriggerMetadata;\n  readonly arrowPosition: AnimationTriggerMetadata;\n  readonly allowChildren: AnimationTriggerMetadata;\n} = {\n  /** Animation that moves the sort indicator. */\n  indicator: trigger('indicator', [\n    state('active-asc, asc', style({transform: 'translateY(0px)'})),\n    // 10px is the height of the sort indicator, minus the width of the pointers\n    state('active-desc, desc', style({transform: 'translateY(10px)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n  leftPointer: trigger('leftPointer', [\n    state('active-asc, asc', style({transform: 'rotate(-45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n  rightPointer: trigger('rightPointer', [\n    state('active-asc, asc', style({transform: 'rotate(45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(-45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that controls the arrow opacity. */\n  arrowOpacity: trigger('arrowOpacity', [\n    state('desc-to-active, asc-to-active, active', style({opacity: 1})),\n    state('desc-to-hint, asc-to-hint, hint', style({opacity: .54})),\n    state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void',\n        style({opacity: 0})),\n    // Transition between all states except for immediate transitions\n    transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n    transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n  ]),\n\n  /**\n   * Animation for the translation of the arrow as a whole. States are separated into two\n   * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n   * peek, and active. The other states define a specific animation (source-to-destination)\n   * and are determined as a function of their prev user-perceived state and what the next state\n   * should be.\n   */\n  arrowPosition: trigger('arrowPosition', [\n    // Hidden Above => Hint Center\n    transition('* => desc-to-hint, * => desc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(-25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Below\n    transition('* => hint-to-desc, * => active-to-desc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(25%)'})\n        ]))),\n    // Hidden Below => Hint Center\n    transition('* => asc-to-hint, * => asc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Above\n    transition('* => hint-to-asc, * => active-to-asc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(-25%)'})\n        ]))),\n    state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active',\n        style({transform: 'translateY(0)'})),\n    state('hint-to-desc, active-to-desc, desc',\n        style({transform: 'translateY(-25%)'})),\n    state('hint-to-asc, active-to-asc, asc',\n        style({transform: 'translateY(25%)'})),\n  ]),\n\n  /** Necessary trigger that calls animate on children animations. */\n  allowChildren: trigger('allowChildren', [\n    transition('* <=> *', [\n      query('@*', animateChild(), {optional: true})\n    ])\n  ]),\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, SkipSelf, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 13.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class MatSortHeaderIntl {\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  readonly changes: Subject<void> = new Subject<void>();\n}\n\n/** @docs-private */\nexport function MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl: MatSortHeaderIntl) {\n  return parentIntl || new MatSortHeaderIntl();\n}\n\n/** @docs-private */\nexport const MAT_SORT_HEADER_INTL_PROVIDER = {\n  // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n  provide: MatSortHeaderIntl,\n  deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n  useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY\n};\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  ViewEncapsulation,\n  Inject,\n  ElementRef,\n  AfterViewInit,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {merge, Subscription} from 'rxjs';\nimport {MatSort, MatSortable} from './sort';\nimport {matSortAnimations} from './sort-animations';\nimport {SortDirection} from './sort-direction';\nimport {getSortHeaderNotContainedWithinSortError} from './sort-errors';\nimport {MatSortHeaderIntl} from './sort-header-intl';\n\n\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {});\n\n/**\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\n * be fully opaque in the center.\n *\n * @docs-private\n */\nexport type ArrowViewState = SortDirection | 'hint' | 'active';\n\n/**\n * States describing the arrow's animated position (animating fromState to toState).\n * If the fromState is not defined, there will be no animated transition to the toState.\n * @docs-private\n */\nexport interface ArrowViewStateTransition {\n  fromState?: ArrowViewState;\n  toState?: ArrowViewState;\n}\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface MatSortHeaderColumnDef {\n  name: string;\n}\n\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\n@Component({\n  selector: '[mat-sort-header]',\n  exportAs: 'matSortHeader',\n  templateUrl: 'sort-header.html',\n  styleUrls: ['sort-header.css'],\n  host: {\n    'class': 'mat-sort-header',\n    '(click)': '_handleClick()',\n    '(keydown)': '_handleKeydown($event)',\n    '(mouseenter)': '_setIndicatorHintVisible(true)',\n    '(mouseleave)': '_setIndicatorHintVisible(false)',\n    '[attr.aria-sort]': '_getAriaSortAttribute()',\n    '[class.mat-sort-header-disabled]': '_isDisabled()',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  animations: [\n    matSortAnimations.indicator,\n    matSortAnimations.leftPointer,\n    matSortAnimations.rightPointer,\n    matSortAnimations.arrowOpacity,\n    matSortAnimations.arrowPosition,\n    matSortAnimations.allowChildren,\n  ]\n})\nexport class MatSortHeader extends _MatSortHeaderBase\n    implements CanDisable, MatSortable, OnDestroy, OnInit, AfterViewInit {\n  private _rerenderSubscription: Subscription;\n\n  /**\n   * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n   * provide an affordance that the header is sortable by showing on focus and hover.\n   */\n  _showIndicatorHint: boolean = false;\n\n  /**\n   * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n   * position through the animation. If animations are currently disabled, the fromState is removed\n   * so that there is no animation displayed.\n   */\n  _viewState: ArrowViewStateTransition = { };\n\n  /** The direction the arrow should be facing according to the current state. */\n  _arrowDirection: SortDirection = '';\n\n  /**\n   * Whether the view state animation should show the transition between the `from` and `to` states.\n   */\n  _disableViewStateAnimation = false;\n\n  /**\n   * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n   * the column's name.\n   */\n  @Input('mat-sort-header') id: string;\n\n  /** Sets the position of the arrow that displays when sorted. */\n  @Input() arrowPosition: 'before' | 'after' = 'after';\n\n  /** Overrides the sort start value of the containing MatSort for this MatSortable. */\n  @Input() start: 'asc' | 'desc';\n\n  /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n  @Input()\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  constructor(\n              /**\n               * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n               * @breaking-change 13.0.0\n               */\n              public _intl: MatSortHeaderIntl,\n              private _changeDetectorRef: ChangeDetectorRef,\n              // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n              // tslint:disable-next-line: lightweight-tokens\n              @Optional() public _sort: MatSort,\n              @Inject('MAT_SORT_HEADER_COLUMN_DEF') @Optional()\n                  public _columnDef: MatSortHeaderColumnDef,\n              private _focusMonitor: FocusMonitor,\n              private _elementRef: ElementRef<HTMLElement>) {\n    // Note that we use a string token for the `_columnDef`, because the value is provided both by\n    // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n    // and we want to avoid having the sort header depending on the CDK table because\n    // of this single reference.\n    super();\n\n    if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortHeaderNotContainedWithinSortError();\n    }\n\n    this._handleStateChanges();\n  }\n\n  ngOnInit() {\n    if (!this.id && this._columnDef) {\n      this.id = this._columnDef.name;\n    }\n\n    // Initialize the direction of the arrow and set the view state to be immediately that state.\n    this._updateArrowDirection();\n    this._setAnimationTransitionState(\n        {toState: this._isSorted() ? 'active' : this._arrowDirection});\n\n    this._sort.register(this);\n  }\n\n  ngAfterViewInit() {\n    // We use the focus monitor because we also want to style\n    // things differently based on the focus origin.\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n      const newState = !!origin;\n      if (newState !== this._showIndicatorHint) {\n        this._setIndicatorHintVisible(newState);\n        this._changeDetectorRef.markForCheck();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._sort.deregister(this);\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /**\n   * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n   * user showing what the active sort will become. If set to false, the arrow will fade away.\n   */\n  _setIndicatorHintVisible(visible: boolean) {\n    // No-op if the sort header is disabled - should not make the hint visible.\n    if (this._isDisabled() && visible) { return; }\n\n    this._showIndicatorHint = visible;\n\n    if (!this._isSorted()) {\n      this._updateArrowDirection();\n      if (this._showIndicatorHint) {\n        this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'hint'});\n      } else {\n        this._setAnimationTransitionState({fromState: 'hint', toState: this._arrowDirection});\n      }\n    }\n  }\n\n  /**\n   * Sets the animation transition view state for the arrow's position and opacity. If the\n   * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n   * no animation appears.\n   */\n  _setAnimationTransitionState(viewState: ArrowViewStateTransition) {\n    this._viewState = viewState || { };\n\n    // If the animation for arrow position state (opacity/translation) should be disabled,\n    // remove the fromState so that it jumps right to the toState.\n    if (this._disableViewStateAnimation) {\n      this._viewState = {toState: viewState.toState};\n    }\n  }\n\n  /** Triggers the sort on this sort header and removes the indicator hint. */\n  _toggleOnInteraction() {\n    this._sort.sort(this);\n\n    // Do not show the animation if the header was already shown in the right position.\n    if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n      this._disableViewStateAnimation = true;\n    }\n  }\n\n  _handleClick() {\n    if (!this._isDisabled()) {\n      this._sort.sort(this);\n    }\n  }\n\n  _handleKeydown(event: KeyboardEvent) {\n    if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n      event.preventDefault();\n      this._toggleOnInteraction();\n    }\n  }\n\n  /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n  _isSorted() {\n    return this._sort.active == this.id &&\n        (this._sort.direction === 'asc' || this._sort.direction === 'desc');\n  }\n\n  /** Returns the animation state for the arrow direction (indicator and pointers). */\n  _getArrowDirectionState() {\n    return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n  }\n\n  /** Returns the arrow position state (opacity, translation). */\n  _getArrowViewState() {\n    const fromState = this._viewState.fromState;\n    return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n  }\n\n  /**\n   * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n   * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n   * active sorted direction. The reason this is updated through a function is because the direction\n   * should only be changed at specific times - when deactivated but the hint is displayed and when\n   * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n   * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n   * preserving its direction, even though the next sort direction is actually different and should\n   * only be changed once the arrow displays again (hint or activation).\n   */\n  _updateArrowDirection() {\n    this._arrowDirection = this._isSorted() ?\n        this._sort.direction :\n        (this.start || this._sort.start);\n  }\n\n  _isDisabled() {\n    return this._sort.disabled || this.disabled;\n  }\n\n  /**\n   * Gets the aria-sort attribute that should be applied to this sort header. If this header\n   * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n   * says that the aria-sort property should only be present on one header at a time, so removing\n   * ensures this is true.\n   */\n  _getAriaSortAttribute() {\n    if (!this._isSorted()) {\n      return 'none';\n    }\n\n    return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n  }\n\n  /** Whether the arrow inside the sort header should be rendered. */\n  _renderArrow() {\n    return !this._isDisabled() || this._isSorted();\n  }\n\n  /** Handles changes in the sorting state. */\n  private _handleStateChanges() {\n    this._rerenderSubscription =\n      merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n        if (this._isSorted()) {\n          this._updateArrowDirection();\n\n          // Do not show the animation if the header was already shown in the right position.\n          if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n            this._disableViewStateAnimation = true;\n          }\n\n          this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'active'});\n          this._showIndicatorHint = false;\n        }\n\n        // If this header was recently active and now no longer sorted, animate away the arrow.\n        if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n          this._disableViewStateAnimation = false;\n          this._setAnimationTransitionState({fromState: 'active', toState: this._arrowDirection});\n        }\n\n        this._changeDetectorRef.markForCheck();\n      });\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatSortHeader} from './sort-header';\nimport {MatSort} from './sort';\nimport {MAT_SORT_HEADER_INTL_PROVIDER} from './sort-header-intl';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\n\n\n@NgModule({\n  imports: [CommonModule, MatCommonModule],\n  exports: [MatSort, MatSortHeader],\n  declarations: [MatSort, MatSortHeader],\n  providers: [MAT_SORT_HEADER_INTL_PROVIDER]\n})\nexport class MatSortModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sort-module';\nexport * from './sort-direction';\nexport * from './sort-header';\nexport * from './sort-header-intl';\nexport * from './sort';\nexport * from './sort-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["InjectionToken","mixinInitialized","mixinDisabled","Subject","EventEmitter","coerceBooleanProperty","Directive","Optional","Inject","Input","Output","AnimationDurations","AnimationCurves","trigger","state","style","transition","animate","keyframes","query","animateChild","Injectable","SkipSelf","SPACE","ENTER","merge","Component","ViewEncapsulation","ChangeDetectionStrategy","ChangeDetectorRef","FocusMonitor","ElementRef","NgModule","CommonModule","MatCommonModule"],"mappings":"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"}
+{"version":3,"file":"material-sort.umd.js","sources":["../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/material/sort/sort-errors.ts","../../../../../src/material/sort/sort.ts","../../../../../src/material/sort/sort-animations.ts","../../../../../src/material/sort/sort-header-intl.ts","../../../../../src/material/sort/sort-header.ts","../../../../../src/material/sort/sort-module.ts","../../../../../src/material/sort/public-api.ts","../../../../../src/material/sort/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @docs-private */\nexport function getSortDuplicateSortableIdError(id: string): Error {\n  return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n\n/** @docs-private */\nexport function getSortHeaderNotContainedWithinSortError(): Error {\n  return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n\n/** @docs-private */\nexport function getSortHeaderMissingIdError(): Error {\n  return Error(`MatSortHeader must be provided with a unique id.`);\n}\n\n/** @docs-private */\nexport function getSortInvalidDirectionError(direction: string): Error {\n  return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CanDisable,\n  HasInitialized,\n  mixinDisabled,\n  mixinInitialized,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {SortDirection} from './sort-direction';\nimport {\n  getSortDuplicateSortableIdError,\n  getSortHeaderMissingIdError,\n  getSortInvalidDirectionError,\n} from './sort-errors';\n\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\nexport interface MatSortable {\n  /** The id of the column being sorted. */\n  id: string;\n\n  /** Starting sort direction. */\n  start: 'asc' | 'desc';\n\n  /** Whether to disable clearing the sorting state. */\n  disableClear: boolean;\n}\n\n/** The current sort state. */\nexport interface Sort {\n  /** The id of the column being sorted. */\n  active: string;\n\n  /** The sort direction. */\n  direction: SortDirection;\n}\n\n/** Default options for `mat-sort`.  */\nexport interface MatSortDefaultOptions {\n  /** Whether to disable clearing the sorting state. */\n  disableClear?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-sort`. */\nexport const MAT_SORT_DEFAULT_OPTIONS =\n    new InjectionToken<MatSortDefaultOptions>('MAT_SORT_DEFAULT_OPTIONS');\n\n\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {}));\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n  selector: '[matSort]',\n  exportAs: 'matSort',\n  host: {'class': 'mat-sort'},\n  inputs: ['disabled: matSortDisabled']\n})\nexport class MatSort extends _MatSortBase\n    implements CanDisable, HasInitialized, OnChanges, OnDestroy, OnInit {\n  /** Collection of all registered sortables that this directive manages. */\n  sortables = new Map<string, MatSortable>();\n\n  /** Used to notify any child components listening to state changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  /** The id of the most recently sorted MatSortable. */\n  @Input('matSortActive') active: string;\n\n  /**\n   * The direction to set when an MatSortable is initially sorted.\n   * May be overriden by the MatSortable's sort start.\n   */\n  @Input('matSortStart') start: 'asc' | 'desc' = 'asc';\n\n  /** The sort direction of the currently active MatSortable. */\n  @Input('matSortDirection')\n  get direction(): SortDirection { return this._direction; }\n  set direction(direction: SortDirection) {\n    if (direction && direction !== 'asc' && direction !== 'desc' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortInvalidDirectionError(direction);\n    }\n    this._direction = direction;\n  }\n  private _direction: SortDirection = '';\n\n  /**\n   * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n   * May be overriden by the MatSortable's disable clear input.\n   */\n  @Input('matSortDisableClear')\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v: boolean) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  /** Event emitted when the user changes either the active sort or sort direction. */\n  @Output('matSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n  constructor(@Optional() @Inject(MAT_SORT_DEFAULT_OPTIONS)\n              private _defaultOptions?: MatSortDefaultOptions) {\n    super();\n  }\n\n  /**\n   * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n   * collection of MatSortables.\n   */\n  register(sortable: MatSortable): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!sortable.id) {\n        throw getSortHeaderMissingIdError();\n      }\n\n      if (this.sortables.has(sortable.id)) {\n        throw getSortDuplicateSortableIdError(sortable.id);\n      }\n    }\n\n    this.sortables.set(sortable.id, sortable);\n  }\n\n  /**\n   * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n   * collection of contained MatSortables.\n   */\n  deregister(sortable: MatSortable): void {\n    this.sortables.delete(sortable.id);\n  }\n\n  /** Sets the active sort id and determines the new sort direction. */\n  sort(sortable: MatSortable): void {\n    if (this.active != sortable.id) {\n      this.active = sortable.id;\n      this.direction = sortable.start ? sortable.start : this.start;\n    } else {\n      this.direction = this.getNextSortDirection(sortable);\n    }\n\n    this.sortChange.emit({active: this.active, direction: this.direction});\n  }\n\n  /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n  getNextSortDirection(sortable: MatSortable): SortDirection {\n    if (!sortable) { return ''; }\n\n    // Get the sort direction cycle with the potential sortable overrides.\n    const disableClear = sortable?.disableClear ??\n        this.disableClear ?? !!this._defaultOptions?.disableClear;\n    let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n    // Get and return the next direction in the cycle\n    let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n    if (nextDirectionIndex >= sortDirectionCycle.length) { nextDirectionIndex = 0; }\n    return sortDirectionCycle[nextDirectionIndex];\n  }\n\n  ngOnInit() {\n    this._markInitialized();\n  }\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start: 'asc' | 'desc',\n                               disableClear: boolean): SortDirection[] {\n  let sortOrder: SortDirection[] = ['asc', 'desc'];\n  if (start == 'desc') { sortOrder.reverse(); }\n  if (!disableClear) { sortOrder.push(''); }\n\n  return sortOrder;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  keyframes,\n  AnimationTriggerMetadata, query, animateChild,\n} from '@angular/animations';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\nconst SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' +\n                                  AnimationCurves.STANDARD_CURVE;\n\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nexport const matSortAnimations: {\n  readonly indicator: AnimationTriggerMetadata;\n  readonly leftPointer: AnimationTriggerMetadata;\n  readonly rightPointer: AnimationTriggerMetadata;\n  readonly arrowOpacity: AnimationTriggerMetadata;\n  readonly arrowPosition: AnimationTriggerMetadata;\n  readonly allowChildren: AnimationTriggerMetadata;\n} = {\n  /** Animation that moves the sort indicator. */\n  indicator: trigger('indicator', [\n    state('active-asc, asc', style({transform: 'translateY(0px)'})),\n    // 10px is the height of the sort indicator, minus the width of the pointers\n    state('active-desc, desc', style({transform: 'translateY(10px)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n  leftPointer: trigger('leftPointer', [\n    state('active-asc, asc', style({transform: 'rotate(-45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n  rightPointer: trigger('rightPointer', [\n    state('active-asc, asc', style({transform: 'rotate(45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(-45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that controls the arrow opacity. */\n  arrowOpacity: trigger('arrowOpacity', [\n    state('desc-to-active, asc-to-active, active', style({opacity: 1})),\n    state('desc-to-hint, asc-to-hint, hint', style({opacity: .54})),\n    state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void',\n        style({opacity: 0})),\n    // Transition between all states except for immediate transitions\n    transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n    transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n  ]),\n\n  /**\n   * Animation for the translation of the arrow as a whole. States are separated into two\n   * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n   * peek, and active. The other states define a specific animation (source-to-destination)\n   * and are determined as a function of their prev user-perceived state and what the next state\n   * should be.\n   */\n  arrowPosition: trigger('arrowPosition', [\n    // Hidden Above => Hint Center\n    transition('* => desc-to-hint, * => desc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(-25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Below\n    transition('* => hint-to-desc, * => active-to-desc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(25%)'})\n        ]))),\n    // Hidden Below => Hint Center\n    transition('* => asc-to-hint, * => asc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Above\n    transition('* => hint-to-asc, * => active-to-asc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(-25%)'})\n        ]))),\n    state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active',\n        style({transform: 'translateY(0)'})),\n    state('hint-to-desc, active-to-desc, desc',\n        style({transform: 'translateY(-25%)'})),\n    state('hint-to-asc, active-to-asc, asc',\n        style({transform: 'translateY(25%)'})),\n  ]),\n\n  /** Necessary trigger that calls animate on children animations. */\n  allowChildren: trigger('allowChildren', [\n    transition('* <=> *', [\n      query('@*', animateChild(), {optional: true})\n    ])\n  ]),\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, SkipSelf, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n */\n@Injectable({providedIn: 'root'})\nexport class MatSortHeaderIntl {\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  readonly changes: Subject<void> = new Subject<void>();\n}\n\n/** @docs-private */\nexport function MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl: MatSortHeaderIntl) {\n  return parentIntl || new MatSortHeaderIntl();\n}\n\n/** @docs-private */\nexport const MAT_SORT_HEADER_INTL_PROVIDER = {\n  // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n  provide: MatSortHeaderIntl,\n  deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n  useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY\n};\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {merge, Subscription} from 'rxjs';\nimport {MatSort, MatSortable} from './sort';\nimport {matSortAnimations} from './sort-animations';\nimport {SortDirection} from './sort-direction';\nimport {getSortHeaderNotContainedWithinSortError} from './sort-errors';\nimport {MatSortHeaderIntl} from './sort-header-intl';\n\n\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {});\n\n/**\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\n * be fully opaque in the center.\n *\n * @docs-private\n */\nexport type ArrowViewState = SortDirection | 'hint' | 'active';\n\n/**\n * States describing the arrow's animated position (animating fromState to toState).\n * If the fromState is not defined, there will be no animated transition to the toState.\n * @docs-private\n */\nexport interface ArrowViewStateTransition {\n  fromState?: ArrowViewState;\n  toState?: ArrowViewState;\n}\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface MatSortHeaderColumnDef {\n  name: string;\n}\n\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\n@Component({\n  selector: '[mat-sort-header]',\n  exportAs: 'matSortHeader',\n  templateUrl: 'sort-header.html',\n  styleUrls: ['sort-header.css'],\n  host: {\n    'class': 'mat-sort-header',\n    '(click)': '_handleClick()',\n    '(keydown)': '_handleKeydown($event)',\n    '(mouseenter)': '_setIndicatorHintVisible(true)',\n    '(mouseleave)': '_setIndicatorHintVisible(false)',\n    '[attr.aria-sort]': '_getAriaSortAttribute()',\n    '[class.mat-sort-header-disabled]': '_isDisabled()',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  animations: [\n    matSortAnimations.indicator,\n    matSortAnimations.leftPointer,\n    matSortAnimations.rightPointer,\n    matSortAnimations.arrowOpacity,\n    matSortAnimations.arrowPosition,\n    matSortAnimations.allowChildren,\n  ]\n})\nexport class MatSortHeader extends _MatSortHeaderBase\n    implements CanDisable, MatSortable, OnDestroy, OnInit, AfterViewInit {\n  private _rerenderSubscription: Subscription;\n\n  /**\n   * The element with role=\"button\" inside this component's view. We need this\n   * in order to apply a description with AriaDescriber.\n   */\n  private _sortButton: HTMLElement;\n\n  /**\n   * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n   * provide an affordance that the header is sortable by showing on focus and hover.\n   */\n  _showIndicatorHint: boolean = false;\n\n  /**\n   * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n   * position through the animation. If animations are currently disabled, the fromState is removed\n   * so that there is no animation displayed.\n   */\n  _viewState: ArrowViewStateTransition = { };\n\n  /** The direction the arrow should be facing according to the current state. */\n  _arrowDirection: SortDirection = '';\n\n  /**\n   * Whether the view state animation should show the transition between the `from` and `to` states.\n   */\n  _disableViewStateAnimation = false;\n\n  /**\n   * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n   * the column's name.\n   */\n  @Input('mat-sort-header') id: string;\n\n  /** Sets the position of the arrow that displays when sorted. */\n  @Input() arrowPosition: 'before' | 'after' = 'after';\n\n  /** Overrides the sort start value of the containing MatSort for this MatSortable. */\n  @Input() start: 'asc' | 'desc';\n\n  /**\n   * Description applied to MatSortHeader's button element with aria-describedby. This text should\n   * describe the action that will occur when the user clicks the sort header.\n   */\n  @Input()\n  get sortActionDescription(): string {\n    return this._sortActionDescription;\n  }\n  set sortActionDescription(value: string) {\n    this._updateSortActionDescription(value);\n  }\n  // Default the action description to \"Sort\" because it's better than nothing.\n  // Without a description, the button's label comes from the sort header text content,\n  // which doesn't give any indication that it performs a sorting operation.\n  private _sortActionDescription: string = 'Sort';\n\n  /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n  @Input()\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  constructor(\n              /**\n               * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n               * @breaking-change 13.0.0\n               */\n              public _intl: MatSortHeaderIntl,\n              private _changeDetectorRef: ChangeDetectorRef,\n              // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n              // tslint:disable-next-line: lightweight-tokens\n              @Optional() public _sort: MatSort,\n              @Inject('MAT_SORT_HEADER_COLUMN_DEF') @Optional()\n                  public _columnDef: MatSortHeaderColumnDef,\n              private _focusMonitor: FocusMonitor,\n              private _elementRef: ElementRef<HTMLElement>,\n              /** @breaking-change 14.0.0 _ariaDescriber will be required. */\n              @Inject(AriaDescriber) @Optional() private _ariaDescriber?: AriaDescriber | null) {\n    // Note that we use a string token for the `_columnDef`, because the value is provided both by\n    // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n    // and we want to avoid having the sort header depending on the CDK table because\n    // of this single reference.\n    super();\n\n    if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortHeaderNotContainedWithinSortError();\n    }\n\n    this._handleStateChanges();\n  }\n\n  ngOnInit() {\n    if (!this.id && this._columnDef) {\n      this.id = this._columnDef.name;\n    }\n\n    // Initialize the direction of the arrow and set the view state to be immediately that state.\n    this._updateArrowDirection();\n    this._setAnimationTransitionState(\n        {toState: this._isSorted() ? 'active' : this._arrowDirection});\n\n    this._sort.register(this);\n\n    this._sortButton = this._elementRef.nativeElement.querySelector('[role=\"button\"]')!;\n    this._updateSortActionDescription(this._sortActionDescription);\n  }\n\n  ngAfterViewInit() {\n    // We use the focus monitor because we also want to style\n    // things differently based on the focus origin.\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n      const newState = !!origin;\n      if (newState !== this._showIndicatorHint) {\n        this._setIndicatorHintVisible(newState);\n        this._changeDetectorRef.markForCheck();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._sort.deregister(this);\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /**\n   * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n   * user showing what the active sort will become. If set to false, the arrow will fade away.\n   */\n  _setIndicatorHintVisible(visible: boolean) {\n    // No-op if the sort header is disabled - should not make the hint visible.\n    if (this._isDisabled() && visible) { return; }\n\n    this._showIndicatorHint = visible;\n\n    if (!this._isSorted()) {\n      this._updateArrowDirection();\n      if (this._showIndicatorHint) {\n        this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'hint'});\n      } else {\n        this._setAnimationTransitionState({fromState: 'hint', toState: this._arrowDirection});\n      }\n    }\n  }\n\n  /**\n   * Sets the animation transition view state for the arrow's position and opacity. If the\n   * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n   * no animation appears.\n   */\n  _setAnimationTransitionState(viewState: ArrowViewStateTransition) {\n    this._viewState = viewState || { };\n\n    // If the animation for arrow position state (opacity/translation) should be disabled,\n    // remove the fromState so that it jumps right to the toState.\n    if (this._disableViewStateAnimation) {\n      this._viewState = {toState: viewState.toState};\n    }\n  }\n\n  /** Triggers the sort on this sort header and removes the indicator hint. */\n  _toggleOnInteraction() {\n    this._sort.sort(this);\n\n    // Do not show the animation if the header was already shown in the right position.\n    if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n      this._disableViewStateAnimation = true;\n    }\n  }\n\n  _handleClick() {\n    if (!this._isDisabled()) {\n      this._sort.sort(this);\n    }\n  }\n\n  _handleKeydown(event: KeyboardEvent) {\n    if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n      event.preventDefault();\n      this._toggleOnInteraction();\n    }\n  }\n\n  /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n  _isSorted() {\n    return this._sort.active == this.id &&\n        (this._sort.direction === 'asc' || this._sort.direction === 'desc');\n  }\n\n  /** Returns the animation state for the arrow direction (indicator and pointers). */\n  _getArrowDirectionState() {\n    return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n  }\n\n  /** Returns the arrow position state (opacity, translation). */\n  _getArrowViewState() {\n    const fromState = this._viewState.fromState;\n    return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n  }\n\n  /**\n   * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n   * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n   * active sorted direction. The reason this is updated through a function is because the direction\n   * should only be changed at specific times - when deactivated but the hint is displayed and when\n   * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n   * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n   * preserving its direction, even though the next sort direction is actually different and should\n   * only be changed once the arrow displays again (hint or activation).\n   */\n  _updateArrowDirection() {\n    this._arrowDirection = this._isSorted() ?\n        this._sort.direction :\n        (this.start || this._sort.start);\n  }\n\n  _isDisabled() {\n    return this._sort.disabled || this.disabled;\n  }\n\n  /**\n   * Gets the aria-sort attribute that should be applied to this sort header. If this header\n   * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n   * says that the aria-sort property should only be present on one header at a time, so removing\n   * ensures this is true.\n   */\n  _getAriaSortAttribute() {\n    if (!this._isSorted()) {\n      return 'none';\n    }\n\n    return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n  }\n\n  /** Whether the arrow inside the sort header should be rendered. */\n  _renderArrow() {\n    return !this._isDisabled() || this._isSorted();\n  }\n\n  private _updateSortActionDescription(newDescription: string) {\n    // We use AriaDescriber for the sort button instead of setting an `aria-label` because some\n    // screen readers (notably VoiceOver) will read both the column header *and* the button's label\n    // for every *cell* in the table, creating a lot of unnecessary noise.\n\n    // If _sortButton is undefined, the component hasn't been initialized yet so there's\n    // nothing to update in the DOM.\n    if (this._sortButton) {\n      // removeDescription will no-op if there is no existing message.\n      // TODO(jelbourn): remove optional chaining when AriaDescriber is required.\n      this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n      this._ariaDescriber?.describe(this._sortButton, newDescription);\n    }\n\n    this._sortActionDescription = newDescription;\n  }\n\n  /** Handles changes in the sorting state. */\n  private _handleStateChanges() {\n    this._rerenderSubscription =\n      merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n        if (this._isSorted()) {\n          this._updateArrowDirection();\n\n          // Do not show the animation if the header was already shown in the right position.\n          if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n            this._disableViewStateAnimation = true;\n          }\n\n          this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'active'});\n          this._showIndicatorHint = false;\n        }\n\n        // If this header was recently active and now no longer sorted, animate away the arrow.\n        if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n          this._disableViewStateAnimation = false;\n          this._setAnimationTransitionState({fromState: 'active', toState: this._arrowDirection});\n        }\n\n        this._changeDetectorRef.markForCheck();\n      });\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatSortHeader} from './sort-header';\nimport {MatSort} from './sort';\nimport {MAT_SORT_HEADER_INTL_PROVIDER} from './sort-header-intl';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\n\n\n@NgModule({\n  imports: [CommonModule, MatCommonModule],\n  exports: [MatSort, MatSortHeader],\n  declarations: [MatSort, MatSortHeader],\n  providers: [MAT_SORT_HEADER_INTL_PROVIDER]\n})\nexport class MatSortModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sort-module';\nexport * from './sort-direction';\nexport * from './sort-header';\nexport * from './sort-header-intl';\nexport * from './sort';\nexport * from './sort-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["InjectionToken","mixinInitialized","mixinDisabled","Subject","EventEmitter","coerceBooleanProperty","Directive","Optional","Inject","Input","Output","AnimationDurations","AnimationCurves","trigger","state","style","transition","animate","keyframes","query","animateChild","Injectable","SkipSelf","SPACE","ENTER","merge","Component","ViewEncapsulation","ChangeDetectionStrategy","ChangeDetectorRef","FocusMonitor","ElementRef","AriaDescriber","NgModule","CommonModule","MatCommonModule"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/core/index.metadata.json
===================================================================
--- trip-planner-front/node_modules/@angular/material/core/index.metadata.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/core/index.metadata.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"__symbolic":"module","version":4,"metadata":{"VERSION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Version","line":11,"character":27},"arguments":["12.2.9"]},"AnimationCurves":{"__symbolic":"class","members":{},"statics":{"STANDARD_CURVE":"cubic-bezier(0.4,0.0,0.2,1)","DECELERATION_CURVE":"cubic-bezier(0.0,0.0,0.2,1)","ACCELERATION_CURVE":"cubic-bezier(0.4,0.0,1,1)","SHARP_CURVE":"cubic-bezier(0.4,0.0,0.6,1)"}},"AnimationDurations":{"__symbolic":"class","members":{},"statics":{"COMPLEX":"375ms","ENTERING":"225ms","EXITING":"195ms"}},"ɵangular_material_src_material_core_core_a":{"__symbolic":"function","parameters":[],"value":true},"MatCommonModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":51,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/bidi","name":"BidiModule","line":52,"character":12}],"exports":[{"__symbolic":"reference","module":"@angular/cdk/bidi","name":"BidiModule","line":53,"character":12}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":67,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":67,"character":19},"arguments":[{"__symbolic":"reference","name":"MATERIAL_SANITY_CHECKS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":68,"character":7},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":68,"character":14}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"HighContrastModeDetector","line":66,"character":32},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}],"_checkIsEnabled":[{"__symbolic":"method"}],"_checkDoctypeIsDefined":[{"__symbolic":"method"}],"_checkThemeIsPresent":[{"__symbolic":"method"}],"_checkCdkVersionMatch":[{"__symbolic":"method"}]}},"MATERIAL_SANITY_CHECKS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":27,"character":42},"arguments":["mat-sanity-checks",{"providedIn":"root","factory":{"__symbolic":"reference","name":"ɵangular_material_src_material_core_core_a"}}]},"SanityChecks":{"__symbolic":"interface"},"GranularSanityChecks":{"__symbolic":"interface"},"CanDisable":{"__symbolic":"interface"},"CanDisableCtor":{"__symbolic":"interface"},"mixinDisabled":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"CanColor":{"__symbolic":"interface"},"CanColorCtor":{"__symbolic":"interface"},"mixinColor":{"__symbolic":"function","parameters":["base","defaultColor"],"value":{"__symbolic":"class"}},"ThemePalette":{"__symbolic":"interface"},"CanDisableRipple":{"__symbolic":"interface"},"CanDisableRippleCtor":{"__symbolic":"interface"},"mixinDisableRipple":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"HasTabIndex":{"__symbolic":"interface"},"HasTabIndexCtor":{"__symbolic":"interface"},"mixinTabIndex":{"__symbolic":"function","parameters":["base","defaultTabIndex"],"defaults":[null,0],"value":{"__symbolic":"class"}},"CanUpdateErrorState":{"__symbolic":"interface"},"CanUpdateErrorStateCtor":{"__symbolic":"interface"},"mixinErrorState":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"HasInitialized":{"__symbolic":"interface"},"HasInitializedCtor":{"__symbolic":"interface"},"mixinInitialized":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"NativeDateModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":21,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/platform","name":"PlatformModule","line":22,"character":12}],"providers":[{"provide":{"__symbolic":"reference","name":"DateAdapter"},"useClass":{"__symbolic":"reference","name":"NativeDateAdapter"}}]}]}],"members":{}},"MatNativeDateModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":30,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"NativeDateModule"}],"providers":[{"provide":{"__symbolic":"reference","name":"MAT_DATE_FORMATS"},"useValue":{"__symbolic":"reference","name":"MAT_NATIVE_DATE_FORMATS"}}]}]}],"members":{}},"MAT_DATE_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":12,"character":35},"arguments":["MAT_DATE_LOCALE",{"providedIn":"root","factory":{"__symbolic":"reference","name":"MAT_DATE_LOCALE_FACTORY"}}]},"MAT_DATE_LOCALE_FACTORY":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"inject","line":19,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":19,"character":16}]}},"DateAdapter":{"__symbolic":"class","arity":1,"members":{"getYear":[{"__symbolic":"method"}],"getMonth":[{"__symbolic":"method"}],"getDate":[{"__symbolic":"method"}],"getDayOfWeek":[{"__symbolic":"method"}],"getMonthNames":[{"__symbolic":"method"}],"getDateNames":[{"__symbolic":"method"}],"getDayOfWeekNames":[{"__symbolic":"method"}],"getYearName":[{"__symbolic":"method"}],"getFirstDayOfWeek":[{"__symbolic":"method"}],"getNumDaysInMonth":[{"__symbolic":"method"}],"clone":[{"__symbolic":"method"}],"createDate":[{"__symbolic":"method"}],"today":[{"__symbolic":"method"}],"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}],"addCalendarYears":[{"__symbolic":"method"}],"addCalendarMonths":[{"__symbolic":"method"}],"addCalendarDays":[{"__symbolic":"method"}],"toIso8601":[{"__symbolic":"method"}],"isDateInstance":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"invalid":[{"__symbolic":"method"}],"getValidDateOrNull":[{"__symbolic":"method"}],"deserialize":[{"__symbolic":"method"}],"setLocale":[{"__symbolic":"method"}],"compareDate":[{"__symbolic":"method"}],"sameDate":[{"__symbolic":"method"}],"clampDate":[{"__symbolic":"method"}]}},"MatDateFormats":{"__symbolic":"interface"},"MAT_DATE_FORMATS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":36},"arguments":["mat-date-formats"]},"NativeDateAdapter":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"DateAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":69,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":87,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":87,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_DATE_LOCALE"}]}],null],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":87,"character":84}]}],"getYear":[{"__symbolic":"method"}],"getMonth":[{"__symbolic":"method"}],"getDate":[{"__symbolic":"method"}],"getDayOfWeek":[{"__symbolic":"method"}],"getMonthNames":[{"__symbolic":"method"}],"getDateNames":[{"__symbolic":"method"}],"getDayOfWeekNames":[{"__symbolic":"method"}],"getYearName":[{"__symbolic":"method"}],"getFirstDayOfWeek":[{"__symbolic":"method"}],"getNumDaysInMonth":[{"__symbolic":"method"}],"clone":[{"__symbolic":"method"}],"createDate":[{"__symbolic":"method"}],"today":[{"__symbolic":"method"}],"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}],"addCalendarYears":[{"__symbolic":"method"}],"addCalendarMonths":[{"__symbolic":"method"}],"addCalendarDays":[{"__symbolic":"method"}],"toIso8601":[{"__symbolic":"method"}],"deserialize":[{"__symbolic":"method"}],"isDateInstance":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"invalid":[{"__symbolic":"method"}],"_createDateWithOverflow":[{"__symbolic":"method"}],"_2digit":[{"__symbolic":"method"}],"_stripDirectionalityCharacters":[{"__symbolic":"method"}],"_format":[{"__symbolic":"method"}]}},"MAT_NATIVE_DATE_FORMATS":{"parse":{"dateInput":null},"display":{"dateInput":{"year":"numeric","month":"numeric","day":"numeric"},"monthYearLabel":{"year":"numeric","month":"short"},"dateA11yLabel":{"year":"numeric","month":"long","day":"numeric"},"monthYearA11yLabel":{"year":"numeric","month":"long"}}},"ShowOnDirtyErrorStateMatcher":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1}}],"members":{"isErrorState":[{"__symbolic":"method"}]}},"ErrorStateMatcher":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"isErrorState":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"MatLine":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":23,"character":1},"arguments":[{"selector":"[mat-line], [matLine]","host":{"class":"mat-line","$quoted$":["class"]}}]}],"members":{}},"setLines":{"__symbolic":"function"},"MatLineModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":56,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"}],"exports":[{"__symbolic":"reference","name":"MatLine"},{"__symbolic":"reference","name":"MatCommonModule"}],"declarations":[{"__symbolic":"reference","name":"MatLine"}]}]}],"members":{}},"MatOptionModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatRippleModule"},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":18,"character":29},{"__symbolic":"reference","name":"MatCommonModule"},{"__symbolic":"reference","name":"MatPseudoCheckboxModule"}],"exports":[{"__symbolic":"reference","name":"MatOption"},{"__symbolic":"reference","name":"MatOptgroup"}],"declarations":[{"__symbolic":"reference","name":"MatOption"},{"__symbolic":"reference","name":"MatOptgroup"}]}]}],"members":{}},"MatOptionSelectionChange":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"_MatOptionBase"},null]}]}},"_MatOptionBase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":46,"character":1}}],"members":{"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"onSelectionChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":75,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":260,"character":24,"context":{"typeName":"HTMLElement"},"module":"./option/option"}]},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":82,"character":32},{"__symbolic":"reference","name":"MatOptionParentComponent"},{"__symbolic":"reference","name":"_MatOptgroupBase"}]}],"select":[{"__symbolic":"method"}],"deselect":[{"__symbolic":"method"}],"focus":[{"__symbolic":"method"}],"setActiveStyles":[{"__symbolic":"method"}],"setInactiveStyles":[{"__symbolic":"method"}],"getLabel":[{"__symbolic":"method"}],"_handleKeydown":[{"__symbolic":"method"}],"_selectViaInteraction":[{"__symbolic":"method"}],"_getAriaSelected":[{"__symbolic":"method"}],"_getTabIndex":[{"__symbolic":"method"}],"_getHostElement":[{"__symbolic":"method"}],"ngAfterViewChecked":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_emitSelectionChangeEvent":[{"__symbolic":"method"}]}},"MatOption":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"_MatOptionBase"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":236,"character":1},"arguments":[{"selector":"mat-option","exportAs":"matOption","host":{"role":"option","[attr.tabindex]":"_getTabIndex()","[class.mat-selected]":"selected","[class.mat-option-multiple]":"multiple","[class.mat-active]":"active","[id]":"id","[attr.aria-selected]":"_getAriaSelected()","[attr.aria-disabled]":"disabled.toString()","[class.mat-option-disabled]":"disabled","(click)":"_selectViaInteraction()","(keydown)":"_handleKeydown($event)","class":"mat-option mat-focus-indicator","$quoted$":["role","[attr.tabindex]","[class.mat-selected]","[class.mat-option-multiple]","[class.mat-active]","[id]","[attr.aria-selected]","[attr.aria-disabled]","[class.mat-option-disabled]","(click)","(keydown)","class"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":255,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":256,"character":19},"member":"OnPush"},"template":"<mat-pseudo-checkbox *ngIf=\"multiple\" class=\"mat-option-pseudo-checkbox\"\n    [state]=\"selected ? 'checked' : 'unchecked'\" [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n<span class=\"mat-option-text\"><ng-content></ng-content></span>\n\n<!-- See a11y notes inside optgroup.ts for context behind this element. -->\n<span class=\"cdk-visually-hidden\" *ngIf=\"group && group._inert\">({{ group.label }})</span>\n\n<div class=\"mat-option-ripple\" mat-ripple\n     [matRippleTrigger]=\"_getHostElement()\"\n     [matRippleDisabled]=\"disabled || disableRipple\">\n</div>\n","styles":[".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:none;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.cdk-high-contrast-active .mat-option{margin:0 1px}.cdk-high-contrast-active .mat-option.mat-active{border:solid 1px currentColor;margin:0}.cdk-high-contrast-active .mat-option[aria-disabled=true]{opacity:.5}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option .mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":262,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":262,"character":17},"arguments":[{"__symbolic":"reference","name":"MAT_OPTION_PARENT_COMPONENT"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":263,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":263,"character":17},"arguments":[{"__symbolic":"reference","name":"MAT_OPTGROUP"}]}]],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":260,"character":24,"context":{"typeName":"HTMLElement"},"module":"./option/option"}]},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":82,"character":32},{"__symbolic":"reference","name":"MatOptionParentComponent"},{"__symbolic":"reference","name":"MatOptgroup"}]}]}},"_countGroupLabelsBeforeOption":{"__symbolic":"function"},"_getOptionScrollPosition":{"__symbolic":"function"},"_MatOptgroupBase":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":48,"character":38,"module":"./option/optgroup"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":47,"character":1}}],"members":{"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":58,"character":15},"arguments":[{"__symbolic":"reference","name":"MAT_OPTION_PARENT_COMPONENT"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":58,"character":52}}]],"parameters":[{"__symbolic":"reference","name":"MatOptionParentComponent"}]}]}},"MAT_OPTGROUP":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":71,"character":32},"arguments":["MatOptgroup"]},"MatOptgroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"_MatOptgroupBase"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":76,"character":1},"arguments":[{"selector":"mat-optgroup","exportAs":"matOptgroup","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":80,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":81,"character":19},"member":"OnPush"},"inputs":["disabled"],"host":{"class":"mat-optgroup","[attr.role]":"_inert ? null : \"group\"","[attr.aria-disabled]":"_inert ? null : disabled.toString()","[attr.aria-labelledby]":"_inert ? null : _labelId","[class.mat-optgroup-disabled]":"disabled","$quoted$":["class","[attr.role]","[attr.aria-disabled]","[attr.aria-labelledby]","[class.mat-optgroup-disabled]"]},"providers":[{"provide":{"__symbolic":"reference","name":"MAT_OPTGROUP"},"useExisting":{"__symbolic":"reference","name":"MatOptgroup"}}],"template":"<span class=\"mat-optgroup-label\" aria-hidden=\"true\" [id]=\"_labelId\">{{ label }} <ng-content></ng-content></span>\n<ng-content select=\"mat-option, ng-container\"></ng-content>\n","styles":[".mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px;vertical-align:middle}.mat-optgroup-label .mat-icon svg{vertical-align:top}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}\n"]}]}],"members":{}},"MatOptionParentComponent":{"__symbolic":"interface"},"MAT_OPTION_PARENT_COMPONENT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":8},"arguments":["MAT_OPTION_PARENT_COMPONENT"]},"MatRippleModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"PlatformModule","line":18,"character":29}],"exports":[{"__symbolic":"reference","name":"MatRipple"},{"__symbolic":"reference","name":"MatCommonModule"}],"declarations":[{"__symbolic":"reference","name":"MatRipple"}]}]}],"members":{}},"RippleGlobalOptions":{"__symbolic":"interface"},"MAT_RIPPLE_GLOBAL_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":48,"character":8},"arguments":["mat-ripple-global-options"]},"MatRipple":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":50,"character":1},"arguments":[{"selector":"[mat-ripple], [matRipple]","exportAs":"matRipple","host":{"class":"mat-ripple","[class.mat-ripple-unbounded]":"unbounded","$quoted$":["class","[class.mat-ripple-unbounded]"]}}]}],"members":{"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3},"arguments":["matRippleColor"]}]}],"unbounded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3},"arguments":["matRippleUnbounded"]}]}],"centered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3},"arguments":["matRippleCentered"]}]}],"radius":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3},"arguments":["matRippleRadius"]}]}],"animation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3},"arguments":["matRippleAnimation"]}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3},"arguments":["matRippleDisabled"]}]}],"trigger":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3},"arguments":["matRippleTrigger"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":125,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":125,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_RIPPLE_GLOBAL_OPTIONS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":126,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":126,"character":27},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":126,"character":34}]}]],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":122,"character":46,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple"}]},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":123,"character":22},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":124,"character":24},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"string"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"fadeOutAll":[{"__symbolic":"method"}],"fadeOutAllNonPersistent":[{"__symbolic":"method"}],"_setupTriggerEventsIfEnabled":[{"__symbolic":"method"}],"launch":[{"__symbolic":"method"},{"__symbolic":"method"},{"__symbolic":"method"}]}},"RippleState":{"FADING_IN":0,"VISIBLE":1,"FADING_OUT":2,"HIDDEN":3},"RippleConfig":{"__symbolic":"interface"},"RippleAnimationConfig":{"__symbolic":"interface"},"RippleRef":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Expression form not supported","line":42,"character":23,"module":"./ripple/ripple-ref"},{"__symbolic":"error","message":"Could not resolve type","line":44,"character":20,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple-ref"},{"__symbolic":"error","message":"Could not resolve type","line":46,"character":19,"context":{"typeName":"RippleConfig"},"module":"./ripple/ripple-ref"}]}],"fadeOut":[{"__symbolic":"method"}]}},"RippleTarget":{"__symbolic":"interface"},"defaultRippleAnimationConfig":{"enterDuration":225,"exitDuration":150},"RippleRenderer":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":87,"character":31},{"__symbolic":"error","message":"Could not resolve type","line":88,"character":35,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple-renderer"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":89,"character":24}]}],"fadeInRipple":[{"__symbolic":"method"}],"fadeOutRipple":[{"__symbolic":"method"}],"fadeOutAll":[{"__symbolic":"method"}],"fadeOutAllNonPersistent":[{"__symbolic":"method"}],"setupTriggerEvents":[{"__symbolic":"method"}],"handleEvent":[{"__symbolic":"method"}],"_onMousedown":[{"__symbolic":"method"}],"_onTouchStart":[{"__symbolic":"method"}],"_onPointerUp":[{"__symbolic":"method"}],"_runTimeoutOutsideZone":[{"__symbolic":"method"}],"_registerEvents":[{"__symbolic":"method"}],"_removeTriggerEvents":[{"__symbolic":"method"}]}},"MatPseudoCheckboxModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":13,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"}],"exports":[{"__symbolic":"reference","name":"MatPseudoCheckbox"}],"declarations":[{"__symbolic":"reference","name":"MatPseudoCheckbox"}]}]}],"members":{}},"MatPseudoCheckboxState":{"__symbolic":"interface"},"MatPseudoCheckbox":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":37,"character":1},"arguments":[{"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":38,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":39,"character":19},"member":"OnPush"},"selector":"mat-pseudo-checkbox","template":"","host":{"class":"mat-pseudo-checkbox","[class.mat-pseudo-checkbox-indeterminate]":"state === \"indeterminate\"","[class.mat-pseudo-checkbox-checked]":"state === \"checked\"","[class.mat-pseudo-checkbox-disabled]":"disabled","[class._mat-animation-noopable]":"_animationMode === \"NoopAnimations\"","$quoted$":["class","[class.mat-pseudo-checkbox-indeterminate]","[class.mat-pseudo-checkbox-checked]","[class.mat-pseudo-checkbox-disabled]","[class._mat-animation-noopable]"]},"styles":[".mat-pseudo-checkbox{width:16px;height:16px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:5px;left:1px;width:10px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{top:2.4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}\n"]}]}],"members":{"state":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":58,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":58,"character":27},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":58,"character":34}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}]}}},"origins":{"VERSION":"./version","AnimationCurves":"./animation/animation","AnimationDurations":"./animation/animation","ɵangular_material_src_material_core_core_a":"./common-behaviors/common-module","MatCommonModule":"./common-behaviors/common-module","MATERIAL_SANITY_CHECKS":"./common-behaviors/common-module","SanityChecks":"./common-behaviors/common-module","GranularSanityChecks":"./common-behaviors/common-module","CanDisable":"./common-behaviors/disabled","CanDisableCtor":"./common-behaviors/disabled","mixinDisabled":"./common-behaviors/disabled","CanColor":"./common-behaviors/color","CanColorCtor":"./common-behaviors/color","mixinColor":"./common-behaviors/color","ThemePalette":"./common-behaviors/color","CanDisableRipple":"./common-behaviors/disable-ripple","CanDisableRippleCtor":"./common-behaviors/disable-ripple","mixinDisableRipple":"./common-behaviors/disable-ripple","HasTabIndex":"./common-behaviors/tabindex","HasTabIndexCtor":"./common-behaviors/tabindex","mixinTabIndex":"./common-behaviors/tabindex","CanUpdateErrorState":"./common-behaviors/error-state","CanUpdateErrorStateCtor":"./common-behaviors/error-state","mixinErrorState":"./common-behaviors/error-state","HasInitialized":"./common-behaviors/initialized","HasInitializedCtor":"./common-behaviors/initialized","mixinInitialized":"./common-behaviors/initialized","NativeDateModule":"./datetime/index","MatNativeDateModule":"./datetime/index","MAT_DATE_LOCALE":"./datetime/date-adapter","MAT_DATE_LOCALE_FACTORY":"./datetime/date-adapter","DateAdapter":"./datetime/date-adapter","MatDateFormats":"./datetime/date-formats","MAT_DATE_FORMATS":"./datetime/date-formats","NativeDateAdapter":"./datetime/native-date-adapter","MAT_NATIVE_DATE_FORMATS":"./datetime/native-date-formats","ShowOnDirtyErrorStateMatcher":"./error/error-options","ErrorStateMatcher":"./error/error-options","MatLine":"./line/line","setLines":"./line/line","MatLineModule":"./line/line","MatOptionModule":"./option/index","MatOptionSelectionChange":"./option/option","_MatOptionBase":"./option/option","MatOption":"./option/option","_countGroupLabelsBeforeOption":"./option/option","_getOptionScrollPosition":"./option/option","_MatOptgroupBase":"./option/optgroup","MAT_OPTGROUP":"./option/optgroup","MatOptgroup":"./option/optgroup","MatOptionParentComponent":"./option/option-parent","MAT_OPTION_PARENT_COMPONENT":"./option/option-parent","MatRippleModule":"./ripple/index","RippleGlobalOptions":"./ripple/ripple","MAT_RIPPLE_GLOBAL_OPTIONS":"./ripple/ripple","MatRipple":"./ripple/ripple","RippleState":"./ripple/ripple-ref","RippleConfig":"./ripple/ripple-ref","RippleAnimationConfig":"./ripple/ripple-ref","RippleRef":"./ripple/ripple-ref","RippleTarget":"./ripple/ripple-renderer","defaultRippleAnimationConfig":"./ripple/ripple-renderer","RippleRenderer":"./ripple/ripple-renderer","MatPseudoCheckboxModule":"./selection/index","MatPseudoCheckboxState":"./selection/pseudo-checkbox/pseudo-checkbox","MatPseudoCheckbox":"./selection/pseudo-checkbox/pseudo-checkbox"},"importAs":"@angular/material/core"}
+{"__symbolic":"module","version":4,"metadata":{"VERSION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Version","line":11,"character":27},"arguments":["12.2.10"]},"AnimationCurves":{"__symbolic":"class","members":{},"statics":{"STANDARD_CURVE":"cubic-bezier(0.4,0.0,0.2,1)","DECELERATION_CURVE":"cubic-bezier(0.0,0.0,0.2,1)","ACCELERATION_CURVE":"cubic-bezier(0.4,0.0,1,1)","SHARP_CURVE":"cubic-bezier(0.4,0.0,0.6,1)"}},"AnimationDurations":{"__symbolic":"class","members":{},"statics":{"COMPLEX":"375ms","ENTERING":"225ms","EXITING":"195ms"}},"ɵangular_material_src_material_core_core_a":{"__symbolic":"function","parameters":[],"value":true},"MatCommonModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":51,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/bidi","name":"BidiModule","line":52,"character":12}],"exports":[{"__symbolic":"reference","module":"@angular/cdk/bidi","name":"BidiModule","line":53,"character":12}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":67,"character":7}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":67,"character":19},"arguments":[{"__symbolic":"reference","name":"MATERIAL_SANITY_CHECKS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":68,"character":7},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":68,"character":14}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"HighContrastModeDetector","line":66,"character":32},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}],"_checkIsEnabled":[{"__symbolic":"method"}],"_checkDoctypeIsDefined":[{"__symbolic":"method"}],"_checkThemeIsPresent":[{"__symbolic":"method"}],"_checkCdkVersionMatch":[{"__symbolic":"method"}]}},"MATERIAL_SANITY_CHECKS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":27,"character":42},"arguments":["mat-sanity-checks",{"providedIn":"root","factory":{"__symbolic":"reference","name":"ɵangular_material_src_material_core_core_a"}}]},"SanityChecks":{"__symbolic":"interface"},"GranularSanityChecks":{"__symbolic":"interface"},"CanDisable":{"__symbolic":"interface"},"CanDisableCtor":{"__symbolic":"interface"},"mixinDisabled":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"CanColor":{"__symbolic":"interface"},"CanColorCtor":{"__symbolic":"interface"},"mixinColor":{"__symbolic":"function","parameters":["base","defaultColor"],"value":{"__symbolic":"class"}},"ThemePalette":{"__symbolic":"interface"},"CanDisableRipple":{"__symbolic":"interface"},"CanDisableRippleCtor":{"__symbolic":"interface"},"mixinDisableRipple":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"HasTabIndex":{"__symbolic":"interface"},"HasTabIndexCtor":{"__symbolic":"interface"},"mixinTabIndex":{"__symbolic":"function","parameters":["base","defaultTabIndex"],"defaults":[null,0],"value":{"__symbolic":"class"}},"CanUpdateErrorState":{"__symbolic":"interface"},"CanUpdateErrorStateCtor":{"__symbolic":"interface"},"mixinErrorState":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"HasInitialized":{"__symbolic":"interface"},"HasInitializedCtor":{"__symbolic":"interface"},"mixinInitialized":{"__symbolic":"function","parameters":["base"],"value":{"__symbolic":"class"}},"NativeDateModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":21,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/cdk/platform","name":"PlatformModule","line":22,"character":12}],"providers":[{"provide":{"__symbolic":"reference","name":"DateAdapter"},"useClass":{"__symbolic":"reference","name":"NativeDateAdapter"}}]}]}],"members":{}},"MatNativeDateModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":30,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"NativeDateModule"}],"providers":[{"provide":{"__symbolic":"reference","name":"MAT_DATE_FORMATS"},"useValue":{"__symbolic":"reference","name":"MAT_NATIVE_DATE_FORMATS"}}]}]}],"members":{}},"MAT_DATE_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":12,"character":35},"arguments":["MAT_DATE_LOCALE",{"providedIn":"root","factory":{"__symbolic":"reference","name":"MAT_DATE_LOCALE_FACTORY"}}]},"MAT_DATE_LOCALE_FACTORY":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"inject","line":19,"character":9},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"LOCALE_ID","line":19,"character":16}]}},"DateAdapter":{"__symbolic":"class","arity":1,"members":{"getYear":[{"__symbolic":"method"}],"getMonth":[{"__symbolic":"method"}],"getDate":[{"__symbolic":"method"}],"getDayOfWeek":[{"__symbolic":"method"}],"getMonthNames":[{"__symbolic":"method"}],"getDateNames":[{"__symbolic":"method"}],"getDayOfWeekNames":[{"__symbolic":"method"}],"getYearName":[{"__symbolic":"method"}],"getFirstDayOfWeek":[{"__symbolic":"method"}],"getNumDaysInMonth":[{"__symbolic":"method"}],"clone":[{"__symbolic":"method"}],"createDate":[{"__symbolic":"method"}],"today":[{"__symbolic":"method"}],"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}],"addCalendarYears":[{"__symbolic":"method"}],"addCalendarMonths":[{"__symbolic":"method"}],"addCalendarDays":[{"__symbolic":"method"}],"toIso8601":[{"__symbolic":"method"}],"isDateInstance":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"invalid":[{"__symbolic":"method"}],"getValidDateOrNull":[{"__symbolic":"method"}],"deserialize":[{"__symbolic":"method"}],"setLocale":[{"__symbolic":"method"}],"compareDate":[{"__symbolic":"method"}],"sameDate":[{"__symbolic":"method"}],"clampDate":[{"__symbolic":"method"}]}},"MatDateFormats":{"__symbolic":"interface"},"MAT_DATE_FORMATS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":36},"arguments":["mat-date-formats"]},"NativeDateAdapter":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"DateAdapter"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":69,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":87,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":87,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_DATE_LOCALE"}]}],null],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":87,"character":84}]}],"getYear":[{"__symbolic":"method"}],"getMonth":[{"__symbolic":"method"}],"getDate":[{"__symbolic":"method"}],"getDayOfWeek":[{"__symbolic":"method"}],"getMonthNames":[{"__symbolic":"method"}],"getDateNames":[{"__symbolic":"method"}],"getDayOfWeekNames":[{"__symbolic":"method"}],"getYearName":[{"__symbolic":"method"}],"getFirstDayOfWeek":[{"__symbolic":"method"}],"getNumDaysInMonth":[{"__symbolic":"method"}],"clone":[{"__symbolic":"method"}],"createDate":[{"__symbolic":"method"}],"today":[{"__symbolic":"method"}],"parse":[{"__symbolic":"method"}],"format":[{"__symbolic":"method"}],"addCalendarYears":[{"__symbolic":"method"}],"addCalendarMonths":[{"__symbolic":"method"}],"addCalendarDays":[{"__symbolic":"method"}],"toIso8601":[{"__symbolic":"method"}],"deserialize":[{"__symbolic":"method"}],"isDateInstance":[{"__symbolic":"method"}],"isValid":[{"__symbolic":"method"}],"invalid":[{"__symbolic":"method"}],"_createDateWithOverflow":[{"__symbolic":"method"}],"_2digit":[{"__symbolic":"method"}],"_stripDirectionalityCharacters":[{"__symbolic":"method"}],"_format":[{"__symbolic":"method"}]}},"MAT_NATIVE_DATE_FORMATS":{"parse":{"dateInput":null},"display":{"dateInput":{"year":"numeric","month":"numeric","day":"numeric"},"monthYearLabel":{"year":"numeric","month":"short"},"dateA11yLabel":{"year":"numeric","month":"long","day":"numeric"},"monthYearA11yLabel":{"year":"numeric","month":"long"}}},"ShowOnDirtyErrorStateMatcher":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":12,"character":1}}],"members":{"isErrorState":[{"__symbolic":"method"}]}},"ErrorStateMatcher":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"isErrorState":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"MatLine":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":23,"character":1},"arguments":[{"selector":"[mat-line], [matLine]","host":{"class":"mat-line","$quoted$":["class"]}}]}],"members":{}},"setLines":{"__symbolic":"function"},"MatLineModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":56,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"}],"exports":[{"__symbolic":"reference","name":"MatLine"},{"__symbolic":"reference","name":"MatCommonModule"}],"declarations":[{"__symbolic":"reference","name":"MatLine"}]}]}],"members":{}},"MatOptionModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatRippleModule"},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":18,"character":29},{"__symbolic":"reference","name":"MatCommonModule"},{"__symbolic":"reference","name":"MatPseudoCheckboxModule"}],"exports":[{"__symbolic":"reference","name":"MatOption"},{"__symbolic":"reference","name":"MatOptgroup"}],"declarations":[{"__symbolic":"reference","name":"MatOption"},{"__symbolic":"reference","name":"MatOptgroup"}]}]}],"members":{}},"MatOptionSelectionChange":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"_MatOptionBase"},null]}]}},"_MatOptionBase":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":46,"character":1}}],"members":{"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":63,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"onSelectionChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":75,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":260,"character":24,"context":{"typeName":"HTMLElement"},"module":"./option/option"}]},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":82,"character":32},{"__symbolic":"reference","name":"MatOptionParentComponent"},{"__symbolic":"reference","name":"_MatOptgroupBase"}]}],"select":[{"__symbolic":"method"}],"deselect":[{"__symbolic":"method"}],"focus":[{"__symbolic":"method"}],"setActiveStyles":[{"__symbolic":"method"}],"setInactiveStyles":[{"__symbolic":"method"}],"getLabel":[{"__symbolic":"method"}],"_handleKeydown":[{"__symbolic":"method"}],"_selectViaInteraction":[{"__symbolic":"method"}],"_getAriaSelected":[{"__symbolic":"method"}],"_getTabIndex":[{"__symbolic":"method"}],"_getHostElement":[{"__symbolic":"method"}],"ngAfterViewChecked":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_emitSelectionChangeEvent":[{"__symbolic":"method"}]}},"MatOption":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"_MatOptionBase"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":236,"character":1},"arguments":[{"selector":"mat-option","exportAs":"matOption","host":{"role":"option","[attr.tabindex]":"_getTabIndex()","[class.mat-selected]":"selected","[class.mat-option-multiple]":"multiple","[class.mat-active]":"active","[id]":"id","[attr.aria-selected]":"_getAriaSelected()","[attr.aria-disabled]":"disabled.toString()","[class.mat-option-disabled]":"disabled","(click)":"_selectViaInteraction()","(keydown)":"_handleKeydown($event)","class":"mat-option mat-focus-indicator","$quoted$":["role","[attr.tabindex]","[class.mat-selected]","[class.mat-option-multiple]","[class.mat-active]","[id]","[attr.aria-selected]","[attr.aria-disabled]","[class.mat-option-disabled]","(click)","(keydown)","class"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":255,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":256,"character":19},"member":"OnPush"},"template":"<mat-pseudo-checkbox *ngIf=\"multiple\" class=\"mat-option-pseudo-checkbox\"\n    [state]=\"selected ? 'checked' : 'unchecked'\" [disabled]=\"disabled\"></mat-pseudo-checkbox>\n\n<span class=\"mat-option-text\"><ng-content></ng-content></span>\n\n<!-- See a11y notes inside optgroup.ts for context behind this element. -->\n<span class=\"cdk-visually-hidden\" *ngIf=\"group && group._inert\">({{ group.label }})</span>\n\n<div class=\"mat-option-ripple\" mat-ripple\n     [matRippleTrigger]=\"_getHostElement()\"\n     [matRippleDisabled]=\"disabled || disableRipple\">\n</div>\n","styles":[".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:none;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}.cdk-high-contrast-active .mat-option{margin:0 1px}.cdk-high-contrast-active .mat-option.mat-active{border:solid 1px currentColor;margin:0}.cdk-high-contrast-active .mat-option[aria-disabled=true]{opacity:.5}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option .mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}\n"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":262,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":262,"character":17},"arguments":[{"__symbolic":"reference","name":"MAT_OPTION_PARENT_COMPONENT"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":263,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":263,"character":17},"arguments":[{"__symbolic":"reference","name":"MAT_OPTGROUP"}]}]],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":260,"character":24,"context":{"typeName":"HTMLElement"},"module":"./option/option"}]},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":82,"character":32},{"__symbolic":"reference","name":"MatOptionParentComponent"},{"__symbolic":"reference","name":"MatOptgroup"}]}]}},"_countGroupLabelsBeforeOption":{"__symbolic":"function"},"_getOptionScrollPosition":{"__symbolic":"function"},"_MatOptgroupBase":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":48,"character":38,"module":"./option/optgroup"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":47,"character":1}}],"members":{"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":58,"character":15},"arguments":[{"__symbolic":"reference","name":"MAT_OPTION_PARENT_COMPONENT"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":58,"character":52}}]],"parameters":[{"__symbolic":"reference","name":"MatOptionParentComponent"}]}]}},"MAT_OPTGROUP":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":71,"character":32},"arguments":["MatOptgroup"]},"MatOptgroup":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"_MatOptgroupBase"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":76,"character":1},"arguments":[{"selector":"mat-optgroup","exportAs":"matOptgroup","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":80,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":81,"character":19},"member":"OnPush"},"inputs":["disabled"],"host":{"class":"mat-optgroup","[attr.role]":"_inert ? null : \"group\"","[attr.aria-disabled]":"_inert ? null : disabled.toString()","[attr.aria-labelledby]":"_inert ? null : _labelId","[class.mat-optgroup-disabled]":"disabled","$quoted$":["class","[attr.role]","[attr.aria-disabled]","[attr.aria-labelledby]","[class.mat-optgroup-disabled]"]},"providers":[{"provide":{"__symbolic":"reference","name":"MAT_OPTGROUP"},"useExisting":{"__symbolic":"reference","name":"MatOptgroup"}}],"template":"<span class=\"mat-optgroup-label\" aria-hidden=\"true\" [id]=\"_labelId\">{{ label }} <ng-content></ng-content></span>\n<ng-content select=\"mat-option, ng-container\"></ng-content>\n","styles":[".mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px;vertical-align:middle}.mat-optgroup-label .mat-icon svg{vertical-align:top}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}\n"]}]}],"members":{}},"MatOptionParentComponent":{"__symbolic":"interface"},"MAT_OPTION_PARENT_COMPONENT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":8},"arguments":["MAT_OPTION_PARENT_COMPONENT"]},"MatRippleModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":17,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"PlatformModule","line":18,"character":29}],"exports":[{"__symbolic":"reference","name":"MatRipple"},{"__symbolic":"reference","name":"MatCommonModule"}],"declarations":[{"__symbolic":"reference","name":"MatRipple"}]}]}],"members":{}},"RippleGlobalOptions":{"__symbolic":"interface"},"MAT_RIPPLE_GLOBAL_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":48,"character":8},"arguments":["mat-ripple-global-options"]},"MatRipple":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":50,"character":1},"arguments":[{"selector":"[mat-ripple], [matRipple]","exportAs":"matRipple","host":{"class":"mat-ripple","[class.mat-ripple-unbounded]":"unbounded","$quoted$":["class","[class.mat-ripple-unbounded]"]}}]}],"members":{"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3},"arguments":["matRippleColor"]}]}],"unbounded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3},"arguments":["matRippleUnbounded"]}]}],"centered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3},"arguments":["matRippleCentered"]}]}],"radius":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3},"arguments":["matRippleRadius"]}]}],"animation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3},"arguments":["matRippleAnimation"]}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3},"arguments":["matRippleDisabled"]}]}],"trigger":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3},"arguments":["matRippleTrigger"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":125,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":125,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_RIPPLE_GLOBAL_OPTIONS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":126,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":126,"character":27},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":126,"character":34}]}]],"parameters":[{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":122,"character":46,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple"}]},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":123,"character":22},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":124,"character":24},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"string"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"fadeOutAll":[{"__symbolic":"method"}],"fadeOutAllNonPersistent":[{"__symbolic":"method"}],"_setupTriggerEventsIfEnabled":[{"__symbolic":"method"}],"launch":[{"__symbolic":"method"},{"__symbolic":"method"},{"__symbolic":"method"}]}},"RippleState":{"FADING_IN":0,"VISIBLE":1,"FADING_OUT":2,"HIDDEN":3},"RippleConfig":{"__symbolic":"interface"},"RippleAnimationConfig":{"__symbolic":"interface"},"RippleRef":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Expression form not supported","line":42,"character":23,"module":"./ripple/ripple-ref"},{"__symbolic":"error","message":"Could not resolve type","line":44,"character":20,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple-ref"},{"__symbolic":"error","message":"Could not resolve type","line":46,"character":19,"context":{"typeName":"RippleConfig"},"module":"./ripple/ripple-ref"}]}],"fadeOut":[{"__symbolic":"method"}]}},"RippleTarget":{"__symbolic":"interface"},"defaultRippleAnimationConfig":{"enterDuration":225,"exitDuration":150},"RippleRenderer":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":87,"character":31},{"__symbolic":"error","message":"Could not resolve type","line":88,"character":35,"context":{"typeName":"HTMLElement"},"module":"./ripple/ripple-renderer"},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":89,"character":24}]}],"fadeInRipple":[{"__symbolic":"method"}],"fadeOutRipple":[{"__symbolic":"method"}],"fadeOutAll":[{"__symbolic":"method"}],"fadeOutAllNonPersistent":[{"__symbolic":"method"}],"setupTriggerEvents":[{"__symbolic":"method"}],"handleEvent":[{"__symbolic":"method"}],"_onMousedown":[{"__symbolic":"method"}],"_onTouchStart":[{"__symbolic":"method"}],"_onPointerUp":[{"__symbolic":"method"}],"_runTimeoutOutsideZone":[{"__symbolic":"method"}],"_registerEvents":[{"__symbolic":"method"}],"_removeTriggerEvents":[{"__symbolic":"method"}]}},"MatPseudoCheckboxModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":13,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","name":"MatCommonModule"}],"exports":[{"__symbolic":"reference","name":"MatPseudoCheckbox"}],"declarations":[{"__symbolic":"reference","name":"MatPseudoCheckbox"}]}]}],"members":{}},"MatPseudoCheckboxState":{"__symbolic":"interface"},"MatPseudoCheckbox":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":37,"character":1},"arguments":[{"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":38,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":39,"character":19},"member":"OnPush"},"selector":"mat-pseudo-checkbox","template":"","host":{"class":"mat-pseudo-checkbox","[class.mat-pseudo-checkbox-indeterminate]":"state === \"indeterminate\"","[class.mat-pseudo-checkbox-checked]":"state === \"checked\"","[class.mat-pseudo-checkbox-disabled]":"disabled","[class._mat-animation-noopable]":"_animationMode === \"NoopAnimations\"","$quoted$":["class","[class.mat-pseudo-checkbox-indeterminate]","[class.mat-pseudo-checkbox-checked]","[class.mat-pseudo-checkbox-disabled]","[class._mat-animation-noopable]"]},"styles":[".mat-pseudo-checkbox{width:16px;height:16px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1),background-color 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:5px;left:1px;width:10px;opacity:1;border-radius:2px}.mat-pseudo-checkbox-checked::after{top:2.4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}\n"]}]}],"members":{"state":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":58,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":58,"character":27},"arguments":[{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"ANIMATION_MODULE_TYPE","line":58,"character":34}]}]],"parameters":[{"__symbolic":"reference","name":"string"}]}]}}},"origins":{"VERSION":"./version","AnimationCurves":"./animation/animation","AnimationDurations":"./animation/animation","ɵangular_material_src_material_core_core_a":"./common-behaviors/common-module","MatCommonModule":"./common-behaviors/common-module","MATERIAL_SANITY_CHECKS":"./common-behaviors/common-module","SanityChecks":"./common-behaviors/common-module","GranularSanityChecks":"./common-behaviors/common-module","CanDisable":"./common-behaviors/disabled","CanDisableCtor":"./common-behaviors/disabled","mixinDisabled":"./common-behaviors/disabled","CanColor":"./common-behaviors/color","CanColorCtor":"./common-behaviors/color","mixinColor":"./common-behaviors/color","ThemePalette":"./common-behaviors/color","CanDisableRipple":"./common-behaviors/disable-ripple","CanDisableRippleCtor":"./common-behaviors/disable-ripple","mixinDisableRipple":"./common-behaviors/disable-ripple","HasTabIndex":"./common-behaviors/tabindex","HasTabIndexCtor":"./common-behaviors/tabindex","mixinTabIndex":"./common-behaviors/tabindex","CanUpdateErrorState":"./common-behaviors/error-state","CanUpdateErrorStateCtor":"./common-behaviors/error-state","mixinErrorState":"./common-behaviors/error-state","HasInitialized":"./common-behaviors/initialized","HasInitializedCtor":"./common-behaviors/initialized","mixinInitialized":"./common-behaviors/initialized","NativeDateModule":"./datetime/index","MatNativeDateModule":"./datetime/index","MAT_DATE_LOCALE":"./datetime/date-adapter","MAT_DATE_LOCALE_FACTORY":"./datetime/date-adapter","DateAdapter":"./datetime/date-adapter","MatDateFormats":"./datetime/date-formats","MAT_DATE_FORMATS":"./datetime/date-formats","NativeDateAdapter":"./datetime/native-date-adapter","MAT_NATIVE_DATE_FORMATS":"./datetime/native-date-formats","ShowOnDirtyErrorStateMatcher":"./error/error-options","ErrorStateMatcher":"./error/error-options","MatLine":"./line/line","setLines":"./line/line","MatLineModule":"./line/line","MatOptionModule":"./option/index","MatOptionSelectionChange":"./option/option","_MatOptionBase":"./option/option","MatOption":"./option/option","_countGroupLabelsBeforeOption":"./option/option","_getOptionScrollPosition":"./option/option","_MatOptgroupBase":"./option/optgroup","MAT_OPTGROUP":"./option/optgroup","MatOptgroup":"./option/optgroup","MatOptionParentComponent":"./option/option-parent","MAT_OPTION_PARENT_COMPONENT":"./option/option-parent","MatRippleModule":"./ripple/index","RippleGlobalOptions":"./ripple/ripple","MAT_RIPPLE_GLOBAL_OPTIONS":"./ripple/ripple","MatRipple":"./ripple/ripple","RippleState":"./ripple/ripple-ref","RippleConfig":"./ripple/ripple-ref","RippleAnimationConfig":"./ripple/ripple-ref","RippleRef":"./ripple/ripple-ref","RippleTarget":"./ripple/ripple-renderer","defaultRippleAnimationConfig":"./ripple/ripple-renderer","RippleRenderer":"./ripple/ripple-renderer","MatPseudoCheckboxModule":"./selection/index","MatPseudoCheckboxState":"./selection/pseudo-checkbox/pseudo-checkbox","MatPseudoCheckbox":"./selection/pseudo-checkbox/pseudo-checkbox"},"importAs":"@angular/material/core"}
Index: trip-planner-front/node_modules/@angular/material/esm2015/badge/badge.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/esm2015/badge/badge.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/esm2015/badge/badge.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -16,5 +16,4 @@
 const _MatBadgeBase = mixinDisabled(class {
 });
-const BADGE_CONTENT_CLASS = 'mat-badge-content';
 /** Directive to display a text badge. */
 export class MatBadge extends _MatBadgeBase {
@@ -26,4 +25,6 @@
         this._renderer = _renderer;
         this._animationMode = _animationMode;
+        /** Whether the badge has any content. */
+        this._hasContent = false;
         this._color = 'primary';
         this._overlap = true;
@@ -37,6 +38,4 @@
         /** Unique id for the badge */
         this._id = nextId++;
-        /** Whether the OnInit lifecycle hook has run yet */
-        this._isInitialized = false;
         if (typeof ngDevMode === 'undefined' || ngDevMode) {
             const nativeElement = _elementRef.nativeElement;
@@ -57,15 +56,16 @@
         this._overlap = coerceBooleanProperty(val);
     }
-    /** The content for the badge */
-    get content() {
-        return this._content;
-    }
-    set content(newContent) {
-        this._updateRenderedContent(newContent);
-    }
     /** Message used to describe the decorated element via aria-describedby */
     get description() { return this._description; }
     set description(newDescription) {
-        this._updateHostAriaDescription(newDescription);
+        if (newDescription !== this._description) {
+            const badgeElement = this._badgeElement;
+            this._updateHostAriaDescription(newDescription, this._description);
+            this._description = newDescription;
+            if (badgeElement) {
+                newDescription ? badgeElement.setAttribute('aria-label', newDescription) :
+                    badgeElement.removeAttribute('aria-label');
+            }
+        }
     }
     /** Whether the badge is hidden. */
@@ -82,29 +82,41 @@
         return this.position.indexOf('before') === -1;
     }
+    ngOnChanges(changes) {
+        const contentChange = changes['content'];
+        if (contentChange) {
+            const value = contentChange.currentValue;
+            this._hasContent = value != null && `${value}`.trim().length > 0;
+            this._updateTextContent();
+        }
+    }
+    ngOnDestroy() {
+        const badgeElement = this._badgeElement;
+        if (badgeElement) {
+            if (this.description) {
+                this._ariaDescriber.removeDescription(badgeElement, this.description);
+            }
+            // When creating a badge through the Renderer, Angular will keep it in an index.
+            // We have to destroy it ourselves, otherwise it'll be retained in memory.
+            if (this._renderer.destroyNode) {
+                this._renderer.destroyNode(badgeElement);
+            }
+        }
+    }
     /**
-     * Gets the element into which the badge's content is being rendered. Undefined if the element
-     * hasn't been created (e.g. if the badge doesn't have content).
+     * Gets the element into which the badge's content is being rendered.
+     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
      */
     getBadgeElement() {
         return this._badgeElement;
     }
-    ngOnInit() {
-        // We may have server-side rendered badge that we need to clear.
-        // We need to do this in ngOnInit because the full content of the component
-        // on which the badge is attached won't necessarily be in the DOM until this point.
-        this._clearExistingBadges();
-        if (this.content && !this._badgeElement) {
+    /** Injects a span element into the DOM with the content. */
+    _updateTextContent() {
+        if (!this._badgeElement) {
             this._badgeElement = this._createBadgeElement();
-            this._updateRenderedContent(this.content);
-        }
-        this._isInitialized = true;
-    }
-    ngOnDestroy() {
-        // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.
-        // We have to destroy it ourselves, otherwise it'll be retained in memory.
-        if (this._renderer.destroyNode) {
-            this._renderer.destroyNode(this._badgeElement);
-        }
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+        }
+        else {
+            this._badgeElement.textContent = this._stringifyContent();
+        }
+        return this._badgeElement;
     }
     /** Creates the badge element */
@@ -112,11 +124,15 @@
         const badgeElement = this._renderer.createElement('span');
         const activeClass = 'mat-badge-active';
+        const contentClass = 'mat-badge-content';
+        // Clear any existing badges which may have persisted from a server-side render.
+        this._clearExistingBadges(contentClass);
         badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);
-        // The badge is aria-hidden because we don't want it to appear in the page's navigation
-        // flow. Instead, we use the badge to describe the decorated element with aria-describedby.
-        badgeElement.setAttribute('aria-hidden', 'true');
-        badgeElement.classList.add(BADGE_CONTENT_CLASS);
+        badgeElement.classList.add(contentClass);
+        badgeElement.textContent = this._stringifyContent();
         if (this._animationMode === 'NoopAnimations') {
             badgeElement.classList.add('_mat-animation-noopable');
+        }
+        if (this.description) {
+            badgeElement.setAttribute('aria-label', this.description);
         }
         this._elementRef.nativeElement.appendChild(badgeElement);
@@ -134,44 +150,45 @@
         return badgeElement;
     }
-    /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-    _updateRenderedContent(newContent) {
-        const newContentNormalized = `${newContent !== null && newContent !== void 0 ? newContent : ''}`.trim();
-        // Don't create the badge element if the directive isn't initialized because we want to
-        // append the badge element to the *end* of the host element's content for backwards
-        // compatibility.
-        if (this._isInitialized && newContentNormalized && !this._badgeElement) {
-            this._badgeElement = this._createBadgeElement();
-        }
-        if (this._badgeElement) {
-            this._badgeElement.textContent = newContentNormalized;
-        }
-        this._content = newContentNormalized;
-    }
-    /** Updates the host element's aria description via AriaDescriber. */
-    _updateHostAriaDescription(newDescription) {
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+    /** Sets the aria-label property on the element */
+    _updateHostAriaDescription(newDescription, oldDescription) {
+        // ensure content available before setting label
+        const content = this._updateTextContent();
+        if (oldDescription) {
+            this._ariaDescriber.removeDescription(content, oldDescription);
+        }
         if (newDescription) {
-            this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);
-        }
-        this._description = newDescription;
+            this._ariaDescriber.describe(content, newDescription);
+        }
     }
     /** Adds css theme class given the color to the component host */
     _setColor(colorPalette) {
-        const classList = this._elementRef.nativeElement.classList;
-        classList.remove(`mat-badge-${this._color}`);
-        if (colorPalette) {
-            classList.add(`mat-badge-${colorPalette}`);
+        if (colorPalette !== this._color) {
+            const classList = this._elementRef.nativeElement.classList;
+            if (this._color) {
+                classList.remove(`mat-badge-${this._color}`);
+            }
+            if (colorPalette) {
+                classList.add(`mat-badge-${colorPalette}`);
+            }
         }
     }
     /** Clears any existing badges that might be left over from server-side rendering. */
-    _clearExistingBadges() {
-        // Only check direct children of this host element in order to avoid deleting
-        // any badges that might exist in descendant elements.
-        const badges = this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);
-        for (const badgeElement of Array.from(badges)) {
-            if (badgeElement !== this._badgeElement) {
-                badgeElement.remove();
-            }
-        }
+    _clearExistingBadges(cssClass) {
+        const element = this._elementRef.nativeElement;
+        let childCount = element.children.length;
+        // Use a reverse while, because we'll be removing elements from the list as we're iterating.
+        while (childCount--) {
+            const currentChild = element.children[childCount];
+            if (currentChild.classList.contains(cssClass)) {
+                element.removeChild(currentChild);
+            }
+        }
+    }
+    /** Gets the string representation of the badge content. */
+    _stringifyContent() {
+        // Convert null and undefined to an empty string which is consistent
+        // with how Angular handles them in inside template interpolations.
+        const content = this.content;
+        return content == null ? '' : `${content}`;
     }
 }
@@ -190,5 +207,5 @@
                     '[class.mat-badge-medium]': 'size === "medium"',
                     '[class.mat-badge-large]': 'size === "large"',
-                    '[class.mat-badge-hidden]': 'hidden || !content',
+                    '[class.mat-badge-hidden]': 'hidden || !_hasContent',
                     '[class.mat-badge-disabled]': 'disabled',
                 },
@@ -211,3 +228,3 @@
     hidden: [{ type: Input, args: ['matBadgeHidden',] }]
 };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGFBQWEsRUFBZSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRzNFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmLCtDQUErQztBQUMvQyxvQkFBb0I7QUFDcEIsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDO0NBQVEsQ0FBQyxDQUFDO0FBVTlDLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFFaEQseUNBQXlDO0FBa0J6QyxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUE4RHpDLFlBQ1ksT0FBZSxFQUNmLFdBQW9DLEVBQ3BDLGNBQTZCLEVBQzdCLFNBQW9CLEVBQ3VCLGNBQXVCO1FBQzFFLEtBQUssRUFBRSxDQUFDO1FBTEEsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3VCLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBM0R0RSxXQUFNLEdBQWlCLFNBQVMsQ0FBQztRQVFqQyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRWpDOzs7V0FHRztRQUN3QixhQUFRLEdB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QUMsZUFBZTtzQkFTckIsS0FBSyxTQUFDLGlCQUFpQjt1QkFXdkIsS0FBSyxTQUFDLGtCQUFrQjtzQkFHeEIsS0FBSyxTQUFDLFVBQVU7MEJBVWhCLEtBQUssU0FBQyxxQkFBcUI7bUJBUTNCLEtBQUssU0FBQyxjQUFjO3FCQUdwQixLQUFLLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QXJpYURlc2NyaWJlcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NhbkRpc2FibGUsIG1peGluRGlzYWJsZWQsIFRoZW1lUGFsZXR0ZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge0FOSU1BVElPTl9NT0RVTEVfVFlQRX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcblxuXG5sZXQgbmV4dElkID0gMDtcblxuLy8gQm9pbGVycGxhdGUgZm9yIGFwcGx5aW5nIG1peGlucyB0byBNYXRCYWRnZS5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5jb25zdCBfTWF0QmFkZ2VCYXNlID0gbWl4aW5EaXNhYmxlZChjbGFzcyB7fSk7XG5cbi8qKiBBbGxvd2VkIHBvc2l0aW9uIG9wdGlvbnMgZm9yIG1hdEJhZGdlUG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIE1hdEJhZGdlUG9zaXRpb24gPVxuICAgICdhYm92ZSBhZnRlcicgfCAnYWJvdmUgYmVmb3JlJyB8ICdiZWxvdyBiZWZvcmUnIHwgJ2JlbG93IGFmdGVyJyB8XG4gICAgJ2JlZm9yZScgfCAnYWZ0ZXInIHwgJ2Fib3ZlJyB8ICdiZWxvdyc7XG5cbi8qKiBBbGxvd2VkIHNpemUgb3B0aW9ucyBmb3IgbWF0QmFkZ2VTaXplICovXG5leHBvcnQgdHlwZSBNYXRCYWRnZVNpemUgPSAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuXG5jb25zdCBCQURHRV9DT05URU5UX0NMQVNTID0gJ21hdC1iYWRnZS1jb250ZW50JztcblxuLyoqIERpcmVjdGl2ZSB0byBkaXNwbGF5IGEgdGV4dCBiYWRnZS4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttYXRCYWRnZV0nLFxuICBpbnB1dHM6IFsnZGlzYWJsZWQ6IG1hdEJhZGdlRGlzYWJsZWQnXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtYmFkZ2UnLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLW92ZXJsYXBdJzogJ292ZXJsYXAnLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWFib3ZlXSc6ICdpc0Fib3ZlKCknLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWJlbG93XSc6ICchaXNBYm92ZSgpJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1iZWZvcmVdJzogJyFpc0FmdGVyKCknLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWFmdGVyXSc6ICdpc0FmdGVyKCknLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLXNtYWxsXSc6ICdzaXplID09PSBcInNtYWxsXCInLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLW1lZGl1bV0nOiAnc2l6ZSA9PT0gXCJtZWRpdW1cIicsXG4gICAgJ1tjbGFzcy5tYXQtYmFkZ2UtbGFyZ2VdJzogJ3NpemUgPT09IFwibGFyZ2VcIicsXG4gICAgJ1tjbGFzcy5tYXQtYmFkZ2UtaGlkZGVuXSc6ICdoaWRkZW4gfHwgIWNvbnRlbnQnLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdEJhZGdlIGV4dGVuZHMgX01hdEJhZGdlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5EaXNhYmxlIHtcbiAgLyoqIFRoZSBjb2xvciBvZiB0aGUgYmFkZ2UuIENhbiBiZSBgcHJpbWFyeWAsIGBhY2NlbnRgLCBvciBgd2FybmAuICovXG4gIEBJbnB1dCgnbWF0QmFkZ2VDb2xvcicpXG4gIGdldCBjb2xvcigpOiBUaGVtZVBhbGV0dGUgeyByZXR1cm4gdGhpcy5fY29sb3I7IH1cbiAgc2V0IGNvbG9yKHZhbHVlOiBUaGVtZVBhbGV0dGUpIHtcbiAgICB0aGlzLl9zZXRDb2xvcih2YWx1ZSk7XG4gICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9jb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBzaG91bGQgb3ZlcmxhcCBpdHMgY29udGVudHMgb3Igbm90ICovXG4gIEBJbnB1dCgnbWF0QmFkZ2VPdmVybGFwJylcbiAgZ2V0IG92ZXJsYXAoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vdmVybGFwOyB9XG4gIHNldCBvdmVybGFwKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX292ZXJsYXAgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgfVxuICBwcml2YXRlIF9vdmVybGFwOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIGJhZGdlIHNob3VsZCByZXNpZGUuXG4gICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mICdhYm92ZSd8J2JlbG93JyBhbmQgJ2JlZm9yZSd8J2FmdGVyJ1xuICAgKi9cbiAgQElucHV0KCdtYXRCYWRnZVBvc2l0aW9uJykgcG9zaXRpb246IE1hdEJhZGdlUG9zaXRpb24gPSAnYWJvdmUgYWZ0ZXInO1xuXG4gIC8qKiBUaGUgY29udGVudCBmb3IgdGhlIGJhZGdlICovXG4gIEBJbnB1dCgnbWF0QmFkZ2UnKVxuICBnZXQgY29udGVudCgpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgfVxuICBzZXQgY29udGVudChuZXdDb250ZW50OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fdXBkYXRlUmVuZGVyZWRDb250ZW50KG5ld0NvbnRlbnQpO1xuICB9XG4gIHByaXZhdGUgX2NvbnRlbnQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgLyoqIE1lc3NhZ2UgdXNlZCB0byBkZXNjcmliZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgdmlhIGFyaWEtZGVzY3JpYmVkYnkgKi9cbiAgQElucHV0KCdtYXRCYWRnZURlc2NyaXB0aW9uJylcbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjsgfVxuICBzZXQgZGVzY3JpcHRpb24obmV3RGVzY3JpcHRpb246IHN0cmluZykge1xuICAgIHRoaXMuX3VwZGF0ZUhvc3RBcmlhRGVzY3JpcHRpb24obmV3RGVzY3JpcHRpb24pO1xuICB9XG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqIFNpemUgb2YgdGhlIGJhZGdlLiBDYW4gYmUgJ3NtYWxsJywgJ21lZGl1bScsIG9yICdsYXJnZScuICovXG4gIEBJbnB1dCgnbWF0QmFkZ2VTaXplJykgc2l6ZTogTWF0QmFkZ2VTaXplID0gJ21lZGl1bSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGhpZGRlbi4gKi9cbiAgQElucHV0KCdtYXRCYWRnZUhpZGRlbicpXG4gIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oaWRkZW47IH1cbiAgc2V0IGhpZGRlbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRkZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgfVxuICBwcml2YXRlIF9oaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqIFVuaXF1ZSBpZCBmb3IgdGhlIGJhZGdlICovXG4gIF9pZDogbnVtYmVyID0gbmV4dElkKys7XG5cbiAgLyoqIFZpc2libGUgYmFkZ2UgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfYmFkZ2VFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAvKiogV2hldGhlciB0aGUgT25Jbml0IGxpZmVjeWNsZSBob29rIGhhcyBydW4geWV0ICovXG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICBwcml2YXRlIF9hcmlhRGVzY3JpYmVyOiBBcmlhRGVzY3JpYmVyLFxuICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQU5JTUFUSU9OX01PRFVMRV9UWVBFKSBwcml2YXRlIF9hbmltYXRpb25Nb2RlPzogc3RyaW5nKSB7XG4gICAgICBzdXBlcigpO1xuXG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5ub2RlVHlwZSAhPT0gbmF0aXZlRWxlbWVudC5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignbWF0QmFkZ2UgbXVzdCBiZSBhdHRhY2hlZCB0byBhbiBlbGVtZW50IG5vZGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGFib3ZlIHRoZSBob3N0IG9yIG5vdCAqL1xuICBpc0Fib3ZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ2JlbG93JykgPT09IC0xO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJhZGdlIGlzIGFmdGVyIHRoZSBob3N0IG9yIG5vdCAqL1xuICBpc0FmdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ2JlZm9yZScpID09PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlbGVtZW50IGludG8gd2hpY2ggdGhlIGJhZGdlJ3MgY29udGVudCBpcyBiZWluZyByZW5kZXJlZC4gVW5kZWZpbmVkIGlmIHRoZSBlbGVtZW50XG4gICAqIGhhc24ndCBiZWVuIGNyZWF0ZWQgKGUuZy4gaWYgdGhlIGJhZGdlIGRvZXNuJ3QgaGF2ZSBjb250ZW50KS5cbiAgICovXG4gIGdldEJhZGdlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2JhZGdlRWxlbWVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIFdlIG1heSBoYXZlIHNlcnZlci1zaWRlIHJlbmRlcmVkIGJhZGdlIHRoYXQgd2UgbmVlZCB0byBjbGVhci5cbiAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgaW4gbmdPbkluaXQgYmVjYXVzZSB0aGUgZnVsbCBjb250ZW50IG9mIHRoZSBjb21wb25lbnRcbiAgICAvLyBvbiB3aGljaCB0aGUgYmFkZ2UgaXMgYXR0YWNoZWQgd29uJ3QgbmVjZXNzYXJpbHkgYmUgaW4gdGhlIERPTSB1bnRpbCB0aGlzIHBvaW50LlxuICAgIHRoaXMuX2NsZWFyRXhpc3RpbmdCYWRnZXMoKTtcblxuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgIXRoaXMuX2JhZGdlRWxlbWVudCkge1xuICAgICAgdGhpcy5fYmFkZ2VFbGVtZW50ID0gdGhpcy5fY3JlYXRlQmFkZ2VFbGVtZW50KCk7XG4gICAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENvbnRlbnQodGhpcy5jb250ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIFZpZXdFbmdpbmUgb25seTogd2hlbiBjcmVhdGluZyBhIGJhZGdlIHRocm91Z2ggdGhlIFJlbmRlcmVyLCBBbmd1bGFyIHJlbWVtYmVycyBpdHMgaW5kZXguXG4gICAgLy8gV2UgaGF2ZSB0byBkZXN0cm95IGl0IG91cnNlbHZlcywgb3RoZXJ3aXNlIGl0J2xsIGJlIHJldGFpbmVkIGluIG1lbW9yeS5cbiAgICBpZiAodGhpcy5fcmVuZGVyZXIuZGVzdHJveU5vZGUpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmRlc3Ryb3lOb2RlKHRoaXMuX2JhZGdlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGJhZGdlIGVsZW1lbnQgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQmFkZ2VFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBiYWRnZUVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSAnbWF0LWJhZGdlLWFjdGl2ZSc7XG5cbiAgICBiYWRnZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIGBtYXQtYmFkZ2UtY29udGVudC0ke3RoaXMuX2lkfWApO1xuXG4gICAgLy8gVGhlIGJhZGdlIGlzIGFyaWEtaGlkZGVuIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIHBhZ2UncyBuYXZpZ2F0aW9uXG4gICAgLy8gZmxvdy4gSW5zdGVhZCwgd2UgdXNlIHRoZSBiYWRnZSB0byBkZXNjcmliZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgd2l0aCBhcmlhLWRlc2NyaWJlZGJ5LlxuICAgIGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICBiYWRnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChCQURHRV9DT05URU5UX0NMQVNTKTtcblxuICAgIGlmICh0aGlzLl9hbmltYXRpb25Nb2RlID09PSAnTm9vcEFuaW1hdGlvbnMnKSB7XG4gICAgICBiYWRnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnX21hdC1hbmltYXRpb24tbm9vcGFibGUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFkZ2VFbGVtZW50KTtcblxuICAgIC8vIGFuaW1hdGUgaW4gYWZ0ZXIgaW5zZXJ0aW9uXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5fYW5pbWF0aW9uTW9kZSAhPT0gJ05vb3BBbmltYXRpb25zJykge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBiYWRnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhZGdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFkZ2VFbGVtZW50O1xuICB9XG5cbiAgLyoqIFVwZGF0ZSB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBiYWRnZSBlbGVtZW50IGluIHRoZSBET00sIGNyZWF0aW5nIHRoZSBlbGVtZW50IGlmIG5lY2Vzc2FyeS4gKi9cbiAgcHJpdmF0ZSBfdXBkYXRlUmVuZGVyZWRDb250ZW50KG5ld0NvbnRlbnQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb250ZW50Tm9ybWFsaXplZDogc3RyaW5nID0gYCR7bmV3Q29udGVudCA/PyAnJ31gLnRyaW0oKTtcblxuICAgIC8vIERvbid0IGNyZWF0ZSB0aGUgYmFkZ2UgZWxlbWVudCBpZiB0aGUgZGlyZWN0aXZlIGlzbid0IGluaXRpYWxpemVkIGJlY2F1c2Ugd2Ugd2FudCB0b1xuICAgIC8vIGFwcGVuZCB0aGUgYmFkZ2UgZWxlbWVudCB0byB0aGUgKmVuZCogb2YgdGhlIGhvc3QgZWxlbWVudCdzIGNvbnRlbnQgZm9yIGJhY2t3YXJkc1xuICAgIC8vIGNvbXBhdGliaWxpdHkuXG4gICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgbmV3Q29udGVudE5vcm1hbGl6ZWQgJiYgIXRoaXMuX2JhZGdlRWxlbWVudCkge1xuICAgICAgdGhpcy5fYmFkZ2VFbGVtZW50ID0gdGhpcy5fY3JlYXRlQmFkZ2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JhZGdlRWxlbWVudCkge1xuICAgICAgdGhpcy5fYmFkZ2VFbGVtZW50LnRleHRDb250ZW50ID0gbmV3Q29udGVudE5vcm1hbGl6ZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGVudCA9IG5ld0NvbnRlbnROb3JtYWxpemVkO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIGhvc3QgZWxlbWVudCdzIGFyaWEgZGVzY3JpcHRpb24gdmlhIEFyaWFEZXNjcmliZXIuICovXG4gIHByaXZhdGUgX3VwZGF0ZUhvc3RBcmlhRGVzY3JpcHRpb24obmV3RGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICBpZiAobmV3RGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBuZXdEZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gbmV3RGVzY3JpcHRpb247XG4gIH1cblxuICAvKiogQWRkcyBjc3MgdGhlbWUgY2xhc3MgZ2l2ZW4gdGhlIGNvbG9yIHRvIHRoZSBjb21wb25lbnQgaG9zdCAqL1xuICBwcml2YXRlIF9zZXRDb2xvcihjb2xvclBhbGV0dGU6IFRoZW1lUGFsZXR0ZSkge1xuICAgIGNvbnN0IGNsYXNzTGlzdCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhZGdlLSR7dGhpcy5fY29sb3J9YCk7XG4gICAgaWYgKGNvbG9yUGFsZXR0ZSkge1xuICAgICAgY2xhc3NMaXN0LmFkZChgbWF0LWJhZGdlLSR7Y29sb3JQYWxldHRlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgYW55IGV4aXN0aW5nIGJhZGdlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHNlcnZlci1zaWRlIHJlbmRlcmluZy4gKi9cbiAgcHJpdmF0ZSBfY2xlYXJFeGlzdGluZ0JhZGdlcygpIHtcbiAgICAvLyBPbmx5IGNoZWNrIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGlzIGhvc3QgZWxlbWVudCBpbiBvcmRlciB0byBhdm9pZCBkZWxldGluZ1xuICAgIC8vIGFueSBiYWRnZXMgdGhhdCBtaWdodCBleGlzdCBpbiBkZXNjZW5kYW50IGVsZW1lbnRzLlxuICAgIGNvbnN0IGJhZGdlcyA9XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGA6c2NvcGUgPiAuJHtCQURHRV9DT05URU5UX0NMQVNTfWApO1xuICAgIGZvciAoY29uc3QgYmFkZ2VFbGVtZW50IG9mIEFycmF5LmZyb20oYmFkZ2VzKSkge1xuICAgICAgaWYgKGJhZGdlRWxlbWVudCAhPT0gdGhpcy5fYmFkZ2VFbGVtZW50KSB7XG4gICAgICAgIGJhZGdlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hpZGRlbjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3ZlcmxhcDogQm9vbGVhbklucHV0O1xufVxuIl19
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGFBQWEsRUFBZSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRzNFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmLCtDQUErQztBQUMvQyxvQkFBb0I7QUFDcEIsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDO0NBQVEsQ0FBQyxDQUFDO0FBVTlDLHlDQUF5QztBQWtCekMsTUFBTSxPQUFPLFFBQVMsU0FBUSxhQUFhO0lBK0R6QyxZQUNZLE9BQWUsRUFDZixXQUFvQyxFQUNwQyxjQUE2QixFQUM3QixTQUFvQixFQUN1QixjQUF1QjtRQUMxRSxLQUFLLEVBQUUsQ0FBQztRQUxBLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN1QixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQW5FOUUseUNBQXlDO1FBQ3pDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBU1osV0FBTSxHQUFpQixTQUFTLENBQUM7UUFRakMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUVqQzs7O1dBR0c7UUFDd0IsYUFB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QUM7OztZQTFPRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLE1BQU0sRUFBRSxDQUFDLDRCQUE0QixDQUFDO2dCQUN0QyxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLFdBQVc7b0JBQ3BCLDJCQUEyQixFQUFFLFNBQVM7b0JBQ3RDLHlCQUF5QixFQUFFLFdBQVc7b0JBQ3RDLHlCQUF5QixFQUFFLFlBQVk7b0JBQ3ZDLDBCQUEwQixFQUFFLFlBQVk7b0JBQ3hDLHlCQUF5QixFQUFFLFdBQVc7b0JBQ3RDLHlCQUF5QixFQUFFLGtCQUFrQjtvQkFDN0MsMEJBQTBCLEVBQUUsbUJBQW1CO29CQUMvQyx5QkFBeUIsRUFBRSxrQkFBa0I7b0JBQzdDLDBCQUEwQixFQUFFLHdCQUF3QjtvQkFDcEQsNEJBQTRCLEVBQUUsVUFBVTtpQkFDekM7YUFDRjs7O1lBMUNDLE1BQU07WUFITixVQUFVO1lBSkosYUFBYTtZQVduQixTQUFTO3lDQTJHSixRQUFRLFlBQUksTUFBTSxTQUFDLHFCQUFxQjs7O29CQS9ENUMsS0FBSyxTQUFDLGVBQWU7c0JBU3JCLEtBQUssU0FBQyxpQkFBaUI7dUJBV3ZCLEtBQUssU0FBQyxrQkFBa0I7c0JBR3hCLEtBQUssU0FBQyxVQUFVOzBCQUdoQixLQUFLLFNBQUMscUJBQXFCO21CQWlCM0IsS0FBSyxTQUFDLGNBQWM7cUJBR3BCLEtBQUssU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBcmlhRGVzY3JpYmVyfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuRGlzYWJsZSwgbWl4aW5EaXNhYmxlZCwgVGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7QU5JTUFUSU9OX01PRFVMRV9UWVBFfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuXG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vLyBCb2lsZXJwbGF0ZSBmb3IgYXBwbHlpbmcgbWl4aW5zIHRvIE1hdEJhZGdlLlxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmNvbnN0IF9NYXRCYWRnZUJhc2UgPSBtaXhpbkRpc2FibGVkKGNsYXNzIHt9KTtcblxuLyoqIEFsbG93ZWQgcG9zaXRpb24gb3B0aW9ucyBmb3IgbWF0QmFkZ2VQb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgTWF0QmFkZ2VQb3NpdGlvbiA9XG4gICAgJ2Fib3ZlIGFmdGVyJyB8ICdhYm92ZSBiZWZvcmUnIHwgJ2JlbG93IGJlZm9yZScgfCAnYmVsb3cgYWZ0ZXInIHxcbiAgICAnYmVmb3JlJyB8ICdhZnRlcicgfCAnYWJvdmUnIHwgJ2JlbG93JztcblxuLyoqIEFsbG93ZWQgc2l6ZSBvcHRpb25zIGZvciBtYXRCYWRnZVNpemUgKi9cbmV4cG9ydCB0eXBlIE1hdEJhZGdlU2l6ZSA9ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG5cbi8qKiBEaXJlY3RpdmUgdG8gZGlzcGxheSBhIHRleHQgYmFkZ2UuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWF0QmFkZ2VdJyxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkOiBtYXRCYWRnZURpc2FibGVkJ10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LWJhZGdlJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1vdmVybGFwXSc6ICdvdmVybGFwJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1hYm92ZV0nOiAnaXNBYm92ZSgpJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1iZWxvd10nOiAnIWlzQWJvdmUoKScsXG4gICAgJ1tjbGFzcy5tYXQtYmFkZ2UtYmVmb3JlXSc6ICchaXNBZnRlcigpJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1hZnRlcl0nOiAnaXNBZnRlcigpJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1zbWFsbF0nOiAnc2l6ZSA9PT0gXCJzbWFsbFwiJyxcbiAgICAnW2NsYXNzLm1hdC1iYWRnZS1tZWRpdW1dJzogJ3NpemUgPT09IFwibWVkaXVtXCInLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWxhcmdlXSc6ICdzaXplID09PSBcImxhcmdlXCInLFxuICAgICdbY2xhc3MubWF0LWJhZGdlLWhpZGRlbl0nOiAnaGlkZGVuIHx8ICFfaGFzQ29udGVudCcsXG4gICAgJ1tjbGFzcy5tYXQtYmFkZ2UtZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0QmFkZ2UgZXh0ZW5kcyBfTWF0QmFkZ2VCYXNlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMsIENhbkRpc2FibGUge1xuICAvKiogV2hldGhlciB0aGUgYmFkZ2UgaGFzIGFueSBjb250ZW50LiAqL1xuICBfaGFzQ29udGVudCA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgY29sb3Igb2YgdGhlIGJhZGdlLiBDYW4gYmUgYHByaW1hcnlgLCBgYWNjZW50YCwgb3IgYHdhcm5gLiAqL1xuICBASW5wdXQoJ21hdEJhZGdlQ29sb3InKVxuICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHsgcmV0dXJuIHRoaXMuX2NvbG9yOyB9XG4gIHNldCBjb2xvcih2YWx1ZTogVGhlbWVQYWxldHRlKSB7XG4gICAgdGhpcy5fc2V0Q29sb3IodmFsdWUpO1xuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcblxuICAvKiogV2hldGhlciB0aGUgYmFkZ2Ugc2hvdWxkIG92ZXJsYXAgaXRzIGNvbnRlbnRzIG9yIG5vdCAqL1xuICBASW5wdXQoJ21hdEJhZGdlT3ZlcmxhcCcpXG4gIGdldCBvdmVybGFwKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3ZlcmxhcDsgfVxuICBzZXQgb3ZlcmxhcCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9vdmVybGFwID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBfb3ZlcmxhcDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIHRoZSBiYWRnZSBzaG91bGQgcmVzaWRlLlxuICAgKiBBY2NlcHRzIGFueSBjb21iaW5hdGlvbiBvZiAnYWJvdmUnfCdiZWxvdycgYW5kICdiZWZvcmUnfCdhZnRlcidcbiAgICovXG4gIEBJbnB1dCgnbWF0QmFkZ2VQb3NpdGlvbicpIHBvc2l0aW9uOiBNYXRCYWRnZVBvc2l0aW9uID0gJ2Fib3ZlIGFmdGVyJztcblxuICAvKiogVGhlIGNvbnRlbnQgZm9yIHRoZSBiYWRnZSAqL1xuICBASW5wdXQoJ21hdEJhZGdlJykgY29udGVudDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAvKiogTWVzc2FnZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBkZWNvcmF0ZWQgZWxlbWVudCB2aWEgYXJpYS1kZXNjcmliZWRieSAqL1xuICBASW5wdXQoJ21hdEJhZGdlRGVzY3JpcHRpb24nKVxuICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uOyB9XG4gIHNldCBkZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgaWYgKG5ld0Rlc2NyaXB0aW9uICE9PSB0aGlzLl9kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYmFkZ2VFbGVtZW50ID0gdGhpcy5fYmFkZ2VFbGVtZW50O1xuICAgICAgdGhpcy5fdXBkYXRlSG9zdEFyaWFEZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbiwgdGhpcy5fZGVzY3JpcHRpb24pO1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb24gPSBuZXdEZXNjcmlwdGlvbjtcblxuICAgICAgaWYgKGJhZGdlRWxlbWVudCkge1xuICAgICAgICBuZXdEZXNjcmlwdGlvbiA/IGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBuZXdEZXNjcmlwdGlvbikgOlxuICAgICAgICAgICAgYmFkZ2VFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9kZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKiBTaXplIG9mIHRoZSBiYWRnZS4gQ2FuIGJlICdzbWFsbCcsICdtZWRpdW0nLCBvciAnbGFyZ2UnLiAqL1xuICBASW5wdXQoJ21hdEJhZGdlU2l6ZScpIHNpemU6IE1hdEJhZGdlU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBoaWRkZW4uICovXG4gIEBJbnB1dCgnbWF0QmFkZ2VIaWRkZW4nKVxuICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faGlkZGVuOyB9XG4gIHNldCBoaWRkZW4odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZGVuID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBfaGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKiBVbmlxdWUgaWQgZm9yIHRoZSBiYWRnZSAqL1xuICBfaWQ6IG51bWJlciA9IG5leHRJZCsrO1xuXG4gIHByaXZhdGUgX2JhZGdlRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgcHJpdmF0ZSBfYXJpYURlc2NyaWJlcjogQXJpYURlc2NyaWJlcixcbiAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSkgcHJpdmF0ZSBfYW5pbWF0aW9uTW9kZT86IHN0cmluZykge1xuICAgICAgc3VwZXIoKTtcblxuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQubm9kZVR5cGUgIT09IG5hdGl2ZUVsZW1lbnQuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ21hdEJhZGdlIG11c3QgYmUgYXR0YWNoZWQgdG8gYW4gZWxlbWVudCBub2RlLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBhYm92ZSB0aGUgaG9zdCBvciBub3QgKi9cbiAgaXNBYm92ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5pbmRleE9mKCdiZWxvdycpID09PSAtMTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBiYWRnZSBpcyBhZnRlciB0aGUgaG9zdCBvciBub3QgKi9cbiAgaXNBZnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5pbmRleE9mKCdiZWZvcmUnKSA9PT0gLTE7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgY29udGVudENoYW5nZSA9IGNoYW5nZXNbJ2NvbnRlbnQnXTtcblxuICAgIGlmIChjb250ZW50Q2hhbmdlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnRDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5faGFzQ29udGVudCA9IHZhbHVlICE9IG51bGwgJiYgYCR7dmFsdWV9YC50cmltKCkubGVuZ3RoID4gMDtcbiAgICAgIHRoaXMuX3VwZGF0ZVRleHRDb250ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY29uc3QgYmFkZ2VFbGVtZW50ID0gdGhpcy5fYmFkZ2VFbGVtZW50O1xuXG4gICAgaWYgKGJhZGdlRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihiYWRnZUVsZW1lbnQsIHRoaXMuZGVzY3JpcHRpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBXaGVuIGNyZWF0aW5nIGEgYmFkZ2UgdGhyb3VnaCB0aGUgUmVuZGVyZXIsIEFuZ3VsYXIgd2lsbCBrZWVwIGl0IGluIGFuIGluZGV4LlxuICAgICAgLy8gV2UgaGF2ZSB0byBkZXN0cm95IGl0IG91cnNlbHZlcywgb3RoZXJ3aXNlIGl0J2xsIGJlIHJldGFpbmVkIGluIG1lbW9yeS5cbiAgICAgIGlmICh0aGlzLl9yZW5kZXJlci5kZXN0cm95Tm9kZSkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5kZXN0cm95Tm9kZShiYWRnZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlbGVtZW50IGludG8gd2hpY2ggdGhlIGJhZGdlJ3MgY29udGVudCBpcyBiZWluZyByZW5kZXJlZC5cbiAgICogVW5kZWZpbmVkIGlmIHRoZSBlbGVtZW50IGhhc24ndCBiZWVuIGNyZWF0ZWQgKGUuZy4gaWYgdGhlIGJhZGdlIGRvZXNuJ3QgaGF2ZSBjb250ZW50KS5cbiAgICovXG4gIGdldEJhZGdlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2JhZGdlRWxlbWVudDtcbiAgfVxuXG4gIC8qKiBJbmplY3RzIGEgc3BhbiBlbGVtZW50IGludG8gdGhlIERPTSB3aXRoIHRoZSBjb250ZW50LiAqL1xuICBwcml2YXRlIF91cGRhdGVUZXh0Q29udGVudCgpOiBIVE1MU3BhbkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5fYmFkZ2VFbGVtZW50KSB7XG4gICAgICB0aGlzLl9iYWRnZUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVCYWRnZUVsZW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYmFkZ2VFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5fc3RyaW5naWZ5Q29udGVudCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYmFkZ2VFbGVtZW50O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGJhZGdlIGVsZW1lbnQgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQmFkZ2VFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBiYWRnZUVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgY29uc3QgYWN0aXZlQ2xhc3MgPSAnbWF0LWJhZGdlLWFjdGl2ZSc7XG4gICAgY29uc3QgY29udGVudENsYXNzID0gJ21hdC1iYWRnZS1jb250ZW50JztcblxuICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBiYWRnZXMgd2hpY2ggbWF5IGhhdmUgcGVyc2lzdGVkIGZyb20gYSBzZXJ2ZXItc2lkZSByZW5kZXIuXG4gICAgdGhpcy5fY2xlYXJFeGlzdGluZ0JhZGdlcyhjb250ZW50Q2xhc3MpO1xuICAgIGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgYG1hdC1iYWRnZS1jb250ZW50LSR7dGhpcy5faWR9YCk7XG4gICAgYmFkZ2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoY29udGVudENsYXNzKTtcbiAgICBiYWRnZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl9zdHJpbmdpZnlDb250ZW50KCk7XG5cbiAgICBpZiAodGhpcy5fYW5pbWF0aW9uTW9kZSA9PT0gJ05vb3BBbmltYXRpb25zJykge1xuICAgICAgYmFkZ2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ19tYXQtYW5pbWF0aW9uLW5vb3BhYmxlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGJhZGdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFkZ2VFbGVtZW50KTtcblxuICAgIC8vIGFuaW1hdGUgaW4gYWZ0ZXIgaW5zZXJ0aW9uXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5fYW5pbWF0aW9uTW9kZSAhPT0gJ05vb3BBbmltYXRpb25zJykge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBiYWRnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhZGdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFkZ2VFbGVtZW50O1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIGFyaWEtbGFiZWwgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlSG9zdEFyaWFEZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbjogc3RyaW5nLCBvbGREZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gZW5zdXJlIGNvbnRlbnQgYXZhaWxhYmxlIGJlZm9yZSBzZXR0aW5nIGxhYmVsXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuX3VwZGF0ZVRleHRDb250ZW50KCk7XG5cbiAgICBpZiAob2xkRGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oY29udGVudCwgb2xkRGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIGlmIChuZXdEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZShjb250ZW50LCBuZXdEZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFkZHMgY3NzIHRoZW1lIGNsYXNzIGdpdmVuIHRoZSBjb2xvciB0byB0aGUgY29tcG9uZW50IGhvc3QgKi9cbiAgcHJpdmF0ZSBfc2V0Q29sb3IoY29sb3JQYWxldHRlOiBUaGVtZVBhbGV0dGUpIHtcbiAgICBpZiAoY29sb3JQYWxldHRlICE9PSB0aGlzLl9jb2xvcikge1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtcbiAgICAgIGlmICh0aGlzLl9jb2xvcikge1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGBtYXQtYmFkZ2UtJHt0aGlzLl9jb2xvcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2xvclBhbGV0dGUpIHtcbiAgICAgICAgY2xhc3NMaXN0LmFkZChgbWF0LWJhZGdlLSR7Y29sb3JQYWxldHRlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgYW55IGV4aXN0aW5nIGJhZGdlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHNlcnZlci1zaWRlIHJlbmRlcmluZy4gKi9cbiAgcHJpdmF0ZSBfY2xlYXJFeGlzdGluZ0JhZGdlcyhjc3NDbGFzczogc3RyaW5nKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgLy8gVXNlIGEgcmV2ZXJzZSB3aGlsZSwgYmVjYXVzZSB3ZSdsbCBiZSByZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBsaXN0IGFzIHdlJ3JlIGl0ZXJhdGluZy5cbiAgICB3aGlsZSAoY2hpbGRDb3VudC0tKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q2hpbGQgPSBlbGVtZW50LmNoaWxkcmVuW2NoaWxkQ291bnRdO1xuXG4gICAgICBpZiAoY3VycmVudENoaWxkLmNsYXNzTGlzdC5jb250YWlucyhjc3NDbGFzcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChjdXJyZW50Q2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhZGdlIGNvbnRlbnQuICovXG4gIHByaXZhdGUgX3N0cmluZ2lmeUNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICAvLyBDb252ZXJ0IG51bGwgYW5kIHVuZGVmaW5lZCB0byBhbiBlbXB0eSBzdHJpbmcgd2hpY2ggaXMgY29uc2lzdGVudFxuICAgIC8vIHdpdGggaG93IEFuZ3VsYXIgaGFuZGxlcyB0aGVtIGluIGluc2lkZSB0ZW1wbGF0ZSBpbnRlcnBvbGF0aW9ucy5cbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50O1xuICAgIHJldHVybiBjb250ZW50ID09IG51bGwgPyAnJyA6IGAke2NvbnRlbnR9YDtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGlkZGVuOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vdmVybGFwOiBCb29sZWFuSW5wdXQ7XG59XG4iXX0=
Index: trip-planner-front/node_modules/@angular/material/esm2015/core/common-behaviors/common-module.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/esm2015/core/common-behaviors/common-module.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/esm2015/core/common-behaviors/common-module.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -16,5 +16,5 @@
 // Can be removed once the Material primary entry-point no longer
 // re-exports all secondary entry-points
-const VERSION = new Version('12.2.9');
+const VERSION = new Version('12.2.10');
 /** @docs-private */
 export function MATERIAL_SANITY_CHECKS_FACTORY() {
Index: trip-planner-front/node_modules/@angular/material/esm2015/core/version.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/esm2015/core/version.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/esm2015/core/version.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -8,4 +8,4 @@
 import { Version } from '@angular/core';
 /** Current version of Angular Material. */
-export const VERSION = new Version('12.2.9');
+export const VERSION = new Version('12.2.10');
 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0QywyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtWZXJzaW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEN1cnJlbnQgdmVyc2lvbiBvZiBBbmd1bGFyIE1hdGVyaWFsLiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
Index: trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header-intl.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header-intl.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header-intl.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -12,6 +12,4 @@
  * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and
  * include it in a custom provider.
- * @deprecated No longer being used. To be removed.
- * @breaking-change 13.0.0
  */
 export class MatSortHeaderIntl {
@@ -39,3 +37,3 @@
     useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY
 };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1oZWFkZXItaW50bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9zb3J0L3NvcnQtaGVhZGVyLWludGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7O0FBRTdCOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVFOzs7V0FHRztRQUNNLFlBQU8sR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQUN2RDs7OztZQVBBLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7O0FBU2hDLG9CQUFvQjtBQUNwQixNQUFNLFVBQVUscUNBQXFDLENBQUMsVUFBNkI7SUFDakYsT0FBTyxVQUFVLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsOEZBQThGO0lBQzlGLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRCxVQUFVLEVBQUUscUNBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBTa2lwU2VsZiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUbyBtb2RpZnkgdGhlIGxhYmVscyBhbmQgdGV4dCBkaXNwbGF5ZWQsIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBNYXRTb3J0SGVhZGVySW50bCBhbmRcbiAqIGluY2x1ZGUgaXQgaW4gYSBjdXN0b20gcHJvdmlkZXIuXG4gKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgYmVpbmcgdXNlZC4gVG8gYmUgcmVtb3ZlZC5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTMuMC4wXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE1hdFNvcnRIZWFkZXJJbnRsIHtcbiAgLyoqXG4gICAqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSBsYWJlbHMgaGVyZSBhcmUgY2hhbmdlZC4gVXNlIHRoaXMgdG8gbm90aWZ5XG4gICAqIGNvbXBvbmVudHMgaWYgdGhlIGxhYmVscyBoYXZlIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBNQVRfU09SVF9IRUFERVJfSU5UTF9QUk9WSURFUl9GQUNUT1JZKHBhcmVudEludGw6IE1hdFNvcnRIZWFkZXJJbnRsKSB7XG4gIHJldHVybiBwYXJlbnRJbnRsIHx8IG5ldyBNYXRTb3J0SGVhZGVySW50bCgpO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE1BVF9TT1JUX0hFQURFUl9JTlRMX1BST1ZJREVSID0ge1xuICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIE1hdFNvcnRIZWFkZXJJbnRsIGF2YWlsYWJsZSwgdXNlIHRoYXQuIE90aGVyd2lzZSwgcHJvdmlkZSBhIG5ldyBvbmUuXG4gIHByb3ZpZGU6IE1hdFNvcnRIZWFkZXJJbnRsLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgTWF0U29ydEhlYWRlckludGxdXSxcbiAgdXNlRmFjdG9yeTogTUFUX1NPUlRfSEVBREVSX0lOVExfUFJPVklERVJfRkFDVE9SWVxufTtcblxuIl19
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1oZWFkZXItaW50bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9zb3J0L3NvcnQtaGVhZGVyLWludGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7O0FBRTdCOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFFRTs7O1dBR0c7UUFDTSxZQUFPLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7S0FDdkQ7Ozs7WUFQQSxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQVNoQyxvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLFVBQTZCO0lBQ2pGLE9BQU8sVUFBVSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLDhGQUE4RjtJQUM5RixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsVUFBVSxFQUFFLHFDQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZSwgU2tpcFNlbGYsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogVG8gbW9kaWZ5IHRoZSBsYWJlbHMgYW5kIHRleHQgZGlzcGxheWVkLCBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgTWF0U29ydEhlYWRlckludGwgYW5kXG4gKiBpbmNsdWRlIGl0IGluIGEgY3VzdG9tIHByb3ZpZGVyLlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBNYXRTb3J0SGVhZGVySW50bCB7XG4gIC8qKlxuICAgKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgbGFiZWxzIGhlcmUgYXJlIGNoYW5nZWQuIFVzZSB0aGlzIHRvIG5vdGlmeVxuICAgKiBjb21wb25lbnRzIGlmIHRoZSBsYWJlbHMgaGF2ZSBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlczogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gTUFUX1NPUlRfSEVBREVSX0lOVExfUFJPVklERVJfRkFDVE9SWShwYXJlbnRJbnRsOiBNYXRTb3J0SGVhZGVySW50bCkge1xuICByZXR1cm4gcGFyZW50SW50bCB8fCBuZXcgTWF0U29ydEhlYWRlckludGwoKTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBNQVRfU09SVF9IRUFERVJfSU5UTF9QUk9WSURFUiA9IHtcbiAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBNYXRTb3J0SGVhZGVySW50bCBhdmFpbGFibGUsIHVzZSB0aGF0LiBPdGhlcndpc2UsIHByb3ZpZGUgYSBuZXcgb25lLlxuICBwcm92aWRlOiBNYXRTb3J0SGVhZGVySW50bCxcbiAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIE1hdFNvcnRIZWFkZXJJbnRsXV0sXG4gIHVzZUZhY3Rvcnk6IE1BVF9TT1JUX0hFQURFUl9JTlRMX1BST1ZJREVSX0ZBQ1RPUllcbn07XG5cbiJdfQ==
Index: trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/esm2015/sort/sort-header.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -6,9 +6,9 @@
  * found in the LICENSE file at https://angular.io/license
  */
+import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';
 import { coerceBooleanProperty } from '@angular/cdk/coercion';
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Optional, ViewEncapsulation, Inject, ElementRef, } from '@angular/core';
+import { ENTER, SPACE } from '@angular/cdk/keycodes';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, Input, Optional, ViewEncapsulation, } from '@angular/core';
 import { mixinDisabled } from '@angular/material/core';
-import { FocusMonitor } from '@angular/cdk/a11y';
-import { ENTER, SPACE } from '@angular/cdk/keycodes';
 import { merge } from 'rxjs';
 import { MatSort } from './sort';
@@ -38,5 +38,7 @@
     // `MatSort` is not optionally injected, but just asserted manually w/ better error.
     // tslint:disable-next-line: lightweight-tokens
-    _sort, _columnDef, _focusMonitor, _elementRef) {
+    _sort, _columnDef, _focusMonitor, _elementRef, 
+    /** @breaking-change 14.0.0 _ariaDescriber will be required. */
+    _ariaDescriber) {
         // Note that we use a string token for the `_columnDef`, because the value is provided both by
         // `material/table` and `cdk/table` and we can't have the CDK depending on Material,
@@ -50,4 +52,5 @@
         this._focusMonitor = _focusMonitor;
         this._elementRef = _elementRef;
+        this._ariaDescriber = _ariaDescriber;
         /**
          * Flag set to true when the indicator should be displayed while the sort is not active. Used to
@@ -69,8 +72,22 @@
         /** Sets the position of the arrow that displays when sorted. */
         this.arrowPosition = 'after';
+        // Default the action description to "Sort" because it's better than nothing.
+        // Without a description, the button's label comes from the sort header text content,
+        // which doesn't give any indication that it performs a sorting operation.
+        this._sortActionDescription = 'Sort';
         if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {
             throw getSortHeaderNotContainedWithinSortError();
         }
         this._handleStateChanges();
+    }
+    /**
+     * Description applied to MatSortHeader's button element with aria-describedby. This text should
+     * describe the action that will occur when the user clicks the sort header.
+     */
+    get sortActionDescription() {
+        return this._sortActionDescription;
+    }
+    set sortActionDescription(value) {
+        this._updateSortActionDescription(value);
     }
     /** Overrides the disable clear value of the containing MatSort for this MatSortable. */
@@ -85,4 +102,6 @@
         this._setAnimationTransitionState({ toState: this._isSorted() ? 'active' : this._arrowDirection });
         this._sort.register(this);
+        this._sortButton = this._elementRef.nativeElement.querySelector('[role="button"]');
+        this._updateSortActionDescription(this._sortActionDescription);
     }
     ngAfterViewInit() {
@@ -201,4 +220,19 @@
     _renderArrow() {
         return !this._isDisabled() || this._isSorted();
+    }
+    _updateSortActionDescription(newDescription) {
+        // We use AriaDescriber for the sort button instead of setting an `aria-label` because some
+        // screen readers (notably VoiceOver) will read both the column header *and* the button's label
+        // for every *cell* in the table, creating a lot of unnecessary noise.
+        var _a, _b;
+        // If _sortButton is undefined, the component hasn't been initialized yet so there's
+        // nothing to update in the DOM.
+        if (this._sortButton) {
+            // removeDescription will no-op if there is no existing message.
+            // TODO(jelbourn): remove optional chaining when AriaDescriber is required.
+            (_a = this._ariaDescriber) === null || _a === void 0 ? void 0 : _a.removeDescription(this._sortButton, this._sortActionDescription);
+            (_b = this._ariaDescriber) === null || _b === void 0 ? void 0 : _b.describe(this._sortButton, newDescription);
+        }
+        this._sortActionDescription = newDescription;
     }
     /** Handles changes in the sorting state. */
@@ -258,5 +292,6 @@
     { type: undefined, decorators: [{ type: Inject, args: ['MAT_SORT_HEADER_COLUMN_DEF',] }, { type: Optional }] },
     { type: FocusMonitor },
-    { type: ElementRef }
+    { type: ElementRef },
+    { type: AriaDescriber, decorators: [{ type: Inject, args: [AriaDescriber,] }, { type: Optional }] }
 ];
 MatSortHeader.propDecorators = {
@@ -264,5 +299,6 @@
     arrowPosition: [{ type: Input }],
     start: [{ type: Input }],
+    sortActionDescription: [{ type: Input }],
     disableClear: [{ type: Input }]
 };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1oZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvc29ydC9zb3J0LWhlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFjLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBQyx3Q0FBd0MsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxzREFBc0Q7QUFDdEQsb0JBQW9CO0FBQ3BCLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDO0NBQVEsQ0FBQyxDQUFDO0FBMkJuRDs7Ozs7Ozs7R0FRRztBQTJCSCxNQUFNLE9BQU8sYUFBYyxTQUFRLGtCQUFrQjtJQTJDbkQ7SUFDWTs7O09BR0c7SUFDSSxLQUF3QixFQUN2QixrQkFBcUM7SUFDN0Msb0ZBQW9GO0lBQ3BGLCtDQUErQztJQUM1QixLQUFjLEVBRXRCLFVBQWtDLEVBQ3JDLGFB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YUFBYTtpQkFDaEM7O2FBQ0Y7OztZQWxFTyxpQkFBaUI7WUFuQnZCLGlCQUFpQjtZQWVYLE9BQU8sdUJBMkhBLFFBQVE7NENBQ1IsTUFBTSxTQUFDLDRCQUE0QixjQUFHLFFBQVE7WUEvSHJELFlBQVk7WUFKbEIsVUFBVTs7O2lCQTJHVCxLQUFLLFNBQUMsaUJBQWlCOzRCQUd2QixLQUFLO29CQUdMLEtBQUs7MkJBR0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbmplY3QsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDYW5EaXNhYmxlLCBtaXhpbkRpc2FibGVkfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7Rm9jdXNNb25pdG9yfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0VOVEVSLCBTUEFDRX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7bWVyZ2UsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge01hdFNvcnQsIE1hdFNvcnRhYmxlfSBmcm9tICcuL3NvcnQnO1xuaW1wb3J0IHttYXRTb3J0QW5pbWF0aW9uc30gZnJvbSAnLi9zb3J0LWFuaW1hdGlvbnMnO1xuaW1wb3J0IHtTb3J0RGlyZWN0aW9ufSBmcm9tICcuL3NvcnQtZGlyZWN0aW9uJztcbmltcG9ydCB7Z2V0U29ydEhlYWRlck5vdENvbnRhaW5lZFdpdGhpblNvcnRFcnJvcn0gZnJvbSAnLi9zb3J0LWVycm9ycyc7XG5pbXBvcnQge01hdFNvcnRIZWFkZXJJbnRsfSBmcm9tICcuL3NvcnQtaGVhZGVyLWludGwnO1xuXG5cbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gdGhlIHNvcnQgaGVhZGVyLlxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmNvbnN0IF9NYXRTb3J0SGVhZGVyQmFzZSA9IG1peGluRGlzYWJsZWQoY2xhc3Mge30pO1xuXG4vKipcbiAqIFZhbGlkIHBvc2l0aW9ucyBmb3IgdGhlIGFycm93IHRvIGJlIGluIGZvciBpdHMgb3BhY2l0eSBhbmQgdHJhbnNsYXRpb24uIElmIHRoZSBzdGF0ZSBpcyBhXG4gKiBzb3J0IGRpcmVjdGlvbiwgdGhlIHBvc2l0aW9uIG9mIHRoZSBhcnJvdyB3aWxsIGJlIGFib3ZlL2JlbG93IGFuZCBvcGFjaXR5IDAuIElmIHRoZSBzdGF0ZSBpc1xuICogaGludCwgdGhlIGFycm93IHdpbGwgYmUgaW4gdGhlIGNlbnRlciB3aXRoIGEgc2xpZ2h0IG9wYWNpdHkuIEFjdGl2ZSBzdGF0ZSBtZWFucyB0aGUgYXJyb3cgd2lsbFxuICogYmUgZnVsbHkgb3BhcXVlIGluIHRoZSBjZW50ZXIuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBBcnJvd1ZpZXdTdGF0ZSA9IFNvcnREaXJlY3Rpb24gfCAnaGludCcgfCAnYWN0aXZlJztcblxuLyoqXG4gKiBTdGF0ZXMgZGVzY3JpYmluZyB0aGUgYXJyb3cncyBhbmltYXRlZCBwb3NpdGlvbiAoYW5pbWF0aW5nIGZyb21TdGF0ZSB0byB0b1N0YXRlKS5cbiAqIElmIHRoZSBmcm9tU3RhdGUgaXMgbm90IGRlZmluZWQsIHRoZXJlIHdpbGwgYmUgbm8gYW5pbWF0ZWQgdHJhbnNpdGlvbiB0byB0aGUgdG9TdGF0ZS5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnJvd1ZpZXdTdGF0ZVRyYW5zaXRpb24ge1xuICBmcm9tU3RhdGU/OiBBcnJvd1ZpZXdTdGF0ZTtcbiAgdG9TdGF0ZT86IEFycm93Vmlld1N0YXRlO1xufVxuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgYE1hdFNvcnRIZWFkZXJgLiAqL1xuaW50ZXJmYWNlIE1hdFNvcnRIZWFkZXJDb2x1bW5EZWYge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXBwbGllcyBzb3J0aW5nIGJlaGF2aW9yIChjbGljayB0byBjaGFuZ2Ugc29ydCkgYW5kIHN0eWxlcyB0byBhbiBlbGVtZW50LCBpbmNsdWRpbmcgYW5cbiAqIGFycm93IHRvIGRpc3BsYXkgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb24uXG4gKlxuICogTXVzdCBiZSBwcm92aWRlZCB3aXRoIGFuIGlkIGFuZCBjb250YWluZWQgd2l0aGluIGEgcGFyZW50IE1hdFNvcnQgZGlyZWN0aXZlLlxuICpcbiAqIElmIHVzZWQgb24gaGVhZGVyIGNlbGxzIGluIGEgQ2RrVGFibGUsIGl0IHdpbGwgYXV0b21hdGljYWxseSBkZWZhdWx0IGl0cyBpZCBmcm9tIGl0cyBjb250YWluaW5nXG4gKiBjb2x1bW4gZGVmaW5pdGlvbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW21hdC1zb3J0LWhlYWRlcl0nLFxuICBleHBvcnRBczogJ21hdFNvcnRIZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJ3NvcnQtaGVhZGVyLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc29ydC1oZWFkZXIuY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LXNvcnQtaGVhZGVyJyxcbiAgICAnKGNsaWNrKSc6ICdfaGFuZGxlQ2xpY2soKScsXG4gICAgJyhrZXlkb3duKSc6ICdfaGFuZGxlS2V5ZG93bigkZXZlbnQpJyxcbiAgICAnKG1vdXNlZW50ZXIpJzogJ19zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSh0cnVlKScsXG4gICAgJyhtb3VzZWxlYXZlKSc6ICdfc2V0SW5kaWNhdG9ySGludFZpc2libGUoZmFsc2UpJyxcbiAgICAnW2F0dHIuYXJpYS1zb3J0XSc6ICdfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKScsXG4gICAgJ1tjbGFzcy5tYXQtc29ydC1oZWFkZXItZGlzYWJsZWRdJzogJ19pc0Rpc2FibGVkKCknLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICBtYXRTb3J0QW5pbWF0aW9ucy5pbmRpY2F0b3IsXG4gICAgbWF0U29ydEFuaW1hdGlvbnMubGVmdFBvaW50ZXIsXG4gICAgbWF0U29ydEFuaW1hdGlvbnMucmlnaHRQb2ludGVyLFxuICAgIG1hdFNvcnRBbmltYXRpb25zLmFycm93T3BhY2l0eSxcbiAgICBtYXRTb3J0QW5pbWF0aW9ucy5hcnJvd1Bvc2l0aW9uLFxuICAgIG1hdFNvcnRBbmltYXRpb25zLmFsbG93Q2hpbGRyZW4sXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWF0U29ydEhlYWRlciBleHRlbmRzIF9NYXRTb3J0SGVhZGVyQmFzZVxuICAgIGltcGxlbWVudHMgQ2FuRGlzYWJsZSwgTWF0U29ydGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBfcmVyZW5kZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogRmxhZyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBpbmRpY2F0b3Igc2hvdWxkIGJlIGRpc3BsYXllZCB3aGlsZSB0aGUgc29ydCBpcyBub3QgYWN0aXZlLiBVc2VkIHRvXG4gICAqIHByb3ZpZGUgYW4gYWZmb3JkYW5jZSB0aGF0IHRoZSBoZWFkZXIgaXMgc29ydGFibGUgYnkgc2hvd2luZyBvbiBmb2N1cyBhbmQgaG92ZXIuXG4gICAqL1xuICBfc2hvd0luZGljYXRvckhpbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHZpZXcgdHJhbnNpdGlvbiBzdGF0ZSBvZiB0aGUgYXJyb3cgKHRyYW5zbGF0aW9uLyBvcGFjaXR5KSAtIGluZGljYXRlcyBpdHMgYGZyb21gIGFuZCBgdG9gXG4gICAqIHBvc2l0aW9uIHRocm91Z2ggdGhlIGFuaW1hdGlvbi4gSWYgYW5pbWF0aW9ucyBhcmUgY3VycmVudGx5IGRpc2FibGVkLCB0aGUgZnJvbVN0YXRlIGlzIHJlbW92ZWRcbiAgICogc28gdGhhdCB0aGVyZSBpcyBubyBhbmltYXRpb24gZGlzcGxheWVkLlxuICAgKi9cbiAgX3ZpZXdTdGF0ZTogQXJyb3dWaWV3U3RhdGVUcmFuc2l0aW9uID0geyB9O1xuXG4gIC8qKiBUaGUgZGlyZWN0aW9uIHRoZSBhcnJvdyBzaG91bGQgYmUgZmFjaW5nIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzdGF0ZS4gKi9cbiAgX2Fycm93RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgc3RhdGUgYW5pbWF0aW9uIHNob3VsZCBzaG93IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gdGhlIGBmcm9tYCBhbmQgYHRvYCBzdGF0ZXMuXG4gICAqL1xuICBfZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJRCBvZiB0aGlzIHNvcnQgaGVhZGVyLiBJZiB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIENka0NvbHVtbkRlZiwgdGhpcyB3aWxsIGRlZmF1bHQgdG9cbiAgICogdGhlIGNvbHVtbidzIG5hbWUuXG4gICAqL1xuICBASW5wdXQoJ21hdC1zb3J0LWhlYWRlcicpIGlkOiBzdHJpbmc7XG5cbiAgLyoqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBhcnJvdyB0aGF0IGRpc3BsYXlzIHdoZW4gc29ydGVkLiAqL1xuICBASW5wdXQoKSBhcnJvd1Bvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgPSAnYWZ0ZXInO1xuXG4gIC8qKiBPdmVycmlkZXMgdGhlIHNvcnQgc3RhcnQgdmFsdWUgb2YgdGhlIGNvbnRhaW5pbmcgTWF0U29ydCBmb3IgdGhpcyBNYXRTb3J0YWJsZS4gKi9cbiAgQElucHV0KCkgc3RhcnQ6ICdhc2MnIHwgJ2Rlc2MnO1xuXG4gIC8qKiBPdmVycmlkZXMgdGhlIGRpc2FibGUgY2xlYXIgdmFsdWUgb2YgdGhlIGNvbnRhaW5pbmcgTWF0U29ydCBmb3IgdGhpcyBNYXRTb3J0YWJsZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVDbGVhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcjsgfVxuICBzZXQgZGlzYWJsZUNsZWFyKHYpIHsgdGhpcy5fZGlzYWJsZUNsZWFyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpOyB9XG4gIHByaXZhdGUgX2Rpc2FibGVDbGVhcjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAqIEBkZXByZWNhdGVkIGBfaW50bGAgcGFyYW1ldGVyIGlzbid0IGJlaW5nIHVzZWQgYW55bW9yZSBhbmQgaXQnbGwgYmUgcmVtb3ZlZC5cbiAgICAgICAgICAgICAgICogQGJyZWFraW5nLWNoYW5nZSAxMy4wLjBcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHB1YmxpYyBfaW50bDogTWF0U29ydEhlYWRlckludGwsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgLy8gYE1hdFNvcnRgIGlzIG5vdCBvcHRpb25hbGx5IGluamVjdGVkLCBidXQganVzdCBhc3NlcnRlZCBtYW51YWxseSB3LyBiZXR0ZXIgZXJyb3IuXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbGlnaHR3ZWlnaHQtdG9rZW5zXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBfc29ydDogTWF0U29ydCxcbiAgICAgICAgICAgICAgQEluamVjdCgnTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYnKSBAT3B0aW9uYWwoKVxuICAgICAgICAgICAgICAgICAgcHVibGljIF9jb2x1bW5EZWY6IE1hdFNvcnRIZWFkZXJDb2x1bW5EZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIC8vIE5vdGUgdGhhdCB3ZSB1c2UgYSBzdHJpbmcgdG9rZW4gZm9yIHRoZSBgX2NvbHVtbkRlZmAsIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGJvdGggYnlcbiAgICAvLyBgbWF0ZXJpYWwvdGFibGVgIGFuZCBgY2RrL3RhYmxlYCBhbmQgd2UgY2FuJ3QgaGF2ZSB0aGUgQ0RLIGRlcGVuZGluZyBvbiBNYXRlcmlhbCxcbiAgICAvLyBhbmQgd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgdGhlIHNvcnQgaGVhZGVyIGRlcGVuZGluZyBvbiB0aGUgQ0RLIHRhYmxlIGJlY2F1c2VcbiAgICAvLyBvZiB0aGlzIHNpbmdsZSByZWZlcmVuY2UuXG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghX3NvcnQgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgIHRocm93IGdldFNvcnRIZWFkZXJOb3RDb250YWluZWRXaXRoaW5Tb3J0RXJyb3IoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVTdGF0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5pZCAmJiB0aGlzLl9jb2x1bW5EZWYpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLl9jb2x1bW5EZWYubmFtZTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGFuZCBzZXQgdGhlIHZpZXcgc3RhdGUgdG8gYmUgaW1tZWRpYXRlbHkgdGhhdCBzdGF0ZS5cbiAgICB0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpO1xuICAgIHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZShcbiAgICAgICAge3RvU3RhdGU6IHRoaXMuX2lzU29ydGVkKCkgPyAnYWN0aXZlJyA6IHRoaXMuX2Fycm93RGlyZWN0aW9ufSk7XG5cbiAgICB0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFdlIHVzZSB0aGUgZm9jdXMgbW9uaXRvciBiZWNhdXNlIHdlIGFsc28gd2FudCB0byBzdHlsZVxuICAgIC8vIHRoaW5ncyBkaWZmZXJlbnRseSBiYXNlZCBvbiB0aGUgZm9jdXMgb3JpZ2luLlxuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSAhIW9yaWdpbjtcbiAgICAgIGlmIChuZXdTdGF0ZSAhPT0gdGhpcy5fc2hvd0luZGljYXRvckhpbnQpIHtcbiAgICAgICAgdGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUobmV3U3RhdGUpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKTtcbiAgICB0aGlzLl9zb3J0LmRlcmVnaXN0ZXIodGhpcyk7XG4gICAgdGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBcImhpbnRcIiBzdGF0ZSBzdWNoIHRoYXQgdGhlIGFycm93IHdpbGwgYmUgc2VtaS10cmFuc3BhcmVudGx5IGRpc3BsYXllZCBhcyBhIGhpbnQgdG8gdGhlXG4gICAqIHVzZXIgc2hvd2luZyB3aGF0IHRoZSBhY3RpdmUgc29ydCB3aWxsIGJlY29tZS4gSWYgc2V0IHRvIGZhbHNlLCB0aGUgYXJyb3cgd2lsbCBmYWRlIGF3YXkuXG4gICAqL1xuICBfc2V0SW5kaWNhdG9ySGludFZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgIC8vIE5vLW9wIGlmIHRoZSBzb3J0IGhlYWRlciBpcyBkaXNhYmxlZCAtIHNob3VsZCBub3QgbWFrZSB0aGUgaGludCB2aXNpYmxlLlxuICAgIGlmICh0aGlzLl9pc0Rpc2FibGVkKCkgJiYgdmlzaWJsZSkgeyByZXR1cm47IH1cblxuICAgIHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50ID0gdmlzaWJsZTtcblxuICAgIGlmICghdGhpcy5faXNTb3J0ZWQoKSkge1xuICAgICAgdGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLl9zaG93SW5kaWNhdG9ySGludCkge1xuICAgICAgICB0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTogdGhpcy5fYXJyb3dEaXJlY3Rpb24sIHRvU3RhdGU6ICdoaW50J30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6ICdoaW50JywgdG9TdGF0ZTogdGhpcy5fYXJyb3dEaXJlY3Rpb259KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYW5pbWF0aW9uIHRyYW5zaXRpb24gdmlldyBzdGF0ZSBmb3IgdGhlIGFycm93J3MgcG9zaXRpb24gYW5kIG9wYWNpdHkuIElmIHRoZVxuICAgKiBgZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbmAgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBmcm9tU3RhdGVgIHdpbGwgYmUgaWdub3JlZCBzbyB0aGF0XG4gICAqIG5vIGFuaW1hdGlvbiBhcHBlYXJzLlxuICAgKi9cbiAgX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh2aWV3U3RhdGU6IEFycm93Vmlld1N0YXRlVHJhbnNpdGlvbikge1xuICAgIHRoaXMuX3ZpZXdTdGF0ZSA9IHZpZXdTdGF0ZSB8fCB7IH07XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGZvciBhcnJvdyBwb3NpdGlvbiBzdGF0ZSAob3BhY2l0eS90cmFuc2xhdGlvbikgc2hvdWxkIGJlIGRpc2FibGVkLFxuICAgIC8vIHJlbW92ZSB0aGUgZnJvbVN0YXRlIHNvIHRoYXQgaXQganVtcHMgcmlnaHQgdG8gdGhlIHRvU3RhdGUuXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZpZXdTdGF0ZSA9IHt0b1N0YXRlOiB2aWV3U3RhdGUudG9TdGF0ZX07XG4gICAgfVxuICB9XG5cbiAgLyoqIFRyaWdnZXJzIHRoZSBzb3J0IG9uIHRoaXMgc29ydCBoZWFkZXIgYW5kIHJlbW92ZXMgdGhlIGluZGljYXRvciBoaW50LiAqL1xuICBfdG9nZ2xlT25JbnRlcmFjdGlvbigpIHtcbiAgICB0aGlzLl9zb3J0LnNvcnQodGhpcyk7XG5cbiAgICAvLyBEbyBub3Qgc2hvdyB0aGUgYW5pbWF0aW9uIGlmIHRoZSBoZWFkZXIgd2FzIGFscmVhZHkgc2hvd24gaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLlxuICAgIGlmICh0aGlzLl92aWV3U3RhdGUudG9TdGF0ZSA9PT0gJ2hpbnQnIHx8IHRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlID09PSAnYWN0aXZlJykge1xuICAgICAgdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5faXNEaXNhYmxlZCgpKSB7XG4gICAgICB0aGlzLl9zb3J0LnNvcnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoKSAmJiAoZXZlbnQua2V5Q29kZSA9PT0gU1BBQ0UgfHwgZXZlbnQua2V5Q29kZSA9PT0gRU5URVIpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fdG9nZ2xlT25JbnRlcmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgTWF0U29ydEhlYWRlciBpcyBjdXJyZW50bHkgc29ydGVkIGluIGVpdGhlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlci4gKi9cbiAgX2lzU29ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3J0LmFjdGl2ZSA9PSB0aGlzLmlkICYmXG4gICAgICAgICh0aGlzLl9zb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgfHwgdGhpcy5fc29ydC5kaXJlY3Rpb24gPT09ICdkZXNjJyk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgYW5pbWF0aW9uIHN0YXRlIGZvciB0aGUgYXJyb3cgZGlyZWN0aW9uIChpbmRpY2F0b3IgYW5kIHBvaW50ZXJzKS4gKi9cbiAgX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuX2lzU29ydGVkKCkgPyAnYWN0aXZlLScgOiAnJ30ke3RoaXMuX2Fycm93RGlyZWN0aW9ufWA7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgYXJyb3cgcG9zaXRpb24gc3RhdGUgKG9wYWNpdHksIHRyYW5zbGF0aW9uKS4gKi9cbiAgX2dldEFycm93Vmlld1N0YXRlKCkge1xuICAgIGNvbnN0IGZyb21TdGF0ZSA9IHRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7XG4gICAgcmV0dXJuIChmcm9tU3RhdGUgPyBgJHtmcm9tU3RhdGV9LXRvLWAgOiAnJykgKyB0aGlzLl92aWV3U3RhdGUudG9TdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGFycm93IHNob3VsZCBiZSBwb2ludGluZy4gSWYgaXQgaXMgbm90IHNvcnRlZCwgdGhlIGFycm93IHNob3VsZCBiZVxuICAgKiBmYWNpbmcgdGhlIHN0YXJ0IGRpcmVjdGlvbi4gT3RoZXJ3aXNlIGlmIGl0IGlzIHNvcnRlZCwgdGhlIGFycm93IHNob3VsZCBwb2ludCBpbiB0aGUgY3VycmVudGx5XG4gICAqIGFjdGl2ZSBzb3J0ZWQgZGlyZWN0aW9uLiBUaGUgcmVhc29uIHRoaXMgaXMgdXBkYXRlZCB0aHJvdWdoIGEgZnVuY3Rpb24gaXMgYmVjYXVzZSB0aGUgZGlyZWN0aW9uXG4gICAqIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgc3BlY2lmaWMgdGltZXMgLSB3aGVuIGRlYWN0aXZhdGVkIGJ1dCB0aGUgaGludCBpcyBkaXNwbGF5ZWQgYW5kIHdoZW5cbiAgICogdGhlIHNvcnQgaXMgYWN0aXZlIGFuZCB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIE90aGVyd2lzZSB0aGUgYXJyb3cncyBkaXJlY3Rpb24gc2hvdWxkIGxpbmdlclxuICAgKiBpbiBjYXNlcyBzdWNoIGFzIHRoZSBzb3J0IGJlY29taW5nIGRlYWN0aXZhdGVkIGJ1dCB3ZSB3YW50IHRvIGFuaW1hdGUgdGhlIGFycm93IGF3YXkgd2hpbGVcbiAgICogcHJlc2VydmluZyBpdHMgZGlyZWN0aW9uLCBldmVuIHRob3VnaCB0aGUgbmV4dCBzb3J0IGRpcmVjdGlvbiBpcyBhY3R1YWxseSBkaWZmZXJlbnQgYW5kIHNob3VsZFxuICAgKiBvbmx5IGJlIGNoYW5nZWQgb25jZSB0aGUgYXJyb3cgZGlzcGxheXMgYWdhaW4gKGhpbnQgb3IgYWN0aXZhdGlvbikuXG4gICAqL1xuICBfdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSB7XG4gICAgdGhpcy5fYXJyb3dEaXJlY3Rpb24gPSB0aGlzLl9pc1NvcnRlZCgpID9cbiAgICAgICAgdGhpcy5fc29ydC5kaXJlY3Rpb24gOlxuICAgICAgICAodGhpcy5zdGFydCB8fCB0aGlzLl9zb3J0LnN0YXJ0KTtcbiAgfVxuXG4gIF9pc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3J0LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYXJpYS1zb3J0IGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgc29ydCBoZWFkZXIuIElmIHRoaXMgaGVhZGVyXG4gICAqIGlzIG5vdCBzb3J0ZWQsIHJldHVybnMgbnVsbCBzbyB0aGF0IHRoZSBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBob3N0IGVsZW1lbnQuIEFyaWEgc3BlY1xuICAgKiBzYXlzIHRoYXQgdGhlIGFyaWEtc29ydCBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSBwcmVzZW50IG9uIG9uZSBoZWFkZXIgYXQgYSB0aW1lLCBzbyByZW1vdmluZ1xuICAgKiBlbnN1cmVzIHRoaXMgaXMgdHJ1ZS5cbiAgICovXG4gIF9nZXRBcmlhU29ydEF0dHJpYnV0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU29ydGVkKCkpIHtcbiAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NvcnQuZGlyZWN0aW9uID09ICdhc2MnID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYXJyb3cgaW5zaWRlIHRoZSBzb3J0IGhlYWRlciBzaG91bGQgYmUgcmVuZGVyZWQuICovXG4gIF9yZW5kZXJBcnJvdygpIHtcbiAgICByZXR1cm4gIXRoaXMuX2lzRGlzYWJsZWQoKSB8fCB0aGlzLl9pc1NvcnRlZCgpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgY2hhbmdlcyBpbiB0aGUgc29ydGluZyBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlU3RhdGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uID1cbiAgICAgIG1lcmdlKHRoaXMuX3NvcnQuc29ydENoYW5nZSwgdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLCB0aGlzLl9pbnRsLmNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NvcnRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKTtcblxuICAgICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBhbmltYXRpb24gaWYgdGhlIGhlYWRlciB3YXMgYWxyZWFkeSBzaG93biBpbiB0aGUgcmlnaHQgcG9zaXRpb24uXG4gICAgICAgICAgaWYgKHRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlID09PSAnaGludCcgfHwgdGhpcy5fdmlld1N0YXRlLnRvU3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTogdGhpcy5fYXJyb3dEaXJlY3Rpb24sIHRvU3RhdGU6ICdhY3RpdmUnfSk7XG4gICAgICAgICAgdGhpcy5fc2hvd0luZGljYXRvckhpbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoaXMgaGVhZGVyIHdhcyByZWNlbnRseSBhY3RpdmUgYW5kIG5vdyBubyBsb25nZXIgc29ydGVkLCBhbmltYXRlIGF3YXkgdGhlIGFycm93LlxuICAgICAgICBpZiAoIXRoaXMuX2lzU29ydGVkKCkgJiYgdGhpcy5fdmlld1N0YXRlICYmIHRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlID09PSAnYWN0aXZlJykge1xuICAgICAgICAgIHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTogJ2FjdGl2ZScsIHRvU3RhdGU6IHRoaXMuX2Fycm93RGlyZWN0aW9ufSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVDbGVhcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbn1cbiJdfQ==
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1oZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvc29ydC9zb3J0LWhlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLE9BQU8sRUFBYyxNQUFNLFFBQVEsQ0FBQztBQUM1QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsc0RBQXNEO0FBQ3RELG9CQUFvQjtBQUNwQixNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztDQUFRLENBQUMsQ0FBQztBQTJCbkQ7Ozs7Ozs7O0dBUUc7QUEyQkgsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBa0I7SUFpRW5EO0lBQ1k7OztPQUdHO0lBQ0ksS0FBd0IsRUFDdkIsa0JBQXFDO0lBQzdDLG9GQUFvRjtJQUNwRiwrQ0FBK0M7SUFDNUIsS0FBYyxFQUV0QixVQUFr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QUFZO1lBUWpDLFVBQVU7WUFSSixhQUFhLHVCQXlLTixNQUFNLFNBQUMsYUFBYSxjQUFHLFFBQVE7OztpQkE3QzNDLEtBQUssU0FBQyxpQkFBaUI7NEJBR3ZCLEtBQUs7b0JBR0wsS0FBSztvQ0FNTCxLQUFLOzJCQWFMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBcmlhRGVzY3JpYmVyLCBGb2N1c01vbml0b3J9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge0VOVEVSLCBTUEFDRX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuRGlzYWJsZSwgbWl4aW5EaXNhYmxlZH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge21lcmdlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNYXRTb3J0LCBNYXRTb3J0YWJsZX0gZnJvbSAnLi9zb3J0JztcbmltcG9ydCB7bWF0U29ydEFuaW1hdGlvbnN9IGZyb20gJy4vc29ydC1hbmltYXRpb25zJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnLi9zb3J0LWRpcmVjdGlvbic7XG5pbXBvcnQge2dldFNvcnRIZWFkZXJOb3RDb250YWluZWRXaXRoaW5Tb3J0RXJyb3J9IGZyb20gJy4vc29ydC1lcnJvcnMnO1xuaW1wb3J0IHtNYXRTb3J0SGVhZGVySW50bH0gZnJvbSAnLi9zb3J0LWhlYWRlci1pbnRsJztcblxuXG4vLyBCb2lsZXJwbGF0ZSBmb3IgYXBwbHlpbmcgbWl4aW5zIHRvIHRoZSBzb3J0IGhlYWRlci5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5jb25zdCBfTWF0U29ydEhlYWRlckJhc2UgPSBtaXhpbkRpc2FibGVkKGNsYXNzIHt9KTtcblxuLyoqXG4gKiBWYWxpZCBwb3NpdGlvbnMgZm9yIHRoZSBhcnJvdyB0byBiZSBpbiBmb3IgaXRzIG9wYWNpdHkgYW5kIHRyYW5zbGF0aW9uLiBJZiB0aGUgc3RhdGUgaXMgYVxuICogc29ydCBkaXJlY3Rpb24sIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXJyb3cgd2lsbCBiZSBhYm92ZS9iZWxvdyBhbmQgb3BhY2l0eSAwLiBJZiB0aGUgc3RhdGUgaXNcbiAqIGhpbnQsIHRoZSBhcnJvdyB3aWxsIGJlIGluIHRoZSBjZW50ZXIgd2l0aCBhIHNsaWdodCBvcGFjaXR5LiBBY3RpdmUgc3RhdGUgbWVhbnMgdGhlIGFycm93IHdpbGxcbiAqIGJlIGZ1bGx5IG9wYXF1ZSBpbiB0aGUgY2VudGVyLlxuICpcbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgQXJyb3dWaWV3U3RhdGUgPSBTb3J0RGlyZWN0aW9uIHwgJ2hpbnQnIHwgJ2FjdGl2ZSc7XG5cbi8qKlxuICogU3RhdGVzIGRlc2NyaWJpbmcgdGhlIGFycm93J3MgYW5pbWF0ZWQgcG9zaXRpb24gKGFuaW1hdGluZyBmcm9tU3RhdGUgdG8gdG9TdGF0ZSkuXG4gKiBJZiB0aGUgZnJvbVN0YXRlIGlzIG5vdCBkZWZpbmVkLCB0aGVyZSB3aWxsIGJlIG5vIGFuaW1hdGVkIHRyYW5zaXRpb24gdG8gdGhlIHRvU3RhdGUuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJyb3dWaWV3U3RhdGVUcmFuc2l0aW9uIHtcbiAgZnJvbVN0YXRlPzogQXJyb3dWaWV3U3RhdGU7XG4gIHRvU3RhdGU/OiBBcnJvd1ZpZXdTdGF0ZTtcbn1cblxuLyoqIENvbHVtbiBkZWZpbml0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIGBNYXRTb3J0SGVhZGVyYC4gKi9cbmludGVyZmFjZSBNYXRTb3J0SGVhZGVyQ29sdW1uRGVmIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgc29ydGluZyBiZWhhdmlvciAoY2xpY2sgdG8gY2hhbmdlIHNvcnQpIGFuZCBzdHlsZXMgdG8gYW4gZWxlbWVudCwgaW5jbHVkaW5nIGFuXG4gKiBhcnJvdyB0byBkaXNwbGF5IHRoZSBjdXJyZW50IHNvcnQgZGlyZWN0aW9uLlxuICpcbiAqIE11c3QgYmUgcHJvdmlkZWQgd2l0aCBhbiBpZCBhbmQgY29udGFpbmVkIHdpdGhpbiBhIHBhcmVudCBNYXRTb3J0IGRpcmVjdGl2ZS5cbiAqXG4gKiBJZiB1c2VkIG9uIGhlYWRlciBjZWxscyBpbiBhIENka1RhYmxlLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGVmYXVsdCBpdHMgaWQgZnJvbSBpdHMgY29udGFpbmluZ1xuICogY29sdW1uIGRlZmluaXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1ttYXQtc29ydC1oZWFkZXJdJyxcbiAgZXhwb3J0QXM6ICdtYXRTb3J0SGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICdzb3J0LWhlYWRlci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3NvcnQtaGVhZGVyLmNzcyddLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ21hdC1zb3J0LWhlYWRlcicsXG4gICAgJyhjbGljayknOiAnX2hhbmRsZUNsaWNrKCknLFxuICAgICcoa2V5ZG93biknOiAnX2hhbmRsZUtleWRvd24oJGV2ZW50KScsXG4gICAgJyhtb3VzZWVudGVyKSc6ICdfc2V0SW5kaWNhdG9ySGludFZpc2libGUodHJ1ZSknLFxuICAgICcobW91c2VsZWF2ZSknOiAnX3NldEluZGljYXRvckhpbnRWaXNpYmxlKGZhbHNlKScsXG4gICAgJ1thdHRyLmFyaWEtc29ydF0nOiAnX2dldEFyaWFTb3J0QXR0cmlidXRlKCknLFxuICAgICdbY2xhc3MubWF0LXNvcnQtaGVhZGVyLWRpc2FibGVkXSc6ICdfaXNEaXNhYmxlZCgpJyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGlucHV0czogWydkaXNhYmxlZCddLFxuICBhbmltYXRpb25zOiBbXG4gICAgbWF0U29ydEFuaW1hdGlvbnMuaW5kaWNhdG9yLFxuICAgIG1hdFNvcnRBbmltYXRpb25zLmxlZnRQb2ludGVyLFxuICAgIG1hdFNvcnRBbmltYXRpb25zLnJpZ2h0UG9pbnRlcixcbiAgICBtYXRTb3J0QW5pbWF0aW9ucy5hcnJvd09wYWNpdHksXG4gICAgbWF0U29ydEFuaW1hdGlvbnMuYXJyb3dQb3NpdGlvbixcbiAgICBtYXRTb3J0QW5pbWF0aW9ucy5hbGxvd0NoaWxkcmVuLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1hdFNvcnRIZWFkZXIgZXh0ZW5kcyBfTWF0U29ydEhlYWRlckJhc2VcbiAgICBpbXBsZW1lbnRzIENhbkRpc2FibGUsIE1hdFNvcnRhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgX3JlcmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHdpdGggcm9sZT1cImJ1dHRvblwiIGluc2lkZSB0aGlzIGNvbXBvbmVudCdzIHZpZXcuIFdlIG5lZWQgdGhpc1xuICAgKiBpbiBvcmRlciB0byBhcHBseSBhIGRlc2NyaXB0aW9uIHdpdGggQXJpYURlc2NyaWJlci5cbiAgICovXG4gIHByaXZhdGUgX3NvcnRCdXR0b246IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBGbGFnIHNldCB0byB0cnVlIHdoZW4gdGhlIGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkIHdoaWxlIHRoZSBzb3J0IGlzIG5vdCBhY3RpdmUuIFVzZWQgdG9cbiAgICogcHJvdmlkZSBhbiBhZmZvcmRhbmNlIHRoYXQgdGhlIGhlYWRlciBpcyBzb3J0YWJsZSBieSBzaG93aW5nIG9uIGZvY3VzIGFuZCBob3Zlci5cbiAgICovXG4gIF9zaG93SW5kaWNhdG9ySGludDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlldyB0cmFuc2l0aW9uIHN0YXRlIG9mIHRoZSBhcnJvdyAodHJhbnNsYXRpb24vIG9wYWNpdHkpIC0gaW5kaWNhdGVzIGl0cyBgZnJvbWAgYW5kIGB0b2BcbiAgICogcG9zaXRpb24gdGhyb3VnaCB0aGUgYW5pbWF0aW9uLiBJZiBhbmltYXRpb25zIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQsIHRoZSBmcm9tU3RhdGUgaXMgcmVtb3ZlZFxuICAgKiBzbyB0aGF0IHRoZXJlIGlzIG5vIGFuaW1hdGlvbiBkaXNwbGF5ZWQuXG4gICAqL1xuICBfdmlld1N0YXRlOiBBcnJvd1ZpZXdTdGF0ZVRyYW5zaXRpb24gPSB7IH07XG5cbiAgLyoqIFRoZSBkaXJlY3Rpb24gdGhlIGFycm93IHNob3VsZCBiZSBmYWNpbmcgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHN0YXRlLiAqL1xuICBfYXJyb3dEaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBzdGF0ZSBhbmltYXRpb24gc2hvdWxkIHNob3cgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiB0aGUgYGZyb21gIGFuZCBgdG9gIHN0YXRlcy5cbiAgICovXG4gIF9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoaXMgc29ydCBoZWFkZXIuIElmIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgQ2RrQ29sdW1uRGVmLCB0aGlzIHdpbGwgZGVmYXVsdCB0b1xuICAgKiB0aGUgY29sdW1uJ3MgbmFtZS5cbiAgICovXG4gIEBJbnB1dCgnbWF0LXNvcnQtaGVhZGVyJykgaWQ6IHN0cmluZztcblxuICAvKiogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGFycm93IHRoYXQgZGlzcGxheXMgd2hlbiBzb3J0ZWQuICovXG4gIEBJbnB1dCgpIGFycm93UG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyA9ICdhZnRlcic7XG5cbiAgLyoqIE92ZXJyaWRlcyB0aGUgc29ydCBzdGFydCB2YWx1ZSBvZiB0aGUgY29udGFpbmluZyBNYXRTb3J0IGZvciB0aGlzIE1hdFNvcnRhYmxlLiAqL1xuICBASW5wdXQoKSBzdGFydDogJ2FzYycgfCAnZGVzYyc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGFwcGxpZWQgdG8gTWF0U29ydEhlYWRlcidzIGJ1dHRvbiBlbGVtZW50IHdpdGggYXJpYS1kZXNjcmliZWRieS4gVGhpcyB0ZXh0IHNob3VsZFxuICAgKiBkZXNjcmliZSB0aGUgYWN0aW9uIHRoYXQgd2lsbCBvY2N1ciB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgc29ydCBoZWFkZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc29ydEFjdGlvbkRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbjtcbiAgfVxuICBzZXQgc29ydEFjdGlvbkRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24odmFsdWUpO1xuICB9XG4gIC8vIERlZmF1bHQgdGhlIGFjdGlvbiBkZXNjcmlwdGlvbiB0byBcIlNvcnRcIiBiZWNhdXNlIGl0J3MgYmV0dGVyIHRoYW4gbm90aGluZy5cbiAgLy8gV2l0aG91dCBhIGRlc2NyaXB0aW9uLCB0aGUgYnV0dG9uJ3MgbGFiZWwgY29tZXMgZnJvbSB0aGUgc29ydCBoZWFkZXIgdGV4dCBjb250ZW50LFxuICAvLyB3aGljaCBkb2Vzbid0IGdpdmUgYW55IGluZGljYXRpb24gdGhhdCBpdCBwZXJmb3JtcyBhIHNvcnRpbmcgb3BlcmF0aW9uLlxuICBwcml2YXRlIF9zb3J0QWN0aW9uRGVzY3JpcHRpb246IHN0cmluZyA9ICdTb3J0JztcblxuICAvKiogT3ZlcnJpZGVzIHRoZSBkaXNhYmxlIGNsZWFyIHZhbHVlIG9mIHRoZSBjb250YWluaW5nIE1hdFNvcnQgZm9yIHRoaXMgTWF0U29ydGFibGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlQ2xlYXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXI7IH1cbiAgc2V0IGRpc2FibGVDbGVhcih2KSB7IHRoaXMuX2Rpc2FibGVDbGVhciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTsgfVxuICBwcml2YXRlIF9kaXNhYmxlQ2xlYXI6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBAZGVwcmVjYXRlZCBgX2ludGxgIHBhcmFtZXRlciBpc24ndCBiZWluZyB1c2VkIGFueW1vcmUgYW5kIGl0J2xsIGJlIHJlbW92ZWQuXG4gICAgICAgICAgICAgICAqIEBicmVha2luZy1jaGFuZ2UgMTMuMC4wXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBwdWJsaWMgX2ludGw6IE1hdFNvcnRIZWFkZXJJbnRsLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIC8vIGBNYXRTb3J0YCBpcyBub3Qgb3B0aW9uYWxseSBpbmplY3RlZCwgYnV0IGp1c3QgYXNzZXJ0ZWQgbWFudWFsbHkgdy8gYmV0dGVyIGVycm9yLlxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGxpZ2h0d2VpZ2h0LXRva2Vuc1xuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgX3NvcnQ6IE1hdFNvcnQsXG4gICAgICAgICAgICAgIEBJbmplY3QoJ01BVF9TT1JUX0hFQURFUl9DT0xVTU5fREVGJykgQE9wdGlvbmFsKClcbiAgICAgICAgICAgICAgICAgIHB1YmxpYyBfY29sdW1uRGVmOiBNYXRTb3J0SGVhZGVyQ29sdW1uRGVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIC8qKiBAYnJlYWtpbmctY2hhbmdlIDE0LjAuMCBfYXJpYURlc2NyaWJlciB3aWxsIGJlIHJlcXVpcmVkLiAqL1xuICAgICAgICAgICAgICBASW5qZWN0KEFyaWFEZXNjcmliZXIpIEBPcHRpb25hbCgpIHByaXZhdGUgX2FyaWFEZXNjcmliZXI/OiBBcmlhRGVzY3JpYmVyIHwgbnVsbCkge1xuICAgIC8vIE5vdGUgdGhhdCB3ZSB1c2UgYSBzdHJpbmcgdG9rZW4gZm9yIHRoZSBgX2NvbHVtbkRlZmAsIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGJvdGggYnlcbiAgICAvLyBgbWF0ZXJpYWwvdGFibGVgIGFuZCBgY2RrL3RhYmxlYCBhbmQgd2UgY2FuJ3QgaGF2ZSB0aGUgQ0RLIGRlcGVuZGluZyBvbiBNYXRlcmlhbCxcbiAgICAvLyBhbmQgd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgdGhlIHNvcnQgaGVhZGVyIGRlcGVuZGluZyBvbiB0aGUgQ0RLIHRhYmxlIGJlY2F1c2VcbiAgICAvLyBvZiB0aGlzIHNpbmdsZSByZWZlcmVuY2UuXG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghX3NvcnQgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgIHRocm93IGdldFNvcnRIZWFkZXJOb3RDb250YWluZWRXaXRoaW5Tb3J0RXJyb3IoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVTdGF0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5pZCAmJiB0aGlzLl9jb2x1bW5EZWYpIHtcbiAgICAgIHRoaXMuaWQgPSB0aGlzLl9jb2x1bW5EZWYubmFtZTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGFuZCBzZXQgdGhlIHZpZXcgc3RhdGUgdG8gYmUgaW1tZWRpYXRlbHkgdGhhdCBzdGF0ZS5cbiAgICB0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpO1xuICAgIHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZShcbiAgICAgICAge3RvU3RhdGU6IHRoaXMuX2lzU29ydGVkKCkgPyAnYWN0aXZlJyA6IHRoaXMuX2Fycm93RGlyZWN0aW9ufSk7XG5cbiAgICB0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpO1xuXG4gICAgdGhpcy5fc29ydEJ1dHRvbiA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cImJ1dHRvblwiXScpITtcbiAgICB0aGlzLl91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24odGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBXZSB1c2UgdGhlIGZvY3VzIG1vbml0b3IgYmVjYXVzZSB3ZSBhbHNvIHdhbnQgdG8gc3R5bGVcbiAgICAvLyB0aGluZ3MgZGlmZmVyZW50bHkgYmFzZWQgb24gdGhlIGZvY3VzIG9yaWdpbi5cbiAgICB0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCB0cnVlKS5zdWJzY3JpYmUob3JpZ2luID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0gISFvcmlnaW47XG4gICAgICBpZiAobmV3U3RhdGUgIT09IHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50KSB7XG4gICAgICAgIHRoaXMuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKG5ld1N0YXRlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZik7XG4gICAgdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpO1xuICAgIHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgXCJoaW50XCIgc3RhdGUgc3VjaCB0aGF0IHRoZSBhcnJvdyB3aWxsIGJlIHNlbWktdHJhbnNwYXJlbnRseSBkaXNwbGF5ZWQgYXMgYSBoaW50IHRvIHRoZVxuICAgKiB1c2VyIHNob3dpbmcgd2hhdCB0aGUgYWN0aXZlIHNvcnQgd2lsbCBiZWNvbWUuIElmIHNldCB0byBmYWxzZSwgdGhlIGFycm93IHdpbGwgZmFkZSBhd2F5LlxuICAgKi9cbiAgX3NldEluZGljYXRvckhpbnRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAvLyBOby1vcCBpZiB0aGUgc29ydCBoZWFkZXIgaXMgZGlzYWJsZWQgLSBzaG91bGQgbm90IG1ha2UgdGhlIGhpbnQgdmlzaWJsZS5cbiAgICBpZiAodGhpcy5faXNEaXNhYmxlZCgpICYmIHZpc2libGUpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLl9zaG93SW5kaWNhdG9ySGludCA9IHZpc2libGU7XG5cbiAgICBpZiAoIXRoaXMuX2lzU29ydGVkKCkpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCk7XG4gICAgICBpZiAodGhpcy5fc2hvd0luZGljYXRvckhpbnQpIHtcbiAgICAgICAgdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6IHRoaXMuX2Fycm93RGlyZWN0aW9uLCB0b1N0YXRlOiAnaGludCd9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7ZnJvbVN0YXRlOiAnaGludCcsIHRvU3RhdGU6IHRoaXMuX2Fycm93RGlyZWN0aW9ufSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFuaW1hdGlvbiB0cmFuc2l0aW9uIHZpZXcgc3RhdGUgZm9yIHRoZSBhcnJvdydzIHBvc2l0aW9uIGFuZCBvcGFjaXR5LiBJZiB0aGVcbiAgICogYGRpc2FibGVWaWV3U3RhdGVBbmltYXRpb25gIGZsYWcgaXMgc2V0IHRvIHRydWUsIHRoZSBgZnJvbVN0YXRlYCB3aWxsIGJlIGlnbm9yZWQgc28gdGhhdFxuICAgKiBubyBhbmltYXRpb24gYXBwZWFycy5cbiAgICovXG4gIF9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodmlld1N0YXRlOiBBcnJvd1ZpZXdTdGF0ZVRyYW5zaXRpb24pIHtcbiAgICB0aGlzLl92aWV3U3RhdGUgPSB2aWV3U3RhdGUgfHwgeyB9O1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBmb3IgYXJyb3cgcG9zaXRpb24gc3RhdGUgKG9wYWNpdHkvdHJhbnNsYXRpb24pIHNob3VsZCBiZSBkaXNhYmxlZCxcbiAgICAvLyByZW1vdmUgdGhlIGZyb21TdGF0ZSBzbyB0aGF0IGl0IGp1bXBzIHJpZ2h0IHRvIHRoZSB0b1N0YXRlLlxuICAgIGlmICh0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl92aWV3U3RhdGUgPSB7dG9TdGF0ZTogdmlld1N0YXRlLnRvU3RhdGV9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcmlnZ2VycyB0aGUgc29ydCBvbiB0aGlzIHNvcnQgaGVhZGVyIGFuZCByZW1vdmVzIHRoZSBpbmRpY2F0b3IgaGludC4gKi9cbiAgX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSB7XG4gICAgdGhpcy5fc29ydC5zb3J0KHRoaXMpO1xuXG4gICAgLy8gRG8gbm90IHNob3cgdGhlIGFuaW1hdGlvbiBpZiB0aGUgaGVhZGVyIHdhcyBhbHJlYWR5IHNob3duIGluIHRoZSByaWdodCBwb3NpdGlvbi5cbiAgICBpZiAodGhpcy5fdmlld1N0YXRlLnRvU3RhdGUgPT09ICdoaW50JyB8fCB0aGlzLl92aWV3U3RhdGUudG9TdGF0ZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVDbGljaygpIHtcbiAgICBpZiAoIXRoaXMuX2lzRGlzYWJsZWQoKSkge1xuICAgICAgdGhpcy5fc29ydC5zb3J0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0Rpc2FibGVkKCkgJiYgKGV2ZW50LmtleUNvZGUgPT09IFNQQUNFIHx8IGV2ZW50LmtleUNvZGUgPT09IEVOVEVSKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIE1hdFNvcnRIZWFkZXIgaXMgY3VycmVudGx5IHNvcnRlZCBpbiBlaXRoZXIgYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuICovXG4gIF9pc1NvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydC5hY3RpdmUgPT0gdGhpcy5pZCAmJlxuICAgICAgICAodGhpcy5fc29ydC5kaXJlY3Rpb24gPT09ICdhc2MnIHx8IHRoaXMuX3NvcnQuZGlyZWN0aW9uID09PSAnZGVzYycpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIGFycm93IGRpcmVjdGlvbiAoaW5kaWNhdG9yIGFuZCBwb2ludGVycykuICovXG4gIF9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLl9pc1NvcnRlZCgpID8gJ2FjdGl2ZS0nIDogJyd9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGFycm93IHBvc2l0aW9uIHN0YXRlIChvcGFjaXR5LCB0cmFuc2xhdGlvbikuICovXG4gIF9nZXRBcnJvd1ZpZXdTdGF0ZSgpIHtcbiAgICBjb25zdCBmcm9tU3RhdGUgPSB0aGlzLl92aWV3U3RhdGUuZnJvbVN0YXRlO1xuICAgIHJldHVybiAoZnJvbVN0YXRlID8gYCR7ZnJvbVN0YXRlfS10by1gIDogJycpICsgdGhpcy5fdmlld1N0YXRlLnRvU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBhcnJvdyBzaG91bGQgYmUgcG9pbnRpbmcuIElmIGl0IGlzIG5vdCBzb3J0ZWQsIHRoZSBhcnJvdyBzaG91bGQgYmVcbiAgICogZmFjaW5nIHRoZSBzdGFydCBkaXJlY3Rpb24uIE90aGVyd2lzZSBpZiBpdCBpcyBzb3J0ZWQsIHRoZSBhcnJvdyBzaG91bGQgcG9pbnQgaW4gdGhlIGN1cnJlbnRseVxuICAgKiBhY3RpdmUgc29ydGVkIGRpcmVjdGlvbi4gVGhlIHJlYXNvbiB0aGlzIGlzIHVwZGF0ZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIGlzIGJlY2F1c2UgdGhlIGRpcmVjdGlvblxuICAgKiBzaG91bGQgb25seSBiZSBjaGFuZ2VkIGF0IHNwZWNpZmljIHRpbWVzIC0gd2hlbiBkZWFjdGl2YXRlZCBidXQgdGhlIGhpbnQgaXMgZGlzcGxheWVkIGFuZCB3aGVuXG4gICAqIHRoZSBzb3J0IGlzIGFjdGl2ZSBhbmQgdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLiBPdGhlcndpc2UgdGhlIGFycm93J3MgZGlyZWN0aW9uIHNob3VsZCBsaW5nZXJcbiAgICogaW4gY2FzZXMgc3VjaCBhcyB0aGUgc29ydCBiZWNvbWluZyBkZWFjdGl2YXRlZCBidXQgd2Ugd2FudCB0byBhbmltYXRlIHRoZSBhcnJvdyBhd2F5IHdoaWxlXG4gICAqIHByZXNlcnZpbmcgaXRzIGRpcmVjdGlvbiwgZXZlbiB0aG91Z2ggdGhlIG5leHQgc29ydCBkaXJlY3Rpb24gaXMgYWN0dWFsbHkgZGlmZmVyZW50IGFuZCBzaG91bGRcbiAgICogb25seSBiZSBjaGFuZ2VkIG9uY2UgdGhlIGFycm93IGRpc3BsYXlzIGFnYWluIChoaW50IG9yIGFjdGl2YXRpb24pLlxuICAgKi9cbiAgX3VwZGF0ZUFycm93RGlyZWN0aW9uKCkge1xuICAgIHRoaXMuX2Fycm93RGlyZWN0aW9uID0gdGhpcy5faXNTb3J0ZWQoKSA/XG4gICAgICAgIHRoaXMuX3NvcnQuZGlyZWN0aW9uIDpcbiAgICAgICAgKHRoaXMuc3RhcnQgfHwgdGhpcy5fc29ydC5zdGFydCk7XG4gIH1cblxuICBfaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFyaWEtc29ydCBhdHRyaWJ1dGUgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHNvcnQgaGVhZGVyLiBJZiB0aGlzIGhlYWRlclxuICAgKiBpcyBub3Qgc29ydGVkLCByZXR1cm5zIG51bGwgc28gdGhhdCB0aGUgYXR0cmlidXRlIGlzIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCBlbGVtZW50LiBBcmlhIHNwZWNcbiAgICogc2F5cyB0aGF0IHRoZSBhcmlhLXNvcnQgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgcHJlc2VudCBvbiBvbmUgaGVhZGVyIGF0IGEgdGltZSwgc28gcmVtb3ZpbmdcbiAgICogZW5zdXJlcyB0aGlzIGlzIHRydWUuXG4gICAqL1xuICBfZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1NvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zb3J0LmRpcmVjdGlvbiA9PSAnYXNjJyA/ICdhc2NlbmRpbmcnIDogJ2Rlc2NlbmRpbmcnO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFycm93IGluc2lkZSB0aGUgc29ydCBoZWFkZXIgc2hvdWxkIGJlIHJlbmRlcmVkLiAqL1xuICBfcmVuZGVyQXJyb3coKSB7XG4gICAgcmV0dXJuICF0aGlzLl9pc0Rpc2FibGVkKCkgfHwgdGhpcy5faXNTb3J0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVNvcnRBY3Rpb25EZXNjcmlwdGlvbihuZXdEZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgLy8gV2UgdXNlIEFyaWFEZXNjcmliZXIgZm9yIHRoZSBzb3J0IGJ1dHRvbiBpbnN0ZWFkIG9mIHNldHRpbmcgYW4gYGFyaWEtbGFiZWxgIGJlY2F1c2Ugc29tZVxuICAgIC8vIHNjcmVlbiByZWFkZXJzIChub3RhYmx5IFZvaWNlT3Zlcikgd2lsbCByZWFkIGJvdGggdGhlIGNvbHVtbiBoZWFkZXIgKmFuZCogdGhlIGJ1dHRvbidzIGxhYmVsXG4gICAgLy8gZm9yIGV2ZXJ5ICpjZWxsKiBpbiB0aGUgdGFibGUsIGNyZWF0aW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IG5vaXNlLlxuXG4gICAgLy8gSWYgX3NvcnRCdXR0b24gaXMgdW5kZWZpbmVkLCB0aGUgY29tcG9uZW50IGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldCBzbyB0aGVyZSdzXG4gICAgLy8gbm90aGluZyB0byB1cGRhdGUgaW4gdGhlIERPTS5cbiAgICBpZiAodGhpcy5fc29ydEJ1dHRvbikge1xuICAgICAgLy8gcmVtb3ZlRGVzY3JpcHRpb24gd2lsbCBuby1vcCBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBtZXNzYWdlLlxuICAgICAgLy8gVE9ETyhqZWxib3Vybik6IHJlbW92ZSBvcHRpb25hbCBjaGFpbmluZyB3aGVuIEFyaWFEZXNjcmliZXIgaXMgcmVxdWlyZWQuXG4gICAgICB0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLCB0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb24pO1xuICAgICAgdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbiwgbmV3RGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiA9IG5ld0Rlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgY2hhbmdlcyBpbiB0aGUgc29ydGluZyBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlU3RhdGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uID1cbiAgICAgIG1lcmdlKHRoaXMuX3NvcnQuc29ydENoYW5nZSwgdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLCB0aGlzLl9pbnRsLmNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1NvcnRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKTtcblxuICAgICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBhbmltYXRpb24gaWYgdGhlIGhlYWRlciB3YXMgYWxyZWFkeSBzaG93biBpbiB0aGUgcmlnaHQgcG9zaXRpb24uXG4gICAgICAgICAgaWYgKHRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlID09PSAnaGludCcgfHwgdGhpcy5fdmlld1N0YXRlLnRvU3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTogdGhpcy5fYXJyb3dEaXJlY3Rpb24sIHRvU3RhdGU6ICdhY3RpdmUnfSk7XG4gICAgICAgICAgdGhpcy5fc2hvd0luZGljYXRvckhpbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoaXMgaGVhZGVyIHdhcyByZWNlbnRseSBhY3RpdmUgYW5kIG5vdyBubyBsb25nZXIgc29ydGVkLCBhbmltYXRlIGF3YXkgdGhlIGFycm93LlxuICAgICAgICBpZiAoIXRoaXMuX2lzU29ydGVkKCkgJiYgdGhpcy5fdmlld1N0YXRlICYmIHRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlID09PSAnYWN0aXZlJykge1xuICAgICAgICAgIHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTogJ2FjdGl2ZScsIHRvU3RhdGU6IHRoaXMuX2Fycm93RGlyZWN0aW9ufSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVDbGVhcjogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbn1cbiJdfQ==
Index: trip-planner-front/node_modules/@angular/material/fesm2015/badge.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/badge.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/badge.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -17,5 +17,4 @@
 const _MatBadgeBase = mixinDisabled(class {
 });
-const BADGE_CONTENT_CLASS = 'mat-badge-content';
 /** Directive to display a text badge. */
 class MatBadge extends _MatBadgeBase {
@@ -27,4 +26,6 @@
         this._renderer = _renderer;
         this._animationMode = _animationMode;
+        /** Whether the badge has any content. */
+        this._hasContent = false;
         this._color = 'primary';
         this._overlap = true;
@@ -38,6 +39,4 @@
         /** Unique id for the badge */
         this._id = nextId++;
-        /** Whether the OnInit lifecycle hook has run yet */
-        this._isInitialized = false;
         if (typeof ngDevMode === 'undefined' || ngDevMode) {
             const nativeElement = _elementRef.nativeElement;
@@ -58,15 +57,16 @@
         this._overlap = coerceBooleanProperty(val);
     }
-    /** The content for the badge */
-    get content() {
-        return this._content;
-    }
-    set content(newContent) {
-        this._updateRenderedContent(newContent);
-    }
     /** Message used to describe the decorated element via aria-describedby */
     get description() { return this._description; }
     set description(newDescription) {
-        this._updateHostAriaDescription(newDescription);
+        if (newDescription !== this._description) {
+            const badgeElement = this._badgeElement;
+            this._updateHostAriaDescription(newDescription, this._description);
+            this._description = newDescription;
+            if (badgeElement) {
+                newDescription ? badgeElement.setAttribute('aria-label', newDescription) :
+                    badgeElement.removeAttribute('aria-label');
+            }
+        }
     }
     /** Whether the badge is hidden. */
@@ -83,29 +83,41 @@
         return this.position.indexOf('before') === -1;
     }
+    ngOnChanges(changes) {
+        const contentChange = changes['content'];
+        if (contentChange) {
+            const value = contentChange.currentValue;
+            this._hasContent = value != null && `${value}`.trim().length > 0;
+            this._updateTextContent();
+        }
+    }
+    ngOnDestroy() {
+        const badgeElement = this._badgeElement;
+        if (badgeElement) {
+            if (this.description) {
+                this._ariaDescriber.removeDescription(badgeElement, this.description);
+            }
+            // When creating a badge through the Renderer, Angular will keep it in an index.
+            // We have to destroy it ourselves, otherwise it'll be retained in memory.
+            if (this._renderer.destroyNode) {
+                this._renderer.destroyNode(badgeElement);
+            }
+        }
+    }
     /**
-     * Gets the element into which the badge's content is being rendered. Undefined if the element
-     * hasn't been created (e.g. if the badge doesn't have content).
+     * Gets the element into which the badge's content is being rendered.
+     * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).
      */
     getBadgeElement() {
         return this._badgeElement;
     }
-    ngOnInit() {
-        // We may have server-side rendered badge that we need to clear.
-        // We need to do this in ngOnInit because the full content of the component
-        // on which the badge is attached won't necessarily be in the DOM until this point.
-        this._clearExistingBadges();
-        if (this.content && !this._badgeElement) {
+    /** Injects a span element into the DOM with the content. */
+    _updateTextContent() {
+        if (!this._badgeElement) {
             this._badgeElement = this._createBadgeElement();
-            this._updateRenderedContent(this.content);
-        }
-        this._isInitialized = true;
-    }
-    ngOnDestroy() {
-        // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.
-        // We have to destroy it ourselves, otherwise it'll be retained in memory.
-        if (this._renderer.destroyNode) {
-            this._renderer.destroyNode(this._badgeElement);
-        }
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+        }
+        else {
+            this._badgeElement.textContent = this._stringifyContent();
+        }
+        return this._badgeElement;
     }
     /** Creates the badge element */
@@ -113,11 +125,15 @@
         const badgeElement = this._renderer.createElement('span');
         const activeClass = 'mat-badge-active';
+        const contentClass = 'mat-badge-content';
+        // Clear any existing badges which may have persisted from a server-side render.
+        this._clearExistingBadges(contentClass);
         badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);
-        // The badge is aria-hidden because we don't want it to appear in the page's navigation
-        // flow. Instead, we use the badge to describe the decorated element with aria-describedby.
-        badgeElement.setAttribute('aria-hidden', 'true');
-        badgeElement.classList.add(BADGE_CONTENT_CLASS);
+        badgeElement.classList.add(contentClass);
+        badgeElement.textContent = this._stringifyContent();
         if (this._animationMode === 'NoopAnimations') {
             badgeElement.classList.add('_mat-animation-noopable');
+        }
+        if (this.description) {
+            badgeElement.setAttribute('aria-label', this.description);
         }
         this._elementRef.nativeElement.appendChild(badgeElement);
@@ -135,44 +151,45 @@
         return badgeElement;
     }
-    /** Update the text content of the badge element in the DOM, creating the element if necessary. */
-    _updateRenderedContent(newContent) {
-        const newContentNormalized = `${newContent !== null && newContent !== void 0 ? newContent : ''}`.trim();
-        // Don't create the badge element if the directive isn't initialized because we want to
-        // append the badge element to the *end* of the host element's content for backwards
-        // compatibility.
-        if (this._isInitialized && newContentNormalized && !this._badgeElement) {
-            this._badgeElement = this._createBadgeElement();
-        }
-        if (this._badgeElement) {
-            this._badgeElement.textContent = newContentNormalized;
-        }
-        this._content = newContentNormalized;
-    }
-    /** Updates the host element's aria description via AriaDescriber. */
-    _updateHostAriaDescription(newDescription) {
-        this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);
+    /** Sets the aria-label property on the element */
+    _updateHostAriaDescription(newDescription, oldDescription) {
+        // ensure content available before setting label
+        const content = this._updateTextContent();
+        if (oldDescription) {
+            this._ariaDescriber.removeDescription(content, oldDescription);
+        }
         if (newDescription) {
-            this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);
-        }
-        this._description = newDescription;
+            this._ariaDescriber.describe(content, newDescription);
+        }
     }
     /** Adds css theme class given the color to the component host */
     _setColor(colorPalette) {
-        const classList = this._elementRef.nativeElement.classList;
-        classList.remove(`mat-badge-${this._color}`);
-        if (colorPalette) {
-            classList.add(`mat-badge-${colorPalette}`);
+        if (colorPalette !== this._color) {
+            const classList = this._elementRef.nativeElement.classList;
+            if (this._color) {
+                classList.remove(`mat-badge-${this._color}`);
+            }
+            if (colorPalette) {
+                classList.add(`mat-badge-${colorPalette}`);
+            }
         }
     }
     /** Clears any existing badges that might be left over from server-side rendering. */
-    _clearExistingBadges() {
-        // Only check direct children of this host element in order to avoid deleting
-        // any badges that might exist in descendant elements.
-        const badges = this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);
-        for (const badgeElement of Array.from(badges)) {
-            if (badgeElement !== this._badgeElement) {
-                badgeElement.remove();
-            }
-        }
+    _clearExistingBadges(cssClass) {
+        const element = this._elementRef.nativeElement;
+        let childCount = element.children.length;
+        // Use a reverse while, because we'll be removing elements from the list as we're iterating.
+        while (childCount--) {
+            const currentChild = element.children[childCount];
+            if (currentChild.classList.contains(cssClass)) {
+                element.removeChild(currentChild);
+            }
+        }
+    }
+    /** Gets the string representation of the badge content. */
+    _stringifyContent() {
+        // Convert null and undefined to an empty string which is consistent
+        // with how Angular handles them in inside template interpolations.
+        const content = this.content;
+        return content == null ? '' : `${content}`;
     }
 }
@@ -191,5 +208,5 @@
                     '[class.mat-badge-medium]': 'size === "medium"',
                     '[class.mat-badge-large]': 'size === "large"',
-                    '[class.mat-badge-hidden]': 'hidden || !content',
+                    '[class.mat-badge-hidden]': 'hidden || !_hasContent',
                     '[class.mat-badge-disabled]': 'disabled',
                 },
Index: trip-planner-front/node_modules/@angular/material/fesm2015/badge.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/badge.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/badge.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"badge.js","sources":["../../../../../../src/material/badge/badge.ts","../../../../../../src/material/badge/badge-module.ts","../../../../../../src/material/badge/public-api.ts","../../../../../../src/material/badge/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Renderer2,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\nconst BADGE_CONTENT_CLASS = 'mat-badge-content';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !content',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnInit, OnDestroy, CanDisable {\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge')\n  get content(): string | number | undefined | null {\n    return this._content;\n  }\n  set content(newContent: string | number | undefined | null) {\n    this._updateRenderedContent(newContent);\n  }\n  private _content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    this._updateHostAriaDescription(newDescription);\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  /** Visible badge element. */\n  private _badgeElement: HTMLElement | undefined;\n\n  /** Whether the OnInit lifecycle hook has run yet */\n  private _isInitialized = false;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered. Undefined if the element\n   * hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  ngOnInit() {\n    // We may have server-side rendered badge that we need to clear.\n    // We need to do this in ngOnInit because the full content of the component\n    // on which the badge is attached won't necessarily be in the DOM until this point.\n    this._clearExistingBadges();\n\n    if (this.content && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n      this._updateRenderedContent(this.content);\n    }\n\n    this._isInitialized = true;\n  }\n\n  ngOnDestroy() {\n    // ViewEngine only: when creating a badge through the Renderer, Angular remembers its index.\n    // We have to destroy it ourselves, otherwise it'll be retained in memory.\n    if (this._renderer.destroyNode) {\n      this._renderer.destroyNode(this._badgeElement);\n    }\n\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n\n    // The badge is aria-hidden because we don't want it to appear in the page's navigation\n    // flow. Instead, we use the badge to describe the decorated element with aria-describedby.\n    badgeElement.setAttribute('aria-hidden', 'true');\n    badgeElement.classList.add(BADGE_CONTENT_CLASS);\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Update the text content of the badge element in the DOM, creating the element if necessary. */\n  private _updateRenderedContent(newContent: string | number | undefined | null): void {\n    const newContentNormalized: string = `${newContent ?? ''}`.trim();\n\n    // Don't create the badge element if the directive isn't initialized because we want to\n    // append the badge element to the *end* of the host element's content for backwards\n    // compatibility.\n    if (this._isInitialized && newContentNormalized && !this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    }\n\n    if (this._badgeElement) {\n      this._badgeElement.textContent = newContentNormalized;\n    }\n\n    this._content = newContentNormalized;\n  }\n\n  /** Updates the host element's aria description via AriaDescriber. */\n  private _updateHostAriaDescription(newDescription: string): void {\n    this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.description);\n    if (newDescription) {\n      this._ariaDescriber.describe(this._elementRef.nativeElement, newDescription);\n    }\n    this._description = newDescription;\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    const classList = this._elementRef.nativeElement.classList;\n    classList.remove(`mat-badge-${this._color}`);\n    if (colorPalette) {\n      classList.add(`mat-badge-${colorPalette}`);\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges() {\n    // Only check direct children of this host element in order to avoid deleting\n    // any badges that might exist in descendant elements.\n    const badges =\n        this._elementRef.nativeElement.querySelectorAll(`:scope > .${BADGE_CONTENT_CLASS}`);\n    for (const badgeElement of Array.from(badges)) {\n      if (badgeElement !== this._badgeElement) {\n        badgeElement.remove();\n      }\n    }\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAAA;;;;;;;AAyBA,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf;AACA;AACA,MAAM,aAAa,GAAG,aAAa,CAAC;CAAQ,CAAC,CAAC;AAU9C,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD;MAkBa,QAAS,SAAQ,aAAa;IA8DzC,YACY,OAAe,EACf,WAAoC,EACpC,cAA6B,EAC7B,SAAoB,EACuB,cAAuB;QAC1E,KAAK,EAAE,CAAC;QALA,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAyB;QACpC,mBAAc,GAAd,cAAc,CAAe;QAC7B,cAAS,GAAT,SAAS,CAAW;QACuB,mBAAc,GAAd,cAAc,CAAS;QA3DtE,WAAM,GAAiB,SAAS,CAAC;QAQjC,aAAQ,GAAY,IAAI,CAAC;;;;;QAMN,aAAQ,GAAqB,aAAa,CAAC;;QAqB/C,SAAI,GAAiB,QAAQ,CAAC;;QAWrD,QAAG,GAAW,MAAM,EAAE,CAAC;;QAMf,mBAAc,GAAG,KAAK,CAAC;QAU3B,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;YAChD,IAAI,aAAa,CAAC,QAAQ,KAAK,aAAa,CAAC,YAAY,EAAE;gBACzD,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAC;aAC9D;SACF;KACF;;IA1EH,IACI,KAAK,KAAmB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;IACjD,IAAI,KAAK,CAAC,KAAmB;QAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACrB;;IAID,IACI,OAAO,KAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;IAChD,IAAI,OAAO,CAAC,GAAY;QACtB,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;KAC5C;;IAUD,IACI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IACD,IAAI,OAAO,CAAC,UAA8C;QACxD,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;KACzC;;IAID,IACI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;IACvD,IAAI,WAAW,CAAC,cAAsB;QACpC,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC;KACjD;;IAOD,IACI,MAAM,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;IAC9C,IAAI,MAAM,CAAC,GAAY;QACrB,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;KAC3C;;IA6BD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;KAC9C;;IAGD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;KAC/C;;;;;IAMD,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,QAAQ;;;;QAIN,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;IAED,WAAW;;;QAGT,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACzF;;IAGO,mBAAmB;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,kBAAkB,CAAC;QAEvC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;;;QAIjE,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACjD,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;YAC5C,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;SACvD;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;;QAGzD,IAAI,OAAO,qBAAqB,KAAK,UAAU,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;YAC3F,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC7B,qBAAqB,CAAC;oBACpB,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;iBACzC,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;aAAM;YACL,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACzC;QAED,OAAO,YAAY,CAAC;KACrB;;IAGO,sBAAsB,CAAC,UAA8C;QAC3E,MAAM,oBAAoB,GAAW,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;;;;QAKlE,IAAI,IAAI,CAAC,cAAc,IAAI,oBAAoB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACtE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SACjD;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,oBAAoB,CAAC;SACvD;QAED,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC;KACtC;;IAGO,0BAA0B,CAAC,cAAsB;QACvD,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxF,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;SAC9E;QACD,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;KACpC;;IAGO,SAAS,CAAC,YAA0B;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC;QAC3D,SAAS,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,IAAI,YAAY,EAAE;YAChB,SAAS,CAAC,GAAG,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;SAC5C;KACF;;IAGO,oBAAoB;;;QAG1B,MAAM,MAAM,GACR,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,mBAAmB,EAAE,CAAC,CAAC;QACxF,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC7C,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa,EAAE;gBACvC,YAAY,CAAC,MAAM,EAAE,CAAC;aACvB;SACF;KACF;;;YAxNF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,CAAC,4BAA4B,CAAC;gBACtC,IAAI,EAAE;oBACJ,OAAO,EAAE,WAAW;oBACpB,2BAA2B,EAAE,SAAS;oBACtC,yBAAyB,EAAE,WAAW;oBACtC,yBAAyB,EAAE,YAAY;oBACvC,0BAA0B,EAAE,YAAY;oBACxC,yBAAyB,EAAE,WAAW;oBACtC,yBAAyB,EAAE,kBAAkB;oBAC7C,0BAA0B,EAAE,mBAAmB;oBAC/C,yBAAyB,EAAE,kBAAkB;oBAC7C,0BAA0B,EAAE,oBAAoB;oBAChD,4BAA4B,EAAE,UAAU;iBACzC;aACF;;;YA3CC,MAAM;YAHN,UAAU;YAJJ,aAAa;YAWnB,SAAS;yCA2GJ,QAAQ,YAAI,MAAM,SAAC,qBAAqB;;;oBAjE5C,KAAK,SAAC,eAAe;sBASrB,KAAK,SAAC,iBAAiB;uBAWvB,KAAK,SAAC,kBAAkB;sBAGxB,KAAK,SAAC,UAAU;0BAUhB,KAAK,SAAC,qBAAqB;mBAQ3B,KAAK,SAAC,cAAc;qBAGpB,KAAK,SAAC,gBAAgB;;;ACzGzB;;;;;;;MAsBa,cAAc;;;YAR1B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,UAAU;oBACV,eAAe;iBAChB;gBACD,OAAO,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;gBACpC,YAAY,EAAE,CAAC,QAAQ,CAAC;aACzB;;;ACrBD;;;;;;;;ACAA;;;;;;"}
+{"version":3,"file":"badge.js","sources":["../../../../../../src/material/badge/badge.ts","../../../../../../src/material/badge/badge-module.ts","../../../../../../src/material/badge/public-api.ts","../../../../../../src/material/badge/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled, ThemePalette} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextId = 0;\n\n// Boilerplate for applying mixins to MatBadge.\n/** @docs-private */\nconst _MatBadgeBase = mixinDisabled(class {});\n\n/** Allowed position options for matBadgePosition */\nexport type MatBadgePosition =\n    'above after' | 'above before' | 'below before' | 'below after' |\n    'before' | 'after' | 'above' | 'below';\n\n/** Allowed size options for matBadgeSize */\nexport type MatBadgeSize = 'small' | 'medium' | 'large';\n\n/** Directive to display a text badge. */\n@Directive({\n  selector: '[matBadge]',\n  inputs: ['disabled: matBadgeDisabled'],\n  host: {\n    'class': 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || !_hasContent',\n    '[class.mat-badge-disabled]': 'disabled',\n  },\n})\nexport class MatBadge extends _MatBadgeBase implements OnDestroy, OnChanges, CanDisable {\n  /** Whether the badge has any content. */\n  _hasContent = false;\n\n  /** The color of the badge. Can be `primary`, `accent`, or `warn`. */\n  @Input('matBadgeColor')\n  get color(): ThemePalette { return this._color; }\n  set color(value: ThemePalette) {\n    this._setColor(value);\n    this._color = value;\n  }\n  private _color: ThemePalette = 'primary';\n\n  /** Whether the badge should overlap its contents or not */\n  @Input('matBadgeOverlap')\n  get overlap(): boolean { return this._overlap; }\n  set overlap(val: boolean) {\n    this._overlap = coerceBooleanProperty(val);\n  }\n  private _overlap: boolean = true;\n\n  /**\n   * Position the badge should reside.\n   * Accepts any combination of 'above'|'below' and 'before'|'after'\n   */\n  @Input('matBadgePosition') position: MatBadgePosition = 'above after';\n\n  /** The content for the badge */\n  @Input('matBadge') content: string | number | undefined | null;\n\n  /** Message used to describe the decorated element via aria-describedby */\n  @Input('matBadgeDescription')\n  get description(): string { return this._description; }\n  set description(newDescription: string) {\n    if (newDescription !== this._description) {\n      const badgeElement = this._badgeElement;\n      this._updateHostAriaDescription(newDescription, this._description);\n      this._description = newDescription;\n\n      if (badgeElement) {\n        newDescription ? badgeElement.setAttribute('aria-label', newDescription) :\n            badgeElement.removeAttribute('aria-label');\n      }\n    }\n  }\n  private _description: string;\n\n  /** Size of the badge. Can be 'small', 'medium', or 'large'. */\n  @Input('matBadgeSize') size: MatBadgeSize = 'medium';\n\n  /** Whether the badge is hidden. */\n  @Input('matBadgeHidden')\n  get hidden(): boolean { return this._hidden; }\n  set hidden(val: boolean) {\n    this._hidden = coerceBooleanProperty(val);\n  }\n  private _hidden: boolean;\n\n  /** Unique id for the badge */\n  _id: number = nextId++;\n\n  private _badgeElement: HTMLElement | undefined;\n\n  constructor(\n      private _ngZone: NgZone,\n      private _elementRef: ElementRef<HTMLElement>,\n      private _ariaDescriber: AriaDescriber,\n      private _renderer: Renderer2,\n      @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n      super();\n\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        const nativeElement = _elementRef.nativeElement;\n        if (nativeElement.nodeType !== nativeElement.ELEMENT_NODE) {\n          throw Error('matBadge must be attached to an element node.');\n        }\n      }\n    }\n\n  /** Whether the badge is above the host or not */\n  isAbove(): boolean {\n    return this.position.indexOf('below') === -1;\n  }\n\n  /** Whether the badge is after the host or not */\n  isAfter(): boolean {\n    return this.position.indexOf('before') === -1;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const contentChange = changes['content'];\n\n    if (contentChange) {\n      const value = contentChange.currentValue;\n      this._hasContent = value != null && `${value}`.trim().length > 0;\n      this._updateTextContent();\n    }\n  }\n\n  ngOnDestroy() {\n    const badgeElement = this._badgeElement;\n\n    if (badgeElement) {\n      if (this.description) {\n        this._ariaDescriber.removeDescription(badgeElement, this.description);\n      }\n\n      // When creating a badge through the Renderer, Angular will keep it in an index.\n      // We have to destroy it ourselves, otherwise it'll be retained in memory.\n      if (this._renderer.destroyNode) {\n        this._renderer.destroyNode(badgeElement);\n      }\n    }\n  }\n\n  /**\n   * Gets the element into which the badge's content is being rendered.\n   * Undefined if the element hasn't been created (e.g. if the badge doesn't have content).\n   */\n  getBadgeElement(): HTMLElement | undefined {\n    return this._badgeElement;\n  }\n\n  /** Injects a span element into the DOM with the content. */\n  private _updateTextContent(): HTMLSpanElement {\n    if (!this._badgeElement) {\n      this._badgeElement = this._createBadgeElement();\n    } else {\n      this._badgeElement.textContent = this._stringifyContent();\n    }\n    return this._badgeElement;\n  }\n\n  /** Creates the badge element */\n  private _createBadgeElement(): HTMLElement {\n    const badgeElement = this._renderer.createElement('span');\n    const activeClass = 'mat-badge-active';\n    const contentClass = 'mat-badge-content';\n\n    // Clear any existing badges which may have persisted from a server-side render.\n    this._clearExistingBadges(contentClass);\n    badgeElement.setAttribute('id', `mat-badge-content-${this._id}`);\n    badgeElement.classList.add(contentClass);\n    badgeElement.textContent = this._stringifyContent();\n\n    if (this._animationMode === 'NoopAnimations') {\n      badgeElement.classList.add('_mat-animation-noopable');\n    }\n\n    if (this.description) {\n      badgeElement.setAttribute('aria-label', this.description);\n    }\n\n    this._elementRef.nativeElement.appendChild(badgeElement);\n\n    // animate in after insertion\n    if (typeof requestAnimationFrame === 'function' && this._animationMode !== 'NoopAnimations') {\n      this._ngZone.runOutsideAngular(() => {\n        requestAnimationFrame(() => {\n          badgeElement.classList.add(activeClass);\n        });\n      });\n    } else {\n      badgeElement.classList.add(activeClass);\n    }\n\n    return badgeElement;\n  }\n\n  /** Sets the aria-label property on the element */\n  private _updateHostAriaDescription(newDescription: string, oldDescription: string): void {\n    // ensure content available before setting label\n    const content = this._updateTextContent();\n\n    if (oldDescription) {\n      this._ariaDescriber.removeDescription(content, oldDescription);\n    }\n\n    if (newDescription) {\n      this._ariaDescriber.describe(content, newDescription);\n    }\n  }\n\n  /** Adds css theme class given the color to the component host */\n  private _setColor(colorPalette: ThemePalette) {\n    if (colorPalette !== this._color) {\n      const classList = this._elementRef.nativeElement.classList;\n      if (this._color) {\n        classList.remove(`mat-badge-${this._color}`);\n      }\n      if (colorPalette) {\n        classList.add(`mat-badge-${colorPalette}`);\n      }\n    }\n  }\n\n  /** Clears any existing badges that might be left over from server-side rendering. */\n  private _clearExistingBadges(cssClass: string) {\n    const element = this._elementRef.nativeElement;\n    let childCount = element.children.length;\n\n    // Use a reverse while, because we'll be removing elements from the list as we're iterating.\n    while (childCount--) {\n      const currentChild = element.children[childCount];\n\n      if (currentChild.classList.contains(cssClass)) {\n        element.removeChild(currentChild);\n      }\n    }\n  }\n\n  /** Gets the string representation of the badge content. */\n  private _stringifyContent(): string {\n    // Convert null and undefined to an empty string which is consistent\n    // with how Angular handles them in inside template interpolations.\n    const content = this.content;\n    return content == null ? '' : `${content}`;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n  static ngAcceptInputType_hidden: BooleanInput;\n  static ngAcceptInputType_overlap: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {MatBadge} from './badge';\n\n\n@NgModule({\n  imports: [\n    A11yModule,\n    MatCommonModule\n  ],\n  exports: [MatBadge, MatCommonModule],\n  declarations: [MatBadge],\n})\nexport class MatBadgeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './badge-module';\nexport * from './badge';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/core.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/core.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/core.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -20,5 +20,5 @@
  */
 /** Current version of Angular Material. */
-const VERSION$1 = new Version('12.2.9');
+const VERSION$1 = new Version('12.2.10');
 
 /**
@@ -54,5 +54,5 @@
 // Can be removed once the Material primary entry-point no longer
 // re-exports all secondary entry-points
-const VERSION = new Version('12.2.9');
+const VERSION = new Version('12.2.10');
 /** @docs-private */
 function MATERIAL_SANITY_CHECKS_FACTORY() {
Index: trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/core.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.9');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.9');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","CDK_VERSION"],"mappings":"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"}
+{"version":3,"file":"core.js","sources":["../../../../../../src/material/core/version.ts","../../../../../../src/material/core/animation/animation.ts","../../../../../../src/material/core/common-behaviors/common-module.ts","../../../../../../src/material/core/common-behaviors/disabled.ts","../../../../../../src/material/core/common-behaviors/color.ts","../../../../../../src/material/core/common-behaviors/disable-ripple.ts","../../../../../../src/material/core/common-behaviors/tabindex.ts","../../../../../../src/material/core/common-behaviors/error-state.ts","../../../../../../src/material/core/common-behaviors/initialized.ts","../../../../../../src/material/core/common-behaviors/index.ts","../../../../../../src/material/core/datetime/date-adapter.ts","../../../../../../src/material/core/datetime/date-formats.ts","../../../../../../src/material/core/datetime/native-date-adapter.ts","../../../../../../src/material/core/datetime/native-date-formats.ts","../../../../../../src/material/core/datetime/index.ts","../../../../../../src/material/core/error/error-options.ts","../../../../../../src/material/core/line/line.ts","../../../../../../src/material/core/ripple/ripple-ref.ts","../../../../../../src/material/core/ripple/ripple-renderer.ts","../../../../../../src/material/core/ripple/ripple.ts","../../../../../../src/material/core/ripple/index.ts","../../../../../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../../../../src/material/core/selection/index.ts","../../../../../../src/material/core/option/option-parent.ts","../../../../../../src/material/core/option/optgroup.ts","../../../../../../src/material/core/option/option.ts","../../../../../../src/material/core/option/index.ts","../../../../../../src/material/core/public-api.ts","../../../../../../src/material/core/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('12.2.10');\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/** @docs-private */\nexport class AnimationCurves {\n  static STANDARD_CURVE = 'cubic-bezier(0.4,0.0,0.2,1)';\n  static DECELERATION_CURVE = 'cubic-bezier(0.0,0.0,0.2,1)';\n  static ACCELERATION_CURVE = 'cubic-bezier(0.4,0.0,1,1)';\n  static SHARP_CURVE = 'cubic-bezier(0.4,0.0,0.6,1)';\n}\n\n\n/** @docs-private */\nexport class AnimationDurations {\n  static COMPLEX = '375ms';\n  static ENTERING = '225ms';\n  static EXITING = '195ms';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HighContrastModeDetector} from '@angular/cdk/a11y';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {Inject, InjectionToken, isDevMode, NgModule, Optional, Version} from '@angular/core';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\nimport {DOCUMENT} from '@angular/common';\nimport {_isTestEnvironment} from '@angular/cdk/platform';\n\n// Private version constant to circumvent test/build issues,\n// i.e. avoid core to depend on the @angular/material primary entry-point\n// Can be removed once the Material primary entry-point no longer\n// re-exports all secondary entry-points\nconst VERSION = new Version('12.2.10');\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): SanityChecks {\n  return true;\n}\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<SanityChecks>('mat-sanity-checks', {\n  providedIn: 'root',\n  factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/**\n * Possible sanity checks that can be enabled. If set to\n * true/false, all checks will be enabled/disabled.\n */\nexport type SanityChecks = boolean | GranularSanityChecks;\n\n/** Object that can be used to configure the sanity checks granularly. */\nexport interface GranularSanityChecks {\n  doctype: boolean;\n  theme: boolean;\n  version: boolean;\n}\n\n/**\n * Module that captures anything that should be loaded and/or run for *all* Angular Material\n * components. This includes Bidi, etc.\n *\n * This module should be imported to each top-level component module (e.g., MatTabsModule).\n */\n@NgModule({\n  imports: [BidiModule],\n  exports: [BidiModule],\n})\nexport class MatCommonModule {\n  /** Whether we've done the global sanity checks (e.g. a theme is loaded, there is a doctype). */\n  private _hasDoneGlobalChecks = false;\n\n  /** Configured sanity checks. */\n  private _sanityChecks: SanityChecks;\n\n  /** Used to reference correct document/window */\n  protected _document: Document;\n\n  constructor(\n      highContrastModeDetector: HighContrastModeDetector,\n      @Optional() @Inject(MATERIAL_SANITY_CHECKS) sanityChecks: any,\n      @Inject(DOCUMENT) document: any) {\n    this._document = document;\n\n    // While A11yModule also does this, we repeat it here to avoid importing A11yModule\n    // in MatCommonModule.\n    highContrastModeDetector._applyBodyHighContrastModeCssClasses();\n\n    // Note that `_sanityChecks` is typed to `any`, because AoT\n    // throws an error if we use the `SanityChecks` type directly.\n    this._sanityChecks = sanityChecks;\n\n    if (!this._hasDoneGlobalChecks) {\n      this._checkDoctypeIsDefined();\n      this._checkThemeIsPresent();\n      this._checkCdkVersionMatch();\n      this._hasDoneGlobalChecks = true;\n    }\n  }\n\n  /** Gets whether a specific sanity check is enabled. */\n  private _checkIsEnabled(name: keyof GranularSanityChecks): boolean {\n    // TODO(crisbeto): we can't use `ngDevMode` here yet, because ViewEngine apps might not support\n    // it. Since these checks can have performance implications and they aren't tree shakeable\n    // in their current form, we can leave the `isDevMode` check in for now.\n    // tslint:disable-next-line:ban\n    if (!isDevMode() || _isTestEnvironment()) {\n      return false;\n    }\n\n    if (typeof this._sanityChecks === 'boolean') {\n      return this._sanityChecks;\n    }\n\n    return !!this._sanityChecks[name];\n  }\n\n  private _checkDoctypeIsDefined(): void {\n    if (this._checkIsEnabled('doctype') && !this._document.doctype) {\n      console.warn(\n        'Current document does not have a doctype. This may cause ' +\n        'some Angular Material components not to behave as expected.'\n      );\n    }\n  }\n\n  private _checkThemeIsPresent(): void {\n    // We need to assert that the `body` is defined, because these checks run very early\n    // and the `body` won't be defined if the consumer put their scripts in the `head`.\n    if (!this._checkIsEnabled('theme') || !this._document.body ||\n        typeof getComputedStyle !== 'function') {\n      return;\n    }\n\n    const testElement = this._document.createElement('div');\n\n    testElement.classList.add('mat-theme-loaded-marker');\n    this._document.body.appendChild(testElement);\n\n    const computedStyle = getComputedStyle(testElement);\n\n    // In some situations the computed style of the test element can be null. For example in\n    // Firefox, the computed style is null if an application is running inside of a hidden iframe.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    if (computedStyle && computedStyle.display !== 'none') {\n      console.warn(\n        'Could not find Angular Material core theme. Most Material ' +\n        'components may not work as expected. For more info refer ' +\n        'to the theming guide: https://material.angular.io/guide/theming'\n      );\n    }\n\n    this._document.body.removeChild(testElement);\n  }\n\n  /** Checks whether the material version matches the cdk version */\n  private _checkCdkVersionMatch(): void {\n    if (this._checkIsEnabled('version') && VERSION.full !== CDK_VERSION.full) {\n      console.warn(\n          'The Angular Material version (' + VERSION.full + ') does not match ' +\n          'the Angular CDK version (' + CDK_VERSION.full + ').\\n' +\n          'Please ensure the versions of these two packages exactly match.'\n      );\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n  /** Whether the component is disabled. */\n  disabled: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n  return class extends base {\n    private _disabled: boolean = false;\n\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AbstractConstructor, Constructor} from './constructor';\nimport {ElementRef} from '@angular/core';\n\n/** @docs-private */\nexport interface CanColor {\n  /** Theme color palette for the component. */\n  color: ThemePalette;\n\n  /** Default color to fall back to if no value is set. */\n  defaultColor: ThemePalette | undefined;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\n/** @docs-private */\nexport interface HasElementRef {\n  _elementRef: ElementRef;\n}\n\n/** Possible color palette values. */\nexport type ThemePalette = 'primary' | 'accent' | 'warn' | undefined;\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T;\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n    base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n  return class extends base {\n    private _color: ThemePalette;\n    defaultColor = defaultColor;\n\n    get color(): ThemePalette { return this._color; }\n    set color(value: ThemePalette) {\n      const colorPalette = value || this.defaultColor;\n\n      if (colorPalette !== this._color) {\n        if (this._color) {\n          this._elementRef.nativeElement.classList.remove(`mat-${this._color}`);\n        }\n        if (colorPalette) {\n          this._elementRef.nativeElement.classList.add(`mat-${colorPalette}`);\n        }\n\n        this._color = colorPalette;\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n\n      // Set the default color that can be specified from the mixin.\n      this.color = defaultColor;\n    }\n  };\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n  /** Whether ripples are disabled. */\n  disableRipple: boolean;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple> &\n                                   AbstractConstructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\nexport function mixinDisableRipple<T extends AbstractConstructor<{}>>(base: T):\n  CanDisableRippleCtor & T;\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): CanDisableRippleCtor & T {\n  return class extends base {\n    private _disableRipple: boolean = false;\n\n    /** Whether the ripple effect is disabled or not. */\n    get disableRipple() { return this._disableRipple; }\n    set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n\n    constructor(...args: any[]) { super(...args); }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Constructor, AbstractConstructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n  /** Tabindex of the component. */\n  tabIndex: number;\n\n  /** Tabindex to which to fall back to if no value is set. */\n  defaultTabIndex: number;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(base: T,\n  defaultTabIndex?: number): HasTabIndexCtor & T;\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(\n  base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n  return class extends base implements HasTabIndex {\n    private _tabIndex: number = defaultTabIndex;\n    defaultTabIndex = defaultTabIndex;\n\n    get tabIndex(): number { return this.disabled ? -1 : this._tabIndex; }\n    set tabIndex(value: number) {\n      // If the specified tabIndex value is null or undefined, fall back to the default value.\n      this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {AbstractConstructor, Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n  /** Emits whenever the component state changes. */\n  readonly stateChanges: Subject<void>;\n  /** Updates the error state based on the provided error state matcher. */\n  updateErrorState(): void;\n  /** Whether the component is in an error state. */\n  errorState: boolean;\n  /** An object used to control the error state of the component. */\n  errorStateMatcher: ErrorStateMatcher;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState> &\n                                      AbstractConstructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n  _parentFormGroup: FormGroupDirective;\n  _parentForm: NgForm;\n  _defaultErrorStateMatcher: ErrorStateMatcher;\n  ngControl: NgControl;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T):\n  CanUpdateErrorStateCtor & T {\n  return class extends base {\n    // This class member exists as an interop with `MatFormFieldControl` which expects\n    // a public `stateChanges` observable to emit whenever the form field should be updated.\n    // The description is not specifically mentioning the error state, as classes using this\n    // mixin can/should emit an event in other cases too.\n    /** Emits whenever the component state changes. */\n    readonly stateChanges = new Subject<void>();\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    errorStateMatcher: ErrorStateMatcher;\n\n    /** Updates the error state based on the provided error state matcher. */\n    updateErrorState() {\n      const oldState = this.errorState;\n      const parent = this._parentFormGroup || this._parentForm;\n      const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n      const control = this.ngControl ? this.ngControl.control as FormControl : null;\n      const newState = matcher.isErrorState(control, parent);\n\n      if (newState !== oldState) {\n        this.errorState = newState;\n        this.stateChanges.next();\n      }\n    }\n\n    constructor(...args: any[]) {\n      super(...args);\n    }\n  };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Observable, Subscriber} from 'rxjs';\nimport {Constructor} from './constructor';\n\n\n/**\n * Mixin that adds an initialized property to a directive which, when subscribed to, will emit a\n * value once markInitialized has been called, which should be done during the ngOnInit function.\n * If the subscription is made after it has already been marked as initialized, then it will trigger\n * an emit immediately.\n * @docs-private\n */\nexport interface HasInitialized {\n  /** Stream that emits once during the directive/component's ngOnInit. */\n  initialized: Observable<void>;\n\n  /**\n   * Sets the state as initialized and must be called during ngOnInit to notify subscribers that\n   * the directive has been initialized.\n   * @docs-private\n   */\n  _markInitialized: () => void;\n}\n\n/**\n * @docs-private\n * @deprecated No longer necessary to apply to mixin classes. To be made private.\n * @breaking-change 13.0.0\n */\nexport type HasInitializedCtor = Constructor<HasInitialized>;\n\n/** Mixin to augment a directive with an initialized property that will emits when ngOnInit ends. */\nexport function mixinInitialized<T extends Constructor<{}>>(base: T):\n    HasInitializedCtor & T {\n  return class extends base {\n    /** Whether this directive has been marked as initialized. */\n    _isInitialized = false;\n\n    /**\n     * List of subscribers that subscribed before the directive was initialized. Should be notified\n     * during _markInitialized. Set to null after pending subscribers are notified, and should\n     * not expect to be populated after.\n     */\n    _pendingSubscribers: Subscriber<void>[] | null = [];\n\n    /**\n     * Observable stream that emits when the directive initializes. If already initialized, the\n     * subscriber is stored to be notified once _markInitialized is called.\n     */\n    initialized = new Observable<void>(subscriber => {\n      // If initialized, immediately notify the subscriber. Otherwise store the subscriber to notify\n      // when _markInitialized is called.\n      if (this._isInitialized) {\n        this._notifySubscriber(subscriber);\n      } else {\n        this._pendingSubscribers!.push(subscriber);\n      }\n    });\n\n    constructor(...args: any[]) { super(...args); }\n\n    /**\n     * Marks the state as initialized and notifies pending subscribers. Should be called at the end\n     * of ngOnInit.\n     * @docs-private\n     */\n    _markInitialized(): void {\n      if (this._isInitialized && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw Error('This directive has already been marked as initialized and ' +\n            'should not be called twice.');\n      }\n\n      this._isInitialized = true;\n\n      this._pendingSubscribers!.forEach(this._notifySubscriber);\n      this._pendingSubscribers = null;\n    }\n\n    /** Emits and completes the subscriber stream (should only emit once). */\n    _notifySubscriber(subscriber: Subscriber<void>): void {\n      subscriber.next();\n      subscriber.complete();\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\nexport {\n  MatCommonModule,\n  MATERIAL_SANITY_CHECKS,\n  SanityChecks,\n  GranularSanityChecks,\n} from './common-module';\nexport {CanDisable, CanDisableCtor, mixinDisabled} from './disabled';\nexport {CanColor, CanColorCtor, mixinColor, ThemePalette} from './color';\nexport {CanDisableRipple, CanDisableRippleCtor, mixinDisableRipple} from './disable-ripple';\nexport {HasTabIndex, HasTabIndexCtor, mixinTabIndex} from './tabindex';\nexport {CanUpdateErrorState, CanUpdateErrorStateCtor, mixinErrorState} from './error-state';\nexport {HasInitialized, HasInitializedCtor, mixinInitialized} from './initialized';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const MAT_DATE_LOCALE = new InjectionToken<string>('MAT_DATE_LOCALE', {\n  providedIn: 'root',\n  factory: MAT_DATE_LOCALE_FACTORY,\n});\n\n/** @docs-private */\nexport function MAT_DATE_LOCALE_FACTORY(): string {\n  return inject(LOCALE_ID);\n}\n\n/** Adapts type `D` to be usable as a date by cdk-based components that work with dates. */\nexport abstract class DateAdapter<D> {\n  /** The locale to use for all dates. */\n  protected locale: any;\n  protected readonly _localeChanges = new Subject<void>();\n\n  /** A stream that emits when the locale changes. */\n  readonly localeChanges: Observable<void> = this._localeChanges;\n\n  /**\n   * Gets the year component of the given date.\n   * @param date The date to extract the year from.\n   * @returns The year component.\n   */\n  abstract getYear(date: D): number;\n\n  /**\n   * Gets the month component of the given date.\n   * @param date The date to extract the month from.\n   * @returns The month component (0-indexed, 0 = January).\n   */\n  abstract getMonth(date: D): number;\n\n  /**\n   * Gets the date of the month component of the given date.\n   * @param date The date to extract the date of the month from.\n   * @returns The month component (1-indexed, 1 = first of month).\n   */\n  abstract getDate(date: D): number;\n\n  /**\n   * Gets the day of the week component of the given date.\n   * @param date The date to extract the day of the week from.\n   * @returns The month component (0-indexed, 0 = Sunday).\n   */\n  abstract getDayOfWeek(date: D): number;\n\n  /**\n   * Gets a list of names for the months.\n   * @param style The naming style (e.g. long = 'January', short = 'Jan', narrow = 'J').\n   * @returns An ordered list of all month names, starting with January.\n   */\n  abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets a list of names for the dates of the month.\n   * @returns An ordered list of all date of the month names, starting with '1'.\n   */\n  abstract getDateNames(): string[];\n\n  /**\n   * Gets a list of names for the days of the week.\n   * @param style The naming style (e.g. long = 'Sunday', short = 'Sun', narrow = 'S').\n   * @returns An ordered list of all weekday names, starting with Sunday.\n   */\n  abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];\n\n  /**\n   * Gets the name for the year of the given date.\n   * @param date The date to get the year name for.\n   * @returns The name of the given year (e.g. '2017').\n   */\n  abstract getYearName(date: D): string;\n\n  /**\n   * Gets the first day of the week.\n   * @returns The first day of the week (0-indexed, 0 = Sunday).\n   */\n  abstract getFirstDayOfWeek(): number;\n\n  /**\n   * Gets the number of days in the month of the given date.\n   * @param date The date whose month should be checked.\n   * @returns The number of days in the month of the given date.\n   */\n  abstract getNumDaysInMonth(date: D): number;\n\n  /**\n   * Clones the given date.\n   * @param date The date to clone\n   * @returns A new date equal to the given date.\n   */\n  abstract clone(date: D): D;\n\n  /**\n   * Creates a date with the given year, month, and date. Does not allow over/under-flow of the\n   * month and date.\n   * @param year The full year of the date. (e.g. 89 means the year 89, not the year 1989).\n   * @param month The month of the date (0-indexed, 0 = January). Must be an integer 0 - 11.\n   * @param date The date of month of the date. Must be an integer 1 - length of the given month.\n   * @returns The new date, or null if invalid.\n   */\n  abstract createDate(year: number, month: number, date: number): D;\n\n  /**\n   * Gets today's date.\n   * @returns Today's date.\n   */\n  abstract today(): D;\n\n  /**\n   * Parses a date from a user-provided value.\n   * @param value The value to parse.\n   * @param parseFormat The expected format of the value being parsed\n   *     (type is implementation-dependent).\n   * @returns The parsed date.\n   */\n  abstract parse(value: any, parseFormat: any): D | null;\n\n  /**\n   * Formats a date as a string according to the given format.\n   * @param date The value to format.\n   * @param displayFormat The format to use to display the date as a string.\n   * @returns The formatted date string.\n   */\n  abstract format(date: D, displayFormat: any): string;\n\n  /**\n   * Adds the given number of years to the date. Years are counted as if flipping 12 pages on the\n   * calendar for each year and then finding the closest date in the new month. For example when\n   * adding 1 year to Feb 29, 2016, the resulting date will be Feb 28, 2017.\n   * @param date The date to add years to.\n   * @param years The number of years to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of years added.\n   */\n  abstract addCalendarYears(date: D, years: number): D;\n\n  /**\n   * Adds the given number of months to the date. Months are counted as if flipping a page on the\n   * calendar for each month and then finding the closest date in the new month. For example when\n   * adding 1 month to Jan 31, 2017, the resulting date will be Feb 28, 2017.\n   * @param date The date to add months to.\n   * @param months The number of months to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of months added.\n   */\n  abstract addCalendarMonths(date: D, months: number): D;\n\n  /**\n   * Adds the given number of days to the date. Days are counted as if moving one cell on the\n   * calendar for each day.\n   * @param date The date to add days to.\n   * @param days The number of days to add (may be negative).\n   * @returns A new date equal to the given one with the specified number of days added.\n   */\n  abstract addCalendarDays(date: D, days: number): D;\n\n  /**\n   * Gets the RFC 3339 compatible string (https://tools.ietf.org/html/rfc3339) for the given date.\n   * This method is used to generate date strings that are compatible with native HTML attributes\n   * such as the `min` or `max` attribute of an `<input>`.\n   * @param date The date to get the ISO date string for.\n   * @returns The ISO date string date string.\n   */\n  abstract toIso8601(date: D): string;\n\n  /**\n   * Checks whether the given object is considered a date instance by this DateAdapter.\n   * @param obj The object to check\n   * @returns Whether the object is a date instance.\n   */\n  abstract isDateInstance(obj: any): boolean;\n\n  /**\n   * Checks whether the given date is valid.\n   * @param date The date to check.\n   * @returns Whether the date is valid.\n   */\n  abstract isValid(date: D): boolean;\n\n  /**\n   * Gets date instance that is not valid.\n   * @returns An invalid date.\n   */\n  abstract invalid(): D;\n\n /**\n  * Given a potential date object, returns that same date object if it is\n  * a valid date, or `null` if it's not a valid date.\n  * @param obj The object to check.\n  * @returns A date or `null`.\n  */\n  getValidDateOrNull(obj: unknown): D | null {\n    return this.isDateInstance(obj) && this.isValid(obj as D) ? obj as D : null;\n  }\n\n  /**\n   * Attempts to deserialize a value to a valid date object. This is different from parsing in that\n   * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\n   * string). The default implementation does not allow any deserialization, it simply checks that\n   * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\n   * method on all of its `@Input()` properties that accept dates. It is therefore possible to\n   * support passing values from your backend directly to these properties by overriding this method\n   * to also deserialize the format used by your backend.\n   * @param value The value to be deserialized into a date object.\n   * @returns The deserialized date object, either a valid date, null if the value can be\n   *     deserialized into a null date (e.g. the empty string), or an invalid date.\n   */\n  deserialize(value: any): D | null {\n    if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n      return value;\n    }\n    return this.invalid();\n  }\n\n  /**\n   * Sets the locale used for all dates.\n   * @param locale The new locale.\n   */\n  setLocale(locale: any) {\n    this.locale = locale;\n    this._localeChanges.next();\n  }\n\n  /**\n   * Compares two dates.\n   * @param first The first date to compare.\n   * @param second The second date to compare.\n   * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n   *     a number greater than 0 if the first date is later.\n   */\n  compareDate(first: D, second: D): number {\n    return this.getYear(first) - this.getYear(second) ||\n        this.getMonth(first) - this.getMonth(second) ||\n        this.getDate(first) - this.getDate(second);\n  }\n\n  /**\n   * Checks if two dates are equal.\n   * @param first The first date to check.\n   * @param second The second date to check.\n   * @returns Whether the two dates are equal.\n   *     Null dates are considered equal to other null dates.\n   */\n  sameDate(first: D | null, second: D | null): boolean {\n    if (first && second) {\n      let firstValid = this.isValid(first);\n      let secondValid = this.isValid(second);\n      if (firstValid && secondValid) {\n        return !this.compareDate(first, second);\n      }\n      return firstValid == secondValid;\n    }\n    return first == second;\n  }\n\n  /**\n   * Clamp the given date between min and max dates.\n   * @param date The date to clamp.\n   * @param min The minimum value to allow. If null or omitted no min is enforced.\n   * @param max The maximum value to allow. If null or omitted no max is enforced.\n   * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n   *     otherwise `date`.\n   */\n  clampDate(date: D, min?: D | null, max?: D | null): D {\n    if (min && this.compareDate(date, min) < 0) {\n      return min;\n    }\n    if (max && this.compareDate(date, max) > 0) {\n      return max;\n    }\n    return date;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n  parse: {\n    dateInput: any\n  },\n  display: {\n    dateInput: any,\n    monthLabel?: any,\n    monthYearLabel: any,\n    dateA11yLabel: any,\n    monthYearA11yLabel: any,\n  }\n};\n\n\nexport const MAT_DATE_FORMATS = new InjectionToken<MatDateFormats>('mat-date-formats');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {DateAdapter, MAT_DATE_LOCALE} from './date-adapter';\n\n// TODO(mmalerba): Remove when we no longer support safari 9.\n/** Whether the browser supports the Intl API. */\nlet SUPPORTS_INTL_API: boolean;\n\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n  SUPPORTS_INTL_API = typeof Intl != 'undefined';\n} catch {\n  SUPPORTS_INTL_API = false;\n}\n\n/** The default month names to use if Intl API is not available. */\nconst DEFAULT_MONTH_NAMES = {\n  'long': [\n    'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n    'October', 'November', 'December'\n  ],\n  'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\n\n\n/** The default date names to use if Intl API is not available. */\nconst DEFAULT_DATE_NAMES = range(31, i => String(i + 1));\n\n\n/** The default day of the week names to use if Intl API is not available. */\nconst DEFAULT_DAY_OF_WEEK_NAMES = {\n  'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n  'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\n\n\n/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n    /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts the native JS Date for use with cdk-based components that work with dates. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n  /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */\n  private readonly _clampDate: boolean;\n\n  /**\n   * Whether to use `timeZone: 'utc'` with `Intl.DateTimeFormat` when formatting dates.\n   * Without this `Intl.DateTimeFormat` sometimes chooses the wrong timeZone, which can throw off\n   * the result. (e.g. in the en-US locale `new Date(1800, 7, 14).toLocaleDateString()`\n   * will produce `'8/13/1800'`.\n   *\n   * TODO(mmalerba): drop this variable. It's not being used in the code right now. We're now\n   * getting the string representation of a Date object from its utc representation. We're keeping\n   * it here for sometime, just for precaution, in case we decide to revert some of these changes\n   * though.\n   */\n  useUtcForDisplay: boolean = true;\n\n  constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: string, platform: Platform) {\n    super();\n    super.setLocale(matDateLocale);\n\n    // IE does its own time zone correction, so we disable this on IE.\n    this.useUtcForDisplay = !platform.TRIDENT;\n    this._clampDate = platform.TRIDENT || platform.EDGE;\n  }\n\n  getYear(date: Date): number {\n    return date.getFullYear();\n  }\n\n  getMonth(date: Date): number {\n    return date.getMonth();\n  }\n\n  getDate(date: Date): number {\n    return date.getDate();\n  }\n\n  getDayOfWeek(date: Date): number {\n    return date.getDay();\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {month: style, timeZone: 'utc'});\n      return range(12, i =>\n          this._stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));\n    }\n    return DEFAULT_MONTH_NAMES[style];\n  }\n\n  getDateNames(): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {day: 'numeric', timeZone: 'utc'});\n      return range(31, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DATE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {weekday: style, timeZone: 'utc'});\n      return range(7, i => this._stripDirectionalityCharacters(\n          this._format(dtf, new Date(2017, 0, i + 1))));\n    }\n    return DEFAULT_DAY_OF_WEEK_NAMES[style];\n  }\n\n  getYearName(date: Date): string {\n    if (SUPPORTS_INTL_API) {\n      const dtf = new Intl.DateTimeFormat(this.locale, {year: 'numeric', timeZone: 'utc'});\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return String(this.getYear(date));\n  }\n\n  getFirstDayOfWeek(): number {\n    // We can't tell using native JS Date what the first day of the week is, we default to Sunday.\n    return 0;\n  }\n\n  getNumDaysInMonth(date: Date): number {\n    return this.getDate(this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + 1, 0));\n  }\n\n  clone(date: Date): Date {\n    return new Date(date.getTime());\n  }\n\n  createDate(year: number, month: number, date: number): Date {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      // Check for invalid month and date (except upper bound on date which we have to check after\n      // creating the Date).\n      if (month < 0 || month > 11) {\n        throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n      }\n\n      if (date < 1) {\n        throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n      }\n    }\n\n    let result = this._createDateWithOverflow(year, month, date);\n    // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n    if (result.getMonth() != month && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n    }\n\n    return result;\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  parse(value: any): Date | null {\n    // We have no way using the native JS Date to set the parse format or locale, so we ignore these\n    // parameters.\n    if (typeof value == 'number') {\n      return new Date(value);\n    }\n    return value ? new Date(Date.parse(value)) : null;\n  }\n\n  format(date: Date, displayFormat: Object): string {\n    if (!this.isValid(date)) {\n      throw Error('NativeDateAdapter: Cannot format invalid date.');\n    }\n\n    if (SUPPORTS_INTL_API) {\n      // On IE and Edge the i18n API will throw a hard error that can crash the entire app\n      // if we attempt to format a date whose year is less than 1 or greater than 9999.\n      if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n        date = this.clone(date);\n        date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n      }\n\n      displayFormat = {...displayFormat, timeZone: 'utc'};\n\n      const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n      return this._stripDirectionalityCharacters(this._format(dtf, date));\n    }\n    return this._stripDirectionalityCharacters(date.toDateString());\n  }\n\n  addCalendarYears(date: Date, years: number): Date {\n    return this.addCalendarMonths(date, years * 12);\n  }\n\n  addCalendarMonths(date: Date, months: number): Date {\n    let newDate = this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date) + months, this.getDate(date));\n\n    // It's possible to wind up in the wrong month if the original month has more days than the new\n    // month. In this case we want to go to the last day of the desired month.\n    // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n    // guarantee this.\n    if (this.getMonth(newDate) != ((this.getMonth(date) + months) % 12 + 12) % 12) {\n      newDate = this._createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n    }\n\n    return newDate;\n  }\n\n  addCalendarDays(date: Date, days: number): Date {\n    return this._createDateWithOverflow(\n        this.getYear(date), this.getMonth(date), this.getDate(date) + days);\n  }\n\n  toIso8601(date: Date): string {\n    return [\n      date.getUTCFullYear(),\n      this._2digit(date.getUTCMonth() + 1),\n      this._2digit(date.getUTCDate())\n    ].join('-');\n  }\n\n  /**\n   * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\n   * invalid date for all other values.\n   */\n  override deserialize(value: any): Date | null {\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n      // string is the right format first.\n      if (ISO_8601_REGEX.test(value)) {\n        let date = new Date(value);\n        if (this.isValid(date)) {\n          return date;\n        }\n      }\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any) {\n    return obj instanceof Date;\n  }\n\n  isValid(date: Date) {\n    return !isNaN(date.getTime());\n  }\n\n  invalid(): Date {\n    return new Date(NaN);\n  }\n\n  /** Creates a date but allows the month and date to overflow. */\n  private _createDateWithOverflow(year: number, month: number, date: number) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setFullYear` and `setHours` instead.\n    const d = new Date();\n    d.setFullYear(year, month, date);\n    d.setHours(0, 0, 0, 0);\n    return d;\n  }\n\n  /**\n   * Pads a number to make it two digits.\n   * @param n The number to pad.\n   * @returns The padded number.\n   */\n  private _2digit(n: number) {\n    return ('00' + n).slice(-2);\n  }\n\n  /**\n   * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while\n   * other browsers do not. We remove them to make output consistent and because they interfere with\n   * date parsing.\n   * @param str The string to strip direction characters from.\n   * @returns The stripped string.\n   */\n  private _stripDirectionalityCharacters(str: string) {\n    return str.replace(/[\\u200e\\u200f]/g, '');\n  }\n\n  /**\n   * When converting Date object to string, javascript built-in functions may return wrong\n   * results because it applies its internal DST rules. The DST rules around the world change\n   * very frequently, and the current valid rule is not always valid in previous years though.\n   * We work around this problem building a new Date object which has its internal UTC\n   * representation with the local date and time.\n   * @param dtf Intl.DateTimeFormat object, containg the desired string format. It must have\n   *    timeZone set to 'utc' to work fine.\n   * @param date Date from which we want to get the string representation according to dtf\n   * @returns A Date object with its UTC representation based on the passed in date info\n   */\n  private _format(dtf: Intl.DateTimeFormat, date: Date) {\n    // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n    // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n    const d = new Date();\n    d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    return dtf.format(d);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {MatDateFormats} from './date-formats';\n\n\nexport const MAT_NATIVE_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: null,\n  },\n  display: {\n    dateInput: {year: 'numeric', month: 'numeric', day: 'numeric'},\n    monthYearLabel: {year: 'numeric', month: 'short'},\n    dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},\n    monthYearA11yLabel: {year: 'numeric', month: 'long'},\n  }\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {DateAdapter} from './date-adapter';\nimport {MAT_DATE_FORMATS} from './date-formats';\nimport {NativeDateAdapter} from './native-date-adapter';\nimport {MAT_NATIVE_DATE_FORMATS} from './native-date-formats';\n\nexport * from './date-adapter';\nexport * from './date-formats';\nexport * from './native-date-adapter';\nexport * from './native-date-formats';\n\n\n@NgModule({\n  imports: [PlatformModule],\n  providers: [\n    {provide: DateAdapter, useClass: NativeDateAdapter},\n  ],\n})\nexport class NativeDateModule {}\n\n\n@NgModule({\n  imports: [NativeDateModule],\n  providers: [{provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS}],\n})\nexport class MatNativeDateModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {FormGroupDirective, NgForm, FormControl} from '@angular/forms';\n\n/** Error state matcher that matches when a control is invalid and dirty. */\n@Injectable()\nexport class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.dirty || (form && form.submitted)));\n  }\n}\n\n/** Provider that defines how form controls behave with regards to displaying error messages. */\n@Injectable({providedIn: 'root'})\nexport class ErrorStateMatcher {\n  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  NgModule,\n  Directive,\n  ElementRef,\n  QueryList,\n} from '@angular/core';\nimport {startWith} from 'rxjs/operators';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(MatLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n  selector: '[mat-line], [matLine]',\n  host: {'class': 'mat-line'}\n})\nexport class MatLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport function setLines(lines: QueryList<unknown>, element: ElementRef<HTMLElement>,\n                         prefix = 'mat') {\n  // Note: doesn't need to unsubscribe, because `changes`\n  // gets completed by Angular when the view is destroyed.\n  lines.changes.pipe(startWith(lines)).subscribe(({length}) => {\n    setClass(element, `${prefix}-2-line`, false);\n    setClass(element, `${prefix}-3-line`, false);\n    setClass(element, `${prefix}-multi-line`, false);\n\n    if (length === 2 || length === 3) {\n      setClass(element, `${prefix}-${length}-line`, true);\n    } else if (length > 3) {\n      setClass(element, `${prefix}-multi-line`, true);\n    }\n  });\n}\n\n/** Adds or removes a class from an element. */\nfunction setClass(element: ElementRef<HTMLElement>, className: string, isAdd: boolean): void {\n  const classList = element.nativeElement.classList;\n  isAdd ? classList.add(className) : classList.remove(className);\n}\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatLine, MatCommonModule],\n  declarations: [MatLine],\n})\nexport class MatLineModule { }\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/** Possible states for a ripple element. */\nexport const enum RippleState {\n  FADING_IN, VISIBLE, FADING_OUT, HIDDEN\n}\n\nexport type RippleConfig = {\n  color?: string;\n  centered?: boolean;\n  radius?: number;\n  persistent?: boolean;\n  animation?: RippleAnimationConfig;\n  terminateOnPointerUp?: boolean;\n};\n\n/**\n * Interface that describes the configuration for the animation of a ripple.\n * There are two animation phases with different durations for the ripples.\n */\nexport interface RippleAnimationConfig {\n  /** Duration in milliseconds for the enter animation (expansion from point of contact). */\n  enterDuration?: number;\n  /** Duration in milliseconds for the exit animation (fade-out). */\n  exitDuration?: number;\n}\n\n/**\n * Reference to a previously launched ripple element.\n */\nexport class RippleRef {\n\n  /** Current state of the ripple. */\n  state: RippleState = RippleState.HIDDEN;\n\n  constructor(\n    private _renderer: {fadeOutRipple(ref: RippleRef): void},\n    /** Reference to the ripple HTML element. */\n    public element: HTMLElement,\n    /** Ripple configuration used for the ripple. */\n    public config: RippleConfig) {\n  }\n\n  /** Fades out the ripple element. */\n  fadeOut() {\n    this._renderer.fadeOutRipple(this);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader} from '@angular/cdk/a11y';\nimport {coerceElement} from '@angular/cdk/coercion';\nimport {RippleRef, RippleState, RippleConfig} from './ripple-ref';\n\n/**\n * Interface that describes the target for launching ripples.\n * It defines the ripple configuration and disabled state for interaction ripples.\n * @docs-private\n */\nexport interface RippleTarget {\n  /** Configuration for ripples that are launched on pointer down. */\n  rippleConfig: RippleConfig;\n  /** Whether ripples on pointer down should be disabled. */\n  rippleDisabled: boolean;\n}\n\n\n// TODO: import these values from `@material/ripple` eventually.\n/**\n * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n  enterDuration: 225,\n  exitDuration: 150\n};\n\n/**\n * Timeout for ignoring mouse events. Mouse events will be temporary ignored after touch\n * events to avoid synthetic mouse events.\n */\nconst ignoreMouseEventsTimeout = 800;\n\n/** Options that apply to all the event listeners that are bound by the ripple renderer. */\nconst passiveEventOptions = normalizePassiveListenerOptions({passive: true});\n\n/** Events that signal that the pointer is down. */\nconst pointerDownEvents = ['mousedown', 'touchstart'];\n\n/** Events that signal that the pointer is up. */\nconst pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];\n\n/**\n * Helper service that performs DOM manipulations. Not intended to be used outside this module.\n * The constructor takes a reference to the ripple directive's host element and a map of DOM\n * event handlers to be installed on the element that triggers ripple animations.\n * This will eventually become a custom renderer once Angular support exists.\n * @docs-private\n */\nexport class RippleRenderer implements EventListenerObject {\n  /** Element where the ripples are being added to. */\n  private _containerElement: HTMLElement;\n\n  /** Element which triggers the ripple elements on mouse events. */\n  private _triggerElement: HTMLElement | null;\n\n  /** Whether the pointer is currently down or not. */\n  private _isPointerDown = false;\n\n  /** Set of currently active ripple references. */\n  private _activeRipples = new Set<RippleRef>();\n\n  /** Latest non-persistent ripple that was triggered. */\n  private _mostRecentTransientRipple: RippleRef | null;\n\n  /** Time in milliseconds when the last touchstart event happened. */\n  private _lastTouchStartEvent: number;\n\n  /** Whether pointer-up event listeners have been registered. */\n  private _pointerUpEventsRegistered = false;\n\n  /**\n   * Cached dimensions of the ripple container. Set when the first\n   * ripple is shown and cleared once no more ripples are visible.\n   */\n  private _containerRect: ClientRect | null;\n\n  constructor(private _target: RippleTarget,\n              private _ngZone: NgZone,\n              elementOrElementRef: HTMLElement | ElementRef<HTMLElement>,\n              platform: Platform) {\n\n    // Only do anything if we're on the browser.\n    if (platform.isBrowser) {\n      this._containerElement = coerceElement(elementOrElementRef);\n    }\n  }\n\n  /**\n   * Fades in a ripple at the given coordinates.\n   * @param x Coordinate within the element, along the X axis at which to start the ripple.\n   * @param y Coordinate within the element, along the Y axis at which to start the ripple.\n   * @param config Extra ripple options.\n   */\n  fadeInRipple(x: number, y: number, config: RippleConfig = {}): RippleRef {\n    const containerRect = this._containerRect =\n                          this._containerRect || this._containerElement.getBoundingClientRect();\n    const animationConfig = {...defaultRippleAnimationConfig, ...config.animation};\n\n    if (config.centered) {\n      x = containerRect.left + containerRect.width / 2;\n      y = containerRect.top + containerRect.height / 2;\n    }\n\n    const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);\n    const offsetX = x - containerRect.left;\n    const offsetY = y - containerRect.top;\n    const duration = animationConfig.enterDuration;\n\n    const ripple = document.createElement('div');\n    ripple.classList.add('mat-ripple-element');\n\n    ripple.style.left = `${offsetX - radius}px`;\n    ripple.style.top = `${offsetY - radius}px`;\n    ripple.style.height = `${radius * 2}px`;\n    ripple.style.width = `${radius * 2}px`;\n\n    // If a custom color has been specified, set it as inline style. If no color is\n    // set, the default color will be applied through the ripple theme styles.\n    if (config.color != null) {\n      ripple.style.backgroundColor = config.color;\n    }\n\n    ripple.style.transitionDuration = `${duration}ms`;\n\n    this._containerElement.appendChild(ripple);\n\n    // By default the browser does not recalculate the styles of dynamically created\n    // ripple elements. This is critical because then the `scale` would not animate properly.\n    enforceStyleRecalculation(ripple);\n\n    ripple.style.transform = 'scale(1)';\n\n    // Exposed reference to the ripple that will be returned.\n    const rippleRef = new RippleRef(this, ripple, config);\n\n    rippleRef.state = RippleState.FADING_IN;\n\n    // Add the ripple reference to the list of all active ripples.\n    this._activeRipples.add(rippleRef);\n\n    if (!config.persistent) {\n      this._mostRecentTransientRipple = rippleRef;\n    }\n\n    // Wait for the ripple element to be completely faded in.\n    // Once it's faded in, the ripple can be hidden immediately if the mouse is released.\n    this._runTimeoutOutsideZone(() => {\n      const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;\n\n      rippleRef.state = RippleState.VISIBLE;\n\n      // When the timer runs out while the user has kept their pointer down, we want to\n      // keep only the persistent ripples and the latest transient ripple. We do this,\n      // because we don't want stacked transient ripples to appear after their enter\n      // animation has finished.\n      if (!config.persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {\n        rippleRef.fadeOut();\n      }\n    }, duration);\n\n    return rippleRef;\n  }\n\n  /** Fades out a ripple reference. */\n  fadeOutRipple(rippleRef: RippleRef) {\n    const wasActive = this._activeRipples.delete(rippleRef);\n\n    if (rippleRef === this._mostRecentTransientRipple) {\n      this._mostRecentTransientRipple = null;\n    }\n\n    // Clear out the cached bounding rect if we have no more ripples.\n    if (!this._activeRipples.size) {\n      this._containerRect = null;\n    }\n\n    // For ripples that are not active anymore, don't re-run the fade-out animation.\n    if (!wasActive) {\n      return;\n    }\n\n    const rippleEl = rippleRef.element;\n    const animationConfig = {...defaultRippleAnimationConfig, ...rippleRef.config.animation};\n\n    rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;\n    rippleEl.style.opacity = '0';\n    rippleRef.state = RippleState.FADING_OUT;\n\n    // Once the ripple faded out, the ripple can be safely removed from the DOM.\n    this._runTimeoutOutsideZone(() => {\n      rippleRef.state = RippleState.HIDDEN;\n      rippleEl.parentNode!.removeChild(rippleEl);\n    }, animationConfig.exitDuration);\n  }\n\n  /** Fades out all currently active ripples. */\n  fadeOutAll() {\n    this._activeRipples.forEach(ripple => ripple.fadeOut());\n  }\n\n  /** Fades out all currently active non-persistent ripples. */\n  fadeOutAllNonPersistent() {\n    this._activeRipples.forEach(ripple => {\n      if (!ripple.config.persistent) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Sets up the trigger event listeners */\n  setupTriggerEvents(elementOrElementRef: HTMLElement | ElementRef<HTMLElement>) {\n    const element = coerceElement(elementOrElementRef);\n\n    if (!element || element === this._triggerElement) {\n      return;\n    }\n\n    // Remove all previously registered event listeners from the trigger element.\n    this._removeTriggerEvents();\n\n    this._triggerElement = element;\n    this._registerEvents(pointerDownEvents);\n  }\n\n  /**\n   * Handles all registered events.\n   * @docs-private\n   */\n  handleEvent(event: Event) {\n    if (event.type === 'mousedown') {\n      this._onMousedown(event as MouseEvent);\n    } else if (event.type === 'touchstart') {\n      this._onTouchStart(event as TouchEvent);\n    } else {\n      this._onPointerUp();\n    }\n\n    // If pointer-up events haven't been registered yet, do so now.\n    // We do this on-demand in order to reduce the total number of event listeners\n    // registered by the ripples, which speeds up the rendering time for large UIs.\n    if (!this._pointerUpEventsRegistered) {\n      this._registerEvents(pointerUpEvents);\n      this._pointerUpEventsRegistered = true;\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using mouse. */\n  private _onMousedown(event: MouseEvent) {\n    // Screen readers will fire fake mouse events for space/enter. Skip launching a\n    // ripple in this case for consistency with the non-screen-reader experience.\n    const isFakeMousedown = isFakeMousedownFromScreenReader(event);\n    const isSyntheticEvent = this._lastTouchStartEvent &&\n        Date.now() < this._lastTouchStartEvent + ignoreMouseEventsTimeout;\n\n    if (!this._target.rippleDisabled && !isFakeMousedown && !isSyntheticEvent) {\n      this._isPointerDown = true;\n      this.fadeInRipple(event.clientX, event.clientY, this._target.rippleConfig);\n    }\n  }\n\n  /** Function being called whenever the trigger is being pressed using touch. */\n  private _onTouchStart(event: TouchEvent) {\n    if (!this._target.rippleDisabled && !isFakeTouchstartFromScreenReader(event)) {\n      // Some browsers fire mouse events after a `touchstart` event. Those synthetic mouse\n      // events will launch a second ripple if we don't ignore mouse events for a specific\n      // time after a touchstart event.\n      this._lastTouchStartEvent = Date.now();\n      this._isPointerDown = true;\n\n      // Use `changedTouches` so we skip any touches where the user put\n      // their finger down, but used another finger to tap the element again.\n      const touches = event.changedTouches;\n\n      for (let i = 0; i < touches.length; i++) {\n        this.fadeInRipple(touches[i].clientX, touches[i].clientY, this._target.rippleConfig);\n      }\n    }\n  }\n\n  /** Function being called whenever the trigger is being released. */\n  private _onPointerUp() {\n    if (!this._isPointerDown) {\n      return;\n    }\n\n    this._isPointerDown = false;\n\n    // Fade-out all ripples that are visible and not persistent.\n    this._activeRipples.forEach(ripple => {\n      // By default, only ripples that are completely visible will fade out on pointer release.\n      // If the `terminateOnPointerUp` option is set, ripples that still fade in will also fade out.\n      const isVisible = ripple.state === RippleState.VISIBLE ||\n        ripple.config.terminateOnPointerUp && ripple.state === RippleState.FADING_IN;\n\n      if (!ripple.config.persistent && isVisible) {\n        ripple.fadeOut();\n      }\n    });\n  }\n\n  /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */\n  private _runTimeoutOutsideZone(fn: Function, delay = 0) {\n    this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));\n  }\n\n  /** Registers event listeners for a given list of events. */\n  private _registerEvents(eventTypes: string[]) {\n    this._ngZone.runOutsideAngular(() => {\n      eventTypes.forEach((type) => {\n        this._triggerElement!.addEventListener(type, this, passiveEventOptions);\n      });\n    });\n  }\n\n  /** Removes previously registered event listeners from the trigger element. */\n  _removeTriggerEvents() {\n    if (this._triggerElement) {\n      pointerDownEvents.forEach((type) => {\n        this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n      });\n\n      if (this._pointerUpEventsRegistered) {\n        pointerUpEvents.forEach((type) => {\n          this._triggerElement!.removeEventListener(type, this, passiveEventOptions);\n        });\n      }\n    }\n  }\n}\n\n/** Enforces a style recalculation of a DOM element by computing its styles. */\nfunction enforceStyleRecalculation(element: HTMLElement) {\n  // Enforce a style recalculation by calling `getComputedStyle` and accessing any property.\n  // Calling `getPropertyValue` is important to let optimizers know that this is not a noop.\n  // See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n  window.getComputedStyle(element).getPropertyValue('opacity');\n}\n\n/**\n * Returns the distance from the point (x, y) to the furthest corner of a rectangle.\n */\nfunction distanceToFurthestCorner(x: number, y: number, rect: ClientRect) {\n  const distX = Math.max(Math.abs(x - rect.left), Math.abs(x - rect.right));\n  const distY = Math.max(Math.abs(y - rect.top), Math.abs(y - rect.bottom));\n  return Math.sqrt(distX * distX + distY * distY);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  Directive,\n  ElementRef,\n  Inject,\n  InjectionToken,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport {RippleAnimationConfig, RippleConfig, RippleRef} from './ripple-ref';\nimport {RippleRenderer, RippleTarget} from './ripple-renderer';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Configurable options for `matRipple`. */\nexport interface RippleGlobalOptions {\n  /**\n   * Whether ripples should be disabled. Ripples can be still launched manually by using\n   * the `launch()` method. Therefore focus indicators will still show up.\n   */\n  disabled?: boolean;\n\n  /**\n   * Default configuration for the animation duration of the ripples. There are two phases with\n   * different durations for the ripples: `enter` and `leave`. The durations will be overwritten\n   * by the value of `matRippleAnimation` or if the `NoopAnimationsModule` is included.\n   */\n  animation?: RippleAnimationConfig;\n\n  /**\n   * Whether ripples should start fading out immediately after the mouse or touch is released. By\n   * default, ripples will wait for the enter animation to complete and for mouse or touch release.\n   */\n  terminateOnPointerUp?: boolean;\n}\n\n/** Injection token that can be used to specify the global ripple options. */\nexport const MAT_RIPPLE_GLOBAL_OPTIONS =\n    new InjectionToken<RippleGlobalOptions>('mat-ripple-global-options');\n\n@Directive({\n  selector: '[mat-ripple], [matRipple]',\n  exportAs: 'matRipple',\n  host: {\n    'class': 'mat-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class MatRipple implements OnInit, OnDestroy, RippleTarget {\n\n  /** Custom color for all ripples. */\n  @Input('matRippleColor') color: string;\n\n  /** Whether the ripples should be visible outside the component's bounds. */\n  @Input('matRippleUnbounded') unbounded: boolean;\n\n  /**\n   * Whether the ripple always originates from the center of the host element's bounds, rather\n   * than originating from the location of the click event.\n   */\n  @Input('matRippleCentered') centered: boolean;\n\n  /**\n   * If set, the radius in pixels of foreground ripples when fully expanded. If unset, the radius\n   * will be the distance from the center of the ripple to the furthest corner of the host element's\n   * bounding rectangle.\n   */\n  @Input('matRippleRadius') radius: number = 0;\n\n  /**\n   * Configuration for the ripple animation. Allows modifying the enter and exit animation\n   * duration of the ripples. The animation durations will be overwritten if the\n   * `NoopAnimationsModule` is being used.\n   */\n  @Input('matRippleAnimation') animation: RippleAnimationConfig;\n\n  /**\n   * Whether click events will not trigger the ripple. Ripples can be still launched manually\n   * by using the `launch()` method.\n   */\n  @Input('matRippleDisabled')\n  get disabled() { return this._disabled; }\n  set disabled(value: boolean) {\n    if (value) {\n      this.fadeOutAllNonPersistent();\n    }\n    this._disabled = value;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _disabled: boolean = false;\n\n  /**\n   * The element that triggers the ripple when click events are received.\n   * Defaults to the directive's host element.\n   */\n  @Input('matRippleTrigger')\n  get trigger() { return this._trigger || this._elementRef.nativeElement; }\n  set trigger(trigger: HTMLElement) {\n    this._trigger = trigger;\n    this._setupTriggerEventsIfEnabled();\n  }\n  private _trigger: HTMLElement;\n\n  /** Renderer for the ripple DOM manipulations. */\n  private _rippleRenderer: RippleRenderer;\n\n  /** Options that are set globally for all ripples. */\n  private _globalOptions: RippleGlobalOptions;\n\n  /** Whether ripple directive is initialized and the input bindings are set. */\n  private _isInitialized: boolean = false;\n\n  constructor(private _elementRef: ElementRef<HTMLElement>,\n              ngZone: NgZone,\n              platform: Platform,\n              @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalOptions?: RippleGlobalOptions,\n              @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n    this._globalOptions = globalOptions || {};\n    this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n  }\n\n  ngOnInit() {\n    this._isInitialized = true;\n    this._setupTriggerEventsIfEnabled();\n  }\n\n  ngOnDestroy() {\n    this._rippleRenderer._removeTriggerEvents();\n  }\n\n  /** Fades out all currently showing ripple elements. */\n  fadeOutAll() {\n    this._rippleRenderer.fadeOutAll();\n  }\n\n  /** Fades out all currently showing non-persistent ripple elements. */\n  fadeOutAllNonPersistent() {\n    this._rippleRenderer.fadeOutAllNonPersistent();\n  }\n\n  /**\n   * Ripple configuration from the directive's input values.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleConfig(): RippleConfig {\n    return {\n      centered: this.centered,\n      radius: this.radius,\n      color: this.color,\n      animation: {\n        ...this._globalOptions.animation,\n        ...(this._animationMode === 'NoopAnimations' ? {enterDuration: 0, exitDuration: 0} : {}),\n        ...this.animation\n      },\n      terminateOnPointerUp: this._globalOptions.terminateOnPointerUp,\n    };\n  }\n\n  /**\n   * Whether ripples on pointer-down are disabled or not.\n   * @docs-private Implemented as part of RippleTarget\n   */\n  get rippleDisabled(): boolean {\n    return this.disabled || !!this._globalOptions.disabled;\n  }\n\n  /** Sets up the trigger event listeners if ripples are enabled. */\n  private _setupTriggerEventsIfEnabled() {\n    if (!this.disabled && this._isInitialized) {\n      this._rippleRenderer.setupTriggerEvents(this.trigger);\n    }\n  }\n\n  /**\n   * Launches a manual ripple using the specified ripple configuration.\n   * @param config Configuration for the manual ripple.\n   */\n  launch(config: RippleConfig): RippleRef;\n\n  /**\n   * Launches a manual ripple at the specified coordinates relative to the viewport.\n   * @param x Coordinate along the X axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param y Coordinate along the Y axis at which to fade-in the ripple. Coordinate\n   *   should be relative to the viewport.\n   * @param config Optional ripple configuration for the manual ripple.\n   */\n  launch(x: number, y: number, config?: RippleConfig): RippleRef;\n\n  /** Launches a manual ripple at the specified coordinated or just by the ripple config. */\n  launch(configOrX: number | RippleConfig, y: number = 0, config?: RippleConfig): RippleRef {\n    if (typeof configOrX === 'number') {\n      return this._rippleRenderer.fadeInRipple(configOrX, y, {...this.rippleConfig, ...config});\n    } else {\n      return this._rippleRenderer.fadeInRipple(0, 0, {...this.rippleConfig, ...configOrX});\n    }\n  }\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatRipple} from './ripple';\n\nexport * from './ripple';\nexport * from './ripple-ref';\nexport * from './ripple-renderer';\n\n@NgModule({\n  imports: [MatCommonModule, PlatformModule],\n  exports: [MatRipple, MatCommonModule],\n  declarations: [MatRipple],\n})\nexport class MatRippleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  Component,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectionStrategy,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/**\n * Possible states for a pseudo checkbox.\n * @docs-private\n */\nexport type MatPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate';\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `mat-primary .mat-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<mat-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'mat-pseudo-checkbox',\n  styleUrls: ['pseudo-checkbox.css'],\n  template: '',\n  host: {\n    'class': 'mat-pseudo-checkbox',\n    '[class.mat-pseudo-checkbox-indeterminate]': 'state === \"indeterminate\"',\n    '[class.mat-pseudo-checkbox-checked]': 'state === \"checked\"',\n    '[class.mat-pseudo-checkbox-disabled]': 'disabled',\n    '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n  },\n})\nexport class MatPseudoCheckbox {\n  /** Display state of the checkbox. */\n  @Input() state: MatPseudoCheckboxState = 'unchecked';\n\n  /** Whether the checkbox is disabled. */\n  @Input() disabled: boolean = false;\n\n  constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatPseudoCheckbox} from './pseudo-checkbox/pseudo-checkbox';\nimport {MatCommonModule} from '../common-behaviors/common-module';\n\n\n@NgModule({\n  imports: [MatCommonModule],\n  exports: [MatPseudoCheckbox],\n  declarations: [MatPseudoCheckbox]\n})\nexport class MatPseudoCheckboxModule { }\n\n\nexport * from './pseudo-checkbox/pseudo-checkbox';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface MatOptionParentComponent {\n  disableRipple?: boolean;\n  multiple?: boolean;\n  inertGroups?: boolean;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const MAT_OPTION_PARENT_COMPONENT =\n    new InjectionToken<MatOptionParentComponent>('MAT_OPTION_PARENT_COMPONENT');\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n  Directive, Inject, Optional\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '../common-behaviors/disabled';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n// Notes on the accessibility pattern used for `mat-optgroup`.\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\n// pointing to the label. This works for `mat-select`, but it seems to hit a bug for autocomplete\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\n// VoiceOver on Safari won't read it out.\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\n// inside an invisible element in the option. This is sub-optimal, because the screen reader will\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\n// the user enters a new group. The following alternate approaches were considered:\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\n//    when the text will be read out so sometimes it comes in too late or never if the user\n//    navigates quickly.\n// 2. `<mat-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\n//    won't read out the description at all.\n// 3. `<mat-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\n//     doesn't read out the text at all. Furthermore, on\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nconst _MatOptgroupMixinBase = mixinDisabled(class {});\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n@Directive()\nexport class _MatOptgroupBase extends _MatOptgroupMixinBase implements CanDisable {\n  /** Label for the option group. */\n  @Input() label: string;\n\n  /** Unique id for the underlying label. */\n  _labelId: string = `mat-optgroup-label-${_uniqueOptgroupIdCounter++}`;\n\n  /** Whether the group is in inert a11y mode. */\n  _inert: boolean;\n\n  constructor(@Inject(MAT_OPTION_PARENT_COMPONENT) @Optional() parent?: MatOptionParentComponent) {\n    super();\n    this._inert = parent?.inertGroups ?? false;\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Injection token that can be used to reference instances of `MatOptgroup`. It serves as\n * alternative token to the actual `MatOptgroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nexport const MAT_OPTGROUP = new InjectionToken<MatOptgroup>('MatOptgroup');\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n  selector: 'mat-optgroup',\n  exportAs: 'matOptgroup',\n  templateUrl: 'optgroup.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  styleUrls: ['optgroup.css'],\n  host: {\n    'class': 'mat-optgroup',\n    '[attr.role]': '_inert ? null : \"group\"',\n    '[attr.aria-disabled]': '_inert ? null : disabled.toString()',\n    '[attr.aria-labelledby]': '_inert ? null : _labelId',\n    '[class.mat-optgroup-disabled]': 'disabled',\n  },\n  providers: [{provide: MAT_OPTGROUP, useExisting: MatOptgroup}],\n})\nexport class MatOptgroup extends _MatOptgroupBase {\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n  AfterViewChecked,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  Directive,\n} from '@angular/core';\nimport {FocusOptions, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup, _MatOptgroupBase, MAT_OPTGROUP} from './optgroup';\nimport {MatOptionParentComponent, MAT_OPTION_PARENT_COMPONENT} from './option-parent';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet _uniqueIdCounter = 0;\n\n/** Event object emitted by MatOption when selected or deselected. */\nexport class MatOptionSelectionChange {\n  constructor(\n    /** Reference to the option that emitted the event. */\n    public source: _MatOptionBase,\n    /** Whether the change in the option's value was a result of a user action. */\n    public isUserInput = false) { }\n}\n\n@Directive()\nexport class _MatOptionBase implements FocusableOption, AfterViewChecked, OnDestroy {\n  private _selected = false;\n  private _active = false;\n  private _disabled = false;\n  private _mostRecentViewValue = '';\n\n  /** Whether the wrapping component is in multiple selection mode. */\n  get multiple() { return this._parent && this._parent.multiple; }\n\n  /** Whether or not the option is currently selected. */\n  get selected(): boolean { return this._selected; }\n\n  /** The form value of the option. */\n  @Input() value: any;\n\n  /** The unique ID of the option. */\n  @Input() id: string = `mat-option-${_uniqueIdCounter++}`;\n\n  /** Whether the option is disabled. */\n  @Input()\n  get disabled() { return (this.group && this.group.disabled) || this._disabled; }\n  set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }\n\n  /** Whether ripples for the option are disabled. */\n  get disableRipple() { return this._parent && this._parent.disableRipple; }\n\n  /** Event emitted when the option is selected or deselected. */\n  // tslint:disable-next-line:no-output-on-prefix\n  @Output() readonly onSelectionChange = new EventEmitter<MatOptionSelectionChange>();\n\n  /** Emits when the state of the option changes and any parents have to be notified. */\n  readonly _stateChanges = new Subject<void>();\n\n  constructor(\n    private _element: ElementRef<HTMLElement>,\n    private _changeDetectorRef: ChangeDetectorRef,\n    private _parent: MatOptionParentComponent,\n    readonly group: _MatOptgroupBase) {}\n\n  /**\n   * Whether or not the option is currently active and ready to be selected.\n   * An active option displays styles as if it is focused, but the\n   * focus is actually retained somewhere else. This comes in handy\n   * for components like autocomplete where focus must remain on the input.\n   */\n  get active(): boolean {\n    return this._active;\n  }\n\n  /**\n   * The displayed value of the option. It is necessary to show the selected option in the\n   * select's trigger.\n   */\n  get viewValue(): string {\n    // TODO(kara): Add input property alternative for node envs.\n    return (this._getHostElement().textContent || '').trim();\n  }\n\n  /** Selects the option. */\n  select(): void {\n    if (!this._selected) {\n      this._selected = true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Deselects the option. */\n  deselect(): void {\n    if (this._selected) {\n      this._selected = false;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent();\n    }\n  }\n\n  /** Sets focus onto this option. */\n  focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n    // Note that we aren't using `_origin`, but we need to keep it because some internal consumers\n    // use `MatOption` in a `FocusKeyManager` and we need it to match `FocusableOption`.\n    const element = this._getHostElement();\n\n    if (typeof element.focus === 'function') {\n      element.focus(options);\n    }\n  }\n\n  /**\n   * This method sets display styles on the option to make it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setActiveStyles(): void {\n    if (!this._active) {\n      this._active = true;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * This method removes display styles on the option that made it appear\n   * active. This is used by the ActiveDescendantKeyManager so key\n   * events will display the proper options as active on arrow key events.\n   */\n  setInactiveStyles(): void {\n    if (this._active) {\n      this._active = false;\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Gets the label to be used when determining whether the option should be focused. */\n  getLabel(): string {\n    return this.viewValue;\n  }\n\n  /** Ensures the option is selected when activated from the keyboard. */\n  _handleKeydown(event: KeyboardEvent): void {\n    if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\n      this._selectViaInteraction();\n\n      // Prevent the page from scrolling down and form submits.\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * `Selects the option while indicating the selection came from the user. Used to\n   * determine if the select's view -> model callback should be invoked.`\n   */\n  _selectViaInteraction(): void {\n    if (!this.disabled) {\n      this._selected = this.multiple ? !this._selected : true;\n      this._changeDetectorRef.markForCheck();\n      this._emitSelectionChangeEvent(true);\n    }\n  }\n\n  /**\n   * Gets the `aria-selected` value for the option. We explicitly omit the `aria-selected`\n   * attribute from single-selection, unselected options. Including the `aria-selected=\"false\"`\n   * attributes adds a significant amount of noise to screen-reader users without providing useful\n   * information.\n   */\n  _getAriaSelected(): boolean|null {\n    return this.selected || (this.multiple ? false : null);\n  }\n\n  /** Returns the correct tabindex for the option depending on disabled state. */\n  _getTabIndex(): string {\n    return this.disabled ? '-1' : '0';\n  }\n\n  /** Gets the host DOM element. */\n  _getHostElement(): HTMLElement {\n    return this._element.nativeElement;\n  }\n\n  ngAfterViewChecked() {\n    // Since parent components could be using the option's label to display the selected values\n    // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed\n    // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n    // relatively cheap, however we still limit them only to selected options in order to avoid\n    // hitting the DOM too often.\n    if (this._selected) {\n      const viewValue = this.viewValue;\n\n      if (viewValue !== this._mostRecentViewValue) {\n        this._mostRecentViewValue = viewValue;\n        this._stateChanges.next();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  /** Emits the selection change event. */\n  private _emitSelectionChangeEvent(isUserInput = false): void {\n    this.onSelectionChange.emit(new MatOptionSelectionChange(this, isUserInput));\n  }\n\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/**\n * Single option inside of a `<mat-select>` element.\n */\n@Component({\n  selector: 'mat-option',\n  exportAs: 'matOption',\n  host: {\n    'role': 'option',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[class.mat-selected]': 'selected',\n    '[class.mat-option-multiple]': 'multiple',\n    '[class.mat-active]': 'active',\n    '[id]': 'id',\n    '[attr.aria-selected]': '_getAriaSelected()',\n    '[attr.aria-disabled]': 'disabled.toString()',\n    '[class.mat-option-disabled]': 'disabled',\n    '(click)': '_selectViaInteraction()',\n    '(keydown)': '_handleKeydown($event)',\n    'class': 'mat-option mat-focus-indicator',\n  },\n  styleUrls: ['option.css'],\n  templateUrl: 'option.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption extends _MatOptionBase {\n  constructor(\n    element: ElementRef<HTMLElement>,\n    changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) parent: MatOptionParentComponent,\n    @Optional() @Inject(MAT_OPTGROUP) group: MatOptgroup) {\n    super(element, changeDetectorRef, parent, group);\n  }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function _countGroupLabelsBeforeOption(optionIndex: number, options: QueryList<MatOption>,\n  optionGroups: QueryList<MatOptgroup>): number {\n\n  if (optionGroups.length) {\n    let optionsArray = options.toArray();\n    let groups = optionGroups.toArray();\n    let groupCounter = 0;\n\n    for (let i = 0; i < optionIndex + 1; i++) {\n      if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n        groupCounter++;\n      }\n    }\n\n    return groupCounter;\n  }\n\n  return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionOffset Offset of the option from the top of the panel.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n */\nexport function _getOptionScrollPosition(optionOffset: number, optionHeight: number,\n    currentScrollPosition: number, panelHeight: number): number {\n  if (optionOffset < currentScrollPosition) {\n    return optionOffset;\n  }\n\n  if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n    return Math.max(0, optionOffset - panelHeight + optionHeight);\n  }\n\n  return currentScrollPosition;\n}\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatRippleModule} from '../ripple/index';\nimport {MatPseudoCheckboxModule} from '../selection/index';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n  imports: [MatRippleModule, CommonModule, MatCommonModule, MatPseudoCheckboxModule],\n  exports: [MatOption, MatOptgroup],\n  declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\nexport * from './option-parent';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './version';\nexport * from './animation/animation';\nexport * from './common-behaviors/index';\nexport * from './datetime/index';\nexport * from './error/error-options';\nexport * from './line/line';\nexport * from './option/index';\nexport * from './ripple/index';\nexport * from './selection/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {MATERIAL_SANITY_CHECKS_FACTORY as ɵangular_material_src_material_core_core_a} from './common-behaviors/common-module';"],"names":["VERSION","CDK_VERSION"],"mappings":"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"}
Index: trip-planner-front/node_modules/@angular/material/fesm2015/sort.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/sort.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/sort.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,8 +1,8 @@
 import * as i0 from '@angular/core';
 import { InjectionToken, EventEmitter, Directive, Optional, Inject, Input, Output, Injectable, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, NgModule } from '@angular/core';
+import { FocusMonitor, AriaDescriber } from '@angular/cdk/a11y';
 import { coerceBooleanProperty } from '@angular/cdk/coercion';
+import { SPACE, ENTER } from '@angular/cdk/keycodes';
 import { mixinInitialized, mixinDisabled, AnimationDurations, AnimationCurves, MatCommonModule } from '@angular/material/core';
-import { FocusMonitor } from '@angular/cdk/a11y';
-import { SPACE, ENTER } from '@angular/cdk/keycodes';
 import { Subject, merge } from 'rxjs';
 import { trigger, state, style, transition, animate, keyframes, query, animateChild } from '@angular/animations';
@@ -260,6 +260,4 @@
  * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and
  * include it in a custom provider.
- * @deprecated No longer being used. To be removed.
- * @breaking-change 13.0.0
  */
 class MatSortHeaderIntl {
@@ -317,5 +315,7 @@
     // `MatSort` is not optionally injected, but just asserted manually w/ better error.
     // tslint:disable-next-line: lightweight-tokens
-    _sort, _columnDef, _focusMonitor, _elementRef) {
+    _sort, _columnDef, _focusMonitor, _elementRef, 
+    /** @breaking-change 14.0.0 _ariaDescriber will be required. */
+    _ariaDescriber) {
         // Note that we use a string token for the `_columnDef`, because the value is provided both by
         // `material/table` and `cdk/table` and we can't have the CDK depending on Material,
@@ -329,4 +329,5 @@
         this._focusMonitor = _focusMonitor;
         this._elementRef = _elementRef;
+        this._ariaDescriber = _ariaDescriber;
         /**
          * Flag set to true when the indicator should be displayed while the sort is not active. Used to
@@ -348,8 +349,22 @@
         /** Sets the position of the arrow that displays when sorted. */
         this.arrowPosition = 'after';
+        // Default the action description to "Sort" because it's better than nothing.
+        // Without a description, the button's label comes from the sort header text content,
+        // which doesn't give any indication that it performs a sorting operation.
+        this._sortActionDescription = 'Sort';
         if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {
             throw getSortHeaderNotContainedWithinSortError();
         }
         this._handleStateChanges();
+    }
+    /**
+     * Description applied to MatSortHeader's button element with aria-describedby. This text should
+     * describe the action that will occur when the user clicks the sort header.
+     */
+    get sortActionDescription() {
+        return this._sortActionDescription;
+    }
+    set sortActionDescription(value) {
+        this._updateSortActionDescription(value);
     }
     /** Overrides the disable clear value of the containing MatSort for this MatSortable. */
@@ -364,4 +379,6 @@
         this._setAnimationTransitionState({ toState: this._isSorted() ? 'active' : this._arrowDirection });
         this._sort.register(this);
+        this._sortButton = this._elementRef.nativeElement.querySelector('[role="button"]');
+        this._updateSortActionDescription(this._sortActionDescription);
     }
     ngAfterViewInit() {
@@ -480,4 +497,19 @@
     _renderArrow() {
         return !this._isDisabled() || this._isSorted();
+    }
+    _updateSortActionDescription(newDescription) {
+        // We use AriaDescriber for the sort button instead of setting an `aria-label` because some
+        // screen readers (notably VoiceOver) will read both the column header *and* the button's label
+        // for every *cell* in the table, creating a lot of unnecessary noise.
+        var _a, _b;
+        // If _sortButton is undefined, the component hasn't been initialized yet so there's
+        // nothing to update in the DOM.
+        if (this._sortButton) {
+            // removeDescription will no-op if there is no existing message.
+            // TODO(jelbourn): remove optional chaining when AriaDescriber is required.
+            (_a = this._ariaDescriber) === null || _a === void 0 ? void 0 : _a.removeDescription(this._sortButton, this._sortActionDescription);
+            (_b = this._ariaDescriber) === null || _b === void 0 ? void 0 : _b.describe(this._sortButton, newDescription);
+        }
+        this._sortActionDescription = newDescription;
     }
     /** Handles changes in the sorting state. */
@@ -537,5 +569,6 @@
     { type: undefined, decorators: [{ type: Inject, args: ['MAT_SORT_HEADER_COLUMN_DEF',] }, { type: Optional }] },
     { type: FocusMonitor },
-    { type: ElementRef }
+    { type: ElementRef },
+    { type: AriaDescriber, decorators: [{ type: Inject, args: [AriaDescriber,] }, { type: Optional }] }
 ];
 MatSortHeader.propDecorators = {
@@ -543,4 +576,5 @@
     arrowPosition: [{ type: Input }],
     start: [{ type: Input }],
+    sortActionDescription: [{ type: Input }],
     disableClear: [{ type: Input }]
 };
Index: trip-planner-front/node_modules/@angular/material/fesm2015/sort.js.map
===================================================================
--- trip-planner-front/node_modules/@angular/material/fesm2015/sort.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/fesm2015/sort.js.map	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"version":3,"file":"sort.js","sources":["../../../../../../src/material/sort/sort-errors.ts","../../../../../../src/material/sort/sort.ts","../../../../../../src/material/sort/sort-animations.ts","../../../../../../src/material/sort/sort-header-intl.ts","../../../../../../src/material/sort/sort-header.ts","../../../../../../src/material/sort/sort-module.ts","../../../../../../src/material/sort/sort-direction.ts","../../../../../../src/material/sort/public-api.ts","../../../../../../src/material/sort/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @docs-private */\nexport function getSortDuplicateSortableIdError(id: string): Error {\n  return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n\n/** @docs-private */\nexport function getSortHeaderNotContainedWithinSortError(): Error {\n  return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n\n/** @docs-private */\nexport function getSortHeaderMissingIdError(): Error {\n  return Error(`MatSortHeader must be provided with a unique id.`);\n}\n\n/** @docs-private */\nexport function getSortInvalidDirectionError(direction: string): Error {\n  return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CanDisable,\n  HasInitialized,\n  mixinDisabled,\n  mixinInitialized,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {SortDirection} from './sort-direction';\nimport {\n  getSortDuplicateSortableIdError,\n  getSortHeaderMissingIdError,\n  getSortInvalidDirectionError,\n} from './sort-errors';\n\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\nexport interface MatSortable {\n  /** The id of the column being sorted. */\n  id: string;\n\n  /** Starting sort direction. */\n  start: 'asc' | 'desc';\n\n  /** Whether to disable clearing the sorting state. */\n  disableClear: boolean;\n}\n\n/** The current sort state. */\nexport interface Sort {\n  /** The id of the column being sorted. */\n  active: string;\n\n  /** The sort direction. */\n  direction: SortDirection;\n}\n\n/** Default options for `mat-sort`.  */\nexport interface MatSortDefaultOptions {\n  /** Whether to disable clearing the sorting state. */\n  disableClear?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-sort`. */\nexport const MAT_SORT_DEFAULT_OPTIONS =\n    new InjectionToken<MatSortDefaultOptions>('MAT_SORT_DEFAULT_OPTIONS');\n\n\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {}));\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n  selector: '[matSort]',\n  exportAs: 'matSort',\n  host: {'class': 'mat-sort'},\n  inputs: ['disabled: matSortDisabled']\n})\nexport class MatSort extends _MatSortBase\n    implements CanDisable, HasInitialized, OnChanges, OnDestroy, OnInit {\n  /** Collection of all registered sortables that this directive manages. */\n  sortables = new Map<string, MatSortable>();\n\n  /** Used to notify any child components listening to state changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  /** The id of the most recently sorted MatSortable. */\n  @Input('matSortActive') active: string;\n\n  /**\n   * The direction to set when an MatSortable is initially sorted.\n   * May be overriden by the MatSortable's sort start.\n   */\n  @Input('matSortStart') start: 'asc' | 'desc' = 'asc';\n\n  /** The sort direction of the currently active MatSortable. */\n  @Input('matSortDirection')\n  get direction(): SortDirection { return this._direction; }\n  set direction(direction: SortDirection) {\n    if (direction && direction !== 'asc' && direction !== 'desc' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortInvalidDirectionError(direction);\n    }\n    this._direction = direction;\n  }\n  private _direction: SortDirection = '';\n\n  /**\n   * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n   * May be overriden by the MatSortable's disable clear input.\n   */\n  @Input('matSortDisableClear')\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v: boolean) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  /** Event emitted when the user changes either the active sort or sort direction. */\n  @Output('matSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n  constructor(@Optional() @Inject(MAT_SORT_DEFAULT_OPTIONS)\n              private _defaultOptions?: MatSortDefaultOptions) {\n    super();\n  }\n\n  /**\n   * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n   * collection of MatSortables.\n   */\n  register(sortable: MatSortable): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!sortable.id) {\n        throw getSortHeaderMissingIdError();\n      }\n\n      if (this.sortables.has(sortable.id)) {\n        throw getSortDuplicateSortableIdError(sortable.id);\n      }\n    }\n\n    this.sortables.set(sortable.id, sortable);\n  }\n\n  /**\n   * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n   * collection of contained MatSortables.\n   */\n  deregister(sortable: MatSortable): void {\n    this.sortables.delete(sortable.id);\n  }\n\n  /** Sets the active sort id and determines the new sort direction. */\n  sort(sortable: MatSortable): void {\n    if (this.active != sortable.id) {\n      this.active = sortable.id;\n      this.direction = sortable.start ? sortable.start : this.start;\n    } else {\n      this.direction = this.getNextSortDirection(sortable);\n    }\n\n    this.sortChange.emit({active: this.active, direction: this.direction});\n  }\n\n  /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n  getNextSortDirection(sortable: MatSortable): SortDirection {\n    if (!sortable) { return ''; }\n\n    // Get the sort direction cycle with the potential sortable overrides.\n    const disableClear = sortable?.disableClear ??\n        this.disableClear ?? !!this._defaultOptions?.disableClear;\n    let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n    // Get and return the next direction in the cycle\n    let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n    if (nextDirectionIndex >= sortDirectionCycle.length) { nextDirectionIndex = 0; }\n    return sortDirectionCycle[nextDirectionIndex];\n  }\n\n  ngOnInit() {\n    this._markInitialized();\n  }\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start: 'asc' | 'desc',\n                               disableClear: boolean): SortDirection[] {\n  let sortOrder: SortDirection[] = ['asc', 'desc'];\n  if (start == 'desc') { sortOrder.reverse(); }\n  if (!disableClear) { sortOrder.push(''); }\n\n  return sortOrder;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  keyframes,\n  AnimationTriggerMetadata, query, animateChild,\n} from '@angular/animations';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\nconst SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' +\n                                  AnimationCurves.STANDARD_CURVE;\n\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nexport const matSortAnimations: {\n  readonly indicator: AnimationTriggerMetadata;\n  readonly leftPointer: AnimationTriggerMetadata;\n  readonly rightPointer: AnimationTriggerMetadata;\n  readonly arrowOpacity: AnimationTriggerMetadata;\n  readonly arrowPosition: AnimationTriggerMetadata;\n  readonly allowChildren: AnimationTriggerMetadata;\n} = {\n  /** Animation that moves the sort indicator. */\n  indicator: trigger('indicator', [\n    state('active-asc, asc', style({transform: 'translateY(0px)'})),\n    // 10px is the height of the sort indicator, minus the width of the pointers\n    state('active-desc, desc', style({transform: 'translateY(10px)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n  leftPointer: trigger('leftPointer', [\n    state('active-asc, asc', style({transform: 'rotate(-45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n  rightPointer: trigger('rightPointer', [\n    state('active-asc, asc', style({transform: 'rotate(45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(-45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that controls the arrow opacity. */\n  arrowOpacity: trigger('arrowOpacity', [\n    state('desc-to-active, asc-to-active, active', style({opacity: 1})),\n    state('desc-to-hint, asc-to-hint, hint', style({opacity: .54})),\n    state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void',\n        style({opacity: 0})),\n    // Transition between all states except for immediate transitions\n    transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n    transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n  ]),\n\n  /**\n   * Animation for the translation of the arrow as a whole. States are separated into two\n   * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n   * peek, and active. The other states define a specific animation (source-to-destination)\n   * and are determined as a function of their prev user-perceived state and what the next state\n   * should be.\n   */\n  arrowPosition: trigger('arrowPosition', [\n    // Hidden Above => Hint Center\n    transition('* => desc-to-hint, * => desc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(-25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Below\n    transition('* => hint-to-desc, * => active-to-desc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(25%)'})\n        ]))),\n    // Hidden Below => Hint Center\n    transition('* => asc-to-hint, * => asc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Above\n    transition('* => hint-to-asc, * => active-to-asc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(-25%)'})\n        ]))),\n    state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active',\n        style({transform: 'translateY(0)'})),\n    state('hint-to-desc, active-to-desc, desc',\n        style({transform: 'translateY(-25%)'})),\n    state('hint-to-asc, active-to-asc, asc',\n        style({transform: 'translateY(25%)'})),\n  ]),\n\n  /** Necessary trigger that calls animate on children animations. */\n  allowChildren: trigger('allowChildren', [\n    transition('* <=> *', [\n      query('@*', animateChild(), {optional: true})\n    ])\n  ]),\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, SkipSelf, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 13.0.0\n */\n@Injectable({providedIn: 'root'})\nexport class MatSortHeaderIntl {\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  readonly changes: Subject<void> = new Subject<void>();\n}\n\n/** @docs-private */\nexport function MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl: MatSortHeaderIntl) {\n  return parentIntl || new MatSortHeaderIntl();\n}\n\n/** @docs-private */\nexport const MAT_SORT_HEADER_INTL_PROVIDER = {\n  // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n  provide: MatSortHeaderIntl,\n  deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n  useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY\n};\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  ViewEncapsulation,\n  Inject,\n  ElementRef,\n  AfterViewInit,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {merge, Subscription} from 'rxjs';\nimport {MatSort, MatSortable} from './sort';\nimport {matSortAnimations} from './sort-animations';\nimport {SortDirection} from './sort-direction';\nimport {getSortHeaderNotContainedWithinSortError} from './sort-errors';\nimport {MatSortHeaderIntl} from './sort-header-intl';\n\n\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {});\n\n/**\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\n * be fully opaque in the center.\n *\n * @docs-private\n */\nexport type ArrowViewState = SortDirection | 'hint' | 'active';\n\n/**\n * States describing the arrow's animated position (animating fromState to toState).\n * If the fromState is not defined, there will be no animated transition to the toState.\n * @docs-private\n */\nexport interface ArrowViewStateTransition {\n  fromState?: ArrowViewState;\n  toState?: ArrowViewState;\n}\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface MatSortHeaderColumnDef {\n  name: string;\n}\n\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\n@Component({\n  selector: '[mat-sort-header]',\n  exportAs: 'matSortHeader',\n  templateUrl: 'sort-header.html',\n  styleUrls: ['sort-header.css'],\n  host: {\n    'class': 'mat-sort-header',\n    '(click)': '_handleClick()',\n    '(keydown)': '_handleKeydown($event)',\n    '(mouseenter)': '_setIndicatorHintVisible(true)',\n    '(mouseleave)': '_setIndicatorHintVisible(false)',\n    '[attr.aria-sort]': '_getAriaSortAttribute()',\n    '[class.mat-sort-header-disabled]': '_isDisabled()',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  animations: [\n    matSortAnimations.indicator,\n    matSortAnimations.leftPointer,\n    matSortAnimations.rightPointer,\n    matSortAnimations.arrowOpacity,\n    matSortAnimations.arrowPosition,\n    matSortAnimations.allowChildren,\n  ]\n})\nexport class MatSortHeader extends _MatSortHeaderBase\n    implements CanDisable, MatSortable, OnDestroy, OnInit, AfterViewInit {\n  private _rerenderSubscription: Subscription;\n\n  /**\n   * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n   * provide an affordance that the header is sortable by showing on focus and hover.\n   */\n  _showIndicatorHint: boolean = false;\n\n  /**\n   * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n   * position through the animation. If animations are currently disabled, the fromState is removed\n   * so that there is no animation displayed.\n   */\n  _viewState: ArrowViewStateTransition = { };\n\n  /** The direction the arrow should be facing according to the current state. */\n  _arrowDirection: SortDirection = '';\n\n  /**\n   * Whether the view state animation should show the transition between the `from` and `to` states.\n   */\n  _disableViewStateAnimation = false;\n\n  /**\n   * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n   * the column's name.\n   */\n  @Input('mat-sort-header') id: string;\n\n  /** Sets the position of the arrow that displays when sorted. */\n  @Input() arrowPosition: 'before' | 'after' = 'after';\n\n  /** Overrides the sort start value of the containing MatSort for this MatSortable. */\n  @Input() start: 'asc' | 'desc';\n\n  /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n  @Input()\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  constructor(\n              /**\n               * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n               * @breaking-change 13.0.0\n               */\n              public _intl: MatSortHeaderIntl,\n              private _changeDetectorRef: ChangeDetectorRef,\n              // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n              // tslint:disable-next-line: lightweight-tokens\n              @Optional() public _sort: MatSort,\n              @Inject('MAT_SORT_HEADER_COLUMN_DEF') @Optional()\n                  public _columnDef: MatSortHeaderColumnDef,\n              private _focusMonitor: FocusMonitor,\n              private _elementRef: ElementRef<HTMLElement>) {\n    // Note that we use a string token for the `_columnDef`, because the value is provided both by\n    // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n    // and we want to avoid having the sort header depending on the CDK table because\n    // of this single reference.\n    super();\n\n    if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortHeaderNotContainedWithinSortError();\n    }\n\n    this._handleStateChanges();\n  }\n\n  ngOnInit() {\n    if (!this.id && this._columnDef) {\n      this.id = this._columnDef.name;\n    }\n\n    // Initialize the direction of the arrow and set the view state to be immediately that state.\n    this._updateArrowDirection();\n    this._setAnimationTransitionState(\n        {toState: this._isSorted() ? 'active' : this._arrowDirection});\n\n    this._sort.register(this);\n  }\n\n  ngAfterViewInit() {\n    // We use the focus monitor because we also want to style\n    // things differently based on the focus origin.\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n      const newState = !!origin;\n      if (newState !== this._showIndicatorHint) {\n        this._setIndicatorHintVisible(newState);\n        this._changeDetectorRef.markForCheck();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._sort.deregister(this);\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /**\n   * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n   * user showing what the active sort will become. If set to false, the arrow will fade away.\n   */\n  _setIndicatorHintVisible(visible: boolean) {\n    // No-op if the sort header is disabled - should not make the hint visible.\n    if (this._isDisabled() && visible) { return; }\n\n    this._showIndicatorHint = visible;\n\n    if (!this._isSorted()) {\n      this._updateArrowDirection();\n      if (this._showIndicatorHint) {\n        this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'hint'});\n      } else {\n        this._setAnimationTransitionState({fromState: 'hint', toState: this._arrowDirection});\n      }\n    }\n  }\n\n  /**\n   * Sets the animation transition view state for the arrow's position and opacity. If the\n   * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n   * no animation appears.\n   */\n  _setAnimationTransitionState(viewState: ArrowViewStateTransition) {\n    this._viewState = viewState || { };\n\n    // If the animation for arrow position state (opacity/translation) should be disabled,\n    // remove the fromState so that it jumps right to the toState.\n    if (this._disableViewStateAnimation) {\n      this._viewState = {toState: viewState.toState};\n    }\n  }\n\n  /** Triggers the sort on this sort header and removes the indicator hint. */\n  _toggleOnInteraction() {\n    this._sort.sort(this);\n\n    // Do not show the animation if the header was already shown in the right position.\n    if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n      this._disableViewStateAnimation = true;\n    }\n  }\n\n  _handleClick() {\n    if (!this._isDisabled()) {\n      this._sort.sort(this);\n    }\n  }\n\n  _handleKeydown(event: KeyboardEvent) {\n    if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n      event.preventDefault();\n      this._toggleOnInteraction();\n    }\n  }\n\n  /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n  _isSorted() {\n    return this._sort.active == this.id &&\n        (this._sort.direction === 'asc' || this._sort.direction === 'desc');\n  }\n\n  /** Returns the animation state for the arrow direction (indicator and pointers). */\n  _getArrowDirectionState() {\n    return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n  }\n\n  /** Returns the arrow position state (opacity, translation). */\n  _getArrowViewState() {\n    const fromState = this._viewState.fromState;\n    return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n  }\n\n  /**\n   * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n   * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n   * active sorted direction. The reason this is updated through a function is because the direction\n   * should only be changed at specific times - when deactivated but the hint is displayed and when\n   * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n   * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n   * preserving its direction, even though the next sort direction is actually different and should\n   * only be changed once the arrow displays again (hint or activation).\n   */\n  _updateArrowDirection() {\n    this._arrowDirection = this._isSorted() ?\n        this._sort.direction :\n        (this.start || this._sort.start);\n  }\n\n  _isDisabled() {\n    return this._sort.disabled || this.disabled;\n  }\n\n  /**\n   * Gets the aria-sort attribute that should be applied to this sort header. If this header\n   * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n   * says that the aria-sort property should only be present on one header at a time, so removing\n   * ensures this is true.\n   */\n  _getAriaSortAttribute() {\n    if (!this._isSorted()) {\n      return 'none';\n    }\n\n    return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n  }\n\n  /** Whether the arrow inside the sort header should be rendered. */\n  _renderArrow() {\n    return !this._isDisabled() || this._isSorted();\n  }\n\n  /** Handles changes in the sorting state. */\n  private _handleStateChanges() {\n    this._rerenderSubscription =\n      merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n        if (this._isSorted()) {\n          this._updateArrowDirection();\n\n          // Do not show the animation if the header was already shown in the right position.\n          if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n            this._disableViewStateAnimation = true;\n          }\n\n          this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'active'});\n          this._showIndicatorHint = false;\n        }\n\n        // If this header was recently active and now no longer sorted, animate away the arrow.\n        if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n          this._disableViewStateAnimation = false;\n          this._setAnimationTransitionState({fromState: 'active', toState: this._arrowDirection});\n        }\n\n        this._changeDetectorRef.markForCheck();\n      });\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatSortHeader} from './sort-header';\nimport {MatSort} from './sort';\nimport {MAT_SORT_HEADER_INTL_PROVIDER} from './sort-header-intl';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\n\n\n@NgModule({\n  imports: [CommonModule, MatCommonModule],\n  exports: [MatSort, MatSortHeader],\n  declarations: [MatSort, MatSortHeader],\n  providers: [MAT_SORT_HEADER_INTL_PROVIDER]\n})\nexport class MatSortModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport type SortDirection = 'asc' | 'desc' | '';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sort-module';\nexport * from './sort-direction';\nexport * from './sort-header';\nexport * from './sort-header-intl';\nexport * from './sort';\nexport * from './sort-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
+{"version":3,"file":"sort.js","sources":["../../../../../../src/material/sort/sort-errors.ts","../../../../../../src/material/sort/sort.ts","../../../../../../src/material/sort/sort-animations.ts","../../../../../../src/material/sort/sort-header-intl.ts","../../../../../../src/material/sort/sort-header.ts","../../../../../../src/material/sort/sort-module.ts","../../../../../../src/material/sort/sort-direction.ts","../../../../../../src/material/sort/public-api.ts","../../../../../../src/material/sort/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @docs-private */\nexport function getSortDuplicateSortableIdError(id: string): Error {\n  return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n\n/** @docs-private */\nexport function getSortHeaderNotContainedWithinSortError(): Error {\n  return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n\n/** @docs-private */\nexport function getSortHeaderMissingIdError(): Error {\n  return Error(`MatSortHeader must be provided with a unique id.`);\n}\n\n/** @docs-private */\nexport function getSortInvalidDirectionError(direction: string): Error {\n  return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  Directive,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CanDisable,\n  HasInitialized,\n  mixinDisabled,\n  mixinInitialized,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {SortDirection} from './sort-direction';\nimport {\n  getSortDuplicateSortableIdError,\n  getSortHeaderMissingIdError,\n  getSortInvalidDirectionError,\n} from './sort-errors';\n\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\nexport interface MatSortable {\n  /** The id of the column being sorted. */\n  id: string;\n\n  /** Starting sort direction. */\n  start: 'asc' | 'desc';\n\n  /** Whether to disable clearing the sorting state. */\n  disableClear: boolean;\n}\n\n/** The current sort state. */\nexport interface Sort {\n  /** The id of the column being sorted. */\n  active: string;\n\n  /** The sort direction. */\n  direction: SortDirection;\n}\n\n/** Default options for `mat-sort`.  */\nexport interface MatSortDefaultOptions {\n  /** Whether to disable clearing the sorting state. */\n  disableClear?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-sort`. */\nexport const MAT_SORT_DEFAULT_OPTIONS =\n    new InjectionToken<MatSortDefaultOptions>('MAT_SORT_DEFAULT_OPTIONS');\n\n\n// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nconst _MatSortBase = mixinInitialized(mixinDisabled(class {}));\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n  selector: '[matSort]',\n  exportAs: 'matSort',\n  host: {'class': 'mat-sort'},\n  inputs: ['disabled: matSortDisabled']\n})\nexport class MatSort extends _MatSortBase\n    implements CanDisable, HasInitialized, OnChanges, OnDestroy, OnInit {\n  /** Collection of all registered sortables that this directive manages. */\n  sortables = new Map<string, MatSortable>();\n\n  /** Used to notify any child components listening to state changes. */\n  readonly _stateChanges = new Subject<void>();\n\n  /** The id of the most recently sorted MatSortable. */\n  @Input('matSortActive') active: string;\n\n  /**\n   * The direction to set when an MatSortable is initially sorted.\n   * May be overriden by the MatSortable's sort start.\n   */\n  @Input('matSortStart') start: 'asc' | 'desc' = 'asc';\n\n  /** The sort direction of the currently active MatSortable. */\n  @Input('matSortDirection')\n  get direction(): SortDirection { return this._direction; }\n  set direction(direction: SortDirection) {\n    if (direction && direction !== 'asc' && direction !== 'desc' &&\n      (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortInvalidDirectionError(direction);\n    }\n    this._direction = direction;\n  }\n  private _direction: SortDirection = '';\n\n  /**\n   * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n   * May be overriden by the MatSortable's disable clear input.\n   */\n  @Input('matSortDisableClear')\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v: boolean) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  /** Event emitted when the user changes either the active sort or sort direction. */\n  @Output('matSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n  constructor(@Optional() @Inject(MAT_SORT_DEFAULT_OPTIONS)\n              private _defaultOptions?: MatSortDefaultOptions) {\n    super();\n  }\n\n  /**\n   * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n   * collection of MatSortables.\n   */\n  register(sortable: MatSortable): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!sortable.id) {\n        throw getSortHeaderMissingIdError();\n      }\n\n      if (this.sortables.has(sortable.id)) {\n        throw getSortDuplicateSortableIdError(sortable.id);\n      }\n    }\n\n    this.sortables.set(sortable.id, sortable);\n  }\n\n  /**\n   * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n   * collection of contained MatSortables.\n   */\n  deregister(sortable: MatSortable): void {\n    this.sortables.delete(sortable.id);\n  }\n\n  /** Sets the active sort id and determines the new sort direction. */\n  sort(sortable: MatSortable): void {\n    if (this.active != sortable.id) {\n      this.active = sortable.id;\n      this.direction = sortable.start ? sortable.start : this.start;\n    } else {\n      this.direction = this.getNextSortDirection(sortable);\n    }\n\n    this.sortChange.emit({active: this.active, direction: this.direction});\n  }\n\n  /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n  getNextSortDirection(sortable: MatSortable): SortDirection {\n    if (!sortable) { return ''; }\n\n    // Get the sort direction cycle with the potential sortable overrides.\n    const disableClear = sortable?.disableClear ??\n        this.disableClear ?? !!this._defaultOptions?.disableClear;\n    let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n    // Get and return the next direction in the cycle\n    let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n    if (nextDirectionIndex >= sortDirectionCycle.length) { nextDirectionIndex = 0; }\n    return sortDirectionCycle[nextDirectionIndex];\n  }\n\n  ngOnInit() {\n    this._markInitialized();\n  }\n\n  ngOnChanges() {\n    this._stateChanges.next();\n  }\n\n  ngOnDestroy() {\n    this._stateChanges.complete();\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start: 'asc' | 'desc',\n                               disableClear: boolean): SortDirection[] {\n  let sortOrder: SortDirection[] = ['asc', 'desc'];\n  if (start == 'desc') { sortOrder.reverse(); }\n  if (!disableClear) { sortOrder.push(''); }\n\n  return sortOrder;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n  keyframes,\n  AnimationTriggerMetadata, query, animateChild,\n} from '@angular/animations';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\nconst SORT_ANIMATION_TRANSITION = AnimationDurations.ENTERING + ' ' +\n                                  AnimationCurves.STANDARD_CURVE;\n\n/**\n * Animations used by MatSort.\n * @docs-private\n */\nexport const matSortAnimations: {\n  readonly indicator: AnimationTriggerMetadata;\n  readonly leftPointer: AnimationTriggerMetadata;\n  readonly rightPointer: AnimationTriggerMetadata;\n  readonly arrowOpacity: AnimationTriggerMetadata;\n  readonly arrowPosition: AnimationTriggerMetadata;\n  readonly allowChildren: AnimationTriggerMetadata;\n} = {\n  /** Animation that moves the sort indicator. */\n  indicator: trigger('indicator', [\n    state('active-asc, asc', style({transform: 'translateY(0px)'})),\n    // 10px is the height of the sort indicator, minus the width of the pointers\n    state('active-desc, desc', style({transform: 'translateY(10px)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the left pointer of the indicator based on the sorting direction. */\n  leftPointer: trigger('leftPointer', [\n    state('active-asc, asc', style({transform: 'rotate(-45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that rotates the right pointer of the indicator based on the sorting direction. */\n  rightPointer: trigger('rightPointer', [\n    state('active-asc, asc', style({transform: 'rotate(45deg)'})),\n    state('active-desc, desc', style({transform: 'rotate(-45deg)'})),\n    transition('active-asc <=> active-desc', animate(SORT_ANIMATION_TRANSITION))\n  ]),\n\n  /** Animation that controls the arrow opacity. */\n  arrowOpacity: trigger('arrowOpacity', [\n    state('desc-to-active, asc-to-active, active', style({opacity: 1})),\n    state('desc-to-hint, asc-to-hint, hint', style({opacity: .54})),\n    state('hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void',\n        style({opacity: 0})),\n    // Transition between all states except for immediate transitions\n    transition('* => asc, * => desc, * => active, * => hint, * => void', animate('0ms')),\n    transition('* <=> *', animate(SORT_ANIMATION_TRANSITION)),\n  ]),\n\n  /**\n   * Animation for the translation of the arrow as a whole. States are separated into two\n   * groups: ones with animations and others that are immediate. Immediate states are asc, desc,\n   * peek, and active. The other states define a specific animation (source-to-destination)\n   * and are determined as a function of their prev user-perceived state and what the next state\n   * should be.\n   */\n  arrowPosition: trigger('arrowPosition', [\n    // Hidden Above => Hint Center\n    transition('* => desc-to-hint, * => desc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(-25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Below\n    transition('* => hint-to-desc, * => active-to-desc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(25%)'})\n        ]))),\n    // Hidden Below => Hint Center\n    transition('* => asc-to-hint, * => asc-to-active',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(25%)'}),\n          style({transform: 'translateY(0)'})\n        ]))),\n    // Hint Center => Hidden Above\n    transition('* => hint-to-asc, * => active-to-asc',\n        animate(SORT_ANIMATION_TRANSITION, keyframes([\n          style({transform: 'translateY(0)'}),\n          style({transform: 'translateY(-25%)'})\n        ]))),\n    state('desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active',\n        style({transform: 'translateY(0)'})),\n    state('hint-to-desc, active-to-desc, desc',\n        style({transform: 'translateY(-25%)'})),\n    state('hint-to-asc, active-to-asc, asc',\n        style({transform: 'translateY(25%)'})),\n  ]),\n\n  /** Necessary trigger that calls animate on children animations. */\n  allowChildren: trigger('allowChildren', [\n    transition('* <=> *', [\n      query('@*', animateChild(), {optional: true})\n    ])\n  ]),\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Injectable, SkipSelf, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n */\n@Injectable({providedIn: 'root'})\nexport class MatSortHeaderIntl {\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  readonly changes: Subject<void> = new Subject<void>();\n}\n\n/** @docs-private */\nexport function MAT_SORT_HEADER_INTL_PROVIDER_FACTORY(parentIntl: MatSortHeaderIntl) {\n  return parentIntl || new MatSortHeaderIntl();\n}\n\n/** @docs-private */\nexport const MAT_SORT_HEADER_INTL_PROVIDER = {\n  // If there is already an MatSortHeaderIntl available, use that. Otherwise, provide a new one.\n  provide: MatSortHeaderIntl,\n  deps: [[new Optional(), new SkipSelf(), MatSortHeaderIntl]],\n  useFactory: MAT_SORT_HEADER_INTL_PROVIDER_FACTORY\n};\n\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, mixinDisabled} from '@angular/material/core';\nimport {merge, Subscription} from 'rxjs';\nimport {MatSort, MatSortable} from './sort';\nimport {matSortAnimations} from './sort-animations';\nimport {SortDirection} from './sort-direction';\nimport {getSortHeaderNotContainedWithinSortError} from './sort-errors';\nimport {MatSortHeaderIntl} from './sort-header-intl';\n\n\n// Boilerplate for applying mixins to the sort header.\n/** @docs-private */\nconst _MatSortHeaderBase = mixinDisabled(class {});\n\n/**\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\n * be fully opaque in the center.\n *\n * @docs-private\n */\nexport type ArrowViewState = SortDirection | 'hint' | 'active';\n\n/**\n * States describing the arrow's animated position (animating fromState to toState).\n * If the fromState is not defined, there will be no animated transition to the toState.\n * @docs-private\n */\nexport interface ArrowViewStateTransition {\n  fromState?: ArrowViewState;\n  toState?: ArrowViewState;\n}\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface MatSortHeaderColumnDef {\n  name: string;\n}\n\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\n@Component({\n  selector: '[mat-sort-header]',\n  exportAs: 'matSortHeader',\n  templateUrl: 'sort-header.html',\n  styleUrls: ['sort-header.css'],\n  host: {\n    'class': 'mat-sort-header',\n    '(click)': '_handleClick()',\n    '(keydown)': '_handleKeydown($event)',\n    '(mouseenter)': '_setIndicatorHintVisible(true)',\n    '(mouseleave)': '_setIndicatorHintVisible(false)',\n    '[attr.aria-sort]': '_getAriaSortAttribute()',\n    '[class.mat-sort-header-disabled]': '_isDisabled()',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  inputs: ['disabled'],\n  animations: [\n    matSortAnimations.indicator,\n    matSortAnimations.leftPointer,\n    matSortAnimations.rightPointer,\n    matSortAnimations.arrowOpacity,\n    matSortAnimations.arrowPosition,\n    matSortAnimations.allowChildren,\n  ]\n})\nexport class MatSortHeader extends _MatSortHeaderBase\n    implements CanDisable, MatSortable, OnDestroy, OnInit, AfterViewInit {\n  private _rerenderSubscription: Subscription;\n\n  /**\n   * The element with role=\"button\" inside this component's view. We need this\n   * in order to apply a description with AriaDescriber.\n   */\n  private _sortButton: HTMLElement;\n\n  /**\n   * Flag set to true when the indicator should be displayed while the sort is not active. Used to\n   * provide an affordance that the header is sortable by showing on focus and hover.\n   */\n  _showIndicatorHint: boolean = false;\n\n  /**\n   * The view transition state of the arrow (translation/ opacity) - indicates its `from` and `to`\n   * position through the animation. If animations are currently disabled, the fromState is removed\n   * so that there is no animation displayed.\n   */\n  _viewState: ArrowViewStateTransition = { };\n\n  /** The direction the arrow should be facing according to the current state. */\n  _arrowDirection: SortDirection = '';\n\n  /**\n   * Whether the view state animation should show the transition between the `from` and `to` states.\n   */\n  _disableViewStateAnimation = false;\n\n  /**\n   * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n   * the column's name.\n   */\n  @Input('mat-sort-header') id: string;\n\n  /** Sets the position of the arrow that displays when sorted. */\n  @Input() arrowPosition: 'before' | 'after' = 'after';\n\n  /** Overrides the sort start value of the containing MatSort for this MatSortable. */\n  @Input() start: 'asc' | 'desc';\n\n  /**\n   * Description applied to MatSortHeader's button element with aria-describedby. This text should\n   * describe the action that will occur when the user clicks the sort header.\n   */\n  @Input()\n  get sortActionDescription(): string {\n    return this._sortActionDescription;\n  }\n  set sortActionDescription(value: string) {\n    this._updateSortActionDescription(value);\n  }\n  // Default the action description to \"Sort\" because it's better than nothing.\n  // Without a description, the button's label comes from the sort header text content,\n  // which doesn't give any indication that it performs a sorting operation.\n  private _sortActionDescription: string = 'Sort';\n\n  /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n  @Input()\n  get disableClear(): boolean { return this._disableClear; }\n  set disableClear(v) { this._disableClear = coerceBooleanProperty(v); }\n  private _disableClear: boolean;\n\n  constructor(\n              /**\n               * @deprecated `_intl` parameter isn't being used anymore and it'll be removed.\n               * @breaking-change 13.0.0\n               */\n              public _intl: MatSortHeaderIntl,\n              private _changeDetectorRef: ChangeDetectorRef,\n              // `MatSort` is not optionally injected, but just asserted manually w/ better error.\n              // tslint:disable-next-line: lightweight-tokens\n              @Optional() public _sort: MatSort,\n              @Inject('MAT_SORT_HEADER_COLUMN_DEF') @Optional()\n                  public _columnDef: MatSortHeaderColumnDef,\n              private _focusMonitor: FocusMonitor,\n              private _elementRef: ElementRef<HTMLElement>,\n              /** @breaking-change 14.0.0 _ariaDescriber will be required. */\n              @Inject(AriaDescriber) @Optional() private _ariaDescriber?: AriaDescriber | null) {\n    // Note that we use a string token for the `_columnDef`, because the value is provided both by\n    // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n    // and we want to avoid having the sort header depending on the CDK table because\n    // of this single reference.\n    super();\n\n    if (!_sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSortHeaderNotContainedWithinSortError();\n    }\n\n    this._handleStateChanges();\n  }\n\n  ngOnInit() {\n    if (!this.id && this._columnDef) {\n      this.id = this._columnDef.name;\n    }\n\n    // Initialize the direction of the arrow and set the view state to be immediately that state.\n    this._updateArrowDirection();\n    this._setAnimationTransitionState(\n        {toState: this._isSorted() ? 'active' : this._arrowDirection});\n\n    this._sort.register(this);\n\n    this._sortButton = this._elementRef.nativeElement.querySelector('[role=\"button\"]')!;\n    this._updateSortActionDescription(this._sortActionDescription);\n  }\n\n  ngAfterViewInit() {\n    // We use the focus monitor because we also want to style\n    // things differently based on the focus origin.\n    this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {\n      const newState = !!origin;\n      if (newState !== this._showIndicatorHint) {\n        this._setIndicatorHintVisible(newState);\n        this._changeDetectorRef.markForCheck();\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._sort.deregister(this);\n    this._rerenderSubscription.unsubscribe();\n  }\n\n  /**\n   * Sets the \"hint\" state such that the arrow will be semi-transparently displayed as a hint to the\n   * user showing what the active sort will become. If set to false, the arrow will fade away.\n   */\n  _setIndicatorHintVisible(visible: boolean) {\n    // No-op if the sort header is disabled - should not make the hint visible.\n    if (this._isDisabled() && visible) { return; }\n\n    this._showIndicatorHint = visible;\n\n    if (!this._isSorted()) {\n      this._updateArrowDirection();\n      if (this._showIndicatorHint) {\n        this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'hint'});\n      } else {\n        this._setAnimationTransitionState({fromState: 'hint', toState: this._arrowDirection});\n      }\n    }\n  }\n\n  /**\n   * Sets the animation transition view state for the arrow's position and opacity. If the\n   * `disableViewStateAnimation` flag is set to true, the `fromState` will be ignored so that\n   * no animation appears.\n   */\n  _setAnimationTransitionState(viewState: ArrowViewStateTransition) {\n    this._viewState = viewState || { };\n\n    // If the animation for arrow position state (opacity/translation) should be disabled,\n    // remove the fromState so that it jumps right to the toState.\n    if (this._disableViewStateAnimation) {\n      this._viewState = {toState: viewState.toState};\n    }\n  }\n\n  /** Triggers the sort on this sort header and removes the indicator hint. */\n  _toggleOnInteraction() {\n    this._sort.sort(this);\n\n    // Do not show the animation if the header was already shown in the right position.\n    if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n      this._disableViewStateAnimation = true;\n    }\n  }\n\n  _handleClick() {\n    if (!this._isDisabled()) {\n      this._sort.sort(this);\n    }\n  }\n\n  _handleKeydown(event: KeyboardEvent) {\n    if (!this._isDisabled() && (event.keyCode === SPACE || event.keyCode === ENTER)) {\n      event.preventDefault();\n      this._toggleOnInteraction();\n    }\n  }\n\n  /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n  _isSorted() {\n    return this._sort.active == this.id &&\n        (this._sort.direction === 'asc' || this._sort.direction === 'desc');\n  }\n\n  /** Returns the animation state for the arrow direction (indicator and pointers). */\n  _getArrowDirectionState() {\n    return `${this._isSorted() ? 'active-' : ''}${this._arrowDirection}`;\n  }\n\n  /** Returns the arrow position state (opacity, translation). */\n  _getArrowViewState() {\n    const fromState = this._viewState.fromState;\n    return (fromState ? `${fromState}-to-` : '') + this._viewState.toState;\n  }\n\n  /**\n   * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be\n   * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently\n   * active sorted direction. The reason this is updated through a function is because the direction\n   * should only be changed at specific times - when deactivated but the hint is displayed and when\n   * the sort is active and the direction changes. Otherwise the arrow's direction should linger\n   * in cases such as the sort becoming deactivated but we want to animate the arrow away while\n   * preserving its direction, even though the next sort direction is actually different and should\n   * only be changed once the arrow displays again (hint or activation).\n   */\n  _updateArrowDirection() {\n    this._arrowDirection = this._isSorted() ?\n        this._sort.direction :\n        (this.start || this._sort.start);\n  }\n\n  _isDisabled() {\n    return this._sort.disabled || this.disabled;\n  }\n\n  /**\n   * Gets the aria-sort attribute that should be applied to this sort header. If this header\n   * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n   * says that the aria-sort property should only be present on one header at a time, so removing\n   * ensures this is true.\n   */\n  _getAriaSortAttribute() {\n    if (!this._isSorted()) {\n      return 'none';\n    }\n\n    return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n  }\n\n  /** Whether the arrow inside the sort header should be rendered. */\n  _renderArrow() {\n    return !this._isDisabled() || this._isSorted();\n  }\n\n  private _updateSortActionDescription(newDescription: string) {\n    // We use AriaDescriber for the sort button instead of setting an `aria-label` because some\n    // screen readers (notably VoiceOver) will read both the column header *and* the button's label\n    // for every *cell* in the table, creating a lot of unnecessary noise.\n\n    // If _sortButton is undefined, the component hasn't been initialized yet so there's\n    // nothing to update in the DOM.\n    if (this._sortButton) {\n      // removeDescription will no-op if there is no existing message.\n      // TODO(jelbourn): remove optional chaining when AriaDescriber is required.\n      this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n      this._ariaDescriber?.describe(this._sortButton, newDescription);\n    }\n\n    this._sortActionDescription = newDescription;\n  }\n\n  /** Handles changes in the sorting state. */\n  private _handleStateChanges() {\n    this._rerenderSubscription =\n      merge(this._sort.sortChange, this._sort._stateChanges, this._intl.changes).subscribe(() => {\n        if (this._isSorted()) {\n          this._updateArrowDirection();\n\n          // Do not show the animation if the header was already shown in the right position.\n          if (this._viewState.toState === 'hint' || this._viewState.toState === 'active') {\n            this._disableViewStateAnimation = true;\n          }\n\n          this._setAnimationTransitionState({fromState: this._arrowDirection, toState: 'active'});\n          this._showIndicatorHint = false;\n        }\n\n        // If this header was recently active and now no longer sorted, animate away the arrow.\n        if (!this._isSorted() && this._viewState && this._viewState.toState === 'active') {\n          this._disableViewStateAnimation = false;\n          this._setAnimationTransitionState({fromState: 'active', toState: this._arrowDirection});\n        }\n\n        this._changeDetectorRef.markForCheck();\n      });\n  }\n\n  static ngAcceptInputType_disableClear: BooleanInput;\n  static ngAcceptInputType_disabled: BooleanInput;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {MatSortHeader} from './sort-header';\nimport {MatSort} from './sort';\nimport {MAT_SORT_HEADER_INTL_PROVIDER} from './sort-header-intl';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\n\n\n@NgModule({\n  imports: [CommonModule, MatCommonModule],\n  exports: [MatSort, MatSortHeader],\n  declarations: [MatSort, MatSortHeader],\n  providers: [MAT_SORT_HEADER_INTL_PROVIDER]\n})\nexport class MatSortModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport type SortDirection = 'asc' | 'desc' | '';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './sort-module';\nexport * from './sort-direction';\nexport * from './sort-header';\nexport * from './sort-header-intl';\nexport * from './sort';\nexport * from './sort-animations';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAAA;;;;;;;AAQA;SACgB,+BAA+B,CAAC,EAAU;IACxD,OAAO,KAAK,CAAC,kDAAkD,EAAE,IAAI,CAAC,CAAC;AACzE,CAAC;AAED;SACgB,wCAAwC;IACtD,OAAO,KAAK,CAAC,kFAAkF,CAAC,CAAC;AACnG,CAAC;AAED;SACgB,2BAA2B;IACzC,OAAO,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACnE,CAAC;AAED;SACgB,4BAA4B,CAAC,SAAiB;IAC5D,OAAO,KAAK,CAAC,GAAG,SAAS,mDAAmD,CAAC,CAAC;AAChF;;AC1BA;;;;;;;AA8DA;MACa,wBAAwB,GACjC,IAAI,cAAc,CAAwB,0BAA0B,EAAE;AAG1E;AACA;AACA,MAAM,YAAY,GAAG,gBAAgB,CAAC,aAAa,CAAC;CAAQ,CAAC,CAAC,CAAC;AAE/D;MAOa,OAAQ,SAAQ,YAAY;IAyCvC,YACoB,eAAuC;QACzD,KAAK,EAAE,CAAC;QADU,oBAAe,GAAf,eAAe,CAAwB;;QAvC3D,cAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;;QAGlC,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;;;;;QAStB,UAAK,GAAmB,KAAK,CAAC;QAY7C,eAAU,GAAkB,EAAE,CAAC;;QAYL,eAAU,GAAuB,IAAI,YAAY,EAAQ,CAAC;KAK3F;;IA1BD,IACI,SAAS,KAAoB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE;IAC1D,IAAI,SAAS,CAAC,SAAwB;QACpC,IAAI,SAAS,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM;aACzD,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YACjD,MAAM,4BAA4B,CAAC,SAAS,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC7B;;;;;IAOD,IACI,YAAY,KAAc,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAC1D,IAAI,YAAY,CAAC,CAAU,IAAI,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE;;;;;IAe/E,QAAQ,CAAC,QAAqB;QAC5B,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,2BAA2B,EAAE,CAAC;aACrC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACnC,MAAM,+BAA+B,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACpD;SACF;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;KAC3C;;;;;IAMD,UAAU,CAAC,QAAqB;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACpC;;IAGD,IAAI,CAAC,QAAqB;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SAC/D;aAAM;YACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC;KACxE;;IAGD,oBAAoB,CAAC,QAAqB;;QACxC,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,EAAE,CAAC;SAAE;;QAG7B,MAAM,YAAY,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,mCACvC,IAAI,CAAC,YAAY,mCAAI,CAAC,EAAC,MAAA,IAAI,CAAC,eAAe,0CAAE,YAAY,CAAA,CAAC;QAC9D,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;;QAG3F,IAAI,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxE,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,EAAE;YAAE,kBAAkB,GAAG,CAAC,CAAC;SAAE;QAChF,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;KAC/C;IAED,QAAQ;QACN,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;;;YAnHF,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,EAAC,OAAO,EAAE,UAAU,EAAC;gBAC3B,MAAM,EAAE,CAAC,2BAA2B,CAAC;aACtC;;;4CA0Cc,QAAQ,YAAI,MAAM,SAAC,wBAAwB;;;qBAhCvD,KAAK,SAAC,eAAe;oBAMrB,KAAK,SAAC,cAAc;wBAGpB,KAAK,SAAC,kBAAkB;2BAexB,KAAK,SAAC,qBAAqB;yBAM3B,MAAM,SAAC,eAAe;;AA4EzB;AACA,SAAS,qBAAqB,CAAC,KAAqB,EACrB,YAAqB;IAClD,IAAI,SAAS,GAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,KAAK,IAAI,MAAM,EAAE;QAAE,SAAS,CAAC,OAAO,EAAE,CAAC;KAAE;IAC7C,IAAI,CAAC,YAAY,EAAE;QAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAAE;IAE1C,OAAO,SAAS,CAAC;AACnB;;ACzMA;;;;;;;AAkBA,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,QAAQ,GAAG,GAAG;IACjC,eAAe,CAAC,cAAc,CAAC;AAEjE;;;;MAIa,iBAAiB,GAO1B;;IAEF,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE;QAC9B,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,iBAAiB,EAAC,CAAC,CAAC;;QAE/D,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,kBAAkB,EAAC,CAAC,CAAC;QAClE,UAAU,CAAC,4BAA4B,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;KAC7E,CAAC;;IAGF,WAAW,EAAE,OAAO,CAAC,aAAa,EAAE;QAClC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;QAC/D,UAAU,CAAC,4BAA4B,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;KAC7E,CAAC;;IAGF,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE;QACpC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC,CAAC,CAAC;QAChE,UAAU,CAAC,4BAA4B,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;KAC7E,CAAC;;IAGF,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE;QACpC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;QACnE,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,2EAA2E,EAC7E,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;;QAExB,UAAU,CAAC,wDAAwD,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpF,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;KAC1D,CAAC;;;;;;;;IASF,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE;;QAEtC,UAAU,CAAC,wCAAwC,EAC/C,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC;YAC3C,KAAK,CAAC,EAAC,SAAS,EAAE,kBAAkB,EAAC,CAAC;YACtC,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC;SACpC,CAAC,CAAC,CAAC;;QAER,UAAU,CAAC,wCAAwC,EAC/C,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC;YAC3C,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC;YACnC,KAAK,CAAC,EAAC,SAAS,EAAE,iBAAiB,EAAC,CAAC;SACtC,CAAC,CAAC,CAAC;;QAER,UAAU,CAAC,sCAAsC,EAC7C,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC;YAC3C,KAAK,CAAC,EAAC,SAAS,EAAE,iBAAiB,EAAC,CAAC;YACrC,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC;SACpC,CAAC,CAAC,CAAC;;QAER,UAAU,CAAC,sCAAsC,EAC7C,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC;YAC3C,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC;YACnC,KAAK,CAAC,EAAC,SAAS,EAAE,kBAAkB,EAAC,CAAC;SACvC,CAAC,CAAC,CAAC;QACR,KAAK,CAAC,wEAAwE,EAC1E,KAAK,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;QACxC,KAAK,CAAC,oCAAoC,EACtC,KAAK,CAAC,EAAC,SAAS,EAAE,kBAAkB,EAAC,CAAC,CAAC;QAC3C,KAAK,CAAC,iCAAiC,EACnC,KAAK,CAAC,EAAC,SAAS,EAAE,iBAAiB,EAAC,CAAC,CAAC;KAC3C,CAAC;;IAGF,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE;QACtC,UAAU,CAAC,SAAS,EAAE;YACpB,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;SAC9C,CAAC;KACH,CAAC;;;AC/GJ;;;;;;;AAWA;;;;MAKa,iBAAiB;IAD9B;;;;;QAMW,YAAO,GAAkB,IAAI,OAAO,EAAQ,CAAC;KACvD;;;;YAPA,UAAU,SAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;AAShC;SACgB,qCAAqC,CAAC,UAA6B;IACjF,OAAO,UAAU,IAAI,IAAI,iBAAiB,EAAE,CAAC;AAC/C,CAAC;AAED;MACa,6BAA6B,GAAG;;IAE3C,OAAO,EAAE,iBAAiB;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC3D,UAAU,EAAE,qCAAqC;;;AClCnD;;;;;;;AAiCA;AACA;AACA,MAAM,kBAAkB,GAAG,aAAa,CAAC;CAAQ,CAAC,CAAC;AA2BnD;;;;;;;;;MAmCa,aAAc,SAAQ,kBAAkB;IAiEnD;;;;;IAKmB,KAAwB,EACvB,kBAAqC;;;IAG1B,KAAc,EAEtB,UAAkC,EACrC,aAA2B,EAC3B,WAAoC;;IAED,cAAqC;;;;;QAK1F,KAAK,EAAE,CAAC;QAfS,UAAK,GAAL,KAAK,CAAmB;QACvB,uBAAkB,GAAlB,kBAAkB,CAAmB;QAG1B,UAAK,GAAL,KAAK,CAAS;QAEtB,eAAU,GAAV,UAAU,CAAwB;QACrC,kBAAa,GAAb,aAAa,CAAc;QAC3B,gBAAW,GAAX,WAAW,CAAyB;QAED,mBAAc,GAAd,cAAc,CAAuB;;;;;QAlE5F,uBAAkB,GAAY,KAAK,CAAC;;;;;;QAOpC,eAAU,GAA6B,EAAG,CAAC;;QAG3C,oBAAe,GAAkB,EAAE,CAAC;;;;QAKpC,+BAA0B,GAAG,KAAK,CAAC;;QAS1B,kBAAa,GAAuB,OAAO,CAAC;;;;QAmB7C,2BAAsB,GAAW,MAAM,CAAC;QA8B9C,IAAI,CAAC,KAAK,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YAC7D,MAAM,wCAAwC,EAAE,CAAC;SAClD;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;;;;IA7CD,IACI,qBAAqB;QACvB,OAAO,IAAI,CAAC,sBAAsB,CAAC;KACpC;IACD,IAAI,qBAAqB,CAAC,KAAa;QACrC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;KAC1C;;IAOD,IACI,YAAY,KAAc,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAC1D,IAAI,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE;IAgCtE,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAC/B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;SAChC;;QAGD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,4BAA4B,CAC7B,EAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAE,CAAC;QACpF,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KAChE;IAED,eAAe;;;QAGb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM;YACjE,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;YAC1B,IAAI,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE;gBACxC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;aACxC;SACF,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;KAC1C;;;;;IAMD,wBAAwB,CAAC,OAAgB;;QAEvC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE;YAAE,OAAO;SAAE;QAE9C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,4BAA4B,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC,CAAC;aACvF;iBAAM;gBACL,IAAI,CAAC,4BAA4B,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAC,CAAC,CAAC;aACvF;SACF;KACF;;;;;;IAOD,4BAA4B,CAAC,SAAmC;QAC9D,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,EAAG,CAAC;;;QAInC,IAAI,IAAI,CAAC,0BAA0B,EAAE;YACnC,IAAI,CAAC,UAAU,GAAG,EAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAC,CAAC;SAChD;KACF;;IAGD,oBAAoB;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAGtB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE;YAC9E,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;SACxC;KACF;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACvB;KACF;IAED,cAAc,CAAC,KAAoB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE;YAC/E,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;KACF;;IAGD,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE;aAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC;KACzE;;IAGD,uBAAuB;QACrB,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;KACtE;;IAGD,kBAAkB;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC5C,OAAO,CAAC,SAAS,GAAG,GAAG,SAAS,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;KACxE;;;;;;;;;;;IAYD,qBAAqB;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,SAAS;aACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC7C;;;;;;;IAQD,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC;KACnE;;IAGD,YAAY;QACV,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;KAChD;IAEO,4BAA4B,CAAC,cAAsB;;;;;;;QAOzD,IAAI,IAAI,CAAC,WAAW,EAAE;;;YAGpB,MAAA,IAAI,CAAC,cAAc,0CAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtF,MAAA,IAAI,CAAC,cAAc,0CAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;SACjE;QAED,IAAI,CAAC,sBAAsB,GAAG,cAAc,CAAC;KAC9C;;IAGO,mBAAmB;QACzB,IAAI,CAAC,qBAAqB;YACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;gBACnF,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,qBAAqB,EAAE,CAAC;;oBAG7B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE;wBAC9E,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;qBACxC;oBAED,IAAI,CAAC,4BAA4B,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAC;oBACxF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;iBACjC;;gBAGD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE;oBAChF,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;oBACxC,IAAI,CAAC,4BAA4B,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAC,CAAC,CAAC;iBACzF;gBAED,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;aACxC,CAAC,CAAC;KACN;;;YArTF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,QAAQ,EAAE,eAAe;gBACzB,8vEAA+B;gBAE/B,IAAI,EAAE;oBACJ,OAAO,EAAE,iBAAiB;oBAC1B,SAAS,EAAE,gBAAgB;oBAC3B,WAAW,EAAE,wBAAwB;oBACrC,cAAc,EAAE,gCAAgC;oBAChD,cAAc,EAAE,iCAAiC;oBACjD,kBAAkB,EAAE,yBAAyB;oBAC7C,kCAAkC,EAAE,eAAe;iBACpD;gBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,UAAU,EAAE;oBACV,iBAAiB,CAAC,SAAS;oBAC3B,iBAAiB,CAAC,WAAW;oBAC7B,iBAAiB,CAAC,YAAY;oBAC9B,iBAAiB,CAAC,YAAY;oBAC9B,iBAAiB,CAAC,aAAa;oBAC/B,iBAAiB,CAAC,aAAa;iBAChC;;aACF;;;YAlEO,iBAAiB;YAhBvB,iBAAiB;YAYX,OAAO,uBAiJA,QAAQ;4CACR,MAAM,SAAC,4BAA4B,cAAG,QAAQ;YApKtC,YAAY;YAQjC,UAAU;YARJ,aAAa,uBAyKN,MAAM,SAAC,aAAa,cAAG,QAAQ;;;iBA7C3C,KAAK,SAAC,iBAAiB;4BAGvB,KAAK;oBAGL,KAAK;oCAML,KAAK;2BAaL,KAAK;;;AC7JR;;;;;;;MAsBa,aAAa;;;YANzB,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;gBACxC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;gBACjC,YAAY,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;gBACtC,SAAS,EAAE,CAAC,6BAA6B,CAAC;aAC3C;;;ACrBD;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;"}
Index: trip-planner-front/node_modules/@angular/material/package.json
===================================================================
--- trip-planner-front/node_modules/@angular/material/package.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/package.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,5 +1,5 @@
 {
   "name": "@angular/material",
-  "version": "12.2.9",
+  "version": "12.2.10",
   "description": "Angular Material",
   "repository": {
@@ -20,5 +20,5 @@
   "peerDependencies": {
     "@angular/animations": "^12.0.0 || ^13.0.0-0",
-    "@angular/cdk": "12.2.9",
+    "@angular/cdk": "12.2.10",
     "@angular/core": "^12.0.0 || ^13.0.0-0",
     "@angular/common": "^12.0.0 || ^13.0.0-0",
Index: trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.js
===================================================================
--- trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.js	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.js	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -19,5 +19,5 @@
  * the default for Angular framework dependencies in CLI projects.
  */
-const fallbackMaterialVersionRange = `~12.2.9`;
+const fallbackMaterialVersionRange = `~12.2.10`;
 /**
  * Schematic factory entry-point for the `ng-add` schematic. The ng-add schematic will be
Index: trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.mjs
===================================================================
--- trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.mjs	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/schematics/ng-add/index.mjs	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -19,5 +19,5 @@
  * the default for Angular framework dependencies in CLI projects.
  */
-const fallbackMaterialVersionRange = `~12.2.9`;
+const fallbackMaterialVersionRange = `~12.2.10`;
 /**
  * Schematic factory entry-point for the `ng-add` schematic. The ng-add schematic will be
Index: trip-planner-front/node_modules/@angular/material/sort/index.metadata.json
===================================================================
--- trip-planner-front/node_modules/@angular/material/sort/index.metadata.json	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/sort/index.metadata.json	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -1,1 +1,1 @@
-{"__symbolic":"module","version":4,"metadata":{"MatSortModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":16,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":17,"character":12},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":17,"character":26}],"exports":[{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"MatSortHeader"}],"declarations":[{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"MatSortHeader"}],"providers":[{"__symbolic":"reference","name":"MAT_SORT_HEADER_INTL_PROVIDER"}]}]}],"members":{}},"SortDirection":{"__symbolic":"interface"},"ArrowViewState":{"__symbolic":"interface"},"ArrowViewStateTransition":{"__symbolic":"interface"},"MatSortHeader":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":97,"character":35,"module":"./sort-header"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":71,"character":1},"arguments":[{"selector":"[mat-sort-header]","exportAs":"matSortHeader","host":{"class":"mat-sort-header","(click)":"_handleClick()","(keydown)":"_handleKeydown($event)","(mouseenter)":"_setIndicatorHintVisible(true)","(mouseleave)":"_setIndicatorHintVisible(false)","[attr.aria-sort]":"_getAriaSortAttribute()","[class.mat-sort-header-disabled]":"_isDisabled()","$quoted$":["class","(click)","(keydown)","(mouseenter)","(mouseleave)","[attr.aria-sort]","[class.mat-sort-header-disabled]"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":85,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":86,"character":19},"member":"OnPush"},"inputs":["disabled"],"animations":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"indicator"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"leftPointer"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"rightPointer"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"arrowOpacity"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"arrowPosition"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"allowChildren"}],"template":"<!--\n  We set the `tabindex` on an element inside the table header, rather than the header itself,\n  because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n  table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n  be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n  over having a button with an `aria-label` inside the header, because the button's `aria-label`\n  will be read out as the user is navigating the table's cell (see #13012).\n\n  The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div class=\"mat-sort-header-container mat-focus-indicator\"\n     [class.mat-sort-header-sorted]=\"_isSorted()\"\n     [class.mat-sort-header-position-before]=\"arrowPosition == 'before'\"\n     [attr.tabindex]=\"_isDisabled() ? null : 0\"\n     role=\"button\">\n\n  <!--\n    TODO(crisbeto): this div isn't strictly necessary, but we have to keep it due to a large\n    number of screenshot diff failures. It should be removed eventually. Note that the difference\n    isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n    causes it to be center-aligned, whereas removing it will keep the text to the left.\n  -->\n  <div class=\"mat-sort-header-content\">\n    <ng-content></ng-content>\n  </div>\n\n  <!-- Disable animations while a current animation is running -->\n  <div class=\"mat-sort-header-arrow\"\n       *ngIf=\"_renderArrow()\"\n       [@arrowOpacity]=\"_getArrowViewState()\"\n       [@arrowPosition]=\"_getArrowViewState()\"\n       [@allowChildren]=\"_getArrowDirectionState()\"\n       (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\n       (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\n    <div class=\"mat-sort-header-stem\"></div>\n    <div class=\"mat-sort-header-indicator\" [@indicator]=\"_getArrowDirectionState()\">\n      <div class=\"mat-sort-header-pointer-left\" [@leftPointer]=\"_getArrowDirectionState()\"></div>\n      <div class=\"mat-sort-header-pointer-right\" [@rightPointer]=\"_getArrowDirectionState()\"></div>\n      <div class=\"mat-sort-header-pointer-middle\"></div>\n    </div>\n  </div>\n</div>\n","styles":[".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\n"]}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":126,"character":3},"arguments":["mat-sort-header"]}]}],"arrowPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":129,"character":3}}]}],"start":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3}}]}],"disableClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":135,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":149,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":150,"character":15},"arguments":["MAT_SORT_HEADER_COLUMN_DEF"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":150,"character":53}}],null,null],"parameters":[{"__symbolic":"reference","name":"MatSortHeaderIntl"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":146,"character":42},{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"FocusMonitor","line":152,"character":37},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":153,"character":46,"context":{"typeName":"HTMLElement"},"module":"./sort-header"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_setIndicatorHintVisible":[{"__symbolic":"method"}],"_setAnimationTransitionState":[{"__symbolic":"method"}],"_toggleOnInteraction":[{"__symbolic":"method"}],"_handleClick":[{"__symbolic":"method"}],"_handleKeydown":[{"__symbolic":"method"}],"_isSorted":[{"__symbolic":"method"}],"_getArrowDirectionState":[{"__symbolic":"method"}],"_getArrowViewState":[{"__symbolic":"method"}],"_updateArrowDirection":[{"__symbolic":"method"}],"_isDisabled":[{"__symbolic":"method"}],"_getAriaSortAttribute":[{"__symbolic":"method"}],"_renderArrow":[{"__symbolic":"method"}],"_handleStateChanges":[{"__symbolic":"method"}]}},"MatSortHeaderIntl":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":17,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ɵprov":{}}},"MAT_SORT_HEADER_INTL_PROVIDER_FACTORY":{"__symbolic":"function","parameters":["parentIntl"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"parentIntl"},"right":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MatSortHeaderIntl"}}}},"MAT_SORT_HEADER_INTL_PROVIDER":{"provide":{"__symbolic":"reference","name":"MatSortHeaderIntl"},"deps":[[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":35,"character":14}},{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":35,"character":30}},{"__symbolic":"reference","name":"MatSortHeaderIntl"}]],"useFactory":{"__symbolic":"reference","name":"MAT_SORT_HEADER_INTL_PROVIDER_FACTORY"}},"MatSortable":{"__symbolic":"interface"},"Sort":{"__symbolic":"interface"},"MatSortDefaultOptions":{"__symbolic":"interface"},"MAT_SORT_DEFAULT_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":64,"character":8},"arguments":["MAT_SORT_DEFAULT_OPTIONS"]},"MatSort":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":78,"character":29,"module":"./sort"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":72,"character":1},"arguments":[{"selector":"[matSort]","exportAs":"matSort","host":{"class":"mat-sort","$quoted$":["class"]},"inputs":["disabled: matSortDisabled"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3},"arguments":["matSortActive"]}]}],"start":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3},"arguments":["matSortStart"]}]}],"direction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3},"arguments":["matSortDirection"]}]}],"disableClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3},"arguments":["matSortDisableClear"]}]}],"sortChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":117,"character":3},"arguments":["matSortChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":119,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":119,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_SORT_DEFAULT_OPTIONS"}]}]],"parameters":[{"__symbolic":"reference","name":"any"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"sort":[{"__symbolic":"method"}],"getNextSortDirection":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"matSortAnimations":{"indicator":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":34,"character":13},"arguments":["indicator",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":35,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":35,"character":29},"arguments":[{"transform":"translateY(0px)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":37,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":37,"character":31},"arguments":[{"transform":"translateY(10px)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":38,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":38,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"leftPointer":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":42,"character":15},"arguments":["leftPointer",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":43,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":43,"character":29},"arguments":[{"transform":"rotate(-45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":44,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":44,"character":31},"arguments":[{"transform":"rotate(45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":45,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":45,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"rightPointer":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":49,"character":16},"arguments":["rightPointer",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":50,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":50,"character":29},"arguments":[{"transform":"rotate(45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":51,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":51,"character":31},"arguments":[{"transform":"rotate(-45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":52,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":52,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"arrowOpacity":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":56,"character":16},"arguments":["arrowOpacity",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":57,"character":4},"arguments":["desc-to-active, asc-to-active, active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":57,"character":51},"arguments":[{"opacity":1}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":58,"character":4},"arguments":["desc-to-hint, asc-to-hint, hint",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":58,"character":45},"arguments":[{"opacity":0.54}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":59,"character":4},"arguments":["hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":60,"character":8},"arguments":[{"opacity":0}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":62,"character":4},"arguments":["* => asc, * => desc, * => active, * => hint, * => void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":62,"character":73},"arguments":["0ms"]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":63,"character":4},"arguments":["* <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":63,"character":26},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"arrowPosition":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":73,"character":17},"arguments":["arrowPosition",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":75,"character":4},"arguments":["* => desc-to-hint, * => desc-to-active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":76,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":76,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":77,"character":10},"arguments":[{"transform":"translateY(-25%)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":78,"character":10},"arguments":[{"transform":"translateY(0)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":81,"character":4},"arguments":["* => hint-to-desc, * => active-to-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":82,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":82,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":83,"character":10},"arguments":[{"transform":"translateY(0)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":84,"character":10},"arguments":[{"transform":"translateY(25%)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":87,"character":4},"arguments":["* => asc-to-hint, * => asc-to-active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":88,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":88,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":89,"character":10},"arguments":[{"transform":"translateY(25%)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":90,"character":10},"arguments":[{"transform":"translateY(0)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":93,"character":4},"arguments":["* => hint-to-asc, * => active-to-asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":94,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":94,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":95,"character":10},"arguments":[{"transform":"translateY(0)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":96,"character":10},"arguments":[{"transform":"translateY(-25%)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":98,"character":4},"arguments":["desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":99,"character":8},"arguments":[{"transform":"translateY(0)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":100,"character":4},"arguments":["hint-to-desc, active-to-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":101,"character":8},"arguments":[{"transform":"translateY(-25%)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":102,"character":4},"arguments":["hint-to-asc, active-to-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":103,"character":8},"arguments":[{"transform":"translateY(25%)"}]}]}]]},"allowChildren":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":107,"character":17},"arguments":["allowChildren",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":108,"character":4},"arguments":["* <=> *",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"query","line":109,"character":6},"arguments":["@*",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animateChild","line":109,"character":18}},{"optional":true}]}]]}]]}}},"origins":{"MatSortModule":"./sort-module","SortDirection":"./sort-direction","ArrowViewState":"./sort-header","ArrowViewStateTransition":"./sort-header","MatSortHeader":"./sort-header","MatSortHeaderIntl":"./sort-header-intl","MAT_SORT_HEADER_INTL_PROVIDER_FACTORY":"./sort-header-intl","MAT_SORT_HEADER_INTL_PROVIDER":"./sort-header-intl","MatSortable":"./sort","Sort":"./sort","MatSortDefaultOptions":"./sort","MAT_SORT_DEFAULT_OPTIONS":"./sort","MatSort":"./sort","matSortAnimations":"./sort-animations"},"importAs":"@angular/material/sort"}
+{"__symbolic":"module","version":4,"metadata":{"MatSortModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":16,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":17,"character":12},{"__symbolic":"reference","module":"@angular/material/core","name":"MatCommonModule","line":17,"character":26}],"exports":[{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"MatSortHeader"}],"declarations":[{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"MatSortHeader"}],"providers":[{"__symbolic":"reference","name":"MAT_SORT_HEADER_INTL_PROVIDER"}]}]}],"members":{}},"SortDirection":{"__symbolic":"interface"},"ArrowViewState":{"__symbolic":"interface"},"ArrowViewStateTransition":{"__symbolic":"interface"},"MatSortHeader":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":97,"character":35,"module":"./sort-header"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":71,"character":1},"arguments":[{"selector":"[mat-sort-header]","exportAs":"matSortHeader","host":{"class":"mat-sort-header","(click)":"_handleClick()","(keydown)":"_handleKeydown($event)","(mouseenter)":"_setIndicatorHintVisible(true)","(mouseleave)":"_setIndicatorHintVisible(false)","[attr.aria-sort]":"_getAriaSortAttribute()","[class.mat-sort-header-disabled]":"_isDisabled()","$quoted$":["class","(click)","(keydown)","(mouseenter)","(mouseleave)","[attr.aria-sort]","[class.mat-sort-header-disabled]"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":85,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":86,"character":19},"member":"OnPush"},"inputs":["disabled"],"animations":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"indicator"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"leftPointer"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"rightPointer"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"arrowOpacity"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"arrowPosition"},{"__symbolic":"select","expression":{"__symbolic":"reference","name":"matSortAnimations"},"member":"allowChildren"}],"template":"<!--\n  We set the `tabindex` on an element inside the table header, rather than the header itself,\n  because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n  table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n  be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n  over having a button with an `aria-label` inside the header, because the button's `aria-label`\n  will be read out as the user is navigating the table's cell (see #13012).\n\n  The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div class=\"mat-sort-header-container mat-focus-indicator\"\n     [class.mat-sort-header-sorted]=\"_isSorted()\"\n     [class.mat-sort-header-position-before]=\"arrowPosition == 'before'\"\n     [attr.tabindex]=\"_isDisabled() ? null : 0\"\n     role=\"button\">\n\n  <!--\n    TODO(crisbeto): this div isn't strictly necessary, but we have to keep it due to a large\n    number of screenshot diff failures. It should be removed eventually. Note that the difference\n    isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n    causes it to be center-aligned, whereas removing it will keep the text to the left.\n  -->\n  <div class=\"mat-sort-header-content\">\n    <ng-content></ng-content>\n  </div>\n\n  <!-- Disable animations while a current animation is running -->\n  <div class=\"mat-sort-header-arrow\"\n       *ngIf=\"_renderArrow()\"\n       [@arrowOpacity]=\"_getArrowViewState()\"\n       [@arrowPosition]=\"_getArrowViewState()\"\n       [@allowChildren]=\"_getArrowDirectionState()\"\n       (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\n       (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\n    <div class=\"mat-sort-header-stem\"></div>\n    <div class=\"mat-sort-header-indicator\" [@indicator]=\"_getArrowDirectionState()\">\n      <div class=\"mat-sort-header-pointer-left\" [@leftPointer]=\"_getArrowDirectionState()\"></div>\n      <div class=\"mat-sort-header-pointer-right\" [@rightPointer]=\"_getArrowDirectionState()\"></div>\n      <div class=\"mat-sort-header-pointer-middle\"></div>\n    </div>\n  </div>\n</div>\n","styles":[".mat-sort-header-container{display:flex;cursor:pointer;align-items:center;letter-spacing:normal;outline:0}[mat-sort-header].cdk-keyboard-focused .mat-sort-header-container,[mat-sort-header].cdk-program-focused .mat-sort-header-container{border-bottom:solid 1px currentColor}.mat-sort-header-disabled .mat-sort-header-container{cursor:default}.mat-sort-header-content{text-align:center;display:flex;align-items:center}.mat-sort-header-position-before{flex-direction:row-reverse}.mat-sort-header-arrow{height:12px;width:12px;min-width:12px;position:relative;display:flex;opacity:0}.mat-sort-header-arrow,[dir=rtl] .mat-sort-header-position-before .mat-sort-header-arrow{margin:0 0 0 6px}.mat-sort-header-position-before .mat-sort-header-arrow,[dir=rtl] .mat-sort-header-arrow{margin:0 6px 0 0}.mat-sort-header-stem{background:currentColor;height:10px;width:2px;margin:auto;display:flex;align-items:center}.cdk-high-contrast-active .mat-sort-header-stem{width:0;border-left:solid 2px}.mat-sort-header-indicator{width:100%;height:2px;display:flex;align-items:center;position:absolute;top:0;left:0}.mat-sort-header-pointer-middle{margin:auto;height:2px;width:2px;background:currentColor;transform:rotate(45deg)}.cdk-high-contrast-active .mat-sort-header-pointer-middle{width:0;height:0;border-top:solid 2px;border-left:solid 2px}.mat-sort-header-pointer-left,.mat-sort-header-pointer-right{background:currentColor;width:6px;height:2px;position:absolute;top:0}.cdk-high-contrast-active .mat-sort-header-pointer-left,.cdk-high-contrast-active .mat-sort-header-pointer-right{width:0;height:0;border-left:solid 6px;border-top:solid 2px}.mat-sort-header-pointer-left{transform-origin:right;left:0}.mat-sort-header-pointer-right{transform-origin:left;right:0}\n"]}]}],"members":{"id":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":132,"character":3},"arguments":["mat-sort-header"]}]}],"arrowPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":135,"character":3}}]}],"start":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":138,"character":3}}]}],"sortActionDescription":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":144,"character":3}}]}],"disableClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":157,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":171,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":172,"character":15},"arguments":["MAT_SORT_HEADER_COLUMN_DEF"]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":172,"character":53}}],null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":177,"character":15},"arguments":[{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"AriaDescriber","line":177,"character":22}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":177,"character":38}}]],"parameters":[{"__symbolic":"reference","name":"MatSortHeaderIntl"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":168,"character":42},{"__symbolic":"reference","name":"MatSort"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"FocusMonitor","line":174,"character":37},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":175,"character":46,"context":{"typeName":"HTMLElement"},"module":"./sort-header"}]},{"__symbolic":"reference","module":"@angular/cdk/a11y","name":"AriaDescriber","line":177,"character":74}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"_setIndicatorHintVisible":[{"__symbolic":"method"}],"_setAnimationTransitionState":[{"__symbolic":"method"}],"_toggleOnInteraction":[{"__symbolic":"method"}],"_handleClick":[{"__symbolic":"method"}],"_handleKeydown":[{"__symbolic":"method"}],"_isSorted":[{"__symbolic":"method"}],"_getArrowDirectionState":[{"__symbolic":"method"}],"_getArrowViewState":[{"__symbolic":"method"}],"_updateArrowDirection":[{"__symbolic":"method"}],"_isDisabled":[{"__symbolic":"method"}],"_getAriaSortAttribute":[{"__symbolic":"method"}],"_renderArrow":[{"__symbolic":"method"}],"_updateSortActionDescription":[{"__symbolic":"method"}],"_handleStateChanges":[{"__symbolic":"method"}]}},"MatSortHeaderIntl":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":15,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{},"statics":{"ɵprov":{}}},"MAT_SORT_HEADER_INTL_PROVIDER_FACTORY":{"__symbolic":"function","parameters":["parentIntl"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"parentIntl"},"right":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MatSortHeaderIntl"}}}},"MAT_SORT_HEADER_INTL_PROVIDER":{"provide":{"__symbolic":"reference","name":"MatSortHeaderIntl"},"deps":[[{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":33,"character":14}},{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf","line":33,"character":30}},{"__symbolic":"reference","name":"MatSortHeaderIntl"}]],"useFactory":{"__symbolic":"reference","name":"MAT_SORT_HEADER_INTL_PROVIDER_FACTORY"}},"MatSortable":{"__symbolic":"interface"},"Sort":{"__symbolic":"interface"},"MatSortDefaultOptions":{"__symbolic":"interface"},"MAT_SORT_DEFAULT_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":64,"character":8},"arguments":["MAT_SORT_DEFAULT_OPTIONS"]},"MatSort":{"__symbolic":"class","extends":{"__symbolic":"error","message":"Symbol reference expected","line":78,"character":29,"module":"./sort"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":72,"character":1},"arguments":[{"selector":"[matSort]","exportAs":"matSort","host":{"class":"mat-sort","$quoted$":["class"]},"inputs":["disabled: matSortDisabled"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3},"arguments":["matSortActive"]}]}],"start":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3},"arguments":["matSortStart"]}]}],"direction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3},"arguments":["matSortDirection"]}]}],"disableClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3},"arguments":["matSortDisableClear"]}]}],"sortChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":117,"character":3},"arguments":["matSortChange"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":119,"character":15}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":119,"character":27},"arguments":[{"__symbolic":"reference","name":"MAT_SORT_DEFAULT_OPTIONS"}]}]],"parameters":[{"__symbolic":"reference","name":"any"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"sort":[{"__symbolic":"method"}],"getNextSortDirection":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"matSortAnimations":{"indicator":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":34,"character":13},"arguments":["indicator",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":35,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":35,"character":29},"arguments":[{"transform":"translateY(0px)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":37,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":37,"character":31},"arguments":[{"transform":"translateY(10px)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":38,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":38,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"leftPointer":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":42,"character":15},"arguments":["leftPointer",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":43,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":43,"character":29},"arguments":[{"transform":"rotate(-45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":44,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":44,"character":31},"arguments":[{"transform":"rotate(45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":45,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":45,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"rightPointer":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":49,"character":16},"arguments":["rightPointer",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":50,"character":4},"arguments":["active-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":50,"character":29},"arguments":[{"transform":"rotate(45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":51,"character":4},"arguments":["active-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":51,"character":31},"arguments":[{"transform":"rotate(-45deg)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":52,"character":4},"arguments":["active-asc <=> active-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":52,"character":45},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"arrowOpacity":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":56,"character":16},"arguments":["arrowOpacity",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":57,"character":4},"arguments":["desc-to-active, asc-to-active, active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":57,"character":51},"arguments":[{"opacity":1}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":58,"character":4},"arguments":["desc-to-hint, asc-to-hint, hint",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":58,"character":45},"arguments":[{"opacity":0.54}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":59,"character":4},"arguments":["hint-to-desc, active-to-desc, desc, hint-to-asc, active-to-asc, asc, void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":60,"character":8},"arguments":[{"opacity":0}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":62,"character":4},"arguments":["* => asc, * => desc, * => active, * => hint, * => void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":62,"character":73},"arguments":["0ms"]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":63,"character":4},"arguments":["* <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":63,"character":26},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}}]}]}]]},"arrowPosition":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":73,"character":17},"arguments":["arrowPosition",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":75,"character":4},"arguments":["* => desc-to-hint, * => desc-to-active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":76,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":76,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":77,"character":10},"arguments":[{"transform":"translateY(-25%)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":78,"character":10},"arguments":[{"transform":"translateY(0)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":81,"character":4},"arguments":["* => hint-to-desc, * => active-to-desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":82,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":82,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":83,"character":10},"arguments":[{"transform":"translateY(0)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":84,"character":10},"arguments":[{"transform":"translateY(25%)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":87,"character":4},"arguments":["* => asc-to-hint, * => asc-to-active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":88,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":88,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":89,"character":10},"arguments":[{"transform":"translateY(25%)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":90,"character":10},"arguments":[{"transform":"translateY(0)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":93,"character":4},"arguments":["* => hint-to-asc, * => active-to-asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":94,"character":8},"arguments":[{"__symbolic":"binop","operator":"+","left":{"__symbolic":"binop","operator":"+","left":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationDurations","line":18,"character":34},"member":"ENTERING"},"right":" "},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/material/core","name":"AnimationCurves","line":19,"character":34},"member":"STANDARD_CURVE"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"keyframes","line":94,"character":43},"arguments":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":95,"character":10},"arguments":[{"transform":"translateY(0)"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":96,"character":10},"arguments":[{"transform":"translateY(-25%)"}]}]]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":98,"character":4},"arguments":["desc-to-hint, asc-to-hint, hint, desc-to-active, asc-to-active, active",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":99,"character":8},"arguments":[{"transform":"translateY(0)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":100,"character":4},"arguments":["hint-to-desc, active-to-desc, desc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":101,"character":8},"arguments":[{"transform":"translateY(-25%)"}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":102,"character":4},"arguments":["hint-to-asc, active-to-asc, asc",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":103,"character":8},"arguments":[{"transform":"translateY(25%)"}]}]}]]},"allowChildren":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":107,"character":17},"arguments":["allowChildren",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":108,"character":4},"arguments":["* <=> *",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"query","line":109,"character":6},"arguments":["@*",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animateChild","line":109,"character":18}},{"optional":true}]}]]}]]}}},"origins":{"MatSortModule":"./sort-module","SortDirection":"./sort-direction","ArrowViewState":"./sort-header","ArrowViewStateTransition":"./sort-header","MatSortHeader":"./sort-header","MatSortHeaderIntl":"./sort-header-intl","MAT_SORT_HEADER_INTL_PROVIDER_FACTORY":"./sort-header-intl","MAT_SORT_HEADER_INTL_PROVIDER":"./sort-header-intl","MatSortable":"./sort","Sort":"./sort","MatSortDefaultOptions":"./sort","MAT_SORT_DEFAULT_OPTIONS":"./sort","MatSort":"./sort","matSortAnimations":"./sort-animations"},"importAs":"@angular/material/sort"}
Index: trip-planner-front/node_modules/@angular/material/sort/sort-header-intl.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/sort/sort-header-intl.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/sort/sort-header-intl.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -11,6 +11,4 @@
  * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and
  * include it in a custom provider.
- * @deprecated No longer being used. To be removed.
- * @breaking-change 13.0.0
  */
 export declare class MatSortHeaderIntl {
Index: trip-planner-front/node_modules/@angular/material/sort/sort-header.d.ts
===================================================================
--- trip-planner-front/node_modules/@angular/material/sort/sort-header.d.ts	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/@angular/material/sort/sort-header.d.ts	(revision ceaed429447854991cde276cd74df8d5dc9a2009)
@@ -6,8 +6,8 @@
  * found in the LICENSE file at https://angular.io/license
  */
+import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';
 import { BooleanInput } from '@angular/cdk/coercion';
-import { ChangeDetectorRef, OnDestroy, OnInit, ElementRef, AfterViewInit } from '@angular/core';
+import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, OnInit } from '@angular/core';
 import { CanDisable } from '@angular/material/core';
-import { FocusMonitor } from '@angular/cdk/a11y';
 import { MatSort, MatSortable } from './sort';
 import { SortDirection } from './sort-direction';
@@ -59,5 +59,12 @@
     private _focusMonitor;
     private _elementRef;
+    /** @breaking-change 14.0.0 _ariaDescriber will be required. */
+    private _ariaDescriber?;
     private _rerenderSubscription;
+    /**
+     * The element with role="button" inside this component's view. We need this
+     * in order to apply a description with AriaDescriber.
+     */
+    private _sortButton;
     /**
      * Flag set to true when the indicator should be displayed while the sort is not active. Used to
@@ -86,4 +93,11 @@
     /** Overrides the sort start value of the containing MatSort for this MatSortable. */
     start: 'asc' | 'desc';
+    /**
+     * Description applied to MatSortHeader's button element with aria-describedby. This text should
+     * describe the action that will occur when the user clicks the sort header.
+     */
+    get sortActionDescription(): string;
+    set sortActionDescription(value: string);
+    private _sortActionDescription;
     /** Overrides the disable clear value of the containing MatSort for this MatSortable. */
     get disableClear(): boolean;
@@ -95,5 +109,7 @@
      * @breaking-change 13.0.0
      */
-    _intl: MatSortHeaderIntl, _changeDetectorRef: ChangeDetectorRef, _sort: MatSort, _columnDef: MatSortHeaderColumnDef, _focusMonitor: FocusMonitor, _elementRef: ElementRef<HTMLElement>);
+    _intl: MatSortHeaderIntl, _changeDetectorRef: ChangeDetectorRef, _sort: MatSort, _columnDef: MatSortHeaderColumnDef, _focusMonitor: FocusMonitor, _elementRef: ElementRef<HTMLElement>, 
+    /** @breaking-change 14.0.0 _ariaDescriber will be required. */
+    _ariaDescriber?: AriaDescriber | null | undefined);
     ngOnInit(): void;
     ngAfterViewInit(): void;
@@ -141,4 +157,5 @@
     /** Whether the arrow inside the sort header should be rendered. */
     _renderArrow(): boolean;
+    private _updateSortActionDescription;
     /** Handles changes in the sorting state. */
     private _handleStateChanges;
