blob: c3d66821e802a827757797b8f1df237c5f3a3416 [file] [log] [blame]
{"version":3,"file":"material.umd.js","sources":["../../src/material/tree/data-source/nested-data-source.ts","../../src/material/tree/data-source/flat-data-source.ts","../../src/material/tree/tree-module.ts","../../src/material/tree/toggle.ts","../../src/material/tree/tree.ts","../../src/material/tree/padding.ts","../../src/material/tree/node.ts","../../src/material/tree/outlet.ts","../../src/material/toolbar/toolbar-module.ts","../../src/material/toolbar/toolbar.ts","../../src/material/tabs/tabs-module.ts","../../src/material/tabs/tab-nav-bar/tab-nav-bar.ts","../../src/material/tabs/tab-group.ts","../../src/material/tabs/tab-header.ts","../../src/material/tabs/paginated-tab-header.ts","../../src/material/tabs/tab-label-wrapper.ts","../../src/material/tabs/tab-body.ts","../../src/material/tabs/tabs-animations.ts","../../src/material/tabs/tab.ts","../../src/material/tabs/tab-label.ts","../../src/material/tabs/tab-content.ts","../../src/material/tabs/ink-bar.ts","../../src/material/table/table-data-source.ts","../../src/material/table/table-module.ts","../../src/material/table/text-column.ts","../../src/material/table/row.ts","../../src/material/table/cell.ts","../../src/material/table/table.ts","../../src/material/stepper/stepper-module.ts","../../src/material/stepper/stepper-button.ts","../../src/material/stepper/stepper.ts","../../src/material/stepper/stepper-icon.ts","../../src/material/stepper/stepper-animations.ts","../../src/material/stepper/step-header.ts","../../src/material/stepper/stepper-intl.ts","../../src/material/stepper/step-label.ts","../../src/material/sort/sort-module.ts","../../src/material/sort/sort-header.ts","../../src/material/sort/sort-header-intl.ts","../../src/material/sort/sort-animations.ts","../../src/material/sort/sort.ts","../../src/material/sort/sort-errors.ts","../../src/material/snack-bar/snack-bar.ts","../../src/material/snack-bar/snack-bar-module.ts","../../src/material/snack-bar/snack-bar-container.ts","../../src/material/snack-bar/snack-bar-animations.ts","../../src/material/snack-bar/simple-snack-bar.ts","../../src/material/snack-bar/snack-bar-config.ts","../../src/material/snack-bar/snack-bar-ref.ts","../../src/material/slider/slider-module.ts","../../src/material/slider/slider.ts","../../src/material/slide-toggle/slide-toggle-module.ts","../../src/material/slide-toggle/slide-toggle.ts","../../src/material/slide-toggle/slide-toggle-config.ts","../../src/material/sidenav/sidenav-module.ts","../../src/material/sidenav/sidenav.ts","../../src/material/sidenav/drawer.ts","../../src/material/sidenav/drawer-animations.ts","../../src/material/radio/radio-module.ts","../../src/material/radio/radio.ts","../../src/material/progress-spinner/progress-spinner-module.ts","../../src/material/progress-spinner/progress-spinner.ts","../../src/material/progress-bar/progress-bar-module.ts","../../src/material/progress-bar/progress-bar.ts","../../src/material/paginator/paginator-module.ts","../../src/material/paginator/paginator.ts","../../src/material/paginator/paginator-intl.ts","../../src/material/tooltip/tooltip-module.ts","../../src/material/tooltip/tooltip.ts","../../src/material/tooltip/tooltip-animations.ts","../../src/material/select/select-module.ts","../../src/material/select/select.ts","../../src/material/select/select-errors.ts","../../src/material/select/select-animations.ts","../../src/material/menu/menu-module.ts","../../src/material/menu/menu-trigger.ts","../../src/material/menu/menu.ts","../../src/material/menu/menu-item.ts","../../src/material/menu/menu-panel.ts","../../src/material/menu/menu-errors.ts","../../src/material/menu/menu-content.ts","../../src/material/menu/menu-animations.ts","../../src/material/list/list-module.ts","../../src/material/list/selection-list.ts","../../src/material/list/list.ts","../../src/material/icon/icon-module.ts","../../src/material/icon/icon.ts","../../src/material/icon/icon-registry.ts","../../src/material/grid-list/grid-list-module.ts","../../src/material/grid-list/grid-list.ts","../../src/material/grid-list/tile-styler.ts","../../src/material/grid-list/tile-coordinator.ts","../../src/material/grid-list/grid-tile.ts","../../src/material/grid-list/grid-list-base.ts","../../src/material/expansion/expansion-module.ts","../../src/material/expansion/accordion.ts","../../src/material/expansion/expansion-panel-header.ts","../../src/material/expansion/expansion-panel.ts","../../src/material/expansion/expansion-panel-content.ts","../../src/material/expansion/expansion-animations.ts","../../src/material/expansion/accordion-base.ts","../../src/material/divider/divider-module.ts","../../src/material/divider/divider.ts","../../src/material/datepicker/datepicker-module.ts","../../src/material/datepicker/datepicker-toggle.ts","../../src/material/datepicker/datepicker-input.ts","../../src/material/datepicker/datepicker.ts","../../src/material/datepicker/datepicker-animations.ts","../../src/material/datepicker/calendar.ts","../../src/material/datepicker/year-view.ts","../../src/material/datepicker/multi-year-view.ts","../../src/material/datepicker/month-view.ts","../../src/material/datepicker/calendar-body.ts","../../src/material/datepicker/datepicker-intl.ts","../../src/material/datepicker/datepicker-errors.ts","../../src/material/input/input-module.ts","../../src/material/input/input.ts","../../src/material/input/input-value-accessor.ts","../../src/material/input/input-errors.ts","../../src/material/input/autosize.ts","../../src/material/dialog/dialog-module.ts","../../src/material/dialog/dialog-content-directives.ts","../../src/material/dialog/dialog.ts","../../src/material/dialog/dialog-ref.ts","../../src/material/dialog/dialog-container.ts","../../src/material/dialog/dialog-animations.ts","../../src/material/dialog/dialog-config.ts","../../src/material/chips/chips-module.ts","../../src/material/chips/chip-input.ts","../../src/material/chips/chip-list.ts","../../src/material/chips/chip-default-options.ts","../../src/material/chips/chip.ts","../../src/material/checkbox/checkbox-module.ts","../../src/material/checkbox/checkbox-required-validator.ts","../../src/material/checkbox/checkbox.ts","../../src/material/checkbox/checkbox-config.ts","../../src/material/card/card-module.ts","../../src/material/card/card.ts","../../src/material/button-toggle/button-toggle-module.ts","../../src/material/button-toggle/button-toggle.ts","../../src/material/button/button-module.ts","../../src/material/button/button.ts","../../src/material/bottom-sheet/bottom-sheet.ts","../../src/material/bottom-sheet/bottom-sheet-ref.ts","../../src/material/bottom-sheet/bottom-sheet-module.ts","../../src/material/bottom-sheet/bottom-sheet-container.ts","../../src/material/bottom-sheet/bottom-sheet-animations.ts","../../src/material/bottom-sheet/bottom-sheet-config.ts","../../src/material/badge/badge-module.ts","../../src/material/badge/badge.ts","../../src/material/autocomplete/autocomplete-module.ts","../../src/material/autocomplete/autocomplete-trigger.ts","../../src/material/autocomplete/autocomplete-origin.ts","../../src/material/autocomplete/autocomplete.ts","../../src/material/form-field/form-field-module.ts","../../src/material/form-field/form-field.ts","../../src/material/form-field/suffix.ts","../../src/material/form-field/prefix.ts","../../src/material/form-field/placeholder.ts","../../src/material/form-field/label.ts","../../src/material/form-field/hint.ts","../../src/material/form-field/form-field-errors.ts","../../src/material/form-field/form-field-control.ts","../../src/material/form-field/form-field-animations.ts","../../src/material/form-field/error.ts","../../src/material/core/month-constants.ts","../../src/material/core/label/label-options.ts","../../src/material/core/option/index.ts","../../src/material/core/option/option.ts","../../src/material/core/option/optgroup.ts","../../src/material/core/selection/index.ts","../../src/material/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../src/material/core/ripple/index.ts","../../src/material/core/ripple/ripple.ts","../../src/material/core/ripple/ripple-renderer.ts","../../src/material/core/ripple/ripple-ref.ts","../../src/material/core/line/line.ts","../../src/material/core/gestures/gesture-config.ts","../../src/material/core/error/error-options.ts","../../src/material/core/datetime/index.ts","../../src/material/core/datetime/native-date-formats.ts","../../src/material/core/datetime/native-date-adapter.ts","../../src/material/core/datetime/date-formats.ts","../../src/material/core/datetime/date-adapter.ts","../../src/material/core/common-behaviors/initialized.ts","../../src/material/core/common-behaviors/error-state.ts","../../src/material/core/common-behaviors/tabindex.ts","../../src/material/core/common-behaviors/disable-ripple.ts","../../src/material/core/common-behaviors/color.ts","../../src/material/core/common-behaviors/disabled.ts","../../src/material/core/common-behaviors/common-module.ts","../../src/material/core/animation/animation.ts","../../src/material/core/version.ts","../../node_modules/tslib/tslib.es6.js"],"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 {CollectionViewer, DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nexport class MatTreeNestedDataSource<T> extends DataSource<T> {\n _data = new BehaviorSubject<T[]>([]);\n\n /**\n * Data for the nested tree\n */\n get data() { return this._data.value; }\n set data(value: T[]) { this._data.next(value); }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n return merge(...[collectionViewer.viewChange, this._data])\n .pipe(map(() => {\n return this.data;\n }));\n }\n\n disconnect() {\n // no op\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 {CollectionViewer, DataSource} from '@angular/cdk/collections';\nimport {FlatTreeControl, TreeControl} from '@angular/cdk/tree';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {map, take} from 'rxjs/operators';\n\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n * SomeNode: {\n * key: 'Fruits',\n * children: [\n * NodeOne: {\n * key: 'Apple',\n * },\n * NodeTwo: {\n * key: 'Pear',\n * }\n * ]\n * }\n * After flattener flatten the tree, the structure will become\n * SomeNode: {\n * key: 'Fruits',\n * expandable: true,\n * level: 1\n * },\n * NodeOne: {\n * key: 'Apple',\n * expandable: false,\n * level: 2\n * },\n * NodeTwo: {\n * key: 'Pear',\n * expandable: false,\n * level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nexport class MatTreeFlattener<T, F> {\n\n constructor(public transformFunction: (node: T, level: number) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) =>\n Observable<T[]> | T[] | undefined | null) {}\n\n _flattenNode(node: T, level: number,\n resultNodes: F[], parentMap: boolean[]): F[] {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this._flattenChildren(childrenNodes, level, resultNodes, parentMap);\n } else {\n childrenNodes.pipe(take(1)).subscribe(children => {\n this._flattenChildren(children, level, resultNodes, parentMap);\n });\n }\n }\n }\n return resultNodes;\n }\n\n _flattenChildren(children: T[], level: number,\n resultNodes: F[], parentMap: boolean[]): void {\n children.forEach((child, index) => {\n let childParentMap: boolean[] = parentMap.slice();\n childParentMap.push(index != children.length - 1);\n this._flattenNode(child, level + 1, resultNodes, childParentMap);\n });\n }\n\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData: T[]): F[] {\n let resultNodes: F[] = [];\n structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));\n return resultNodes;\n }\n\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F>): F[] {\n let results: F[] = [];\n let currentExpand: boolean[] = [];\n currentExpand[0] = true;\n\n nodes.forEach(node => {\n let expand = true;\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n if (expand) {\n results.push(node);\n }\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n return results;\n }\n}\n\n\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `MatTree`.\n * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted\n * to type `F` for `MatTree` to consume.\n */\nexport class MatTreeFlatDataSource<T, F> extends DataSource<F> {\n _flattenedData = new BehaviorSubject<F[]>([]);\n\n _expandedData = new BehaviorSubject<F[]>([]);\n\n _data: BehaviorSubject<T[]>;\n get data() { return this._data.value; }\n set data(value: T[]) {\n this._data.next(value);\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n\n constructor(private _treeControl: FlatTreeControl<F>,\n private _treeFlattener: MatTreeFlattener<T, F>,\n initialData: T[] = []) {\n super();\n this._data = new BehaviorSubject<T[]>(initialData);\n }\n\n connect(collectionViewer: CollectionViewer): Observable<F[]> {\n const changes = [\n collectionViewer.viewChange,\n this._treeControl.expansionModel.onChange,\n this._flattenedData\n ];\n return merge(...changes).pipe(map(() => {\n this._expandedData.next(\n this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));\n return this._expandedData.value;\n }));\n }\n\n disconnect() {\n // no op\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';\n\nimport {CdkTreeModule} from '@angular/cdk/tree';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatNestedTreeNode, MatTreeNodeDef, MatTreeNode} from './node';\nimport {MatTree} from './tree';\nimport {MatTreeNodeToggle} from './toggle';\nimport {MatTreeNodeOutlet} from './outlet';\nimport {MatTreeNodePadding} from './padding';\n\nconst MAT_TREE_DIRECTIVES = [\n MatNestedTreeNode,\n MatTreeNodeDef,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n MatTree,\n MatTreeNode,\n MatTreeNodeOutlet\n];\n\n@NgModule({\n imports: [CdkTreeModule, CommonModule, MatCommonModule],\n exports: MAT_TREE_DIRECTIVES,\n declarations: MAT_TREE_DIRECTIVES,\n})\nexport class MatTreeModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {CdkTreeNodeToggle} from '@angular/cdk/tree';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Wrapper for the CdkTree's toggle with Material design styles.\n */\n@Directive({\n selector: '[matTreeNodeToggle]',\n providers: [{provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle}]\n})\nexport class MatTreeNodeToggle<T> extends CdkTreeNodeToggle<T> {\n @Input('matTreeNodeToggleRecursive') recursive: boolean = false;\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 {CdkTree} from '@angular/cdk/tree';\nimport {ChangeDetectionStrategy, Component, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {MatTreeNodeOutlet} from './outlet';\n\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tree',\n exportAs: 'matTree',\n template: `<ng-container matTreeNodeOutlet></ng-container>`,\n host: {\n 'class': 'mat-tree',\n 'role': 'tree',\n },\n styleUrls: ['tree.css'],\n encapsulation: ViewEncapsulation.None,\n // See note on CdkTree for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [{provide: CdkTree, useExisting: MatTree}]\n})\nexport class MatTree<T> extends CdkTree<T> {\n // Outlets within the tree's template where the dataNodes will be inserted.\n @ViewChild(MatTreeNodeOutlet, {static: true}) _nodeOutlet: MatTreeNodeOutlet;\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 {CdkTreeNodePadding} from '@angular/cdk/tree';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Wrapper for the CdkTree padding with Material design styles.\n */\n@Directive({\n selector: '[matTreeNodePadding]',\n providers: [{provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding}]\n})\nexport class MatTreeNodePadding<T> extends CdkTreeNodePadding<T> {\n\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n @Input('matTreeNodePadding') level: number;\n\n /** The indent for each level. Default number 40px from material design menu sub-menu spec. */\n @Input('matTreeNodePaddingIndent') indent: number;\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 CDK_TREE_NODE_OUTLET_NODE,\n CdkNestedTreeNode,\n CdkTree,\n CdkTreeNode,\n CdkTreeNodeDef,\n} from '@angular/cdk/tree';\nimport {\n AfterContentInit,\n Attribute,\n ContentChildren,\n Directive,\n ElementRef,\n Input,\n IterableDiffers,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableCtor,\n HasTabIndex,\n HasTabIndexCtor,\n mixinDisabled,\n mixinTabIndex,\n} from '@angular/material/core';\n\nimport {MatTreeNodeOutlet} from './outlet';\n\nconst _MatTreeNodeMixinBase: HasTabIndexCtor & CanDisableCtor & typeof CdkTreeNode =\n mixinTabIndex(mixinDisabled(CdkTreeNode));\n\nconst _MatNestedTreeNodeMixinBase:\n HasTabIndexCtor & CanDisableCtor & typeof CdkNestedTreeNode =\n mixinTabIndex(mixinDisabled(CdkNestedTreeNode));\n\n/**\n * Wrapper for the CdkTree node with Material design styles.\n */\n@Directive({\n selector: 'mat-tree-node',\n exportAs: 'matTreeNode',\n inputs: ['disabled', 'tabIndex'],\n host: {\n '[attr.aria-expanded]': 'isExpanded',\n '[attr.aria-level]': 'role === \"treeitem\" ? level : null',\n '[attr.role]': 'role',\n 'class': 'mat-tree-node'\n },\n providers: [{provide: CdkTreeNode, useExisting: MatTreeNode}]\n})\nexport class MatTreeNode<T> extends _MatTreeNodeMixinBase<T>\n implements CanDisable, HasTabIndex {\n @Input() role: 'treeitem' | 'group' = 'treeitem';\n\n constructor(protected _elementRef: ElementRef<HTMLElement>,\n protected _tree: CdkTree<T>,\n @Attribute('tabindex') tabIndex: string) {\n super(_elementRef, _tree);\n\n this.tabIndex = Number(tabIndex) || 0;\n }\n}\n\n/**\n * Wrapper for the CdkTree node definition with Material design styles.\n */\n@Directive({\n selector: '[matTreeNodeDef]',\n inputs: [\n 'when: matTreeNodeDefWhen'\n ],\n providers: [{provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef}]\n})\nexport class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {\n @Input('matTreeNode') data: T;\n}\n\n/**\n * Wrapper for the CdkTree nested node with Material design styles.\n */\n@Directive({\n selector: 'mat-nested-tree-node',\n exportAs: 'matNestedTreeNode',\n host: {\n '[attr.aria-expanded]': 'isExpanded',\n '[attr.role]': 'role',\n 'class': 'mat-nested-tree-node',\n },\n inputs: ['disabled', 'tabIndex'],\n providers: [\n {provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode},\n {provide: CdkTreeNode, useExisting: MatNestedTreeNode},\n {provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode}\n ]\n})\nexport class MatNestedTreeNode<T> extends _MatNestedTreeNodeMixinBase<T> implements\n AfterContentInit, CanDisable, HasTabIndex, OnDestroy {\n @Input('matNestedTreeNode') node: T;\n\n /** The children node placeholder. */\n @ContentChildren(MatTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n })\n nodeOutlet: QueryList<MatTreeNodeOutlet>;\n\n constructor(protected _elementRef: ElementRef<HTMLElement>,\n protected _tree: CdkTree<T>,\n protected _differs: IterableDiffers,\n @Attribute('tabindex') tabIndex: string) {\n super(_elementRef, _tree, _differs);\n\n this.tabIndex = Number(tabIndex) || 0;\n }\n\n // This is a workaround for https://github.com/angular/angular/issues/23091\n // In aot mode, the lifecycle hooks from parent class are not called.\n // TODO(tinayuangao): Remove when the angular issue #23091 is fixed\n ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\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 {CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodeOutlet} from '@angular/cdk/tree';\nimport {\n Directive,\n Inject,\n Optional,\n ViewContainerRef,\n} from '@angular/core';\n\n/**\n * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\n@Directive({\n selector: '[matTreeNodeOutlet]'\n})\nexport class MatTreeNodeOutlet implements CdkTreeNodeOutlet {\n constructor(\n public viewContainer: ViewContainerRef,\n @Inject(CDK_TREE_NODE_OUTLET_NODE) @Optional() public _node?: any) {}\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 {MatToolbar, MatToolbarRow} from './toolbar';\n\n\n@NgModule({\n imports: [MatCommonModule],\n exports: [MatToolbar, MatToolbarRow, MatCommonModule],\n declarations: [MatToolbar, MatToolbarRow],\n})\nexport class MatToolbarModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n Inject,\n isDevMode,\n QueryList,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\n\n\n// Boilerplate for applying mixins to MatToolbar.\n/** @docs-private */\nclass MatToolbarBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatToolbarMixinBase: CanColorCtor & typeof MatToolbarBase = mixinColor(MatToolbarBase);\n\n@Directive({\n selector: 'mat-toolbar-row',\n exportAs: 'matToolbarRow',\n host: {'class': 'mat-toolbar-row'},\n})\nexport class MatToolbarRow {}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-toolbar',\n exportAs: 'matToolbar',\n templateUrl: 'toolbar.html',\n styleUrls: ['toolbar.css'],\n inputs: ['color'],\n host: {\n 'class': 'mat-toolbar',\n '[class.mat-toolbar-multiple-rows]': '_toolbarRows.length > 0',\n '[class.mat-toolbar-single-row]': '_toolbarRows.length === 0',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatToolbar extends _MatToolbarMixinBase implements CanColor, AfterViewInit {\n private _document: Document;\n\n /** Reference to all toolbar row elements that have been projected. */\n @ContentChildren(MatToolbarRow) _toolbarRows: QueryList<MatToolbarRow>;\n\n constructor(\n elementRef: ElementRef,\n private _platform: Platform,\n @Inject(DOCUMENT) document?: any) {\n super(elementRef);\n\n // TODO: make the document a required param when doing breaking changes.\n this._document = document;\n }\n\n ngAfterViewInit() {\n if (!isDevMode() || !this._platform.isBrowser) {\n return;\n }\n\n this._checkToolbarMixedModes();\n this._toolbarRows.changes.subscribe(() => this._checkToolbarMixedModes());\n }\n\n /**\n * Throws an exception when developers are attempting to combine the different toolbar row modes.\n */\n private _checkToolbarMixedModes() {\n if (!this._toolbarRows.length) {\n return;\n }\n\n // Check if there are any other DOM nodes that can display content but aren't inside of\n // a <mat-toolbar-row> element.\n const isCombinedUsage = Array.from<HTMLElement>(this._elementRef.nativeElement.childNodes)\n .filter(node => !(node.classList && node.classList.contains('mat-toolbar-row')))\n .filter(node => node.nodeType !== (this._document ? this._document.COMMENT_NODE : 8))\n .some(node => !!(node.textContent && node.textContent.trim()));\n\n if (isCombinedUsage) {\n throwToolbarMixedModesError();\n }\n }\n}\n\n/**\n * Throws an exception when attempting to combine the different toolbar row modes.\n * @docs-private\n */\nexport function throwToolbarMixedModesError() {\n throw Error('MatToolbar: Attempting to combine different toolbar modes. ' +\n 'Either specify multiple `<mat-toolbar-row>` elements explicitly or just place content ' +\n 'inside of a `<mat-toolbar>` for a single row.');\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 {ObserversModule} from '@angular/cdk/observers';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatInkBar} from './ink-bar';\nimport {MatTab} from './tab';\nimport {MatTabBody, MatTabBodyPortal} from './tab-body';\nimport {MatTabContent} from './tab-content';\nimport {MatTabGroup} from './tab-group';\nimport {MatTabHeader} from './tab-header';\nimport {MatTabLabel} from './tab-label';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {MatTabLink, MatTabNav} from './tab-nav-bar/tab-nav-bar';\nimport {A11yModule} from '@angular/cdk/a11y';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n A11yModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabLink,\n MatTabContent,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabLink,\n MatTabBody,\n MatTabBodyPortal,\n MatTabHeader,\n MatTabContent,\n ],\n})\nexport class MatTabsModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this 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 {Platform} from '@angular/cdk/platform';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentChecked,\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanDisable, CanDisableCtor,\n CanDisableRipple, CanDisableRippleCtor,\n HasTabIndex, HasTabIndexCtor,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex, RippleConfig,\n RippleGlobalOptions,\n RippleRenderer,\n RippleTarget,\n ThemePalette,\n} from '@angular/material/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {FocusMonitor, FocusableOption} from '@angular/cdk/a11y';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {MatInkBar} from '../ink-bar';\nimport {MatPaginatedTabHeader} from '../paginated-tab-header';\n\n\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\n@Component({\n moduleId: module.id,\n selector: '[mat-tab-nav-bar]',\n exportAs: 'matTabNavBar, matTabNav',\n inputs: ['color'],\n templateUrl: 'tab-nav-bar.html',\n styleUrls: ['tab-nav-bar.css'],\n host: {\n 'class': 'mat-tab-nav-bar mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n '[class.mat-primary]': 'color !== \"warn\" && color !== \"accent\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatTabNav extends MatPaginatedTabHeader implements AfterContentChecked,\n AfterContentInit, OnDestroy {\n\n /** Query list of all tab links of the tab navigation. */\n @ContentChildren(forwardRef(() => MatTabLink), {descendants: true}) _items: QueryList<MatTabLink>;\n @ViewChild(MatInkBar, {static: true}) _inkBar: MatInkBar;\n @ViewChild('tabListContainer', {static: true}) _tabListContainer: ElementRef;\n @ViewChild('tabList', {static: true}) _tabList: ElementRef;\n @ViewChild('nextPaginator', {static: false}) _nextPaginator: ElementRef<HTMLElement>;\n @ViewChild('previousPaginator', {static: false}) _previousPaginator: ElementRef<HTMLElement>;\n\n /** Background color of the tab nav. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const classList = this._elementRef.nativeElement.classList;\n classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Whether the ripple effect is disabled or not. */\n @Input()\n get disableRipple() { return this._disableRipple; }\n set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n private _disableRipple: boolean = false;\n\n /** Theme color of the nav bar. */\n @Input() color: ThemePalette = 'primary';\n\n constructor(elementRef: ElementRef,\n @Optional() dir: Directionality,\n ngZone: NgZone,\n changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n /**\n * @deprecated @breaking-change 9.0.0 `platform` parameter to become required.\n */\n @Optional() platform?: Platform,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n }\n\n protected _itemSelected() {\n // noop\n }\n\n ngAfterContentInit() {\n this.updateActiveLink();\n super.ngAfterContentInit();\n }\n\n /**\n * Notifies the component that the active link has been changed.\n * @breaking-change 8.0.0 `element` parameter to be removed.\n */\n updateActiveLink(_element?: ElementRef) {\n if (!this._items) {\n return;\n }\n\n const items = this._items.toArray();\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].active) {\n this.selectedIndex = i;\n this._changeDetectorRef.markForCheck();\n return;\n }\n }\n\n // The ink bar should hide itself if no items are active.\n this.selectedIndex = -1;\n this._inkBar.hide();\n }\n}\n\n\n// Boilerplate for applying mixins to MatTabLink.\nclass MatTabLinkBase {}\nconst _MatTabLinkMixinBase:\n HasTabIndexCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatTabLinkBase =\n mixinTabIndex(mixinDisableRipple(mixinDisabled(MatTabLinkBase)));\n\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\n@Directive({\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n host: {\n 'class': 'mat-tab-link',\n '[attr.aria-current]': 'active',\n '[attr.aria-disabled]': 'disabled',\n '[attr.tabIndex]': 'tabIndex',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n }\n})\nexport class MatTabLink extends _MatTabLinkMixinBase implements OnDestroy, CanDisable,\n CanDisableRipple, HasTabIndex, RippleTarget, FocusableOption {\n\n /** Whether the tab link is active or not. */\n protected _isActive: boolean = false;\n\n /** Reference to the RippleRenderer for the tab-link. */\n protected _tabLinkRipple: RippleRenderer;\n\n /** Whether the link is active. */\n @Input()\n get active(): boolean { return this._isActive; }\n set active(value: boolean) {\n if (value !== this._isActive) {\n this._isActive = value;\n this._tabNavBar.updateActiveLink(this.elementRef);\n }\n }\n\n /**\n * Ripple configuration for ripples that are launched on pointer down. The ripple config\n * is set to the global ripple options since we don't have any configurable options for\n * the tab link ripples.\n * @docs-private\n */\n rippleConfig: RippleConfig & RippleGlobalOptions;\n\n /**\n * Whether ripples are disabled on interaction.\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return this.disabled || this.disableRipple || this._tabNavBar.disableRipple ||\n !!this.rippleConfig.disabled;\n }\n\n constructor(\n private _tabNavBar: MatTabNav, public elementRef: ElementRef, ngZone: NgZone,\n platform: Platform,\n @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS) globalRippleOptions: RippleGlobalOptions|null,\n @Attribute('tabindex') tabIndex: string, private _focusMonitor: FocusMonitor,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {\n super();\n\n this._tabLinkRipple = new RippleRenderer(this, ngZone, elementRef, platform);\n this._tabLinkRipple.setupTriggerEvents(elementRef.nativeElement);\n this.rippleConfig = globalRippleOptions || {};\n this.tabIndex = parseInt(tabIndex) || 0;\n\n if (animationMode === 'NoopAnimations') {\n this.rippleConfig.animation = {enterDuration: 0, exitDuration: 0};\n }\n\n _focusMonitor.monitor(elementRef);\n }\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n ngOnDestroy() {\n this._tabLinkRipple._removeTriggerEvents();\n this._focusMonitor.stopMonitoring(this.elementRef);\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, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n Optional,\n Inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n CanColor,\n CanColorCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\n mixinColor,\n mixinDisableRipple,\n ThemePalette,\n} from '@angular/material/core';\nimport {merge, Subscription} from 'rxjs';\nimport {MatTab} from './tab';\nimport {MatTabHeader} from './tab-header';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n/** A simple change event emitted on focus or selection changes. */\nexport class MatTabChangeEvent {\n /** Index of the currently-selected tab. */\n index: number;\n /** Reference to the currently-selected tab. */\n tab: MatTab;\n}\n\n/** Possible positions for the tab header. */\nexport type MatTabHeaderPosition = 'above' | 'below';\n\n/** Object that can be used to configure the default options for the tabs module. */\nexport interface MatTabsConfig {\n /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n animationDuration?: string;\n}\n\n/** Injection token that can be used to provide the default options the tabs module. */\nexport const MAT_TABS_CONFIG = new InjectionToken('MAT_TABS_CONFIG');\n\n// Boilerplate for applying mixins to MatTabGroup.\n/** @docs-private */\nclass MatTabGroupBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatTabGroupMixinBase: CanColorCtor & CanDisableRippleCtor & typeof MatTabGroupBase =\n mixinColor(mixinDisableRipple(MatTabGroupBase), 'primary');\n\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://material.io/design/components/tabs.html\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-group',\n exportAs: 'matTabGroup',\n templateUrl: 'tab-group.html',\n styleUrls: ['tab-group.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color', 'disableRipple'],\n host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n },\n})\nexport class MatTabGroup extends _MatTabGroupMixinBase implements AfterContentInit,\n AfterContentChecked, OnDestroy, CanColor, CanDisableRipple {\n\n @ContentChildren(MatTab) _tabs: QueryList<MatTab>;\n\n @ViewChild('tabBodyWrapper', {static: false}) _tabBodyWrapper: ElementRef;\n\n @ViewChild('tabHeader', {static: false}) _tabHeader: MatTabHeader;\n\n /** The tab index that should be selected after the content has been checked. */\n private _indexToSelect: number | null = 0;\n\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n private _tabBodyWrapperHeight: number = 0;\n\n /** Subscription to tabs being added/removed. */\n private _tabsSubscription = Subscription.EMPTY;\n\n /** Subscription to changes in the tab labels. */\n private _tabLabelSubscription = Subscription.EMPTY;\n\n /** Whether the tab group should grow to the size of the active tab. */\n @Input()\n get dynamicHeight(): boolean { return this._dynamicHeight; }\n set dynamicHeight(value: boolean) { this._dynamicHeight = coerceBooleanProperty(value); }\n private _dynamicHeight: boolean = false;\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number | null { return this._selectedIndex; }\n set selectedIndex(value: number | null) {\n this._indexToSelect = coerceNumberProperty(value, null);\n }\n private _selectedIndex: number | null = null;\n\n /** Position of the tab header. */\n @Input() headerPosition: MatTabHeaderPosition = 'above';\n\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\n @Input()\n get animationDuration(): string { return this._animationDuration; }\n set animationDuration(value: string) {\n this._animationDuration = /^\\d+$/.test(value) ? value + 'ms' : value;\n }\n private _animationDuration: string;\n\n /** Background color of the tab group. */\n @Input()\n get backgroundColor(): ThemePalette { return this._backgroundColor; }\n set backgroundColor(value: ThemePalette) {\n const nativeElement: HTMLElement = this._elementRef.nativeElement;\n\n nativeElement.classList.remove(`mat-background-${this.backgroundColor}`);\n\n if (value) {\n nativeElement.classList.add(`mat-background-${value}`);\n }\n\n this._backgroundColor = value;\n }\n private _backgroundColor: ThemePalette;\n\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when focus has changed within a tab group. */\n @Output() readonly focusChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>();\n\n /** Event emitted when the body animation has completed */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the tab selection has changed. */\n @Output() readonly selectedTabChange: EventEmitter<MatTabChangeEvent> =\n new EventEmitter<MatTabChangeEvent>(true);\n\n private _groupId: number;\n\n constructor(elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(MAT_TABS_CONFIG) @Optional() defaultConfig?: MatTabsConfig,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {\n super(elementRef);\n this._groupId = nextId++;\n this.animationDuration = defaultConfig && defaultConfig.animationDuration ?\n defaultConfig.animationDuration : '500ms';\n }\n\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n // the amount of tabs changes before the actual change detection runs.\n const indexToSelect = this._indexToSelect = this._clampTabIndex(this._indexToSelect);\n\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect) {\n const isFirstRun = this._selectedIndex == null;\n\n if (!isFirstRun) {\n this.selectedTabChange.emit(this._createChangeEvent(indexToSelect));\n }\n\n // Changing these values after change detection has run\n // since the checked content may contain references to them.\n Promise.resolve().then(() => {\n this._tabs.forEach((tab, index) => tab.isActive = index === indexToSelect);\n\n if (!isFirstRun) {\n this.selectedIndexChange.emit(indexToSelect);\n }\n });\n }\n\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab: MatTab, index: number) => {\n tab.position = index - indexToSelect;\n\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit() {\n this._subscribeToTabLabels();\n\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n const indexToSelect = this._clampTabIndex(this._indexToSelect);\n\n // Maintain the previously-selected tab if a new tab is added or removed and there is no\n // explicit change that selects a different tab.\n if (indexToSelect === this._selectedIndex) {\n const tabs = this._tabs.toArray();\n\n for (let i = 0; i < tabs.length; i++) {\n if (tabs[i].isActive) {\n // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed\n // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n // adding a tab within the `selectedIndexChange` event.\n this._indexToSelect = this._selectedIndex = i;\n break;\n }\n }\n }\n\n this._subscribeToTabLabels();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n\n /** Re-aligns the ink bar to the selected tab element. */\n realignInkBar() {\n if (this._tabHeader) {\n this._tabHeader._alignInkBarToSelectedTab();\n }\n }\n\n _focusChanged(index: number) {\n this.focusChange.emit(this._createChangeEvent(index));\n }\n\n private _createChangeEvent(index: number): MatTabChangeEvent {\n const event = new MatTabChangeEvent;\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n private _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._stateChanges))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n private _clampTabIndex(index: number | null): number {\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n return Math.min(this._tabs.length - 1, Math.max(index || 0, 0));\n }\n\n /** Returns a unique id for each tab label element */\n _getTabLabelId(i: number): string {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n\n /** Returns a unique id for each tab content element */\n _getTabContentId(i: number): string {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n _setTabBodyWrapperHeight(tabHeight: number): void {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) { return; }\n\n const wrapper: HTMLElement = this._tabBodyWrapper.nativeElement;\n\n wrapper.style.height = this._tabBodyWrapperHeight + 'px';\n\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = tabHeight + 'px';\n }\n }\n\n /** Removes the height of the tab body wrapper. */\n _removeTabBodyWrapperHeight(): void {\n const wrapper = this._tabBodyWrapper.nativeElement;\n this._tabBodyWrapperHeight = wrapper.clientHeight;\n wrapper.style.height = '';\n this.animationDone.emit();\n }\n\n /** Handle click events, setting new selected index if appropriate. */\n _handleClick(tab: MatTab, tabHeader: MatTabHeader, index: number) {\n if (!tab.disabled) {\n this.selectedIndex = tabHeader.focusIndex = index;\n }\n }\n\n /** Retrieves the tabindex for the tab. */\n _getTabIndex(tab: MatTab, idx: number): number | null {\n if (tab.disabled) {\n return null;\n }\n return this.selectedIndex === idx ? 0 : -1;\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 {Directionality} from '@angular/cdk/bidi';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n NgZone,\n OnDestroy,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n AfterViewInit,\n Input,\n Inject,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatInkBar} from './ink-bar';\nimport {MatTabLabelWrapper} from './tab-label-wrapper';\nimport {Platform} from '@angular/cdk/platform';\nimport {MatPaginatedTabHeader} from './paginated-tab-header';\n\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-header',\n templateUrl: 'tab-header.html',\n styleUrls: ['tab-header.css'],\n inputs: ['selectedIndex'],\n outputs: ['selectFocusedIndex', 'indexFocused'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n})\nexport class MatTabHeader extends MatPaginatedTabHeader implements AfterContentChecked,\n AfterContentInit, AfterViewInit, OnDestroy {\n\n @ContentChildren(MatTabLabelWrapper) _items: QueryList<MatTabLabelWrapper>;\n @ViewChild(MatInkBar, {static: true}) _inkBar: MatInkBar;\n @ViewChild('tabListContainer', {static: true}) _tabListContainer: ElementRef;\n @ViewChild('tabList', {static: true}) _tabList: ElementRef;\n @ViewChild('nextPaginator', {static: false}) _nextPaginator: ElementRef<HTMLElement>;\n @ViewChild('previousPaginator', {static: false}) _previousPaginator: ElementRef<HTMLElement>;\n\n /** Whether the ripple effect is disabled or not. */\n @Input()\n get disableRipple() { return this._disableRipple; }\n set disableRipple(value: any) { this._disableRipple = coerceBooleanProperty(value); }\n private _disableRipple: boolean = false;\n\n constructor(elementRef: ElementRef,\n changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n @Optional() dir: Directionality,\n ngZone: NgZone,\n platform: Platform,\n // @breaking-change 9.0.0 `_animationMode` parameter to be made required.\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {\n super(elementRef, changeDetectorRef, viewportRuler, dir, ngZone, platform, animationMode);\n }\n\n protected _itemSelected(event: KeyboardEvent) {\n event.preventDefault();\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 ChangeDetectorRef,\n ElementRef,\n NgZone,\n Optional,\n QueryList,\n EventEmitter,\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {FocusKeyManager, FocusableOption} from '@angular/cdk/a11y';\nimport {END, ENTER, HOME, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {merge, of as observableOf, Subject, timer, fromEvent} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {MatInkBar} from './ink-bar';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\n\n\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions =\n normalizePassiveListenerOptions({passive: true}) as EventListenerOptions;\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n\n/** Item inside a paginated tab header. */\ntype MatPaginatedTabHeaderItem = FocusableOption & {elementRef: ElementRef};\n\n/**\n * Base class for a tab header that supported pagination.\n */\nexport abstract class MatPaginatedTabHeader implements AfterContentChecked, AfterContentInit,\n AfterViewInit, OnDestroy {\n abstract _items: QueryList<MatPaginatedTabHeaderItem>;\n abstract _inkBar: MatInkBar;\n abstract _tabListContainer: ElementRef<HTMLElement>;\n abstract _tabList: ElementRef<HTMLElement>;\n abstract _nextPaginator: ElementRef<HTMLElement>;\n abstract _previousPaginator: ElementRef<HTMLElement>;\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistance = 0;\n\n /** Whether the header should scroll to the selected index after the view has been checked. */\n private _selectedIndexChanged = false;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Whether the controls for pagination should be displayed */\n _showPaginationControls = false;\n\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n _disableScrollAfter = true;\n\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n _disableScrollBefore = true;\n\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n private _tabLabelCount: number;\n\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n private _scrollDistanceChanged: boolean;\n\n /** Used to manage focus between the tabs. */\n private _keyManager: FocusKeyManager<MatPaginatedTabHeaderItem>;\n\n /** Cached text content of the header. */\n private _currentTextContent: string;\n\n /** Stream that will stop the automated scrolling. */\n private _stopScrolling = new Subject<void>();\n\n /** The index of the active tab. */\n get selectedIndex(): number { return this._selectedIndex; }\n set selectedIndex(value: number) {\n value = coerceNumberProperty(value);\n\n if (this._selectedIndex != value) {\n this._selectedIndexChanged = true;\n this._selectedIndex = value;\n\n if (this._keyManager) {\n this._keyManager.updateActiveItemIndex(value);\n }\n }\n }\n private _selectedIndex: number = 0;\n\n /** Event emitted when the option is selected. */\n readonly selectFocusedIndex: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when a label is focused. */\n readonly indexFocused: EventEmitter<number> = new EventEmitter<number>();\n\n constructor(protected _elementRef: ElementRef<HTMLElement>,\n protected _changeDetectorRef: ChangeDetectorRef,\n private _viewportRuler: ViewportRuler,\n @Optional() private _dir: Directionality,\n private _ngZone: NgZone,\n /**\n * @deprecated @breaking-change 9.0.0 `_platform` and `_animationMode`\n * parameters to become required.\n */\n private _platform?: Platform,\n public _animationMode?: string) {\n\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n _ngZone.runOutsideAngular(() => {\n fromEvent(_elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n }\n\n /** Called when the user has selected an item via the keyboard. */\n protected abstract _itemSelected(event: KeyboardEvent): void;\n\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this._previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n\n fromEvent(this._nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf(null);\n const resize = this._viewportRuler.change(150);\n const realign = () => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n };\n\n this._keyManager = new FocusKeyManager<MatPaginatedTabHeaderItem>(this._items)\n .withHorizontalOrientation(this._getLayoutDirection())\n .withWrap();\n\n this._keyManager.updateActiveItem(0);\n\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame(realign) : realign();\n\n // On dir change or window resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, resize, this._items.changes).pipe(takeUntil(this._destroyed)).subscribe(() => {\n realign();\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.pipe(takeUntil(this._destroyed)).subscribe(newFocusIndex => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n\n ngAfterContentChecked(): void {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._items.length) {\n this.updatePagination();\n this._tabLabelCount = this._items.length;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n\n /** Handles keyboard events on the header. */\n _handleKeydown(event: KeyboardEvent) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n\n switch (event.keyCode) {\n case HOME:\n this._keyManager.setFirstItemActive();\n event.preventDefault();\n break;\n case END:\n this._keyManager.setLastItemActive();\n event.preventDefault();\n break;\n case ENTER:\n case SPACE:\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex(): number {\n return this._keyManager ? this._keyManager.activeItemIndex! : 0;\n }\n\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value: number) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n\n this._keyManager.setActiveItem(value);\n }\n\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index: number): boolean {\n if (!this._items) { return true; }\n\n const tab = this._items ? this._items.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex: number) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n\n if (this._items && this._items.length) {\n this._items.toArray()[tabIndex].focus();\n\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this._tabListContainer.nativeElement;\n const dir = this._getLayoutDirection();\n\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n\n /** The layout direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n const scrollDistance = this.scrollDistance;\n const platform = this._platform;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this._tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n // @breaking-change 9.0.0 Remove null check for `platform` after it can no longer be undefined.\n if (platform && (platform.TRIDENT || platform.EDGE)) {\n this._tabListContainer.nativeElement.scrollLeft = 0;\n }\n }\n\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance(): number { return this._scrollDistance; }\n set scrollDistance(value: number) {\n this._scrollTo(value);\n }\n\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction: ScrollDirection) {\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = (direction == 'before' ? -1 : 1) * viewLength / 3;\n\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction: ScrollDirection) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex: number) {\n const selectedLabel = this._items ? this._items.toArray()[labelIndex] : null;\n\n if (!selectedLabel) { return; }\n\n // The view length is the visible width of the tab labels.\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n const {offsetLeft, offsetWidth} = selectedLabel.elementRef.nativeElement;\n\n let labelBeforePos: number, labelAfterPos: number;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n } else {\n labelAfterPos = this._tabList.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n const isEnabled =\n this._tabList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n\n this._showPaginationControls = isEnabled;\n }\n\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance(): number {\n const lengthOfTabList = this._tabList.nativeElement.scrollWidth;\n const viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return (lengthOfTabList - viewLength) || 0;\n }\n\n /** Tells the ink-bar to align itself to the current label wrapper */\n _alignInkBarToSelectedTab(): void {\n const selectedItem = this._items && this._items.length ?\n this._items.toArray()[this.selectedIndex] : null;\n const selectedLabelWrapper = selectedItem ? selectedItem.elementRef.nativeElement : null;\n\n if (selectedLabelWrapper) {\n this._inkBar.alignToElement(selectedLabelWrapper);\n } else {\n this._inkBar.hide();\n }\n }\n\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction: ScrollDirection) {\n // Avoid overlapping timers.\n this._stopInterval();\n\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const {maxScrollDistance, distance} = this._scrollHeader(direction);\n\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n private _scrollTo(position: number) {\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n\n return {maxScrollDistance, distance: this._scrollDistance};\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 {Directive, ElementRef} from '@angular/core';\nimport {CanDisable, CanDisableCtor, mixinDisabled} from '@angular/material/core';\n\n\n// Boilerplate for applying mixins to MatTabLabelWrapper.\n/** @docs-private */\nclass MatTabLabelWrapperBase {}\nconst _MatTabLabelWrapperMixinBase: CanDisableCtor & typeof MatTabLabelWrapperBase =\n mixinDisabled(MatTabLabelWrapperBase);\n\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled',\n '[attr.aria-disabled]': '!!disabled',\n }\n})\nexport class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase implements CanDisable {\n constructor(public elementRef: ElementRef) {\n super();\n }\n\n /** Sets focus on the wrapper element */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n getOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n\n getOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\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 Component,\n ChangeDetectorRef,\n Input,\n Inject,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n ElementRef,\n Directive,\n Optional,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ComponentFactoryResolver,\n ViewContainerRef,\n forwardRef,\n ViewChild,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {TemplatePortal, CdkPortalOutlet, PortalHostDirective} from '@angular/cdk/portal';\nimport {Directionality, Direction} from '@angular/cdk/bidi';\nimport {Subscription, Subject} from 'rxjs';\nimport {matTabsAnimations} from './tabs-animations';\nimport {startWith, distinctUntilChanged} from 'rxjs/operators';\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * psuedo-prior state.\n */\nexport type MatTabBodyPositionState =\n 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type MatTabBodyOriginState = 'left' | 'right';\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({\n selector: '[matTabBodyHost]'\n})\nexport class MatTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n /** Subscription to events for when the tab body begins centering. */\n private _centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n private _leavingSub = Subscription.EMPTY;\n\n constructor(\n componentFactoryResolver: ComponentFactoryResolver,\n viewContainerRef: ViewContainerRef,\n @Inject(forwardRef(() => MatTabBody)) private _host: MatTabBody) {\n super(componentFactoryResolver, viewContainerRef);\n }\n\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit(): void {\n super.ngOnInit();\n\n this._centeringSub = this._host._beforeCentering\n .pipe(startWith(this._host._isCenterPosition(this._host._position)))\n .subscribe((isCentering: boolean) => {\n if (isCentering && !this.hasAttached()) {\n this.attach(this._host._content);\n }\n });\n\n this._leavingSub = this._host._afterLeavingCenter.subscribe(() => {\n this.detach();\n });\n }\n\n /** Clean up centering subscription. */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this._centeringSub.unsubscribe();\n this._leavingSub.unsubscribe();\n }\n}\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tab-body',\n templateUrl: 'tab-body.html',\n styleUrls: ['tab-body.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [matTabsAnimations.translateTab],\n host: {\n 'class': 'mat-tab-body',\n },\n})\nexport class MatTabBody implements OnInit, OnDestroy {\n\n /** Current position of the tab-body in the tab-group. Zero means that the tab is visible. */\n private _positionIndex: number;\n\n /** Subscription to the directionality change observable. */\n private _dirChangeSubscription = Subscription.EMPTY;\n\n /** Tab body position state. Used by the animation trigger for the current state. */\n _position: MatTabBodyPositionState;\n\n /** Emits when an animation on the tab is complete. */\n _translateTabComplete = new Subject<AnimationEvent>();\n\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n @Output() readonly _onCentering: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly _afterLeavingCenter: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the tab completes its animation towards the center. */\n @Output() readonly _onCentered: EventEmitter<void> = new EventEmitter<void>(true);\n\n /** The portal host inside of this container into which the tab body content will be loaded. */\n @ViewChild(PortalHostDirective, {static: false}) _portalHost: PortalHostDirective;\n\n /** The tab body content to display. */\n @Input('content') _content: TemplatePortal;\n\n /** Position that will be used when the tab is immediately becoming visible after creation. */\n @Input() origin: number;\n\n // Note that the default value will always be overwritten by `MatTabBody`, but we need one\n // anyway to prevent the animations module from throwing an error if the body is used on its own.\n /** Duration for the tab's animation. */\n @Input() animationDuration: string = '500ms';\n\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n @Input()\n set position(position: number) {\n this._positionIndex = position;\n this._computePositionAnimationState();\n }\n\n constructor(private _elementRef: ElementRef<HTMLElement>,\n @Optional() private _dir: Directionality,\n changeDetectorRef: ChangeDetectorRef) {\n\n if (_dir) {\n this._dirChangeSubscription = _dir.change.subscribe((dir: Direction) => {\n this._computePositionAnimationState(dir);\n changeDetectorRef.markForCheck();\n });\n }\n\n // Ensure that we get unique animation events, because the `.done` callback can get\n // invoked twice in some browsers. See https://github.com/angular/angular/issues/24084.\n this._translateTabComplete.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(event.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n\n if (this._isCenterPosition(event.fromState) && !this._isCenterPosition(this._position)) {\n this._afterLeavingCenter.emit();\n }\n });\n }\n\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this._position == 'center' && this.origin != null) {\n this._position = this._computePositionFromOrigin();\n }\n }\n\n ngOnDestroy() {\n this._dirChangeSubscription.unsubscribe();\n this._translateTabComplete.complete();\n }\n\n _onTranslateTabStarted(event: AnimationEvent): void {\n const isCentering = this._isCenterPosition(event.toState);\n this._beforeCentering.emit(isCentering);\n if (isCentering) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n\n /** The text direction of the containing app. */\n _getLayoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the provided position state is considered center, regardless of origin. */\n _isCenterPosition(position: MatTabBodyPositionState|string): boolean {\n return position == 'center' ||\n position == 'left-origin-center' ||\n position == 'right-origin-center';\n }\n\n /** Computes the position state that will be used for the tab-body animation trigger. */\n private _computePositionAnimationState(dir: Direction = this._getLayoutDirection()) {\n if (this._positionIndex < 0) {\n this._position = dir == 'ltr' ? 'left' : 'right';\n } else if (this._positionIndex > 0) {\n this._position = dir == 'ltr' ? 'right' : 'left';\n } else {\n this._position = 'center';\n }\n }\n\n /**\n * Computes the position state based on the specified origin position. This is used if the\n * tab is becoming visible immediately after creation.\n */\n private _computePositionFromOrigin(): MatTabBodyPositionState {\n const dir = this._getLayoutDirection();\n\n if ((dir == 'ltr' && this.origin <= 0) || (dir == 'rtl' && this.origin > 0)) {\n return 'left-origin-center';\n }\n\n return 'right-origin-center';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material tabs.\n * @docs-private\n */\nexport const matTabsAnimations: {\n readonly translateTab: AnimationTriggerMetadata;\n} = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({transform: 'none'})),\n\n // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n // in order to ensure that the element has a height before its state changes. This is\n // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n // not have a static height and is not rendered. See related issue: #9465\n state('left', style({transform: 'translate3d(-100%, 0, 0)', minHeight: '1px'})),\n state('right', style({transform: 'translate3d(100%, 0, 0)', minHeight: '1px'})),\n\n transition('* => left, * => right, left => center, right => center',\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({transform: 'translate3d(-100%, 0, 0)'}),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({transform: 'translate3d(100%, 0, 0)'}),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\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 {TemplatePortal} from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanDisable, CanDisableCtor, mixinDisabled} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {MatTabContent} from './tab-content';\nimport {MatTabLabel} from './tab-label';\n\n\n// Boilerplate for applying mixins to MatTab.\n/** @docs-private */\nclass MatTabBase {}\nconst _MatTabMixinBase: CanDisableCtor & typeof MatTabBase =\n mixinDisabled(MatTabBase);\n\n@Component({\n moduleId: module.id,\n selector: 'mat-tab',\n templateUrl: 'tab.html',\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matTab',\n})\nexport class MatTab extends _MatTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\n /** Content for the tab label given by `<ng-template mat-tab-label>`. */\n @ContentChild(MatTabLabel, {static: false}) templateLabel: MatTabLabel;\n\n /**\n * Template provided in the tab content that will be used if present, used to enable lazy-loading\n */\n @ContentChild(MatTabContent, {read: TemplateRef, static: true})\n _explicitContent: TemplateRef<any>;\n\n /** Template inside the MatTab view that contains an `<ng-content>`. */\n @ViewChild(TemplateRef, {static: true}) _implicitContent: TemplateRef<any>;\n\n /** Plain text label for the tab, used when there is no template label. */\n @Input('label') textLabel: string = '';\n\n /** Aria label for the tab. */\n @Input('aria-label') ariaLabel: string;\n\n /**\n * Reference to the element that the tab is labelled by.\n * Will be cleared if `aria-label` is set at the same time.\n */\n @Input('aria-labelledby') ariaLabelledby: string;\n\n /** Portal that will be the hosted content of the tab */\n private _contentPortal: TemplatePortal | null = null;\n\n /** @docs-private */\n get content(): TemplatePortal | null {\n return this._contentPortal;\n }\n\n /** Emits whenever the internal state of the tab changes. */\n readonly _stateChanges = new Subject<void>();\n\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n position: number | null = null;\n\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n origin: number | null = null;\n\n /**\n * Whether the tab is currently active.\n */\n isActive = false;\n\n constructor(private _viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this._stateChanges.next();\n }\n }\n\n ngOnDestroy(): void {\n this._stateChanges.complete();\n }\n\n ngOnInit(): void {\n this._contentPortal = new TemplatePortal(\n this._explicitContent || this._implicitContent, this._viewContainerRef);\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 {Directive} from '@angular/core';\nimport {CdkPortal} from '@angular/cdk/portal';\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n selector: '[mat-tab-label], [matTabLabel]',\n})\nexport class MatTabLabel extends CdkPortal {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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} from '@angular/core';\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({selector: '[matTabContent]'})\nexport class MatTabContent {\n constructor(public template: TemplateRef<any>) { }\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, Inject, InjectionToken, NgZone, Optional} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Interface for a a MatInkBar positioner method, defining the positioning and width of the ink\n * bar in a set of tabs.\n */\n// tslint:disable-next-line class-name Using leading underscore to denote internal interface.\nexport interface _MatInkBarPositioner {\n (element: HTMLElement): { left: string, width: string };\n}\n\n/** Injection token for the MatInkBar's Positioner. */\nexport const _MAT_INK_BAR_POSITIONER =\n new InjectionToken<_MatInkBarPositioner>('MatInkBarPositioner', {\n providedIn: 'root',\n factory: _MAT_INK_BAR_POSITIONER_FACTORY\n });\n\n/**\n * The default positioner function for the MatInkBar.\n * @docs-private\n */\nexport function _MAT_INK_BAR_POSITIONER_FACTORY(): _MatInkBarPositioner {\n const method = (element: HTMLElement) => ({\n left: element ? (element.offsetLeft || 0) + 'px' : '0',\n width: element ? (element.offsetWidth || 0) + 'px' : '0',\n });\n\n return method;\n}\n\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * @docs-private\n */\n@Directive({\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`,\n },\n})\nexport class MatInkBar {\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n @Inject(_MAT_INK_BAR_POSITIONER) private _inkBarPositioner: _MatInkBarPositioner,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) { }\n\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param element\n */\n alignToElement(element: HTMLElement) {\n this.show();\n\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._setStyles(element));\n });\n } else {\n this._setStyles(element);\n }\n }\n\n /** Shows the ink bar. */\n show(): void {\n this._elementRef.nativeElement.style.visibility = 'visible';\n }\n\n /** Hides the ink bar. */\n hide(): void {\n this._elementRef.nativeElement.style.visibility = 'hidden';\n }\n\n /**\n * Sets the proper styles to the ink bar element.\n * @param element\n */\n private _setStyles(element: HTMLElement) {\n const positions = this._inkBarPositioner(element);\n const inkBar: HTMLElement = this._elementRef.nativeElement;\n\n inkBar.style.left = positions.left;\n inkBar.style.width = positions.width;\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 {_isNumberValue} from '@angular/cdk/coercion';\nimport {DataSource} from '@angular/cdk/table';\nimport {\n BehaviorSubject,\n combineLatest,\n merge,\n Observable,\n of as observableOf,\n Subscription,\n Subject,\n} from 'rxjs';\nimport {MatPaginator, PageEvent} from '@angular/material/paginator';\nimport {MatSort, Sort} from '@angular/material/sort';\nimport {map} from 'rxjs/operators';\n\n/**\n * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,\n * which defines how row data is converted to a string for filter matching.\n */\nexport class MatTableDataSource<T> extends DataSource<T> {\n /** Stream that emits when a new data array is set on the data source. */\n private readonly _data: BehaviorSubject<T[]>;\n\n /** Stream emitting render data to the table (depends on ordered data changes). */\n private readonly _renderData = new BehaviorSubject<T[]>([]);\n\n /** Stream that emits when a new filter string is set on the data source. */\n private readonly _filter = new BehaviorSubject<string>('');\n\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n private readonly _internalPageChanges = new Subject<void>();\n\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n _renderChangesSubscription = Subscription.EMPTY;\n\n /**\n * The filtered set of data that has been matched by the filter string, or all the data if there\n * is no filter. Useful for knowing the set of data the table represents.\n * For example, a 'selectAll()' function would likely want to select the set of filtered data\n * shown to the user rather than all the data.\n */\n filteredData: T[];\n\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() { return this._data.value; }\n set data(data: T[]) { this._data.next(data); }\n\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter(): string { return this._filter.value; }\n set filter(filter: string) { this._filter.next(filter); }\n\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort(): MatSort | null { return this._sort; }\n set sort(sort: MatSort|null) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n private _sort: MatSort|null;\n\n /**\n * Instance of the MatPaginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the MatPaginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator(): MatPaginator | null { return this._paginator; }\n set paginator(paginator: MatPaginator|null) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n private _paginator: MatPaginator|null;\n\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n sortingDataAccessor: ((data: T, sortHeaderId: string) => string|number) =\n (data: T, sortHeaderId: string): string|number => {\n const value = (data as {[key: string]: any})[sortHeaderId];\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n }\n\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n sortData: ((data: T[], sort: MatSort) => T[]) = (data: T[], sort: MatSort): T[] => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') { return data; }\n\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come first.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n }\n\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n filterPredicate: ((data: T, filter: string) => boolean) = (data: T, filter: string): boolean => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data).reduce((currentTerm: string, key: string) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + (data as {[key: string]: any})[key] + '◬';\n }, '').toLowerCase();\n\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n\n return dataStr.indexOf(transformedFilter) != -1;\n }\n\n constructor(initialData: T[] = []) {\n super();\n this._data = new BehaviorSubject<T[]>(initialData);\n this._updateChangeSubscription();\n }\n\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange: Observable<Sort|null|void> = this._sort ?\n merge(this._sort.sortChange, this._sort.initialized) as Observable<Sort|void> :\n observableOf(null);\n const pageChange: Observable<PageEvent|null|void> = this._paginator ?\n merge(\n this._paginator.page,\n this._internalPageChanges,\n this._paginator.initialized\n ) as Observable<PageEvent|void> :\n observableOf(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest(dataStream, this._filter)\n .pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest(filteredData, sortChange)\n .pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest(orderedData, pageChange)\n .pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterTermAccessor function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data: T[]) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterTermAccessor.\n // May be overridden for customization.\n this.filteredData =\n !this.filter ? data : data.filter(obj => this.filterPredicate(obj, this.filter));\n\n if (this.paginator) { this._updatePaginator(this.filteredData.length); }\n\n return this.filteredData;\n }\n\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data: T[]): T[] {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) { return data; }\n\n return this.sortData(data.slice(), this.sort);\n }\n\n /**\n * Returns a paged splice of the provided data array according to the provided MatPaginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data: T[]): T[] {\n if (!this.paginator) { return data; }\n\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice().splice(startIndex, this.paginator.pageSize);\n }\n\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength: number) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n\n if (!paginator) { return; }\n\n paginator.length = filteredDataLength;\n\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() { return this._renderData; }\n\n /**\n * Used by the MatTable. Called when it is destroyed. No-op.\n * @docs-private\n */\n disconnect() { }\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 {MatTable} from './table';\nimport {CdkTableModule} from '@angular/cdk/table';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatFooterCell,\n MatFooterCellDef,\n MatHeaderCell,\n MatHeaderCellDef\n} from './cell';\nimport {\n MatFooterRow,\n MatFooterRowDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef\n} from './row';\nimport {MatTextColumn} from './text-column';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\n\nconst EXPORTED_DECLARATIONS = [\n // Table\n MatTable,\n\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n\n MatTextColumn,\n];\n\n@NgModule({\n imports: [\n CdkTableModule,\n CommonModule,\n MatCommonModule,\n ],\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n})\nexport class MatTableModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {CdkTextColumn} from '@angular/cdk/table';\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\n\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`<table>`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-text-column',\n template: `\n <ng-container matColumnDef>\n <th mat-header-cell *matHeaderCellDef [style.text-align]=\"justify\">\n {{headerText}}\n </th>\n <td mat-cell *matCellDef=\"let data\" [style.text-align]=\"justify\">\n {{dataAccessor(data, name)}}\n </td>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class MatTextColumn<T> extends CdkTextColumn<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 {\n CDK_ROW_TEMPLATE,\n CdkFooterRow,\n CdkFooterRowDef,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkRow,\n CdkRowDef\n} from '@angular/cdk/table';\nimport {ChangeDetectionStrategy, Component, Directive, ViewEncapsulation} from '@angular/core';\n\n/**\n * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\n@Directive({\n selector: '[matHeaderRowDef]',\n providers: [{provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef}],\n inputs: ['columns: matHeaderRowDef', 'sticky: matHeaderRowDefSticky'],\n})\nexport class MatHeaderRowDef extends CdkHeaderRowDef {\n}\n\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\n@Directive({\n selector: '[matFooterRowDef]',\n providers: [{provide: CdkFooterRowDef, useExisting: MatFooterRowDef}],\n inputs: ['columns: matFooterRowDef', 'sticky: matFooterRowDefSticky'],\n})\nexport class MatFooterRowDef extends CdkFooterRowDef {\n}\n\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\n@Directive({\n selector: '[matRowDef]',\n providers: [{provide: CdkRowDef, useExisting: MatRowDef}],\n inputs: ['columns: matRowDefColumns', 'when: matRowDefWhen'],\n})\nexport class MatRowDef<T> extends CdkRowDef<T> {\n}\n\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\n@Component({\n moduleId: module.id,\n selector: 'mat-header-row, tr[mat-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-header-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matHeaderRow',\n providers: [{provide: CdkHeaderRow, useExisting: MatHeaderRow}],\n})\nexport class MatHeaderRow extends CdkHeaderRow {\n}\n\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\n@Component({\n moduleId: module.id,\n selector: 'mat-footer-row, tr[mat-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-footer-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matFooterRow',\n providers: [{provide: CdkFooterRow, useExisting: MatFooterRow}],\n})\nexport class MatFooterRow extends CdkFooterRow {\n}\n\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\n@Component({\n moduleId: module.id,\n selector: 'mat-row, tr[mat-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-row',\n 'role': 'row',\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRow',\n providers: [{provide: CdkRow, useExisting: MatRow}],\n})\nexport class MatRow extends CdkRow {\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, Input} from '@angular/core';\nimport {\n CdkCell,\n CdkCellDef,\n CdkColumnDef, CdkFooterCell, CdkFooterCellDef,\n CdkHeaderCell,\n CdkHeaderCellDef,\n} from '@angular/cdk/table';\n\n/**\n * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\n@Directive({\n selector: '[matCellDef]',\n providers: [{provide: CdkCellDef, useExisting: MatCellDef}]\n})\nexport class MatCellDef extends CdkCellDef {}\n\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\n@Directive({\n selector: '[matHeaderCellDef]',\n providers: [{provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef}]\n})\nexport class MatHeaderCellDef extends CdkHeaderCellDef {}\n\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\n@Directive({\n selector: '[matFooterCellDef]',\n providers: [{provide: CdkFooterCellDef, useExisting: MatFooterCellDef}]\n})\nexport class MatFooterCellDef extends CdkFooterCellDef {}\n\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\n@Directive({\n selector: '[matColumnDef]',\n providers: [\n {provide: CdkColumnDef, useExisting: MatColumnDef},\n {provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef}\n ],\n})\nexport class MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n @Input('matColumnDef') name: string;\n\n /** Whether this column should be sticky positioned at the start of the row */\n @Input() sticky: boolean;\n\n /** Whether this column should be sticky positioned on the end of the row */\n @Input() stickyEnd: boolean;\n}\n\n/** Header cell template container that adds the right classes and role. */\n@Directive({\n selector: 'mat-header-cell, th[mat-header-cell]',\n host: {\n 'class': 'mat-header-cell',\n 'role': 'columnheader',\n },\n})\nexport class MatHeaderCell extends CdkHeaderCell {\n constructor(columnDef: CdkColumnDef,\n elementRef: ElementRef<HTMLElement>) {\n super(columnDef, elementRef);\n elementRef.nativeElement.classList.add(`mat-column-${columnDef.cssClassFriendlyName}`);\n }\n}\n\n/** Footer cell template container that adds the right classes and role. */\n@Directive({\n selector: 'mat-footer-cell, td[mat-footer-cell]',\n host: {\n 'class': 'mat-footer-cell',\n 'role': 'gridcell',\n },\n})\nexport class MatFooterCell extends CdkFooterCell {\n constructor(columnDef: CdkColumnDef,\n elementRef: ElementRef) {\n super(columnDef, elementRef);\n elementRef.nativeElement.classList.add(`mat-column-${columnDef.cssClassFriendlyName}`);\n }\n}\n\n/** Cell template container that adds the right classes and role. */\n@Directive({\n selector: 'mat-cell, td[mat-cell]',\n host: {\n 'class': 'mat-cell',\n 'role': 'gridcell',\n },\n})\nexport class MatCell extends CdkCell {\n constructor(columnDef: CdkColumnDef,\n elementRef: ElementRef<HTMLElement>) {\n super(columnDef, elementRef);\n elementRef.nativeElement.classList.add(`mat-column-${columnDef.cssClassFriendlyName}`);\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 {CDK_TABLE_TEMPLATE, CdkTable} from '@angular/cdk/table';\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\n\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-table, table[mat-table]',\n exportAs: 'matTable',\n template: CDK_TABLE_TEMPLATE,\n styleUrls: ['table.css'],\n host: {\n 'class': 'mat-table',\n },\n providers: [{provide: CdkTable, useExisting: MatTable}],\n encapsulation: ViewEncapsulation.None,\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class MatTable<T> extends CdkTable<T> {\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n protected stickyCssClass = 'mat-table-sticky';\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 {PortalModule} from '@angular/cdk/portal';\nimport {CdkStepperModule} from '@angular/cdk/stepper';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {ErrorStateMatcher, MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatStepHeader} from './step-header';\nimport {MatStepLabel} from './step-label';\nimport {MatHorizontalStepper, MatStep, MatStepper, MatVerticalStepper} from './stepper';\nimport {MatStepperNext, MatStepperPrevious} from './stepper-button';\nimport {MatStepperIcon} from './stepper-icon';\nimport {MAT_STEPPER_INTL_PROVIDER} from './stepper-intl';\n\n\n@NgModule({\n imports: [\n MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule,\n ],\n exports: [\n MatCommonModule,\n MatHorizontalStepper,\n MatVerticalStepper,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n ],\n declarations: [\n MatHorizontalStepper,\n MatVerticalStepper,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n ],\n providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher],\n})\nexport class MatStepperModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {CdkStepperNext, CdkStepperPrevious} from '@angular/cdk/stepper';\nimport {Directive} from '@angular/core';\n\n/** Button that moves to the next step in a stepper workflow. */\n@Directive({\n selector: 'button[matStepperNext]',\n host: {\n '[type]': 'type',\n },\n inputs: ['type']\n})\nexport class MatStepperNext extends CdkStepperNext {\n}\n\n/** Button that moves to the previous step in a stepper workflow. */\n@Directive({\n selector: 'button[matStepperPrevious]',\n host: {\n '[type]': 'type',\n },\n inputs: ['type']\n})\nexport class MatStepperPrevious extends CdkStepperPrevious {\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 {\n CdkStep,\n CdkStepper,\n StepContentPositionState,\n STEPPER_GLOBAL_OPTIONS,\n StepperOptions\n} from '@angular/cdk/stepper';\nimport {AnimationEvent} from '@angular/animations';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n Optional,\n Output,\n QueryList,\n SkipSelf,\n TemplateRef,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormControl, FormGroupDirective, NgForm} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil, distinctUntilChanged} from 'rxjs/operators';\n\nimport {MatStepHeader} from './step-header';\nimport {MatStepLabel} from './step-label';\nimport {matStepperAnimations} from './stepper-animations';\nimport {MatStepperIcon, MatStepperIconContext} from './stepper-icon';\n\n@Component({\n moduleId: module.id,\n selector: 'mat-step',\n templateUrl: 'step.html',\n providers: [{provide: ErrorStateMatcher, useExisting: MatStep}],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matStep',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatStep extends CdkStep implements ErrorStateMatcher {\n /** Content for step label given by `<ng-template matStepLabel>`. */\n @ContentChild(MatStepLabel, {static: false}) stepLabel: MatStepLabel;\n\n /** @breaking-change 8.0.0 remove the `?` after `stepperOptions` */\n constructor(@Inject(forwardRef(() => MatStepper)) stepper: MatStepper,\n @SkipSelf() private _errorStateMatcher: ErrorStateMatcher,\n @Optional() @Inject(STEPPER_GLOBAL_OPTIONS) stepperOptions?: StepperOptions) {\n super(stepper, stepperOptions);\n }\n\n /** Custom error state matcher that additionally checks for validity of interacted form. */\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const originalErrorState = this._errorStateMatcher.isErrorState(control, form);\n\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n const customErrorState = !!(control && control.invalid && this.interacted);\n\n return originalErrorState || customErrorState;\n }\n}\n\n\n@Directive({selector: '[matStepper]', providers: [{provide: CdkStepper, useExisting: MatStepper}]})\nexport class MatStepper extends CdkStepper implements AfterContentInit {\n /** The list of step headers of the steps in the stepper. */\n @ViewChildren(MatStepHeader) _stepHeader: QueryList<MatStepHeader>;\n\n /** Steps that the stepper holds. */\n @ContentChildren(MatStep) _steps: QueryList<MatStep>;\n\n /** Custom icon overrides passed in by the consumer. */\n @ContentChildren(MatStepperIcon) _icons: QueryList<MatStepperIcon>;\n\n /** Event emitted when the current step is done transitioning in. */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n /** Whether ripples should be disabled for the step headers. */\n @Input() disableRipple: boolean;\n\n /** Consumer-specified template-refs to be used to override the header icons. */\n _iconOverrides: {[key: string]: TemplateRef<MatStepperIconContext>} = {};\n\n /** Stream of animation `done` events when the body expands/collapses. */\n _animationDone = new Subject<AnimationEvent>();\n\n ngAfterContentInit() {\n this._icons.forEach(({name, templateRef}) => this._iconOverrides[name] = templateRef);\n\n // Mark the component for change detection whenever the content children query changes\n this._steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => this._stateChanged());\n\n this._animationDone.pipe(\n // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due\n // to a bug in animations where the `.done` callback gets invoked twice on some browsers.\n // See https://github.com/angular/angular/issues/24084\n distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState),\n takeUntil(this._destroyed)\n ).subscribe(event => {\n if ((event.toState as StepContentPositionState) === 'current') {\n this.animationDone.emit();\n }\n });\n }\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-horizontal-stepper',\n exportAs: 'matHorizontalStepper',\n templateUrl: 'stepper-horizontal.html',\n styleUrls: ['stepper.css'],\n inputs: ['selectedIndex'],\n host: {\n 'class': 'mat-stepper-horizontal',\n '[class.mat-stepper-label-position-end]': 'labelPosition == \"end\"',\n '[class.mat-stepper-label-position-bottom]': 'labelPosition == \"bottom\"',\n 'aria-orientation': 'horizontal',\n 'role': 'tablist',\n },\n animations: [matStepperAnimations.horizontalStepTransition],\n providers: [\n {provide: MatStepper, useExisting: MatHorizontalStepper},\n {provide: CdkStepper, useExisting: MatHorizontalStepper}\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatHorizontalStepper extends MatStepper {\n /** Whether the label should display in bottom or end position. */\n @Input()\n labelPosition: 'bottom' | 'end' = 'end';\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-vertical-stepper',\n exportAs: 'matVerticalStepper',\n templateUrl: 'stepper-vertical.html',\n styleUrls: ['stepper.css'],\n inputs: ['selectedIndex'],\n host: {\n 'class': 'mat-stepper-vertical',\n 'aria-orientation': 'vertical',\n 'role': 'tablist',\n },\n animations: [matStepperAnimations.verticalStepTransition],\n providers: [\n {provide: MatStepper, useExisting: MatVerticalStepper},\n {provide: CdkStepper, useExisting: MatVerticalStepper}\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatVerticalStepper extends MatStepper {\n constructor(\n @Optional() dir: Directionality,\n changeDetectorRef: ChangeDetectorRef,\n // @breaking-change 8.0.0 `elementRef` and `_document` parameters to become required.\n elementRef?: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) _document?: any) {\n super(dir, changeDetectorRef, elementRef, _document);\n this._orientation = 'vertical';\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 {Directive, Input, TemplateRef} from '@angular/core';\nimport {StepState} from '@angular/cdk/stepper';\n\n/** Template context available to an attached `matStepperIcon`. */\nexport interface MatStepperIconContext {\n /** Index of the step. */\n index: number;\n /** Whether the step is currently active. */\n active: boolean;\n /** Whether the step is optional. */\n optional: boolean;\n}\n\n/**\n * Template to be used to override the icons inside the step header.\n */\n@Directive({\n selector: 'ng-template[matStepperIcon]',\n})\nexport class MatStepperIcon {\n /** Name of the icon to be overridden. */\n @Input('matStepperIcon') name: StepState;\n\n constructor(public templateRef: TemplateRef<MatStepperIconContext>) {}\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 AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material steppers.\n * @docs-private\n */\nexport const matStepperAnimations: {\n readonly horizontalStepTransition: AnimationTriggerMetadata;\n readonly verticalStepTransition: AnimationTriggerMetadata;\n} = {\n /** Animation that transitions the step along the X axis in a horizontal stepper. */\n horizontalStepTransition: trigger('stepTransition', [\n state('previous', style({transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden'})),\n state('current', style({transform: 'none', visibility: 'visible'})),\n state('next', style({transform: 'translate3d(100%, 0, 0)', visibility: 'hidden'})),\n transition('* => *', animate('500ms cubic-bezier(0.35, 0, 0.25, 1)'))\n ]),\n\n /** Animation that transitions the step along the Y axis in a vertical stepper. */\n verticalStepTransition: trigger('stepTransition', [\n state('previous', style({height: '0px', visibility: 'hidden'})),\n state('next', style({height: '0px', visibility: 'hidden'})),\n state('current', style({height: '*', visibility: 'visible'})),\n transition('* <=> current', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)'))\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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewEncapsulation,\n TemplateRef,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {MatStepLabel} from './step-label';\nimport {MatStepperIntl} from './stepper-intl';\nimport {MatStepperIconContext} from './stepper-icon';\nimport {CdkStepHeader, StepState} from '@angular/cdk/stepper';\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-step-header',\n templateUrl: 'step-header.html',\n styleUrls: ['step-header.css'],\n host: {\n 'class': 'mat-step-header',\n 'role': 'tab',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatStepHeader extends CdkStepHeader implements OnDestroy {\n private _intlSubscription: Subscription;\n\n /** State of the given step. */\n @Input() state: StepState;\n\n /** Label of the given step. */\n @Input() label: MatStepLabel | string;\n\n /** Error message to display when there's an error. */\n @Input() errorMessage: string;\n\n /** Overrides for the header icons, passed in via the stepper. */\n @Input() iconOverrides: {[key: string]: TemplateRef<MatStepperIconContext>};\n\n /** Index of the given step. */\n @Input() index: number;\n\n /** Whether the given step is selected. */\n @Input() selected: boolean;\n\n /** Whether the given step label is active. */\n @Input() active: boolean;\n\n /** Whether the given step is optional. */\n @Input() optional: boolean;\n\n /** Whether the ripple should be disabled. */\n @Input() disableRipple: boolean;\n\n constructor(\n public _intl: MatStepperIntl,\n private _focusMonitor: FocusMonitor,\n _elementRef: ElementRef<HTMLElement>,\n changeDetectorRef: ChangeDetectorRef) {\n super(_elementRef);\n _focusMonitor.monitor(_elementRef, true);\n this._intlSubscription = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n\n ngOnDestroy() {\n this._intlSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Focuses the step header. */\n focus() {\n this._focusMonitor.focusVia(this._elementRef, 'program');\n }\n\n /** Returns string label of given step if it is a text label. */\n _stringLabel(): string | null {\n return this.label instanceof MatStepLabel ? null : this.label;\n }\n\n /** Returns MatStepLabel if the label of given step is a template label. */\n _templateLabel(): MatStepLabel | null {\n return this.label instanceof MatStepLabel ? this.label : null;\n }\n\n /** Returns the host HTML element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n\n /** Template context variables that are exposed to the `matStepperIcon` instances. */\n _getIconContext(): MatStepperIconContext {\n return {\n index: this.index,\n active: this.active,\n optional: this.optional\n };\n }\n\n _getDefaultTextForState(state: StepState): string {\n if (state == 'number') {\n return `${this.index + 1}`;\n }\n if (state == 'edit') {\n return 'create';\n }\n if (state == 'error') {\n return 'warning';\n }\n return state;\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, Optional, SkipSelf} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n\n/** Stepper data that is required for internationalization. */\n@Injectable({providedIn: 'root'})\nexport class MatStepperIntl {\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 /** Label that is rendered below optional steps. */\n optionalLabel: string = 'Optional';\n}\n\n\n/** @docs-private */\nexport function MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl: MatStepperIntl) {\n return parentIntl || new MatStepperIntl();\n}\n\n/** @docs-private */\nexport const MAT_STEPPER_INTL_PROVIDER = {\n provide: MatStepperIntl,\n deps: [[new Optional(), new SkipSelf(), MatStepperIntl]],\n useFactory: MAT_STEPPER_INTL_PROVIDER_FACTORY\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} from '@angular/core';\nimport {CdkStepLabel} from '@angular/cdk/stepper';\n\n@Directive({\n selector: '[matStepLabel]',\n})\nexport class MatStepLabel extends CdkStepLabel {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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';\n\n\n@NgModule({\n imports: [CommonModule],\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\nimport {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} from '@angular/core';\nimport {CanDisable, CanDisableCtor, 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 */\nclass MatSortHeaderBase {}\nconst _MatSortHeaderMixinBase: CanDisableCtor & typeof MatSortHeaderBase =\n mixinDisabled(MatSortHeaderBase);\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 moduleId: module.id,\n selector: '[mat-sort-header]',\n exportAs: 'matSortHeader',\n templateUrl: 'sort-header.html',\n styleUrls: ['sort-header.css'],\n host: {\n '(click)': '_handleClick()',\n '(mouseenter)': '_setIndicatorHintVisible(true)',\n '(longpress)': '_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 _MatSortHeaderMixinBase\n implements CanDisable, MatSortable, OnDestroy, OnInit {\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(public _intl: MatSortHeaderIntl,\n changeDetectorRef: ChangeDetectorRef,\n @Optional() public _sort: MatSort,\n @Inject('MAT_SORT_HEADER_COLUMN_DEF') @Optional()\n public _columnDef: MatSortHeaderColumnDef) {\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) {\n throw getSortHeaderNotContainedWithinSortError();\n }\n\n this._rerenderSubscription = merge(_sort.sortChange, _sort._stateChanges, _intl.changes)\n .subscribe(() => {\n if (this._isSorted()) {\n this._updateArrowDirection();\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 changeDetectorRef.markForCheck();\n });\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 ngOnDestroy() {\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 _handleClick() {\n if (this._isDisabled()) { return; }\n\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 // If the arrow is now sorted, animate the arrow into place. Otherwise, animate it away into\n // the direction it is facing.\n const viewState: ArrowViewStateTransition = this._isSorted() ?\n {fromState: this._arrowDirection, toState: 'active'} :\n {fromState: 'active', toState: this._arrowDirection};\n this._setAnimationTransitionState(viewState);\n\n this._showIndicatorHint = false;\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()) { return null; }\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 /** ARIA label for the sorting button. */\n sortButtonLabel = (id: string) => {\n return `Change sorting for ${id}`;\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 */\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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n Directive,\n EventEmitter,\n Input,\n isDevMode,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableCtor,\n HasInitialized,\n HasInitializedCtor,\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// Boilerplate for applying mixins to MatSort.\n/** @docs-private */\nclass MatSortBase {}\nconst _MatSortMixinBase: HasInitializedCtor & CanDisableCtor & typeof MatSortBase =\n mixinInitialized(mixinDisabled(MatSortBase));\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n selector: '[matSort]',\n exportAs: 'matSort',\n inputs: ['disabled: matSortDisabled']\n})\nexport class MatSort extends _MatSortMixinBase\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 (isDevMode() && direction && direction !== 'asc' && direction !== 'desc') {\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 /**\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 (!sortable.id) {\n throw getSortHeaderMissingIdError();\n }\n\n if (this.sortables.has(sortable.id)) {\n throw getSortDuplicateSortableIdError(sortable.id);\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 != null ? sortable.disableClear : this.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\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 */\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 {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, PortalInjector, TemplatePortal} from '@angular/cdk/portal';\nimport {\n ComponentRef,\n EmbeddedViewRef,\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n Optional,\n SkipSelf,\n TemplateRef,\n OnDestroy,\n} from '@angular/core';\nimport {take, takeUntil} from 'rxjs/operators';\nimport {SimpleSnackBar} from './simple-snack-bar';\nimport {MAT_SNACK_BAR_DATA, MatSnackBarConfig} from './snack-bar-config';\nimport {MatSnackBarContainer} from './snack-bar-container';\nimport {MatSnackBarModule} from './snack-bar-module';\nimport {MatSnackBarRef} from './snack-bar-ref';\n\n\n/** Injection token that can be used to specify default snack bar. */\nexport const MAT_SNACK_BAR_DEFAULT_OPTIONS =\n new InjectionToken<MatSnackBarConfig>('mat-snack-bar-default-options', {\n providedIn: 'root',\n factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n });\n\n/** @docs-private */\nexport function MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY(): MatSnackBarConfig {\n return new MatSnackBarConfig();\n}\n\n/**\n * Service to dispatch Material Design snack bar messages.\n */\n@Injectable({providedIn: MatSnackBarModule})\nexport class MatSnackBar implements OnDestroy {\n /**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\n private _snackBarRefAtThisLevel: MatSnackBarRef<any> | null = null;\n\n /** Reference to the currently opened snackbar at *any* level. */\n get _openedSnackBarRef(): MatSnackBarRef<any> | null {\n const parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n }\n\n set _openedSnackBarRef(value: MatSnackBarRef<any> | null) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n } else {\n this._snackBarRefAtThisLevel = value;\n }\n }\n\n constructor(\n private _overlay: Overlay,\n private _live: LiveAnnouncer,\n private _injector: Injector,\n private _breakpointObserver: BreakpointObserver,\n @Optional() @SkipSelf() private _parentSnackBar: MatSnackBar,\n @Inject(MAT_SNACK_BAR_DEFAULT_OPTIONS) private _defaultConfig: MatSnackBarConfig) {}\n\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @param component Component to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromComponent<T>(component: ComponentType<T>, config?: MatSnackBarConfig):\n MatSnackBarRef<T> {\n return this._attach(component, config) as MatSnackBarRef<T>;\n }\n\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param template Template to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromTemplate(template: TemplateRef<any>, config?: MatSnackBarConfig):\n MatSnackBarRef<EmbeddedViewRef<any>> {\n return this._attach(template, config);\n }\n\n /**\n * Opens a snackbar with a message and an optional action.\n * @param message The message to show in the snackbar.\n * @param action The label for the snackbar action.\n * @param config Additional configuration options for the snackbar.\n */\n open(message: string, action: string = '', config?: MatSnackBarConfig):\n MatSnackBarRef<SimpleSnackBar> {\n const _config = {...this._defaultConfig, ...config};\n\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = {message, action};\n\n if (!_config.announcementMessage) {\n _config.announcementMessage = message;\n }\n\n return this.openFromComponent(SimpleSnackBar, _config);\n }\n\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss(): void {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n\n ngOnDestroy() {\n // Only dismiss the snack bar at the current level on destroy.\n if (this._snackBarRefAtThisLevel) {\n this._snackBarRefAtThisLevel.dismiss();\n }\n }\n\n /**\n * Attaches the snack bar container component to the overlay.\n */\n private _attachSnackBarContainer(overlayRef: OverlayRef,\n config: MatSnackBarConfig): MatSnackBarContainer {\n\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = new PortalInjector(userInjector || this._injector, new WeakMap([\n [MatSnackBarConfig, config]\n ]));\n\n const containerPortal =\n new ComponentPortal(MatSnackBarContainer, config.viewContainerRef, injector);\n const containerRef: ComponentRef<MatSnackBarContainer> = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n }\n\n /**\n * Places a new component or a template as the content of the snack bar container.\n */\n private _attach<T>(content: ComponentType<T> | TemplateRef<T>, userConfig?: MatSnackBarConfig):\n MatSnackBarRef<T | EmbeddedViewRef<any>> {\n\n const config = {...new MatSnackBarConfig(), ...this._defaultConfig, ...userConfig};\n const overlayRef = this._createOverlay(config);\n const container = this._attachSnackBarContainer(overlayRef, config);\n const snackBarRef = new MatSnackBarRef<T | EmbeddedViewRef<any>>(container, overlayRef);\n\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null!, {\n $implicit: config.data,\n snackBarRef\n } as any);\n\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal<T>(portal);\n\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n }\n\n // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n // appropriate. This class is applied to the overlay element because the overlay must expand to\n // fill the width of the screen for full width snackbars.\n this._breakpointObserver.observe(Breakpoints.Handset).pipe(\n takeUntil(overlayRef.detachments().pipe(take(1)))\n ).subscribe(state => {\n if (state.matches) {\n overlayRef.overlayElement.classList.add('mat-snack-bar-handset');\n } else {\n overlayRef.overlayElement.classList.remove('mat-snack-bar-handset');\n }\n });\n\n this._animateSnackBar(snackBarRef, config);\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n }\n\n /** Animates the old snack bar out and the new one in. */\n private _animateSnackBar(snackBarRef: MatSnackBarRef<any>, config: MatSnackBarConfig) {\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(() => {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (this._openedSnackBarRef == snackBarRef) {\n this._openedSnackBarRef = null;\n }\n\n if (config.announcementMessage) {\n this._live.clear();\n }\n });\n\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(() => {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n } else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (config.duration && config.duration > 0) {\n snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration!));\n }\n\n if (config.announcementMessage) {\n this._live.announce(config.announcementMessage, config.politeness);\n }\n }\n\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified snack bar config.\n */\n private _createOverlay(config: MatSnackBarConfig): OverlayRef {\n const overlayConfig = new OverlayConfig();\n overlayConfig.direction = config.direction;\n\n let positionStrategy = this._overlay.position().global();\n // Set horizontal position.\n const isRtl = config.direction === 'rtl';\n const isLeft = (\n config.horizontalPosition === 'left' ||\n (config.horizontalPosition === 'start' && !isRtl) ||\n (config.horizontalPosition === 'end' && isRtl));\n const isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n } else if (isRight) {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n\n overlayConfig.positionStrategy = positionStrategy;\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Creates an injector to be used inside of a snack bar component.\n * @param config Config that was used to create the snack bar.\n * @param snackBarRef Reference to the snack bar.\n */\n private _createInjector<T>(\n config: MatSnackBarConfig,\n snackBarRef: MatSnackBarRef<T>): PortalInjector {\n\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n return new PortalInjector(userInjector || this._injector, new WeakMap<any, any>([\n [MatSnackBarRef, snackBarRef],\n [MAT_SNACK_BAR_DATA, config.data]\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {SimpleSnackBar} from './simple-snack-bar';\nimport {MatSnackBarContainer} from './snack-bar-container';\n\n\n@NgModule({\n imports: [\n OverlayModule,\n PortalModule,\n CommonModule,\n MatButtonModule,\n MatCommonModule,\n ],\n exports: [MatSnackBarContainer, MatCommonModule],\n declarations: [MatSnackBarContainer, SimpleSnackBar],\n entryComponents: [MatSnackBarContainer, SimpleSnackBar],\n})\nexport class MatSnackBarModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {AnimationEvent} from '@angular/animations';\nimport {\n BasePortalOutlet,\n CdkPortalOutlet,\n ComponentPortal,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n NgZone,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {matSnackBarAnimations} from './snack-bar-animations';\nimport {MatSnackBarConfig} from './snack-bar-config';\n\n\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'snack-bar-container',\n templateUrl: 'snack-bar-container.html',\n styleUrls: ['snack-bar-container.css'],\n // In Ivy embedded views will be change detected from their declaration place, rather than\n // where they were stamped out. This means that we can't have the snack bar container be OnPush,\n // because it might cause snack bars that were opened from a template not to be out of date.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n animations: [matSnackBarAnimations.snackBarState],\n host: {\n '[attr.role]': '_role',\n 'class': 'mat-snack-bar-container',\n '[@state]': '_animationState',\n '(@state.done)': 'onAnimationEnd($event)'\n },\n})\nexport class MatSnackBarContainer extends BasePortalOutlet implements OnDestroy {\n /** Whether the component has been destroyed. */\n private _destroyed = false;\n\n /** The portal outlet inside of this container into which the snack bar content will be loaded. */\n @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n /** Subject for notifying that the snack bar has exited from view. */\n readonly _onExit: Subject<any> = new Subject();\n\n /** Subject for notifying that the snack bar has finished entering the view. */\n readonly _onEnter: Subject<any> = new Subject();\n\n /** The state of the snack bar animations. */\n _animationState = 'void';\n\n /** ARIA role for the snack bar container. */\n _role: 'alert' | 'status' | null;\n\n constructor(\n private _ngZone: NgZone,\n private _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n /** The snack bar configuration. */\n public snackBarConfig: MatSnackBarConfig) {\n\n super();\n\n // Based on the ARIA spec, `alert` and `status` roles have an\n // implicit `assertive` and `polite` politeness respectively.\n if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n this._role = 'alert';\n } else if (snackBarConfig.politeness === 'off') {\n this._role = null;\n } else {\n this._role = 'status';\n }\n }\n\n /** Attach a component portal as content to this snack bar container. */\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachComponentPortal(portal);\n }\n\n /** Attach a template portal as content to this snack bar container. */\n attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n\n /** Handle end of animations, updating the state of the snackbar. */\n onAnimationEnd(event: AnimationEvent) {\n const {fromState, toState} = event;\n\n if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n this._completeExit();\n }\n\n if (toState === 'visible') {\n // Note: we shouldn't use `this` inside the zone callback,\n // because it can cause a memory leak.\n const onEnter = this._onEnter;\n\n this._ngZone.run(() => {\n onEnter.next();\n onEnter.complete();\n });\n }\n }\n\n /** Begin animation of snack bar entrance into view. */\n enter(): void {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** Begin animation of the snack bar exiting from view. */\n exit(): Observable<void> {\n // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n // `MatSnackBar.open`).\n this._animationState = 'hidden';\n return this._onExit;\n }\n\n /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n ngOnDestroy() {\n this._destroyed = true;\n this._completeExit();\n }\n\n /**\n * Waits for the zone to settle before removing the element. Helps prevent\n * errors where we end up removing an element which is in the middle of an animation.\n */\n private _completeExit() {\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {\n this._onExit.next();\n this._onExit.complete();\n });\n }\n\n /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n private _applySnackBarClasses() {\n const element: HTMLElement = this._elementRef.nativeElement;\n const panelClasses = this.snackBarConfig.panelClass;\n\n if (panelClasses) {\n if (Array.isArray(panelClasses)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClasses.forEach(cssClass => element.classList.add(cssClass));\n } else {\n element.classList.add(panelClasses);\n }\n }\n\n if (this.snackBarConfig.horizontalPosition === 'center') {\n element.classList.add('mat-snack-bar-center');\n }\n\n if (this.snackBarConfig.verticalPosition === 'top') {\n element.classList.add('mat-snack-bar-top');\n }\n }\n\n /** Asserts that no content is already attached to the container. */\n private _assertNotAttached() {\n if (this._portalOutlet.hasAttached()) {\n throw Error('Attempting to attach snack bar content after content is already attached');\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 */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\nexport const matSnackBarAnimations: {\n readonly snackBarState: AnimationTriggerMetadata;\n} = {\n /** Animation that shows and hides a snack bar. */\n snackBarState: trigger('state', [\n state('void, hidden', style({\n transform: 'scale(0.8)',\n opacity: 0,\n })),\n state('visible', style({\n transform: 'scale(1)',\n opacity: 1,\n })),\n transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n opacity: 0\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 {Component, ViewEncapsulation, Inject, ChangeDetectionStrategy} from '@angular/core';\nimport {MatSnackBarRef} from './snack-bar-ref';\nimport {MAT_SNACK_BAR_DATA} from './snack-bar-config';\n\n\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\n@Component({\n moduleId: module.id,\n selector: 'simple-snack-bar',\n templateUrl: 'simple-snack-bar.html',\n styleUrls: ['simple-snack-bar.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-simple-snackbar',\n }\n})\nexport class SimpleSnackBar {\n /** Data that was injected into the snack bar. */\n data: {message: string, action: string};\n\n constructor(\n public snackBarRef: MatSnackBarRef<SimpleSnackBar>,\n @Inject(MAT_SNACK_BAR_DATA) data: any) {\n this.data = data;\n }\n\n /** Performs the action on the snack bar. */\n action(): void {\n this.snackBarRef.dismissWithAction();\n }\n\n /** If the action button should be shown. */\n get hasAction(): boolean {\n return !!this.data.action;\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 {ViewContainerRef, InjectionToken} from '@angular/core';\nimport {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {Direction} from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const MAT_SNACK_BAR_DATA = new InjectionToken<any>('MatSnackBarData');\n\n/** Possible values for horizontalPosition on MatSnackBarConfig. */\nexport type MatSnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\n\n/** Possible values for verticalPosition on MatSnackBarConfig. */\nexport type MatSnackBarVerticalPosition = 'top' | 'bottom';\n\n/**\n * Configuration used when opening a snack-bar.\n */\nexport class MatSnackBarConfig<D = any> {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n politeness?: AriaLivePoliteness = 'assertive';\n\n /**\n * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n * component or template, the announcement message will default to the specified message.\n */\n announcementMessage?: string = '';\n\n /** The view container to place the overlay for the snack bar into. */\n viewContainerRef?: ViewContainerRef;\n\n /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n duration?: number = 0;\n\n /** Extra CSS classes to be added to the snack bar container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the snack bar. */\n direction?: Direction;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** The horizontal position to place the snack bar. */\n horizontalPosition?: MatSnackBarHorizontalPosition = 'center';\n\n /** The vertical position to place the snack bar. */\n verticalPosition?: MatSnackBarVerticalPosition = 'bottom';\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 {OverlayRef} from '@angular/cdk/overlay';\nimport {Observable, Subject} from 'rxjs';\nimport {MatSnackBarContainer} from './snack-bar-container';\n\n\n/** Event that is emitted when a snack bar is dismissed. */\nexport interface MatSnackBarDismiss {\n /** Whether the snack bar was dismissed using the action button. */\n dismissedByAction: boolean;\n}\n\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nexport class MatSnackBarRef<T> {\n /** The instance of the component making up the content of the snack bar. */\n instance: T;\n\n /**\n * The instance of the component making up the content of the snack bar.\n * @docs-private\n */\n containerInstance: MatSnackBarContainer;\n\n /** Subject for notifying the user that the snack bar has been dismissed. */\n private readonly _afterDismissed = new Subject<MatSnackBarDismiss>();\n\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Subject for notifying the user that the snack bar action was called. */\n private readonly _onAction = new Subject<void>();\n\n /**\n * Timeout ID for the duration setTimeout call. Used to clear the timeout if the snackbar is\n * dismissed before the duration passes.\n */\n private _durationTimeoutId: number;\n\n /** Whether the snack bar was dismissed using the action button. */\n private _dismissedByAction = false;\n\n constructor(containerInstance: MatSnackBarContainer,\n private _overlayRef: OverlayRef) {\n this.containerInstance = containerInstance;\n // Dismiss snackbar on action.\n this.onAction().subscribe(() => this.dismiss());\n containerInstance._onExit.subscribe(() => this._finishDismiss());\n }\n\n /** Dismisses the snack bar. */\n dismiss(): void {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n }\n\n /** Marks the snackbar action clicked. */\n dismissWithAction(): void {\n if (!this._onAction.closed) {\n this._dismissedByAction = true;\n this._onAction.next();\n this._onAction.complete();\n }\n }\n\n\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * @breaking-change 8.0.0\n */\n closeWithAction(): void {\n this.dismissWithAction();\n }\n\n /** Dismisses the snack bar after some duration */\n _dismissAfter(duration: number): void {\n this._durationTimeoutId = setTimeout(() => this.dismiss(), duration);\n }\n\n /** Marks the snackbar as opened */\n _open(): void {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n }\n\n /** Cleans up the DOM after closing. */\n private _finishDismiss(): void {\n this._overlayRef.dispose();\n\n if (!this._onAction.closed) {\n this._onAction.complete();\n }\n\n this._afterDismissed.next({dismissedByAction: this._dismissedByAction});\n this._afterDismissed.complete();\n this._dismissedByAction = false;\n }\n\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed(): Observable<MatSnackBarDismiss> {\n return this._afterDismissed.asObservable();\n }\n\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened(): Observable<void> {\n return this.containerInstance._onEnter;\n }\n\n /** Gets an observable that is notified when the snack bar action is called. */\n onAction(): Observable<void> {\n return this._onAction.asObservable();\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {GestureConfig, MatCommonModule} from '@angular/material/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {MatSlider} from './slider';\n\n\n@NgModule({\n imports: [CommonModule, MatCommonModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider],\n providers: [{provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig}]\n})\nexport class MatSliderModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {\n DOWN_ARROW,\n END,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor,\n CanColorCtor,\n CanDisable,\n CanDisableCtor,\n HammerInput,\n HasTabIndex,\n HasTabIndexCtor,\n mixinColor,\n mixinDisabled,\n mixinTabIndex,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {Subscription} from 'rxjs';\n\n/**\n * Visually, a 30px separation between tick marks looks best. This is very subjective but it is\n * the default separation we chose.\n */\nconst MIN_AUTO_TICK_SEPARATION = 30;\n\n/** The thumb gap size for a disabled slider. */\nconst DISABLED_THUMB_GAP = 7;\n\n/** The thumb gap size for a non-active slider at its minimum value. */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n\n/** The thumb gap size for an active slider at its minimum value. */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n\n/**\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n * @docs-private\n */\nexport const MAT_SLIDER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlider),\n multi: true\n};\n\n/** A simple change event emitted by the MatSlider component. */\nexport class MatSliderChange {\n /** The MatSlider that changed. */\n source: MatSlider;\n\n /** The new value of the source slider. */\n value: number | null;\n}\n\n\n// Boilerplate for applying mixins to MatSlider.\n/** @docs-private */\nclass MatSliderBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatSliderMixinBase:\n HasTabIndexCtor &\n CanColorCtor &\n CanDisableCtor &\n typeof MatSliderBase =\n mixinTabIndex(mixinColor(mixinDisabled(MatSliderBase), 'accent'));\n\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `<input type=\"range\">` element.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-slider',\n exportAs: 'matSlider',\n providers: [MAT_SLIDER_VALUE_ACCESSOR],\n host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(mousedown)': '_onMousedown($event)',\n '(keydown)': '_onKeydown($event)',\n '(keyup)': '_onKeyup()',\n '(mouseenter)': '_onMouseenter()',\n '(slide)': '_onSlide($event)',\n '(slideend)': '_onSlideEnd()',\n '(slidestart)': '_onSlideStart($event)',\n 'class': 'mat-slider',\n 'role': 'slider',\n '[tabIndex]': 'tabIndex',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuenow]': 'value',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-slider-disabled]': 'disabled',\n '[class.mat-slider-has-ticks]': 'tickInterval',\n '[class.mat-slider-horizontal]': '!vertical',\n '[class.mat-slider-axis-inverted]': '_invertAxis',\n '[class.mat-slider-sliding]': '_isSliding',\n '[class.mat-slider-thumb-label-showing]': 'thumbLabel',\n '[class.mat-slider-vertical]': 'vertical',\n '[class.mat-slider-min-value]': '_isMinValue',\n '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue && _thumbGap && _invertAxis',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n templateUrl: 'slider.html',\n styleUrls: ['slider.css'],\n inputs: ['disabled', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSlider extends _MatSliderMixinBase\n implements ControlValueAccessor, OnDestroy, CanDisable, CanColor, OnInit, HasTabIndex {\n /** Whether the slider is inverted. */\n @Input()\n get invert(): boolean { return this._invert; }\n set invert(value: boolean) {\n this._invert = coerceBooleanProperty(value);\n }\n private _invert = false;\n\n /** The maximum value that the slider can have. */\n @Input()\n get max(): number { return this._max; }\n set max(v: number) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n private _max: number = 100;\n\n /** The minimum value that the slider can have. */\n @Input()\n get min(): number { return this._min; }\n set min(v: number) {\n this._min = coerceNumberProperty(v, this._min);\n\n // If the value wasn't explicitly set by the user, set it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n private _min: number = 0;\n\n /** The values at which the thumb will snap. */\n @Input()\n get step(): number { return this._step; }\n set step(v: number) {\n this._step = coerceNumberProperty(v, this._step);\n\n if (this._step % 1 !== 0) {\n this._roundToDecimal = this._step.toString().split('.').pop()!.length;\n }\n\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\n private _step: number = 1;\n\n /** Whether or not to show the thumb label. */\n @Input()\n get thumbLabel(): boolean { return this._thumbLabel; }\n set thumbLabel(value: boolean) { this._thumbLabel = coerceBooleanProperty(value); }\n private _thumbLabel: boolean = false;\n\n /**\n * How often to show ticks. Relative to the step so that a tick always appears on a step.\n * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\n */\n @Input()\n get tickInterval() { return this._tickInterval; }\n set tickInterval(value: 'auto' | number) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n } else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, this._tickInterval as number);\n } else {\n this._tickInterval = 0;\n }\n }\n private _tickInterval: 'auto' | number = 0;\n\n /** Value of the slider. */\n @Input()\n get value(): number | null {\n // If the value needs to be read and it is still uninitialized, initialize it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n return this._value;\n }\n set value(v: number | null) {\n if (v !== this._value) {\n let value = coerceNumberProperty(v);\n\n // While incrementing by a decimal we can end up with values like 33.300000000000004.\n // Truncate it to ensure that it matches the label and to make it easier to work with.\n if (this._roundToDecimal) {\n value = parseFloat(value.toFixed(this._roundToDecimal));\n }\n\n this._value = value;\n this._percent = this._calculatePercentage(this._value);\n\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\n private _value: number | null = null;\n\n /**\n * Function that will be used to format the value before it is displayed\n * in the thumb label. Can be used to format very large number in order\n * for them to fit into the slider thumb.\n */\n @Input() displayWith: (value: number | null) => string | number;\n\n /** Whether the slider is vertical. */\n @Input()\n get vertical(): boolean { return this._vertical; }\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n private _vertical = false;\n\n /** Event emitted when the slider value has changed. */\n @Output() readonly change: EventEmitter<MatSliderChange> = new EventEmitter<MatSliderChange>();\n\n /** Event emitted when the slider thumb moves. */\n @Output() readonly input: EventEmitter<MatSliderChange> = new EventEmitter<MatSliderChange>();\n\n /**\n * Emits when the raw value of the slider changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<number | null> = new EventEmitter<number | null>();\n\n /** The value to be used for display purposes. */\n get displayValue(): string | number {\n if (this.displayWith) {\n return this.displayWith(this.value);\n }\n\n // Note that this could be improved further by rounding something like 0.999 to 1 or\n // 0.899 to 0.9, however it is very performance sensitive, because it gets called on\n // every change detection cycle.\n if (this._roundToDecimal && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundToDecimal);\n }\n\n return this.value || 0;\n }\n\n /** set focus to the host element */\n focus() {\n this._focusHostElement();\n }\n\n /** blur the host element */\n blur() {\n this._blurHostElement();\n }\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n onTouched: () => any = () => {};\n\n /** The percentage of the slider that coincides with the value. */\n get percent(): number { return this._clamp(this._percent); }\n private _percent: number = 0;\n\n /**\n * Whether or not the thumb is sliding.\n * Used to determine if there should be a transition for the thumb and fill track.\n */\n _isSliding: boolean = false;\n\n /**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n */\n _isActive: boolean = false;\n\n /**\n * Whether the axis of the slider is inverted.\n * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\n */\n get _invertAxis() {\n // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to\n // top. However from a y-axis standpoint this is inverted.\n return this.vertical ? !this.invert : this.invert;\n }\n\n\n /** Whether the slider is at its minimum value. */\n get _isMinValue() {\n return this.percent === 0;\n }\n\n /**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n */\n get _thumbGap() {\n if (this.disabled) {\n return DISABLED_THUMB_GAP;\n }\n if (this._isMinValue && !this.thumbLabel) {\n return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;\n }\n return 0;\n }\n\n /** CSS styles for the track background element. */\n get _trackBackgroundStyles(): { [key: string]: string } {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${1 - this.percent}, 1` : `${1 - this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '-' : '';\n\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._thumbGap}px) scale3d(${scale})`\n };\n }\n\n /** CSS styles for the track fill element. */\n get _trackFillStyles(): { [key: string]: string } {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${this.percent}, 1` : `${this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '' : '-';\n\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._thumbGap}px) scale3d(${scale})`\n };\n }\n\n /** CSS styles for the ticks container element. */\n get _ticksContainerStyles(): { [key: string]: string } {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the ticks container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '' : '-';\n let offset = this._tickIntervalPercent / 2 * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`\n };\n }\n\n /** CSS styles for the ticks element. */\n get _ticksStyles(): { [key: string]: string } {\n let tickSize = this._tickIntervalPercent * 100;\n let backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let axis = this.vertical ? 'Y' : 'X';\n // Depending on the direction we pushed the ticks container, push the ticks the opposite\n // direction to re-center them but clip off the end edge. In RTL languages we need to flip the\n // ticks 180 degrees so we're really cutting off the end edge abd not the start.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '-' : '';\n let rotate = !this.vertical && this._getDirection() == 'rtl' ? ' rotate(180deg)' : '';\n let styles: { [key: string]: string } = {\n 'backgroundSize': backgroundSize,\n // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.\n 'transform': `translateZ(0) translate${axis}(${sign}${tickSize / 2}%)${rotate}`\n };\n\n if (this._isMinValue && this._thumbGap) {\n let side = this.vertical ?\n (this._invertAxis ? 'Bottom' : 'Top') :\n (this._invertAxis ? 'Right' : 'Left');\n styles[`padding${side}`] = `${this._thumbGap}px`;\n }\n\n return styles;\n }\n\n get _thumbContainerStyles(): { [key: string]: string } {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the thumb container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let invertOffset =\n (this._getDirection() == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n let offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`\n };\n }\n\n /** The size of a tick interval as a percentage of the size of the track. */\n private _tickIntervalPercent: number = 0;\n\n /** The dimensions of the slider. */\n private _sliderDimensions: ClientRect | null = null;\n\n private _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** Decimal places to round to, based on the step amount. */\n private _roundToDecimal: number;\n\n /** Subscription to the Directionality change EventEmitter. */\n private _dirChangeSubscription = Subscription.EMPTY;\n\n /** The value of the slider when the slide start event fires. */\n private _valueOnSlideStart: number | null;\n\n /** Reference to the inner slider wrapper element. */\n @ViewChild('sliderWrapper', {static: false}) private _sliderWrapper: ElementRef;\n\n /**\n * Whether mouse events should be converted to a slider position by calculating their distance\n * from the right or bottom edge of the slider as opposed to the top or left.\n */\n private _shouldInvertMouseCoords() {\n return (this._getDirection() == 'rtl' && !this.vertical) ? !this._invertAxis : this._invertAxis;\n }\n\n /** The language direction for this slider element. */\n private _getDirection() {\n return (this._dir && this._dir.value == 'rtl') ? 'rtl' : 'ltr';\n }\n\n constructor(elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Directionality,\n @Attribute('tabindex') tabIndex: string,\n // @breaking-change 8.0.0 `_animationMode` parameter to be made required.\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {\n super(elementRef);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n\n ngOnInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe((origin: FocusOrigin) => {\n this._isActive = !!origin && origin !== 'keyboard';\n this._changeDetectorRef.detectChanges();\n });\n if (this._dir) {\n this._dirChangeSubscription = this._dir.change.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._dirChangeSubscription.unsubscribe();\n }\n\n _onMouseenter() {\n if (this.disabled) {\n return;\n }\n\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n\n _onMousedown(event: MouseEvent) {\n // Don't do anything if the slider is disabled or the\n // user is using anything other than the main mouse button.\n if (this.disabled || event.button !== 0) {\n return;\n }\n\n const oldValue = this.value;\n this._isSliding = false;\n this._focusHostElement();\n this._updateValueFromPosition({x: event.clientX, y: event.clientY});\n\n // Emit a change and input event if the value changed.\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n }\n\n _onSlide(event: HammerInput) {\n if (this.disabled) {\n return;\n }\n\n // The slide start event sometimes fails to fire on iOS, so if we're not already in the sliding\n // state, call the slide start handler manually.\n if (!this._isSliding) {\n this._onSlideStart(null);\n }\n\n // Prevent the slide from selecting anything else.\n event.preventDefault();\n\n let oldValue = this.value;\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n\n // Native range elements always emit `input` events when the value changed while sliding.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n\n _onSlideStart(event: HammerInput | null) {\n if (this.disabled || this._isSliding) {\n return;\n }\n\n // Simulate mouseenter in case this is a mobile device.\n this._onMouseenter();\n\n this._isSliding = true;\n this._focusHostElement();\n this._valueOnSlideStart = this.value;\n\n if (event) {\n this._updateValueFromPosition({x: event.center.x, y: event.center.y});\n event.preventDefault();\n }\n }\n\n _onSlideEnd() {\n this._isSliding = false;\n\n if (this._valueOnSlideStart != this.value && !this.disabled) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = null;\n }\n\n _onFocus() {\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n\n _onBlur() {\n this.onTouched();\n }\n\n _onKeydown(event: KeyboardEvent) {\n if (this.disabled || hasModifierKey(event)) {\n return;\n }\n\n const oldValue = this.value;\n\n switch (event.keyCode) {\n case PAGE_UP:\n this._increment(10);\n break;\n case PAGE_DOWN:\n this._increment(-10);\n break;\n case END:\n this.value = this.max;\n break;\n case HOME:\n this.value = this.min;\n break;\n case LEFT_ARROW:\n // NOTE: For a sighted user it would make more sense that when they press an arrow key on an\n // inverted slider the thumb moves in that direction. However for a blind user, nothing\n // about the slider indicates that it is inverted. They will expect left to be decrement,\n // regardless of how it appears on the screen. For speakers ofRTL languages, they probably\n // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for\n // RTL. For inverted sliders we prefer a good a11y experience to having it \"look right\" for\n // sighted users, therefore we do not swap the meaning.\n this._increment(this._getDirection() == 'rtl' ? 1 : -1);\n break;\n case UP_ARROW:\n this._increment(1);\n break;\n case RIGHT_ARROW:\n // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n this._increment(this._getDirection() == 'rtl' ? -1 : 1);\n break;\n case DOWN_ARROW:\n this._increment(-1);\n break;\n default:\n // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n // it.\n return;\n }\n\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n\n this._isSliding = true;\n event.preventDefault();\n }\n\n _onKeyup() {\n this._isSliding = false;\n }\n\n /** Increments the slider by the given number of steps (negative number decrements). */\n private _increment(numSteps: number) {\n this.value = this._clamp((this.value || 0) + this.step * numSteps, this.min, this.max);\n }\n\n /** Calculate the new value from the new physical location. The value will always be snapped. */\n private _updateValueFromPosition(pos: {x: number, y: number}) {\n if (!this._sliderDimensions) {\n return;\n }\n\n let offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let posComponent = this.vertical ? pos.y : pos.x;\n\n // The exact value is calculated from the event and used to find the closest snap value.\n let percent = this._clamp((posComponent - offset) / size);\n\n if (this._shouldInvertMouseCoords()) {\n percent = 1 - percent;\n }\n\n // Since the steps may not divide cleanly into the max value, if the user\n // slid to 0 or 100 percent, we jump to the min/max value. This approach\n // is slightly more intuitive than using `Math.ceil` below, because it\n // follows the user's pointer closer.\n if (percent === 0) {\n this.value = this.min;\n } else if (percent === 1) {\n this.value = this.max;\n } else {\n const exactValue = this._calculateValue(percent);\n\n // This calculation finds the closest step by finding the closest\n // whole number divisible by the step relative to the min.\n const closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n }\n\n /** Emits a change event if the current value is different from the last emitted value. */\n private _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.value);\n this.valueChange.emit(this.value);\n this.change.emit(this._createChangeEvent());\n }\n\n /** Emits an input event when the current value is different from the last emitted value. */\n private _emitInputEvent() {\n this.input.emit(this._createChangeEvent());\n }\n\n /** Updates the amount of space between ticks as a percentage of the width of the slider. */\n private _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n\n if (this.tickInterval == 'auto') {\n let trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let pixelsPerStep = trackSize * this.step / (this.max - this.min);\n let stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let pixelsPerTick = stepsPerTick * this.step;\n this._tickIntervalPercent = pixelsPerTick / trackSize;\n } else {\n this._tickIntervalPercent = this.tickInterval * this.step / (this.max - this.min);\n }\n }\n\n /** Creates a slider change object from the specified value. */\n private _createChangeEvent(value = this.value): MatSliderChange {\n let event = new MatSliderChange();\n\n event.source = this;\n event.value = value;\n\n return event;\n }\n\n /** Calculates the percentage of the slider that a value is. */\n private _calculatePercentage(value: number | null) {\n return ((value || 0) - this.min) / (this.max - this.min);\n }\n\n /** Calculates the value a percentage of the slider corresponds to. */\n private _calculateValue(percentage: number) {\n return this.min + percentage * (this.max - this.min);\n }\n\n /** Return a number between two numbers. */\n private _clamp(value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\n }\n\n /**\n * Get the bounding client rect of the slider track element.\n * The track is used rather than the native element to ignore the extra space that the thumb can\n * take up.\n */\n private _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\n }\n\n /**\n * Focuses the native element.\n * Currently only used to allow a blur event to fire but will be used with keyboard input later.\n */\n private _focusHostElement() {\n this._elementRef.nativeElement.focus();\n }\n\n /** Blurs the native element. */\n private _blurHostElement() {\n this._elementRef.nativeElement.blur();\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value: any) {\n this.value = value;\n }\n\n /**\n * Registers a callback to be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Registers a callback to be triggered when the component is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n /**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\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 {ObserversModule} from '@angular/cdk/observers';\nimport {NgModule} from '@angular/core';\nimport {GestureConfig, MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {MatSlideToggle} from './slide-toggle';\n\n\n@NgModule({\n imports: [MatRippleModule, MatCommonModule, ObserversModule],\n exports: [MatSlideToggle, MatCommonModule],\n declarations: [MatSlideToggle],\n providers: [\n {provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig}\n ],\n})\nexport class MatSlideToggleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n NgZone,\n Optional,\n Inject,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor, CanColorCtor,\n CanDisable, CanDisableCtor,\n CanDisableRipple, CanDisableRippleCtor,\n HammerInput,\n HasTabIndex, HasTabIndexCtor,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {\n MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS,\n MatSlideToggleDefaultOptions\n} from './slide-toggle-config';\n\n// Increasing integer for generating unique ids for slide-toggle components.\nlet nextUniqueId = 0;\n\n/** @docs-private */\nexport const MAT_SLIDE_TOGGLE_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlideToggle),\n multi: true\n};\n\n/** Change event object emitted by a MatSlideToggle. */\nexport class MatSlideToggleChange {\n constructor(\n /** The source MatSlideToggle of the event. */\n public source: MatSlideToggle,\n /** The new `checked` value of the MatSlideToggle. */\n public checked: boolean) { }\n}\n\n// Boilerplate for applying mixins to MatSlideToggle.\n/** @docs-private */\nclass MatSlideToggleBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatSlideToggleMixinBase:\n HasTabIndexCtor &\n CanColorCtor &\n CanDisableRippleCtor &\n CanDisableCtor &\n typeof MatSlideToggleBase =\n mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatSlideToggleBase)), 'accent'));\n\n/** Represents a slidable \"switch\" toggle that can be moved between on and off. */\n@Component({\n moduleId: module.id,\n selector: 'mat-slide-toggle',\n exportAs: 'matSlideToggle',\n host: {\n 'class': 'mat-slide-toggle',\n '[id]': 'id',\n // Needs to be `-1` so it can still receive programmatic focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n '[class.mat-checked]': 'checked',\n '[class.mat-disabled]': 'disabled',\n '[class.mat-slide-toggle-label-before]': 'labelPosition == \"before\"',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '(focus)': '_inputElement.nativeElement.focus()',\n },\n templateUrl: 'slide-toggle.html',\n styleUrls: ['slide-toggle.css'],\n providers: [MAT_SLIDE_TOGGLE_VALUE_ACCESSOR],\n inputs: ['disabled', 'disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSlideToggle extends _MatSlideToggleMixinBase implements OnDestroy, AfterContentInit,\n ControlValueAccessor,\n CanDisable, CanColor,\n HasTabIndex,\n CanDisableRipple {\n private _onChange = (_: any) => {};\n private _onTouched = () => {};\n\n private _uniqueId: string = `mat-slide-toggle-${++nextUniqueId}`;\n private _required: boolean = false;\n private _checked: boolean = false;\n\n /** Whether the thumb is currently being dragged. */\n private _dragging = false;\n\n /** Previous checked state before drag started. */\n private _previousChecked: boolean;\n\n /** Width of the thumb bar of the slide-toggle. */\n private _thumbBarWidth: number;\n\n /** Percentage of the thumb while dragging. Percentage as fraction of 100. */\n private _dragPercentage: number;\n\n /** Reference to the thumb HTMLElement. */\n @ViewChild('thumbContainer', {static: false}) _thumbEl: ElementRef;\n\n /** Reference to the thumb bar HTMLElement. */\n @ViewChild('toggleBar', {static: false}) _thumbBarEl: ElementRef;\n\n /** Name value will be applied to the input element if present. */\n @Input() name: string | null = null;\n\n /** A unique id for the slide-toggle input. If none is supplied, it will be auto-generated. */\n @Input() id: string = this._uniqueId;\n\n /** Whether the label should appear after or before the slide-toggle. Defaults to 'after'. */\n @Input() labelPosition: 'before' | 'after' = 'after';\n\n /** Used to set the aria-label attribute on the underlying input element. */\n @Input('aria-label') ariaLabel: string | null = null;\n\n /** Used to set the aria-labelledby attribute on the underlying input element. */\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n /** Whether the slide-toggle is required. */\n @Input()\n get required(): boolean { return this._required; }\n set required(value) { this._required = coerceBooleanProperty(value); }\n\n /** Whether the slide-toggle element is checked or not. */\n @Input()\n get checked(): boolean { return this._checked; }\n set checked(value) {\n this._checked = coerceBooleanProperty(value);\n this._changeDetectorRef.markForCheck();\n }\n /** An event will be dispatched each time the slide-toggle changes its value. */\n @Output() readonly change: EventEmitter<MatSlideToggleChange> =\n new EventEmitter<MatSlideToggleChange>();\n\n /**\n * An event will be dispatched each time the slide-toggle input is toggled.\n * This event is always emitted when the user toggles the slide toggle, but this does not mean\n * the slide toggle's value has changed. The event does not fire when the user drags to change\n * the slide toggle value.\n */\n @Output() readonly toggleChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * An event will be dispatched each time the slide-toggle is dragged.\n * This event is always emitted when the user drags the slide toggle to make a change greater\n * than 50%. It does not mean the slide toggle's value is changed. The event is not emitted when\n * the user toggles the slide toggle to change its value.\n */\n @Output() readonly dragChange: EventEmitter<void> = new EventEmitter<void>();\n\n /** Returns the unique id for the visual hidden input. */\n get inputId(): string { return `${this.id || this._uniqueId}-input`; }\n\n /** Reference to the underlying input element. */\n @ViewChild('input', {static: false}) _inputElement: ElementRef<HTMLInputElement>;\n\n constructor(elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef,\n @Attribute('tabindex') tabIndex: string,\n private _ngZone: NgZone,\n @Inject(MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS)\n public defaults: MatSlideToggleDefaultOptions,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string,\n @Optional() private _dir?: Directionality) {\n super(elementRef);\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n\n ngAfterContentInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe(focusOrigin => {\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state\n // change (such as a form control's 'ng-touched') will cause a changed-after-checked\n // error. See https://github.com/angular/angular/issues/17793. To work around this,\n // we defer telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => this._onTouched());\n }\n });\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Method being called whenever the underlying input emits a change event. */\n _onChangeEvent(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the component's `change` output.\n event.stopPropagation();\n\n if (!this._dragging) {\n this.toggleChange.emit();\n }\n // Releasing the pointer over the `<label>` element while dragging triggers another\n // click event on the `<label>` element. This means that the checked state of the underlying\n // input changed unintentionally and needs to be changed back. Or when the slide toggle's config\n // disabled toggle change event by setting `disableToggleValue: true`, the slide toggle's value\n // does not change, and the checked state of the underlying input needs to be changed back.\n if (this._dragging || this.defaults.disableToggleValue) {\n this._inputElement.nativeElement.checked = this.checked;\n return;\n }\n\n // Sync the value from the underlying input element with the component instance.\n this.checked = this._inputElement.nativeElement.checked;\n\n // Emit our custom change event only if the underlying input emitted one. This ensures that\n // there is no change event, when the checked state changes programmatically.\n this._emitChangeEvent();\n }\n\n /** Method being called whenever the slide-toggle has been clicked. */\n _onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: any): void {\n this.checked = !!value;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n\n /** Focuses the slide-toggle. */\n focus(): void {\n this._focusMonitor.focusVia(this._inputElement, 'keyboard');\n }\n\n /** Toggles the checked state of the slide-toggle. */\n toggle(): void {\n this.checked = !this.checked;\n this._onChange(this.checked);\n }\n\n /**\n * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n */\n private _emitChangeEvent() {\n this._onChange(this.checked);\n this.change.emit(new MatSlideToggleChange(this, this.checked));\n }\n\n /** Retrieves the percentage of thumb from the moved distance. Percentage as fraction of 100. */\n private _getDragPercentage(distance: number) {\n let percentage = (distance / this._thumbBarWidth) * 100;\n\n // When the toggle was initially checked, then we have to start the drag at the end.\n if (this._previousChecked) {\n percentage += 100;\n }\n\n return Math.max(0, Math.min(percentage, 100));\n }\n\n _onDragStart() {\n if (!this.disabled && !this._dragging) {\n const thumbEl = this._thumbEl.nativeElement;\n this._thumbBarWidth = this._thumbBarEl.nativeElement.clientWidth - thumbEl.clientWidth;\n thumbEl.classList.add('mat-dragging');\n\n this._previousChecked = this.checked;\n this._dragging = true;\n }\n }\n\n _onDrag(event: HammerInput) {\n if (this._dragging) {\n const direction = this._dir && this._dir.value === 'rtl' ? -1 : 1;\n this._dragPercentage = this._getDragPercentage(event.deltaX * direction);\n // Calculate the moved distance based on the thumb bar width.\n const dragX = (this._dragPercentage / 100) * this._thumbBarWidth * direction;\n this._thumbEl.nativeElement.style.transform = `translate3d(${dragX}px, 0, 0)`;\n }\n }\n\n _onDragEnd() {\n if (this._dragging) {\n const newCheckedValue = this._dragPercentage > 50;\n\n if (newCheckedValue !== this.checked) {\n this.dragChange.emit();\n if (!this.defaults.disableDragValue) {\n this.checked = newCheckedValue;\n this._emitChangeEvent();\n }\n }\n\n // The drag should be stopped outside of the current event handler, otherwise the\n // click event will be fired before it and will revert the drag change.\n this._ngZone.runOutsideAngular(() => setTimeout(() => {\n if (this._dragging) {\n this._dragging = false;\n this._thumbEl.nativeElement.classList.remove('mat-dragging');\n\n // Reset the transform because the component will take care\n // of the thumb position after drag.\n this._thumbEl.nativeElement.style.transform = '';\n }\n }));\n }\n }\n\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the\n // slide-toggle component will be only marked for check, but no actual change detection runs\n // automatically. Instead of going back into the zone in order to trigger a change detection\n // which causes *all* components to be checked (if explicitly marked or not using OnPush),\n // we only trigger an explicit change detection for the slide-toggle view and it's children.\n this._changeDetectorRef.detectChanges();\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 {InjectionToken} from '@angular/core';\n\n\n/** Default `mat-slide-toggle` options that can be overridden. */\nexport interface MatSlideToggleDefaultOptions {\n /** Whether toggle action triggers value changes in slide toggle. */\n disableToggleValue?: boolean;\n /** Whether drag action triggers value changes in slide toggle. */\n disableDragValue?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-slide-toggle`. */\nexport const MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS =\n new InjectionToken<MatSlideToggleDefaultOptions>('mat-slide-toggle-default-options', {\n providedIn: 'root',\n factory: () => ({disableToggleValue: false, disableDragValue: false})\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 {PlatformModule} from '@angular/cdk/platform';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {MatSidenav, MatSidenavContainer, MatSidenavContent} from './sidenav';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n ScrollingModule,\n PlatformModule,\n ],\n exports: [\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n})\nexport class MatSidenavModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n Inject,\n Input,\n ViewEncapsulation,\n QueryList,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport {MatDrawer, MatDrawerContainer, MatDrawerContent} from './drawer';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {coerceBooleanProperty, coerceNumberProperty} from '@angular/cdk/coercion';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContent extends MatDrawerContent {\n constructor(\n changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatSidenavContainer)) container: MatSidenavContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenav extends MatDrawer {\n /** Whether the sidenav is fixed in the viewport. */\n @Input()\n get fixedInViewport(): boolean { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n private _fixedInViewport = false;\n\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n @Input()\n get fixedTopGap(): number { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n private _fixedTopGap = 0;\n\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n @Input()\n get fixedBottomGap(): number { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n private _fixedBottomGap = 0;\n}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n templateUrl: 'sidenav-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSidenavContainer extends MatDrawerContainer {\n @ContentChildren(MatSidenav) _drawers: QueryList<MatSidenav>;\n @ContentChild(MatSidenavContent, {static: false}) _content: MatSidenavContent;\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 {AnimationEvent} from '@angular/animations';\nimport {FocusMonitor, FocusOrigin, FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {CdkScrollable, ScrollDispatcher, ViewportRuler} from '@angular/cdk/scrolling';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n HostListener,\n HostBinding,\n} from '@angular/core';\nimport {fromEvent, merge, Observable, Subject} from 'rxjs';\nimport {\n debounceTime,\n filter,\n map,\n startWith,\n take,\n takeUntil,\n distinctUntilChanged,\n} from 'rxjs/operators';\nimport {matDrawerAnimations} from './drawer-animations';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nexport function throwMatDuplicatedDrawerError(position: string) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n\n\n/** Result of the toggle promise that indicates the state of the drawer. */\nexport type MatDrawerToggleResult = 'open' | 'close';\n\n/** Configures whether drawers should use auto sizing by default. */\nexport const MAT_DRAWER_DEFAULT_AUTOSIZE =\n new InjectionToken<boolean>('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n });\n\n/** @docs-private */\nexport function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY(): boolean {\n return false;\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContent extends CdkScrollable implements AfterContentInit {\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(forwardRef(() => MatDrawerContainer)) public _container: MatDrawerContainer,\n elementRef: ElementRef<HTMLElement>,\n scrollDispatcher: ScrollDispatcher,\n ngZone: NgZone) {\n super(elementRef, scrollDispatcher, ngZone);\n }\n\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\n\n\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n templateUrl: 'drawer.html',\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n 'tabIndex': '-1',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestroy {\n private _focusTrap: FocusTrap;\n private _elementFocusedBeforeDrawerWasOpened: HTMLElement | null = null;\n\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n private _enableAnimations = false;\n\n /** The side that the drawer is attached to. */\n @Input()\n get position(): 'start' | 'end' { return this._position; }\n set position(value: 'start' | 'end') {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n private _position: 'start' | 'end' = 'start';\n\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n @Input()\n get mode(): 'over' | 'push' | 'side' { return this._mode; }\n set mode(value: 'over' | 'push' | 'side') {\n this._mode = value;\n this._modeChanged.next();\n }\n private _mode: 'over' | 'push' | 'side' = 'over';\n\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n @Input()\n get disableClose(): boolean { return this._disableClose; }\n set disableClose(value: boolean) { this._disableClose = coerceBooleanProperty(value); }\n private _disableClose: boolean = false;\n\n /** Whether the drawer should focus the first focusable element automatically when opened. */\n @Input()\n get autoFocus(): boolean { return this._autoFocus; }\n set autoFocus(value: boolean) { this._autoFocus = coerceBooleanProperty(value); }\n private _autoFocus: boolean = true;\n\n /** How the sidenav was opened (keypress, mouse click etc.) */\n private _openedVia: FocusOrigin | null;\n\n /** Emits whenever the drawer has started animating. */\n _animationStarted = new Subject<AnimationEvent>();\n\n /** Emits whenever the drawer is done animating. */\n _animationEnd = new Subject<AnimationEvent>();\n\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n @HostBinding('@transform')\n _animationState: 'open-instant' | 'open' | 'void' = 'void';\n\n /** Event emitted when the drawer open state is changed. */\n @Output() readonly openedChange: EventEmitter<boolean> =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter<boolean>(/* isAsync */true);\n\n /** Event emitted when the drawer has been opened. */\n @Output('opened')\n get _openedStream(): Observable<void> {\n return this.openedChange.pipe(filter(o => o), map(() => {}));\n }\n\n /** Event emitted when the drawer has started opening. */\n @Output()\n get openedStart(): Observable<void> {\n return this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0),\n map(() => {})\n );\n }\n\n /** Event emitted when the drawer has been closed. */\n @Output('closed')\n get _closedStream(): Observable<void> {\n return this.openedChange.pipe(filter(o => !o), map(() => {}));\n }\n\n /** Event emitted when the drawer has started closing. */\n @Output()\n get closedStart(): Observable<void> {\n return this._animationStarted.pipe(\n filter(e => e.fromState !== e.toState && e.toState === 'void'),\n map(() => {})\n );\n }\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n @Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n readonly _modeChanged = new Subject();\n\n get _isFocusTrapEnabled(): boolean {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n return this.opened && this.mode !== 'side';\n }\n\n constructor(private _elementRef: ElementRef<HTMLElement>,\n private _focusTrapFactory: FocusTrapFactory,\n private _focusMonitor: FocusMonitor,\n private _platform: Platform,\n private _ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) private _doc: any) {\n\n this.openedChange.subscribe((opened: boolean) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement as HTMLElement;\n }\n\n if (this._isFocusTrapEnabled && this._focusTrap) {\n this._trapFocus();\n }\n } else {\n this._restoreFocus();\n }\n });\n\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n (fromEvent(this._elementRef.nativeElement, 'keydown') as Observable<KeyboardEvent>).pipe(\n filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }),\n takeUntil(this._destroyed)\n ).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event: AnimationEvent) => {\n const {fromState, toState} = event;\n\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n\n /** Traps focus inside the drawer. */\n private _trapFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n /**\n * If focus is currently inside the drawer, restores it to where it was before the drawer\n * opened.\n */\n private _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n\n const activeEl = this._doc && this._doc.activeElement;\n\n if (activeEl && this._elementRef.nativeElement.contains(activeEl)) {\n if (this._elementFocusedBeforeDrawerWasOpened instanceof HTMLElement) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n } else {\n this._elementRef.nativeElement.blur();\n }\n }\n\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._focusTrap.enabled = this._isFocusTrapEnabled;\n }\n\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) { this.toggle(coerceBooleanProperty(value)); }\n private _opened: boolean = false;\n\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia?: FocusOrigin): Promise<MatDrawerToggleResult> {\n return this.toggle(true, openedVia);\n }\n\n /** Close the drawer. */\n close(): Promise<MatDrawerToggleResult> {\n return this.toggle(false);\n }\n\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen: boolean = !this.opened, openedVia: FocusOrigin = 'program'):\n Promise<MatDrawerToggleResult> {\n\n this._opened = isOpen;\n\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n } else {\n this._animationState = 'void';\n this._restoreFocus();\n }\n\n if (this._focusTrap) {\n this._focusTrap.enabled = this._isFocusTrapEnabled;\n }\n\n return new Promise<MatDrawerToggleResult>(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n\n get _width(): number {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.start', ['$event'])\n _animationStartListener(event: AnimationEvent) {\n this._animationStarted.next(event);\n }\n\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('@transform.done', ['$event'])\n _animationDoneListener(event: AnimationEvent) {\n this._animationEnd.next(event);\n }\n}\n\n\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n templateUrl: 'drawer-container.html',\n styleUrls: ['drawer.css'],\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy {\n @ContentChildren(MatDrawer) _drawers: QueryList<MatDrawer>;\n @ContentChild(MatDrawerContent, {static: false}) _content: MatDrawerContent;\n @ViewChild(MatDrawerContent, {static: false}) _userContent: MatDrawerContent;\n\n /** The drawer child with the `start` position. */\n get start(): MatDrawer | null { return this._start; }\n\n /** The drawer child with the `end` position. */\n get end(): MatDrawer | null { return this._end; }\n\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n @Input()\n get autosize(): boolean { return this._autosize; }\n set autosize(value: boolean) { this._autosize = coerceBooleanProperty(value); }\n private _autosize: boolean;\n\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n @Input()\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n\n return this._backdropOverride;\n }\n set hasBackdrop(value: any) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n _backdropOverride: boolean | null;\n\n /** Event emitted when the drawer backdrop is clicked. */\n @Output() readonly backdropClick: EventEmitter<void> = new EventEmitter<void>();\n\n /** The drawer at the start/end position, independent of direction. */\n private _start: MatDrawer | null;\n private _end: MatDrawer | null;\n\n /**\n * The drawer at the left/right. When direction changes, these will change as well.\n * They're used as aliases for the above to set the left/right style properly.\n * In LTR, _left == _start and _right == _end.\n * In RTL, _left == _end and _right == _start.\n */\n private _left: MatDrawer | null;\n private _right: MatDrawer | null;\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n private readonly _doCheckSubject = new Subject<void>();\n\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n _contentMargins: {left: number|null, right: number|null} = {left: null, right: null};\n\n readonly _contentMarginChanges = new Subject<{left: number|null, right: number|null}>();\n\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable(): CdkScrollable {\n return this._userContent || this._content;\n }\n\n constructor(@Optional() private _dir: Directionality,\n private _element: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n private _changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n @Inject(MAT_DRAWER_DEFAULT_AUTOSIZE) defaultAutosize = false,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) private _animationMode?: string) {\n\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n\n this._autosize = defaultAutosize;\n }\n\n ngAfterContentInit() {\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n\n this._drawers.forEach((drawer: MatDrawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n\n this._changeDetectorRef.markForCheck();\n });\n\n this._doCheckSubject.pipe(\n debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)\n ).subscribe(() => this.updateContentMargins());\n }\n\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Calls `open` of both start and end drawers */\n open(): void {\n this._drawers.forEach(drawer => drawer.open());\n }\n\n /** Calls `close` of both start and end drawers */\n close(): void {\n this._drawers.forEach(drawer => drawer.close());\n }\n\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._width;\n } else if (this._left.mode == 'push') {\n const width = this._left._width;\n left += width;\n right -= width;\n }\n }\n\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._width;\n } else if (this._right.mode == 'push') {\n const width = this._right._width;\n right += width;\n left -= width;\n }\n }\n\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null!;\n right = right || null!;\n\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = {left, right};\n\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n private _watchDrawerToggle(drawer: MatDrawer): void {\n drawer._animationStarted.pipe(\n filter((event: AnimationEvent) => event.fromState !== event.toState),\n takeUntil(this._drawers.changes),\n )\n .subscribe((event: AnimationEvent) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() =>\n this._setContainerClass(drawer.opened));\n }\n }\n\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n private _watchDrawerPosition(drawer: MatDrawer): void {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n\n /** Subscribes to changes in drawer mode so we can run change detection. */\n private _watchDrawerMode(drawer: MatDrawer): void {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n private _setContainerClass(isAdd: boolean): void {\n if (isAdd) {\n this._element.nativeElement.classList.add('mat-drawer-opened');\n } else {\n this._element.nativeElement.classList.remove('mat-drawer-opened');\n }\n }\n\n /** Validate the state of the drawer children components. */\n private _validateDrawers() {\n this._start = this._end = null;\n\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n } else {\n if (this._start != null) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n\n this._right = this._left = null;\n\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n } else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n\n /** Whether the container is being pushed to the side by one of the drawers. */\n private _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawer();\n }\n\n _closeModalDrawer() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer!.close());\n }\n\n _isShowingBackdrop(): boolean {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n\n private _canHaveBackdrop(drawer: MatDrawer): boolean {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n\n private _isDrawerOpen(drawer: MatDrawer | null): drawer is MatDrawer {\n return drawer != null && drawer.opened;\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 */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nexport const matDrawerAnimations: {\n readonly transformDrawer: AnimationTriggerMetadata;\n} = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void',\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatRadioButton, MatRadioGroup} from './radio';\n\n\n@NgModule({\n imports: [CommonModule, MatRippleModule, MatCommonModule],\n exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n declarations: [MatRadioGroup, MatRadioButton],\n})\nexport class MatRadioModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {UniqueSelectionDispatcher} from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanDisableRipple,\n CanDisableRippleCtor,\n HasTabIndex,\n HasTabIndexCtor,\n mixinDisableRipple,\n mixinTabIndex,\n ThemePalette,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nexport interface MatRadioDefaultOptions {\n color: ThemePalette;\n}\n\nexport const MAT_RADIO_DEFAULT_OPTIONS =\n new InjectionToken<MatRadioDefaultOptions>('mat-radio-default-options', {\n providedIn: 'root',\n factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY\n});\n\nexport function MAT_RADIO_DEFAULT_OPTIONS_FACTORY(): MatRadioDefaultOptions {\n return {\n color: 'accent'\n };\n}\n\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nexport const MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatRadioGroup),\n multi: true\n};\n\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nexport class MatRadioChange {\n constructor(\n /** The MatRadioButton that emits the change event. */\n public source: MatRadioButton,\n /** The value of the MatRadioButton. */\n public value: any) {}\n}\n\n/**\n * A group of radio buttons. May contain one or more `<mat-radio-button>` elements.\n */\n@Directive({\n selector: 'mat-radio-group',\n exportAs: 'matRadioGroup',\n providers: [MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-radio-group',\n },\n})\nexport class MatRadioGroup implements AfterContentInit, ControlValueAccessor {\n /** Selected value for the radio group. */\n private _value: any = null;\n\n /** The HTML name attribute applied to radio buttons in this group. */\n private _name: string = `mat-radio-group-${nextUniqueId++}`;\n\n /** The currently selected radio button. Should match value. */\n private _selected: MatRadioButton | null = null;\n\n /** Whether the `value` has been set to its initial value. */\n private _isInitialized: boolean = false;\n\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n private _labelPosition: 'before' | 'after' = 'after';\n\n /** Whether the radio group is disabled. */\n private _disabled: boolean = false;\n\n /** Whether the radio group is required. */\n private _required: boolean = false;\n\n /** The method to be called in order to update ngModel */\n _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @docs-private\n */\n onTouched: () => any = () => {};\n\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as `<input type-\"radio\">`).\n */\n @Output() readonly change: EventEmitter<MatRadioChange> = new EventEmitter<MatRadioChange>();\n\n /** Child radio buttons. */\n @ContentChildren(forwardRef(() => MatRadioButton), { descendants: true })\n _radios: QueryList<MatRadioButton>;\n\n /** Theme color for all of the radio buttons in the group. */\n @Input() color: ThemePalette;\n\n /** Name of the radio button group. All radio buttons inside this group will use this name. */\n @Input()\n get name(): string { return this._name; }\n set name(value: string) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n @Input()\n get labelPosition(): 'before' | 'after' {\n return this._labelPosition;\n }\n set labelPosition(v) {\n this._labelPosition = v === 'before' ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n\n /**\n * Value for the radio-group. Should equal the value of the selected radio button if there is\n * a corresponding radio button with a matching value. If there is not such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n @Input()\n get value(): any { return this._value; }\n set value(newValue: any) {\n if (this._value !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n\n _checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n\n /**\n * The currently selected radio button. If set to a new radio button, the radio group value\n * will be updated to match the new selected button.\n */\n @Input()\n get selected() { return this._selected; }\n set selected(selected: MatRadioButton | null) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n\n /** Whether the radio group is disabled */\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n\n /** Whether the radio group is required */\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n\n constructor(private _changeDetector: ChangeDetectorRef) { }\n\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MatRadioGroup.\n this._isInitialized = true;\n }\n\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n _touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n private _updateRadioButtonNames(): void {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n radio._markForCheck();\n });\n }\n }\n\n /** Updates the `selected` radio button from the internal _value state. */\n private _updateSelectedRadioFromValue(): void {\n // If the value already matches the selected radio, do nothing.\n const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n\n if (this._radios && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value === radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent(): void {\n if (this._isInitialized) {\n this.change.emit(new MatRadioChange(this._selected!, this._value));\n }\n }\n\n _markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\n}\n\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n // Since the disabled property is manually defined for the MatRadioButton and isn't set up in\n // the mixin base class. To be able to use the tabindex mixin, a disabled property must be\n // defined to properly work.\n disabled: boolean;\n\n constructor(public _elementRef: ElementRef) {}\n}\n// As per Material design specifications the selection control radio should use the accent color\n// palette by default. https://material.io/guidelines/components/selection-controls.html\nconst _MatRadioButtonMixinBase:\n CanDisableRippleCtor & HasTabIndexCtor & typeof MatRadioButtonBase =\n mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n\n/**\n * A Material design radio-button. Typically placed inside of `<mat-radio-group>` elements.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-radio-button',\n templateUrl: 'radio.html',\n styleUrls: ['radio.css'],\n inputs: ['disableRipple', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRadioButton',\n host: {\n 'class': 'mat-radio-button',\n '[class.mat-radio-checked]': 'checked',\n '[class.mat-radio-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-primary]': 'color === \"primary\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n // Needs to be -1 so the `focus` event still fires.\n '[attr.tabindex]': '-1',\n '[attr.id]': 'id',\n // Note: under normal conditions focus shouldn't land on this element, however it may be\n // programmatically set, for example inside of a focus trap, in this case we want to forward\n // the focus to the native element.\n '(focus)': '_inputElement.nativeElement.focus()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatRadioButton extends _MatRadioButtonMixinBase\n implements OnInit, AfterViewInit, OnDestroy, CanDisableRipple, HasTabIndex {\n\n private _uniqueId: string = `mat-radio-${++nextUniqueId}`;\n\n /** The unique ID for the radio button. */\n @Input() id: string = this._uniqueId;\n\n /** Analog to HTML 'name' attribute used to group radios for unique selection. */\n @Input() name: string;\n\n /** Used to set the 'aria-label' attribute on the underlying input element. */\n @Input('aria-label') ariaLabel: string;\n\n /** The 'aria-labelledby' attribute takes precedence as the element's text alternative. */\n @Input('aria-labelledby') ariaLabelledby: string;\n\n /** The 'aria-describedby' attribute is read after the element's label and field type. */\n @Input('aria-describedby') ariaDescribedby: string;\n\n /** Whether this radio button is checked. */\n @Input()\n get checked(): boolean { return this._checked; }\n set checked(value: boolean) {\n const newCheckedState = coerceBooleanProperty(value);\n if (this._checked !== newCheckedState) {\n this._checked = newCheckedState;\n if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n } else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n\n if (newCheckedState) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n\n /** The value of this radio button. */\n @Input()\n get value(): any { return this._value; }\n set value(value: any) {\n if (this._value !== value) {\n this._value = value;\n if (this.radioGroup !== null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n @Input()\n get labelPosition(): 'before' | 'after' {\n return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n }\n set labelPosition(value) {\n this._labelPosition = value;\n }\n private _labelPosition: 'before' | 'after';\n\n /** Whether the radio button is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n }\n set disabled(value: boolean) {\n const newDisabledState = coerceBooleanProperty(value);\n if (this._disabled !== newDisabledState) {\n this._disabled = newDisabledState;\n this._changeDetector.markForCheck();\n }\n }\n\n /** Whether the radio button is required. */\n @Input()\n get required(): boolean {\n return this._required || (this.radioGroup && this.radioGroup.required);\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /** Theme color of the radio button. */\n @Input()\n get color(): ThemePalette {\n return this._color ||\n (this.radioGroup && this.radioGroup.color) ||\n this._providerOverride && this._providerOverride.color || 'accent';\n }\n set color(newValue: ThemePalette) { this._color = newValue; }\n private _color: ThemePalette;\n\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as `<input type-\"radio\">`).\n */\n @Output() readonly change: EventEmitter<MatRadioChange> = new EventEmitter<MatRadioChange>();\n\n /** The parent radio group. May or may not be present. */\n radioGroup: MatRadioGroup;\n\n /** ID of the native input element inside `<mat-radio-button>` */\n get inputId(): string { return `${this.id || this._uniqueId}-input`; }\n\n /** Whether this radio is checked. */\n private _checked: boolean = false;\n\n /** Whether this radio is disabled. */\n private _disabled: boolean;\n\n /** Whether this radio is required. */\n private _required: boolean;\n\n /** Value assigned to this radio. */\n private _value: any = null;\n\n /** Unregister function for _radioDispatcher */\n private _removeUniqueSelectionListener: () => void = () => {};\n\n /** The native `<input type=radio>` element */\n @ViewChild('input', {static: false}) _inputElement: ElementRef<HTMLInputElement>;\n\n constructor(@Optional() radioGroup: MatRadioGroup,\n elementRef: ElementRef,\n private _changeDetector: ChangeDetectorRef,\n private _focusMonitor: FocusMonitor,\n private _radioDispatcher: UniqueSelectionDispatcher,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string,\n @Optional() @Inject(MAT_RADIO_DEFAULT_OPTIONS)\n private _providerOverride?: MatRadioDefaultOptions) {\n super(elementRef);\n\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n\n this._removeUniqueSelectionListener =\n _radioDispatcher.listen((id: string, name: string) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n });\n }\n\n /** Focuses the radio button. */\n focus(): void {\n this._focusMonitor.focusVia(this._inputElement, 'keyboard');\n }\n\n /**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n }\n\n ngAfterViewInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe(focusOrigin => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup._touch();\n }\n });\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._removeUniqueSelectionListener();\n }\n\n /** Dispatch change event with current value. */\n private _emitChangeEvent(): void {\n this.change.emit(new MatRadioChange(this, this._value));\n }\n\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n\n _onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n\n /**\n * Triggered when the radio button received a click or the input recognized any change.\n * Clicking on a label element, will trigger a change event on the associated input.\n */\n _onInputChange(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\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 */\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatProgressSpinner, MatSpinner} from './progress-spinner';\n\n\n@NgModule({\n imports: [MatCommonModule, CommonModule],\n exports: [\n MatProgressSpinner,\n MatSpinner,\n MatCommonModule\n ],\n declarations: [\n MatProgressSpinner,\n MatSpinner\n ],\n})\nclass MatProgressSpinnerModule {}\n\nexport {MatProgressSpinnerModule};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {Platform} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n Optional,\n ViewEncapsulation,\n} from '@angular/core';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/** Possible mode for a progress spinner. */\nexport type ProgressSpinnerMode = 'determinate' | 'indeterminate';\n\n/**\n * Base reference size of the spinner.\n * @docs-private\n */\nconst BASE_SIZE = 100;\n\n/**\n * Base reference stroke width of the spinner.\n * @docs-private\n */\nconst BASE_STROKE_WIDTH = 10;\n\n// Boilerplate for applying mixins to MatProgressSpinner.\n/** @docs-private */\nclass MatProgressSpinnerBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatProgressSpinnerMixinBase: CanColorCtor & typeof MatProgressSpinnerBase =\n mixinColor(MatProgressSpinnerBase, 'primary');\n\n/** Default `mat-progress-spinner` options that can be overridden. */\nexport interface MatProgressSpinnerDefaultOptions {\n /** Diameter of the spinner. */\n diameter?: number;\n /** Width of the spinner's stroke. */\n strokeWidth?: number;\n /**\n * Whether the animations should be force to be enabled, ignoring if the current environment is\n * using NoopAnimationsModule.\n */\n _forceAnimations?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\nexport const MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS =\n new InjectionToken<MatProgressSpinnerDefaultOptions>('mat-progress-spinner-default-options', {\n providedIn: 'root',\n factory: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY,\n });\n\n/** @docs-private */\nexport function MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY(): MatProgressSpinnerDefaultOptions {\n return {diameter: BASE_SIZE};\n}\n\n// .0001 percentage difference is necessary in order to avoid unwanted animation frames\n// for example because the animation duration is 4 seconds, .1% accounts to 4ms\n// which are enough to see the flicker described in\n// https://github.com/angular/components/issues/8984\nconst INDETERMINATE_ANIMATION_TEMPLATE = `\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\n 0% { stroke-dashoffset: START_VALUE; transform: rotate(0); }\n 12.5% { stroke-dashoffset: END_VALUE; transform: rotate(0); }\n 12.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n 25% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n\n 25.0001% { stroke-dashoffset: START_VALUE; transform: rotate(270deg); }\n 37.5% { stroke-dashoffset: END_VALUE; transform: rotate(270deg); }\n 37.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n 50% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n\n 50.0001% { stroke-dashoffset: START_VALUE; transform: rotate(180deg); }\n 62.5% { stroke-dashoffset: END_VALUE; transform: rotate(180deg); }\n 62.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n 75% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n\n 75.0001% { stroke-dashoffset: START_VALUE; transform: rotate(90deg); }\n 87.5% { stroke-dashoffset: END_VALUE; transform: rotate(90deg); }\n 87.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n 100% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n }\n`;\n\n/**\n * `<mat-progress-spinner>` component.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-progress-spinner',\n exportAs: 'matProgressSpinner',\n host: {\n 'role': 'progressbar',\n 'class': 'mat-progress-spinner',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter',\n '[attr.aria-valuemin]': 'mode === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode === \"determinate\" ? 100 : null',\n '[attr.aria-valuenow]': 'mode === \"determinate\" ? value : null',\n '[attr.mode]': 'mode',\n },\n inputs: ['color'],\n templateUrl: 'progress-spinner.html',\n styleUrls: ['progress-spinner.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatProgressSpinner extends _MatProgressSpinnerMixinBase implements CanColor {\n private _diameter = BASE_SIZE;\n private _value = 0;\n private _strokeWidth: number;\n private _fallbackAnimation = false;\n\n /**\n * Element to which we should add the generated style tags for the indeterminate animation.\n * For most elements this is the document, but for the ones in the Shadow DOM we need to\n * use the shadow root.\n */\n private _styleRoot: Node;\n\n /**\n * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\n * We need to keep track of which elements the diameters were attached to, because for\n * elements in the Shadow DOM the style tags are attached to the shadow root, rather\n * than the document head.\n */\n private static _diameters = new WeakMap<Node, Set<number>>();\n\n /** Whether the _mat-animation-noopable class should be applied, disabling animations. */\n _noopAnimations: boolean;\n\n /** The diameter of the progress spinner (will set width and height of svg). */\n @Input()\n get diameter(): number { return this._diameter; }\n set diameter(size: number) {\n this._diameter = coerceNumberProperty(size);\n\n if (!this._fallbackAnimation) {\n const trackedDiameters = MatProgressSpinner._diameters;\n const diametersForElement = trackedDiameters.get(this._styleRoot);\n\n if (!diametersForElement || !diametersForElement.has(this._diameter)) {\n this._attachStyleNode();\n }\n }\n }\n\n /** Stroke width of the progress spinner. */\n @Input()\n get strokeWidth(): number {\n return this._strokeWidth || this.diameter / 10;\n }\n set strokeWidth(value: number) {\n this._strokeWidth = coerceNumberProperty(value);\n }\n\n /** Mode of the progress circle */\n @Input() mode: ProgressSpinnerMode = 'determinate';\n\n /** Value of the progress circle. */\n @Input()\n get value(): number {\n return this.mode === 'determinate' ? this._value : 0;\n }\n set value(newValue: number) {\n this._value = Math.max(0, Math.min(100, coerceNumberProperty(newValue)));\n }\n\n constructor(public _elementRef: ElementRef<HTMLElement>,\n platform: Platform,\n @Optional() @Inject(DOCUMENT) private _document: any,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string,\n @Inject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)\n defaults?: MatProgressSpinnerDefaultOptions) {\n\n super(_elementRef);\n\n const trackedDiameters = MatProgressSpinner._diameters;\n\n // The base size is already inserted via the component's structural styles. We still\n // need to track it so we don't end up adding the same styles again.\n if (!trackedDiameters.has(_document.head)) {\n trackedDiameters.set(_document.head, new Set<number>([BASE_SIZE]));\n }\n\n this._styleRoot = _getShadowRoot(_elementRef.nativeElement, _document) || _document.head;\n this._fallbackAnimation = platform.EDGE || platform.TRIDENT;\n this._noopAnimations = animationMode === 'NoopAnimations' &&\n (!!defaults && !defaults._forceAnimations);\n\n if (defaults) {\n if (defaults.diameter) {\n this.diameter = defaults.diameter;\n }\n\n if (defaults.strokeWidth) {\n this.strokeWidth = defaults.strokeWidth;\n }\n }\n\n // On IE and Edge, we can't animate the `stroke-dashoffset`\n // reliably so we fall back to a non-spec animation.\n const animationClass =\n `mat-progress-spinner-indeterminate${this._fallbackAnimation ? '-fallback' : ''}-animation`;\n\n _elementRef.nativeElement.classList.add(animationClass);\n }\n\n /** The radius of the spinner, adjusted for stroke width. */\n get _circleRadius() {\n return (this.diameter - BASE_STROKE_WIDTH) / 2;\n }\n\n /** The view box of the spinner's svg element. */\n get _viewBox() {\n const viewBox = this._circleRadius * 2 + this.strokeWidth;\n return `0 0 ${viewBox} ${viewBox}`;\n }\n\n /** The stroke circumference of the svg circle. */\n get _strokeCircumference(): number {\n return 2 * Math.PI * this._circleRadius;\n }\n\n /** The dash offset of the svg circle. */\n get _strokeDashOffset() {\n if (this.mode === 'determinate') {\n return this._strokeCircumference * (100 - this._value) / 100;\n }\n\n // In fallback mode set the circle to 80% and rotate it with CSS.\n if (this._fallbackAnimation && this.mode === 'indeterminate') {\n return this._strokeCircumference * 0.2;\n }\n\n return null;\n }\n\n /** Stroke width of the circle in percent. */\n get _circleStrokeWidth() {\n return this.strokeWidth / this.diameter * 100;\n }\n\n /** Dynamically generates a style tag containing the correct animation for this diameter. */\n private _attachStyleNode(): void {\n const styleTag: HTMLStyleElement = this._document.createElement('style');\n const styleRoot = this._styleRoot;\n const currentDiameter = this._diameter;\n const diameters = MatProgressSpinner._diameters;\n let diametersForElement = diameters.get(styleRoot);\n\n styleTag.setAttribute('mat-spinner-animation', currentDiameter + '');\n styleTag.textContent = this._getAnimationText();\n styleRoot.appendChild(styleTag);\n\n if (!diametersForElement) {\n diametersForElement = new Set<number>();\n diameters.set(styleRoot, diametersForElement);\n }\n\n diametersForElement.add(currentDiameter);\n }\n\n /** Generates animation styles adjusted for the spinner's diameter. */\n private _getAnimationText(): string {\n return INDETERMINATE_ANIMATION_TEMPLATE\n // Animation should begin at 5% and end at 80%\n .replace(/START_VALUE/g, `${0.95 * this._strokeCircumference}`)\n .replace(/END_VALUE/g, `${0.2 * this._strokeCircumference}`)\n .replace(/DIAMETER/g, `${this.diameter}`);\n }\n}\n\n\n/**\n * `<mat-spinner>` component.\n *\n * This is a component definition to be used as a convenience reference to create an\n * indeterminate `<mat-progress-spinner>` instance.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-spinner',\n host: {\n 'role': 'progressbar',\n 'mode': 'indeterminate',\n 'class': 'mat-spinner mat-progress-spinner',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter',\n },\n inputs: ['color'],\n templateUrl: 'progress-spinner.html',\n styleUrls: ['progress-spinner.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatSpinner extends MatProgressSpinner {\n constructor(elementRef: ElementRef<HTMLElement>, platform: Platform,\n @Optional() @Inject(DOCUMENT) document: any,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string,\n @Inject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)\n defaults?: MatProgressSpinnerDefaultOptions) {\n super(elementRef, platform, document, animationMode, defaults);\n this.mode = 'indeterminate';\n }\n}\n\n\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nexport function _getShadowRoot(element: HTMLElement, _document: Document): Node | null {\n // TODO(crisbeto): see whether we should move this into the CDK\n // feature detection utilities once #15616 gets merged in.\n if (typeof window !== 'undefined') {\n const head = _document.head;\n\n // Check whether the browser supports Shadow DOM.\n if (head && ((head as any).createShadowRoot || head.attachShadow)) {\n const rootNode = element.getRootNode ? element.getRootNode() : null;\n\n // We need to take the `ShadowRoot` off of `window`, because the built-in types are\n // incorrect. See https://github.com/Microsoft/TypeScript/issues/27929.\n if (rootNode instanceof (window as any).ShadowRoot) {\n return rootNode;\n }\n }\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 {CommonModule} from '@angular/common';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatProgressBar} from './progress-bar';\n\n\n@NgModule({\n imports: [CommonModule, MatCommonModule],\n exports: [MatProgressBar, MatCommonModule],\n declarations: [MatProgressBar],\n})\nexport class MatProgressBarModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this 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 Component,\n ChangeDetectionStrategy,\n ElementRef,\n Inject,\n Input,\n Output,\n EventEmitter,\n Optional,\n NgZone,\n ViewEncapsulation,\n AfterViewInit,\n ViewChild,\n OnDestroy,\n InjectionToken,\n inject,\n} from '@angular/core';\nimport {fromEvent, Subscription, Observable} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\nimport {DOCUMENT} from '@angular/common';\n\n// TODO(josephperrott): Benchpress tests.\n// TODO(josephperrott): Add ARIA attributes for progress bar \"for\".\n\n/** Last animation end data. */\nexport interface ProgressAnimationEnd {\n value: number;\n}\n\n// Boilerplate for applying mixins to MatProgressBar.\n/** @docs-private */\nclass MatProgressBarBase {\n constructor(public _elementRef: ElementRef) { }\n}\n\nconst _MatProgressBarMixinBase: CanColorCtor & typeof MatProgressBarBase =\n mixinColor(MatProgressBarBase, 'primary');\n\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nexport const MAT_PROGRESS_BAR_LOCATION = new InjectionToken<MatProgressBarLocation>(\n 'mat-progress-bar-location',\n {providedIn: 'root', factory: MAT_PROGRESS_BAR_LOCATION_FACTORY}\n);\n\n/**\n * Stubbed out location for `MatProgressBar`.\n * @docs-private\n */\nexport interface MatProgressBarLocation {\n getPathname: () => string;\n}\n\n/** @docs-private */\nexport function MAT_PROGRESS_BAR_LOCATION_FACTORY(): MatProgressBarLocation {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? (_location.pathname + _location.search) : ''\n };\n}\n\n\n/** Counter used to generate unique IDs for progress bars. */\nlet progressbarId = 0;\n\n/**\n * `<mat-progress-bar>` component.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-progress-bar',\n exportAs: 'matProgressBar',\n host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': '(mode === \"indeterminate\" || mode === \"query\") ? null : value',\n '[attr.mode]': 'mode',\n 'class': 'mat-progress-bar',\n '[class._mat-animation-noopable]': '_isNoopAnimation',\n },\n inputs: ['color'],\n templateUrl: 'progress-bar.html',\n styleUrls: ['progress-bar.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatProgressBar extends _MatProgressBarMixinBase implements CanColor,\n AfterViewInit, OnDestroy {\n constructor(public _elementRef: ElementRef, private _ngZone: NgZone,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string,\n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n @Optional() @Inject(MAT_PROGRESS_BAR_LOCATION) location?: MatProgressBarLocation) {\n super(_elementRef);\n\n // We need to prefix the SVG reference with the current path, otherwise they won't work\n // in Safari if the page has a `<base>` tag. Note that we need quotes inside the `url()`,\n\n // because named route URLs can contain parentheses (see #12338). Also we don't use since\n // we can't tell the difference between whether\n // the consumer is using the hash location strategy or not, because `Location` normalizes\n // both `/#/foo/bar` and `/foo/bar` to the same thing.\n const path = location ? location.getPathname().split('#')[0] : '';\n this._rectangleFillValue = `url('${path}#${this.progressbarId}')`;\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n }\n\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n _isNoopAnimation = false;\n\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n @Input()\n get value(): number { return this._value; }\n set value(v: number) {\n this._value = clamp(v || 0);\n\n // When noop animation is set to true, trigger animationEnd directly.\n if (this._isNoopAnimation) {\n this._emitAnimationEnd();\n }\n }\n private _value: number = 0;\n\n /** Buffer value of the progress bar. Defaults to zero. */\n @Input()\n get bufferValue(): number { return this._bufferValue; }\n set bufferValue(v: number) { this._bufferValue = clamp(v || 0); }\n private _bufferValue: number = 0;\n\n @ViewChild('primaryValueBar', {static: false}) _primaryValueBar: ElementRef;\n\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n @Output() animationEnd = new EventEmitter<ProgressAnimationEnd>();\n\n /** Reference to animation end subscription to be unsubscribed on destroy. */\n private _animationEndSubscription: Subscription = Subscription.EMPTY;\n\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n @Input() mode: 'determinate' | 'indeterminate' | 'buffer' | 'query' = 'determinate';\n\n /** ID of the progress bar. */\n progressbarId = `mat-progress-bar-${progressbarId++}`;\n\n /** Attribute to be used for the `fill` attribute on the internal `rect` element. */\n _rectangleFillValue: string;\n\n /** Gets the current transform value for the progress bar's primary indicator. */\n _primaryTransform() {\n const scale = this.value / 100;\n return {transform: `scaleX(${scale})`};\n }\n\n /**\n * Gets the current transform value for the progress bar's buffer indicator. Only used if the\n * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\n */\n _bufferTransform() {\n if (this.mode === 'buffer') {\n const scale = this.bufferValue / 100;\n return {transform: `scaleX(${scale})`};\n }\n }\n\n ngAfterViewInit() {\n if (!this._isNoopAnimation) {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular((() => {\n const element = this._primaryValueBar.nativeElement;\n\n this._animationEndSubscription =\n (fromEvent(element, 'transitionend') as Observable<TransitionEvent>)\n .pipe(filter(((e: TransitionEvent) => e.target === element)))\n .subscribe(() => this._ngZone.run(() => this._emitAnimationEnd()));\n }));\n }\n }\n\n ngOnDestroy() {\n this._animationEndSubscription.unsubscribe();\n }\n\n /** Emit an animationEnd event if in determinate or buffer mode. */\n private _emitAnimationEnd(): void {\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this.animationEnd.next({value: this.value});\n }\n }\n}\n\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v: number, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatPaginator} from './paginator';\nimport {MAT_PAGINATOR_INTL_PROVIDER} from './paginator-intl';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatSelectModule,\n MatTooltipModule,\n ],\n exports: [MatPaginator],\n declarations: [MatPaginator],\n providers: [MAT_PAGINATOR_INTL_PROVIDER],\n})\nexport class MatPaginatorModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {MatPaginatorIntl} from './paginator-intl';\nimport {\n HasInitialized,\n HasInitializedCtor,\n mixinInitialized,\n ThemePalette,\n mixinDisabled,\n CanDisableCtor,\n CanDisable,\n} from '@angular/material/core';\n\n/** The default page size if there is no page size and there are no provided page size options. */\nconst DEFAULT_PAGE_SIZE = 50;\n\n/**\n * Change event object that is emitted when the user selects a\n * different page size or navigates to another page.\n */\nexport class PageEvent {\n /** The current page index. */\n pageIndex: number;\n\n /**\n * Index of the page that was selected previously.\n * @breaking-change 8.0.0 To be made into a required property.\n */\n previousPageIndex?: number;\n\n /** The current page size */\n pageSize: number;\n\n /** The current total number of items being paged */\n length: number;\n}\n\n// Boilerplate for applying mixins to MatPaginator.\n/** @docs-private */\nclass MatPaginatorBase {}\nconst _MatPaginatorBase: CanDisableCtor & HasInitializedCtor & typeof MatPaginatorBase =\n mixinDisabled(mixinInitialized(MatPaginatorBase));\n\n/**\n * Component to provide navigation between paged information. Displays the size of the current\n * page, user-selectable options to change that size, what items are being shown, and\n * navigational button to go to the previous or next page.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-paginator',\n exportAs: 'matPaginator',\n templateUrl: 'paginator.html',\n styleUrls: ['paginator.css'],\n inputs: ['disabled'],\n host: {\n 'class': 'mat-paginator',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatPaginator extends _MatPaginatorBase implements OnInit, OnDestroy, CanDisable,\n HasInitialized {\n private _initialized: boolean;\n private _intlChanges: Subscription;\n\n /** Theme color to be used for the underlying form controls. */\n @Input() color: ThemePalette;\n\n /** The zero-based page index of the displayed list of items. Defaulted to 0. */\n @Input()\n get pageIndex(): number { return this._pageIndex; }\n set pageIndex(value: number) {\n this._pageIndex = Math.max(coerceNumberProperty(value), 0);\n this._changeDetectorRef.markForCheck();\n }\n private _pageIndex = 0;\n\n /** The length of the total number of items that are being paginated. Defaulted to 0. */\n @Input()\n get length(): number { return this._length; }\n set length(value: number) {\n this._length = coerceNumberProperty(value);\n this._changeDetectorRef.markForCheck();\n }\n private _length = 0;\n\n /** Number of items to display on a page. By default set to 50. */\n @Input()\n get pageSize(): number { return this._pageSize; }\n set pageSize(value: number) {\n this._pageSize = Math.max(coerceNumberProperty(value), 0);\n this._updateDisplayedPageSizeOptions();\n }\n private _pageSize: number;\n\n /** The set of provided page size options to display to the user. */\n @Input()\n get pageSizeOptions(): number[] { return this._pageSizeOptions; }\n set pageSizeOptions(value: number[]) {\n this._pageSizeOptions = (value || []).map(p => coerceNumberProperty(p));\n this._updateDisplayedPageSizeOptions();\n }\n private _pageSizeOptions: number[] = [];\n\n /** Whether to hide the page size selection UI from the user. */\n @Input()\n get hidePageSize(): boolean { return this._hidePageSize; }\n set hidePageSize(value: boolean) {\n this._hidePageSize = coerceBooleanProperty(value);\n }\n private _hidePageSize = false;\n\n\n /** Whether to show the first/last buttons UI to the user. */\n @Input()\n get showFirstLastButtons(): boolean { return this._showFirstLastButtons; }\n set showFirstLastButtons(value: boolean) {\n this._showFirstLastButtons = coerceBooleanProperty(value);\n }\n private _showFirstLastButtons = false;\n\n /** Event emitted when the paginator changes the page size or page index. */\n @Output() readonly page: EventEmitter<PageEvent> = new EventEmitter<PageEvent>();\n\n /** Displayed set of page size options. Will be sorted and include current page size. */\n _displayedPageSizeOptions: number[];\n\n constructor(public _intl: MatPaginatorIntl,\n private _changeDetectorRef: ChangeDetectorRef) {\n super();\n this._intlChanges = _intl.changes.subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n ngOnInit() {\n this._initialized = true;\n this._updateDisplayedPageSizeOptions();\n this._markInitialized();\n }\n\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n\n /** Advances to the next page if it exists. */\n nextPage(): void {\n if (!this.hasNextPage()) { return; }\n\n const previousPageIndex = this.pageIndex;\n this.pageIndex++;\n this._emitPageEvent(previousPageIndex);\n }\n\n /** Move back to the previous page if it exists. */\n previousPage(): void {\n if (!this.hasPreviousPage()) { return; }\n\n const previousPageIndex = this.pageIndex;\n this.pageIndex--;\n this._emitPageEvent(previousPageIndex);\n }\n\n /** Move to the first page if not already there. */\n firstPage(): void {\n // hasPreviousPage being false implies at the start\n if (!this.hasPreviousPage()) { return; }\n\n const previousPageIndex = this.pageIndex;\n this.pageIndex = 0;\n this._emitPageEvent(previousPageIndex);\n }\n\n /** Move to the last page if not already there. */\n lastPage(): void {\n // hasNextPage being false implies at the end\n if (!this.hasNextPage()) { return; }\n\n const previousPageIndex = this.pageIndex;\n this.pageIndex = this.getNumberOfPages() - 1;\n this._emitPageEvent(previousPageIndex);\n }\n\n /** Whether there is a previous page. */\n hasPreviousPage(): boolean {\n return this.pageIndex >= 1 && this.pageSize != 0;\n }\n\n /** Whether there is a next page. */\n hasNextPage(): boolean {\n const maxPageIndex = this.getNumberOfPages() - 1;\n return this.pageIndex < maxPageIndex && this.pageSize != 0;\n }\n\n /** Calculate the number of pages */\n getNumberOfPages(): number {\n if (!this.pageSize) {\n return 0;\n }\n\n return Math.ceil(this.length / this.pageSize);\n }\n\n\n /**\n * Changes the page size so that the first item displayed on the page will still be\n * displayed using the new page size.\n *\n * For example, if the page size is 10 and on the second page (items indexed 10-19) then\n * switching so that the page size is 5 will set the third page as the current page so\n * that the 10th item will still be displayed.\n */\n _changePageSize(pageSize: number) {\n // Current page needs to be updated to reflect the new page size. Navigate to the page\n // containing the previous page's first item.\n const startIndex = this.pageIndex * this.pageSize;\n const previousPageIndex = this.pageIndex;\n\n this.pageIndex = Math.floor(startIndex / pageSize) || 0;\n this.pageSize = pageSize;\n this._emitPageEvent(previousPageIndex);\n }\n\n /** Checks whether the buttons for going forwards should be disabled. */\n _nextButtonsDisabled() {\n return this.disabled || !this.hasNextPage();\n }\n\n /** Checks whether the buttons for going backwards should be disabled. */\n _previousButtonsDisabled() {\n return this.disabled || !this.hasPreviousPage();\n }\n\n /**\n * Updates the list of page size options to display to the user. Includes making sure that\n * the page size is an option and that the list is sorted.\n */\n private _updateDisplayedPageSizeOptions() {\n if (!this._initialized) { return; }\n\n // If no page size is provided, use the first page size option or the default page size.\n if (!this.pageSize) {\n this._pageSize = this.pageSizeOptions.length != 0 ?\n this.pageSizeOptions[0] :\n DEFAULT_PAGE_SIZE;\n }\n\n this._displayedPageSizeOptions = this.pageSizeOptions.slice();\n\n if (this._displayedPageSizeOptions.indexOf(this.pageSize) === -1) {\n this._displayedPageSizeOptions.push(this.pageSize);\n }\n\n // Sort the numbers using a number-specific sort function.\n this._displayedPageSizeOptions.sort((a, b) => a - b);\n this._changeDetectorRef.markForCheck();\n }\n\n /** Emits an event notifying that a change of the paginator's properties has been triggered. */\n private _emitPageEvent(previousPageIndex: number) {\n this.page.emit({\n previousPageIndex,\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n length: this.length\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, Optional, SkipSelf} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n\n/**\n * To modify the labels and text displayed, create a new instance of MatPaginatorIntl and\n * include it in a custom provider\n */\n@Injectable({providedIn: 'root'})\nexport class MatPaginatorIntl {\n /**\n * Stream to emit from when labels are changed. Use this to notify components when the labels have\n * changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n\n /** A label for the page size selector. */\n itemsPerPageLabel: string = 'Items per page:';\n\n /** A label for the button that increments the current page. */\n nextPageLabel: string = 'Next page';\n\n /** A label for the button that decrements the current page. */\n previousPageLabel: string = 'Previous page';\n\n /** A label for the button that moves to the first page. */\n firstPageLabel: string = 'First page';\n\n /** A label for the button that moves to the last page. */\n lastPageLabel: string = 'Last page';\n\n /** A label for the range of items within the current page and the length of the whole list. */\n getRangeLabel = (page: number, pageSize: number, length: number) => {\n if (length == 0 || pageSize == 0) { return `0 of ${length}`; }\n\n length = Math.max(length, 0);\n\n const startIndex = page * pageSize;\n\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n\n return `${startIndex + 1} - ${endIndex} of ${length}`;\n }\n}\n\n/** @docs-private */\nexport function MAT_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl: MatPaginatorIntl) {\n return parentIntl || new MatPaginatorIntl();\n}\n\n/** @docs-private */\nexport const MAT_PAGINATOR_INTL_PROVIDER = {\n // If there is already an MatPaginatorIntl available, use that. Otherwise, provide a new one.\n provide: MatPaginatorIntl,\n deps: [[new Optional(), new SkipSelf(), MatPaginatorIntl]],\n useFactory: MAT_PAGINATOR_INTL_PROVIDER_FACTORY\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {A11yModule} from '@angular/cdk/a11y';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {GestureConfig, MatCommonModule} from '@angular/material/core';\nimport {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';\nimport {\n MatTooltip,\n TooltipComponent,\n MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './tooltip';\n\n@NgModule({\n imports: [\n A11yModule,\n CommonModule,\n OverlayModule,\n MatCommonModule,\n ],\n exports: [MatTooltip, TooltipComponent, MatCommonModule],\n declarations: [MatTooltip, TooltipComponent],\n entryComponents: [TooltipComponent],\n providers: [\n MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER,\n {provide: HAMMER_GESTURE_CONFIG, useClass: GestureConfig},\n ]\n})\nexport class MatTooltipModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this 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 {AnimationEvent} from '@angular/animations';\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {BreakpointObserver, Breakpoints, BreakpointState} from '@angular/cdk/layout';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n OriginConnectionPosition,\n Overlay,\n OverlayConnectionPosition,\n OverlayRef,\n ScrollStrategy,\n VerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport {Platform} from '@angular/cdk/platform';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {ScrollDispatcher} from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {HAMMER_LOADER, HammerLoader} from '@angular/platform-browser';\nimport {Observable, Subject} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\n\nimport {matTooltipAnimations} from './tooltip-animations';\n\n\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\n\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\n\n/** CSS class that will be attached to the overlay panel. */\nexport const TOOLTIP_PANEL_CLASS = 'mat-tooltip-panel';\n\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nexport function getMatTooltipInvalidPositionError(position: string) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-tooltip-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition({scrollThrottle: SCROLL_THROTTLE_MS});\n}\n\n/** @docs-private */\nexport const MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY,\n};\n\n/** Default `matTooltip` options that can be overridden. */\nexport interface MatTooltipDefaultOptions {\n showDelay: number;\n hideDelay: number;\n touchendHideDelay: number;\n position?: TooltipPosition;\n}\n\n/** Injection token to be used to override the default options for `matTooltip`. */\nexport const MAT_TOOLTIP_DEFAULT_OPTIONS =\n new InjectionToken<MatTooltipDefaultOptions>('mat-tooltip-default-options', {\n providedIn: 'root',\n factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY\n });\n\n/** @docs-private */\nexport function MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): MatTooltipDefaultOptions {\n return {\n showDelay: 0,\n hideDelay: 0,\n touchendHideDelay: 1500,\n };\n}\n\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\n@Directive({\n selector: '[matTooltip]',\n exportAs: 'matTooltip',\n host: {\n '(longpress)': 'show()',\n '(keydown)': '_handleKeydown($event)',\n '(touchend)': '_handleTouchend()',\n },\n})\nexport class MatTooltip implements OnDestroy, OnInit {\n _overlayRef: OverlayRef | null;\n _tooltipInstance: TooltipComponent | null;\n\n private _portal: ComponentPortal<TooltipComponent>;\n private _position: TooltipPosition = 'below';\n private _disabled: boolean = false;\n private _tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n private _scrollStrategy: () => ScrollStrategy;\n\n /** Allows the user to define the position of the tooltip relative to the parent element */\n @Input('matTooltipPosition')\n get position(): TooltipPosition { return this._position; }\n set position(value: TooltipPosition) {\n if (value !== this._position) {\n this._position = value;\n\n if (this._overlayRef) {\n this._updatePosition();\n\n if (this._tooltipInstance) {\n this._tooltipInstance!.show(0);\n }\n\n this._overlayRef.updatePosition();\n }\n }\n }\n\n /** Disables the display of the tooltip. */\n @Input('matTooltipDisabled')\n get disabled(): boolean { return this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n // If tooltip is disabled, hide immediately.\n if (this._disabled) {\n this.hide(0);\n }\n }\n\n /** The default delay in ms before showing the tooltip after show is called */\n @Input('matTooltipShowDelay') showDelay = this._defaultOptions.showDelay;\n\n /** The default delay in ms before hiding the tooltip after hide is called */\n @Input('matTooltipHideDelay') hideDelay = this._defaultOptions.hideDelay;\n\n private _message = '';\n\n /** The message to be displayed in the tooltip */\n @Input('matTooltip')\n get message() { return this._message; }\n set message(value: string) {\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message);\n\n // If the message is not a string (e.g. number), convert it to a string and trim it.\n this._message = value != null ? `${value}`.trim() : '';\n\n if (!this._message && this._isTooltipVisible()) {\n this.hide(0);\n } else {\n this._updateTooltipMessage();\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message);\n }\n }\n\n /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n @Input('matTooltipClass')\n get tooltipClass() { return this._tooltipClass; }\n set tooltipClass(value: string|string[]|Set<string>|{[key: string]: any}) {\n this._tooltipClass = value;\n if (this._tooltipInstance) {\n this._setTooltipClass(this._tooltipClass);\n }\n }\n\n private _manualListeners = new Map<string, EventListenerOrEventListenerObject>();\n\n /** Emits when the component is destroyed. */\n private readonly _destroyed = new Subject<void>();\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef<HTMLElement>,\n private _scrollDispatcher: ScrollDispatcher,\n private _viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n platform: Platform,\n private _ariaDescriber: AriaDescriber,\n private _focusMonitor: FocusMonitor,\n @Inject(MAT_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(MAT_TOOLTIP_DEFAULT_OPTIONS)\n private _defaultOptions: MatTooltipDefaultOptions,\n @Optional() @Inject(HAMMER_LOADER) hammerLoader?: HammerLoader) {\n\n this._scrollStrategy = scrollStrategy;\n const element: HTMLElement = _elementRef.nativeElement;\n const hasGestures = typeof window === 'undefined' || (window as any).Hammer || hammerLoader;\n\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (!platform.IOS && !platform.ANDROID) {\n this._manualListeners\n .set('mouseenter', () => this.show())\n .set('mouseleave', () => this.hide());\n } else if (!hasGestures) {\n // If Hammerjs isn't loaded, fall back to showing on `touchstart`, otherwise\n // there's no way for the user to trigger the tooltip on a touch device.\n this._manualListeners.set('touchstart', () => this.show());\n }\n\n this._manualListeners.forEach((listener, event) => element.addEventListener(event, listener));\n\n _focusMonitor.monitor(_elementRef).pipe(takeUntil(this._destroyed)).subscribe(origin => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n _ngZone.run(() => this.hide(0));\n } else if (origin === 'keyboard') {\n _ngZone.run(() => this.show());\n }\n });\n\n if (_defaultOptions && _defaultOptions.position) {\n this.position = _defaultOptions.position;\n }\n }\n\n /**\n * Setup styling-specific things\n */\n ngOnInit() {\n const element = this._elementRef.nativeElement;\n const elementStyle = element.style as CSSStyleDeclaration & {webkitUserDrag: string};\n\n if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n // When we bind a gesture event on an element (in this case `longpress`), HammerJS\n // will add some inline styles by default, including `user-select: none`. This is\n // problematic on iOS and in Safari, because it will prevent users from typing in inputs.\n // Since `user-select: none` is not needed for the `longpress` event and can cause unexpected\n // behavior for text fields, we always clear the `user-select` to avoid such issues.\n elementStyle.webkitUserSelect = elementStyle.userSelect = elementStyle.msUserSelect = '';\n }\n\n // Hammer applies `-webkit-user-drag: none` on all elements by default,\n // which breaks the native drag&drop. If the consumer explicitly made\n // the element draggable, clear the `-webkit-user-drag`.\n if (element.draggable && elementStyle.webkitUserDrag === 'none') {\n elementStyle.webkitUserDrag = '';\n }\n }\n\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n\n // Clean up the event listeners set in the constructor\n this._manualListeners.forEach((listener, event) => {\n this._elementRef.nativeElement.removeEventListener(event, listener);\n });\n this._manualListeners.clear();\n\n this._destroyed.next();\n this._destroyed.complete();\n\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this.message);\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay: number = this.showDelay): void {\n if (this.disabled || !this.message || (this._isTooltipVisible() &&\n !this._tooltipInstance!._showTimeoutId && !this._tooltipInstance!._hideTimeoutId)) {\n return;\n }\n\n const overlayRef = this._createOverlay();\n\n this._detach();\n this._portal = this._portal || new ComponentPortal(TooltipComponent, this._viewContainerRef);\n this._tooltipInstance = overlayRef.attach(this._portal).instance;\n this._tooltipInstance.afterHidden()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._setTooltipClass(this._tooltipClass);\n this._updateTooltipMessage();\n this._tooltipInstance!.show(delay);\n }\n\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay: number = this.hideDelay): void {\n if (this._tooltipInstance) {\n this._tooltipInstance.hide(delay);\n }\n }\n\n /** Shows/hides the tooltip */\n toggle(): void {\n this._isTooltipVisible() ? this.hide() : this.show();\n }\n\n /** Returns true if the tooltip is currently visible to the user */\n _isTooltipVisible(): boolean {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n\n /** Handles the keydown events on the host element. */\n _handleKeydown(e: KeyboardEvent) {\n if (this._isTooltipVisible() && e.keyCode === ESCAPE && !hasModifierKey(e)) {\n e.preventDefault();\n e.stopPropagation();\n this.hide(0);\n }\n }\n\n /** Handles the touchend events on the host element. */\n _handleTouchend() {\n this.hide(this._defaultOptions.touchendHideDelay);\n }\n\n /** Create the overlay config and position strategy */\n private _createOverlay(): OverlayRef {\n if (this._overlayRef) {\n return this._overlayRef;\n }\n\n const scrollableAncestors =\n this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay.position()\n .flexibleConnectedTo(this._elementRef)\n .withTransformOriginOn('.mat-tooltip')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withScrollableContainers(scrollableAncestors);\n\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n\n this._overlayRef = this._overlay.create({\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: TOOLTIP_PANEL_CLASS,\n scrollStrategy: this._scrollStrategy()\n });\n\n this._updatePosition();\n\n this._overlayRef.detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n\n return this._overlayRef;\n }\n\n /** Detaches the currently-attached tooltip. */\n private _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n\n this._tooltipInstance = null;\n }\n\n /** Updates the position of the current tooltip. */\n private _updatePosition() {\n const position =\n this._overlayRef!.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n\n position.withPositions([\n {...origin.main, ...overlay.main},\n {...origin.fallback, ...overlay.fallback}\n ]);\n }\n\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin(): {main: OriginConnectionPosition, fallback: OriginConnectionPosition} {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let originPosition: OriginConnectionPosition;\n\n if (position == 'above' || position == 'below') {\n originPosition = {originX: 'center', originY: position == 'above' ? 'top' : 'bottom'};\n } else if (\n position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n originPosition = {originX: 'start', originY: 'center'};\n } else if (\n position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n originPosition = {originX: 'end', originY: 'center'};\n } else {\n throw getMatTooltipInvalidPositionError(position);\n }\n\n const {x, y} = this._invertPosition(originPosition.originX, originPosition.originY);\n\n return {\n main: originPosition,\n fallback: {originX: x, originY: y}\n };\n }\n\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition(): {main: OverlayConnectionPosition, fallback: OverlayConnectionPosition} {\n const isLtr = !this._dir || this._dir.value == 'ltr';\n const position = this.position;\n let overlayPosition: OverlayConnectionPosition;\n\n if (position == 'above') {\n overlayPosition = {overlayX: 'center', overlayY: 'bottom'};\n } else if (position == 'below') {\n overlayPosition = {overlayX: 'center', overlayY: 'top'};\n } else if (\n position == 'before' ||\n (position == 'left' && isLtr) ||\n (position == 'right' && !isLtr)) {\n overlayPosition = {overlayX: 'end', overlayY: 'center'};\n } else if (\n position == 'after' ||\n (position == 'right' && isLtr) ||\n (position == 'left' && !isLtr)) {\n overlayPosition = {overlayX: 'start', overlayY: 'center'};\n } else {\n throw getMatTooltipInvalidPositionError(position);\n }\n\n const {x, y} = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n\n return {\n main: overlayPosition,\n fallback: {overlayX: x, overlayY: y}\n };\n }\n\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n private _updateTooltipMessage() {\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the text.\n if (this._tooltipInstance) {\n this._tooltipInstance.message = this.message;\n this._tooltipInstance._markForCheck();\n\n this._ngZone.onMicrotaskEmpty.asObservable().pipe(\n take(1),\n takeUntil(this._destroyed)\n ).subscribe(() => {\n if (this._tooltipInstance) {\n this._overlayRef!.updatePosition();\n }\n });\n }\n }\n\n /** Updates the tooltip class */\n private _setTooltipClass(tooltipClass: string|string[]|Set<string>|{[key: string]: any}) {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClass = tooltipClass;\n this._tooltipInstance._markForCheck();\n }\n }\n\n /** Inverts an overlay position. */\n private _invertPosition(x: HorizontalConnectionPos, y: VerticalConnectionPos) {\n if (this.position === 'above' || this.position === 'below') {\n if (y === 'top') {\n y = 'bottom';\n } else if (y === 'bottom') {\n y = 'top';\n }\n } else {\n if (x === 'end') {\n x = 'start';\n } else if (x === 'start') {\n x = 'end';\n }\n }\n\n return {x, y};\n }\n}\n\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\n\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-tooltip-component',\n templateUrl: 'tooltip.html',\n styleUrls: ['tooltip.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [matTooltipAnimations.tooltipState],\n host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\n '(body:click)': 'this._handleBodyInteraction()',\n 'aria-hidden': 'true',\n }\n})\nexport class TooltipComponent implements OnDestroy {\n /** Message to display in the tooltip */\n message: string;\n\n /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\n tooltipClass: string|string[]|Set<string>|{[key: string]: any};\n\n /** The timeout ID of any current timer set to show the tooltip */\n _showTimeoutId: number | null;\n\n /** The timeout ID of any current timer set to hide the tooltip */\n _hideTimeoutId: number | null;\n\n /** Property watched by the animation framework to show or hide the tooltip */\n _visibility: TooltipVisibility = 'initial';\n\n /** Whether interactions on the page should close the tooltip */\n private _closeOnInteraction: boolean = false;\n\n /** Subject for notifying that the tooltip has been hidden from the view */\n private readonly _onHide: Subject<any> = new Subject();\n\n /** Stream that emits whether the user has a handset-sized display. */\n _isHandset: Observable<BreakpointState> = this._breakpointObserver.observe(Breakpoints.Handset);\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _breakpointObserver: BreakpointObserver) {}\n\n /**\n * Shows the tooltip with an animation originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay: number): void {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId) {\n clearTimeout(this._hideTimeoutId);\n this._hideTimeoutId = null;\n }\n\n // Body interactions should cancel the tooltip if there is a delay in showing.\n this._closeOnInteraction = true;\n this._showTimeoutId = setTimeout(() => {\n this._visibility = 'visible';\n this._showTimeoutId = null;\n\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this._markForCheck();\n }, delay);\n }\n\n /**\n * Begins the animation to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay showing the tooltip.\n */\n hide(delay: number): void {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId) {\n clearTimeout(this._showTimeoutId);\n this._showTimeoutId = null;\n }\n\n this._hideTimeoutId = setTimeout(() => {\n this._visibility = 'hidden';\n this._hideTimeoutId = null;\n\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this._markForCheck();\n }, delay);\n }\n\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden(): Observable<void> {\n return this._onHide.asObservable();\n }\n\n /** Whether the tooltip is being displayed. */\n isVisible(): boolean {\n return this._visibility === 'visible';\n }\n\n ngOnDestroy() {\n this._onHide.complete();\n }\n\n _animationStart() {\n this._closeOnInteraction = false;\n }\n\n _animationDone(event: AnimationEvent): void {\n const toState = event.toState as TooltipVisibility;\n\n if (toState === 'hidden' && !this.isVisible()) {\n this._onHide.next();\n }\n\n if (toState === 'visible' || toState === 'hidden') {\n this._closeOnInteraction = true;\n }\n }\n\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction(): void {\n if (this._closeOnInteraction) {\n this.hide(0);\n }\n }\n\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck(): void {\n this._changeDetectorRef.markForCheck();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n AnimationTriggerMetadata,\n keyframes,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by MatTooltip.\n * @docs-private\n */\nexport const matTooltipAnimations: {\n readonly tooltipState: AnimationTriggerMetadata;\n} = {\n /** Animation that transitions a tooltip in and out. */\n tooltipState: trigger('state', [\n state('initial, void, hidden', style({opacity: 0, transform: 'scale(0)'})),\n state('visible', style({transform: 'scale(1)'})),\n transition('* => visible', animate('200ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\n style({opacity: 0, transform: 'scale(0)', offset: 0}),\n style({opacity: 0.5, transform: 'scale(0.99)', offset: 0.5}),\n style({opacity: 1, transform: 'scale(1)', offset: 1})\n ]))),\n transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({opacity: 0}))),\n ])\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatOptionModule} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MatSelect, MatSelectTrigger} from './select';\n\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n MatOptionModule,\n MatCommonModule,\n ],\n exports: [MatFormFieldModule, MatSelect, MatSelectTrigger, MatOptionModule, MatCommonModule],\n declarations: [MatSelect, MatSelectTrigger],\n providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER]\n})\nexport class MatSelectModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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, LiveAnnouncer} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n A,\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {CdkConnectedOverlay, Overlay, ScrollStrategy} from '@angular/cdk/overlay';\nimport {ViewportRuler} from '@angular/cdk/scrolling';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n DoCheck,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n isDevMode,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n CanDisable,\n CanDisableCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n HasTabIndex,\n HasTabIndexCtor,\n MAT_OPTION_PARENT_COMPONENT,\n MatOptgroup,\n MatOption,\n MatOptionSelectionChange,\n mixinDisabled,\n mixinDisableRipple,\n mixinErrorState,\n mixinTabIndex,\n} from '@angular/material/core';\nimport {MatFormField, MatFormFieldControl} from '@angular/material/form-field';\nimport {defer, merge, Observable, Subject} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n} from 'rxjs/operators';\nimport {matSelectAnimations} from './select-animations';\nimport {\n getMatSelectDynamicMultipleError,\n getMatSelectNonArrayValueError,\n getMatSelectNonFunctionValueError,\n} from './select-errors';\n\n\nlet nextUniqueId = 0;\n\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the alignment of the selected option over\n * the trigger element.\n */\n\n/** The max height of the select's overlay panel */\nexport const SELECT_PANEL_MAX_HEIGHT = 256;\n\n/** The panel's padding on the x-axis */\nexport const SELECT_PANEL_PADDING_X = 16;\n\n/** The panel's x axis padding if it is indented (e.g. there is an option group). */\nexport const SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;\n\n/** The height of the select items in `em` units. */\nexport const SELECT_ITEM_HEIGHT_EM = 3;\n\n// TODO(josephperrott): Revert to a constant after 2018 spec updates are fully merged.\n/**\n * Distance between the panel edge and the option text in\n * multi-selection mode.\n *\n * Calculated as:\n * (SELECT_PANEL_PADDING_X * 1.5) + 20 = 44\n * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.\n * The checkbox width is 16px.\n */\nexport let SELECT_MULTIPLE_PANEL_PADDING_X = 0;\n\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n */\nexport const SELECT_PANEL_VIEWPORT_PADDING = 8;\n\n/** Injection token that determines the scroll handling while a select is open. */\nexport const MAT_SELECT_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-select-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n/** Change event object that is emitted when the select value has changed. */\nexport class MatSelectChange {\n constructor(\n /** Reference to the select that emitted the change event. */\n public source: MatSelect,\n /** Current value of the select that emitted the event. */\n public value: any) { }\n}\n\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nclass MatSelectBase {\n constructor(public _elementRef: ElementRef,\n public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n public ngControl: NgControl) {}\n}\nconst _MatSelectMixinBase:\n CanDisableCtor &\n HasTabIndexCtor &\n CanDisableRippleCtor &\n CanUpdateErrorStateCtor &\n typeof MatSelectBase =\n mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(MatSelectBase))));\n\n\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\n@Directive({\n selector: 'mat-select-trigger'\n})\nexport class MatSelectTrigger {}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-select',\n exportAs: 'matSelect',\n templateUrl: 'select.html',\n styleUrls: ['select.css'],\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'listbox',\n '[attr.id]': 'id',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-label]': '_getAriaLabel()',\n '[attr.aria-labelledby]': '_getAriaLabelledby()',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-owns]': 'panelOpen ? _optionIds : null',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n '[class.mat-select-disabled]': 'disabled',\n '[class.mat-select-invalid]': 'errorState',\n '[class.mat-select-required]': 'required',\n '[class.mat-select-empty]': 'empty',\n 'class': 'mat-select',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n },\n animations: [\n matSelectAnimations.transformPanelWrap,\n matSelectAnimations.transformPanel\n ],\n providers: [\n {provide: MatFormFieldControl, useExisting: MatSelect},\n {provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect}\n ],\n})\nexport class MatSelect extends _MatSelectMixinBase implements AfterContentInit, OnChanges,\n OnDestroy, OnInit, DoCheck, ControlValueAccessor, CanDisable, HasTabIndex,\n MatFormFieldControl<any>, CanUpdateErrorState, CanDisableRipple {\n private _scrollStrategyFactory: () => ScrollStrategy;\n\n /** Whether or not the overlay panel is open. */\n private _panelOpen = false;\n\n /** Whether filling out the select is required in the form. */\n private _required: boolean = false;\n\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n private _scrollTop = 0;\n\n /** The placeholder displayed in the trigger of the select. */\n private _placeholder: string;\n\n /** Whether the component is in multiple selection mode. */\n private _multiple: boolean = false;\n\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /** Unique id for this input. */\n private _uid = `mat-select-${nextUniqueId++}`;\n\n /** Emits whenever the component is destroyed. */\n private readonly _destroy = new Subject<void>();\n\n /** The last measured value for the trigger's client bounding rect. */\n _triggerRect: ClientRect;\n\n /** The aria-describedby attribute on the select for improved a11y. */\n _ariaDescribedby: string;\n\n /** The cached font-size of the trigger element. */\n _triggerFontSize = 0;\n\n /** Deals with the selection logic. */\n _selectionModel: SelectionModel<MatOption>;\n\n /** Manages keyboard events for options in the panel. */\n _keyManager: ActiveDescendantKeyManager<MatOption>;\n\n /** `View -> model callback called when value changes` */\n _onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n _onTouched = () => {};\n\n /** The IDs of child options to be passed to the aria-owns attribute. */\n _optionIds: string = '';\n\n /** The value of the select panel's transform-origin property. */\n _transformOrigin: string = 'top';\n\n /** Emits when the panel element is finished transforming in. */\n _panelDoneAnimatingStream = new Subject<string>();\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n _scrollStrategy: ScrollStrategy;\n\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n _offsetY = 0;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n _positions = [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ];\n\n /** Whether the component is disabling centering of the active option over the trigger. */\n private _disableOptionCentering: boolean = false;\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this._panelOpen;\n }\n /**\n * @deprecated Setter to be removed as this property is intended to be readonly.\n * @breaking-change 8.0.0\n */\n set focused(value: boolean) {\n this._focused = value;\n }\n private _focused = false;\n\n /** A name for this control that can be used by `mat-form-field`. */\n controlType = 'mat-select';\n\n /** Trigger that opens the select. */\n @ViewChild('trigger', {static: false}) trigger: ElementRef;\n\n /** Panel containing the select options. */\n @ViewChild('panel', {static: false}) panel: ElementRef;\n\n /** Overlay pane containing the options. */\n @ViewChild(CdkConnectedOverlay, {static: false}) overlayDir: CdkConnectedOverlay;\n\n /** All of the defined select options. */\n @ContentChildren(MatOption, { descendants: true }) options: QueryList<MatOption>;\n\n /** All of the defined groups of options. */\n @ContentChildren(MatOptgroup) optionGroups: QueryList<MatOptgroup>;\n\n /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass: string|string[]|Set<string>|{[key: string]: any};\n\n /** User-supplied override of the trigger element. */\n @ContentChild(MatSelectTrigger, {static: false}) customTrigger: MatSelectTrigger;\n\n /** Placeholder to be shown if no value has been selected. */\n @Input()\n get placeholder(): string { return this._placeholder; }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n /** Whether the component is required. */\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean { return this._multiple; }\n set multiple(value: boolean) {\n if (this._selectionModel) {\n throw getMatSelectDynamicMultipleError();\n }\n\n this._multiple = coerceBooleanProperty(value);\n }\n\n /** Whether to center the active option over the trigger. */\n @Input()\n get disableOptionCentering(): boolean { return this._disableOptionCentering; }\n set disableOptionCentering(value: boolean) {\n this._disableOptionCentering = coerceBooleanProperty(value);\n }\n\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n @Input()\n get compareWith() { return this._compareWith; }\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n\n /** Value of the select control. */\n @Input()\n get value(): any { return this._value; }\n set value(newValue: any) {\n if (newValue !== this._value) {\n this.writeValue(newValue);\n this._value = newValue;\n }\n }\n private _value: any;\n\n /** Aria label of the select. If not specified, the placeholder will be used as label. */\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 /** Object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n @Input() sortComparator: (a: MatOption, b: MatOption, options: MatOption[]) => number;\n\n /** Unique id of the element. */\n @Input()\n get id(): string { return this._id; }\n set id(value: string) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n private _id: string;\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<MatOptionSelectionChange> = defer(() => {\n const options = this.options;\n\n if (options) {\n return options.changes.pipe(\n startWith(options),\n switchMap(() => merge(...options.map(option => option.onSelectionChange)))\n );\n }\n\n return this._ngZone.onStable\n .asObservable()\n .pipe(take(1), switchMap(() => this.optionSelectionChanges));\n }) as Observable<MatOptionSelectionChange>;\n\n /** Event emitted when the select panel has been toggled. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly _openedStream: Observable<void> =\n this.openedChange.pipe(filter(o => o), map(() => {}));\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly _closedStream: Observable<void> =\n this.openedChange.pipe(filter(o => !o), map(() => {}));\n\n /** Event emitted when the selected value has been changed by the user. */\n @Output() readonly selectionChange: EventEmitter<MatSelectChange> =\n new EventEmitter<MatSelectChange>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(\n private _viewportRuler: ViewportRuler,\n private _changeDetectorRef: ChangeDetectorRef,\n private _ngZone: NgZone,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n elementRef: ElementRef,\n @Optional() private _dir: Directionality,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n @Optional() private _parentFormField: MatFormField,\n @Self() @Optional() public ngControl: NgControl,\n @Attribute('tabindex') tabIndex: string,\n @Inject(MAT_SELECT_SCROLL_STRATEGY) scrollStrategyFactory: any,\n /**\n * @deprecated _liveAnnouncer to be turned into a required parameter.\n * @breaking-change 8.0.0\n */\n private _liveAnnouncer?: LiveAnnouncer) {\n super(elementRef, _defaultErrorStateMatcher, _parentForm,\n _parentFormGroup, ngControl);\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n this._scrollStrategyFactory = scrollStrategyFactory;\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = parseInt(tabIndex) || 0;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<MatOption>(this.multiple);\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntil(this._destroy))\n .subscribe(() => {\n if (this.panelOpen) {\n this._scrollTop = 0;\n this.openedChange.emit(true);\n } else {\n this.openedChange.emit(false);\n this.overlayDir.offsetX = 0;\n this._changeDetectorRef.markForCheck();\n }\n });\n\n this._viewportRuler.change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() => {\n if (this._panelOpen) {\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n\n ngAfterContentInit() {\n this._initKeyManager();\n\n this._selectionModel.onChange.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled']) {\n this.stateChanges.next();\n }\n }\n\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n }\n\n /** Toggles the overlay panel open or closed. */\n toggle(): void {\n this.panelOpen ? this.close() : this.open();\n }\n\n /** Opens the overlay panel. */\n open(): void {\n if (this.disabled || !this.options || !this.options.length || this._panelOpen) {\n return;\n }\n\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this._triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement).fontSize || '0');\n\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._calculateOverlayPosition();\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n\n // Set the font size on the panel element once it exists.\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n if (this._triggerFontSize && this.overlayDir.overlayRef &&\n this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this._triggerFontSize}px`;\n }\n });\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n }\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n if (this.options) {\n this._setSelectionByValue(value);\n }\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /** Whether or not the overlay panel is open. */\n get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n /** The currently selected option. */\n get selected(): MatOption | MatOption[] {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n\n /** The value displayed in the trigger. */\n get triggerValue(): string {\n if (this.empty) {\n return '';\n }\n\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n\n return this._selectionModel.selected[0].viewValue;\n }\n\n /** Whether the element is in RTL mode. */\n _isRtl(): boolean {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n\n /** Handles all keydown events on the select. */\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the select is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if ((isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n } else if (!this.multiple) {\n const previouslySelectedOption = this.selected;\n\n if (keyCode === HOME || keyCode === END) {\n keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();\n event.preventDefault();\n } else {\n manager.onKeydown(event);\n }\n\n const selectedOption = this.selected;\n\n // Since the value has changed, we need to announce it ourselves.\n // @breaking-change 8.0.0 remove null check for _liveAnnouncer.\n if (this._liveAnnouncer && selectedOption && previouslySelectedOption !== selectedOption) {\n // We set a duration on the live announcement, because we want the live element to be\n // cleared after a while so that users can't navigate to it using the arrow keys.\n this._liveAnnouncer.announce((selectedOption as MatOption).viewValue, 10000);\n }\n }\n }\n\n /** Handles keyboard events when the selected is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const manager = this._keyManager;\n\n if (keyCode === HOME || keyCode === END) {\n event.preventDefault();\n keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();\n } else if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n } else if ((keyCode === ENTER || keyCode === SPACE) && manager.activeItem &&\n !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else if (this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n\n manager.onKeydown(event);\n\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n _onAttached(): void {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._setPseudoCheckboxPaddingSize();\n this._changeDetectorRef.detectChanges();\n this._calculateOverlayOffsetX();\n this.panel.nativeElement.scrollTop = this._scrollTop;\n });\n }\n\n /** Returns the theme to be used on the panel. */\n _getPanelTheme(): string {\n return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n }\n\n // TODO(josephperrott): Remove after 2018 spec updates are fully merged.\n /** Sets the pseudo checkbox padding size based on the width of the pseudo checkbox. */\n private _setPseudoCheckboxPaddingSize() {\n if (!SELECT_MULTIPLE_PANEL_PADDING_X && this.multiple) {\n const pseudoCheckbox = this.panel.nativeElement.querySelector('.mat-pseudo-checkbox');\n if (pseudoCheckbox) {\n SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.5 + pseudoCheckbox.offsetWidth;\n }\n }\n }\n\n /** Whether the select has a value. */\n get empty(): boolean {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);\n this.stateChanges.next();\n });\n }\n\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n private _setSelectionByValue(value: any | any[]): void {\n if (this.multiple && value) {\n if (!Array.isArray(value)) {\n throw getMatSelectNonArrayValueError();\n }\n\n this._selectionModel.clear();\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n this._sortValues();\n } else {\n this._selectionModel.clear();\n const correspondingOption = this._selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.setActiveItem(correspondingOption);\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectValue(value: any): MatOption | undefined {\n const correspondingOption = this.options.find((option: MatOption) => {\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options)\n .withTypeAhead()\n .withVerticalOrientation()\n .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n .withAllowedModifierKeys(['shiftKey']);\n\n this._keyManager.tabOut.pipe(takeUntil(this._destroy)).subscribe(() => {\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n });\n\n this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollActiveOptionIntoView();\n } else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n /** Drops current option subscriptions and IDs and resets from scratch. */\n private _resetOptions(): void {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n\n this._setOptionIds();\n }\n\n /** Invoked when an option is clicked. */\n private _onSelect(option: MatOption, isUserInput: boolean): void {\n const wasSelected = this._selectionModel.isSelected(option);\n\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n this._propagateChanges(option.value);\n } else {\n option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n\n if (this.multiple) {\n this._sortValues();\n\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n\n this.stateChanges.next();\n }\n\n /** Sorts the selected values in the selected based on their order in the panel. */\n private _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n\n this._selectionModel.sort((a, b) => {\n return this.sortComparator ? this.sortComparator(a, b, options) :\n options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n private _propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any = null;\n\n if (this.multiple) {\n valueToEmit = (this.selected as MatOption[]).map(option => option.value);\n } else {\n valueToEmit = this.selected ? (this.selected as MatOption).value : fallbackValue;\n }\n\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(new MatSelectChange(this, valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n\n /** Records option IDs to pass to the aria-owns property. */\n private _setOptionIds() {\n this._optionIds = this.options.map(option => option.id).join(' ');\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private _highlightCorrectOption(): void {\n if (this._keyManager) {\n if (this.empty) {\n this._keyManager.setFirstItemActive();\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n\n /** Scrolls the active option into view. */\n private _scrollActiveOptionIntoView(): void {\n const activeOptionIndex = this._keyManager.activeItemIndex || 0;\n const labelCount = _countGroupLabelsBeforeOption(activeOptionIndex, this.options,\n this.optionGroups);\n\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition(\n activeOptionIndex + labelCount,\n this._getItemHeight(),\n this.panel.nativeElement.scrollTop,\n SELECT_PANEL_MAX_HEIGHT\n );\n }\n\n /** Focuses the select element. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** Gets the index of the provided option in the option list. */\n private _getOptionIndex(option: MatOption): number | undefined {\n return this.options.reduce((result: number | undefined, current: MatOption, index: number) => {\n return result === undefined ? (option === current ? index : undefined) : result;\n }, undefined);\n }\n\n /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\n private _calculateOverlayPosition(): void {\n const itemHeight = this._getItemHeight();\n const items = this._getItemCount();\n const panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const scrollContainerHeight = items * itemHeight;\n\n // The farthest the panel can be scrolled before it hits the bottom\n const maxScroll = scrollContainerHeight - panelHeight;\n\n // If no value is selected we open the popup to the first item.\n let selectedOptionOffset =\n this.empty ? 0 : this._getOptionIndex(this._selectionModel.selected[0])!;\n\n selectedOptionOffset += _countGroupLabelsBeforeOption(selectedOptionOffset, this.options,\n this.optionGroups);\n\n // We must maintain a scroll buffer so the selected option will be scrolled to the\n // center of the overlay panel rather than the top.\n const scrollBuffer = panelHeight / 2;\n this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);\n this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);\n\n this._checkOverlayWithinViewport(maxScroll);\n }\n\n /**\n * Calculates the scroll position of the select's overlay panel.\n *\n * Attempts to center the selected option in the panel. If the option is\n * too high or too low in the panel to be scrolled to the center, it clamps the\n * scroll position to the min or max scroll positions respectively.\n */\n _calculateOverlayScroll(selectedIndex: number, scrollBuffer: number,\n maxScroll: number): number {\n const itemHeight = this._getItemHeight();\n const optionOffsetFromScrollTop = itemHeight * selectedIndex;\n const halfOptionHeight = itemHeight / 2;\n\n // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\n // scroll container, then subtracts the scroll buffer to scroll the option down to\n // the center of the overlay panel. Half the option height must be re-added to the\n // scrollTop so the option is centered based on its middle, not its top edge.\n const optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n return Math.min(Math.max(0, optimalScrollPosition), maxScroll);\n }\n\n /** Returns the aria-label of the select component. */\n _getAriaLabel(): string | null {\n // If an ariaLabelledby value has been set by the consumer, the select should not overwrite the\n // `aria-labelledby` value by setting the ariaLabel to the placeholder.\n return this.ariaLabelledby ? null : this.ariaLabel || this.placeholder;\n }\n\n /** Returns the aria-labelledby of the select component. */\n _getAriaLabelledby(): string | null {\n if (this.ariaLabelledby) {\n return this.ariaLabelledby;\n }\n\n // Note: we use `_getAriaLabel` here, because we want to check whether there's a\n // computed label. `this.ariaLabel` is only the user-specified label.\n if (!this._parentFormField || !this._parentFormField._hasFloatingLabel() ||\n this._getAriaLabel()) {\n return null;\n }\n\n return this._parentFormField._labelId || null;\n }\n\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant(): string | null {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n\n return null;\n }\n\n /**\n * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text when\n * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\n * can't be calculated until the panel has been attached, because we need to know the\n * content width in order to constrain the panel within the viewport.\n */\n private _calculateOverlayOffsetX(): void {\n const overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n const viewportSize = this._viewportRuler.getViewportSize();\n const isRtl = this._isRtl();\n const paddingWidth = this.multiple ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X :\n SELECT_PANEL_PADDING_X * 2;\n let offsetX: number;\n\n // Adjust the offset, depending on the option padding.\n if (this.multiple) {\n offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;\n } else {\n let selected = this._selectionModel.selected[0] || this.options.first;\n offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;\n }\n\n // Invert the offset in LTR.\n if (!isRtl) {\n offsetX *= -1;\n }\n\n // Determine how much the select overflows on each side.\n const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));\n const rightOverflow = overlayRect.right + offsetX - viewportSize.width\n + (isRtl ? 0 : paddingWidth);\n\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0) {\n offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n } else if (rightOverflow > 0) {\n offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors. Round the value to avoid\n // blurry content in some browsers.\n this.overlayDir.offsetX = Math.round(offsetX);\n this.overlayDir.overlayRef.updatePosition();\n }\n\n /**\n * Calculates the y-offset of the select's overlay panel in relation to the\n * top start corner of the trigger. It has to be adjusted in order for the\n * selected option to be aligned over the trigger when the panel opens.\n */\n private _calculateOverlayOffsetY(selectedIndex: number, scrollBuffer: number,\n maxScroll: number): number {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const maxOptionsDisplayed = Math.floor(SELECT_PANEL_MAX_HEIGHT / itemHeight);\n let optionOffsetFromPanelTop: number;\n\n // Disable offset if requested by user by returning 0 as value to offset\n if (this._disableOptionCentering) {\n return 0;\n }\n\n if (this._scrollTop === 0) {\n optionOffsetFromPanelTop = selectedIndex * itemHeight;\n } else if (this._scrollTop === maxScroll) {\n const firstDisplayedIndex = this._getItemCount() - maxOptionsDisplayed;\n const selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\n\n // The first item is partially out of the viewport. Therefore we need to calculate what\n // portion of it is shown in the viewport and account for it in our offset.\n let partialItemHeight =\n itemHeight - (this._getItemCount() * itemHeight - SELECT_PANEL_MAX_HEIGHT) % itemHeight;\n\n // Because the panel height is longer than the height of the options alone,\n // there is always extra padding at the top or bottom of the panel. When\n // scrolled to the very bottom, this padding is at the top of the panel and\n // must be added to the offset.\n optionOffsetFromPanelTop = selectedDisplayIndex * itemHeight + partialItemHeight;\n } else {\n // If the option was scrolled to the middle of the panel using a scroll buffer,\n // its offset will be the scroll buffer minus the half height that was added to\n // center it.\n optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\n }\n\n // The final offset is the option's offset from the top, adjusted for the height difference,\n // multiplied by -1 to ensure that the overlay moves in the correct direction up the page.\n // The value is rounded to prevent some browsers from blurring the content.\n return Math.round(optionOffsetFromPanelTop * -1 - optionHeightAdjustment);\n }\n\n /**\n * Checks that the attempted overlay position will fit within the viewport.\n * If it will not fit, tries to adjust the scroll position and the associated\n * y-offset so the panel can open fully on-screen. If it still won't fit,\n * sets the offset back to 0 to allow the fallback position to take over.\n */\n private _checkOverlayWithinViewport(maxScroll: number): void {\n const itemHeight = this._getItemHeight();\n const viewportSize = this._viewportRuler.getViewportSize();\n\n const topSpaceAvailable = this._triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;\n const bottomSpaceAvailable =\n viewportSize.height - this._triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;\n\n const panelHeightTop = Math.abs(this._offsetY);\n const totalPanelHeight =\n Math.min(this._getItemCount() * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const panelHeightBottom = totalPanelHeight - panelHeightTop - this._triggerRect.height;\n\n if (panelHeightBottom > bottomSpaceAvailable) {\n this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\n } else if (panelHeightTop > topSpaceAvailable) {\n this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\n } else {\n this._transformOrigin = this._getOriginBasedOnOption();\n }\n }\n\n /** Adjusts the overlay panel up to fit in the viewport. */\n private _adjustPanelUp(panelHeightBottom: number, bottomSpaceAvailable: number) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable);\n\n // Scrolls the panel up by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel up into the viewport.\n this._scrollTop -= distanceBelowViewport;\n this._offsetY -= distanceBelowViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n\n // If the panel is scrolled to the very top, it won't be able to fit the panel\n // by scrolling, so set the offset to 0 to allow the fallback position to take\n // effect.\n if (this._scrollTop <= 0) {\n this._scrollTop = 0;\n this._offsetY = 0;\n this._transformOrigin = `50% bottom 0px`;\n }\n }\n\n /** Adjusts the overlay panel down to fit in the viewport. */\n private _adjustPanelDown(panelHeightTop: number, topSpaceAvailable: number,\n maxScroll: number) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable);\n\n // Scrolls the panel down by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel down into the viewport.\n this._scrollTop += distanceAboveViewport;\n this._offsetY += distanceAboveViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n\n // If the panel is scrolled to the very bottom, it won't be able to fit the\n // panel by scrolling, so set the offset to 0 to allow the fallback position\n // to take effect.\n if (this._scrollTop >= maxScroll) {\n this._scrollTop = maxScroll;\n this._offsetY = 0;\n this._transformOrigin = `50% top 0px`;\n return;\n }\n }\n\n /** Sets the transform origin point based on the selected option. */\n private _getOriginBasedOnOption(): string {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const originY = Math.abs(this._offsetY) - optionHeightAdjustment + itemHeight / 2;\n return `50% ${originY}px 0px`;\n }\n\n /** Calculates the amount of items in the select. This includes options and group labels. */\n private _getItemCount(): number {\n return this.options.length + this.optionGroups.length;\n }\n\n /** Calculates the height of the select's options. */\n private _getItemHeight(): number {\n return this._triggerFontSize * SELECT_ITEM_HEIGHT_EM;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n this._ariaDescribedby = ids.join(' ');\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n this.open();\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n return this._panelOpen || !this.empty;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nexport function getMatSelectDynamicMultipleError(): Error {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nexport function getMatSelectNonArrayValueError(): Error {\n return Error('Value must be an array in multiple-selection mode.');\n}\n\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nexport function getMatSelectNonFunctionValueError(): Error {\n return Error('`compareWith` must be a function.');\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 animate,\n animateChild,\n AnimationTriggerMetadata,\n query,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nexport const matSelectAnimations: {\n readonly transformPanelWrap: AnimationTriggerMetadata;\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInContent: AnimationTriggerMetadata;\n} = {\n /**\n * This animation ensures the select's overlay panel animation (transformPanel) is called when\n * closing the select.\n * This is needed due to https://github.com/angular/angular/issues/23302\n */\n transformPanelWrap: trigger('transformPanelWrap', [\n transition('* => void', query('@transformPanel', [animateChild()],\n {optional: true}))\n ]),\n\n /**\n * This animation transforms the select's overlay panel on and off the page.\n *\n * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it\n * up to 100% on the Y axis, fades in its border, and translates slightly up and to the\n * side to ensure the option text correctly overlaps the trigger text.\n *\n * When the panel is removed from the DOM, it simply fades out linearly.\n */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n transform: 'scaleY(0.8)',\n minWidth: '100%',\n opacity: 0\n })),\n state('showing', style({\n opacity: 1,\n minWidth: 'calc(100% + 32px)', // 32px = 2 * 16px padding\n transform: 'scaleY(1)'\n })),\n state('showing-multiple', style({\n opacity: 1,\n minWidth: 'calc(100% + 64px)', // 64px = 48px padding on the left + 16px padding on the right\n transform: 'scaleY(1)'\n })),\n transition('void => *', animate('120ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void', animate('100ms 25ms linear', style({opacity: 0})))\n ]),\n\n /**\n * This animation fades in the background color and text content of the\n * select's options. It is time delayed to occur 100ms after the overlay\n * panel has transformed in.\n * @deprecated Not used anymore. To be removed.\n * @breaking-change 8.0.0\n */\n fadeInContent: trigger('fadeInContent', [\n state('showing', style({opacity: 1})),\n transition('void => showing', [\n style({opacity: 0}),\n animate('150ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')\n ])\n ])\n};\n\n\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nexport const transformPanel = matSelectAnimations.transformPanel;\n\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nexport const fadeInContent = matSelectAnimations.fadeInContent;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {OverlayModule} from '@angular/cdk/overlay';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatMenuContent} from './menu-content';\nimport {_MatMenu} from './menu';\nimport {MatMenuItem} from './menu-item';\nimport {\n MatMenuTrigger,\n MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './menu-trigger';\n\n/**\n * Used by both the current `MatMenuModule` and the MDC `MatMenuModule`\n * to declare the menu-related directives.\n */\n@NgModule({\n exports: [MatMenuTrigger, MatMenuContent, MatCommonModule],\n declarations: [MatMenuTrigger, MatMenuContent],\n providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\n// tslint:disable-next-line:class-name\nexport class _MatMenuDirectivesModule {}\n\n@NgModule({\n imports: [\n CommonModule,\n MatCommonModule,\n MatRippleModule,\n OverlayModule,\n _MatMenuDirectivesModule,\n ],\n exports: [_MatMenu, MatMenuItem, _MatMenuDirectivesModule],\n declarations: [_MatMenu, MatMenuItem],\n providers: [MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER]\n})\nexport class MatMenuModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {LEFT_ARROW, RIGHT_ARROW} from '@angular/cdk/keycodes';\nimport {\n FlexibleConnectedPositionStrategy,\n HorizontalConnectionPos,\n Overlay,\n OverlayConfig,\n OverlayRef,\n VerticalConnectionPos,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n Optional,\n Output,\n Self,\n ViewContainerRef,\n} from '@angular/core';\nimport {normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {asapScheduler, merge, of as observableOf, Subscription} from 'rxjs';\nimport {delay, filter, take, takeUntil} from 'rxjs/operators';\nimport {MatMenu} from './menu';\nimport {throwMatMenuMissingError} from './menu-errors';\nimport {MatMenuItem} from './menu-item';\nimport {MatMenuPanel} from './menu-panel';\nimport {MenuPositionX, MenuPositionY} from './menu-positions';\n\n/** Injection token that determines the scroll handling while the menu is open. */\nexport const MAT_MENU_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-menu-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_MENU_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_MENU_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_MENU_SCROLL_STRATEGY_FACTORY,\n};\n\n/** Default top padding of the menu panel. */\nexport const MENU_PANEL_TOP_PADDING = 8;\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true});\n\n// TODO(andrewseguin): Remove the kebab versions in favor of camelCased attribute selectors\n\n/**\n * This directive is intended to be used in conjunction with an mat-menu tag. It is\n * responsible for toggling the display of the provided menu instance.\n */\n@Directive({\n selector: `[mat-menu-trigger-for], [matMenuTriggerFor]`,\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'menuOpen || null',\n '(mousedown)': '_handleMousedown($event)',\n '(keydown)': '_handleKeydown($event)',\n '(click)': '_handleClick($event)',\n },\n exportAs: 'matMenuTrigger'\n})\nexport class MatMenuTrigger implements AfterContentInit, OnDestroy {\n private _portal: TemplatePortal;\n private _overlayRef: OverlayRef | null = null;\n private _menuOpen: boolean = false;\n private _closingActionsSubscription = Subscription.EMPTY;\n private _hoverSubscription = Subscription.EMPTY;\n private _menuCloseSubscription = Subscription.EMPTY;\n private _scrollStrategy: () => ScrollStrategy;\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => this._openedBy = 'touch';\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n _openedBy: 'mouse' | 'touch' | null = null;\n\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n @Input('mat-menu-trigger-for')\n get _deprecatedMatMenuTriggerFor(): MatMenuPanel { return this.menu; }\n set _deprecatedMatMenuTriggerFor(v: MatMenuPanel) {\n this.menu = v;\n }\n\n /** References the menu instance that the trigger is associated with. */\n @Input('matMenuTriggerFor')\n get menu() { return this._menu; }\n set menu(menu: MatMenuPanel) {\n if (menu === this._menu) {\n return;\n }\n\n this._menu = menu;\n this._menuCloseSubscription.unsubscribe();\n\n if (menu) {\n this._menuCloseSubscription = menu.close.asObservable().subscribe(reason => {\n this._destroyMenu();\n\n // If a click closed the menu, we should close the entire chain of nested menus.\n if ((reason === 'click' || reason === 'tab') && this._parentMenu) {\n this._parentMenu.closed.emit(reason);\n }\n });\n }\n }\n private _menu: MatMenuPanel;\n\n /** Data to be passed along to any lazily-rendered content. */\n @Input('matMenuTriggerData') menuData: any;\n\n /**\n * Whether focus should be restored when the menu is closed.\n * Note that disabling this option can have accessibility implications\n * and it's up to you to manage focus, if you decide to turn it off.\n */\n @Input('matMenuTriggerRestoreFocus') restoreFocus: boolean = true;\n\n /** Event emitted when the associated menu is opened. */\n @Output() readonly menuOpened: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Event emitted when the associated menu is opened.\n * @deprecated Switch to `menuOpened` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n @Output() readonly onMenuOpen: EventEmitter<void> = this.menuOpened;\n\n /** Event emitted when the associated menu is closed. */\n @Output() readonly menuClosed: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Event emitted when the associated menu is closed.\n * @deprecated Switch to `menuClosed` instead\n * @breaking-change 8.0.0\n */\n // tslint:disable-next-line:no-output-on-prefix\n @Output() readonly onMenuClose: EventEmitter<void> = this.menuClosed;\n\n constructor(private _overlay: Overlay,\n private _element: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n @Inject(MAT_MENU_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _parentMenu: MatMenu,\n @Optional() @Self() private _menuItemInstance: MatMenuItem,\n @Optional() private _dir: Directionality,\n // TODO(crisbeto): make the _focusMonitor required when doing breaking changes.\n // @breaking-change 8.0.0\n private _focusMonitor?: FocusMonitor) {\n\n _element.nativeElement.addEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions);\n\n if (_menuItemInstance) {\n _menuItemInstance._triggersSubmenu = this.triggersSubmenu();\n }\n\n this._scrollStrategy = scrollStrategy;\n }\n\n ngAfterContentInit() {\n this._checkMenu();\n this._handleHover();\n }\n\n ngOnDestroy() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n\n this._element.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions);\n\n this._menuCloseSubscription.unsubscribe();\n this._closingActionsSubscription.unsubscribe();\n this._hoverSubscription.unsubscribe();\n }\n\n /** Whether the menu is open. */\n get menuOpen(): boolean {\n return this._menuOpen;\n }\n\n /** The text direction of the containing app. */\n get dir(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the menu triggers a sub-menu or a top-level one. */\n triggersSubmenu(): boolean {\n return !!(this._menuItemInstance && this._parentMenu);\n }\n\n /** Toggles the menu between the open and closed states. */\n toggleMenu(): void {\n return this._menuOpen ? this.closeMenu() : this.openMenu();\n }\n\n /** Opens the menu. */\n openMenu(): void {\n if (this._menuOpen) {\n return;\n }\n\n this._checkMenu();\n\n const overlayRef = this._createOverlay();\n const overlayConfig = overlayRef.getConfig();\n\n this._setPosition(overlayConfig.positionStrategy as FlexibleConnectedPositionStrategy);\n overlayConfig.hasBackdrop = this.menu.hasBackdrop == null ? !this.triggersSubmenu() :\n this.menu.hasBackdrop;\n overlayRef.attach(this._getPortal());\n\n if (this.menu.lazyContent) {\n this.menu.lazyContent.attach(this.menuData);\n }\n\n this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu());\n this._initMenu();\n\n if (this.menu instanceof MatMenu) {\n this.menu._startAnimation();\n }\n }\n\n /** Closes the menu. */\n closeMenu(): void {\n this.menu.close.emit();\n }\n\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin: FocusOrigin = 'program') {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._element, origin);\n } else {\n this._element.nativeElement.focus();\n }\n }\n\n /** Closes the menu and does the necessary cleanup. */\n private _destroyMenu() {\n if (!this._overlayRef || !this.menuOpen) {\n return;\n }\n\n const menu = this.menu;\n\n this._closingActionsSubscription.unsubscribe();\n this._overlayRef.detach();\n\n if (menu instanceof MatMenu) {\n menu._resetAnimation();\n\n if (menu.lazyContent) {\n // Wait for the exit animation to finish before detaching the content.\n menu._animationDone\n .pipe(\n filter(event => event.toState === 'void'),\n take(1),\n // Interrupt if the content got re-attached.\n takeUntil(menu.lazyContent._attached)\n )\n .subscribe({\n next: () => menu.lazyContent!.detach(),\n // No matter whether the content got re-attached, reset the menu.\n complete: () => this._resetMenu()\n });\n } else {\n this._resetMenu();\n }\n } else {\n this._resetMenu();\n\n if (menu.lazyContent) {\n menu.lazyContent.detach();\n }\n }\n }\n\n /**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n */\n private _initMenu(): void {\n this.menu.parentMenu = this.triggersSubmenu() ? this._parentMenu : undefined;\n this.menu.direction = this.dir;\n this._setMenuElevation();\n this._setIsMenuOpen(true);\n this.menu.focusFirstItem(this._openedBy || 'program');\n }\n\n /** Updates the menu elevation based on the amount of parent menus that it has. */\n private _setMenuElevation(): void {\n if (this.menu.setElevation) {\n let depth = 0;\n let parentMenu = this.menu.parentMenu;\n\n while (parentMenu) {\n depth++;\n parentMenu = parentMenu.parentMenu;\n }\n\n this.menu.setElevation(depth);\n }\n }\n\n /**\n * This method resets the menu when it's closed, most importantly restoring\n * focus to the menu trigger if the menu was opened via the keyboard.\n */\n private _resetMenu(): void {\n this._setIsMenuOpen(false);\n\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking on the backdrop.\n if (this.restoreFocus) {\n if (!this._openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus();\n } else if (!this.triggersSubmenu()) {\n this.focus(this._openedBy);\n }\n }\n\n this._openedBy = null;\n }\n\n // set state rather than toggle to support triggers sharing a menu\n private _setIsMenuOpen(isOpen: boolean): void {\n this._menuOpen = isOpen;\n this._menuOpen ? this.menuOpened.emit() : this.menuClosed.emit();\n\n if (this.triggersSubmenu()) {\n this._menuItemInstance._highlighted = isOpen;\n }\n }\n\n /**\n * This method checks that a valid instance of MatMenu has been passed into\n * matMenuTriggerFor. If not, an exception is thrown.\n */\n private _checkMenu() {\n if (!this.menu) {\n throwMatMenuMissingError();\n }\n }\n\n /**\n * This method creates the overlay from the provided menu's template and saves its\n * OverlayRef so that it can be attached to the DOM when openMenu is called.\n */\n private _createOverlay(): OverlayRef {\n if (!this._overlayRef) {\n const config = this._getOverlayConfig();\n this._subscribeToPositions(config.positionStrategy as FlexibleConnectedPositionStrategy);\n this._overlayRef = this._overlay.create(config);\n\n // Consume the `keydownEvents` in order to prevent them from going to another overlay.\n // Ideally we'd also have our keyboard event logic in here, however doing so will\n // break anybody that may have implemented the `MatMenuPanel` themselves.\n this._overlayRef.keydownEvents().subscribe();\n }\n\n return this._overlayRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n * @returns OverlayConfig\n */\n private _getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this._overlay.position()\n .flexibleConnectedTo(this._element)\n .withLockedPosition()\n .withTransformOriginOn('.mat-menu-panel, .mat-mdc-menu-panel'),\n backdropClass: this.menu.backdropClass || 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this._scrollStrategy(),\n direction: this._dir\n });\n }\n\n /**\n * Listens to changes in the position of the overlay and sets the correct classes\n * on the menu based on the new position. This ensures the animation origin is always\n * correct, even if a fallback position is used for the overlay.\n */\n private _subscribeToPositions(position: FlexibleConnectedPositionStrategy): void {\n if (this.menu.setPositionClasses) {\n position.positionChanges.subscribe(change => {\n const posX: MenuPositionX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\n const posY: MenuPositionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\n\n this.menu.setPositionClasses!(posX, posY);\n });\n }\n }\n\n /**\n * Sets the appropriate positions on a position strategy\n * so the overlay connects with the trigger correctly.\n * @param positionStrategy Strategy whose position to update.\n */\n private _setPosition(positionStrategy: FlexibleConnectedPositionStrategy) {\n let [originX, originFallbackX]: HorizontalConnectionPos[] =\n this.menu.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];\n\n let [overlayY, overlayFallbackY]: VerticalConnectionPos[] =\n this.menu.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];\n\n let [originY, originFallbackY] = [overlayY, overlayFallbackY];\n let [overlayX, overlayFallbackX] = [originX, originFallbackX];\n let offsetY = 0;\n\n if (this.triggersSubmenu()) {\n // When the menu is a sub-menu, it should always align itself\n // to the edges of the trigger, instead of overlapping it.\n overlayFallbackX = originX = this.menu.xPosition === 'before' ? 'start' : 'end';\n originFallbackX = overlayX = originX === 'end' ? 'start' : 'end';\n offsetY = overlayY === 'bottom' ? MENU_PANEL_TOP_PADDING : -MENU_PANEL_TOP_PADDING;\n } else if (!this.menu.overlapTrigger) {\n originY = overlayY === 'top' ? 'bottom' : 'top';\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\n }\n\n positionStrategy.withPositions([\n {originX, originY, overlayX, overlayY, offsetY},\n {originX: originFallbackX, originY, overlayX: overlayFallbackX, overlayY, offsetY},\n {\n originX,\n originY: originFallbackY,\n overlayX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n },\n {\n originX: originFallbackX,\n originY: originFallbackY,\n overlayX: overlayFallbackX,\n overlayY: overlayFallbackY,\n offsetY: -offsetY\n }\n ]);\n }\n\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n private _menuClosingActions() {\n const backdrop = this._overlayRef!.backdropClick();\n const detachments = this._overlayRef!.detachments();\n const parentClose = this._parentMenu ? this._parentMenu.closed : observableOf();\n const hover = this._parentMenu ? this._parentMenu._hovered().pipe(\n filter(active => active !== this._menuItemInstance),\n filter(() => this._menuOpen)\n ) : observableOf();\n\n return merge(backdrop, parentClose, hover, detachments);\n }\n\n /** Handles mouse presses on the trigger. */\n _handleMousedown(event: MouseEvent): void {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : null;\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n if (this.triggersSubmenu()) {\n event.preventDefault();\n }\n }\n }\n\n /** Handles key presses on the trigger. */\n _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if (this.triggersSubmenu() && (\n (keyCode === RIGHT_ARROW && this.dir === 'ltr') ||\n (keyCode === LEFT_ARROW && this.dir === 'rtl'))) {\n this.openMenu();\n }\n }\n\n /** Handles click events on the trigger. */\n _handleClick(event: MouseEvent): void {\n if (this.triggersSubmenu()) {\n // Stop event propagation to avoid closing the parent menu.\n event.stopPropagation();\n this.openMenu();\n } else {\n this.toggleMenu();\n }\n }\n\n /** Handles the cases where the user hovers over the trigger. */\n private _handleHover() {\n // Subscribe to changes in the hovered item in order to toggle the panel.\n if (!this.triggersSubmenu()) {\n return;\n }\n\n this._hoverSubscription = this._parentMenu._hovered()\n // Since we might have multiple competing triggers for the same menu (e.g. a sub-menu\n // with different data and triggers), we have to delay it by a tick to ensure that\n // it won't be closed immediately after it is opened.\n .pipe(\n filter(active => active === this._menuItemInstance && !active.disabled),\n delay(0, asapScheduler)\n )\n .subscribe(() => {\n this._openedBy = 'mouse';\n\n // If the same menu is used between multiple triggers, it might still be animating\n // while the new trigger tries to re-open it. Wait for the animation to finish\n // before doing so. Also interrupt if the user moves to another item.\n if (this.menu instanceof MatMenu && this.menu._isAnimating) {\n // We need the `delay(0)` here in order to avoid\n // 'changed after checked' errors in some cases. See #12194.\n this.menu._animationDone\n .pipe(take(1), delay(0, asapScheduler), takeUntil(this._parentMenu._hovered()))\n .subscribe(() => this.openMenu());\n } else {\n this.openMenu();\n }\n });\n }\n\n /** Gets the portal that should be attached to the overlay. */\n private _getPortal(): TemplatePortal {\n // Note that we can avoid this check by keeping the portal on the menu panel.\n // While it would be cleaner, we'd have to introduce another required method on\n // `MatMenuPanel`, making it harder to consume.\n if (!this._portal || this._portal.templateRef !== this.menu.templateRef) {\n this._portal = new TemplatePortal(this.menu.templateRef, this._viewContainerRef);\n }\n\n return this._portal;\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 {FocusKeyManager, FocusOrigin} from '@angular/cdk/a11y';\nimport {Direction} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n HOME,\n END,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Output,\n TemplateRef,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n OnInit,\n} from '@angular/core';\nimport {merge, Observable, Subject, Subscription} from 'rxjs';\nimport {startWith, switchMap, take} from 'rxjs/operators';\nimport {matMenuAnimations} from './menu-animations';\nimport {MatMenuContent} from './menu-content';\nimport {MenuPositionX, MenuPositionY} from './menu-positions';\nimport {throwMatMenuInvalidPositionX, throwMatMenuInvalidPositionY} from './menu-errors';\nimport {MatMenuItem} from './menu-item';\nimport {MAT_MENU_PANEL, MatMenuPanel} from './menu-panel';\nimport {AnimationEvent} from '@angular/animations';\n\n/** Default `mat-menu` options that can be overridden. */\nexport interface MatMenuDefaultOptions {\n /** The x-axis position of the menu. */\n xPosition: MenuPositionX;\n\n /** The y-axis position of the menu. */\n yPosition: MenuPositionY;\n\n /** Whether the menu should overlap the menu trigger. */\n overlapTrigger: boolean;\n\n /** Class to be applied to the menu's backdrop. */\n backdropClass: string;\n\n /** Whether the menu has a backdrop. */\n hasBackdrop?: boolean;\n}\n\n/** Injection token to be used to override the default options for `mat-menu`. */\nexport const MAT_MENU_DEFAULT_OPTIONS =\n new InjectionToken<MatMenuDefaultOptions>('mat-menu-default-options', {\n providedIn: 'root',\n factory: MAT_MENU_DEFAULT_OPTIONS_FACTORY\n });\n\n/** @docs-private */\nexport function MAT_MENU_DEFAULT_OPTIONS_FACTORY(): MatMenuDefaultOptions {\n return {\n overlapTrigger: false,\n xPosition: 'after',\n yPosition: 'below',\n backdropClass: 'cdk-overlay-transparent-backdrop',\n };\n}\n/**\n * Start elevation for the menu panel.\n * @docs-private\n */\nconst MAT_MENU_BASE_ELEVATION = 4;\n\n/** Base class with all of the `MatMenu` functionality. */\n// tslint:disable-next-line:class-name\nexport class _MatMenuBase implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnInit,\n OnDestroy {\n private _keyManager: FocusKeyManager<MatMenuItem>;\n private _xPosition: MenuPositionX = this._defaultOptions.xPosition;\n private _yPosition: MenuPositionY = this._defaultOptions.yPosition;\n private _previousElevation: string;\n\n /** All items inside the menu. Includes items nested inside another menu. */\n @ContentChildren(MatMenuItem, {descendants: true}) _allItems: QueryList<MatMenuItem>;\n\n /** Only the direct descendant menu items. */\n private _directDescendantItems = new QueryList<MatMenuItem>();\n\n /** Subscription to tab events on the menu panel */\n private _tabSubscription = Subscription.EMPTY;\n\n /** Config object to be passed into the menu's ngClass */\n _classList: {[key: string]: boolean} = {};\n\n /** Current state of the panel animation. */\n _panelAnimationState: 'void' | 'enter' = 'void';\n\n /** Emits whenever an animation on the menu completes. */\n _animationDone = new Subject<AnimationEvent>();\n\n /** Whether the menu is animating. */\n _isAnimating: boolean;\n\n /** Parent menu of the current menu panel. */\n parentMenu: MatMenuPanel | undefined;\n\n /** Layout direction of the menu. */\n direction: Direction;\n\n /** Class to be added to the backdrop element. */\n @Input() backdropClass: string = this._defaultOptions.backdropClass;\n\n /** Position of the menu in the X axis. */\n @Input()\n get xPosition(): MenuPositionX { return this._xPosition; }\n set xPosition(value: MenuPositionX) {\n if (value !== 'before' && value !== 'after') {\n throwMatMenuInvalidPositionX();\n }\n this._xPosition = value;\n this.setPositionClasses();\n }\n\n /** Position of the menu in the Y axis. */\n @Input()\n get yPosition(): MenuPositionY { return this._yPosition; }\n set yPosition(value: MenuPositionY) {\n if (value !== 'above' && value !== 'below') {\n throwMatMenuInvalidPositionY();\n }\n this._yPosition = value;\n this.setPositionClasses();\n }\n\n /** @docs-private */\n @ViewChild(TemplateRef, {static: false}) templateRef: TemplateRef<any>;\n\n /**\n * List of the items inside of a menu.\n * @deprecated\n * @breaking-change 8.0.0\n */\n @ContentChildren(MatMenuItem) items: QueryList<MatMenuItem>;\n\n /**\n * Menu content that will be rendered lazily.\n * @docs-private\n */\n @ContentChild(MatMenuContent, {static: false}) lazyContent: MatMenuContent;\n\n /** Whether the menu should overlap its trigger. */\n @Input()\n get overlapTrigger(): boolean { return this._overlapTrigger; }\n set overlapTrigger(value: boolean) {\n this._overlapTrigger = coerceBooleanProperty(value);\n }\n private _overlapTrigger: boolean = this._defaultOptions.overlapTrigger;\n\n /** Whether the menu has a backdrop. */\n @Input()\n get hasBackdrop(): boolean | undefined { return this._hasBackdrop; }\n set hasBackdrop(value: boolean | undefined) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n private _hasBackdrop: boolean | undefined = this._defaultOptions.hasBackdrop;\n\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @param classes list of class names\n */\n @Input('class')\n set panelClass(classes: string) {\n const previousPanelClass = this._previousPanelClass;\n\n if (previousPanelClass && previousPanelClass.length) {\n previousPanelClass.split(' ').forEach((className: string) => {\n this._classList[className] = false;\n });\n }\n\n this._previousPanelClass = classes;\n\n if (classes && classes.length) {\n classes.split(' ').forEach((className: string) => {\n this._classList[className] = true;\n });\n\n this._elementRef.nativeElement.className = '';\n }\n }\n private _previousPanelClass: string;\n\n /**\n * This method takes classes set on the host mat-menu element and applies them on the\n * menu template that displays in the overlay container. Otherwise, it's difficult\n * to style the containing menu from outside the component.\n * @deprecated Use `panelClass` instead.\n * @breaking-change 8.0.0\n */\n @Input()\n get classList(): string { return this.panelClass; }\n set classList(classes: string) { this.panelClass = classes; }\n\n /** Event emitted when the menu is closed. */\n @Output() readonly closed: EventEmitter<void | 'click' | 'keydown' | 'tab'> =\n new EventEmitter<void | 'click' | 'keydown' | 'tab'>();\n\n /**\n * Event emitted when the menu is closed.\n * @deprecated Switch to `closed` instead\n * @breaking-change 8.0.0\n */\n @Output() close = this.closed;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n @Inject(MAT_MENU_DEFAULT_OPTIONS) private _defaultOptions: MatMenuDefaultOptions) { }\n\n ngOnInit() {\n this.setPositionClasses();\n }\n\n ngAfterContentInit() {\n this._updateDirectDescendants();\n this._keyManager = new FocusKeyManager(this._directDescendantItems).withWrap().withTypeAhead();\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'));\n }\n\n ngOnDestroy() {\n this._directDescendantItems.destroy();\n this._tabSubscription.unsubscribe();\n this.closed.complete();\n }\n\n /** Stream that emits whenever the hovered menu item changes. */\n _hovered(): Observable<MatMenuItem> {\n return this._directDescendantItems.changes.pipe(\n startWith(this._directDescendantItems),\n switchMap(items => merge<MatMenuItem>(...items.map((item: MatMenuItem) => item._hovered)))\n );\n }\n\n /*\n * Registers a menu item with the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n addItem(_item: MatMenuItem) {}\n\n /**\n * Removes an item from the menu.\n * @docs-private\n * @deprecated No longer being used. To be removed.\n * @breaking-change 9.0.0\n */\n removeItem(_item: MatMenuItem) {}\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this.closed.emit('keydown');\n }\n break;\n case LEFT_ARROW:\n if (this.parentMenu && this.direction === 'ltr') {\n this.closed.emit('keydown');\n }\n break;\n case RIGHT_ARROW:\n if (this.parentMenu && this.direction === 'rtl') {\n this.closed.emit('keydown');\n }\n break;\n case HOME:\n case END:\n if (!hasModifierKey(event)) {\n keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();\n event.preventDefault();\n }\n break;\n default:\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n manager.setFocusOrigin('keyboard');\n }\n\n manager.onKeydown(event);\n }\n }\n\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin: FocusOrigin = 'program'): void {\n // When the content is rendered lazily, it takes a bit before the items are inside the DOM.\n if (this.lazyContent) {\n this._ngZone.onStable.asObservable()\n .pipe(take(1))\n .subscribe(() => this._keyManager.setFocusOrigin(origin).setFirstItemActive());\n } else {\n this._keyManager.setFocusOrigin(origin).setFirstItemActive();\n }\n }\n\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem() {\n this._keyManager.setActiveItem(-1);\n }\n\n /**\n * Sets the menu panel elevation.\n * @param depth Number of parent menus that come before the menu.\n */\n setElevation(depth: number): void {\n // The elevation starts at the base and increases by one for each level.\n const newElevation = `mat-elevation-z${MAT_MENU_BASE_ELEVATION + depth}`;\n const customElevation = Object.keys(this._classList).find(c => c.startsWith('mat-elevation-z'));\n\n if (!customElevation || customElevation === this._previousElevation) {\n if (this._previousElevation) {\n this._classList[this._previousElevation] = false;\n }\n\n this._classList[newElevation] = true;\n this._previousElevation = newElevation;\n }\n }\n\n /**\n * Adds classes to the menu panel based on its position. Can be used by\n * consumers to add specific styling based on the position.\n * @param posX Position of the menu along the x axis.\n * @param posY Position of the menu along the y axis.\n * @docs-private\n */\n setPositionClasses(posX: MenuPositionX = this.xPosition, posY: MenuPositionY = this.yPosition) {\n const classes = this._classList;\n classes['mat-menu-before'] = posX === 'before';\n classes['mat-menu-after'] = posX === 'after';\n classes['mat-menu-above'] = posY === 'above';\n classes['mat-menu-below'] = posY === 'below';\n }\n\n /** Starts the enter animation. */\n _startAnimation() {\n // @breaking-change 8.0.0 Combine with _resetAnimation.\n this._panelAnimationState = 'enter';\n }\n\n /** Resets the panel animation to its initial state. */\n _resetAnimation() {\n // @breaking-change 8.0.0 Combine with _startAnimation.\n this._panelAnimationState = 'void';\n }\n\n /** Callback that is invoked when the panel animation completes. */\n _onAnimationDone(event: AnimationEvent) {\n this._animationDone.next(event);\n this._isAnimating = false;\n }\n\n _onAnimationStart(event: AnimationEvent) {\n this._isAnimating = true;\n\n // Scroll the content element to the top as soon as the animation starts. This is necessary,\n // because we move focus to the first item while it's still being animated, which can throw\n // the browser off when it determines the scroll position. Alternatively we can move focus\n // when the animation is done, however moving focus asynchronously will interrupt screen\n // readers which are in the process of reading out the menu already. We take the `element`\n // from the `event` since we can't use a `ViewChild` to access the pane.\n if (event.toState === 'enter' && this._keyManager.activeItemIndex === 0) {\n event.element.scrollTop = 0;\n }\n }\n\n /**\n * Sets up a stream that will keep track of any newly-added menu items and will update the list\n * of direct descendants. We collect the descendants this way, because `_allItems` can include\n * items that are part of child menus, and using a custom way of registering items is unreliable\n * when it comes to maintaining the item order.\n */\n private _updateDirectDescendants() {\n this._allItems.changes\n .pipe(startWith(this._allItems))\n .subscribe((items: QueryList<MatMenuItem>) => {\n this._directDescendantItems.reset(items.filter(item => item._parentMenu === this));\n this._directDescendantItems.notifyOnChanges();\n });\n }\n}\n\n/** @docs-private We show the \"_MatMenu\" class as \"MatMenu\" in the docs. */\nexport class MatMenu extends _MatMenuBase {}\n\n// Note on the weird inheritance setup: we need three classes, because the MDC-based menu has to\n// extend `MatMenu`, however keeping a reference to it will cause the inlined template and styles\n// to be retained as well. The MDC menu also has to provide itself as a `MatMenu` in order for\n// queries and DI to work correctly, while still not referencing the actual menu class.\n// Class responsibility is split up as follows:\n// * _MatMenuBase - provides all the functionality without any of the Angular metadata.\n// * MatMenu - keeps the same name symbol name as the current menu and\n// is used as a provider for DI and query purposes.\n// * _MatMenu - the actual menu component implementation with the Angular metadata that should\n// be tree shaken away for MDC.\n\n/** @docs-public MatMenu */\n@Component({\n moduleId: module.id,\n selector: 'mat-menu',\n templateUrl: 'menu.html',\n styleUrls: ['menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matMenu',\n animations: [\n matMenuAnimations.transformMenu,\n matMenuAnimations.fadeInItems\n ],\n providers: [\n {provide: MAT_MENU_PANEL, useExisting: MatMenu},\n {provide: MatMenu, useExisting: _MatMenu}\n ]\n})\n// tslint:disable-next-line:class-name\nexport class _MatMenu extends MatMenu {\n\n constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone,\n @Inject(MAT_MENU_DEFAULT_OPTIONS) defaultOptions: MatMenuDefaultOptions) {\n super(elementRef, ngZone, defaultOptions);\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 {FocusableOption, FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewEncapsulation,\n Inject,\n Optional,\n Input,\n HostListener,\n} from '@angular/core';\nimport {\n CanDisable, CanDisableCtor,\n CanDisableRipple, CanDisableRippleCtor,\n mixinDisabled,\n mixinDisableRipple,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {MAT_MENU_PANEL, MatMenuPanel} from './menu-panel';\n\n// Boilerplate for applying mixins to MatMenuItem.\n/** @docs-private */\nclass MatMenuItemBase {}\nconst _MatMenuItemMixinBase: CanDisableRippleCtor & CanDisableCtor & typeof MatMenuItemBase =\n mixinDisableRipple(mixinDisabled(MatMenuItemBase));\n\n/**\n * This directive is intended to be used inside an mat-menu tag.\n * It exists mostly to set the role attribute.\n */\n@Component({\n moduleId: module.id,\n selector: '[mat-menu-item]',\n exportAs: 'matMenuItem',\n inputs: ['disabled', 'disableRipple'],\n host: {\n '[attr.role]': 'role',\n 'class': 'mat-menu-item',\n '[class.mat-menu-item-highlighted]': '_highlighted',\n '[class.mat-menu-item-submenu-trigger]': '_triggersSubmenu',\n '[attr.tabindex]': '_getTabIndex()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: 'menu-item.html',\n})\nexport class MatMenuItem extends _MatMenuItemMixinBase\n implements FocusableOption, CanDisable, CanDisableRipple, OnDestroy {\n\n /** ARIA role for the menu item. */\n @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n private _document: Document;\n\n /** Stream that emits when the menu item is hovered. */\n readonly _hovered: Subject<MatMenuItem> = new Subject<MatMenuItem>();\n\n /** Whether the menu item is highlighted. */\n _highlighted: boolean = false;\n\n /** Whether the menu item acts as a trigger for a sub-menu. */\n _triggersSubmenu: boolean = false;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) document?: any,\n private _focusMonitor?: FocusMonitor,\n @Inject(MAT_MENU_PANEL) @Optional() public _parentMenu?: MatMenuPanel<MatMenuItem>) {\n\n // @breaking-change 8.0.0 make `_focusMonitor` and `document` required params.\n super();\n\n if (_focusMonitor) {\n // Start monitoring the element so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n _focusMonitor.monitor(this._elementRef, false);\n }\n\n if (_parentMenu && _parentMenu.addItem) {\n _parentMenu.addItem(this);\n }\n\n this._document = document;\n }\n\n /** Focuses the menu item. */\n focus(origin: FocusOrigin = 'program'): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._getHostElement(), origin);\n } else {\n this._getHostElement().focus();\n }\n }\n\n ngOnDestroy() {\n if (this._focusMonitor) {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n if (this._parentMenu && this._parentMenu.removeItem) {\n this._parentMenu.removeItem(this);\n }\n\n this._hovered.complete();\n }\n\n /** Used to set the `tabindex`. */\n _getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n\n /** Returns the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._elementRef.nativeElement;\n }\n\n /** Prevents the default element actions if it is disabled. */\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('click', ['$event'])\n _checkDisabled(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /** Emits to the hover stream. */\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritte.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n @HostListener('mouseenter')\n _handleMouseEnter() {\n this._hovered.next(this);\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n const element: HTMLElement = this._elementRef.nativeElement;\n const textNodeType = this._document ? this._document.TEXT_NODE : 3;\n let output = '';\n\n if (element.childNodes) {\n const length = element.childNodes.length;\n\n // Go through all the top-level text nodes and extract their text.\n // We skip anything that's not a text node to prevent the text from\n // being thrown off by something like an icon.\n for (let i = 0; i < length; i++) {\n if (element.childNodes[i].nodeType === textNodeType) {\n output += element.childNodes[i].textContent;\n }\n }\n }\n\n return output.trim();\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 {EventEmitter, TemplateRef, InjectionToken} from '@angular/core';\nimport {MenuPositionX, MenuPositionY} from './menu-positions';\nimport {Direction} from '@angular/cdk/bidi';\nimport {FocusOrigin} from '@angular/cdk/a11y';\nimport {MatMenuContent} from './menu-content';\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n * @docs-private\n */\nexport const MAT_MENU_PANEL = new InjectionToken<MatMenuPanel>('MAT_MENU_PANEL');\n\n/**\n * Interface for a custom menu panel that can be used with `matMenuTriggerFor`.\n * @docs-private\n */\nexport interface MatMenuPanel<T = any> {\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n overlapTrigger: boolean;\n templateRef: TemplateRef<any>;\n close: EventEmitter<void | 'click' | 'keydown' | 'tab'>;\n parentMenu?: MatMenuPanel | undefined;\n direction?: Direction;\n focusFirstItem: (origin?: FocusOrigin) => void;\n resetActiveItem: () => void;\n setPositionClasses?: (x: MenuPositionX, y: MenuPositionY) => void;\n setElevation?(depth: number): void;\n lazyContent?: MatMenuContent;\n backdropClass?: string;\n hasBackdrop?: boolean;\n\n /**\n * @deprecated To be removed.\n * @breaking-change 8.0.0\n */\n addItem?: (item: T) => void;\n\n /**\n * @deprecated To be removed.\n * @breaking-change 8.0.0\n */\n removeItem?: (item: T) => void;\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 * Throws an exception for the case when menu trigger doesn't have a valid mat-menu instance\n * @docs-private\n */\nexport function throwMatMenuMissingError() {\n throw Error(`matMenuTriggerFor: must pass in an mat-menu instance.\n\n Example:\n <mat-menu #menu=\"matMenu\"></mat-menu>\n <button [matMenuTriggerFor]=\"menu\"></button>`);\n}\n\n/**\n * Throws an exception for the case when menu's x-position value isn't valid.\n * In other words, it doesn't match 'before' or 'after'.\n * @docs-private\n */\nexport function throwMatMenuInvalidPositionX() {\n throw Error(`xPosition value must be either 'before' or after'.\n Example: <mat-menu xPosition=\"before\" #menu=\"matMenu\"></mat-menu>`);\n}\n\n/**\n * Throws an exception for the case when menu's y-position value isn't valid.\n * In other words, it doesn't match 'above' or 'below'.\n * @docs-private\n */\nexport function throwMatMenuInvalidPositionY() {\n throw Error(`yPosition value must be either 'above' or below'.\n Example: <mat-menu yPosition=\"above\" #menu=\"matMenu\"></mat-menu>`);\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 Directive,\n TemplateRef,\n ComponentFactoryResolver,\n ApplicationRef,\n Injector,\n ViewContainerRef,\n Inject,\n OnDestroy,\n} from '@angular/core';\nimport {TemplatePortal, DomPortalOutlet} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {Subject} from 'rxjs';\n\n/**\n * Menu content that will be rendered lazily once the menu is opened.\n */\n@Directive({\n selector: 'ng-template[matMenuContent]'\n})\nexport class MatMenuContent implements OnDestroy {\n private _portal: TemplatePortal<any>;\n private _outlet: DomPortalOutlet;\n\n /** Emits when the menu content has been attached. */\n _attached = new Subject<void>();\n\n constructor(\n private _template: TemplateRef<any>,\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _appRef: ApplicationRef,\n private _injector: Injector,\n private _viewContainerRef: ViewContainerRef,\n @Inject(DOCUMENT) private _document: any) {}\n\n /**\n * Attaches the content with a particular context.\n * @docs-private\n */\n attach(context: any = {}) {\n if (!this._portal) {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n }\n\n this.detach();\n\n if (!this._outlet) {\n this._outlet = new DomPortalOutlet(this._document.createElement('div'),\n this._componentFactoryResolver, this._appRef, this._injector);\n }\n\n const element: HTMLElement = this._template.elementRef.nativeElement;\n\n // Because we support opening the same menu from different triggers (which in turn have their\n // own `OverlayRef` panel), we have to re-insert the host element every time, otherwise we\n // risk it staying attached to a pane that's no longer in the DOM.\n element.parentNode!.insertBefore(this._outlet.outletElement, element);\n this._portal.attach(this._outlet, context);\n this._attached.next();\n }\n\n /**\n * Detaches the content.\n * @docs-private\n */\n detach() {\n if (this._portal.isAttached) {\n this._portal.detach();\n }\n }\n\n ngOnDestroy() {\n if (this._outlet) {\n this._outlet.dispose();\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{\n trigger,\n state,\n style,\n animate,\n transition,\n query,\n group,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the mat-menu component.\n * Animation duration and timing values are based on:\n * https://material.io/guidelines/components/menus.html#menus-usage\n * @docs-private\n */\nexport const matMenuAnimations: {\n readonly transformMenu: AnimationTriggerMetadata;\n readonly fadeInItems: AnimationTriggerMetadata;\n} = {\n /**\n * This animation controls the menu panel's entry and exit from the page.\n *\n * When the menu panel is added to the DOM, it scales in and fades in its border.\n *\n * When the menu panel is removed from the DOM, it simply fades out after a brief\n * delay to display the ripple.\n */\n transformMenu: trigger('transformMenu', [\n state('void', style({\n opacity: 0,\n transform: 'scale(0.8)'\n })),\n transition('void => enter', group([\n query('.mat-menu-content, .mat-mdc-menu-content', animate('100ms linear', style({\n opacity: 1\n }))),\n animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({transform: 'scale(1)'})),\n ])),\n transition('* => void', animate('100ms 25ms linear', style({opacity: 0})))\n ]),\n\n\n /**\n * This animation fades in the background color and content of the menu panel\n * after its containing element is scaled in.\n */\n fadeInItems: trigger('fadeInItems', [\n // TODO(crisbeto): this is inside the `transformMenu`\n // now. Remove next time we do breaking changes.\n state('showing', style({opacity: 1})),\n transition('void => *', [\n style({opacity: 0}),\n animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')\n ])\n ])\n};\n\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nexport const fadeInItems = matMenuAnimations.fadeInItems;\n\n/**\n * @deprecated\n * @breaking-change 8.0.0\n * @docs-private\n */\nexport const transformMenu = matMenuAnimations.transformMenu;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {\n MatCommonModule,\n MatLineModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n} from '@angular/material/core';\nimport {\n MatList,\n MatNavList,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListItem,\n MatListSubheaderCssMatStyler,\n} from './list';\nimport {MatListOption, MatSelectionList} from './selection-list';\nimport {MatDividerModule} from '@angular/material/divider';\n\n\n@NgModule({\n imports: [MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule, CommonModule],\n exports: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatLineModule,\n MatCommonModule,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatPseudoCheckboxModule,\n MatSelectionList,\n MatListOption,\n MatDividerModule\n ],\n declarations: [\n MatList,\n MatNavList,\n MatListItem,\n MatListAvatarCssMatStyler,\n MatListIconCssMatStyler,\n MatListSubheaderCssMatStyler,\n MatSelectionList,\n MatListOption\n ],\n})\nexport class MatListModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusableOption, FocusKeyManager} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n SPACE,\n ENTER,\n HOME,\n END,\n UP_ARROW,\n DOWN_ARROW,\n A,\n hasModifierKey,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport {\n CanDisableRipple, CanDisableRippleCtor,\n MatLine,\n setLines,\n mixinDisableRipple,\n ThemePalette,\n} from '@angular/material/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {MatListAvatarCssMatStyler, MatListIconCssMatStyler} from './list';\n\n\n/** @docs-private */\nclass MatSelectionListBase {}\nconst _MatSelectionListMixinBase: CanDisableRippleCtor & typeof MatSelectionListBase =\n mixinDisableRipple(MatSelectionListBase);\n\n/** @docs-private */\nclass MatListOptionBase {}\nconst _MatListOptionMixinBase: CanDisableRippleCtor & typeof MatListOptionBase =\n mixinDisableRipple(MatListOptionBase);\n\n/** @docs-private */\nexport const MAT_SELECTION_LIST_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSelectionList),\n multi: true\n};\n\n/** Change event that is being fired whenever the selected state of an option changes. */\nexport class MatSelectionListChange {\n constructor(\n /** Reference to the selection list that emitted the event. */\n public source: MatSelectionList,\n /** Reference to the option that has been changed. */\n public option: MatListOption) {}\n}\n\n/**\n * Component for list-options of selection-list. Each list-option can automatically\n * generate a checkbox and can put current item into the selectionModel of selection-list\n * if the current item is selected.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-list-option',\n exportAs: 'matListOption',\n inputs: ['disableRipple'],\n host: {\n 'role': 'option',\n 'class': 'mat-list-item mat-list-option',\n '(focus)': '_handleFocus()',\n '(blur)': '_handleBlur()',\n '(click)': '_handleClick()',\n 'tabindex': '-1',\n '[class.mat-list-item-disabled]': 'disabled',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n // Manually set the \"primary\" or \"warn\" class if the color has been explicitly\n // set to \"primary\" or \"warn\". The pseudo checkbox picks up these classes for\n // its theme. The accent theme palette is the default and doesn't need to be set.\n '[class.mat-primary]': 'color === \"primary\"',\n '[class.mat-warn]': 'color === \"warn\"',\n '[attr.aria-selected]': 'selected',\n '[attr.aria-disabled]': 'disabled',\n },\n templateUrl: 'list-option.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListOption extends _MatListOptionMixinBase\n implements AfterContentInit, OnDestroy, OnInit, FocusableOption, CanDisableRipple {\n\n private _selected = false;\n private _disabled = false;\n private _hasFocus = false;\n\n @ContentChild(MatListAvatarCssMatStyler, {static: false}) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler, {static: false}) _icon: MatListIconCssMatStyler;\n @ContentChildren(MatLine) _lines: QueryList<MatLine>;\n\n /** DOM element containing the item's text. */\n @ViewChild('text', {static: false}) _text: ElementRef;\n\n /** Whether the label should appear before or after the checkbox. Defaults to 'after' */\n @Input() checkboxPosition: 'before' | 'after' = 'after';\n\n /** Theme color of the list option. This sets the color of the checkbox. */\n @Input()\n get color(): ThemePalette { return this._color || this.selectionList.color; }\n set color(newValue: ThemePalette) { this._color = newValue; }\n private _color: ThemePalette;\n\n /** Value of the option */\n @Input()\n get value(): any { return this._value; }\n set value(newValue: any) {\n if (this.selected && newValue !== this.value) {\n this.selected = false;\n }\n\n this._value = newValue;\n }\n private _value: any;\n\n /** Whether the option is disabled. */\n @Input()\n get disabled() { return this._disabled || (this.selectionList && this.selectionList.disabled); }\n set disabled(value: any) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._changeDetector.markForCheck();\n }\n }\n\n /** Whether the option is selected. */\n @Input()\n get selected(): boolean { return this.selectionList.selectedOptions.isSelected(this); }\n set selected(value: boolean) {\n const isSelected = coerceBooleanProperty(value);\n\n if (isSelected !== this._selected) {\n this._setSelected(isSelected);\n this.selectionList._reportValueChange();\n }\n }\n\n constructor(private _element: ElementRef<HTMLElement>,\n private _changeDetector: ChangeDetectorRef,\n /** @docs-private */\n @Inject(forwardRef(() => MatSelectionList)) public selectionList: MatSelectionList) {\n super();\n }\n\n ngOnInit() {\n const list = this.selectionList;\n\n if (list._value && list._value.some(value => list.compareWith(value, this._value))) {\n this._setSelected(true);\n }\n\n const wasSelected = this._selected;\n\n // List options that are selected at initialization can't be reported properly to the form\n // control. This is because it takes some time until the selection-list knows about all\n // available options. Also it can happen that the ControlValueAccessor has an initial value\n // that should be used instead. Deferring the value change report to the next tick ensures\n // that the form control value is not being overwritten.\n Promise.resolve().then(() => {\n if (this._selected || wasSelected) {\n this.selected = true;\n this._changeDetector.markForCheck();\n }\n });\n }\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy(): void {\n if (this.selected) {\n // We have to delay this until the next tick in order\n // to avoid changed after checked errors.\n Promise.resolve().then(() => {\n this.selected = false;\n });\n }\n\n const hadFocus = this._hasFocus;\n const newActiveItem = this.selectionList._removeOptionFromList(this);\n\n // Only move focus if this option was focused at the time it was destroyed.\n if (hadFocus && newActiveItem) {\n newActiveItem.focus();\n }\n }\n\n /** Toggles the selection state of the option. */\n toggle(): void {\n this.selected = !this.selected;\n }\n\n /** Allows for programmatic focusing of the option. */\n focus(): void {\n this._element.nativeElement.focus();\n }\n\n /**\n * Returns the list item's text label. Implemented as a part of the FocusKeyManager.\n * @docs-private\n */\n getLabel() {\n return this._text ? (this._text.nativeElement.textContent || '') : '';\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return this.disabled || this.disableRipple || this.selectionList.disableRipple;\n }\n\n _handleClick() {\n if (!this.disabled) {\n this.toggle();\n\n // Emit a change event if the selected state of the option changed through user interaction.\n this.selectionList._emitChangeEvent(this);\n }\n }\n\n _handleFocus() {\n this.selectionList._setFocusedOption(this);\n this._hasFocus = true;\n }\n\n _handleBlur() {\n this.selectionList._onTouched();\n this._hasFocus = false;\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\n }\n\n /** Sets the selected state of the option. Returns whether the value has changed. */\n _setSelected(selected: boolean): boolean {\n if (selected === this._selected) {\n return false;\n }\n\n this._selected = selected;\n\n if (selected) {\n this.selectionList.selectedOptions.select(this);\n } else {\n this.selectionList.selectedOptions.deselect(this);\n }\n\n this._changeDetector.markForCheck();\n return true;\n }\n\n /**\n * Notifies Angular that the option needs to be checked in the next change detection run. Mainly\n * used to trigger an update of the list option if the disabled state of the selection list\n * changed.\n */\n _markForCheck() {\n this._changeDetector.markForCheck();\n }\n}\n\n\n/**\n * Material Design list component where each item is a selectable option. Behaves as a listbox.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-selection-list',\n exportAs: 'matSelectionList',\n inputs: ['disableRipple'],\n host: {\n 'role': 'listbox',\n '[tabIndex]': 'tabIndex',\n 'class': 'mat-selection-list mat-list-base',\n '(blur)': '_onTouched()',\n '(keydown)': '_keydown($event)',\n 'aria-multiselectable': 'true',\n '[attr.aria-disabled]': 'disabled.toString()',\n },\n template: '<ng-content></ng-content>',\n styleUrls: ['list.css'],\n encapsulation: ViewEncapsulation.None,\n providers: [MAT_SELECTION_LIST_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatSelectionList extends _MatSelectionListMixinBase implements FocusableOption,\n CanDisableRipple, AfterContentInit, ControlValueAccessor, OnDestroy, OnChanges {\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<MatListOption>;\n\n /** The option components contained within this selection-list. */\n @ContentChildren(MatListOption, {descendants: true}) options: QueryList<MatListOption>;\n\n /** Emits a change event whenever the selected state of an option changes. */\n @Output() readonly selectionChange: EventEmitter<MatSelectionListChange> =\n new EventEmitter<MatSelectionListChange>();\n\n /** Tabindex of the selection list. */\n @Input() tabIndex: number = 0;\n\n /** Theme color of the selection list. This sets the checkbox color for all list options. */\n @Input() color: ThemePalette = 'accent';\n\n /**\n * Function used for comparing an option against the selected value when determining which\n * options should appear as selected. The first argument is the value of an options. The second\n * one is a value from the selected value. A boolean must be returned.\n */\n @Input() compareWith: (o1: any, o2: any) => boolean = (a1, a2) => a1 === a2;\n\n /** Whether the selection list is disabled. */\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // The `MatSelectionList` and `MatListOption` are using the `OnPush` change detection\n // strategy. Therefore the options will not check for any changes if the `MatSelectionList`\n // changed its state. Since we know that a change to `disabled` property of the list affects\n // the state of the options, we manually mark each option for check.\n this._markOptionsForCheck();\n }\n private _disabled: boolean = false;\n\n /** The currently selected options. */\n selectedOptions: SelectionModel<MatListOption> = new SelectionModel<MatListOption>(true);\n\n /** View to model callback that should be called whenever the selected options change. */\n private _onChange: (value: any) => void = (_: any) => {};\n\n /** Keeps track of the currently-selected value. */\n _value: string[]|null;\n\n /** Emits when the list has been destroyed. */\n private _destroyed = new Subject<void>();\n\n /** View to model callback that should be called if the list or its options lost focus. */\n _onTouched: () => void = () => {};\n\n /** Whether the list has been destroyed. */\n private _isDestroyed: boolean;\n\n constructor(private _element: ElementRef<HTMLElement>, @Attribute('tabindex') tabIndex: string) {\n super();\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n\n ngAfterContentInit(): void {\n this._keyManager = new FocusKeyManager<MatListOption>(this.options)\n .withWrap()\n .withTypeAhead()\n // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n // screenreader users, that allows reading the different options of the list.\n .skipPredicate(() => false)\n .withAllowedModifierKeys(['shiftKey']);\n\n if (this._value) {\n this._setOptionsFromValues(this._value);\n }\n\n // Sync external changes to the model back to the options.\n this.selectedOptions.onChange.pipe(takeUntil(this._destroyed)).subscribe(event => {\n if (event.added) {\n for (let item of event.added) {\n item.selected = true;\n }\n }\n\n if (event.removed) {\n for (let item of event.removed) {\n item.selected = false;\n }\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const disableRippleChanges = changes['disableRipple'];\n const colorChanges = changes['color'];\n\n if ((disableRippleChanges && !disableRippleChanges.firstChange) ||\n (colorChanges && !colorChanges.firstChange)) {\n this._markOptionsForCheck();\n }\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._isDestroyed = true;\n }\n\n /** Focuses the selection list. */\n focus() {\n this._element.nativeElement.focus();\n }\n\n /** Selects all of the options. */\n selectAll() {\n this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. */\n deselectAll() {\n this._setAllOptionsSelected(false);\n }\n\n /** Sets the focused option of the selection-list. */\n _setFocusedOption(option: MatListOption) {\n this._keyManager.updateActiveItem(option);\n }\n\n /**\n * Removes an option from the selection list and updates the active item.\n * @returns Currently-active item.\n */\n _removeOptionFromList(option: MatListOption): MatListOption | null {\n const optionIndex = this._getOptionIndex(option);\n\n if (optionIndex > -1 && this._keyManager.activeItemIndex === optionIndex) {\n // Check whether the option is the last item\n if (optionIndex > 0) {\n this._keyManager.updateActiveItem(optionIndex - 1);\n } else if (optionIndex === 0 && this.options.length > 1) {\n this._keyManager.updateActiveItem(Math.min(optionIndex + 1, this.options.length - 1));\n }\n }\n\n return this._keyManager.activeItem;\n }\n\n /** Passes relevant key presses to our key manager. */\n _keydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n const previousFocusIndex = manager.activeItemIndex;\n const hasModifier = hasModifierKey(event);\n\n switch (keyCode) {\n case SPACE:\n case ENTER:\n if (!hasModifier) {\n this._toggleFocusedOption();\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n }\n break;\n case HOME:\n case END:\n if (!hasModifier) {\n keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();\n event.preventDefault();\n }\n break;\n case A:\n if (hasModifierKey(event, 'ctrlKey')) {\n this.options.find(option => !option.selected) ? this.selectAll() : this.deselectAll();\n event.preventDefault();\n }\n break;\n default:\n manager.onKeydown(event);\n }\n\n if ((keyCode === UP_ARROW || keyCode === DOWN_ARROW) && event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex) {\n this._toggleFocusedOption();\n }\n }\n\n /** Reports a value change to the ControlValueAccessor */\n _reportValueChange() {\n // Stop reporting value changes after the list has been destroyed. This avoids\n // cases where the list might wrongly reset its value once it is removed, but\n // the form control is still live.\n if (this.options && !this._isDestroyed) {\n const value = this._getSelectedOptionValues();\n this._onChange(value);\n this._value = value;\n }\n }\n\n /** Emits a change event if the selected state of an option changed. */\n _emitChangeEvent(option: MatListOption) {\n this.selectionChange.emit(new MatSelectionListChange(this, option));\n }\n\n /** Implemented as part of ControlValueAccessor. */\n writeValue(values: string[]): void {\n this._value = values;\n\n if (this.options) {\n this._setOptionsFromValues(values || []);\n }\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** Sets the selected options based on the specified values. */\n private _setOptionsFromValues(values: string[]) {\n this.options.forEach(option => option._setSelected(false));\n\n values.forEach(value => {\n const correspondingOption = this.options.find(option => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n return option.selected ? false : this.compareWith(option.value, value);\n });\n\n if (correspondingOption) {\n correspondingOption._setSelected(true);\n }\n });\n }\n\n /** Returns the values of the selected options. */\n private _getSelectedOptionValues(): string[] {\n return this.options.filter(option => option.selected).map(option => option.value);\n }\n\n /** Toggles the state of the currently focused option if enabled. */\n private _toggleFocusedOption(): void {\n let focusedIndex = this._keyManager.activeItemIndex;\n\n if (focusedIndex != null && this._isValidIndex(focusedIndex)) {\n let focusedOption: MatListOption = this.options.toArray()[focusedIndex];\n\n if (focusedOption && !focusedOption.disabled) {\n focusedOption.toggle();\n\n // Emit a change event because the focused option changed its state through user\n // interaction.\n this._emitChangeEvent(focusedOption);\n }\n }\n }\n\n /**\n * Sets the selected state on all of the options\n * and emits an event if anything changed.\n */\n private _setAllOptionsSelected(isSelected: boolean) {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n let hasChanged = false;\n\n this.options.forEach(option => {\n if (option._setSelected(isSelected)) {\n hasChanged = true;\n }\n });\n\n if (hasChanged) {\n this._reportValueChange();\n }\n }\n\n /**\n * Utility to ensure all indexes are valid.\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of options.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.options.length;\n }\n\n /** Returns the index of the specified list option. */\n private _getOptionIndex(option: MatListOption): number {\n return this.options.toArray().indexOf(option);\n }\n\n /** Marks all the options to be checked in the next change detection run. */\n private _markOptionsForCheck() {\n if (this.options) {\n this.options.forEach(option => option._markForCheck());\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 {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n Optional,\n QueryList,\n ViewEncapsulation,\n OnChanges,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n CanDisableRipple,\n CanDisableRippleCtor,\n MatLine,\n setLines,\n mixinDisableRipple,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nclass MatListBase {}\nconst _MatListMixinBase: CanDisableRippleCtor & typeof MatListBase =\n mixinDisableRipple(MatListBase);\n\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nclass MatListItemBase {}\nconst _MatListItemMixinBase: CanDisableRippleCtor & typeof MatListItemBase =\n mixinDisableRipple(MatListItemBase);\n\n@Component({\n moduleId: module.id,\n selector: 'mat-nav-list',\n exportAs: 'matNavList',\n host: {\n 'role': 'navigation',\n 'class': 'mat-nav-list mat-list-base'\n },\n templateUrl: 'list.html',\n styleUrls: ['list.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatNavList extends _MatListMixinBase implements CanDisableRipple, OnChanges,\n OnDestroy {\n /** Emits when the state of the list changes. */\n _stateChanges = new Subject<void>();\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-list, mat-action-list',\n exportAs: 'matList',\n templateUrl: 'list.html',\n host: {\n 'class': 'mat-list mat-list-base'\n },\n styleUrls: ['list.css'],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatList extends _MatListMixinBase implements CanDisableRipple, OnChanges, OnDestroy {\n /** Emits when the state of the list changes. */\n _stateChanges = new Subject<void>();\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {\n super();\n\n if (this._getListType() === 'action-list') {\n _elementRef.nativeElement.classList.add('mat-action-list');\n }\n }\n\n _getListType(): 'list' | 'action-list' | null {\n const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n\n if (nodeName === 'mat-list') {\n return 'list';\n }\n\n if (nodeName === 'mat-action-list') {\n return 'action-list';\n }\n\n return null;\n }\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-avatar], [matListAvatar]',\n host: {'class': 'mat-list-avatar'}\n})\nexport class MatListAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-list-icon], [matListIcon]',\n host: {'class': 'mat-list-icon'}\n})\nexport class MatListIconCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-subheader], [matSubheader]',\n host: {'class': 'mat-subheader'}\n})\nexport class MatListSubheaderCssMatStyler {}\n\n/** An item within a Material Design list. */\n@Component({\n moduleId: module.id,\n selector: 'mat-list-item, a[mat-list-item], button[mat-list-item]',\n exportAs: 'matListItem',\n host: {\n 'class': 'mat-list-item',\n // @breaking-change 8.0.0 Remove `mat-list-item-avatar` in favor of `mat-list-item-with-avatar`.\n '[class.mat-list-item-avatar]': '_avatar || _icon',\n '[class.mat-list-item-with-avatar]': '_avatar || _icon',\n },\n inputs: ['disableRipple'],\n templateUrl: 'list-item.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatListItem extends _MatListItemMixinBase implements AfterContentInit,\n CanDisableRipple, OnDestroy {\n private _isInteractiveList: boolean = false;\n private _list?: MatNavList | MatList;\n private _destroyed = new Subject<void>();\n\n @ContentChildren(MatLine, {descendants: true}) _lines: QueryList<MatLine>;\n @ContentChild(MatListAvatarCssMatStyler, {static: false}) _avatar: MatListAvatarCssMatStyler;\n @ContentChild(MatListIconCssMatStyler, {static: false}) _icon: MatListIconCssMatStyler;\n\n constructor(private _element: ElementRef<HTMLElement>,\n _changeDetectorRef: ChangeDetectorRef,\n @Optional() navList?: MatNavList,\n @Optional() list?: MatList) {\n super();\n this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n this._list = navList || list;\n\n // If no type attributed is specified for <button>, set it to \"button\".\n // If a type attribute is already specified, do nothing.\n const element = this._getHostElement();\n\n if (element.nodeName.toLowerCase() === 'button' && !element.hasAttribute('type')) {\n element.setAttribute('type', 'button');\n }\n\n if (this._list) {\n // React to changes in the state of the parent list since\n // some of the item's properties depend on it (e.g. `disableRipple`).\n this._list._stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => {\n _changeDetectorRef.markForCheck();\n });\n }\n }\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Whether this list item should show a ripple effect when clicked. */\n _isRippleDisabled() {\n return !this._isInteractiveList || this.disableRipple ||\n !!(this._list && this._list.disableRipple);\n }\n\n /** Retrieves the DOM element of the component host. */\n _getHostElement(): HTMLElement {\n return this._element.nativeElement;\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 {MatCommonModule} from '@angular/material/core';\nimport {MatIcon} from './icon';\n\n\n@NgModule({\n imports: [MatCommonModule],\n exports: [MatIcon, MatCommonModule],\n declarations: [MatIcon],\n})\nexport class MatIconModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {take} from 'rxjs/operators';\nimport {\n Attribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewEncapsulation,\n Optional,\n InjectionToken,\n inject,\n Inject,\n OnDestroy,\n AfterViewChecked,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {CanColor, CanColorCtor, mixinColor} from '@angular/material/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatIconRegistry} from './icon-registry';\n\n\n// Boilerplate for applying mixins to MatIcon.\n/** @docs-private */\nclass MatIconBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatIconMixinBase: CanColorCtor & typeof MatIconBase = mixinColor(MatIconBase);\n\n/**\n * Injection token used to provide the current location to `MatIcon`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nexport const MAT_ICON_LOCATION = new InjectionToken<MatIconLocation>('mat-icon-location', {\n providedIn: 'root',\n factory: MAT_ICON_LOCATION_FACTORY\n});\n\n/**\n * Stubbed out location for `MatIcon`.\n * @docs-private\n */\nexport interface MatIconLocation {\n getPathname: () => string;\n}\n\n/** @docs-private */\nexport function MAT_ICON_LOCATION_FACTORY(): MatIconLocation {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? (_location.pathname + _location.search) : ''\n };\n}\n\n\n/** SVG attributes that accept a FuncIRI (e.g. `url(<something>)`). */\nconst funcIriAttributes = [\n 'clip-path',\n 'color-profile',\n 'src',\n 'cursor',\n 'fill',\n 'filter',\n 'marker',\n 'marker-start',\n 'marker-mid',\n 'marker-end',\n 'mask',\n 'stroke'\n];\n\n/** Selector that can be used to find all elements that are using a `FuncIRI`. */\nconst funcIriAttributeSelector = funcIriAttributes.map(attr => `[${attr}]`).join(', ');\n\n/** Regex that can be used to extract the id out of a FuncIRI. */\nconst funcIriPattern = /^url\\(['\"]?#(.*?)['\"]?\\)$/;\n\n/**\n * Component to display an icon. It can be used in the following ways:\n *\n * - Specify the svgIcon input to load an SVG icon from a URL previously registered with the\n * addSvgIcon, addSvgIconInNamespace, addSvgIconSet, or addSvgIconSetInNamespace methods of\n * MatIconRegistry. If the svgIcon value contains a colon it is assumed to be in the format\n * \"[namespace]:[name]\", if not the value will be the name of an icon in the default namespace.\n * Examples:\n * `<mat-icon svgIcon=\"left-arrow\"></mat-icon>\n * <mat-icon svgIcon=\"animals:cat\"></mat-icon>`\n *\n * - Use a font ligature as an icon by putting the ligature text in the content of the `<mat-icon>`\n * component. By default the Material icons font is used as described at\n * http://google.github.io/material-design-icons/#icon-font-for-the-web. You can specify an\n * alternate font by setting the fontSet input to either the CSS class to apply to use the\n * desired font, or to an alias previously registered with MatIconRegistry.registerFontClassAlias.\n * Examples:\n * `<mat-icon>home</mat-icon>\n * <mat-icon fontSet=\"myfont\">sun</mat-icon>`\n *\n * - Specify a font glyph to be included via CSS rules by setting the fontSet input to specify the\n * font, and the fontIcon input to specify the icon. Typically the fontIcon will specify a\n * CSS class which causes the glyph to be displayed via a :before selector, as in\n * https://fortawesome.github.io/Font-Awesome/examples/\n * Example:\n * `<mat-icon fontSet=\"fa\" fontIcon=\"alarm\"></mat-icon>`\n */\n@Component({\n moduleId: module.id,\n template: '<ng-content></ng-content>',\n selector: 'mat-icon',\n exportAs: 'matIcon',\n styleUrls: ['icon.css'],\n inputs: ['color'],\n host: {\n 'role': 'img',\n 'class': 'mat-icon notranslate',\n '[class.mat-icon-inline]': 'inline',\n '[class.mat-icon-no-color]': 'color !== \"primary\" && color !== \"accent\" && color !== \"warn\"',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatIcon extends _MatIconMixinBase implements OnChanges, OnInit, AfterViewChecked,\n CanColor, OnDestroy {\n\n /**\n * Whether the icon should be inlined, automatically sizing the icon to match the font size of\n * the element the icon is contained in.\n */\n @Input()\n get inline(): boolean {\n return this._inline;\n }\n set inline(inline: boolean) {\n this._inline = coerceBooleanProperty(inline);\n }\n private _inline: boolean = false;\n\n /** Name of the icon in the SVG icon set. */\n @Input() svgIcon: string;\n\n /** Font set that the icon is a part of. */\n @Input()\n get fontSet(): string { return this._fontSet; }\n set fontSet(value: string) {\n this._fontSet = this._cleanupFontValue(value);\n }\n private _fontSet: string;\n\n /** Name of an icon within a font set. */\n @Input()\n get fontIcon(): string { return this._fontIcon; }\n set fontIcon(value: string) {\n this._fontIcon = this._cleanupFontValue(value);\n }\n private _fontIcon: string;\n\n private _previousFontSetClass: string;\n private _previousFontIconClass: string;\n\n /** Keeps track of the current page path. */\n private _previousPath?: string;\n\n /** Keeps track of the elements and attributes that we've prefixed with the current path. */\n private _elementsWithExternalReferences?: Map<Element, {name: string, value: string}[]>;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private _iconRegistry: MatIconRegistry,\n @Attribute('aria-hidden') ariaHidden: string,\n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n @Optional() @Inject(MAT_ICON_LOCATION) private _location?: MatIconLocation) {\n super(elementRef);\n\n // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is\n // the right thing to do for the majority of icon use-cases.\n if (!ariaHidden) {\n elementRef.nativeElement.setAttribute('aria-hidden', 'true');\n }\n }\n\n /**\n * Splits an svgIcon binding value into its icon set and icon name components.\n * Returns a 2-element array of [(icon set), (icon name)].\n * The separator for the two fields is ':'. If there is no separator, an empty\n * string is returned for the icon set and the entire value is returned for\n * the icon name. If the argument is falsy, returns an array of two empty strings.\n * Throws an error if the name contains two or more ':' separators.\n * Examples:\n * `'social:cake' -> ['social', 'cake']\n * 'penguin' -> ['', 'penguin']\n * null -> ['', '']\n * 'a:b:c' -> (throws Error)`\n */\n private _splitIconName(iconName: string): [string, string] {\n if (!iconName) {\n return ['', ''];\n }\n const parts = iconName.split(':');\n switch (parts.length) {\n case 1: return ['', parts[0]]; // Use default namespace.\n case 2: return <[string, string]>parts;\n default: throw Error(`Invalid icon name: \"${iconName}\"`);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Only update the inline SVG icon if the inputs changed, to avoid unnecessary DOM operations.\n const svgIconChanges = changes['svgIcon'];\n\n if (svgIconChanges) {\n if (this.svgIcon) {\n const [namespace, iconName] = this._splitIconName(this.svgIcon);\n\n this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe(\n svg => this._setSvgElement(svg),\n (err: Error) => console.log(`Error retrieving icon: ${err.message}`)\n );\n } else if (svgIconChanges.previousValue) {\n this._clearSvgElement();\n }\n }\n\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n }\n\n ngOnInit() {\n // Update font classes because ngOnChanges won't be called if none of the inputs are present,\n // e.g. <mat-icon>arrow</mat-icon> In this case we need to add a CSS class for the default font.\n if (this._usingFontIcon()) {\n this._updateFontIconClasses();\n }\n }\n\n ngAfterViewChecked() {\n const cachedElements = this._elementsWithExternalReferences;\n\n if (cachedElements && this._location && cachedElements.size) {\n const newPath = this._location.getPathname();\n\n // We need to check whether the URL has changed on each change detection since\n // the browser doesn't have an API that will let us react on link clicks and\n // we can't depend on the Angular router. The references need to be updated,\n // because while most browsers don't care whether the URL is correct after\n // the first render, Safari will break if the user navigates to a different\n // page and the SVG isn't re-rendered.\n if (newPath !== this._previousPath) {\n this._previousPath = newPath;\n this._prependPathToReferences(newPath);\n }\n }\n }\n\n ngOnDestroy() {\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n }\n\n private _usingFontIcon(): boolean {\n return !this.svgIcon;\n }\n\n private _setSvgElement(svg: SVGElement) {\n this._clearSvgElement();\n\n // Workaround for IE11 and Edge ignoring `style` tags inside dynamically-created SVGs.\n // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10898469/\n // Do this before inserting the element into the DOM, in order to avoid a style recalculation.\n const styleTags = svg.querySelectorAll('style') as NodeListOf<HTMLStyleElement>;\n\n for (let i = 0; i < styleTags.length; i++) {\n styleTags[i].textContent += ' ';\n }\n\n // Note: we do this fix here, rather than the icon registry, because the\n // references have to point to the URL at the time that the icon was created.\n if (this._location) {\n const path = this._location.getPathname();\n this._previousPath = path;\n this._cacheChildrenWithExternalReferences(svg);\n this._prependPathToReferences(path);\n }\n\n this._elementRef.nativeElement.appendChild(svg);\n }\n\n private _clearSvgElement() {\n const layoutElement: HTMLElement = this._elementRef.nativeElement;\n let childCount = layoutElement.childNodes.length;\n\n if (this._elementsWithExternalReferences) {\n this._elementsWithExternalReferences.clear();\n }\n\n // Remove existing non-element child nodes and SVGs, and add the new SVG element. Note that\n // we can't use innerHTML, because IE will throw if the element has a data binding.\n while (childCount--) {\n const child = layoutElement.childNodes[childCount];\n\n // 1 corresponds to Node.ELEMENT_NODE. We remove all non-element nodes in order to get rid\n // of any loose text nodes, as well as any SVG elements in order to remove any old icons.\n if (child.nodeType !== 1 || child.nodeName.toLowerCase() === 'svg') {\n layoutElement.removeChild(child);\n }\n }\n }\n\n private _updateFontIconClasses() {\n if (!this._usingFontIcon()) {\n return;\n }\n\n const elem: HTMLElement = this._elementRef.nativeElement;\n const fontSetClass = this.fontSet ?\n this._iconRegistry.classNameForFontAlias(this.fontSet) :\n this._iconRegistry.getDefaultFontSetClass();\n\n if (fontSetClass != this._previousFontSetClass) {\n if (this._previousFontSetClass) {\n elem.classList.remove(this._previousFontSetClass);\n }\n if (fontSetClass) {\n elem.classList.add(fontSetClass);\n }\n this._previousFontSetClass = fontSetClass;\n }\n\n if (this.fontIcon != this._previousFontIconClass) {\n if (this._previousFontIconClass) {\n elem.classList.remove(this._previousFontIconClass);\n }\n if (this.fontIcon) {\n elem.classList.add(this.fontIcon);\n }\n this._previousFontIconClass = this.fontIcon;\n }\n }\n\n /**\n * Cleans up a value to be used as a fontIcon or fontSet.\n * Since the value ends up being assigned as a CSS class, we\n * have to trim the value and omit space-separated values.\n */\n private _cleanupFontValue(value: string) {\n return typeof value === 'string' ? value.trim().split(' ')[0] : value;\n }\n\n /**\n * Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`\n * reference. This is required because WebKit browsers require references to be prefixed with\n * the current path, if the page has a `base` tag.\n */\n private _prependPathToReferences(path: string) {\n const elements = this._elementsWithExternalReferences;\n\n if (elements) {\n elements.forEach((attrs, element) => {\n attrs.forEach(attr => {\n element.setAttribute(attr.name, `url('${path}#${attr.value}')`);\n });\n });\n }\n }\n\n /**\n * Caches the children of an SVG element that have `url()`\n * references that we need to prefix with the current path.\n */\n private _cacheChildrenWithExternalReferences(element: SVGElement) {\n const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);\n const elements = this._elementsWithExternalReferences =\n this._elementsWithExternalReferences || new Map();\n\n for (let i = 0; i < elementsWithFuncIri.length; i++) {\n funcIriAttributes.forEach(attr => {\n const elementWithReference = elementsWithFuncIri[i];\n const value = elementWithReference.getAttribute(attr);\n const match = value ? value.match(funcIriPattern) : null;\n\n if (match) {\n let attributes = elements.get(elementWithReference);\n\n if (!attributes) {\n attributes = [];\n elements.set(elementWithReference, attributes);\n }\n\n attributes!.push({name: attr, value: match[1]});\n }\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 {DOCUMENT} from '@angular/common';\nimport {HttpClient, HttpErrorResponse} from '@angular/common/http';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Optional,\n SecurityContext,\n SkipSelf,\n OnDestroy,\n} from '@angular/core';\nimport {DomSanitizer, SafeResourceUrl, SafeHtml} from '@angular/platform-browser';\nimport {forkJoin, Observable, of as observableOf, throwError as observableThrow} from 'rxjs';\nimport {catchError, finalize, map, share, tap} from 'rxjs/operators';\n\n\n/**\n * Returns an exception to be thrown in the case when attempting to\n * load an icon with a name that cannot be found.\n * @docs-private\n */\nexport function getMatIconNameNotFoundError(iconName: string): Error {\n return Error(`Unable to find icon with the name \"${iconName}\"`);\n}\n\n\n/**\n * Returns an exception to be thrown when the consumer attempts to use\n * `<mat-icon>` without including @angular/common/http.\n * @docs-private\n */\nexport function getMatIconNoHttpProviderError(): Error {\n return Error('Could not find HttpClient provider for use with Angular Material icons. ' +\n 'Please include the HttpClientModule from @angular/common/http in your ' +\n 'app imports.');\n}\n\n\n/**\n * Returns an exception to be thrown when a URL couldn't be sanitized.\n * @param url URL that was attempted to be sanitized.\n * @docs-private\n */\nexport function getMatIconFailedToSanitizeUrlError(url: SafeResourceUrl): Error {\n return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL ` +\n `via Angular's DomSanitizer. Attempted URL was \"${url}\".`);\n}\n\n/**\n * Returns an exception to be thrown when a HTML string couldn't be sanitized.\n * @param literal HTML that was attempted to be sanitized.\n * @docs-private\n */\nexport function getMatIconFailedToSanitizeLiteralError(literal: SafeHtml): Error {\n return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by ` +\n `Angular's DomSanitizer. Attempted literal was \"${literal}\".`);\n}\n\n\n/**\n * Configuration for an icon, including the URL and possibly the cached SVG element.\n * @docs-private\n */\nclass SvgIconConfig {\n url: SafeResourceUrl | null;\n svgElement: SVGElement | null;\n\n constructor(url: SafeResourceUrl);\n constructor(svgElement: SVGElement);\n constructor(data: SafeResourceUrl | SVGElement) {\n // Note that we can't use `instanceof SVGElement` here,\n // because it'll break during server-side rendering.\n if (!!(data as any).nodeName) {\n this.svgElement = data as SVGElement;\n } else {\n this.url = data as SafeResourceUrl;\n }\n }\n}\n\n/**\n * Service to register and display icons used by the `<mat-icon>` component.\n * - Registers icon URLs by namespace and name.\n * - Registers icon set URLs by namespace.\n * - Registers aliases for CSS classes, for use with icon fonts.\n * - Loads icons from URLs and extracts individual icons from icon sets.\n */\n@Injectable({providedIn: 'root'})\nexport class MatIconRegistry implements OnDestroy {\n private _document: Document;\n\n /**\n * URLs and cached SVG elements for individual icons. Keys are of the format \"[namespace]:[icon]\".\n */\n private _svgIconConfigs = new Map<string, SvgIconConfig>();\n\n /**\n * SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.\n * Multiple icon sets can be registered under the same namespace.\n */\n private _iconSetConfigs = new Map<string, SvgIconConfig[]>();\n\n /** Cache for icons loaded by direct URLs. */\n private _cachedIconsByUrl = new Map<string, SVGElement>();\n\n /** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */\n private _inProgressUrlFetches = new Map<string, Observable<string>>();\n\n /** Map from font identifiers to their CSS class names. Used for icon fonts. */\n private _fontCssClassesByAlias = new Map<string, string>();\n\n /**\n * The CSS class to apply when an `<mat-icon>` component has no icon name, url, or font specified.\n * The default 'material-icons' value assumes that the material icon font has been loaded as\n * described at http://google.github.io/material-design-icons/#icon-font-for-the-web\n */\n private _defaultFontSetClass = 'material-icons';\n\n constructor(\n @Optional() private _httpClient: HttpClient,\n private _sanitizer: DomSanitizer,\n @Optional() @Inject(DOCUMENT) document: any) {\n this._document = document;\n }\n\n /**\n * Registers an icon by URL in the default namespace.\n * @param iconName Name under which the icon should be registered.\n * @param url\n */\n addSvgIcon(iconName: string, url: SafeResourceUrl): this {\n return this.addSvgIconInNamespace('', iconName, url);\n }\n\n /**\n * Registers an icon using an HTML string in the default namespace.\n * @param iconName Name under which the icon should be registered.\n * @param literal SVG source of the icon.\n */\n addSvgIconLiteral(iconName: string, literal: SafeHtml): this {\n return this.addSvgIconLiteralInNamespace('', iconName, literal);\n }\n\n /**\n * Registers an icon by URL in the specified namespace.\n * @param namespace Namespace in which the icon should be registered.\n * @param iconName Name under which the icon should be registered.\n * @param url\n */\n addSvgIconInNamespace(namespace: string, iconName: string, url: SafeResourceUrl): this {\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url));\n }\n\n /**\n * Registers an icon using an HTML string in the specified namespace.\n * @param namespace Namespace in which the icon should be registered.\n * @param iconName Name under which the icon should be registered.\n * @param literal SVG source of the icon.\n */\n addSvgIconLiteralInNamespace(namespace: string, iconName: string, literal: SafeHtml): this {\n const sanitizedLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n\n if (!sanitizedLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n\n const svgElement = this._createSvgElementForSingleIcon(sanitizedLiteral);\n return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(svgElement));\n }\n\n /**\n * Registers an icon set by URL in the default namespace.\n * @param url\n */\n addSvgIconSet(url: SafeResourceUrl): this {\n return this.addSvgIconSetInNamespace('', url);\n }\n\n /**\n * Registers an icon set using an HTML string in the default namespace.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteral(literal: SafeHtml): this {\n return this.addSvgIconSetLiteralInNamespace('', literal);\n }\n\n /**\n * Registers an icon set by URL in the specified namespace.\n * @param namespace Namespace in which to register the icon set.\n * @param url\n */\n addSvgIconSetInNamespace(namespace: string, url: SafeResourceUrl): this {\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url));\n }\n\n /**\n * Registers an icon set using an HTML string in the specified namespace.\n * @param namespace Namespace in which to register the icon set.\n * @param literal SVG source of the icon set.\n */\n addSvgIconSetLiteralInNamespace(namespace: string, literal: SafeHtml): this {\n const sanitizedLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);\n\n if (!sanitizedLiteral) {\n throw getMatIconFailedToSanitizeLiteralError(literal);\n }\n\n const svgElement = this._svgElementFromString(sanitizedLiteral);\n return this._addSvgIconSetConfig(namespace, new SvgIconConfig(svgElement));\n }\n\n /**\n * Defines an alias for a CSS class name to be used for icon fonts. Creating an matIcon\n * component with the alias as the fontSet input will cause the class name to be applied\n * to the `<mat-icon>` element.\n *\n * @param alias Alias for the font.\n * @param className Class name override to be used instead of the alias.\n */\n registerFontClassAlias(alias: string, className: string = alias): this {\n this._fontCssClassesByAlias.set(alias, className);\n return this;\n }\n\n /**\n * Returns the CSS class name associated with the alias by a previous call to\n * registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.\n */\n classNameForFontAlias(alias: string): string {\n return this._fontCssClassesByAlias.get(alias) || alias;\n }\n\n /**\n * Sets the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n *\n * @param className\n */\n setDefaultFontSetClass(className: string): this {\n this._defaultFontSetClass = className;\n return this;\n }\n\n /**\n * Returns the CSS class name to be used for icon fonts when an `<mat-icon>` component does not\n * have a fontSet input value, and is not loading an icon by name or URL.\n */\n getDefaultFontSetClass(): string {\n return this._defaultFontSetClass;\n }\n\n /**\n * Returns an Observable that produces the icon (as an `<svg>` DOM element) from the given URL.\n * The response from the URL may be cached so this will not always cause an HTTP request, but\n * the produced element will always be a new copy of the originally fetched icon. (That is,\n * it will not contain any modifications made to elements previously returned).\n *\n * @param safeUrl URL from which to fetch the SVG icon.\n */\n getSvgIconFromUrl(safeUrl: SafeResourceUrl): Observable<SVGElement> {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n\n const cachedIcon = this._cachedIconsByUrl.get(url);\n\n if (cachedIcon) {\n return observableOf(cloneSvg(cachedIcon));\n }\n\n return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl)).pipe(\n tap(svg => this._cachedIconsByUrl.set(url!, svg)),\n map(svg => cloneSvg(svg)),\n );\n }\n\n /**\n * Returns an Observable that produces the icon (as an `<svg>` DOM element) with the given name\n * and namespace. The icon must have been previously registered with addIcon or addIconSet;\n * if not, the Observable will throw an error.\n *\n * @param name Name of the icon to be retrieved.\n * @param namespace Namespace in which to look for the icon.\n */\n getNamedSvgIcon(name: string, namespace: string = ''): Observable<SVGElement> {\n // Return (copy of) cached icon if possible.\n const key = iconKey(namespace, name);\n const config = this._svgIconConfigs.get(key);\n\n if (config) {\n return this._getSvgFromConfig(config);\n }\n\n // See if we have any icon sets registered for the namespace.\n const iconSetConfigs = this._iconSetConfigs.get(namespace);\n\n if (iconSetConfigs) {\n return this._getSvgFromIconSetConfigs(name, iconSetConfigs);\n }\n\n return observableThrow(getMatIconNameNotFoundError(key));\n }\n\n ngOnDestroy() {\n this._svgIconConfigs.clear();\n this._iconSetConfigs.clear();\n this._cachedIconsByUrl.clear();\n }\n\n /**\n * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.\n */\n private _getSvgFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n if (config.svgElement) {\n // We already have the SVG element for this icon, return a copy.\n return observableOf(cloneSvg(config.svgElement));\n } else {\n // Fetch the icon from the config's URL, cache it, and return a copy.\n return this._loadSvgIconFromConfig(config).pipe(\n tap(svg => config.svgElement = svg),\n map(svg => cloneSvg(svg)),\n );\n }\n }\n\n /**\n * Attempts to find an icon with the specified name in any of the SVG icon sets.\n * First searches the available cached icons for a nested element with a matching name, and\n * if found copies the element to a new `<svg>` element. If not found, fetches all icon sets\n * that have not been cached, and searches again after all fetches are completed.\n * The returned Observable produces the SVG element if possible, and throws\n * an error if no icon with the specified name can be found.\n */\n private _getSvgFromIconSetConfigs(name: string, iconSetConfigs: SvgIconConfig[]):\n Observable<SVGElement> {\n // For all the icon set SVG elements we've fetched, see if any contain an icon with the\n // requested name.\n const namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\n if (namedIcon) {\n // We could cache namedIcon in _svgIconConfigs, but since we have to make a copy every\n // time anyway, there's probably not much advantage compared to just always extracting\n // it from the icon set.\n return observableOf(namedIcon);\n }\n\n // Not found in any cached icon sets. If there are icon sets with URLs that we haven't\n // fetched, fetch them now and look for iconName in the results.\n const iconSetFetchRequests: Observable<SVGElement | null>[] = iconSetConfigs\n .filter(iconSetConfig => !iconSetConfig.svgElement)\n .map(iconSetConfig => {\n return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(\n catchError((err: HttpErrorResponse): Observable<SVGElement | null> => {\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);\n\n // Swallow errors fetching individual URLs so the\n // combined Observable won't necessarily fail.\n console.error(`Loading icon set URL: ${url} failed: ${err.message}`);\n return observableOf(null);\n })\n );\n });\n\n // Fetch all the icon set URLs. When the requests complete, every IconSet should have a\n // cached SVG element (unless the request failed), and we can check again for the icon.\n return forkJoin(iconSetFetchRequests).pipe(map(() => {\n const foundIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);\n\n if (!foundIcon) {\n throw getMatIconNameNotFoundError(name);\n }\n\n return foundIcon;\n }));\n }\n\n /**\n * Searches the cached SVG elements for the given icon sets for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n */\n private _extractIconWithNameFromAnySet(iconName: string, iconSetConfigs: SvgIconConfig[]):\n SVGElement | null {\n // Iterate backwards, so icon sets added later have precedence.\n for (let i = iconSetConfigs.length - 1; i >= 0; i--) {\n const config = iconSetConfigs[i];\n if (config.svgElement) {\n const foundIcon = this._extractSvgIconFromSet(config.svgElement, iconName);\n if (foundIcon) {\n return foundIcon;\n }\n }\n }\n return null;\n }\n\n /**\n * Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n */\n private _loadSvgIconFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n return this._fetchUrl(config.url)\n .pipe(map(svgText => this._createSvgElementForSingleIcon(svgText)));\n }\n\n /**\n * Loads the content of the icon set URL specified in the SvgIconConfig and creates an SVG element\n * from it.\n */\n private _loadSvgIconSetFromConfig(config: SvgIconConfig): Observable<SVGElement> {\n // If the SVG for this icon set has already been parsed, do nothing.\n if (config.svgElement) {\n return observableOf(config.svgElement);\n }\n\n return this._fetchUrl(config.url).pipe(map(svgText => {\n // It is possible that the icon set was parsed and cached by an earlier request, so parsing\n // only needs to occur if the cache is yet unset.\n if (!config.svgElement) {\n config.svgElement = this._svgElementFromString(svgText);\n }\n\n return config.svgElement;\n }));\n }\n\n /**\n * Creates a DOM element from the given SVG string, and adds default attributes.\n */\n private _createSvgElementForSingleIcon(responseText: string): SVGElement {\n const svg = this._svgElementFromString(responseText);\n this._setSvgAttributes(svg);\n return svg;\n }\n\n /**\n * Searches the cached element of the given SvgIconConfig for a nested icon element whose \"id\"\n * tag matches the specified name. If found, copies the nested element to a new SVG element and\n * returns it. Returns null if no matching element is found.\n */\n private _extractSvgIconFromSet(iconSet: SVGElement, iconName: string): SVGElement | null {\n // Use the `id=\"iconName\"` syntax in order to escape special\n // characters in the ID (versus using the #iconName syntax).\n const iconSource = iconSet.querySelector(`[id=\"${iconName}\"]`);\n\n if (!iconSource) {\n return null;\n }\n\n // Clone the element and remove the ID to prevent multiple elements from being added\n // to the page with the same ID.\n const iconElement = iconSource.cloneNode(true) as Element;\n iconElement.removeAttribute('id');\n\n // If the icon node is itself an <svg> node, clone and return it directly. If not, set it as\n // the content of a new <svg> node.\n if (iconElement.nodeName.toLowerCase() === 'svg') {\n return this._setSvgAttributes(iconElement as SVGElement);\n }\n\n // If the node is a <symbol>, it won't be rendered so we have to convert it into <svg>. Note\n // that the same could be achieved by referring to it via <use href=\"#id\">, however the <use>\n // tag is problematic on Firefox, because it needs to include the current page path.\n if (iconElement.nodeName.toLowerCase() === 'symbol') {\n return this._setSvgAttributes(this._toSvgElement(iconElement));\n }\n\n // createElement('SVG') doesn't work as expected; the DOM ends up with\n // the correct nodes, but the SVG content doesn't render. Instead we\n // have to create an empty SVG node using innerHTML and append its content.\n // Elements created using DOMParser.parseFromString have the same problem.\n // http://stackoverflow.com/questions/23003278/svg-innerhtml-in-firefox-can-not-display\n const svg = this._svgElementFromString('<svg></svg>');\n // Clone the node so we don't remove it from the parent icon set element.\n svg.appendChild(iconElement);\n\n return this._setSvgAttributes(svg);\n }\n\n /**\n * Creates a DOM element from the given SVG string.\n */\n private _svgElementFromString(str: string): SVGElement {\n const div = this._document.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg') as SVGElement;\n\n if (!svg) {\n throw Error('<svg> tag not found');\n }\n\n return svg;\n }\n\n /**\n * Converts an element into an SVG node by cloning all of its children.\n */\n private _toSvgElement(element: Element): SVGElement {\n let svg = this._svgElementFromString('<svg></svg>');\n\n for (let i = 0; i < element.childNodes.length; i++) {\n if (element.childNodes[i].nodeType === this._document.ELEMENT_NODE) {\n svg.appendChild(element.childNodes[i].cloneNode(true));\n }\n }\n\n return svg;\n }\n\n /**\n * Sets the default attributes for an SVG element to be used as an icon.\n */\n private _setSvgAttributes(svg: SVGElement): SVGElement {\n svg.setAttribute('fit', '');\n svg.setAttribute('height', '100%');\n svg.setAttribute('width', '100%');\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n svg.setAttribute('focusable', 'false'); // Disable IE11 default behavior to make SVGs focusable.\n return svg;\n }\n\n /**\n * Returns an Observable which produces the string contents of the given URL. Results may be\n * cached, so future calls with the same URL may not cause another HTTP request.\n */\n private _fetchUrl(safeUrl: SafeResourceUrl | null): Observable<string> {\n if (!this._httpClient) {\n throw getMatIconNoHttpProviderError();\n }\n\n if (safeUrl == null) {\n throw Error(`Cannot fetch icon from URL \"${safeUrl}\".`);\n }\n\n const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);\n\n if (!url) {\n throw getMatIconFailedToSanitizeUrlError(safeUrl);\n }\n\n // Store in-progress fetches to avoid sending a duplicate request for a URL when there is\n // already a request in progress for that URL. It's necessary to call share() on the\n // Observable returned by http.get() so that multiple subscribers don't cause multiple XHRs.\n const inProgressFetch = this._inProgressUrlFetches.get(url);\n\n if (inProgressFetch) {\n return inProgressFetch;\n }\n\n // TODO(jelbourn): for some reason, the `finalize` operator \"loses\" the generic type on the\n // Observable. Figure out why and fix it.\n const req = this._httpClient.get(url, {responseType: 'text'}).pipe(\n finalize(() => this._inProgressUrlFetches.delete(url)),\n share(),\n );\n\n this._inProgressUrlFetches.set(url, req);\n return req;\n }\n\n /**\n * Registers an icon config by name in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param iconName Name under which to register the config.\n * @param config Config to be registered.\n */\n private _addSvgIconConfig(namespace: string, iconName: string, config: SvgIconConfig): this {\n this._svgIconConfigs.set(iconKey(namespace, iconName), config);\n return this;\n }\n\n /**\n * Registers an icon set config in the specified namespace.\n * @param namespace Namespace in which to register the icon config.\n * @param config Config to be registered.\n */\n private _addSvgIconSetConfig(namespace: string, config: SvgIconConfig): this {\n const configNamespace = this._iconSetConfigs.get(namespace);\n\n if (configNamespace) {\n configNamespace.push(config);\n } else {\n this._iconSetConfigs.set(namespace, [config]);\n }\n\n return this;\n }\n}\n\n/** @docs-private */\nexport function ICON_REGISTRY_PROVIDER_FACTORY(\n parentRegistry: MatIconRegistry,\n httpClient: HttpClient,\n sanitizer: DomSanitizer,\n document?: any) {\n return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document);\n}\n\n/** @docs-private */\nexport const ICON_REGISTRY_PROVIDER = {\n // If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.\n provide: MatIconRegistry,\n deps: [\n [new Optional(), new SkipSelf(), MatIconRegistry],\n [new Optional(), HttpClient],\n DomSanitizer,\n [new Optional(), DOCUMENT as InjectionToken<any>],\n ],\n useFactory: ICON_REGISTRY_PROVIDER_FACTORY,\n};\n\n/** Clones an SVGElement while preserving type information. */\nfunction cloneSvg(svg: SVGElement): SVGElement {\n return svg.cloneNode(true) as SVGElement;\n}\n\n/** Returns the cache key to use for an icon namespace and name. */\nfunction iconKey(namespace: string, name: string) {\n return namespace + ':' + name;\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 {MatLineModule, MatCommonModule} from '@angular/material/core';\nimport {\n MatGridTile, MatGridTileText, MatGridTileFooterCssMatStyler,\n MatGridTileHeaderCssMatStyler, MatGridAvatarCssMatStyler\n} from './grid-tile';\nimport {MatGridList} from './grid-list';\n\n\n@NgModule({\n imports: [MatLineModule, MatCommonModule],\n exports: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler\n ],\n declarations: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler\n ],\n})\nexport class MatGridListModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 AfterContentChecked,\n OnInit,\n Input,\n ContentChildren,\n QueryList,\n ElementRef,\n Optional,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {MatGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\nimport {TileStyler, FitTileStyler, RatioTileStyler, FixedTileStyler} from './tile-styler';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {MAT_GRID_LIST, MatGridListBase} from './grid-list-base';\n\n\n// TODO(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\n\nconst MAT_FIT_MODE = 'fit';\n\n@Component({\n moduleId: module.id,\n selector: 'mat-grid-list',\n exportAs: 'matGridList',\n templateUrl: 'grid-list.html',\n styleUrls: ['grid-list.css'],\n host: {\n 'class': 'mat-grid-list',\n },\n providers: [{\n provide: MAT_GRID_LIST,\n useExisting: MatGridList\n }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatGridList implements MatGridListBase, OnInit, AfterContentChecked {\n /** Number of columns being rendered. */\n private _cols: number;\n\n /** Used for determiningthe position of each tile in the grid. */\n private _tileCoordinator: TileCoordinator;\n\n /**\n * Row height value passed in by user. This can be one of three types:\n * - Number value (ex: \"100px\"): sets a fixed row height to that value\n * - Ratio value (ex: \"4:3\"): sets the row height based on width:height ratio\n * - \"Fit\" mode (ex: \"fit\"): sets the row height to total height divided by number of rows\n */\n private _rowHeight: string;\n\n /** The amount of space between tiles. This will be something like '5px' or '2em'. */\n private _gutter: string = '1px';\n\n /** Sets position and size styles for a tile */\n private _tileStyler: TileStyler;\n\n /** Query list of tiles that are being rendered. */\n @ContentChildren(MatGridTile, {descendants: true}) _tiles: QueryList<MatGridTile>;\n\n constructor(private _element: ElementRef<HTMLElement>,\n @Optional() private _dir: Directionality) {}\n\n /** Amount of columns in the grid list. */\n @Input()\n get cols(): number { return this._cols; }\n set cols(value: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n\n /** Size of the grid list's gutter in pixels. */\n @Input()\n get gutterSize(): string { return this._gutter; }\n set gutterSize(value: string) { this._gutter = `${value == null ? '' : value}`; }\n\n /** Set internal representation of row height from the user-provided value. */\n @Input()\n get rowHeight(): string | number { return this._rowHeight; }\n set rowHeight(value: string | number) {\n const newValue = `${value == null ? '' : value}`;\n\n if (newValue !== this._rowHeight) {\n this._rowHeight = newValue;\n this._setTileStyler(this._rowHeight);\n }\n }\n\n ngOnInit() {\n this._checkCols();\n this._checkRowHeight();\n }\n\n /**\n * The layout calculation is fairly cheap if nothing changes, so there's little cost\n * to run it frequently.\n */\n ngAfterContentChecked() {\n this._layoutTiles();\n }\n\n /** Throw a friendly error if cols property is missing */\n private _checkCols() {\n if (!this.cols) {\n throw Error(`mat-grid-list: must pass in number of columns. ` +\n `Example: <mat-grid-list cols=\"3\">`);\n }\n }\n\n /** Default to equal width:height if rowHeight property is missing */\n private _checkRowHeight(): void {\n if (!this._rowHeight) {\n this._setTileStyler('1:1');\n }\n }\n\n /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\n private _setTileStyler(rowHeight: string): void {\n if (this._tileStyler) {\n this._tileStyler.reset(this);\n }\n\n if (rowHeight === MAT_FIT_MODE) {\n this._tileStyler = new FitTileStyler();\n } else if (rowHeight && rowHeight.indexOf(':') > -1) {\n this._tileStyler = new RatioTileStyler(rowHeight);\n } else {\n this._tileStyler = new FixedTileStyler(rowHeight);\n }\n }\n\n /** Computes and applies the size and position for all children grid tiles. */\n private _layoutTiles(): void {\n if (!this._tileCoordinator) {\n this._tileCoordinator = new TileCoordinator();\n }\n\n\n const tracker = this._tileCoordinator;\n const tiles = this._tiles.filter(tile => !tile._gridList || tile._gridList === this);\n const direction = this._dir ? this._dir.value : 'ltr';\n\n this._tileCoordinator.update(this.cols, tiles);\n this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n\n tiles.forEach((tile, index) => {\n const pos = tracker.positions[index];\n this._tileStyler.setStyle(tile, pos.row, pos.col);\n });\n\n this._setListStyle(this._tileStyler.getComputedHeight());\n }\n\n /** Sets style on the main grid-list element, given the style name and value. */\n _setListStyle(style: [string, string | null] | null): void {\n if (style) {\n (this._element.nativeElement.style as any)[style[0]] = style[1];\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 {MatGridList} from './grid-list';\nimport {MatGridTile} from './grid-tile';\nimport {TileCoordinator} from './tile-coordinator';\n\n/**\n * RegExp that can be used to check whether a value will\n * be allowed inside a CSS `calc()` expression.\n */\nconst cssCalcAllowedValue = /^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/;\n\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * @docs-private\n */\nexport abstract class TileStyler {\n _gutterSize: string;\n _rows: number = 0;\n _rowspan: number = 0;\n _cols: number;\n _direction: string;\n\n /**\n * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n * because these properties haven't been calculated by that point.\n *\n * @param gutterSize Size of the grid's gutter.\n * @param tracker Instance of the TileCoordinator.\n * @param cols Amount of columns in the grid.\n * @param direction Layout direction of the grid.\n */\n init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string): void {\n this._gutterSize = normalizeUnits(gutterSize);\n this._rows = tracker.rowCount;\n this._rowspan = tracker.rowspan;\n this._cols = cols;\n this._direction = direction;\n }\n\n /**\n * Computes the amount of space a single 1x1 tile would take up (width or height).\n * Used as a basis for other calculations.\n * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n */\n getBaseTileSize(sizePercent: number, gutterFraction: number): string {\n // Take the base size percent (as would be if evenly dividing the size between cells),\n // and then subtracting the size of one gutter. However, since there are no gutters on the\n // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n // edge evenly among the cells).\n return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n }\n\n\n /**\n * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n * @param offset Number of tiles that have already been rendered in the row/column.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @return Position of the tile as a CSS calc() expression.\n */\n getTilePosition(baseSize: string, offset: number): string {\n // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n // row/column (offset).\n return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n }\n\n\n /**\n * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param span The tile's rowspan or colspan.\n * @return Size of the tile as a CSS calc() expression.\n */\n getTileSize(baseSize: string, span: number): string {\n return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n }\n\n\n /**\n * Sets the style properties to be applied to a tile for the given row and column index.\n * @param tile Tile to which to apply the styling.\n * @param rowIndex Index of the tile's row.\n * @param colIndex Index of the tile's column.\n */\n setStyle(tile: MatGridTile, rowIndex: number, colIndex: number): void {\n // Percent of the available horizontal space that one column takes up.\n let percentWidthPerTile = 100 / this._cols;\n\n // Fraction of the vertical gutter size that each column takes up.\n // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n let gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n\n this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n }\n\n /** Sets the horizontal placement of the tile in the list. */\n setColStyles(tile: MatGridTile, colIndex: number, percentWidth: number,\n gutterWidth: number) {\n // Base horizontal size of a column.\n let baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n\n // The width and horizontal position of each tile is always calculated the same way, but the\n // height and vertical position depends on the rowMode.\n let side = this._direction === 'rtl' ? 'right' : 'left';\n tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n }\n\n /**\n * Calculates the total size taken up by gutters across one axis of a list.\n */\n getGutterSpan(): string {\n return `${this._gutterSize} * (${this._rowspan} - 1)`;\n }\n\n /**\n * Calculates the total size taken up by tiles across one axis of a list.\n * @param tileHeight Height of the tile.\n */\n getTileSpan(tileHeight: string): string {\n return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n }\n\n /**\n * Sets the vertical placement of the tile in the list.\n * This method will be implemented by each type of TileStyler.\n * @docs-private\n */\n abstract setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number,\n gutterWidth: number): void;\n\n /**\n * Calculates the computed height and returns the correct style property to set.\n * This method can be implemented by each type of TileStyler.\n * @docs-private\n */\n getComputedHeight(): [string, string] | null { return null; }\n\n /**\n * Called when the tile styler is swapped out with a different one. To be used for cleanup.\n * @param list Grid list that the styler was attached to.\n * @docs-private\n */\n abstract reset(list: MatGridList): void;\n}\n\n\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example `<mat-grid-list cols=\"3\" rowHeight=\"100px\">`\n * @docs-private\n */\nexport class FixedTileStyler extends TileStyler {\n\n constructor(public fixedRowHeight: string) { super(); }\n\n init(gutterSize: string, tracker: TileCoordinator, cols: number, direction: string) {\n super.init(gutterSize, tracker, cols, direction);\n this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n\n if (!cssCalcAllowedValue.test(this.fixedRowHeight)) {\n throw Error(`Invalid value \"${this.fixedRowHeight}\" set as rowHeight.`);\n }\n }\n\n setRowStyles(tile: MatGridTile, rowIndex: number): void {\n tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n }\n\n getComputedHeight(): [string, string] {\n return [\n 'height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)\n ];\n }\n\n reset(list: MatGridList) {\n list._setListStyle(['height', null]);\n\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n\n\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height. Example `<mat-grid-list cols=\"3\" rowHeight=\"3:1\">`\n * @docs-private\n */\nexport class RatioTileStyler extends TileStyler {\n\n /** Ratio width:height given by user to determine row height. */\n rowHeightRatio: number;\n baseTileHeight: string;\n\n constructor(value: string) {\n super();\n this._parseRatio(value);\n }\n\n setRowStyles(tile: MatGridTile, rowIndex: number, percentWidth: number,\n gutterWidth: number): void {\n let percentHeightPerTile = percentWidth / this.rowHeightRatio;\n this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n\n // Use padding-top and margin-top to maintain the given aspect ratio, as\n // a percentage-based value for these properties is applied versus the *width* of the\n // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n tile._setStyle('marginTop', this.getTilePosition(this.baseTileHeight, rowIndex));\n tile._setStyle('paddingTop', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n }\n\n getComputedHeight(): [string, string] {\n return [\n 'paddingBottom', calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`)\n ];\n }\n\n reset(list: MatGridList) {\n list._setListStyle(['paddingBottom', null]);\n\n list._tiles.forEach(tile => {\n tile._setStyle('marginTop', null);\n tile._setStyle('paddingTop', null);\n });\n }\n\n private _parseRatio(value: string): void {\n const ratioParts = value.split(':');\n\n if (ratioParts.length !== 2) {\n throw Error(`mat-grid-list: invalid ratio given for row-height: \"${value}\"`);\n }\n\n this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n }\n}\n\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows. Example `<mat-grid-list cols=\"3\" rowHeight=\"fit\">`\n *\n * @docs-private\n */\nexport class FitTileStyler extends TileStyler {\n setRowStyles(tile: MatGridTile, rowIndex: number): void {\n // Percent of the available vertical space that one row takes up.\n let percentHeightPerTile = 100 / this._rowspan;\n\n // Fraction of the horizontal gutter size that each column takes up.\n let gutterHeightPerTile = (this._rows - 1) / this._rows;\n\n // Base vertical size of a column.\n let baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n\n tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n }\n\n reset(list: MatGridList) {\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n\n\n/** Wraps a CSS string in a calc function */\nfunction calc(exp: string): string {\n return `calc(${exp})`;\n}\n\n\n/** Appends pixels to a CSS string if no units are given. */\nfunction normalizeUnits(value: string): string {\n return value.match(/([A-Za-z%]+)$/) ? value : `${value}px`;\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 {MatGridTile} from './grid-tile';\n\n/**\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n *\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n *\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n *\n * @docs-private\n */\nexport class TileCoordinator {\n /** Tracking array (see class description). */\n tracker: number[];\n\n /** Index at which the search for the next gap will start. */\n columnIndex: number = 0;\n\n /** The current row index. */\n rowIndex: number = 0;\n\n /** Gets the total number of rows occupied by tiles */\n get rowCount(): number { return this.rowIndex + 1; }\n\n /**\n * Gets the total span of rows occupied by tiles.\n * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n */\n get rowspan() {\n const lastRowMax = Math.max(...this.tracker);\n // if any of the tiles has a rowspan that pushes it beyond the total row count,\n // add the difference to the rowcount\n return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n }\n\n /** The computed (row, col) position of each tile (the output). */\n positions: TilePosition[];\n\n /**\n * Updates the tile positions.\n * @param numColumns Amount of columns in the grid.\n */\n update(numColumns: number, tiles: MatGridTile[]) {\n this.columnIndex = 0;\n this.rowIndex = 0;\n\n this.tracker = new Array(numColumns);\n this.tracker.fill(0, 0, this.tracker.length);\n this.positions = tiles.map(tile => this._trackTile(tile));\n }\n\n /** Calculates the row and col position of a tile. */\n private _trackTile(tile: MatGridTile): TilePosition {\n // Find a gap large enough for this tile.\n const gapStartIndex = this._findMatchingGap(tile.colspan);\n\n // Place tile in the resulting gap.\n this._markTilePosition(gapStartIndex, tile);\n\n // The next time we look for a gap, the search will start at columnIndex, which should be\n // immediately after the tile that has just been placed.\n this.columnIndex = gapStartIndex + tile.colspan;\n\n return new TilePosition(this.rowIndex, gapStartIndex);\n }\n\n /** Finds the next available space large enough to fit the tile. */\n private _findMatchingGap(tileCols: number): number {\n if (tileCols > this.tracker.length) {\n throw Error(`mat-grid-list: tile with colspan ${tileCols} is wider than ` +\n `grid with cols=\"${this.tracker.length}\".`);\n }\n\n // Start index is inclusive, end index is exclusive.\n let gapStartIndex = -1;\n let gapEndIndex = -1;\n\n // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n do {\n // If we've reached the end of the row, go to the next row.\n if (this.columnIndex + tileCols > this.tracker.length) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n\n // If there are no more empty spaces in this row at all, move on to the next row.\n if (gapStartIndex == -1) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n\n // If a gap large enough isn't found, we want to start looking immediately after the current\n // gap on the next iteration.\n this.columnIndex = gapStartIndex + 1;\n\n // Continue iterating until we find a gap wide enough for this tile. Since gapEndIndex is\n // exclusive, gapEndIndex is 0 means we didn't find a gap and should continue.\n } while ((gapEndIndex - gapStartIndex < tileCols) || (gapEndIndex == 0));\n\n // If we still didn't manage to find a gap, ensure that the index is\n // at least zero so the tile doesn't get pulled out of the grid.\n return Math.max(gapStartIndex, 0);\n }\n\n /** Move \"down\" to the next row. */\n private _nextRow(): void {\n this.columnIndex = 0;\n this.rowIndex++;\n\n // Decrement all spaces by one to reflect moving down one row.\n for (let i = 0; i < this.tracker.length; i++) {\n this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n }\n }\n\n /**\n * Finds the end index (exclusive) of a gap given the index from which to start looking.\n * The gap ends when a non-zero value is found.\n */\n private _findGapEndIndex(gapStartIndex: number): number {\n for (let i = gapStartIndex + 1; i < this.tracker.length; i++) {\n if (this.tracker[i] != 0) {\n return i;\n }\n }\n\n // The gap ends with the end of the row.\n return this.tracker.length;\n }\n\n /** Update the tile tracker to account for the given tile in the given space. */\n private _markTilePosition(start: number, tile: MatGridTile): void {\n for (let i = 0; i < tile.colspan; i++) {\n this.tracker[start + i] = tile.rowspan;\n }\n }\n}\n\n/**\n * Simple data structure for tile position (row, col).\n * @docs-private\n */\nexport class TilePosition {\n constructor(public row: number, public col: number) {}\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 Component,\n ViewEncapsulation,\n ElementRef,\n Input,\n Optional,\n ContentChildren,\n QueryList,\n AfterContentInit,\n Directive,\n ChangeDetectionStrategy,\n Inject,\n} from '@angular/core';\nimport {MatLine, setLines} from '@angular/material/core';\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {MAT_GRID_LIST, MatGridListBase} from './grid-list-base';\n\n@Component({\n moduleId: module.id,\n selector: 'mat-grid-tile',\n exportAs: 'matGridTile',\n host: {\n 'class': 'mat-grid-tile',\n },\n templateUrl: 'grid-tile.html',\n styleUrls: ['grid-list.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatGridTile {\n _rowspan: number = 1;\n _colspan: number = 1;\n\n constructor(\n private _element: ElementRef<HTMLElement>,\n @Optional() @Inject(MAT_GRID_LIST) public _gridList?: MatGridListBase) {}\n\n /** Amount of rows that the grid tile takes up. */\n @Input()\n get rowspan(): number { return this._rowspan; }\n set rowspan(value: number) { this._rowspan = Math.round(coerceNumberProperty(value)); }\n\n /** Amount of columns that the grid tile takes up. */\n @Input()\n get colspan(): number { return this._colspan; }\n set colspan(value: number) { this._colspan = Math.round(coerceNumberProperty(value)); }\n\n /**\n * Sets the style of the grid-tile element. Needs to be set manually to avoid\n * \"Changed after checked\" errors that would occur with HostBinding.\n */\n _setStyle(property: string, value: any): void {\n (this._element.nativeElement.style as any)[property] = value;\n }\n}\n\n@Component({\n moduleId: module.id,\n selector: 'mat-grid-tile-header, mat-grid-tile-footer',\n templateUrl: 'grid-tile-text.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatGridTileText implements AfterContentInit {\n @ContentChildren(MatLine) _lines: QueryList<MatLine>;\n\n constructor(private _element: ElementRef<HTMLElement>) {}\n\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: '[mat-grid-avatar], [matGridAvatar]',\n host: {'class': 'mat-grid-avatar'}\n})\nexport class MatGridAvatarCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: 'mat-grid-tile-header',\n host: {'class': 'mat-grid-tile-header'}\n})\nexport class MatGridTileHeaderCssMatStyler {}\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\n@Directive({\n selector: 'mat-grid-tile-footer',\n host: {'class': 'mat-grid-tile-footer'}\n})\nexport class MatGridTileFooterCssMatStyler {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 used to provide a grid list to a tile and to avoid circular imports.\n * @docs-private\n */\nexport const MAT_GRID_LIST = new InjectionToken<MatGridListBase>('MAT_GRID_LIST');\n\n/**\n * Base interface for a `MatGridList`.\n * @docs-private\n */\nexport interface MatGridListBase {\n cols: number;\n gutterSize: string;\n rowHeight: number | 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 {CdkAccordionModule} from '@angular/cdk/accordion';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatAccordion} from './accordion';\nimport {MatExpansionPanel, MatExpansionPanelActionRow} from './expansion-panel';\nimport {MatExpansionPanelContent} from './expansion-panel-content';\nimport {\n MatExpansionPanelDescription,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n} from './expansion-panel-header';\n\n\n@NgModule({\n imports: [CommonModule, CdkAccordionModule, PortalModule],\n exports: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n declarations: [\n MatAccordion,\n MatExpansionPanel,\n MatExpansionPanelActionRow,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelContent,\n ],\n})\nexport class MatExpansionModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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, Input, ContentChildren, QueryList, AfterContentInit} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {CdkAccordion} from '@angular/cdk/accordion';\nimport {FocusKeyManager} from '@angular/cdk/a11y';\nimport {HOME, END, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n MAT_ACCORDION,\n MatAccordionBase,\n MatAccordionDisplayMode,\n MatAccordionTogglePosition\n} from './accordion-base';\nimport {MatExpansionPanelHeader} from './expansion-panel-header';\n\n/**\n * Directive for a Material Design Accordion.\n */\n@Directive({\n selector: 'mat-accordion',\n exportAs: 'matAccordion',\n inputs: ['multi'],\n providers: [{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }],\n host: {\n class: 'mat-accordion'\n }\n})\nexport class MatAccordion extends CdkAccordion implements MatAccordionBase, AfterContentInit {\n private _keyManager: FocusKeyManager<MatExpansionPanelHeader>;\n\n @ContentChildren(MatExpansionPanelHeader, {descendants: true})\n _headers: QueryList<MatExpansionPanelHeader>;\n\n /** Whether the expansion indicator should be hidden. */\n @Input()\n get hideToggle(): boolean { return this._hideToggle; }\n set hideToggle(show: boolean) { this._hideToggle = coerceBooleanProperty(show); }\n private _hideToggle: boolean = false;\n\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n @Input() displayMode: MatAccordionDisplayMode = 'default';\n\n /** The position of the expansion indicator. */\n @Input() togglePosition: MatAccordionTogglePosition = 'after';\n\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this._headers).withWrap();\n }\n\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event: KeyboardEvent) {\n const {keyCode} = event;\n const manager = this._keyManager;\n\n if (keyCode === HOME) {\n if (!hasModifierKey(event)) {\n manager.setFirstItemActive();\n event.preventDefault();\n }\n } else if (keyCode === END) {\n if (!hasModifierKey(event)) {\n manager.setLastItemActive();\n event.preventDefault();\n }\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n\n _handleHeaderFocus(header: MatExpansionPanelHeader) {\n this._keyManager.updateActiveItem(header);\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 {FocusMonitor, FocusableOption, FocusOrigin} from '@angular/cdk/a11y';\nimport {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n Host,\n Input,\n OnDestroy,\n ViewEncapsulation,\n Optional,\n Inject,\n} from '@angular/core';\nimport {merge, Subscription, EMPTY} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {matExpansionAnimations} from './expansion-animations';\nimport {\n MatExpansionPanel,\n MatExpansionPanelDefaultOptions,\n MAT_EXPANSION_PANEL_DEFAULT_OPTIONS,\n} from './expansion-panel';\nimport {MatAccordionTogglePosition} from './accordion-base';\n\n\n/**\n * `<mat-expansion-panel-header>`\n *\n * This component corresponds to the header element of an `<mat-expansion-panel>`.\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-expansion-panel-header',\n styleUrls: ['./expansion-panel-header.css'],\n templateUrl: './expansion-panel-header.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n matExpansionAnimations.indicatorRotate,\n matExpansionAnimations.expansionHeaderHeight\n ],\n host: {\n 'class': 'mat-expansion-panel-header',\n 'role': 'button',\n '[attr.id]': 'panel._headerId',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.aria-controls]': '_getPanelId()',\n '[attr.aria-expanded]': '_isExpanded()',\n '[attr.aria-disabled]': 'panel.disabled',\n '[class.mat-expanded]': '_isExpanded()',\n '[class.mat-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,\n '[class.mat-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,\n '(click)': '_toggle()',\n '(keydown)': '_keydown($event)',\n '[@.disabled]': '_animationsDisabled',\n '(@expansionHeight.start)': '_animationStarted()',\n '[@expansionHeight]': `{\n value: _getExpandedState(),\n params: {\n collapsedHeight: collapsedHeight,\n expandedHeight: expandedHeight\n }\n }`,\n },\n})\nexport class MatExpansionPanelHeader implements OnDestroy, FocusableOption {\n private _parentChangeSubscription = Subscription.EMPTY;\n\n /** Whether Angular animations in the panel header should be disabled. */\n _animationsDisabled = true;\n\n constructor(\n @Host() public panel: MatExpansionPanel,\n private _element: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef,\n @Inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS) @Optional()\n defaultOptions?: MatExpansionPanelDefaultOptions) {\n const accordionHideToggleChange = panel.accordion ?\n panel.accordion._stateChanges.pipe(\n filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) :\n EMPTY;\n\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription =\n merge(\n panel.opened, panel.closed, accordionHideToggleChange,\n panel._inputChanges.pipe(filter(\n changes => {\n return !!(\n changes['hideToggle'] ||\n changes['disabled'] ||\n changes['togglePosition']);\n })))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed\n .pipe(filter(() => panel._containsFocus()))\n .subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n\n _focusMonitor.monitor(_element).subscribe(origin => {\n if (origin && panel.accordion) {\n panel.accordion._handleHeaderFocus(this);\n }\n });\n\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n\n _animationStarted() {\n // Currently the `expansionHeight` animation has a `void => collapsed` transition which is\n // there to work around a bug in Angular (see #13088), however this introduces a different\n // issue. The new transition will cause the header to animate in on init (see #16067), if the\n // consumer has set a header height that is different from the default one. We work around it\n // by disabling animations on the header and re-enabling them after the first animation has run.\n // Note that Angular dispatches animation events even if animations are disabled. Ideally this\n // wouldn't be necessary if we remove the `void => collapsed` transition, but we have to wait\n // for https://github.com/angular/angular/issues/18847 to be resolved.\n this._animationsDisabled = false;\n }\n\n /** Height of the header while the panel is expanded. */\n @Input() expandedHeight: string;\n\n /** Height of the header while the panel is collapsed. */\n @Input() collapsedHeight: string;\n\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n\n /** Toggles the expanded state of the panel. */\n _toggle(): void {\n this.panel.toggle();\n }\n\n /** Gets whether the panel is expanded. */\n _isExpanded(): boolean {\n return this.panel.expanded;\n }\n\n /** Gets the expanded state string of the panel. */\n _getExpandedState(): string {\n return this.panel._getExpandedState();\n }\n\n /** Gets the panel id. */\n _getPanelId(): string {\n return this.panel.id;\n }\n\n /** Gets the toggle position for the header. */\n _getTogglePosition(): MatAccordionTogglePosition {\n return this.panel.togglePosition;\n }\n\n /** Gets whether the expand indicator should be shown. */\n _showToggle(): boolean {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event: KeyboardEvent) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n\n return;\n }\n }\n\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin: FocusOrigin = 'program') {\n this._focusMonitor.focusVia(this._element, origin);\n }\n\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n}\n\n/**\n * `<mat-panel-description>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\n@Directive({\n selector: 'mat-panel-description',\n host: {\n class: 'mat-expansion-panel-header-description'\n }\n})\nexport class MatExpansionPanelDescription {}\n\n/**\n * `<mat-panel-title>`\n *\n * This directive is to be used inside of the MatExpansionPanelHeader component.\n */\n@Directive({\n selector: 'mat-panel-title',\n host: {\n class: 'mat-expansion-panel-header-title'\n }\n})\nexport class MatExpansionPanelTitle {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {AnimationEvent} from '@angular/animations';\nimport {CdkAccordionItem} from '@angular/cdk/accordion';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {UniqueSelectionDispatcher} from '@angular/cdk/collections';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n Directive,\n EventEmitter,\n ElementRef,\n Input,\n Inject,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n SkipSelf,\n ViewContainerRef,\n ViewEncapsulation,\n ViewChild,\n InjectionToken,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {Subject} from 'rxjs';\nimport {filter, startWith, take, distinctUntilChanged} from 'rxjs/operators';\nimport {matExpansionAnimations} from './expansion-animations';\nimport {MatExpansionPanelContent} from './expansion-panel-content';\nimport {MAT_ACCORDION, MatAccordionBase, MatAccordionTogglePosition} from './accordion-base';\n\n/** MatExpansionPanel's states. */\nexport type MatExpansionPanelState = 'expanded' | 'collapsed';\n\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n\n/**\n * Object that can be used to override the default options\n * for all of the expansion panels in a module.\n */\nexport interface MatExpansionPanelDefaultOptions {\n /** Height of the header while the panel is expanded. */\n expandedHeight: string;\n\n /** Height of the header while the panel is collapsed. */\n collapsedHeight: string;\n\n /** Whether the toggle indicator should be hidden. */\n hideToggle: boolean;\n}\n\n/**\n * Injection token that can be used to configure the defalt\n * options for the expansion panel component.\n */\nexport const MAT_EXPANSION_PANEL_DEFAULT_OPTIONS =\n new InjectionToken<MatExpansionPanelDefaultOptions>('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\n\n/**\n * `<mat-expansion-panel>`\n *\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\n@Component({\n moduleId: module.id,\n styleUrls: ['./expansion-panel.css'],\n selector: 'mat-expansion-panel',\n exportAs: 'matExpansionPanel',\n templateUrl: './expansion-panel.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled', 'expanded'],\n outputs: ['opened', 'closed', 'expandedChange'],\n animations: [matExpansionAnimations.bodyExpansion],\n providers: [\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n {provide: MAT_ACCORDION, useValue: undefined},\n ],\n host: {\n 'class': 'mat-expansion-panel',\n '[class.mat-expanded]': 'expanded',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-expansion-panel-spacing]': '_hasSpacing()',\n }\n})\nexport class MatExpansionPanel extends CdkAccordionItem implements AfterContentInit, OnChanges,\n OnDestroy {\n private _document: Document;\n private _hideToggle = false;\n private _togglePosition: MatAccordionTogglePosition;\n\n /** Whether the toggle indicator should be hidden. */\n @Input()\n get hideToggle(): boolean {\n return this._hideToggle || (this.accordion && this.accordion.hideToggle);\n }\n set hideToggle(value: boolean) {\n this._hideToggle = coerceBooleanProperty(value);\n }\n\n /** Whether the toggle indicator should be hidden. */\n @Input()\n get togglePosition(): MatAccordionTogglePosition {\n return this._togglePosition || (this.accordion && this.accordion.togglePosition);\n }\n set togglePosition(value: MatAccordionTogglePosition) {\n this._togglePosition = value;\n }\n\n /** An event emitted after the body's expansion animation happens. */\n @Output() afterExpand = new EventEmitter<void>();\n\n /** An event emitted after the body's collapse animation happens. */\n @Output() afterCollapse = new EventEmitter<void>();\n\n /** Stream that emits for changes in `@Input` properties. */\n readonly _inputChanges = new Subject<SimpleChanges>();\n\n /** Optionally defined accordion the expansion panel belongs to. */\n accordion: MatAccordionBase;\n\n /** Content that will be rendered lazily. */\n @ContentChild(MatExpansionPanelContent, {static: false}) _lazyContent: MatExpansionPanelContent;\n\n /** Element containing the panel's user-provided content. */\n @ViewChild('body', {static: false}) _body: ElementRef<HTMLElement>;\n\n /** Portal holding the user's content. */\n _portal: TemplatePortal;\n\n /** ID for the associated header element. Used for a11y labelling. */\n _headerId = `mat-expansion-panel-header-${uniqueId++}`;\n\n /** Stream of body animation done events. */\n _bodyAnimationDone = new Subject<AnimationEvent>();\n\n constructor(@Optional() @SkipSelf() @Inject(MAT_ACCORDION) accordion: MatAccordionBase,\n _changeDetectorRef: ChangeDetectorRef,\n _uniqueSelectionDispatcher: UniqueSelectionDispatcher,\n private _viewContainerRef: ViewContainerRef,\n @Inject(DOCUMENT) _document: any,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode: string,\n @Inject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS) @Optional()\n defaultOptions?: MatExpansionPanelDefaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this.accordion = accordion;\n this._document = _document;\n\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._bodyAnimationDone.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe(event => {\n if (event.fromState !== 'void') {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n } else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n }\n });\n\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing(): boolean {\n if (this.accordion) {\n // We don't need to subscribe to the `stateChanges` of the parent accordion because each time\n // the [displayMode] input changes, the change detection will also cover the host bindings\n // of this expansion panel.\n return (this.expanded ? this.accordion.displayMode : this._getExpandedState()) === 'default';\n }\n return false;\n }\n\n /** Gets the expanded state string. */\n _getExpandedState(): MatExpansionPanelState {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n\n ngAfterContentInit() {\n if (this._lazyContent) {\n // Render the content as soon as the panel becomes open.\n this.opened.pipe(\n startWith(null!),\n filter(() => this.expanded && !this._portal),\n take(1)\n ).subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this._inputChanges.next(changes);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this._bodyAnimationDone.complete();\n this._inputChanges.complete();\n }\n\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus(): boolean {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n\n return false;\n }\n}\n\n@Directive({\n selector: 'mat-action-row',\n host: {\n class: 'mat-action-row'\n }\n})\nexport class MatExpansionPanelActionRow {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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} from '@angular/core';\n\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\n@Directive({\n selector: 'ng-template[matExpansionPanelContent]'\n})\nexport class MatExpansionPanelContent {\n constructor(public _template: TemplateRef<any>) {}\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 animateChild,\n group,\n state,\n style,\n transition,\n trigger,\n query,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/** Time and timing curve for expansion panel animations. */\nexport const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nexport const matExpansionAnimations: {\n readonly indicatorRotate: AnimationTriggerMetadata;\n readonly expansionHeaderHeight: AnimationTriggerMetadata;\n readonly bodyExpansion: AnimationTriggerMetadata;\n} = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: trigger('indicatorRotate', [\n state('collapsed, void', style({transform: 'rotate(0deg)'})),\n state('expanded', style({transform: 'rotate(180deg)'})),\n transition('expanded <=> collapsed, void => collapsed',\n animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n\n /** Animation that expands and collapses the panel header height. */\n expansionHeaderHeight: trigger('expansionHeight', [\n state('collapsed, void', style({\n height: '{{collapsedHeight}}',\n }), {\n params: {collapsedHeight: '48px'},\n }),\n state('expanded', style({\n height: '{{expandedHeight}}'\n }), {\n params: {expandedHeight: '64px'}\n }),\n transition('expanded <=> collapsed, void => collapsed', group([\n query('@indicatorRotate', animateChild(), {optional: true}),\n animate(EXPANSION_PANEL_ANIMATION_TIMING),\n ])),\n ]),\n\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: trigger('bodyExpansion', [\n state('collapsed, void', style({height: '0px', visibility: 'hidden'})),\n state('expanded', style({height: '*', visibility: 'visible'})),\n transition('expanded <=> collapsed, void => collapsed',\n animate(EXPANSION_PANEL_ANIMATION_TIMING)),\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';\nimport {CdkAccordion} from '@angular/cdk/accordion';\n\n/** MatAccordion's display modes. */\nexport type MatAccordionDisplayMode = 'default' | 'flat';\n\n/** MatAccordion's toggle positions. */\nexport type MatAccordionTogglePosition = 'before' | 'after';\n\n/**\n * Base interface for a `MatAccordion`.\n * @docs-private\n */\nexport interface MatAccordionBase extends CdkAccordion {\n /** Whether the expansion indicator should be hidden. */\n hideToggle: boolean;\n\n /** Display mode used for all expansion panels in the accordion. */\n displayMode: MatAccordionDisplayMode;\n\n /** The position of the expansion indicator. */\n togglePosition: MatAccordionTogglePosition;\n\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown: (event: KeyboardEvent) => void;\n\n /** Handles focus events on the panel headers. */\n _handleHeaderFocus: (header: any) => void;\n}\n\n\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nexport const MAT_ACCORDION = new InjectionToken<MatAccordionBase>('MAT_ACCORDION');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatDivider} from './divider';\n\n\n@NgModule({\n imports: [MatCommonModule, CommonModule],\n exports: [MatDivider, MatCommonModule],\n declarations: [MatDivider],\n})\nexport class MatDividerModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\n@Component({\n moduleId: module.id,\n selector: 'mat-divider',\n host: {\n 'role': 'separator',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-divider-vertical]': 'vertical',\n '[class.mat-divider-horizontal]': '!vertical',\n '[class.mat-divider-inset]': 'inset',\n 'class': 'mat-divider'\n },\n template: '',\n styleUrls: ['divider.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDivider {\n /** Whether the divider is vertically aligned. */\n @Input()\n get vertical(): boolean { return this._vertical; }\n set vertical(value: boolean) { this._vertical = coerceBooleanProperty(value); }\n private _vertical: boolean = false;\n\n /** Whether the divider is an inset divider. */\n @Input()\n get inset(): boolean { return this._inset; }\n set inset(value: boolean) { this._inset = coerceBooleanProperty(value); }\n private _inset: boolean = false;\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 {A11yModule} from '@angular/cdk/a11y';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatCalendar, MatCalendarHeader} from './calendar';\nimport {MatCalendarBody} from './calendar-body';\nimport {\n MatDatepicker,\n MatDatepickerContent,\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './datepicker';\nimport {MatDatepickerInput} from './datepicker-input';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatDatepickerToggle, MatDatepickerToggleIcon} from './datepicker-toggle';\nimport {MatMonthView} from './month-view';\nimport {MatMultiYearView} from './multi-year-view';\nimport {MatYearView} from './year-view';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n ],\n exports: [\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n ],\n declarations: [\n MatCalendar,\n MatCalendarBody,\n MatDatepicker,\n MatDatepickerContent,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatDatepickerToggleIcon,\n MatMonthView,\n MatYearView,\n MatMultiYearView,\n MatCalendarHeader,\n ],\n providers: [\n MatDatepickerIntl,\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n ],\n entryComponents: [\n MatDatepickerContent,\n MatCalendarHeader,\n ]\n})\nexport class MatDatepickerModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n Directive,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewEncapsulation,\n ViewChild,\n} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {merge, of as observableOf, Subscription} from 'rxjs';\nimport {MatDatepicker} from './datepicker';\nimport {MatDatepickerIntl} from './datepicker-intl';\n\n\n/** Can be used to override the icon of a `matDatepickerToggle`. */\n@Directive({\n selector: '[matDatepickerToggleIcon]'\n})\nexport class MatDatepickerToggleIcon {}\n\n\n@Component({\n moduleId: module.id,\n selector: 'mat-datepicker-toggle',\n templateUrl: 'datepicker-toggle.html',\n styleUrls: ['datepicker-toggle.css'],\n host: {\n 'class': 'mat-datepicker-toggle',\n // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the\n // consumer may have provided, while still being able to receive focus.\n '[attr.tabindex]': '-1',\n '[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',\n '[class.mat-accent]': 'datepicker && datepicker.color === \"accent\"',\n '[class.mat-warn]': 'datepicker && datepicker.color === \"warn\"',\n '(focus)': '_button.focus()',\n },\n exportAs: 'matDatepickerToggle',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n private _stateChanges = Subscription.EMPTY;\n\n /** Datepicker instance that the button will toggle. */\n @Input('for') datepicker: MatDatepicker<D>;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Whether the toggle button is disabled. */\n @Input()\n get disabled(): boolean {\n if (this._disabled === undefined && this.datepicker) {\n return this.datepicker.disabled;\n }\n\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Whether ripples on the toggle should be disabled. */\n @Input() disableRipple: boolean;\n\n /** Custom icon set by the consumer. */\n @ContentChild(MatDatepickerToggleIcon, {static: false}) _customIcon: MatDatepickerToggleIcon;\n\n /** Underlying button element. */\n @ViewChild('button', {static: false}) _button: MatButton;\n\n constructor(\n public _intl: MatDatepickerIntl,\n private _changeDetectorRef: ChangeDetectorRef,\n @Attribute('tabindex') defaultTabIndex: string) {\n\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['datepicker']) {\n this._watchStateChanges();\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n\n _open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n\n private _watchStateChanges() {\n const datepickerDisabled = this.datepicker ? this.datepicker._disabledChange : observableOf();\n const inputDisabled = this.datepicker && this.datepicker._datepickerInput ?\n this.datepicker._datepickerInput._disabledChange : observableOf();\n const datepickerToggled = this.datepicker ?\n merge(this.datepicker.openedStream, this.datepicker.closedStream) :\n observableOf();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(\n this._intl.changes,\n datepickerDisabled,\n inputDisabled,\n datepickerToggled\n ).subscribe(() => this._changeDetectorRef.markForCheck());\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 {DOWN_ARROW} from '@angular/cdk/keycodes';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats, ThemePalette} from '@angular/material/core';\nimport {MatFormField} from '@angular/material/form-field';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '@angular/material/input';\nimport {Subscription} from 'rxjs';\nimport {MatDatepicker} from './datepicker';\nimport {createMissingDateImplError} from './datepicker-errors';\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n\n/** @docs-private */\nexport const MAT_DATEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatDatepickerInput),\n multi: true\n};\n\n\n/**\n * An event used for datepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MatDatepickerInputEvent instead.\n */\nexport class MatDatepickerInputEvent<D> {\n /** The new value for the target datepicker input. */\n value: D | null;\n\n constructor(\n /** Reference to the datepicker input component that emitted the event. */\n public target: MatDatepickerInput<D>,\n /** Reference to the native input element associated with the datepicker input. */\n public targetElement: HTMLElement) {\n this.value = this.target.value;\n }\n}\n\n\n/** Directive used to connect an input to a MatDatepicker. */\n@Directive({\n selector: 'input[matDatepicker]',\n providers: [\n MAT_DATEPICKER_VALUE_ACCESSOR,\n MAT_DATEPICKER_VALIDATORS,\n {provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput},\n ],\n host: {\n 'aria-haspopup': 'dialog',\n '[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'matDatepickerInput',\n})\nexport class MatDatepickerInput<D> implements ControlValueAccessor, OnDestroy, Validator {\n /** The datepicker that this input is associated with. */\n @Input()\n set matDatepicker(value: MatDatepicker<D>) {\n if (!value) {\n return;\n }\n\n this._datepicker = value;\n this._datepicker._registerInput(this);\n this._datepickerSubscription.unsubscribe();\n\n this._datepickerSubscription = this._datepicker._selectedChanged.subscribe((selected: D) => {\n this.value = selected;\n this._cvaOnChange(selected);\n this._onTouched();\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n });\n }\n _datepicker: MatDatepicker<D>;\n\n /** Function that can be used to filter out dates within the datepicker. */\n @Input()\n set matDatepickerFilter(value: (date: D | null) => boolean) {\n this._dateFilter = value;\n this._validatorOnChange();\n }\n _dateFilter: (date: D | null) => boolean;\n\n /** The value of the input. */\n @Input()\n get value(): D | null { return this._value; }\n set value(value: D | null) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = !value || this._dateAdapter.isValid(value);\n value = this._getValidDateOrNull(value);\n const oldDate = this.value;\n this._value = value;\n this._formatValue(value);\n\n if (!this._dateAdapter.sameDate(oldDate, value)) {\n this._valueChange.emit(value);\n }\n }\n private _value: D | null;\n\n /** The minimum valid date. */\n @Input()\n get min(): D | null { return this._min; }\n set min(value: D | null) {\n this._min = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _min: D | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): D | null { return this._max; }\n set max(value: D | null) {\n this._max = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _max: D | null;\n\n /** Whether the datepicker-input is disabled. */\n @Input()\n get disabled(): boolean { return !!this._disabled; }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n const element = this._elementRef.nativeElement;\n\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this._disabledChange.emit(newValue);\n }\n\n // We need to null check the `blur` method, because it's undefined during SSR.\n if (newValue && element.blur) {\n // Normally, native input elements automatically blur if they turn disabled. This behavior\n // is problematic, because it would mean that it triggers another change detection cycle,\n // which then causes a changed after checked error if the input element was focused before.\n element.blur();\n }\n }\n private _disabled: boolean;\n\n /** Emits when a `change` event is fired on this `<input>`. */\n @Output() readonly dateChange: EventEmitter<MatDatepickerInputEvent<D>> =\n new EventEmitter<MatDatepickerInputEvent<D>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n @Output() readonly dateInput: EventEmitter<MatDatepickerInputEvent<D>> =\n new EventEmitter<MatDatepickerInputEvent<D>>();\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n _valueChange = new EventEmitter<D | null>();\n\n /** Emits when the disabled state has changed */\n _disabledChange = new EventEmitter<boolean>();\n\n _onTouched = () => {};\n\n private _cvaOnChange: (value: any) => void = () => {};\n\n private _validatorOnChange = () => {};\n\n private _datepickerSubscription = Subscription.EMPTY;\n\n private _localeSubscription = Subscription.EMPTY;\n\n /** The form control validator for whether the input parses. */\n private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid ?\n null : {'matDatepickerParse': {'text': this._elementRef.nativeElement.value}};\n }\n\n /** The form control validator for the min date. */\n private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n return (!this.min || !controlValue ||\n this._dateAdapter.compareDate(this.min, controlValue) <= 0) ?\n null : {'matDatepickerMin': {'min': this.min, 'actual': controlValue}};\n }\n\n /** The form control validator for the max date. */\n private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n return (!this.max || !controlValue ||\n this._dateAdapter.compareDate(this.max, controlValue) >= 0) ?\n null : {'matDatepickerMax': {'max': this.max, 'actual': controlValue}};\n }\n\n /** The form control validator for the date filter. */\n private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._getValidDateOrNull(this._dateAdapter.deserialize(control.value));\n return !this._dateFilter || !controlValue || this._dateFilter(controlValue) ?\n null : {'matDatepickerFilter': true};\n }\n\n /** The combined form control validator for this input. */\n private _validator: ValidatorFn | null =\n Validators.compose(\n [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator]);\n\n /** Whether the last value set on the input was valid. */\n private _lastValueValid = false;\n\n constructor(\n private _elementRef: ElementRef<HTMLInputElement>,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n @Optional() private _formField: MatFormField) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this.value;\n });\n }\n\n ngOnDestroy() {\n this._datepickerSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this._disabledChange.complete();\n }\n\n /** @docs-private */\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** @docs-private */\n validate(c: AbstractControl): ValidationErrors | null {\n return this._validator ? this._validator(c) : null;\n }\n\n /**\n * @deprecated\n * @breaking-change 8.0.0 Use `getConnectedOverlayOrigin` instead\n */\n getPopupConnectionElementRef(): ElementRef {\n return this.getConnectedOverlayOrigin();\n }\n\n /**\n * Gets the element that the datepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: D): void {\n this.value = value;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this._cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _onKeydown(event: KeyboardEvent) {\n const isAltDownArrow = event.altKey && event.keyCode === DOWN_ARROW;\n\n if (this._datepicker && isAltDownArrow && !this._elementRef.nativeElement.readOnly) {\n this._datepicker.open();\n event.preventDefault();\n }\n }\n\n _onInput(value: string) {\n let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);\n this._lastValueValid = !date || this._dateAdapter.isValid(date);\n date = this._getValidDateOrNull(date);\n\n if (!this._dateAdapter.sameDate(date, this._value)) {\n this._value = date;\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n } else {\n this._validatorOnChange();\n }\n }\n\n _onChange() {\n this.dateChange.emit(new MatDatepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n /** Returns the palette used by the input's form field, if any. */\n _getThemePalette(): ThemePalette {\n return this._formField ? this._formField.color : undefined;\n }\n\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n\n this._onTouched();\n }\n\n /** Formats a value and sets it on the input element. */\n private _formatValue(value: D | null) {\n this._elementRef.nativeElement.value =\n value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {ESCAPE, UP_ARROW} from '@angular/cdk/keycodes';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n CanColor,\n CanColorCtor,\n DateAdapter,\n mixinColor,\n ThemePalette,\n} from '@angular/material/core';\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\nimport {merge, Subject, Subscription} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {MatCalendar} from './calendar';\nimport {matDatepickerAnimations} from './datepicker-animations';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatDatepickerInput} from './datepicker-input';\nimport {MatCalendarCellCssClasses} from './calendar-body';\n\n/** Used to generate a unique ID for each datepicker instance. */\nlet datepickerUid = 0;\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-datepicker-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_DATEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n// Boilerplate for applying mixins to MatDatepickerContent.\n/** @docs-private */\nclass MatDatepickerContentBase {\n constructor(public _elementRef: ElementRef) { }\n}\nconst _MatDatepickerContentMixinBase: CanColorCtor & typeof MatDatepickerContentBase =\n mixinColor(MatDatepickerContentBase);\n\n/**\n * Component used as the content for the datepicker dialog and popup. We use this instead of using\n * MatCalendar directly as the content so we can control the initial focus. This also gives us a\n * place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-datepicker-content',\n templateUrl: 'datepicker-content.html',\n styleUrls: ['datepicker-content.css'],\n host: {\n 'class': 'mat-datepicker-content',\n '[@transformPanel]': '\"enter\"',\n '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',\n },\n animations: [\n matDatepickerAnimations.transformPanel,\n matDatepickerAnimations.fadeInCalendar,\n ],\n exportAs: 'matDatepickerContent',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color'],\n})\nexport class MatDatepickerContent<D> extends _MatDatepickerContentMixinBase\n implements AfterViewInit, CanColor {\n\n /** Reference to the internal calendar component. */\n @ViewChild(MatCalendar, {static: false}) _calendar: MatCalendar<D>;\n\n /** Reference to the datepicker that created the overlay. */\n datepicker: MatDatepicker<D>;\n\n /** Whether the datepicker is above or below the input. */\n _isAbove: boolean;\n\n constructor(elementRef: ElementRef) {\n super(elementRef);\n }\n\n ngAfterViewInit() {\n this._calendar.focusActiveCell();\n }\n}\n\n\n// TODO(mmalerba): We use a component instead of a directive here so the user can use implicit\n// template reference variables (e.g. #d vs #d=\"matDatepicker\"). We can change this to a directive\n// if angular adds support for `exportAs: '$implicit'` on directives.\n/** Component responsible for managing the datepicker popup/dialog. */\n@Component({\n moduleId: module.id,\n selector: 'mat-datepicker',\n template: '',\n exportAs: 'matDatepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatDatepicker<D> implements OnDestroy, CanColor {\n private _scrollStrategy: () => ScrollStrategy;\n\n /** An input indicating the type of the custom header component for the calendar, if set. */\n @Input() calendarHeaderComponent: ComponentType<any>;\n\n /** The date to open the calendar to initially. */\n @Input()\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this._datepickerInput ? this._datepickerInput.value : null);\n }\n set startAt(value: D | null) {\n this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _startAt: D | null;\n\n /** The view that the calendar should start in. */\n @Input() startView: 'month' | 'year' | 'multi-year' = 'month';\n\n /** Color palette to use on the datepicker's calendar. */\n @Input()\n get color(): ThemePalette {\n return this._color ||\n (this._datepickerInput ? this._datepickerInput._getThemePalette() : undefined);\n }\n set color(value: ThemePalette) {\n this._color = value;\n }\n _color: ThemePalette;\n\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\n @Input()\n get touchUi(): boolean { return this._touchUi; }\n set touchUi(value: boolean) {\n this._touchUi = coerceBooleanProperty(value);\n }\n private _touchUi = false;\n\n /** Whether the datepicker pop-up should be disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled === undefined && this._datepickerInput ?\n this._datepickerInput.disabled : !!this._disabled;\n }\n set disabled(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._disabledChange.next(newValue);\n }\n }\n private _disabled: boolean;\n\n /**\n * Emits selected year in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits selected month in year view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Classes to be passed to the date picker panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass: string | string[];\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: (date: D) => MatCalendarCellCssClasses;\n\n /** Emits when the datepicker has been opened. */\n @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the datepicker has been closed. */\n @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n\n /** Whether the calendar is open. */\n @Input()\n get opened(): boolean { return this._opened; }\n set opened(value: boolean) { value ? this.open() : this.close(); }\n private _opened = false;\n\n /** The id for the datepicker calendar. */\n id: string = `mat-datepicker-${datepickerUid++}`;\n\n /** The currently selected date. */\n get _selected(): D | null { return this._validSelected; }\n set _selected(value: D | null) { this._validSelected = value; }\n private _validSelected: D | null = null;\n\n /** The minimum selectable date. */\n get _minDate(): D | null {\n return this._datepickerInput && this._datepickerInput.min;\n }\n\n /** The maximum selectable date. */\n get _maxDate(): D | null {\n return this._datepickerInput && this._datepickerInput.max;\n }\n\n get _dateFilter(): (date: D | null) => boolean {\n return this._datepickerInput && this._datepickerInput._dateFilter;\n }\n\n /** A reference to the overlay when the calendar is opened as a popup. */\n _popupRef: OverlayRef;\n\n /** A reference to the dialog when the calendar is opened as a dialog. */\n private _dialogRef: MatDialogRef<MatDatepickerContent<D>> | null;\n\n /** A portal containing the calendar for this datepicker. */\n private _calendarPortal: ComponentPortal<MatDatepickerContent<D>>;\n\n /** Reference to the component instantiated in popup mode. */\n private _popupComponentRef: ComponentRef<MatDatepickerContent<D>> | null;\n\n /** The element that was focused before the datepicker was opened. */\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Subscription to value changes in the associated input element. */\n private _inputSubscription = Subscription.EMPTY;\n\n /** The input element this datepicker is associated with. */\n _datepickerInput: MatDatepickerInput<D>;\n\n /** Emits when the datepicker is disabled. */\n readonly _disabledChange = new Subject<boolean>();\n\n /** Emits new selected date when selected date changes. */\n readonly _selectedChanged = new Subject<D>();\n\n constructor(private _dialog: MatDialog,\n private _overlay: Overlay,\n private _ngZone: NgZone,\n private _viewContainerRef: ViewContainerRef,\n @Inject(MAT_DATEPICKER_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(DOCUMENT) private _document: any) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n this._scrollStrategy = scrollStrategy;\n }\n\n ngOnDestroy() {\n this.close();\n this._inputSubscription.unsubscribe();\n this._disabledChange.complete();\n\n if (this._popupRef) {\n this._popupRef.dispose();\n this._popupComponentRef = null;\n }\n }\n\n /** Selects the given date */\n select(date: D): void {\n let oldValue = this._selected;\n this._selected = date;\n if (!this._dateAdapter.sameDate(oldValue, this._selected)) {\n this._selectedChanged.next(date);\n }\n }\n\n /** Emits the selected year in multiyear view */\n _selectYear(normalizedYear: D): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Emits selected month in year view */\n _selectMonth(normalizedMonth: D): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n /**\n * Register an input with this datepicker.\n * @param input The datepicker input to register with this datepicker.\n */\n _registerInput(input: MatDatepickerInput<D>): void {\n if (this._datepickerInput) {\n throw Error('A MatDatepicker can only be associated with a single input.');\n }\n this._datepickerInput = input;\n this._inputSubscription =\n this._datepickerInput._valueChange.subscribe((value: D | null) => this._selected = value);\n }\n\n /** Open the calendar. */\n open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this._datepickerInput) {\n throw Error('Attempted to open an MatDatepicker with no associated input.');\n }\n if (this._document) {\n this._focusedElementBeforeOpen = this._document.activeElement;\n }\n\n this.touchUi ? this._openAsDialog() : this._openAsPopup();\n this._opened = true;\n this.openedStream.emit();\n }\n\n /** Close the calendar. */\n close(): void {\n if (!this._opened) {\n return;\n }\n if (this._popupRef && this._popupRef.hasAttached()) {\n this._popupRef.detach();\n }\n if (this._dialogRef) {\n this._dialogRef.close();\n this._dialogRef = null;\n }\n if (this._calendarPortal && this._calendarPortal.isAttached) {\n this._calendarPortal.detach();\n }\n\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n this._focusedElementBeforeOpen = null;\n }\n };\n\n if (this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function') {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n this._focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /** Open the calendar as a dialog. */\n private _openAsDialog(): void {\n // Usually this would be handled by `open` which ensures that we can only have one overlay\n // open at a time, however since we reset the variables in async handlers some overlays\n // may slip through if the user opens and closes multiple times in quick succession (e.g.\n // by holding down the enter key).\n if (this._dialogRef) {\n this._dialogRef.close();\n }\n\n this._dialogRef = this._dialog.open<MatDatepickerContent<D>>(MatDatepickerContent, {\n direction: this._dir ? this._dir.value : 'ltr',\n viewContainerRef: this._viewContainerRef,\n panelClass: 'mat-datepicker-dialog',\n });\n\n this._dialogRef.afterClosed().subscribe(() => this.close());\n this._dialogRef.componentInstance.datepicker = this;\n this._setColor();\n }\n\n /** Open the calendar as a popup. */\n private _openAsPopup(): void {\n if (!this._calendarPortal) {\n this._calendarPortal = new ComponentPortal<MatDatepickerContent<D>>(MatDatepickerContent,\n this._viewContainerRef);\n }\n\n if (!this._popupRef) {\n this._createPopup();\n }\n\n if (!this._popupRef.hasAttached()) {\n this._popupComponentRef = this._popupRef.attach(this._calendarPortal);\n this._popupComponentRef.instance.datepicker = this;\n this._setColor();\n\n // Update the position once the calendar has rendered.\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this._popupRef.updatePosition();\n });\n }\n }\n\n /** Create the popup. */\n private _createPopup(): void {\n const overlayConfig = new OverlayConfig({\n positionStrategy: this._createPopupPositionStrategy(),\n hasBackdrop: true,\n backdropClass: 'mat-overlay-transparent-backdrop',\n direction: this._dir,\n scrollStrategy: this._scrollStrategy(),\n panelClass: 'mat-datepicker-popup',\n });\n\n this._popupRef = this._overlay.create(overlayConfig);\n this._popupRef.overlayElement.setAttribute('role', 'dialog');\n\n merge(\n this._popupRef.backdropClick(),\n this._popupRef.detachments(),\n this._popupRef.keydownEvents().pipe(filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the datepicker.\n return event.keyCode === ESCAPE ||\n (this._datepickerInput && event.altKey && event.keyCode === UP_ARROW);\n }))\n ).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n\n this.close();\n });\n }\n\n /** Create the popup PositionStrategy. */\n private _createPopupPositionStrategy(): PositionStrategy {\n return this._overlay.position()\n .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mat-datepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition()\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n }\n ]);\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n\n /** Passes the current theme color along to the calendar overlay. */\n private _setColor(): void {\n const color = this.color;\n if (this._popupComponentRef) {\n this._popupComponentRef.instance.color = color;\n }\n if (this._dialogRef) {\n this._dialogRef.componentInstance.color = color;\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 */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datepicker.\n * @docs-private\n */\nexport const matDatepickerAnimations: {\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInCalendar: AnimationTriggerMetadata;\n} = {\n /** Transforms the height of the datepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n })),\n transition('void => enter', animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n opacity: 1,\n transform: 'scale(1, 1)'\n }))),\n transition('* => void', animate('100ms linear', style({opacity: 0})))\n ]),\n\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({opacity: 0})),\n state('enter', style({opacity: 1})),\n\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\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 {ComponentPortal, ComponentType, Portal} from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {MatCalendarCellCssClasses} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\nimport {MatDatepickerIntl} from './datepicker-intl';\nimport {MatMonthView} from './month-view';\nimport {\n getActiveOffset,\n isSameMultiYearView,\n MatMultiYearView,\n yearsPerPage\n} from './multi-year-view';\nimport {MatYearView} from './year-view';\n\n/**\n * Possible views for the calendar.\n * @docs-private\n */\nexport type MatCalendarView = 'month' | 'year' | 'multi-year';\n\n/** Default header for MatCalendar */\n@Component({\n moduleId: module.id,\n selector: 'mat-calendar-header',\n templateUrl: 'calendar-header.html',\n exportAs: 'matCalendarHeader',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarHeader<D> {\n constructor(private _intl: MatDatepickerIntl,\n @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar<D>,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n changeDetectorRef: ChangeDetectorRef) {\n\n this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());\n }\n\n /** The label for the current calendar view. */\n get periodButtonText(): string {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter\n .format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYearName(this.calendar.activeDate);\n }\n\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._dateAdapter.getYear(this.calendar.activeDate);\n const minYearOfPage = activeYear - getActiveOffset(\n this._dateAdapter, this.calendar.activeDate, this.calendar.minDate, this.calendar.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n return `${minYearOfPage} \\u2013 ${maxYearOfPage}`;\n }\n\n get periodButtonLabel(): string {\n return this.calendar.currentView == 'month' ?\n this._intl.switchToMultiYearViewLabel : this._intl.switchToMonthViewLabel;\n }\n\n /** The label for the previous button. */\n get prevButtonLabel(): string {\n return {\n 'month': this._intl.prevMonthLabel,\n 'year': this._intl.prevYearLabel,\n 'multi-year': this._intl.prevMultiYearLabel\n }[this.calendar.currentView];\n }\n\n /** The label for the next button. */\n get nextButtonLabel(): string {\n return {\n 'month': this._intl.nextMonthLabel,\n 'year': this._intl.nextYearLabel,\n 'multi-year': this._intl.nextMultiYearLabel\n }[this.calendar.currentView];\n }\n\n /** Handles user clicks on the period label. */\n currentPeriodClicked(): void {\n this.calendar.currentView = this.calendar.currentView == 'month' ? 'multi-year' : 'month';\n }\n\n /** Handles user clicks on the previous button. */\n previousClicked(): void {\n this.calendar.activeDate = this.calendar.currentView == 'month' ?\n this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) :\n this._dateAdapter.addCalendarYears(\n this.calendar.activeDate, this.calendar.currentView == 'year' ? -1 : -yearsPerPage\n );\n }\n\n /** Handles user clicks on the next button. */\n nextClicked(): void {\n this.calendar.activeDate = this.calendar.currentView == 'month' ?\n this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) :\n this._dateAdapter.addCalendarYears(\n this.calendar.activeDate,\n this.calendar.currentView == 'year' ? 1 : yearsPerPage\n );\n }\n\n /** Whether the previous period button is enabled. */\n previousEnabled(): boolean {\n if (!this.calendar.minDate) {\n return true;\n }\n return !this.calendar.minDate ||\n !this._isSameView(this.calendar.activeDate, this.calendar.minDate);\n }\n\n /** Whether the next period button is enabled. */\n nextEnabled(): boolean {\n return !this.calendar.maxDate ||\n !this._isSameView(this.calendar.activeDate, this.calendar.maxDate);\n }\n\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n private _isSameView(date1: D, date2: D): boolean {\n if (this.calendar.currentView == 'month') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2) &&\n this._dateAdapter.getMonth(date1) == this._dateAdapter.getMonth(date2);\n }\n if (this.calendar.currentView == 'year') {\n return this._dateAdapter.getYear(date1) == this._dateAdapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(\n this._dateAdapter, date1, date2, this.calendar.minDate, this.calendar.maxDate);\n }\n}\n\n/**\n * A calendar that is used as part of the datepicker.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-calendar',\n templateUrl: 'calendar.html',\n styleUrls: ['calendar.css'],\n host: {\n 'class': 'mat-calendar',\n },\n exportAs: 'matCalendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendar<D> implements AfterContentInit, AfterViewChecked, OnDestroy, OnChanges {\n /** An input indicating the type of the header component, if set. */\n @Input() headerComponent: ComponentType<any>;\n\n /** A portal containing the header component type for this calendar. */\n _calendarHeaderPortal: Portal<any>;\n\n private _intlChanges: Subscription;\n\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n private _moveFocusOnNextTick = false;\n\n /** A date representing the period (month or year) to start the calendar in. */\n @Input()\n get startAt(): D | null { return this._startAt; }\n set startAt(value: D | null) {\n this._startAt = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _startAt: D | null;\n\n /** Whether the calendar should be started in month or year view. */\n @Input() startView: MatCalendarView = 'month';\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null { return this._selected; }\n set selected(value: D | null) {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _selected: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** Function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: (date: D) => MatCalendarCellCssClasses;\n\n /** Emits when the currently selected date changes. */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits the year chosen in multiyear view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /**\n * Emits the month chosen in year view.\n * This doesn't imply a change on the selected date.\n */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n /** Reference to the current month view component. */\n @ViewChild(MatMonthView, {static: false}) monthView: MatMonthView<D>;\n\n /** Reference to the current year view component. */\n @ViewChild(MatYearView, {static: false}) yearView: MatYearView<D>;\n\n /** Reference to the current multi-year view component. */\n @ViewChild(MatMultiYearView, {static: false}) multiYearView: MatMultiYearView<D>;\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get activeDate(): D { return this._clampedActiveDate; }\n set activeDate(value: D) {\n this._clampedActiveDate = this._dateAdapter.clampDate(value, this.minDate, this.maxDate);\n this.stateChanges.next();\n this._changeDetectorRef.markForCheck();\n }\n private _clampedActiveDate: D;\n\n /** Whether the calendar is in month view. */\n get currentView(): MatCalendarView { return this._currentView; }\n set currentView(value: MatCalendarView) {\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n }\n private _currentView: MatCalendarView;\n\n /**\n * Emits whenever there is a state change that the header may need to respond to.\n */\n stateChanges = new Subject<void>();\n\n constructor(_intl: MatDatepickerIntl,\n @Optional() private _dateAdapter: DateAdapter<D>,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n private _changeDetectorRef: ChangeDetectorRef) {\n\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n this._intlChanges = _intl.changes.subscribe(() => {\n _changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n\n ngAfterContentInit() {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent || MatCalendarHeader);\n this.activeDate = this.startAt || this._dateAdapter.today();\n\n // Assign to the private property since we don't want to move focus on init.\n this._currentView = this.startView;\n }\n\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n this.stateChanges.complete();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const change =\n changes['minDate'] || changes['maxDate'] || changes['dateFilter'];\n\n if (change && !change.firstChange) {\n const view = this._getCurrentViewComponent();\n\n if (view) {\n // We need to `detectChanges` manually here, because the `minDate`, `maxDate` etc. are\n // passed down to the view via data bindings which won't be up-to-date when we call `_init`.\n this._changeDetectorRef.detectChanges();\n view._init();\n }\n }\n\n this.stateChanges.next();\n }\n\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell();\n }\n\n /** Updates today's date after an update of the active date */\n updateTodaysDate() {\n let view = this.currentView == 'month' ? this.monthView :\n (this.currentView == 'year' ? this.yearView : this.multiYearView);\n\n view.ngAfterContentInit();\n }\n\n /** Handles date selection in the month view. */\n _dateSelected(date: D): void {\n if (!this._dateAdapter.sameDate(date, this.selected)) {\n this.selectedChange.emit(date);\n }\n }\n\n /** Handles year selection in the multiyear view. */\n _yearSelectedInMultiYearView(normalizedYear: D) {\n this.yearSelected.emit(normalizedYear);\n }\n\n /** Handles month selection in the year view. */\n _monthSelectedInYearView(normalizedMonth: D) {\n this.monthSelected.emit(normalizedMonth);\n }\n\n _userSelected(): void {\n this._userSelection.emit();\n }\n\n /** Handles year/month selection in the multi-year/year views. */\n _goToDateInView(date: D, view: 'month' | 'year' | 'multi-year'): void {\n this.activeDate = date;\n this.currentView = view;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n\n /** Returns the component instance that corresponds to the current calendar view. */\n private _getCurrentViewComponent() {\n return this.monthView || this.yearView || this.multiYearView;\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 DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {MatCalendarBody, MatCalendarCell} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\n\n/**\n * An internal component used to display a single year in the datepicker.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-year-view',\n templateUrl: 'year-view.html',\n exportAs: 'matYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatYearView<D> implements AfterContentInit {\n /** The date to display in this year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n let oldActiveDate = this._activeDate;\n const validDate =\n this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null { return this._selected; }\n set selected(value: D | null) {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._selectedMonth = this._getMonthInCurrentYear(this._selected);\n }\n private _selected: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Emits when a new month is selected. */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits the selected month. This doesn't imply a change on the selected date */\n @Output() readonly monthSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, {static: false}) _matCalendarBody: MatCalendarBody;\n\n /** Grid of calendar cells representing the months of the year. */\n _months: MatCalendarCell[][];\n\n /** The label for this year (e.g. \"2017\"). */\n _yearLabel: string;\n\n /** The month in this year that today falls on. Null if today is in a different year. */\n _todayMonth: number | null;\n\n /**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n _selectedMonth: number | null;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new month is selected. */\n _monthSelected(month: number) {\n const normalizedDate =\n this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);\n\n this.monthSelected.emit(normalizedDate);\n\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(normalizedDate);\n\n this.selectedChange.emit(this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate), month,\n Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n -this._dateAdapter.getMonth(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarMonths(this._activeDate,\n 11 - this._dateAdapter.getMonth(this._activeDate));\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n this._monthSelected(this._dateAdapter.getMonth(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Initializes this year view. */\n _init() {\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._dateAdapter.today());\n this._yearLabel = this._dateAdapter.getYearName(this.activeDate);\n\n let monthNames = this._dateAdapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]].map(row => row.map(\n month => this._createCellForMonth(month, monthNames[month])));\n this._changeDetectorRef.markForCheck();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private _getMonthInCurrentYear(date: D | null) {\n return date && this._dateAdapter.getYear(date) == this._dateAdapter.getYear(this.activeDate) ?\n this._dateAdapter.getMonth(date) : null;\n }\n\n /** Creates an MatCalendarCell for the given month. */\n private _createCellForMonth(month: number, monthName: string) {\n let ariaLabel = this._dateAdapter.format(\n this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1),\n this._dateFormats.display.monthYearA11yLabel);\n return new MatCalendarCell(\n month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month));\n }\n\n /** Whether the given month is enabled. */\n private _shouldEnableMonth(month: number) {\n\n const activeYear = this._dateAdapter.getYear(this.activeDate);\n\n if (month === undefined || month === null ||\n this._isYearAndMonthAfterMaxDate(activeYear, month) ||\n this._isYearAndMonthBeforeMinDate(activeYear, month)) {\n return false;\n }\n\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfMonth = this._dateAdapter.createDate(activeYear, month, 1);\n\n // If any date in the month is enabled count the month as enabled.\n for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month;\n date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n private _isYearAndMonthAfterMaxDate(year: number, month: number) {\n if (this.maxDate) {\n const maxYear = this._dateAdapter.getYear(this.maxDate);\n const maxMonth = this._dateAdapter.getMonth(this.maxDate);\n\n return year > maxYear || (year === maxYear && month > maxMonth);\n }\n\n return false;\n }\n\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n private _isYearAndMonthBeforeMinDate(year: number, month: number) {\n if (this.minDate) {\n const minYear = this._dateAdapter.getYear(this.minDate);\n const minMonth = this._dateAdapter.getMonth(this.minDate);\n\n return year < minYear || (year === minYear && month < minMonth);\n }\n\n return false;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\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 DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {MatCalendarBody, MatCalendarCell} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display a year selector in the datepicker.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-multi-year-view',\n templateUrl: 'multi-year-view.html',\n exportAs: 'matMultiYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMultiYearView<D> implements AfterContentInit {\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n let oldActiveDate = this._activeDate;\n const validDate =\n this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n\n if (!isSameMultiYearView(\n this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null { return this._selected; }\n set selected(value: D | null) {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._selectedYear = this._selected && this._dateAdapter.getYear(this._selected);\n }\n private _selected: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Emits when a new year is selected. */\n @Output() readonly selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits the selected year. This doesn't imply a change on the selected date */\n @Output() readonly yearSelected: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, {static: false}) _matCalendarBody: MatCalendarBody;\n\n /** Grid of calendar cells representing the currently displayed years. */\n _years: MatCalendarCell[][];\n\n /** The year that today falls on. */\n _todayYear: number;\n\n /** The year of the selected date. Null if the selected date is null. */\n _selectedYear: number | null;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Initializes this multi-year view. */\n _init() {\n this._todayYear = this._dateAdapter.getYear(this._dateAdapter.today());\n\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this._dateAdapter.getYear(this._activeDate);\n const minYearOfPage = activeYear - getActiveOffset(\n this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n\n this._years = [];\n for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length == yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n\n /** Handles when a new year is selected. */\n _yearSelected(year: number) {\n this.yearSelected.emit(this._dateAdapter.createDate(year, 0, 1));\n let month = this._dateAdapter.getMonth(this.activeDate);\n let daysInMonth =\n this._dateAdapter.getNumDaysInMonth(this._dateAdapter.createDate(year, month, 1));\n this.selectedChange.emit(this._dateAdapter.createDate(year, month,\n Math.min(this._dateAdapter.getDate(this.activeDate), daysInMonth)));\n }\n\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n -getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarYears(this._activeDate,\n yearsPerPage - getActiveOffset(\n this._dateAdapter, this.activeDate, this.minDate, this.maxDate) - 1);\n break;\n case PAGE_UP:\n this.activeDate =\n this._dateAdapter.addCalendarYears(\n this._activeDate, event.altKey ? -yearsPerPage * 10 : -yearsPerPage);\n break;\n case PAGE_DOWN:\n this.activeDate =\n this._dateAdapter.addCalendarYears(\n this._activeDate, event.altKey ? yearsPerPage * 10 : yearsPerPage);\n break;\n case ENTER:\n case SPACE:\n this._yearSelected(this._dateAdapter.getYear(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n _getActiveCell(): number {\n return getActiveOffset(this._dateAdapter, this.activeDate, this.minDate, this.maxDate);\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n\n /** Creates an MatCalendarCell for the given year. */\n private _createCellForYear(year: number) {\n let yearName = this._dateAdapter.getYearName(this._dateAdapter.createDate(year, 0, 1));\n return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));\n }\n\n /** Whether the given year is enabled. */\n private _shouldEnableYear(year: number) {\n // disable if the year is greater than maxDate lower than minDate\n if (year === undefined || year === null ||\n (this.maxDate && year > this._dateAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._dateAdapter.getYear(this.minDate))) {\n return false;\n }\n\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfYear = this._dateAdapter.createDate(year, 0, 1);\n\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear; this._dateAdapter.getYear(date) == year;\n date = this._dateAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n\nexport function isSameMultiYearView<D>(\n dateAdapter: DateAdapter<D>, date1: D, date2: D, minDate: D | null, maxDate: D | null): boolean {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return Math.floor((year1 - startingYear) / yearsPerPage) ===\n Math.floor((year2 - startingYear) / yearsPerPage);\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n dateAdapter: DateAdapter<D>, activeDate: D, minDate: D | null, maxDate: D | null): number {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo((activeYear - getStartingYear(dateAdapter, minDate, maxDate)),\n yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n dateAdapter: DateAdapter<D>, minDate: D | null, maxDate: D | null): number {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n } else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo (a: number, b: number): number {\n return (a % b + b) % b;\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 DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n UP_ARROW,\n SPACE,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output,\n ViewEncapsulation,\n ViewChild,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {MatCalendarBody, MatCalendarCell, MatCalendarCellCssClasses} from './calendar-body';\nimport {createMissingDateImplError} from './datepicker-errors';\n\n\nconst DAYS_PER_WEEK = 7;\n\n\n/**\n * An internal component used to display a single month in the datepicker.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-month-view',\n templateUrl: 'month-view.html',\n exportAs: 'matMonthView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatMonthView<D> implements AfterContentInit {\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n @Input()\n get activeDate(): D { return this._activeDate; }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n const validDate =\n this._getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();\n this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);\n if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null { return this._selected; }\n set selected(value: D | null) {\n this._selected = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._selectedDate = this._getDateInCurrentMonth(this._selected);\n }\n private _selected: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null { return this._minDate; }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _minDate: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null { return this._maxDate; }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._dateAdapter.deserialize(value));\n }\n private _maxDate: D | null;\n\n /** Function used to filter which dates are selectable. */\n @Input() dateFilter: (date: D) => boolean;\n\n /** Function that can be used to add custom CSS classes to dates. */\n @Input() dateClass: (date: D) => MatCalendarCellCssClasses;\n\n /** Emits when a new date is selected. */\n @Output() readonly selectedChange: EventEmitter<D | null> = new EventEmitter<D | null>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MatCalendarBody, {static: false}) _matCalendarBody: MatCalendarBody;\n\n /** The label for this month (e.g. \"January 2017\"). */\n _monthLabel: string;\n\n /** Grid of calendar cells representing the dates of the month. */\n _weeks: MatCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n _firstWeekOffset: number;\n\n /**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n _selectedDate: number | null;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n _todayDate: number | null;\n\n /** The names of the weekdays. */\n _weekdays: {long: string, narrow: string}[];\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n @Optional() public _dateAdapter: DateAdapter<D>,\n @Optional() private _dir?: Directionality) {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MAT_DATE_FORMATS');\n }\n\n const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();\n const narrowWeekdays = this._dateAdapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._dateAdapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return {long, narrow: narrowWeekdays[i]};\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n\n this._activeDate = this._dateAdapter.today();\n }\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new date is selected. */\n _dateSelected(date: number) {\n if (this._selectedDate != date) {\n const selectedYear = this._dateAdapter.getYear(this.activeDate);\n const selectedMonth = this._dateAdapter.getMonth(this.activeDate);\n const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);\n\n this.selectedChange.emit(selectedDate);\n }\n\n this._userSelection.emit();\n }\n\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n 1 - this._dateAdapter.getDate(this._activeDate));\n break;\n case END:\n this.activeDate = this._dateAdapter.addCalendarDays(this._activeDate,\n (this._dateAdapter.getNumDaysInMonth(this._activeDate) -\n this._dateAdapter.getDate(this._activeDate)));\n break;\n case PAGE_UP:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, -1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey ?\n this._dateAdapter.addCalendarYears(this._activeDate, 1) :\n this._dateAdapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n this._dateSelected(this._dateAdapter.getDate(this._activeDate));\n this._userSelection.emit();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._dateAdapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Initializes this month view. */\n _init() {\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n this._todayDate = this._getDateInCurrentMonth(this._dateAdapter.today());\n this._monthLabel =\n this._dateAdapter.getMonthNames('short')[this._dateAdapter.getMonth(this.activeDate)]\n .toLocaleUpperCase();\n\n let firstOfMonth = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate),\n this._dateAdapter.getMonth(this.activeDate), 1);\n this._firstWeekOffset =\n (DAYS_PER_WEEK + this._dateAdapter.getDayOfWeek(firstOfMonth) -\n this._dateAdapter.getFirstDayOfWeek()) % DAYS_PER_WEEK;\n\n this._createWeekCells();\n this._changeDetectorRef.markForCheck();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._matCalendarBody._focusActiveCell();\n }\n\n /** Creates MatCalendarCells for the dates in this month. */\n private _createWeekCells() {\n const daysInMonth = this._dateAdapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._dateAdapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._dateAdapter.createDate(\n this._dateAdapter.getYear(this.activeDate),\n this._dateAdapter.getMonth(this.activeDate), i + 1);\n const enabled = this._shouldEnableDate(date);\n const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);\n const cellClasses = this.dateClass ? this.dateClass(date) : undefined;\n\n this._weeks[this._weeks.length - 1]\n .push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, cellClasses));\n }\n }\n\n /** Date filter for the month */\n private _shouldEnableDate(date: D): boolean {\n return !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate || this._dateAdapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._dateAdapter.compareDate(date, this.maxDate) <= 0);\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private _getDateInCurrentMonth(date: D | null): number | null {\n return date && this._hasSameMonthAndYear(date, this.activeDate) ?\n this._dateAdapter.getDate(date) : null;\n }\n\n /** Checks whether the 2 dates are non-null and fall within the same month of the same year. */\n private _hasSameMonthAndYear(d1: D | null, d2: D | null): boolean {\n return !!(d1 && d2 && this._dateAdapter.getMonth(d1) == this._dateAdapter.getMonth(d2) &&\n this._dateAdapter.getYear(d1) == this._dateAdapter.getYear(d2));\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n private _getValidDateOrNull(obj: any): D | null {\n return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\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 ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n NgZone,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport {take} from 'rxjs/operators';\n\n/**\n * Extra CSS classes that can be associated with a calendar cell.\n */\nexport type MatCalendarCellCssClasses = string | string[] | Set<string> | {[key: string]: any};\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MatCalendarCell {\n constructor(public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public cssClasses?: MatCalendarCellCssClasses) {}\n}\n\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: '[mat-calendar-body]',\n templateUrl: 'calendar-body.html',\n styleUrls: ['calendar-body.css'],\n host: {\n 'class': 'mat-calendar-body',\n 'role': 'grid',\n 'aria-readonly': 'true'\n },\n exportAs: 'matCalendarBody',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatCalendarBody implements OnChanges {\n /** The label for the table. (e.g. \"Jan 2017\"). */\n @Input() label: string;\n\n /** The cells to display in the table. */\n @Input() rows: MatCalendarCell[][];\n\n /** The value in the table that corresponds to today. */\n @Input() todayValue: number;\n\n /** The value in the table that is currently selected. */\n @Input() selectedValue: number;\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n @Input() labelMinRequiredCells: number;\n\n /** The number of columns in the table. */\n @Input() numCols = 7;\n\n /** The cell number of the active cell in the table. */\n @Input() activeCell = 0;\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n @Input() cellAspectRatio = 1;\n\n /** Emits when a new value is selected. */\n @Output() readonly selectedValueChange: EventEmitter<number> = new EventEmitter<number>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n _firstRowOffset: number;\n\n /** Padding for the individual date cells. */\n _cellPadding: string;\n\n /** Width of an individual cell. */\n _cellWidth: string;\n\n constructor(private _elementRef: ElementRef<HTMLElement>, private _ngZone: NgZone) { }\n\n _cellClicked(cell: MatCalendarCell): void {\n if (cell.enabled) {\n this.selectedValueChange.emit(cell.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes['numCols'];\n const {rows, numCols} = this;\n\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${50 * this.cellAspectRatio / numCols}%`;\n }\n\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n\n _isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n\n return cellNumber == this.activeCell;\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const activeCell: HTMLElement | null =\n this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n\n if (activeCell) {\n activeCell.focus();\n }\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 {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n\n/** Datepicker data that requires internationalization. */\n@Injectable({providedIn: 'root'})\nexport class MatDatepickerIntl {\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 /** A label for the calendar popup (used by screen readers). */\n calendarLabel: string = 'Calendar';\n\n /** A label for the button used to open the calendar popup (used by screen readers). */\n openCalendarLabel: string = 'Open calendar';\n\n /** A label for the previous month button (used by screen readers). */\n prevMonthLabel: string = 'Previous month';\n\n /** A label for the next month button (used by screen readers). */\n nextMonthLabel: string = 'Next month';\n\n /** A label for the previous year button (used by screen readers). */\n prevYearLabel: string = 'Previous year';\n\n /** A label for the next year button (used by screen readers). */\n nextYearLabel: string = 'Next year';\n\n /** A label for the previous multi-year button (used by screen readers). */\n prevMultiYearLabel: string = 'Previous 20 years';\n\n /** A label for the next multi-year button (used by screen readers). */\n nextMultiYearLabel: string = 'Next 20 years';\n\n /** A label for the 'switch to month view' button (used by screen readers). */\n switchToMonthViewLabel: string = 'Choose date';\n\n /** A label for the 'switch to year view' button (used by screen readers). */\n switchToMultiYearViewLabel: string = 'Choose month and year';\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/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `MatDatepicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: MatNativeDateModule, MatMomentDateModule, or provide a ` +\n `custom implementation.`);\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 {TextFieldModule} from '@angular/cdk/text-field';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatTextareaAutosize} from './autosize';\nimport {MatInput} from './input';\n\n\n@NgModule({\n declarations: [MatInput, MatTextareaAutosize],\n imports: [\n CommonModule,\n TextFieldModule,\n MatFormFieldModule,\n ],\n exports: [\n TextFieldModule,\n // We re-export the `MatFormFieldModule` since `MatInput` will almost always\n // be used together with `MatFormField`.\n MatFormFieldModule,\n MatInput,\n MatTextareaAutosize,\n ],\n providers: [ErrorStateMatcher],\n})\nexport class MatInputModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n Directive,\n DoCheck,\n ElementRef,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n} from '@angular/core';\nimport {FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit'\n];\n\nlet nextUniqueId = 0;\n\n// Boilerplate for applying mixins to MatInput.\n/** @docs-private */\nclass MatInputBase {\n constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /** @docs-private */\n public ngControl: NgControl) {}\n}\nconst _MatInputMixinBase: CanUpdateErrorStateCtor & typeof MatInputBase =\n mixinErrorState(MatInputBase);\n\n/** Directive that allows a native input to work inside a `MatFormField`. */\n@Directive({\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n /**\n * @breaking-change 8.0.0 remove .mat-form-field-autofill-control in favor of AutofillMonitor.\n */\n 'class': 'mat-input-element mat-form-field-autofill-control',\n '[class.mat-input-server]': '_isServer',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[disabled]': 'disabled',\n '[required]': 'required',\n '[attr.readonly]': 'readonly && !_isNativeSelect || null',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-required]': 'required.toString()',\n '(blur)': '_focusChanged(false)',\n '(focus)': '_focusChanged(true)',\n '(input)': '_onInput()',\n },\n providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput extends _MatInputMixinBase implements MatFormFieldControl<any>, OnChanges,\n OnDestroy, OnInit, DoCheck, CanUpdateErrorState {\n protected _uid = `mat-input-${nextUniqueId++}`;\n protected _previousNativeValue: any;\n private _inputValueAccessor: {value: any};\n /** The aria-describedby attribute on the input for improved a11y. */\n _ariaDescribedby: string;\n\n /** Whether the component is being rendered on the server. */\n _isServer = false;\n\n /** Whether the component is a native html select. */\n _isNativeSelect = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n controlType: string = 'mat-input';\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n autofilled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string { return this._id; }\n set id(value: string) { this._id = value || this._uid; }\n protected _id: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) { this._required = coerceBooleanProperty(value); }\n protected _required = false;\n\n /** Input type of the element. */\n @Input()\n get type(): string { return this._type; }\n set type(value: string) {\n this._type = value || 'text';\n this._validateType();\n\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea() && getSupportedInputTypes().has(this._type)) {\n (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n }\n }\n protected _type = 'text';\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string { return this._inputValueAccessor.value; }\n set value(value: string) {\n if (value !== this.value) {\n this._inputValueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n /** Whether the element is readonly. */\n @Input()\n get readonly(): boolean { return this._readonly; }\n set readonly(value: boolean) { this._readonly = coerceBooleanProperty(value); }\n private _readonly = false;\n\n protected _neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n ].filter(t => getSupportedInputTypes().has(t));\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\n protected _platform: Platform,\n /** @docs-private */\n @Optional() @Self() public ngControl: NgControl,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,\n private _autofillMonitor: AutofillMonitor,\n ngZone: NgZone) {\n\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n\n const element = this._elementRef.nativeElement;\n\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = inputValueAccessor || element;\n\n this._previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (_platform.IOS) {\n ngZone.runOutsideAngular(() => {\n _elementRef.nativeElement.addEventListener('keyup', (event: Event) => {\n let el = event.target as HTMLInputElement;\n if (!el.value && !el.selectionStart && !el.selectionEnd) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n });\n });\n }\n\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = element.nodeName.toLowerCase() === 'select';\n\n if (this._isNativeSelect) {\n this.controlType = (element as HTMLSelectElement).multiple ? 'mat-native-select-multiple' :\n 'mat-native-select';\n }\n }\n\n ngOnInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** Callback for the cases where the focused state of the input changes. */\n _focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused && (!this.readonly || !isFocused)) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n\n /** Does some manual dirty checking on the native input `value` property. */\n protected _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Make sure the input is a supported type. */\n protected _validateType() {\n if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n\n /** Checks whether the input type is one of the types that are never empty. */\n protected _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n protected _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n return validity && validity.badInput;\n }\n\n /** Determines if the component host is a textarea. */\n protected _isTextarea() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'textarea';\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() &&\n !this.autofilled;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return this.focused || selectElement.multiple || !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n } else {\n return this.focused || !this.empty;\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n this._ariaDescribedby = ids.join(' ');\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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/**\n * This token is used to inject the object whose value should be set into `MatInput`. If none is\n * provided, the native `HTMLInputElement` is used. Directives like `MatDatepickerInput` can provide\n * themselves for this token, in order to make `MatInput` delegate the getting and setting of the\n * value to them.\n */\nexport const MAT_INPUT_VALUE_ACCESSOR =\n new InjectionToken<{value: any}>('MAT_INPUT_VALUE_ACCESSOR');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 getMatInputUnsupportedTypeError(type: string): Error {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {CdkTextareaAutosize} from '@angular/cdk/text-field';\nimport {Directive, Input} from '@angular/core';\n\n/**\n * Directive to automatically resize a textarea to fit its content.\n * @deprecated Use `cdkTextareaAutosize` from `@angular/cdk/text-field` instead.\n * @breaking-change 8.0.0\n */\n@Directive({\n selector: 'textarea[mat-autosize], textarea[matTextareaAutosize]',\n exportAs: 'matTextareaAutosize',\n inputs: ['cdkAutosizeMinRows', 'cdkAutosizeMaxRows'],\n host: {\n 'class': 'cdk-textarea-autosize mat-autosize',\n // Textarea elements that have the directive applied should have a single row by default.\n // Browsers normally show two rows by default and therefore this limits the minRows binding.\n 'rows': '1',\n '(input)': '_noopInputHandler()',\n },\n})\nexport class MatTextareaAutosize extends CdkTextareaAutosize {\n @Input()\n get matAutosizeMinRows(): number { return this.minRows; }\n set matAutosizeMinRows(value: number) { this.minRows = value; }\n\n @Input()\n get matAutosizeMaxRows(): number { return this.maxRows; }\n set matAutosizeMaxRows(value: number) { this.maxRows = value; }\n\n @Input('mat-autosize')\n get matAutosize(): boolean { return this.enabled; }\n set matAutosize(value: boolean) { this.enabled = value; }\n\n @Input()\n get matTextareaAutosize(): boolean { return this.enabled; }\n set matTextareaAutosize(value: boolean) { this.enabled = 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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MatDialog} from './dialog';\nimport {MatDialogContainer} from './dialog-container';\nimport {\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogTitle,\n} from './dialog-content-directives';\n\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n PortalModule,\n MatCommonModule,\n ],\n exports: [\n MatDialogContainer,\n MatDialogClose,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatCommonModule,\n ],\n declarations: [\n MatDialogContainer,\n MatDialogClose,\n MatDialogTitle,\n MatDialogActions,\n MatDialogContent,\n ],\n providers: [\n MatDialog,\n MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [MatDialogContainer],\n})\nexport class MatDialogModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 Directive,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges,\n ElementRef,\n} from '@angular/core';\nimport {MatDialog} from './dialog';\nimport {MatDialogRef} from './dialog-ref';\n\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n\n/**\n * Button that will close the current dialog.\n */\n@Directive({\n selector: `button[mat-dialog-close], button[matDialogClose]`,\n exportAs: 'matDialogClose',\n host: {\n '(click)': 'dialogRef.close(dialogResult)',\n '[attr.aria-label]': 'ariaLabel || null',\n 'type': 'button', // Prevents accidental form submits.\n }\n})\nexport class MatDialogClose implements OnInit, OnChanges {\n /** Screenreader label for the button. */\n @Input('aria-label') ariaLabel: string;\n\n /** Dialog close input. */\n @Input('mat-dialog-close') dialogResult: any;\n\n @Input('matDialogClose') _matDialogClose: any;\n\n constructor(\n @Optional() public dialogRef: MatDialogRef<any>,\n private _elementRef: ElementRef<HTMLElement>,\n private _dialog: MatDialog) {}\n\n ngOnInit() {\n if (!this.dialogRef) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the DialogRef isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the DialogRef by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\n}\n\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\n@Directive({\n selector: '[mat-dialog-title], [matDialogTitle]',\n exportAs: 'matDialogTitle',\n host: {\n 'class': 'mat-dialog-title',\n '[id]': 'id',\n },\n})\nexport class MatDialogTitle implements OnInit {\n @Input() id = `mat-dialog-title-${dialogElementUid++}`;\n\n constructor(\n @Optional() private _dialogRef: MatDialogRef<any>,\n private _elementRef: ElementRef<HTMLElement>,\n private _dialog: MatDialog) {}\n\n ngOnInit() {\n if (!this._dialogRef) {\n this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs)!;\n }\n\n if (this._dialogRef) {\n Promise.resolve().then(() => {\n const container = this._dialogRef._containerInstance;\n\n if (container && !container._ariaLabelledBy) {\n container._ariaLabelledBy = this.id;\n }\n });\n }\n }\n}\n\n\n/**\n * Scrollable content container of a dialog.\n */\n@Directive({\n selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,\n host: {'class': 'mat-dialog-content'}\n})\nexport class MatDialogContent {}\n\n\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\n@Directive({\n selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,\n host: {'class': 'mat-dialog-actions'}\n})\nexport class MatDialogActions {}\n\n\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element: ElementRef<HTMLElement>, openDialogs: MatDialogRef<any>[]) {\n let parent: HTMLElement | null = element.nativeElement.parentElement;\n\n while (parent && !parent.classList.contains('mat-dialog-container')) {\n parent = parent.parentElement;\n }\n\n return parent ? openDialogs.find(dialog => dialog.id === parent!.id) : 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 {Directionality} from '@angular/cdk/bidi';\nimport {\n Overlay,\n OverlayConfig,\n OverlayContainer,\n OverlayRef,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, PortalInjector, TemplatePortal} from '@angular/cdk/portal';\nimport {Location} from '@angular/common';\nimport {\n Inject,\n Injectable,\n InjectionToken,\n Injector,\n OnDestroy,\n Optional,\n SkipSelf,\n TemplateRef,\n} from '@angular/core';\nimport {defer, Observable, of as observableOf, Subject} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {MatDialogConfig} from './dialog-config';\nimport {MatDialogContainer} from './dialog-container';\nimport {MatDialogRef} from './dialog-ref';\n\n\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nexport const MAT_DIALOG_DATA = new InjectionToken<any>('MatDialogData');\n\n/** Injection token that can be used to specify default dialog options. */\nexport const MAT_DIALOG_DEFAULT_OPTIONS =\n new InjectionToken<MatDialogConfig>('mat-dialog-default-options');\n\n/** Injection token that determines the scroll handling while the dialog is open. */\nexport const MAT_DIALOG_SCROLL_STRATEGY =\n new InjectionToken<() => ScrollStrategy>('mat-dialog-scroll-strategy');\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay):\n () => ScrollStrategy {\n return () => overlay.scrollStrategies.block();\n}\n\n/** @docs-private */\nexport const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n\n/**\n * Service to open Material Design modal dialogs.\n */\n@Injectable()\nexport class MatDialog implements OnDestroy {\n private _openDialogsAtThisLevel: MatDialogRef<any>[] = [];\n private readonly _afterAllClosedAtThisLevel = new Subject<void>();\n private readonly _afterOpenedAtThisLevel = new Subject<MatDialogRef<any>>();\n private _ariaHiddenElements = new Map<Element, string|null>();\n private _scrollStrategy: () => ScrollStrategy;\n\n /** Keeps track of the currently-open dialogs. */\n get openDialogs(): MatDialogRef<any>[] {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n\n /** Stream that emits when a dialog has been opened. */\n get afterOpened(): Subject<MatDialogRef<any>> {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n\n /**\n * Stream that emits when a dialog has been opened.\n * @deprecated Use `afterOpened` instead.\n * @breaking-change 8.0.0\n */\n get afterOpen(): Subject<MatDialogRef<any>> {\n return this.afterOpened;\n }\n\n get _afterAllClosed(): Subject<void> {\n const parent = this._parentDialog;\n return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;\n }\n\n // TODO (jelbourn): tighten the typing right-hand side of this expression.\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n readonly afterAllClosed: Observable<void> = defer(() => this.openDialogs.length ?\n this._afterAllClosed :\n this._afterAllClosed.pipe(startWith(undefined))) as Observable<any>;\n\n constructor(\n private _overlay: Overlay,\n private _injector: Injector,\n @Optional() private _location: Location,\n @Optional() @Inject(MAT_DIALOG_DEFAULT_OPTIONS) private _defaultOptions: MatDialogConfig,\n @Inject(MAT_DIALOG_SCROLL_STRATEGY) scrollStrategy: any,\n @Optional() @SkipSelf() private _parentDialog: MatDialog,\n private _overlayContainer: OverlayContainer) {\n this._scrollStrategy = scrollStrategy;\n }\n\n /**\n * Opens a modal dialog containing the given component.\n * @param componentOrTemplateRef Type of the component to load into the dialog,\n * or a TemplateRef to instantiate as the dialog content.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened dialog.\n */\n open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: MatDialogConfig<D>): MatDialogRef<T, R> {\n\n config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());\n\n if (config.id && this.getDialogById(config.id)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n\n const overlayRef = this._createOverlay(config);\n const dialogContainer = this._attachDialogContainer(overlayRef, config);\n const dialogRef = this._attachDialogContent<T, R>(componentOrTemplateRef,\n dialogContainer,\n overlayRef,\n config);\n\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this._hideNonDialogContentFromAssistiveTechnology();\n }\n\n this.openDialogs.push(dialogRef);\n dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));\n this.afterOpened.next(dialogRef);\n\n return dialogRef;\n }\n\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll(): void {\n this._closeDialogs(this.openDialogs);\n }\n\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id: string): MatDialogRef<any> | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n\n ngOnDestroy() {\n // Only close the dialogs at this level on destroy\n // since the parent service may still be active.\n this._closeDialogs(this._openDialogsAtThisLevel);\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n\n /**\n * Creates the overlay into which the dialog will be loaded.\n * @param config The dialog configuration.\n * @returns A promise resolving to the OverlayRef for the created overlay.\n */\n private _createOverlay(config: MatDialogConfig): OverlayRef {\n const overlayConfig = this._getOverlayConfig(config);\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Creates an overlay config from a dialog config.\n * @param dialogConfig The dialog configuration.\n * @returns The overlay configuration.\n */\n private _getOverlayConfig(dialogConfig: MatDialogConfig): OverlayConfig {\n const state = new OverlayConfig({\n positionStrategy: this._overlay.position().global(),\n scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),\n panelClass: dialogConfig.panelClass,\n hasBackdrop: dialogConfig.hasBackdrop,\n direction: dialogConfig.direction,\n minWidth: dialogConfig.minWidth,\n minHeight: dialogConfig.minHeight,\n maxWidth: dialogConfig.maxWidth,\n maxHeight: dialogConfig.maxHeight,\n disposeOnNavigation: dialogConfig.closeOnNavigation\n });\n\n if (dialogConfig.backdropClass) {\n state.backdropClass = dialogConfig.backdropClass;\n }\n\n return state;\n }\n\n /**\n * Attaches an MatDialogContainer to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n private _attachDialogContainer(overlay: OverlayRef, config: MatDialogConfig): MatDialogContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = new PortalInjector(userInjector || this._injector, new WeakMap([\n [MatDialogConfig, config]\n ]));\n const containerPortal =\n new ComponentPortal(MatDialogContainer, config.viewContainerRef, injector);\n const containerRef = overlay.attach<MatDialogContainer>(containerPortal);\n\n return containerRef.instance;\n }\n\n /**\n * Attaches the user-provided component to the already-created MatDialogContainer.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogContainer Reference to the wrapping MatDialogContainer.\n * @param overlayRef Reference to the overlay in which the dialog resides.\n * @param config The dialog configuration.\n * @returns A promise resolving to the MatDialogRef that should be returned to the user.\n */\n private _attachDialogContent<T, R>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n dialogContainer: MatDialogContainer,\n overlayRef: OverlayRef,\n config: MatDialogConfig): MatDialogRef<T, R> {\n\n // Create a reference to the dialog we're creating in order to give the user a handle\n // to modify and close it.\n const dialogRef =\n new MatDialogRef<T, R>(overlayRef, dialogContainer, this._location, config.id);\n\n // When the dialog backdrop is clicked, we want to close it.\n if (config.hasBackdrop) {\n overlayRef.backdropClick().subscribe(() => {\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n }\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n dialogContainer.attachTemplatePortal(\n new TemplatePortal<T>(componentOrTemplateRef, null!,\n <any>{ $implicit: config.data, dialogRef }));\n } else {\n const injector = this._createInjector<T>(config, dialogRef, dialogContainer);\n const contentRef = dialogContainer.attachComponentPortal<T>(\n new ComponentPortal(componentOrTemplateRef, undefined, injector));\n dialogRef.componentInstance = contentRef.instance;\n }\n\n dialogRef\n .updateSize(config.width, config.height)\n .updatePosition(config.position);\n\n return dialogRef;\n }\n\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog.\n * @param container Dialog container element that wraps all of the contents.\n * @returns The custom injector that can be used inside the dialog.\n */\n private _createInjector<T>(\n config: MatDialogConfig,\n dialogRef: MatDialogRef<T>,\n dialogContainer: MatDialogContainer): PortalInjector {\n\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n // The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's\n // content are created out of the same ViewContainerRef and as such, are siblings for injector\n // purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly\n // added to the injection tokens.\n const injectionTokens = new WeakMap<any, any>([\n [MatDialogContainer, dialogContainer],\n [MAT_DIALOG_DATA, config.data],\n [MatDialogRef, dialogRef]\n ]);\n\n if (config.direction &&\n (!userInjector || !userInjector.get<Directionality | null>(Directionality, null))) {\n injectionTokens.set(Directionality, {\n value: config.direction,\n change: observableOf()\n });\n }\n\n return new PortalInjector(userInjector || this._injector, injectionTokens);\n }\n\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n */\n private _removeOpenDialog(dialogRef: MatDialogRef<any>) {\n const index = this.openDialogs.indexOf(dialogRef);\n\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this._ariaHiddenElements.clear();\n this._afterAllClosed.next();\n }\n }\n }\n\n /**\n * Hides all of the content that isn't an overlay from assistive technology.\n */\n private _hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this._overlayContainer.getContainerElement();\n\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n\n for (let i = siblings.length - 1; i > -1; i--) {\n let sibling = siblings[i];\n\n if (sibling !== overlayContainer &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')) {\n\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n\n /** Closes all of the dialogs in an array. */\n private _closeDialogs(dialogs: MatDialogRef<any>[]) {\n let i = dialogs.length;\n\n while (i--) {\n // The `_openDialogs` property isn't updated after close until the rxjs subscription\n // runs on the next microtask, in addition to modifying the array as we're going\n // through it. We loop through all of them and call close without assuming that\n // they'll be removed from the list instantaneously.\n dialogs[i].close();\n }\n }\n\n}\n\n/**\n * Applies default options to the dialog config.\n * @param config Config to be modified.\n * @param defaultOptions Default options provided.\n * @returns The new configuration object.\n */\nfunction _applyConfigDefaults(\n config?: MatDialogConfig, defaultOptions?: MatDialogConfig): MatDialogConfig {\n return {...defaultOptions, ...config};\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 {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {GlobalPositionStrategy, OverlayRef} from '@angular/cdk/overlay';\nimport {Location} from '@angular/common';\nimport {Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {DialogPosition} from './dialog-config';\nimport {MatDialogContainer} from './dialog-container';\n\n\n// TODO(jelbourn): resizing\n\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nexport class MatDialogRef<T, R = any> {\n /** The instance of component opened into the dialog. */\n componentInstance: T;\n\n /** Whether the user is allowed to close the dialog. */\n disableClose: boolean | undefined = this._containerInstance._config.disableClose;\n\n /** Subject for notifying the user that the dialog has finished opening. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Subject for notifying the user that the dialog has finished closing. */\n private readonly _afterClosed = new Subject<R | undefined>();\n\n /** Subject for notifying the user that the dialog has started closing. */\n private readonly _beforeClosed = new Subject<R | undefined>();\n\n /** Result to be passed to afterClosed. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: number;\n\n constructor(\n private _overlayRef: OverlayRef,\n public _containerInstance: MatDialogContainer,\n // @breaking-change 8.0.0 `_location` parameter to be removed.\n _location?: Location,\n readonly id: string = `mat-dialog-${uniqueId++}`) {\n\n // Pass the id along to the container.\n _containerInstance._id = id;\n\n // Emit when opening animation completes\n _containerInstance._animationStateChanged.pipe(\n filter(event => event.phaseName === 'done' && event.toState === 'enter'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n _containerInstance._animationStateChanged.pipe(\n filter(event => event.phaseName === 'done' && event.toState === 'exit'),\n take(1)\n ).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._overlayRef.dispose();\n });\n\n _overlayRef.detachments().subscribe(() => {\n this._beforeClosed.next(this._result);\n this._beforeClosed.complete();\n this._afterClosed.next(this._result);\n this._afterClosed.complete();\n this.componentInstance = null!;\n this._overlayRef.dispose();\n });\n\n _overlayRef.keydownEvents()\n .pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }))\n .subscribe(event => {\n event.preventDefault();\n this.close();\n });\n }\n\n /**\n * Close the dialog.\n * @param dialogResult Optional result to return to the dialog opener.\n */\n close(dialogResult?: R): void {\n this._result = dialogResult;\n\n // Transition the backdrop in parallel to the dialog.\n this._containerInstance._animationStateChanged.pipe(\n filter(event => event.phaseName === 'start'),\n take(1)\n )\n .subscribe(event => {\n this._beforeClosed.next(dialogResult);\n this._beforeClosed.complete();\n this._overlayRef.detachBackdrop();\n\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n this._closeFallbackTimeout = setTimeout(() => {\n this._overlayRef.dispose();\n }, event.totalTime + 100);\n });\n\n this._containerInstance._startExitAnimation();\n }\n\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n */\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n\n /**\n * Gets an observable that is notified when the dialog is finished closing.\n */\n afterClosed(): Observable<R | undefined> {\n return this._afterClosed.asObservable();\n }\n\n /**\n * Gets an observable that is notified when the dialog has started closing.\n */\n beforeClosed(): Observable<R | undefined> {\n return this._beforeClosed.asObservable();\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick(): Observable<MouseEvent> {\n return this._overlayRef.backdropClick();\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents(): Observable<KeyboardEvent> {\n return this._overlayRef.keydownEvents();\n }\n\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position?: DialogPosition): this {\n let strategy = this._getPositionStrategy();\n\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n } else {\n strategy.centerHorizontally();\n }\n\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n } else {\n strategy.centerVertically();\n }\n\n this._overlayRef.updatePosition();\n\n return this;\n }\n\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width: string = '', height: string = ''): this {\n this._getPositionStrategy().width(width).height(height);\n this._overlayRef.updatePosition();\n return this;\n }\n\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes: string | string[]): this {\n this._overlayRef.addPanelClass(classes);\n return this;\n }\n\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes: string | string[]): this {\n this._overlayRef.removePanelClass(classes);\n return this;\n }\n\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n * @deprecated Use `afterOpened` instead.\n * @breaking-change 8.0.0\n */\n afterOpen(): Observable<void> {\n return this.afterOpened();\n }\n\n /**\n * Gets an observable that is notified when the dialog has started closing.\n * @deprecated Use `beforeClosed` instead.\n * @breaking-change 8.0.0\n */\n beforeClose(): Observable<R | undefined> {\n return this.beforeClosed();\n }\n\n /** Fetches the position strategy object from the overlay ref. */\n private _getPositionStrategy(): GlobalPositionStrategy {\n return this._overlayRef.getConfig().positionStrategy as GlobalPositionStrategy;\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 Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n Optional,\n ChangeDetectorRef,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AnimationEvent} from '@angular/animations';\nimport {matDialogAnimations} from './dialog-animations';\nimport {\n BasePortalOutlet,\n ComponentPortal,\n CdkPortalOutlet,\n TemplatePortal\n} from '@angular/cdk/portal';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\nimport {MatDialogConfig} from './dialog-config';\n\n\n/**\n * Throws an exception for the case when a ComponentPortal is\n * attached to a DomPortalOutlet without an origin.\n * @docs-private\n */\nexport function throwMatDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\n/**\n * Internal component that wraps user-provided dialog content.\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-dialog-container',\n templateUrl: 'dialog-container.html',\n styleUrls: ['dialog.css'],\n encapsulation: ViewEncapsulation.None,\n // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [matDialogAnimations.dialogContainer],\n host: {\n 'class': 'mat-dialog-container',\n 'tabindex': '-1',\n 'aria-modal': 'true',\n '[attr.id]': '_id',\n '[attr.role]': '_config.role',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n '[@dialogContainer]': '_state',\n '(@dialogContainer.start)': '_onAnimationStart($event)',\n '(@dialogContainer.done)': '_onAnimationDone($event)',\n },\n})\nexport class MatDialogContainer extends BasePortalOutlet {\n /** The portal outlet inside of this container into which the dialog content will be loaded. */\n @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n /** The class that traps and manages focus within the dialog. */\n private _focusTrap: FocusTrap;\n\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n private _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n /** State of the dialog animation. */\n _state: 'void' | 'enter' | 'exit' = 'enter';\n\n /** Emits when an animation state changes. */\n _animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** ID of the element that should be considered as the dialog's label. */\n _ariaLabelledBy: string | null;\n\n /** ID for the container DOM element. */\n _id: string;\n\n constructor(\n private _elementRef: ElementRef,\n private _focusTrapFactory: FocusTrapFactory,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(DOCUMENT) private _document: any,\n /** The dialog configuration. */\n public _config: MatDialogConfig) {\n\n super();\n this._ariaLabelledBy = _config.ariaLabelledBy || null;\n }\n\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this._portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachComponentPortal(portal);\n }\n\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n if (this._portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n\n /** Moves the focus inside the focus trap. */\n private _trapFocus() {\n const element = this._elementRef.nativeElement;\n\n if (!this._focusTrap) {\n this._focusTrap = this._focusTrapFactory.create(element);\n }\n\n // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait for the microtask queue to be empty.\n if (this._config.autoFocus) {\n this._focusTrap.focusInitialElementWhenReady();\n } else {\n const activeElement = this._document.activeElement;\n\n // Otherwise ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (activeElement !== element && !element.contains(activeElement)) {\n element.focus();\n }\n }\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private _restoreFocus() {\n const toFocus = this._elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this._config.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n\n /** Saves a reference to the element that was focused before the dialog was opened. */\n private _savePreviouslyFocusedElement() {\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = this._document.activeElement as HTMLElement;\n\n // Note that there is no focus method when rendering on the server.\n if (this._elementRef.nativeElement.focus) {\n // Move focus onto the dialog immediately in order to prevent the user from accidentally\n // opening multiple dialogs at the same time. Needs to be async, because the element\n // may not be focusable immediately.\n Promise.resolve().then(() => this._elementRef.nativeElement.focus());\n }\n }\n }\n\n /** Callback, invoked whenever an animation on the host completes. */\n _onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'enter') {\n this._trapFocus();\n } else if (event.toState === 'exit') {\n this._restoreFocus();\n }\n\n this._animationStateChanged.emit(event);\n }\n\n /** Callback, invoked when an animation on the host starts. */\n _onAnimationStart(event: AnimationEvent) {\n this._animationStateChanged.emit(event);\n }\n\n /** Starts the dialog exit animation. */\n _startExitAnimation(): void {\n this._state = 'exit';\n\n // Mark the container for check so it can react if the\n // view container is using OnPush change detection.\n this._changeDetectorRef.markForCheck();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\n\nconst animationBody = [\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues.\n state('void, exit', style({opacity: 0, transform: 'scale(0.7)'})),\n state('enter', style({transform: 'none'})),\n transition('* => enter', animate('150ms cubic-bezier(0, 0, 0.2, 1)',\n style({transform: 'none', opacity: 1}))),\n transition('* => void, * => exit',\n animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({opacity: 0}))),\n];\n\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nexport const matDialogAnimations: {\n readonly dialogContainer: AnimationTriggerMetadata;\n readonly slideDialog: AnimationTriggerMetadata;\n} = {\n /** Animation that is applied on the dialog container by defalt. */\n dialogContainer: trigger('dialogContainer', animationBody),\n\n /** @deprecated @breaking-change 8.0.0 Use `matDialogAnimations.dialogContainer` instead. */\n slideDialog: trigger('slideDialog', animationBody)\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 {ViewContainerRef} from '@angular/core';\nimport {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\n\n/** Valid ARIA roles for a dialog element. */\nexport type DialogRole = 'dialog' | 'alertdialog';\n\n/** Possible overrides for a dialog's position. */\nexport interface DialogPosition {\n /** Override for the dialog's top position. */\n top?: string;\n\n /** Override for the dialog's bottom position. */\n bottom?: string;\n\n /** Override for the dialog's left position. */\n left?: string;\n\n /** Override for the dialog's right position. */\n right?: string;\n}\n\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nexport class MatDialogConfig<D = any> {\n\n /**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n */\n viewContainerRef?: ViewContainerRef;\n\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The ARIA role of the dialog element. */\n role?: DialogRole = 'dialog';\n\n /** Custom class for the overlay pane. */\n panelClass?: string | string[] = '';\n\n /** Whether the dialog has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop, */\n backdropClass?: string = '';\n\n /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n disableClose?: boolean = false;\n\n /** Width of the dialog. */\n width?: string = '';\n\n /** Height of the dialog. */\n height?: string = '';\n\n /** Min-width of the dialog. If a number is provided, pixel units are assumed. */\n minWidth?: number | string;\n\n /** Min-height of the dialog. If a number is provided, pixel units are assumed. */\n minHeight?: number | string;\n\n /** Max-width of the dialog. If a number is provided, pixel units are assumed. Defaults to 80vw */\n maxWidth?: number | string = '80vw';\n\n /** Max-height of the dialog. If a number is provided, pixel units are assumed. */\n maxHeight?: number | string;\n\n /** Position overrides. */\n position?: DialogPosition;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Layout direction for the dialog's content. */\n direction?: Direction;\n\n /** ID of the element that describes the dialog. */\n ariaDescribedBy?: string | null = null;\n\n /** ID of the element that labels the dialog. */\n ariaLabelledBy?: string | null = null;\n\n /** Aria label to assign to the dialog element */\n ariaLabel?: string | null = null;\n\n /** Whether the dialog should focus the first focusable element on open. */\n autoFocus?: boolean = true;\n\n /**\n * Whether the dialog should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the dialog. */\n scrollStrategy?: ScrollStrategy;\n\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n closeOnNavigation?: boolean = true;\n\n // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\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 {ENTER} from '@angular/cdk/keycodes';\nimport {NgModule} from '@angular/core';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {MatChip, MatChipAvatar, MatChipRemove, MatChipTrailingIcon} from './chip';\nimport {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options';\nimport {MatChipInput} from './chip-input';\nimport {MatChipList} from './chip-list';\n\nconst CHIP_DECLARATIONS = [\n MatChipList,\n MatChip,\n MatChipInput,\n MatChipRemove,\n MatChipAvatar,\n MatChipTrailingIcon,\n];\n\n@NgModule({\n exports: CHIP_DECLARATIONS,\n declarations: CHIP_DECLARATIONS,\n providers: [\n ErrorStateMatcher,\n {\n provide: MAT_CHIPS_DEFAULT_OPTIONS,\n useValue: {\n separatorKeyCodes: [ENTER]\n } as MatChipsDefaultOptions\n }\n ]\n})\nexport class MatChipsModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core';\nimport {hasModifierKey, TAB} from '@angular/cdk/keycodes';\nimport {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options';\nimport {MatChipList} from './chip-list';\nimport {MatChipTextControl} from './chip-text-control';\n\n\n/** Represents an input event on a `matChipInput`. */\nexport interface MatChipInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n\n /** The value of the input. */\n value: string;\n}\n\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n\n/**\n * Directive that adds chip-specific behaviors to an input element inside `<mat-form-field>`.\n * May be placed inside or outside of an `<mat-chip-list>`.\n */\n@Directive({\n selector: 'input[matChipInputFor]',\n exportAs: 'matChipInput, matChipInputFor',\n host: {\n 'class': 'mat-chip-input mat-input-element',\n '(keydown)': '_keydown($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n '(input)': '_onInput()',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '[attr.aria-invalid]': '_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null',\n }\n})\nexport class MatChipInput implements MatChipTextControl, OnChanges {\n /** Whether the control is focused. */\n focused: boolean = false;\n _chipList: MatChipList;\n\n /** Register input for chip list */\n @Input('matChipInputFor')\n set chipList(value: MatChipList) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n\n /**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n */\n @Input('matChipInputAddOnBlur')\n get addOnBlur(): boolean { return this._addOnBlur; }\n set addOnBlur(value: boolean) { this._addOnBlur = coerceBooleanProperty(value); }\n _addOnBlur: boolean = false;\n\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input('matChipInputSeparatorKeyCodes')\n separatorKeyCodes: number[] | Set<number> = this._defaultOptions.separatorKeyCodes;\n\n /** Emitted when a chip is to be added. */\n @Output('matChipInputTokenEnd')\n chipEnd: EventEmitter<MatChipInputEvent> = new EventEmitter<MatChipInputEvent>();\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Unique id for the input. */\n @Input() id: string = `mat-chip-list-input-${nextUniqueId++}`;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean { return this._disabled || (this._chipList && this._chipList.disabled); }\n set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); }\n private _disabled: boolean = false;\n\n /** Whether the input is empty. */\n get empty(): boolean { return !this._inputElement.value; }\n\n /** The native input element to which this directive is attached. */\n protected _inputElement: HTMLInputElement;\n\n constructor(\n protected _elementRef: ElementRef<HTMLInputElement>,\n @Inject(MAT_CHIPS_DEFAULT_OPTIONS) private _defaultOptions: MatChipsDefaultOptions) {\n this._inputElement = this._elementRef.nativeElement as HTMLInputElement;\n }\n\n ngOnChanges() {\n this._chipList.stateChanges.next();\n }\n\n /** Utility method to make host definition/tests more clear. */\n _keydown(event?: KeyboardEvent) {\n // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n // want to do this when going backwards, because focus should go back to the first chip.\n if (event && event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n this._chipList._allowFocusEscape();\n }\n\n this._emitChipEnd(event);\n }\n\n /** Checks to see if the blur should emit the (chipEnd) event. */\n _blur() {\n if (this.addOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n\n _focus() {\n this.focused = true;\n this._chipList.stateChanges.next();\n }\n\n /** Checks to see if the (chipEnd) event needs to be emitted. */\n _emitChipEnd(event?: KeyboardEvent) {\n if (!this._inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n if (!event || this._isSeparatorKey(event)) {\n this.chipEnd.emit({ input: this._inputElement, value: this._inputElement.value });\n\n if (event) {\n event.preventDefault();\n }\n }\n }\n\n _onInput() {\n // Let chip list know whenever the value changes.\n this._chipList.stateChanges.next();\n }\n\n /** Focuses the input. */\n focus(): void {\n this._inputElement.focus();\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private _isSeparatorKey(event: KeyboardEvent) {\n if (hasModifierKey(event)) {\n return false;\n }\n\n const separators = this.separatorKeyCodes;\n const keyCode = event.keyCode;\n return Array.isArray(separators) ? separators.indexOf(keyCode) > -1 : separators.has(keyCode);\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 {FocusKeyManager} from '@angular/cdk/a11y';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {BACKSPACE, END, HOME} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport {ControlValueAccessor, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n mixinErrorState,\n} from '@angular/material/core';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {merge, Observable, Subject, Subscription} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\nimport {MatChip, MatChipEvent, MatChipSelectionChange} from './chip';\nimport {MatChipTextControl} from './chip-text-control';\n\n\n// Boilerplate for applying mixins to MatChipList.\n/** @docs-private */\nclass MatChipListBase {\n constructor(public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /** @docs-private */\n public ngControl: NgControl) {}\n}\nconst _MatChipListMixinBase: CanUpdateErrorStateCtor & typeof MatChipListBase =\n mixinErrorState(MatChipListBase);\n\n\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId = 0;\n\n/** Change event object that is emitted when the chip list value has changed. */\nexport class MatChipListChange {\n constructor(\n /** Chip list that emitted the event. */\n public source: MatChipList,\n /** Value of the chip list when the event was emitted. */\n public value: any) { }\n}\n\n\n/**\n * A material design chips component (named ChipList for its similarity to the List component).\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-chip-list',\n template: `<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>`,\n exportAs: 'matChipList',\n host: {\n '[attr.tabindex]': 'disabled ? null : _tabIndex',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.role]': 'role',\n '[class.mat-chip-list-disabled]': 'disabled',\n '[class.mat-chip-list-invalid]': 'errorState',\n '[class.mat-chip-list-required]': 'required',\n '[attr.aria-orientation]': 'ariaOrientation',\n 'class': 'mat-chip-list',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)',\n '[id]': '_uid',\n },\n providers: [{provide: MatFormFieldControl, useExisting: MatChipList}],\n styleUrls: ['chips.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatChipList extends _MatChipListMixinBase implements MatFormFieldControl<any>,\n ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy, CanUpdateErrorState {\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n readonly controlType: string = 'mat-chip-list';\n\n /**\n * When a chip is destroyed, we store the index of the destroyed chip until the chips\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate chip that should receive focus until the array of chips updated completely.\n */\n private _lastDestroyedChipIndex: number | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n private _destroyed = new Subject<void>();\n\n /** Subscription to focus changes in the chips. */\n private _chipFocusSubscription: Subscription | null;\n\n /** Subscription to blur changes in the chips. */\n private _chipBlurSubscription: Subscription | null;\n\n /** Subscription to selection changes in chips. */\n private _chipSelectionSubscription: Subscription | null;\n\n /** Subscription to remove changes in chips. */\n private _chipRemoveSubscription: Subscription | null;\n\n /** The chip input to add more chips */\n protected _chipInput: MatChipTextControl;\n\n /** Uid of the chip list */\n _uid: string = `mat-chip-list-${nextUniqueId++}`;\n\n /** The aria-describedby attribute on the chip list for improved a11y. */\n _ariaDescribedby: string;\n\n /** Tab index for the chip list. */\n _tabIndex = 0;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n _userTabIndex: number | null = null;\n\n /** The FocusKeyManager which handles focus. */\n _keyManager: FocusKeyManager<MatChip>;\n\n /** Function when touched */\n _onTouched = () => {};\n\n /** Function when changed */\n _onChange: (value: any) => void = () => {};\n\n _selectionModel: SelectionModel<MatChip>;\n\n /** The array of selected chips inside chip list. */\n get selected(): MatChip[] | MatChip {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n\n /** The ARIA role applied to the chip list. */\n get role(): string | null { return this.empty ? null : 'listbox'; }\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /** Whether the user should be allowed to select multiple chips. */\n @Input()\n get multiple(): boolean { return this._multiple; }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n private _multiple: boolean = false;\n\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n @Input()\n get compareWith(): (o1: any, o2: any) => boolean { return this._compareWith; }\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): any { return this._value; }\n set value(value: any) {\n this.writeValue(value);\n this._value = value;\n }\n protected _value: any;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id(): string {\n return this._chipInput ? this._chipInput.id : this._uid;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n protected _required: boolean = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n protected _placeholder: string;\n\n /** Whether any chips or the matChipInput inside of this chip-list has focus. */\n get focused(): boolean {\n return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (!this._chipInput || this._chipInput.empty) && this.chips.length === 0;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean { return !this.empty || this.focused; }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean { return this.ngControl ? !!this.ngControl.disabled : this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n protected _disabled: boolean = false;\n\n /** Orientation of the chip list. */\n @Input('aria-orientation') ariaOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Whether or not this chip list is selectable. When a chip list is not selectable,\n * the selected states for all the chips inside the chip list are always ignored.\n */\n @Input()\n get selectable(): boolean { return this._selectable; }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n\n if (this.chips) {\n this.chips.forEach(chip => chip.chipListSelectable = this._selectable);\n }\n }\n protected _selectable: boolean = true;\n\n @Input()\n set tabIndex(value: number) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n\n /** Combined stream of all of the child chips' selection change events. */\n get chipSelectionChanges(): Observable<MatChipSelectionChange> {\n return merge(...this.chips.map(chip => chip.selectionChange));\n }\n\n /** Combined stream of all of the child chips' focus change events. */\n get chipFocusChanges(): Observable<MatChipEvent> {\n return merge(...this.chips.map(chip => chip._onFocus));\n }\n\n /** Combined stream of all of the child chips' blur change events. */\n get chipBlurChanges(): Observable<MatChipEvent> {\n return merge(...this.chips.map(chip => chip._onBlur));\n }\n\n /** Combined stream of all of the child chips' remove change events. */\n get chipRemoveChanges(): Observable<MatChipEvent> {\n return merge(...this.chips.map(chip => chip.destroyed));\n }\n\n /** Event emitted when the selected chip list value has been changed by the user. */\n @Output() readonly change: EventEmitter<MatChipListChange> =\n new EventEmitter<MatChipListChange>();\n\n /**\n * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /** The chip components contained within this chip list. */\n @ContentChildren(MatChip, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }) chips: QueryList<MatChip>;\n\n constructor(protected _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _dir: Directionality,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n /** @docs-private */\n @Optional() @Self() public ngControl: NgControl) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager<MatChip>(this.chips)\n .withWrap()\n .withVerticalOrientation()\n .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n\n if (this._dir) {\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe(dir => this._keyManager.withHorizontalOrientation(dir));\n }\n\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n\n // When the list changes, re-subscribe\n this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n if (this.disabled) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => {\n this._syncChipsState();\n });\n }\n\n this._resetChips();\n\n // Reset chips selected/deselected status\n this._initializeSelection();\n\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n\n this.stateChanges.next();\n });\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<MatChip>(this.multiple, undefined, false);\n this.stateChanges.next();\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this.stateChanges.complete();\n\n this._dropSubscriptions();\n }\n\n\n /** Associates an HTML input element with this chip list. */\n registerInput(inputElement: MatChipTextControl): void {\n this._chipInput = inputElement;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) { this._ariaDescribedby = ids.join(' '); }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any): void {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick(event: MouseEvent) {\n if (!this._originatesFromChip(event)) {\n this.focus();\n }\n }\n\n /**\n * Focuses the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n */\n focus(): void {\n if (this.disabled) {\n return;\n }\n\n // TODO: ARIA says this should focus the first `selected` chip if any are selected.\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n } else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n } else {\n this._focusInput();\n this.stateChanges.next();\n }\n }\n\n /** Attempt to focus an input if we have one. */\n _focusInput() {\n if (this._chipInput) {\n this._chipInput.focus();\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keydown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n\n // If they are on an empty input and hit backspace, focus the last chip\n if (event.keyCode === BACKSPACE && this._isInputEmpty(target)) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n } else if (target && target.classList.contains('mat-chip')) {\n if (event.keyCode === HOME) {\n this._keyManager.setFirstItemActive();\n event.preventDefault();\n } else if (event.keyCode === END) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this._keyManager.onKeydown(event);\n }\n\n this.stateChanges.next();\n }\n }\n\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n protected _updateTabIndex(): void {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of chips changed, we need to update the\n * key manager state and focus the next closest chip.\n */\n protected _updateFocusForDestroyedChips() {\n // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n if (this._lastDestroyedChipIndex != null) {\n if (this.chips.length) {\n const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);\n this._keyManager.setActiveItem(newChipIndex);\n } else {\n this.focus();\n }\n }\n\n this._lastDestroyedChipIndex = null;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of chips.\n */\n private _isValidIndex(index: number): boolean {\n return index >= 0 && index < this.chips.length;\n }\n\n private _isInputEmpty(element: HTMLElement): boolean {\n if (element && element.nodeName.toLowerCase() === 'input') {\n let input = element as HTMLInputElement;\n return !input.value;\n }\n\n return false;\n }\n\n _setSelectionByValue(value: any, isUserInput: boolean = true) {\n this._clearSelection();\n this.chips.forEach(chip => chip.deselect());\n\n if (Array.isArray(value)) {\n value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\n this._sortValues();\n } else {\n const correspondingChip = this._selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n if (isUserInput) {\n this._keyManager.setActiveItem(correspondingChip);\n }\n }\n }\n }\n\n /**\n * Finds and selects the chip based on its value.\n * @returns Chip that has the corresponding value.\n */\n private _selectValue(value: any, isUserInput: boolean = true): MatChip | undefined {\n\n const correspondingChip = this.chips.find(chip => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n\n if (correspondingChip) {\n isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\n this._selectionModel.select(correspondingChip);\n }\n\n return correspondingChip;\n }\n\n private _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl || this._value) {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n this.stateChanges.next();\n }\n });\n }\n\n /**\n * Deselects every chip in the list.\n * @param skip Chip that should not be deselected.\n */\n private _clearSelection(skip?: MatChip): void {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n private _sortValues(): void {\n if (this._multiple) {\n this._selectionModel.clear();\n\n this.chips.forEach(chip => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n private _propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any = null;\n\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map(chip => chip.value);\n } else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.change.emit(new MatChipListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this._changeDetectorRef.markForCheck();\n }\n\n /** When blurred, mark the field as touched when focus moved outside the chip list. */\n _blur() {\n if (!this._hasFocusedChip()) {\n this._keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n } else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n\n /** Mark the field as touched */\n _markAsTouched() {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n * user to tab out of it. This prevents the list from capturing focus and redirecting\n * it back to the first chip, creating a focus trap, if it user tries to tab away.\n */\n _allowFocusEscape() {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this._userTabIndex || 0;\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n\n private _resetChips() {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n\n private _dropSubscriptions() {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n\n if (this._chipRemoveSubscription) {\n this._chipRemoveSubscription.unsubscribe();\n this._chipRemoveSubscription = null;\n }\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsSelection(): void {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiple) {\n this.chips.forEach(chip => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n\n if (event.isUserInput) {\n this._propagateChanges();\n }\n });\n }\n\n /** Listens to user-generated selection events on each chip. */\n private _listenToChipsFocus(): void {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe(event => {\n let chipIndex: number = this.chips.toArray().indexOf(event.chip);\n\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItemIndex(chipIndex);\n }\n this.stateChanges.next();\n });\n\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n this._blur();\n this.stateChanges.next();\n });\n }\n\n private _listenToChipsRemoved(): void {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe(event => {\n const chip = event.chip;\n const chipIndex = this.chips.toArray().indexOf(event.chip);\n\n // In case the chip that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling chip that will\n // receive focus.\n if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n this._lastDestroyedChipIndex = chipIndex;\n }\n });\n }\n\n /** Checks whether an event comes from inside a chip element. */\n private _originatesFromChip(event: Event): boolean {\n let currentElement = event.target as HTMLElement | null;\n\n while (currentElement && currentElement !== this._elementRef.nativeElement) {\n if (currentElement.classList.contains('mat-chip')) {\n return true;\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return false;\n }\n\n /** Checks whether any of the chips is focused. */\n private _hasFocusedChip() {\n return this.chips.some(chip => chip._hasFocus);\n }\n\n /** Syncs the list's state with the individual chips. */\n private _syncChipsState() {\n if (this.chips) {\n this.chips.forEach(chip => {\n chip.disabled = this._disabled;\n chip._chipListMultiple = this.multiple;\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 {InjectionToken} from '@angular/core';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface MatChipsDefaultOptions {\n /** The list of key codes that will trigger a chipEnd event. */\n separatorKeyCodes: number[] | Set<number>;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const MAT_CHIPS_DEFAULT_OPTIONS =\n new InjectionToken<MatChipsDefaultOptions>('mat-chips-default-options');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusableOption} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {BACKSPACE, DELETE, SPACE} from '@angular/cdk/keycodes';\nimport {Platform} from '@angular/cdk/platform';\nimport {\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n} from '@angular/core';\nimport {\n CanColor,\n CanColorCtor,\n CanDisable,\n CanDisableCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n RippleConfig,\n RippleGlobalOptions,\n RippleRenderer,\n RippleTarget,\n} from '@angular/material/core';\nimport {Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/** Represents an event fired on an individual `mat-chip`. */\nexport interface MatChipEvent {\n /** The chip the event was fired on. */\n chip: MatChip;\n}\n\n/** Event object emitted by MatChip when selected or deselected. */\nexport class MatChipSelectionChange {\n constructor(\n /** Reference to the chip that emitted the event. */\n public source: MatChip,\n /** Whether the chip that emitted the event is selected. */\n public selected: boolean,\n /** Whether the selection change was a result of a user interaction. */\n public isUserInput = false) { }\n}\n\n\n// Boilerplate for applying mixins to MatChip.\n/** @docs-private */\nclass MatChipBase {\n constructor(public _elementRef: ElementRef) {}\n}\n\nconst _MatChipMixinBase: CanColorCtor & CanDisableRippleCtor & CanDisableCtor & typeof MatChipBase =\n mixinColor(mixinDisableRipple(mixinDisabled(MatChipBase)), 'primary');\n\n/**\n * Dummy directive to add CSS class to chip avatar.\n * @docs-private\n */\n@Directive({\n selector: 'mat-chip-avatar, [matChipAvatar]',\n host: {'class': 'mat-chip-avatar'}\n})\nexport class MatChipAvatar {}\n\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\n@Directive({\n selector: 'mat-chip-trailing-icon, [matChipTrailingIcon]',\n host: {'class': 'mat-chip-trailing-icon'}\n})\nexport class MatChipTrailingIcon {}\n\n/**\n * Material design styled Chip component. Used inside the MatChipList component.\n */\n@Directive({\n selector: `mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,\n inputs: ['color', 'disabled', 'disableRipple'],\n exportAs: 'matChip',\n host: {\n 'class': 'mat-chip',\n '[attr.tabindex]': 'disabled ? null : -1',\n 'role': 'option',\n '[class.mat-chip-selected]': 'selected',\n '[class.mat-chip-with-avatar]': 'avatar',\n '[class.mat-chip-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.mat-chip-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationsDisabled',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n },\n})\nexport class MatChip extends _MatChipMixinBase implements FocusableOption, OnDestroy, CanColor,\n CanDisable, CanDisableRipple, RippleTarget {\n\n /** Reference to the RippleRenderer for the chip. */\n private _chipRipple: RippleRenderer;\n\n /**\n * Ripple configuration for ripples that are launched on pointer down. The ripple config\n * is set to the global ripple options since we don't have any configurable options for\n * the chip ripples.\n * @docs-private\n */\n rippleConfig: RippleConfig & RippleGlobalOptions;\n\n /**\n * Whether ripples are disabled on interaction\n * @docs-private\n */\n get rippleDisabled(): boolean {\n return this.disabled || this.disableRipple || !!this.rippleConfig.disabled;\n }\n\n /** Whether the chip has focus. */\n _hasFocus: boolean = false;\n\n /** Whether animations for the chip are enabled. */\n _animationsDisabled: boolean;\n\n /** Whether the chip list is selectable */\n chipListSelectable: boolean = true;\n\n /** Whether the chip list is in multi-selection mode. */\n _chipListMultiple: boolean = false;\n\n /** The chip avatar */\n @ContentChild(MatChipAvatar, {static: false}) avatar: MatChipAvatar;\n\n /** The chip's trailing icon. */\n @ContentChild(MatChipTrailingIcon, {static: false}) trailingIcon: MatChipTrailingIcon;\n\n /** The chip's remove toggler. */\n @ContentChild(forwardRef(() => MatChipRemove), {static: false}) removeIcon: MatChipRemove;\n\n /** Whether the chip is selected. */\n @Input()\n get selected(): boolean { return this._selected; }\n set selected(value: boolean) {\n const coercedValue = coerceBooleanProperty(value);\n\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n this._dispatchSelectionChange();\n }\n }\n protected _selected: boolean = false;\n\n /** The value of the chip. Defaults to the content inside `<mat-chip>` tags. */\n @Input()\n get value(): any {\n return this._value != undefined\n ? this._value\n : this._elementRef.nativeElement.textContent;\n }\n set value(value: any) { this._value = value; }\n protected _value: any;\n\n /**\n * Whether or not the chip is selectable. When a chip is not selectable,\n * changes to its selected state are always ignored. By default a chip is\n * selectable, and it becomes non-selectable if its parent chip list is\n * not selectable.\n */\n @Input()\n get selectable(): boolean { return this._selectable && this.chipListSelectable; }\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n }\n protected _selectable: boolean = true;\n\n /**\n * Determines whether or not the chip displays the remove styling and emits (removed) events.\n */\n @Input()\n get removable(): boolean { return this._removable; }\n set removable(value: boolean) {\n this._removable = coerceBooleanProperty(value);\n }\n protected _removable: boolean = true;\n\n /** Emits when the chip is focused. */\n readonly _onFocus = new Subject<MatChipEvent>();\n\n /** Emits when the chip is blured. */\n readonly _onBlur = new Subject<MatChipEvent>();\n\n /** Emitted when the chip is selected or deselected. */\n @Output() readonly selectionChange: EventEmitter<MatChipSelectionChange> =\n new EventEmitter<MatChipSelectionChange>();\n\n /** Emitted when the chip is destroyed. */\n @Output() readonly destroyed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();\n\n /** Emitted when a chip is to be removed. */\n @Output() readonly removed: EventEmitter<MatChipEvent> = new EventEmitter<MatChipEvent>();\n\n /** The ARIA selected applied to the chip. */\n get ariaSelected(): string | null {\n // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n return this.selectable && (this._chipListMultiple || this.selected) ?\n this.selected.toString() : null;\n }\n\n constructor(public _elementRef: ElementRef<HTMLElement>,\n private _ngZone: NgZone,\n platform: Platform,\n @Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS)\n globalRippleOptions: RippleGlobalOptions | null,\n // @breaking-change 8.0.0 `animationMode` parameter to become required.\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {\n super(_elementRef);\n\n this._addHostClassName();\n\n this._chipRipple = new RippleRenderer(this, _ngZone, _elementRef, platform);\n this._chipRipple.setupTriggerEvents(_elementRef.nativeElement);\n this.rippleConfig = globalRippleOptions || {};\n this._animationsDisabled = animationMode === 'NoopAnimations';\n }\n\n _addHostClassName() {\n const basicChipAttrName = 'mat-basic-chip';\n const element = this._elementRef.nativeElement as HTMLElement;\n\n if (element.hasAttribute(basicChipAttrName) ||\n element.tagName.toLowerCase() === basicChipAttrName) {\n element.classList.add(basicChipAttrName);\n return;\n } else {\n element.classList.add('mat-standard-chip');\n }\n }\n\n ngOnDestroy() {\n this.destroyed.emit({chip: this});\n this._chipRipple._removeTriggerEvents();\n }\n\n /** Selects the chip. */\n select(): void {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange();\n }\n }\n\n /** Deselects the chip. */\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n this._dispatchSelectionChange();\n }\n }\n\n /** Select this chip and emit selected event */\n selectViaInteraction(): void {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange(true);\n }\n }\n\n /** Toggles the current selected state of this chip. */\n toggleSelected(isUserInput: boolean = false): boolean {\n this._selected = !this.selected;\n this._dispatchSelectionChange(isUserInput);\n return this.selected;\n }\n\n /** Allows for programmatic focusing of the chip. */\n focus(): void {\n if (!this._hasFocus) {\n this._elementRef.nativeElement.focus();\n this._onFocus.next({chip: this});\n }\n this._hasFocus = true;\n }\n\n /**\n * Allows for programmatic removal of the chip. Called by the MatChipList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n */\n remove(): void {\n if (this.removable) {\n this.removed.emit({chip: this});\n }\n }\n\n /** Handles click events on the chip. */\n _handleClick(event: Event) {\n if (this.disabled) {\n event.preventDefault();\n } else {\n event.stopPropagation();\n }\n }\n\n /** Handle custom key presses. */\n _handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If we are removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n\n _blur(): void {\n // When animations are enabled, Angular may end up removing the chip from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n // that moves focus not the next item. To work around the issue, we defer marking the chip\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this._ngZone.run(() => {\n this._hasFocus = false;\n this._onBlur.next({chip: this});\n });\n });\n }\n\n private _dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected\n });\n }\n}\n\n\n/**\n * Applies proper (click) support and adds styling for use with the Material Design \"cancel\" icon\n * available at https://material.io/icons/#ic_cancel.\n *\n * Example:\n *\n * `<mat-chip>\n * <mat-icon matChipRemove>cancel</mat-icon>\n * </mat-chip>`\n *\n * You *may* use a custom icon, but you may need to override the `mat-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\n@Directive({\n selector: '[matChipRemove]',\n host: {\n 'class': 'mat-chip-remove mat-chip-trailing-icon',\n '(click)': '_handleClick($event)',\n }\n})\nexport class MatChipRemove {\n constructor(protected _parentChip: MatChip) {}\n\n /** Calls the parent chip's public `remove()` method if applicable. */\n _handleClick(event: Event): void {\n const parentChip = this._parentChip;\n\n if (parentChip.removable && !parentChip.disabled) {\n parentChip.remove();\n }\n\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused chip that has been focused after chip removal. Usually the parent\n // the parent click listener of the `MatChip` would prevent propagation, but it can happen\n // that the chip is being removed before the event bubbles up.\n event.stopPropagation();\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 {ObserversModule} from '@angular/cdk/observers';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatCheckbox} from './checkbox';\nimport {MatCheckboxRequiredValidator} from './checkbox-required-validator';\n\n/** This module is used by both original and MDC-based checkbox implementations. */\n@NgModule({\n exports: [MatCheckboxRequiredValidator],\n declarations: [MatCheckboxRequiredValidator],\n})\n// tslint:disable-next-line:class-name\nexport class _MatCheckboxRequiredValidatorModule {\n}\n\n@NgModule({\n imports: [\n CommonModule, MatRippleModule, MatCommonModule, ObserversModule,\n _MatCheckboxRequiredValidatorModule\n ],\n exports: [MatCheckbox, MatCommonModule, _MatCheckboxRequiredValidatorModule],\n declarations: [MatCheckbox],\n})\nexport class MatCheckboxModule {\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 Directive,\n forwardRef,\n Provider,\n} from '@angular/core';\nimport {\n CheckboxRequiredValidator,\n NG_VALIDATORS,\n} from '@angular/forms';\n\nexport const MAT_CHECKBOX_REQUIRED_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatCheckboxRequiredValidator),\n multi: true\n};\n\n/**\n * Validator for Material checkbox's required attribute in template-driven checkbox.\n * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not\n * work with `mat-checkbox`.\n */\n@Directive({\n selector: `mat-checkbox[required][formControlName],\n mat-checkbox[required][formControl], mat-checkbox[required][ngModel]`,\n providers: [MAT_CHECKBOX_REQUIRED_VALIDATOR],\n host: {'[attr.required]': 'required ? \"\" : null'}\n})\nexport class MatCheckboxRequiredValidator extends CheckboxRequiredValidator {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n ViewChild,\n ViewEncapsulation,\n AfterViewChecked,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanColor,\n CanColorCtor,\n CanDisable,\n CanDisableCtor,\n CanDisableRipple,\n CanDisableRippleCtor,\n HasTabIndex,\n HasTabIndexCtor,\n MatRipple,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n mixinTabIndex,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\nimport {MAT_CHECKBOX_CLICK_ACTION, MatCheckboxClickAction} from './checkbox-config';\n\n\n// Increasing integer for generating unique ids for checkbox components.\nlet nextUniqueId = 0;\n\n/**\n * Provider Expression that allows mat-checkbox to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nexport const MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatCheckbox),\n multi: true\n};\n\n/**\n * Represents the different states that require custom transitions between them.\n * @docs-private\n */\nexport enum TransitionCheckState {\n /** The initial state of the component before any user interaction. */\n Init,\n /** The state representing the component when it's becoming checked. */\n Checked,\n /** The state representing the component when it's becoming unchecked. */\n Unchecked,\n /** The state representing the component when it's becoming indeterminate. */\n Indeterminate\n}\n\n/** Change event object emitted by MatCheckbox. */\nexport class MatCheckboxChange {\n /** The source MatCheckbox of the event. */\n source: MatCheckbox;\n /** The new `checked` value of the checkbox. */\n checked: boolean;\n}\n\n// Boilerplate for applying mixins to MatCheckbox.\n/** @docs-private */\nclass MatCheckboxBase {\n constructor(public _elementRef: ElementRef) {}\n}\nconst _MatCheckboxMixinBase:\n HasTabIndexCtor &\n CanColorCtor &\n CanDisableRippleCtor &\n CanDisableCtor &\n typeof MatCheckboxBase =\n mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatCheckboxBase)), 'accent'));\n\n\n/**\n * A material design checkbox component. Supports all of the functionality of an HTML5 checkbox,\n * and exposes a similar API. A MatCheckbox can be either checked, unchecked, indeterminate, or\n * disabled. Note that all additional accessibility attributes are taken care of by the component,\n * so there is no need to provide them yourself. However, if you want to omit a label and still\n * have the checkbox be accessible, you may supply an [aria-label] input.\n * See: https://material.io/design/components/selection-controls.html\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-checkbox',\n templateUrl: 'checkbox.html',\n styleUrls: ['checkbox.css'],\n exportAs: 'matCheckbox',\n host: {\n 'class': 'mat-checkbox',\n '[id]': 'id',\n '[attr.tabindex]': 'null',\n '[class.mat-checkbox-indeterminate]': 'indeterminate',\n '[class.mat-checkbox-checked]': 'checked',\n '[class.mat-checkbox-disabled]': 'disabled',\n '[class.mat-checkbox-label-before]': 'labelPosition == \"before\"',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`,\n },\n providers: [MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR],\n inputs: ['disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAccessor,\n AfterViewChecked, OnDestroy, CanColor, CanDisable, HasTabIndex, CanDisableRipple {\n\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n @Input('aria-label') ariaLabel: string = '';\n\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n private _uniqueId: string = `mat-checkbox-${++nextUniqueId}`;\n\n /** A unique id for the checkbox input. If none is supplied, it will be auto-generated. */\n @Input() id: string = this._uniqueId;\n\n /** Returns the unique id for the visual hidden input. */\n get inputId(): string { return `${this.id || this._uniqueId}-input`; }\n\n /** Whether the checkbox is required. */\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) { this._required = coerceBooleanProperty(value); }\n private _required: boolean;\n\n /** Whether the label should appear after or before the checkbox. Defaults to 'after' */\n @Input() labelPosition: 'before' | 'after' = 'after';\n\n /** Name value will be applied to the input element if present */\n @Input() name: string | null = null;\n\n /** Event emitted when the checkbox's `checked` value changes. */\n @Output() readonly change: EventEmitter<MatCheckboxChange> =\n new EventEmitter<MatCheckboxChange>();\n\n /** Event emitted when the checkbox's `indeterminate` value changes. */\n @Output() readonly indeterminateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** The value attribute of the native input element */\n @Input() value: string;\n\n /** The native `<input type=\"checkbox\">` element */\n @ViewChild('input', {static: false}) _inputElement: ElementRef<HTMLInputElement>;\n\n /** Reference to the ripple instance of the checkbox. */\n @ViewChild(MatRipple, {static: false}) ripple: MatRipple;\n\n /**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * @docs-private\n */\n _onTouched: () => any = () => {};\n\n private _currentAnimationClass: string = '';\n\n private _currentCheckState: TransitionCheckState = TransitionCheckState.Init;\n\n private _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n constructor(elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n private _focusMonitor: FocusMonitor,\n private _ngZone: NgZone,\n @Attribute('tabindex') tabIndex: string,\n @Optional() @Inject(MAT_CHECKBOX_CLICK_ACTION)\n private _clickAction: MatCheckboxClickAction,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {\n super(elementRef);\n\n this.tabIndex = parseInt(tabIndex) || 0;\n\n this._focusMonitor.monitor(elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state change\n // (such as a form control's 'ng-touched') will cause a changed-after-checked error.\n // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n // telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => {\n this._onTouched();\n _changeDetectorRef.markForCheck();\n });\n }\n });\n }\n\n // TODO: Delete next major revision.\n ngAfterViewChecked() {}\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /**\n * Whether the checkbox is checked.\n */\n @Input()\n get checked(): boolean { return this._checked; }\n set checked(value: boolean) {\n if (value != this.checked) {\n this._checked = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n private _checked: boolean = false;\n\n /**\n * Whether the checkbox is disabled. This fully overrides the implementation provided by\n * mixinDisabled, but the mixin is still required because mixinTabIndex requires it.\n */\n @Input()\n get disabled() { return this._disabled; }\n set disabled(value: any) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this.disabled) {\n this._disabled = newValue;\n this._changeDetectorRef.markForCheck();\n }\n }\n private _disabled: boolean = false;\n\n /**\n * Whether the checkbox is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n */\n @Input()\n get indeterminate(): boolean { return this._indeterminate; }\n set indeterminate(value: boolean) {\n const changed = value != this._indeterminate;\n this._indeterminate = value;\n\n if (changed) {\n if (this._indeterminate) {\n this._transitionCheckState(TransitionCheckState.Indeterminate);\n } else {\n this._transitionCheckState(\n this.checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n }\n this.indeterminateChange.emit(this._indeterminate);\n }\n }\n private _indeterminate: boolean = false;\n\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the checkbox\n // component will be only marked for check, but no actual change detection runs automatically.\n // Instead of going back into the zone in order to trigger a change detection which causes\n // *all* components to be checked (if explicitly marked or not using OnPush), we only trigger\n // an explicit change detection for the checkbox view and it's children.\n this._changeDetectorRef.detectChanges();\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any) {\n this.checked = !!value;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any) {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n _getAriaChecked(): 'true' | 'false' | 'mixed' {\n return this.checked ? 'true' : (this.indeterminate ? 'mixed' : 'false');\n }\n\n private _transitionCheckState(newState: TransitionCheckState) {\n let oldState = this._currentCheckState;\n let element: HTMLElement = this._elementRef.nativeElement;\n\n if (oldState === newState) {\n return;\n }\n if (this._currentAnimationClass.length > 0) {\n element.classList.remove(this._currentAnimationClass);\n }\n\n this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(\n oldState, newState);\n this._currentCheckState = newState;\n\n if (this._currentAnimationClass.length > 0) {\n element.classList.add(this._currentAnimationClass);\n\n // Remove the animation class to avoid animation when the checkbox is moved between containers\n const animationClass = this._currentAnimationClass;\n\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n element.classList.remove(animationClass);\n }, 1000);\n });\n }\n }\n\n private _emitChangeEvent() {\n const event = new MatCheckboxChange();\n event.source = this;\n event.checked = this.checked;\n\n this._controlValueAccessorChangeFn(this.checked);\n this.change.emit(event);\n }\n\n /** Toggles the `checked` state of the checkbox. */\n toggle(): void {\n this.checked = !this.checked;\n }\n\n /**\n * Event handler for checkbox input element.\n * Toggles checked state if element is not disabled.\n * Do not toggle on (change) event since IE doesn't fire change event when\n * indeterminate checkbox is clicked.\n * @param event\n */\n _onInputClick(event: Event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `checkbox` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n\n // If resetIndeterminate is false, and the current state is indeterminate, do nothing on click\n if (!this.disabled && this._clickAction !== 'noop') {\n // When user manually click on the checkbox, `indeterminate` is set to false.\n if (this.indeterminate && this._clickAction !== 'check') {\n\n Promise.resolve().then(() => {\n this._indeterminate = false;\n this.indeterminateChange.emit(this._indeterminate);\n });\n }\n\n this.toggle();\n this._transitionCheckState(\n this._checked ? TransitionCheckState.Checked : TransitionCheckState.Unchecked);\n\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this._emitChangeEvent();\n } else if (!this.disabled && this._clickAction === 'noop') {\n // Reset native input when clicked with noop. The native checkbox becomes checked after\n // click, reset it to be align with `checked` value of `mat-checkbox`.\n this._inputElement.nativeElement.checked = this.checked;\n this._inputElement.nativeElement.indeterminate = this.indeterminate;\n }\n }\n\n /** Focuses the checkbox. */\n focus(): void {\n this._focusMonitor.focusVia(this._inputElement, 'keyboard');\n }\n\n _onInteractionEvent(event: Event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n }\n\n private _getAnimationClassForCheckStateTransition(\n oldState: TransitionCheckState, newState: TransitionCheckState): string {\n // Don't transition if animations are disabled.\n if (this._animationMode === 'NoopAnimations') {\n return '';\n }\n\n let animSuffix: string = '';\n\n switch (oldState) {\n case TransitionCheckState.Init:\n // Handle edge case where user interacts with checkbox that does not have [(ngModel)] or\n // [checked] bound to it.\n if (newState === TransitionCheckState.Checked) {\n animSuffix = 'unchecked-checked';\n } else if (newState == TransitionCheckState.Indeterminate) {\n animSuffix = 'unchecked-indeterminate';\n } else {\n return '';\n }\n break;\n case TransitionCheckState.Unchecked:\n animSuffix = newState === TransitionCheckState.Checked ?\n 'unchecked-checked' : 'unchecked-indeterminate';\n break;\n case TransitionCheckState.Checked:\n animSuffix = newState === TransitionCheckState.Unchecked ?\n 'checked-unchecked' : 'checked-indeterminate';\n break;\n case TransitionCheckState.Indeterminate:\n animSuffix = newState === TransitionCheckState.Checked ?\n 'indeterminate-checked' : 'indeterminate-unchecked';\n break;\n }\n\n return `mat-checkbox-anim-${animSuffix}`;\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 {InjectionToken} from '@angular/core';\n\n\n/**\n * Checkbox click action when user click on input element.\n * noop: Do not toggle checked or indeterminate.\n * check: Only toggle checked status, ignore indeterminate.\n * check-indeterminate: Toggle checked status, set indeterminate to false. Default behavior.\n * undefined: Same as `check-indeterminate`.\n */\nexport type MatCheckboxClickAction = 'noop' | 'check' | 'check-indeterminate' | undefined;\n\n/**\n * Injection token that can be used to specify the checkbox click behavior.\n */\nexport const MAT_CHECKBOX_CLICK_ACTION =\n new InjectionToken<MatCheckboxClickAction>('mat-checkbox-click-action');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {\n MatCard,\n MatCardActions,\n MatCardAvatar,\n MatCardContent,\n MatCardFooter,\n MatCardHeader,\n MatCardImage,\n MatCardLgImage,\n MatCardMdImage,\n MatCardSmImage,\n MatCardSubtitle,\n MatCardTitle,\n MatCardTitleGroup,\n MatCardXlImage,\n} from './card';\n\n\n@NgModule({\n imports: [MatCommonModule],\n exports: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule,\n ],\n declarations: [\n MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle,\n MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage,\n MatCardXlImage, MatCardAvatar,\n ],\n})\nexport class MatCardModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 ChangeDetectionStrategy,\n Directive,\n Input,\n Optional,\n Inject,\n} from '@angular/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\n/**\n * Content of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\n@Directive({\n selector: 'mat-card-content',\n host: {'class': 'mat-card-content'}\n})\nexport class MatCardContent {}\n\n/**\n * Title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\n@Directive({\n selector: `mat-card-title, [mat-card-title], [matCardTitle]`,\n host: {\n 'class': 'mat-card-title'\n }\n})\nexport class MatCardTitle {}\n\n/**\n * Sub-title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\n@Directive({\n selector: `mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-card-subtitle'\n }\n})\nexport class MatCardSubtitle {}\n\n/**\n * Action section of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\n@Directive({\n selector: 'mat-card-actions',\n exportAs: 'matCardActions',\n host: {\n 'class': 'mat-card-actions',\n '[class.mat-card-actions-align-end]': 'align === \"end\"',\n }\n})\nexport class MatCardActions {\n /** Position of the actions inside the card. */\n @Input() align: 'start' | 'end' = 'start';\n}\n\n/**\n * Footer of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\n@Directive({\n selector: 'mat-card-footer',\n host: {'class': 'mat-card-footer'}\n})\nexport class MatCardFooter {}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-image], [matCardImage]',\n host: {'class': 'mat-card-image'}\n})\nexport class MatCardImage {}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-sm-image], [matCardImageSmall]',\n host: {'class': 'mat-card-sm-image'}\n})\nexport class MatCardSmImage {}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-md-image], [matCardImageMedium]',\n host: {'class': 'mat-card-md-image'}\n})\nexport class MatCardMdImage {}\n\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-lg-image], [matCardImageLarge]',\n host: {'class': 'mat-card-lg-image'}\n})\nexport class MatCardLgImage {}\n\n/**\n * Large image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-xl-image], [matCardImageXLarge]',\n host: {'class': 'mat-card-xl-image'}\n})\nexport class MatCardXlImage {}\n\n/**\n * Avatar image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\n@Directive({\n selector: '[mat-card-avatar], [matCardAvatar]',\n host: {'class': 'mat-card-avatar'}\n})\nexport class MatCardAvatar {}\n\n\n/**\n * A basic content container component that adds the styles of a Material design card.\n *\n * While this component can be used alone, it also provides a number\n * of preset styles for common card sections, including:\n * - mat-card-title\n * - mat-card-subtitle\n * - mat-card-content\n * - mat-card-actions\n * - mat-card-footer\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-card',\n exportAs: 'matCard',\n templateUrl: 'card.html',\n styleUrls: ['card.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-card',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n }\n})\nexport class MatCard {\n // @breaking-change 9.0.0 `_animationMode` parameter to be made required.\n constructor(@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {}\n}\n\n\n/**\n * Component intended to be used within the `<mat-card>` component. It adds styles for a\n * preset header section (i.e. a title, subtitle, and avatar layout).\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-card-header',\n templateUrl: 'card-header.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'mat-card-header'}\n})\nexport class MatCardHeader {}\n\n\n/**\n * Component intended to be used within the `<mat-card>` component. It adds styles for a preset\n * layout that groups an image with a title section.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-card-title-group',\n templateUrl: 'card-title-group.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'class': 'mat-card-title-group'}\n})\nexport class MatCardTitleGroup {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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, MatRippleModule} from '@angular/material/core';\nimport {MatButtonToggle, MatButtonToggleGroup} from './button-toggle';\n\n\n@NgModule({\n imports: [MatCommonModule, MatRippleModule],\n exports: [MatCommonModule, MatButtonToggleGroup, MatButtonToggle],\n declarations: [MatButtonToggleGroup, MatButtonToggle],\n})\nexport class MatButtonToggleModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {SelectionModel} from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n InjectionToken,\n Inject,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n CanDisableRipple,\n mixinDisableRipple,\n CanDisableRippleCtor,\n} from '@angular/material/core';\n\n\n/** Acceptable types for a button toggle. */\nexport type ToggleType = 'checkbox' | 'radio';\n\n/** Possible appearance styles for the button toggle. */\nexport type MatButtonToggleAppearance = 'legacy' | 'standard';\n\n/**\n * Represents the default options for the button toggle that can be configured\n * using the `MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatButtonToggleDefaultOptions {\n appearance?: MatButtonToggleAppearance;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all button toggles within an app.\n */\nexport const MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS =\n new InjectionToken<MatButtonToggleDefaultOptions>('MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS');\n\n\n\n/**\n * Provider Expression that allows mat-button-toggle-group to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nexport const MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatButtonToggleGroup),\n multi: true\n};\n\n/**\n * @deprecated Use `MatButtonToggleGroup` instead.\n * @breaking-change 8.0.0\n */\nexport class MatButtonToggleGroupMultiple {}\n\nlet _uniqueIdCounter = 0;\n\n/** Change event object emitted by MatButtonToggle. */\nexport class MatButtonToggleChange {\n constructor(\n /** The MatButtonToggle that emits the event. */\n public source: MatButtonToggle,\n\n /** The value assigned to the MatButtonToggle. */\n public value: any) {}\n}\n\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\n@Directive({\n selector: 'mat-button-toggle-group',\n providers: [\n MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\n {provide: MatButtonToggleGroupMultiple, useExisting: MatButtonToggleGroup},\n ],\n host: {\n 'role': 'group',\n 'class': 'mat-button-toggle-group',\n '[attr.aria-disabled]': 'disabled',\n '[class.mat-button-toggle-vertical]': 'vertical',\n '[class.mat-button-toggle-group-appearance-standard]': 'appearance === \"standard\"',\n },\n exportAs: 'matButtonToggleGroup',\n})\nexport class MatButtonToggleGroup implements ControlValueAccessor, OnInit, AfterContentInit {\n private _vertical = false;\n private _multiple = false;\n private _disabled = false;\n private _selectionModel: SelectionModel<MatButtonToggle>;\n\n /**\n * Reference to the raw value that the consumer tried to assign. The real\n * value will exclude any values from this one that don't correspond to a\n * toggle. Useful for the cases where the value is assigned before the toggles\n * have been initialized or at the same that they're being swapped out.\n */\n private _rawValue: any;\n\n /**\n * The method to be called in order to update ngModel.\n * Now `ngModel` binding is not supported in multiple selection mode.\n */\n _controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n _onTouched: () => any = () => {};\n\n /** Child button toggle buttons. */\n @ContentChildren(forwardRef(() => MatButtonToggle)) _buttonToggles: QueryList<MatButtonToggle>;\n\n /** The appearance for all the buttons in the group. */\n @Input() appearance: MatButtonToggleAppearance;\n\n /** `name` attribute for the underlying `input` element. */\n @Input()\n get name(): string { return this._name; }\n set name(value: string) {\n this._name = value;\n\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => {\n toggle.name = this._name;\n toggle._markForCheck();\n });\n }\n }\n private _name = `mat-button-toggle-group-${_uniqueIdCounter++}`;\n\n /** Whether the toggle group is vertical. */\n @Input()\n get vertical(): boolean { return this._vertical; }\n set vertical(value: boolean) {\n this._vertical = coerceBooleanProperty(value);\n }\n\n /** Value of the toggle group. */\n @Input()\n get value(): any {\n const selected = this._selectionModel ? this._selectionModel.selected : [];\n\n if (this.multiple) {\n return selected.map(toggle => toggle.value);\n }\n\n return selected[0] ? selected[0].value : undefined;\n }\n set value(newValue: any) {\n this._setSelectionByValue(newValue);\n this.valueChange.emit(this.value);\n }\n\n /**\n * Event that emits whenever the value of the group changes.\n * Used to facilitate two-way data binding.\n * @docs-private\n */\n @Output() readonly valueChange = new EventEmitter<any>();\n\n /** Selected button toggles in the group. */\n get selected() {\n const selected = this._selectionModel.selected;\n return this.multiple ? selected : (selected[0] || null);\n }\n\n /** Whether multiple button toggles can be selected. */\n @Input()\n get multiple(): boolean { return this._multiple; }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n /** Whether multiple button toggle group is disabled. */\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._buttonToggles) {\n this._buttonToggles.forEach(toggle => toggle._markForCheck());\n }\n }\n\n /** Event emitted when the group's value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n constructor(\n private _changeDetector: ChangeDetectorRef,\n @Optional() @Inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS)\n defaultOptions?: MatButtonToggleDefaultOptions) {\n\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<MatButtonToggle>(this.multiple, undefined, false);\n }\n\n ngAfterContentInit() {\n this._selectionModel.select(...this._buttonToggles.filter(toggle => toggle.checked));\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value Value to be set to the model.\n */\n writeValue(value: any) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void) {\n this._controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any) {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent(): void {\n const selected = this.selected;\n const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;\n const event = new MatButtonToggleChange(source!, this.value);\n this._controlValueAccessorChangeFn(event.value);\n this.change.emit(event);\n }\n\n /**\n * Syncs a button toggle's selected state with the model value.\n * @param toggle Toggle to be synced.\n * @param select Whether the toggle should be selected.\n * @param isUserInput Whether the change was a result of a user interaction.\n * @param deferEvents Whether to defer emitting the change events.\n */\n _syncButtonToggle(toggle: MatButtonToggle,\n select: boolean,\n isUserInput = false,\n deferEvents = false) {\n // Deselect the currently-selected toggle, if we're in single-selection\n // mode and the button being toggled isn't selected at the moment.\n if (!this.multiple && this.selected && !toggle.checked) {\n (this.selected as MatButtonToggle).checked = false;\n }\n\n if (select) {\n this._selectionModel.select(toggle);\n } else {\n this._selectionModel.deselect(toggle);\n }\n\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however\n // the side-effect is that we may end up updating the model value out of sequence in others\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\n if (deferEvents) {\n Promise.resolve(() => this._updateModelValue(isUserInput));\n } else {\n this._updateModelValue(isUserInput);\n }\n }\n\n /** Checks whether a button toggle is selected. */\n _isSelected(toggle: MatButtonToggle) {\n return this._selectionModel.isSelected(toggle);\n }\n\n /** Determines whether a button toggle should be checked on init. */\n _isPrechecked(toggle: MatButtonToggle) {\n if (typeof this._rawValue === 'undefined') {\n return false;\n }\n\n if (this.multiple && Array.isArray(this._rawValue)) {\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\n }\n\n return toggle.value === this._rawValue;\n }\n\n /** Updates the selection state of the toggles in the group based on a value. */\n private _setSelectionByValue(value: any|any[]) {\n this._rawValue = value;\n\n if (!this._buttonToggles) {\n return;\n }\n\n if (this.multiple && value) {\n if (!Array.isArray(value)) {\n throw Error('Value must be an array in multiple-selection mode.');\n }\n\n this._clearSelection();\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n } else {\n this._clearSelection();\n this._selectValue(value);\n }\n }\n\n /** Clears the selected toggles. */\n private _clearSelection() {\n this._selectionModel.clear();\n this._buttonToggles.forEach(toggle => toggle.checked = false);\n }\n\n /** Selects a value if there's a toggle that corresponds to it. */\n private _selectValue(value: any) {\n const correspondingOption = this._buttonToggles.find(toggle => {\n return toggle.value != null && toggle.value === value;\n });\n\n if (correspondingOption) {\n correspondingOption.checked = true;\n this._selectionModel.select(correspondingOption);\n }\n }\n\n /** Syncs up the group's value with the model and emits the change event. */\n private _updateModelValue(isUserInput: boolean) {\n // Only emit the change event for user input.\n if (isUserInput) {\n this._emitChangeEvent();\n }\n\n // Note: we emit this one no matter whether it was a user interaction, because\n // it is used by Angular to sync up the two-way data binding.\n this.valueChange.emit(this.value);\n }\n}\n\n// Boilerplate for applying mixins to the MatButtonToggle class.\n/** @docs-private */\nclass MatButtonToggleBase {}\nconst _MatButtonToggleMixinBase: CanDisableRippleCtor & typeof MatButtonToggleBase =\n mixinDisableRipple(MatButtonToggleBase);\n\n/** Single button inside of a toggle group. */\n@Component({\n moduleId: module.id,\n selector: 'mat-button-toggle',\n templateUrl: 'button-toggle.html',\n styleUrls: ['button-toggle.css'],\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matButtonToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disableRipple'],\n host: {\n '[class.mat-button-toggle-standalone]': '!buttonToggleGroup',\n '[class.mat-button-toggle-checked]': 'checked',\n '[class.mat-button-toggle-disabled]': 'disabled',\n '[class.mat-button-toggle-appearance-standard]': 'appearance === \"standard\"',\n 'class': 'mat-button-toggle',\n // Always reset the tabindex to -1 so it doesn't conflict with the one on the `button`,\n // but can still receive focus from things like cdkFocusInitial.\n '[attr.tabindex]': '-1',\n '[attr.id]': 'id',\n '[attr.name]': 'null',\n '(focus)': 'focus()',\n }\n})\nexport class MatButtonToggle extends _MatButtonToggleMixinBase implements OnInit,\n CanDisableRipple, OnDestroy {\n\n private _isSingleSelector = false;\n private _checked = false;\n\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n @Input('aria-label') ariaLabel: string;\n\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n /** Type of the button toggle. Either 'radio' or 'checkbox'. */\n _type: ToggleType;\n\n @ViewChild('button', {static: false}) _buttonElement: ElementRef<HTMLButtonElement>;\n\n /** The parent button toggle group (exclusive selection). Optional. */\n buttonToggleGroup: MatButtonToggleGroup;\n\n /** Unique ID for the underlying `button` element. */\n get buttonId(): string { return `${this.id}-button`; }\n\n /** The unique ID for this button toggle. */\n @Input() id: string;\n\n /** HTML's 'name' attribute used to group radios for unique selection. */\n @Input() name: string;\n\n /** MatButtonToggleGroup reads this to assign its own value. */\n @Input() value: any;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** The appearance style of the button. */\n @Input()\n get appearance(): MatButtonToggleAppearance {\n return this.buttonToggleGroup ? this.buttonToggleGroup.appearance : this._appearance;\n }\n set appearance(value: MatButtonToggleAppearance) {\n this._appearance = value;\n }\n private _appearance: MatButtonToggleAppearance;\n\n /** Whether the button is checked. */\n @Input()\n get checked(): boolean {\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\n }\n set checked(value: boolean) {\n const newValue = coerceBooleanProperty(value);\n\n if (newValue !== this._checked) {\n this._checked = newValue;\n\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Whether the button is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\n }\n set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); }\n private _disabled: boolean = false;\n\n /** Event emitted when the group value changes. */\n @Output() readonly change: EventEmitter<MatButtonToggleChange> =\n new EventEmitter<MatButtonToggleChange>();\n\n constructor(@Optional() toggleGroup: MatButtonToggleGroup,\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef<HTMLElement>,\n private _focusMonitor: FocusMonitor,\n // @breaking-change 8.0.0 `defaultTabIndex` to be made a required parameter.\n @Attribute('tabindex') defaultTabIndex: string,\n @Optional() @Inject(MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS)\n defaultOptions?: MatButtonToggleDefaultOptions) {\n super();\n\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n this.buttonToggleGroup = toggleGroup;\n this.appearance =\n defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\n }\n\n ngOnInit() {\n this._isSingleSelector = this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\n this._type = this._isSingleSelector ? 'radio' : 'checkbox';\n this.id = this.id || `mat-button-toggle-${_uniqueIdCounter++}`;\n\n if (this._isSingleSelector) {\n this.name = this.buttonToggleGroup.name;\n }\n\n if (this.buttonToggleGroup && this.buttonToggleGroup._isPrechecked(this)) {\n this.checked = true;\n }\n\n this._focusMonitor.monitor(this._elementRef, true);\n }\n\n ngOnDestroy() {\n const group = this.buttonToggleGroup;\n\n this._focusMonitor.stopMonitoring(this._elementRef);\n\n // Remove the toggle from the selection once it's destroyed. Needs to happen\n // on the next tick in order to avoid \"changed after checked\" errors.\n if (group && group._isSelected(this)) {\n group._syncButtonToggle(this, false, false, true);\n }\n }\n\n /** Focuses the button. */\n focus(): void {\n this._buttonElement.nativeElement.focus();\n }\n\n /** Checks the button toggle due to an interaction with the underlying native button. */\n _onButtonClick() {\n const newChecked = this._isSingleSelector ? true : !this._checked;\n\n if (newChecked !== this._checked) {\n this._checked = newChecked;\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\n this.buttonToggleGroup._onTouched();\n }\n }\n // Emit a change event when it's the single selector\n this.change.emit(new MatButtonToggleChange(this, this.value));\n }\n\n /**\n * Marks the button toggle as needing checking for change detection.\n * This method is exposed because the parent button toggle group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When the group value changes, the button will not be notified.\n // Use `markForCheck` to explicit update button toggle's status.\n this._changeDetectorRef.markForCheck();\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule, MatRippleModule} from '@angular/material/core';\nimport {MatAnchor, MatButton} from './button';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatRippleModule,\n MatCommonModule,\n ],\n exports: [\n MatButton,\n MatAnchor,\n MatCommonModule,\n ],\n declarations: [\n MatButton,\n MatAnchor,\n ],\n})\nexport class MatButtonModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {FocusMonitor} from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n Optional,\n Inject,\n Input,\n} from '@angular/core';\nimport {\n CanColor,\n CanDisable,\n CanDisableRipple,\n CanColorCtor,\n CanDisableCtor,\n CanDisableRippleCtor,\n MatRipple,\n mixinColor,\n mixinDisabled,\n mixinDisableRipple,\n} from '@angular/material/core';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n/** Default color palette for round buttons (mat-fab and mat-mini-fab) */\nconst DEFAULT_ROUND_BUTTON_COLOR = 'accent';\n\n/**\n * List of classes to add to MatButton instances based on host attributes to\n * style as different variants.\n */\nconst BUTTON_HOST_ATTRIBUTES = [\n 'mat-button',\n 'mat-flat-button',\n 'mat-icon-button',\n 'mat-raised-button',\n 'mat-stroked-button',\n 'mat-mini-fab',\n 'mat-fab',\n];\n\n// Boilerplate for applying mixins to MatButton.\n/** @docs-private */\nclass MatButtonBase {\n constructor(public _elementRef: ElementRef) {}\n}\n\nconst _MatButtonMixinBase: CanDisableRippleCtor & CanDisableCtor & CanColorCtor &\n typeof MatButtonBase = mixinColor(mixinDisabled(mixinDisableRipple(MatButtonBase)));\n\n/**\n * Material design button.\n */\n@Component({\n moduleId: module.id,\n selector: `button[mat-button], button[mat-raised-button], button[mat-icon-button],\n button[mat-fab], button[mat-mini-fab], button[mat-stroked-button],\n button[mat-flat-button]`,\n exportAs: 'matButton',\n host: {\n '[attr.disabled]': 'disabled || null',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n templateUrl: 'button.html',\n styleUrls: ['button.css'],\n inputs: ['disabled', 'disableRipple', 'color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatButton extends _MatButtonMixinBase\n implements OnDestroy, CanDisable, CanColor, CanDisableRipple {\n\n /** Whether the button is round. */\n readonly isRoundButton: boolean = this._hasHostAttributes('mat-fab', 'mat-mini-fab');\n\n /** Whether the button is icon button. */\n readonly isIconButton: boolean = this._hasHostAttributes('mat-icon-button');\n\n /** Reference to the MatRipple instance of the button. */\n @ViewChild(MatRipple, {static: false}) ripple: MatRipple;\n\n constructor(elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode: string) {\n super(elementRef);\n\n // For each of the variant selectors that is prevent in the button's host\n // attributes, add the correct corresponding class.\n for (const attr of BUTTON_HOST_ATTRIBUTES) {\n if (this._hasHostAttributes(attr)) {\n (this._getHostElement() as HTMLElement).classList.add(attr);\n }\n }\n\n this._focusMonitor.monitor(this._elementRef, true);\n\n if (this.isRoundButton) {\n this.color = DEFAULT_ROUND_BUTTON_COLOR;\n }\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Focuses the button. */\n focus(): void {\n this._getHostElement().focus();\n }\n\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n\n /** Gets whether the button has one of the given attributes. */\n _hasHostAttributes(...attributes: string[]) {\n return attributes.some(attribute => this._getHostElement().hasAttribute(attribute));\n }\n}\n\n/**\n * Material design anchor button.\n */\n@Component({\n moduleId: module.id,\n selector: `a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab],\n a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]`,\n exportAs: 'matButton, matAnchor',\n host: {\n // Note that we ignore the user-specified tabindex when it's disabled for\n // consistency with the `mat-button` applied on native buttons where even\n // though they have an index, they're not tabbable.\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n inputs: ['disabled', 'disableRipple', 'color'],\n templateUrl: 'button.html',\n styleUrls: ['button.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatAnchor extends MatButton {\n /** Tabindex of the button. */\n @Input() tabIndex: number;\n\n constructor(\n focusMonitor: FocusMonitor,\n elementRef: ElementRef,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string) {\n super(elementRef, focusMonitor, animationMode);\n }\n\n _haltDisabledEvents(event: Event) {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\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 {Directionality} from '@angular/cdk/bidi';\nimport {Overlay, OverlayConfig, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType, PortalInjector, TemplatePortal} from '@angular/cdk/portal';\nimport {\n ComponentRef,\n Injectable,\n Injector,\n Optional,\n SkipSelf,\n TemplateRef,\n InjectionToken,\n Inject,\n OnDestroy,\n} from '@angular/core';\nimport {Location} from '@angular/common';\nimport {of as observableOf} from 'rxjs';\nimport {MAT_BOTTOM_SHEET_DATA, MatBottomSheetConfig} from './bottom-sheet-config';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\nimport {MatBottomSheetModule} from './bottom-sheet-module';\nimport {MatBottomSheetRef} from './bottom-sheet-ref';\n\n\n/** Injection token that can be used to specify default bottom sheet options. */\nexport const MAT_BOTTOM_SHEET_DEFAULT_OPTIONS =\n new InjectionToken<MatBottomSheetConfig>('mat-bottom-sheet-default-options');\n\n/**\n * Service to trigger Material Design bottom sheets.\n */\n@Injectable({providedIn: MatBottomSheetModule})\nexport class MatBottomSheet implements OnDestroy {\n private _bottomSheetRefAtThisLevel: MatBottomSheetRef<any> | null = null;\n\n /** Reference to the currently opened bottom sheet. */\n get _openedBottomSheetRef(): MatBottomSheetRef<any> | null {\n const parent = this._parentBottomSheet;\n return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n }\n\n set _openedBottomSheetRef(value: MatBottomSheetRef<any> | null) {\n if (this._parentBottomSheet) {\n this._parentBottomSheet._openedBottomSheetRef = value;\n } else {\n this._bottomSheetRefAtThisLevel = value;\n }\n }\n\n constructor(\n private _overlay: Overlay,\n private _injector: Injector,\n @Optional() @SkipSelf() private _parentBottomSheet: MatBottomSheet,\n @Optional() private _location?: Location,\n @Optional() @Inject(MAT_BOTTOM_SHEET_DEFAULT_OPTIONS)\n private _defaultOptions?: MatBottomSheetConfig) {}\n\n open<T, D = any, R = any>(component: ComponentType<T>,\n config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n open<T, D = any, R = any>(template: TemplateRef<T>,\n config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R>;\n\n open<T, D = any, R = any>(componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: MatBottomSheetConfig<D>): MatBottomSheetRef<T, R> {\n\n const _config =\n _applyConfigDefaults(this._defaultOptions || new MatBottomSheetConfig(), config);\n const overlayRef = this._createOverlay(_config);\n const container = this._attachContainer(overlayRef, _config);\n const ref = new MatBottomSheetRef<T, R>(container, overlayRef, this._location);\n\n if (componentOrTemplateRef instanceof TemplateRef) {\n container.attachTemplatePortal(new TemplatePortal<T>(componentOrTemplateRef, null!, {\n $implicit: _config.data,\n bottomSheetRef: ref\n } as any));\n } else {\n const portal = new ComponentPortal(componentOrTemplateRef, undefined,\n this._createInjector(_config, ref));\n const contentRef = container.attachComponentPortal(portal);\n ref.instance = contentRef.instance;\n }\n\n // When the bottom sheet is dismissed, clear the reference to it.\n ref.afterDismissed().subscribe(() => {\n // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n if (this._openedBottomSheetRef == ref) {\n this._openedBottomSheetRef = null;\n }\n });\n\n if (this._openedBottomSheetRef) {\n // If a bottom sheet is already in view, dismiss it and enter the\n // new bottom sheet after exit animation is complete.\n this._openedBottomSheetRef.afterDismissed().subscribe(() => ref.containerInstance.enter());\n this._openedBottomSheetRef.dismiss();\n } else {\n // If no bottom sheet is in view, enter the new bottom sheet.\n ref.containerInstance.enter();\n }\n\n this._openedBottomSheetRef = ref;\n\n return ref;\n }\n\n /**\n * Dismisses the currently-visible bottom sheet.\n */\n dismiss(): void {\n if (this._openedBottomSheetRef) {\n this._openedBottomSheetRef.dismiss();\n }\n }\n\n ngOnDestroy() {\n if (this._bottomSheetRefAtThisLevel) {\n this._bottomSheetRefAtThisLevel.dismiss();\n }\n }\n\n /**\n * Attaches the bottom sheet container component to the overlay.\n */\n private _attachContainer(overlayRef: OverlayRef,\n config: MatBottomSheetConfig): MatBottomSheetContainer {\n\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = new PortalInjector(userInjector || this._injector, new WeakMap([\n [MatBottomSheetConfig, config]\n ]));\n\n const containerPortal =\n new ComponentPortal(MatBottomSheetContainer, config.viewContainerRef, injector);\n const containerRef: ComponentRef<MatBottomSheetContainer> = overlayRef.attach(containerPortal);\n return containerRef.instance;\n }\n\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified bottom sheet config.\n */\n private _createOverlay(config: MatBottomSheetConfig): OverlayRef {\n const overlayConfig = new OverlayConfig({\n direction: config.direction,\n hasBackdrop: config.hasBackdrop,\n disposeOnNavigation: config.closeOnNavigation,\n maxWidth: '100%',\n scrollStrategy: config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().bottom('0')\n });\n\n if (config.backdropClass) {\n overlayConfig.backdropClass = config.backdropClass;\n }\n\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Creates an injector to be used inside of a bottom sheet component.\n * @param config Config that was used to create the bottom sheet.\n * @param bottomSheetRef Reference to the bottom sheet.\n */\n private _createInjector<T>(config: MatBottomSheetConfig,\n bottomSheetRef: MatBottomSheetRef<T>): PortalInjector {\n\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injectionTokens = new WeakMap<any, any>([\n [MatBottomSheetRef, bottomSheetRef],\n [MAT_BOTTOM_SHEET_DATA, config.data]\n ]);\n\n if (config.direction &&\n (!userInjector || !userInjector.get<Directionality | null>(Directionality, null))) {\n injectionTokens.set(Directionality, {\n value: config.direction,\n change: observableOf()\n });\n }\n\n return new PortalInjector(userInjector || this._injector, injectionTokens);\n }\n}\n\n/**\n * Applies default options to the bottom sheet config.\n * @param defaults Object containing the default values to which to fall back.\n * @param config The configuration to which the defaults will be applied.\n * @returns The new configuration object with defaults applied.\n */\nfunction _applyConfigDefaults(defaults: MatBottomSheetConfig,\n config?: MatBottomSheetConfig): MatBottomSheetConfig {\n return {...defaults, ...config};\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 {Location} from '@angular/common';\nimport {ESCAPE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {OverlayRef} from '@angular/cdk/overlay';\nimport {merge, Observable, Subject} from 'rxjs';\nimport {filter, take} from 'rxjs/operators';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n/**\n * Reference to a bottom sheet dispatched from the bottom sheet service.\n */\nexport class MatBottomSheetRef<T = any, R = any> {\n /** Instance of the component making up the content of the bottom sheet. */\n instance: T;\n\n /**\n * Instance of the component into which the bottom sheet content is projected.\n * @docs-private\n */\n containerInstance: MatBottomSheetContainer;\n\n /** Whether the user is allowed to close the bottom sheet. */\n disableClose: boolean | undefined;\n\n /** Subject for notifying the user that the bottom sheet has been dismissed. */\n private readonly _afterDismissed = new Subject<R | undefined>();\n\n /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterDismissed` stream. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: number;\n\n constructor(\n containerInstance: MatBottomSheetContainer,\n private _overlayRef: OverlayRef,\n // @breaking-change 8.0.0 `_location` parameter to be removed.\n _location?: Location) {\n this.containerInstance = containerInstance;\n this.disableClose = containerInstance.bottomSheetConfig.disableClose;\n\n // Emit when opening animation completes\n containerInstance._animationStateChanged.pipe(\n filter(event => event.phaseName === 'done' && event.toState === 'visible'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(filter(event => event.phaseName === 'done' && event.toState === 'hidden'), take(1))\n .subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n _overlayRef.dispose();\n });\n\n _overlayRef.detachments().pipe(take(1)).subscribe(() => {\n this._afterDismissed.next(this._result);\n this._afterDismissed.complete();\n });\n\n merge(\n _overlayRef.backdropClick(),\n _overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE))\n ).subscribe(event => {\n if (!this.disableClose &&\n (event.type !== 'keydown' || !hasModifierKey(event as KeyboardEvent))) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n\n /**\n * Dismisses the bottom sheet.\n * @param result Data to be passed back to the bottom sheet opener.\n */\n dismiss(result?: R): void {\n if (!this._afterDismissed.closed) {\n // Transition the backdrop in parallel to the bottom sheet.\n this.containerInstance._animationStateChanged.pipe(\n filter(event => event.phaseName === 'start'),\n take(1)\n ).subscribe(event => {\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has fired.\n this._closeFallbackTimeout = setTimeout(() => {\n this._overlayRef.dispose();\n }, event.totalTime + 100);\n\n this._overlayRef.detachBackdrop();\n });\n\n this._result = result;\n this.containerInstance.exit();\n }\n }\n\n /** Gets an observable that is notified when the bottom sheet is finished closing. */\n afterDismissed(): Observable<R | undefined> {\n return this._afterDismissed.asObservable();\n }\n\n /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick(): Observable<MouseEvent> {\n return this._overlayRef.backdropClick();\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents(): Observable<KeyboardEvent> {\n return this._overlayRef.keydownEvents();\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 {OverlayModule} from '@angular/cdk/overlay';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCommonModule} from '@angular/material/core';\nimport {MatBottomSheetContainer} from './bottom-sheet-container';\n\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n MatCommonModule,\n PortalModule,\n ],\n exports: [MatBottomSheetContainer, MatCommonModule],\n declarations: [MatBottomSheetContainer],\n entryComponents: [MatBottomSheetContainer],\n})\nexport class MatBottomSheetModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 ComponentRef,\n EmbeddedViewRef,\n ViewChild,\n OnDestroy,\n ElementRef,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n ChangeDetectorRef,\n EventEmitter,\n Inject,\n Optional,\n} from '@angular/core';\nimport {AnimationEvent} from '@angular/animations';\nimport {\n BasePortalOutlet,\n ComponentPortal,\n TemplatePortal,\n CdkPortalOutlet,\n} from '@angular/cdk/portal';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {MatBottomSheetConfig} from './bottom-sheet-config';\nimport {matBottomSheetAnimations} from './bottom-sheet-animations';\nimport {Subscription} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {FocusTrap, FocusTrapFactory} from '@angular/cdk/a11y';\n\n// TODO(crisbeto): consolidate some logic between this, MatDialog and MatSnackBar\n\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\n@Component({\n moduleId: module.id,\n selector: 'mat-bottom-sheet-container',\n templateUrl: 'bottom-sheet-container.html',\n styleUrls: ['bottom-sheet-container.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [matBottomSheetAnimations.bottomSheetState],\n host: {\n 'class': 'mat-bottom-sheet-container',\n 'tabindex': '-1',\n 'role': 'dialog',\n 'aria-modal': 'true',\n '[attr.aria-label]': 'bottomSheetConfig?.ariaLabel',\n '[@state]': '_animationState',\n '(@state.start)': '_onAnimationStart($event)',\n '(@state.done)': '_onAnimationDone($event)'\n },\n})\nexport class MatBottomSheetContainer extends BasePortalOutlet implements OnDestroy {\n private _breakpointSubscription: Subscription;\n\n /** The portal outlet inside of this container into which the content will be loaded. */\n @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet: CdkPortalOutlet;\n\n /** The state of the bottom sheet animations. */\n _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** The class that traps and manages focus within the bottom sheet. */\n private _focusTrap: FocusTrap;\n\n /** Element that was focused before the bottom sheet was opened. */\n private _elementFocusedBeforeOpened: HTMLElement | null = null;\n\n /** Server-side rendering-compatible reference to the global document object. */\n private _document: Document;\n\n /** Whether the component has been destroyed. */\n private _destroyed: boolean;\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n private _focusTrapFactory: FocusTrapFactory,\n breakpointObserver: BreakpointObserver,\n @Optional() @Inject(DOCUMENT) document: any,\n /** The bottom sheet configuration. */\n public bottomSheetConfig: MatBottomSheetConfig) {\n super();\n\n this._document = document;\n this._breakpointSubscription = breakpointObserver\n .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .subscribe(() => {\n this._toggleClass('mat-bottom-sheet-container-medium',\n breakpointObserver.isMatched(Breakpoints.Medium));\n this._toggleClass('mat-bottom-sheet-container-large',\n breakpointObserver.isMatched(Breakpoints.Large));\n this._toggleClass('mat-bottom-sheet-container-xlarge',\n breakpointObserver.isMatched(Breakpoints.XLarge));\n });\n }\n\n /** Attach a component portal as content to this bottom sheet container. */\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n this._validatePortalAttached();\n this._setPanelClass();\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachComponentPortal(portal);\n }\n\n /** Attach a template portal as content to this bottom sheet container. */\n attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n this._validatePortalAttached();\n this._setPanelClass();\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n\n /** Begin animation of bottom sheet entrance into view. */\n enter(): void {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n }\n }\n\n /** Begin animation of the bottom sheet exiting from view. */\n exit(): void {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this._breakpointSubscription.unsubscribe();\n this._destroyed = true;\n }\n\n _onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'hidden') {\n this._restoreFocus();\n } else if (event.toState === 'visible') {\n this._trapFocus();\n }\n\n this._animationStateChanged.emit(event);\n }\n\n _onAnimationStart(event: AnimationEvent) {\n this._animationStateChanged.emit(event);\n }\n\n private _toggleClass(cssClass: string, add: boolean) {\n const classList = this._elementRef.nativeElement.classList;\n add ? classList.add(cssClass) : classList.remove(cssClass);\n }\n\n private _validatePortalAttached() {\n if (this._portalOutlet.hasAttached()) {\n throw Error('Attempting to attach bottom sheet content after content is already attached');\n }\n }\n\n private _setPanelClass() {\n const element: HTMLElement = this._elementRef.nativeElement;\n const panelClass = this.bottomSheetConfig.panelClass;\n\n if (Array.isArray(panelClass)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClass.forEach(cssClass => element.classList.add(cssClass));\n } else if (panelClass) {\n element.classList.add(panelClass);\n }\n }\n\n\n /** Moves the focus inside the focus trap. */\n private _trapFocus() {\n if (!this._focusTrap) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n }\n\n if (this.bottomSheetConfig.autoFocus) {\n this._focusTrap.focusInitialElementWhenReady();\n }\n }\n\n /** Restores focus to the element that was focused before the bottom sheet was opened. */\n private _restoreFocus() {\n const toFocus = this._elementFocusedBeforeOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this.bottomSheetConfig.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n\n /** Saves a reference to the element that was focused before the bottom sheet was opened. */\n private _savePreviouslyFocusedElement() {\n this._elementFocusedBeforeOpened = this._document.activeElement as HTMLElement;\n\n // The `focus` method isn't available during server-side rendering.\n if (this._elementRef.nativeElement.focus) {\n Promise.resolve().then(() => this._elementRef.nativeElement.focus());\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 */\nimport {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata,\n} from '@angular/animations';\nimport {AnimationCurves, AnimationDurations} from '@angular/material/core';\n\n/** Animations used by the Material bottom sheet. */\nexport const matBottomSheetAnimations: {\n readonly bottomSheetState: AnimationTriggerMetadata;\n} = {\n /** Animation that shows and hides a bottom sheet. */\n bottomSheetState: trigger('state', [\n state('void, hidden', style({transform: 'translateY(100%)'})),\n state('visible', style({transform: 'translateY(0%)'})),\n transition('visible => void, visible => hidden',\n animate(`${AnimationDurations.COMPLEX} ${AnimationCurves.ACCELERATION_CURVE}`)),\n transition('void => visible',\n animate(`${AnimationDurations.EXITING} ${AnimationCurves.DECELERATION_CURVE}`)),\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 {Direction} from '@angular/cdk/bidi';\nimport {ScrollStrategy} from '@angular/cdk/overlay';\nimport {InjectionToken, ViewContainerRef} from '@angular/core';\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nexport const MAT_BOTTOM_SHEET_DATA = new InjectionToken<any>('MatBottomSheetData');\n\n/**\n * Configuration used when opening a bottom sheet.\n */\nexport class MatBottomSheetConfig<D = any> {\n /** The view container to place the overlay for the bottom sheet into. */\n viewContainerRef?: ViewContainerRef;\n\n /** Extra CSS classes to be added to the bottom sheet container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the bottom sheet. */\n direction?: Direction;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Whether the bottom sheet has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop. */\n backdropClass?: string;\n\n /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n disableClose?: boolean = false;\n\n /** Aria label to assign to the bottom sheet element. */\n ariaLabel?: string | null = null;\n\n /**\n * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n closeOnNavigation?: boolean = true;\n\n // Note that this is disabled by default, because while the a11y recommendations are to focus\n // the first focusable element, doing so prevents screen readers from reading out the\n // rest of the bottom sheet content.\n /** Whether the bottom sheet should focus the first focusable element on open. */\n autoFocus?: boolean = false;\n\n /**\n * Whether the bottom sheet should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the bottom sheet. */\n scrollStrategy?: ScrollStrategy;\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],\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\nimport {AriaDescriber} from '@angular/cdk/a11y';\nimport {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 isDevMode,\n} from '@angular/core';\nimport {CanDisable, CanDisableCtor, 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 */\nclass MatBadgeBase {}\n\nconst _MatBadgeMixinBase:\n CanDisableCtor & typeof MatBadgeBase = mixinDisabled(MatBadgeBase);\n\nexport type MatBadgePosition = 'above after' | 'above before' | 'below before' | 'below after';\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 _MatBadgeMixinBase 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;\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 (isDevMode()) {\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.content;\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.content;\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 if (this._color) {\n this._elementRef.nativeElement.classList.remove(`mat-badge-${this._color}`);\n }\n if (colorPalette) {\n this._elementRef.nativeElement.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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {MatAutocomplete} from './autocomplete';\nimport {\n MatAutocompleteTrigger,\n MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER,\n} from './autocomplete-trigger';\nimport {MatAutocompleteOrigin} from './autocomplete-origin';\n\n@NgModule({\n imports: [MatOptionModule, OverlayModule, MatCommonModule, CommonModule],\n exports: [\n MatAutocomplete,\n MatOptionModule,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\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 */\nimport {Directionality} from '@angular/cdk/bidi';\nimport {DOWN_ARROW, ENTER, ESCAPE, TAB, UP_ARROW} 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 {TemplatePortal} from '@angular/cdk/portal';\nimport {DOCUMENT} from '@angular/common';\nimport {filter, take, switchMap, delay, tap, map} from 'rxjs/operators';\nimport {\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 {ViewportRuler} from '@angular/cdk/scrolling';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n MatOption,\n MatOptionSelectionChange,\n} from '@angular/material/core';\nimport {MatFormField} from '@angular/material/form-field';\nimport {Subscription, defer, fromEvent, merge, of as observableOf, Subject, Observable} from 'rxjs';\nimport {MatAutocomplete} from './autocomplete';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatAutocompleteOrigin} from './autocomplete-origin';\n\n\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the scrollTop of the panel. Because we are not\n * actually focusing the active item, scroll must be handled manually.\n */\n\n/** The height of each autocomplete option. */\nexport const AUTOCOMPLETE_OPTION_HEIGHT = 48;\n\n/** The total height of the autocomplete panel. */\nexport const AUTOCOMPLETE_PANEL_HEIGHT = 256;\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\n@Directive({\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\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 implements ControlValueAccessor, OnChanges, OnDestroy {\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: MatAutocomplete;\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: MatAutocompleteOrigin;\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() @Host() private _formField: MatFormField,\n @Optional() @Inject(DOCUMENT) private _document: any,\n // @breaking-change 8.0.0 Make `_viewportRuler` required.\n private _viewportRuler?: ViewportRuler) {\n\n if (typeof window !== 'undefined') {\n _zone.runOutsideAngular(() => {\n window.addEventListener('blur', this._windowBlurHandler);\n });\n }\n\n this._scrollStrategy = scrollStrategy;\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 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 .asObservable()\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, 'touchend') as Observable<TouchEvent>\n )\n .pipe(filter(event => {\n const clickTarget = event.target as HTMLElement;\n const formField = this._formField ?\n this._formField._elementRef.nativeElement : null;\n\n return this._overlayAttached &&\n clickTarget !== this._element.nativeElement &&\n (!formField || !formField.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) {\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();\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 * 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 */\n private _scrollToOption(): void {\n const index = this.autocomplete._keyManager.activeItemIndex || 0;\n const labelCount = _countGroupLabelsBeforeOption(index,\n this.autocomplete.options, this.autocomplete.optionGroups);\n\n const newScrollPosition = _getOptionScrollPosition(\n index + labelCount,\n AUTOCOMPLETE_OPTION_HEIGHT,\n this.autocomplete._getScrollTop(),\n AUTOCOMPLETE_PANEL_HEIGHT\n );\n\n this.autocomplete._setScrollTop(newScrollPosition);\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.asObservable().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) {\n throw getMatAutocompleteMissingPanelError();\n }\n\n let overlayRef = this._overlayRef;\n\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef);\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 || (event.keyCode === UP_ARROW && event.altKey)) {\n this._resetActiveItem();\n this._closeKeyEventStream.next();\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 if (this._viewportRuler) {\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({width: this._getPanelWidth()});\n }\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 });\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 const belowPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n };\n const abovePosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\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 panelClass: 'mat-autocomplete-panel-above'\n };\n\n let positions: ConnectedPosition[];\n\n if (this.position === 'above') {\n positions = [abovePosition];\n } else if (this.position === 'below') {\n positions = [belowPosition];\n } else {\n positions = [belowPosition, abovePosition];\n }\n\n positionStrategy.withPositions(positions);\n }\n\n private _getConnectedElement(): ElementRef {\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 this.autocomplete._keyManager.setActiveItem(this.autocomplete.autoActiveFirstOption ? 0 : -1);\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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/**\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 {\n constructor(\n /** Reference to the element on which the directive is applied. */\n public elementRef: ElementRef<HTMLElement>) { }\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 {ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\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} from '@angular/core';\nimport {\n CanDisableRipple,\n CanDisableRippleCtor,\n MAT_OPTION_PARENT_COMPONENT,\n MatOptgroup,\n MatOption,\n mixinDisableRipple,\n} from '@angular/material/core';\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: MatAutocomplete,\n /** Option that was selected. */\n public option: MatOption) { }\n}\n\n\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nclass MatAutocompleteBase {}\nconst _MatAutocompleteMixinBase: CanDisableRippleCtor & typeof MatAutocompleteBase =\n mixinDisableRipple(MatAutocompleteBase);\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\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@Component({\n moduleId: module.id,\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 _MatAutocompleteMixinBase implements AfterContentInit,\n CanDisableRipple {\n\n /** Manages active item in option list based on key events. */\n _keyManager: ActiveDescendantKeyManager<MatOption>;\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', {static: false}) panel: ElementRef;\n\n /** @docs-private */\n @ContentChildren(MatOption, {descendants: true}) options: QueryList<MatOption>;\n\n /** @docs-private */\n @ContentChildren(MatOptgroup) optionGroups: QueryList<MatOptgroup>;\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 /**\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) {\n if (value && value.length) {\n this._classList = value.split(' ').reduce((classList, className) => {\n classList[className.trim()] = 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 constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS) defaults: MatAutocompleteDefaultOptions) {\n super();\n\n this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n }\n\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options).withWrap();\n // Set the initial visibility state.\n this._setVisibility();\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: MatOption): void {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\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['mat-autocomplete-visible'] = this.showPanel;\n classList['mat-autocomplete-hidden'] = !this.showPanel;\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 {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ObserversModule} from '@angular/cdk/observers';\nimport {MatError} from './error';\nimport {MatFormField} from './form-field';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\n\n\n@NgModule({\n declarations: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n imports: [\n CommonModule,\n ObserversModule,\n ],\n exports: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n})\nexport class MatFormFieldModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n OnDestroy,\n} from '@angular/core';\nimport {\n CanColor, CanColorCtor,\n FloatLabelType,\n LabelOptions,\n MAT_LABEL_GLOBAL_OPTIONS,\n mixinColor,\n} from '@angular/material/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {startWith, take, takeUntil} from 'rxjs/operators';\nimport {MatError} from './error';\nimport {matFormFieldAnimations} from './form-field-animations';\nimport {MatFormFieldControl} from './form-field-control';\nimport {\n getMatFormFieldDuplicatedHintError,\n getMatFormFieldMissingControlError,\n getMatFormFieldPlaceholderConflictError,\n} from './form-field-errors';\nimport {MatHint} from './hint';\nimport {MatLabel} from './label';\nimport {MatPlaceholder} from './placeholder';\nimport {MatPrefix} from './prefix';\nimport {MatSuffix} from './suffix';\nimport {Platform} from '@angular/cdk/platform';\nimport {NgControl} from '@angular/forms';\nimport {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';\n\n\nlet nextUniqueId = 0;\nconst floatingLabelScale = 0.75;\nconst outlineGapPadding = 5;\n\n\n/**\n * Boilerplate for applying mixins to MatFormField.\n * @docs-private\n */\nclass MatFormFieldBase {\n constructor(public _elementRef: ElementRef) { }\n}\n\n/**\n * Base class to which we're applying the form field mixins.\n * @docs-private\n */\nconst _MatFormFieldMixinBase: CanColorCtor & typeof MatFormFieldBase =\n mixinColor(MatFormFieldBase, 'primary');\n\n/** Possible appearance styles for the form field. */\nexport type MatFormFieldAppearance = 'legacy' | 'standard' | 'fill' | 'outline';\n\n/**\n * Represents the default options for the form field that can be configured\n * using the `MAT_FORM_FIELD_DEFAULT_OPTIONS` injection token.\n */\nexport interface MatFormFieldDefaultOptions {\n appearance?: MatFormFieldAppearance;\n}\n\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nexport const MAT_FORM_FIELD_DEFAULT_OPTIONS =\n new InjectionToken<MatFormFieldDefaultOptions>('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n\n\n/** Container for form controls that applies Material Design styling and behavior. */\n@Component({\n moduleId: module.id,\n selector: 'mat-form-field',\n exportAs: 'matFormField',\n templateUrl: 'form-field.html',\n // MatInput is a directive and can't have styles, so we need to include its styles here\n // in form-field-input.css. The MatInput styles are fairly minimal so it shouldn't be a\n // big deal for people who aren't using MatInput.\n styleUrls: [\n 'form-field.css',\n 'form-field-fill.css',\n 'form-field-input.css',\n 'form-field-legacy.css',\n 'form-field-outline.css',\n 'form-field-standard.css',\n ],\n animations: [matFormFieldAnimations.transitionMessages],\n host: {\n 'class': 'mat-form-field',\n '[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-can-float]': '_canLabelFloat',\n '[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n '[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-focused]': '_control.focused',\n '[class.mat-accent]': 'color == \"accent\"',\n '[class.mat-warn]': 'color == \"warn\"',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")',\n '[class._mat-animation-noopable]': '!_animationsEnabled',\n },\n inputs: ['color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class MatFormField extends _MatFormFieldMixinBase\n implements AfterContentInit, AfterContentChecked, AfterViewInit, OnDestroy, CanColor {\n private _labelOptions: LabelOptions;\n\n /**\n * Whether the outline gap needs to be calculated\n * immediately on the next change detection run.\n */\n private _outlineGapCalculationNeededImmediately = false;\n\n /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\n private _outlineGapCalculationNeededOnStable = false;\n\n private _destroyed = new Subject<void>();\n\n /** The form-field appearance style. */\n @Input()\n get appearance(): MatFormFieldAppearance { return this._appearance; }\n set appearance(value: MatFormFieldAppearance) {\n const oldValue = this._appearance;\n\n this._appearance = value || (this._defaults && this._defaults.appearance) || 'legacy';\n\n if (this._appearance === 'outline' && oldValue !== value) {\n this._outlineGapCalculationNeededOnStable = true;\n }\n }\n _appearance: MatFormFieldAppearance;\n\n /** Whether the required marker should be hidden. */\n @Input()\n get hideRequiredMarker(): boolean { return this._hideRequiredMarker; }\n set hideRequiredMarker(value: boolean) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n private _hideRequiredMarker: boolean;\n\n /** Override for the logic that disables the label animation in certain cases. */\n private _showAlwaysAnimate = false;\n\n /** Whether the floating label should always float or not. */\n get _shouldAlwaysFloat(): boolean {\n return this.floatLabel === 'always' && !this._showAlwaysAnimate;\n }\n\n /** Whether the label can float or not. */\n get _canLabelFloat(): boolean { return this.floatLabel !== 'never'; }\n\n /** State of the mat-hint and mat-error animations. */\n _subscriptAnimationState: string = '';\n\n /** Text for the form field hint. */\n @Input()\n get hintLabel(): string { return this._hintLabel; }\n set hintLabel(value: string) {\n this._hintLabel = value;\n this._processHints();\n }\n private _hintLabel = '';\n\n // Unique id for the hint label.\n _hintLabelId: string = `mat-hint-${nextUniqueId++}`;\n\n // Unique id for the internal form field label.\n _labelId = `mat-form-field-label-${nextUniqueId++}`;\n\n /**\n * Whether the label should always float, never float or float as the user types.\n *\n * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\n * way to make the floating label emulate the behavior of a standard input placeholder. However\n * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\n * appearances the `never` option has been disabled in favor of just using the placeholder.\n */\n @Input()\n get floatLabel(): FloatLabelType {\n return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;\n }\n set floatLabel(value: FloatLabelType) {\n if (value !== this._floatLabel) {\n this._floatLabel = value || this._labelOptions.float || 'auto';\n this._changeDetectorRef.markForCheck();\n }\n }\n private _floatLabel: FloatLabelType;\n\n /** Whether the Angular animations are enabled. */\n _animationsEnabled: boolean;\n\n /**\n * @deprecated\n * @breaking-change 8.0.0\n */\n @ViewChild('underline', {static: false}) underlineRef: ElementRef;\n\n @ViewChild('connectionContainer', {static: true}) _connectionContainerRef: ElementRef;\n @ViewChild('inputContainer', {static: false}) _inputContainerRef: ElementRef;\n @ViewChild('label', {static: false}) private _label: ElementRef;\n\n @ContentChild(MatFormFieldControl, {static: false}) _controlNonStatic: MatFormFieldControl<any>;\n @ContentChild(MatFormFieldControl, {static: true}) _controlStatic: MatFormFieldControl<any>;\n get _control() {\n // TODO(crisbeto): we need this hacky workaround in order to support both Ivy\n // and ViewEngine. We should clean this up once Ivy is the default renderer.\n return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n private _explicitFormFieldControl: MatFormFieldControl<any>;\n\n @ContentChild(MatLabel, {static: false}) _labelChildNonStatic: MatLabel;\n @ContentChild(MatLabel, {static: true}) _labelChildStatic: MatLabel;\n get _labelChild() {\n return this._labelChildNonStatic || this._labelChildStatic;\n }\n\n @ContentChild(MatPlaceholder, {static: false}) _placeholderChild: MatPlaceholder;\n @ContentChildren(MatError) _errorChildren: QueryList<MatError>;\n @ContentChildren(MatHint) _hintChildren: QueryList<MatHint>;\n @ContentChildren(MatPrefix) _prefixChildren: QueryList<MatPrefix>;\n @ContentChildren(MatSuffix) _suffixChildren: QueryList<MatSuffix>;\n\n constructor(\n public _elementRef: ElementRef, private _changeDetectorRef: ChangeDetectorRef,\n @Optional() @Inject(MAT_LABEL_GLOBAL_OPTIONS) labelOptions: LabelOptions,\n @Optional() private _dir: Directionality,\n @Optional() @Inject(MAT_FORM_FIELD_DEFAULT_OPTIONS) private _defaults:\n MatFormFieldDefaultOptions, private _platform: Platform, private _ngZone: NgZone,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) _animationMode: string) {\n super(_elementRef);\n\n this._labelOptions = labelOptions ? labelOptions : {};\n this.floatLabel = this._labelOptions.float || 'auto';\n this._animationsEnabled = _animationMode !== 'NoopAnimations';\n\n // Set the default through here so we invoke the setter on the first run.\n this.appearance = (_defaults && _defaults.appearance) ? _defaults.appearance : 'legacy';\n }\n\n /**\n * Gets an ElementRef for the element that a overlay attached to the form-field should be\n * positioned relative to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._connectionContainerRef || this._elementRef;\n }\n\n ngAfterContentInit() {\n this._validateControlChild();\n\n const control = this._control;\n\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-form-field-type-${control.controlType}`);\n }\n\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.pipe(startWith(null!)).subscribe(() => {\n this._validatePlaceholders();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n\n // Note that we have to run outside of the `NgZone` explicitly,\n // in order to avoid throwing users into an infinite loop\n // if `zone-patch-rxjs` is included.\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.asObservable().pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._outlineGapCalculationNeededOnStable) {\n this.updateOutlineGap();\n }\n });\n });\n\n // Run change detection and update the outline if the suffix or prefix changes.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._outlineGapCalculationNeededOnStable = true;\n this._changeDetectorRef.markForCheck();\n });\n\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n\n if (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this.updateOutlineGap());\n }\n }\n\n ngAfterContentChecked() {\n this._validateControlChild();\n if (this._outlineGapCalculationNeededImmediately) {\n this.updateOutlineGap();\n }\n }\n\n ngAfterViewInit() {\n // Avoid animations on load.\n this._subscriptAnimationState = 'enter';\n this._changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Determines whether a class from the NgControl should be forwarded to the host element. */\n _shouldForward(prop: keyof NgControl): boolean {\n const ngControl = this._control ? this._control.ngControl : null;\n return ngControl && ngControl[prop];\n }\n\n _hasPlaceholder() {\n return !!(this._control && this._control.placeholder || this._placeholderChild);\n }\n\n _hasLabel() {\n return !!this._labelChild;\n }\n\n _shouldLabelFloat() {\n return this._canLabelFloat && (this._control.shouldLabelFloat || this._shouldAlwaysFloat);\n }\n\n _hideControlPlaceholder() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this.appearance === 'legacy' && !this._hasLabel() ||\n this._hasLabel() && !this._shouldLabelFloat();\n }\n\n _hasFloatingLabel() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();\n }\n\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages(): 'error' | 'hint' {\n return (this._errorChildren && this._errorChildren.length > 0 &&\n this._control.errorState) ? 'error' : 'hint';\n }\n\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel(): void {\n if (this._hasFloatingLabel() && this._canLabelFloat) {\n // If animations are disabled, we shouldn't go in here,\n // because the `transitionend` will never fire.\n if (this._animationsEnabled) {\n this._showAlwaysAnimate = true;\n\n fromEvent(this._label.nativeElement, 'transitionend').pipe(take(1)).subscribe(() => {\n this._showAlwaysAnimate = false;\n });\n }\n\n this.floatLabel = 'always';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n * or child element with the `mat-placeholder` directive).\n */\n private _validatePlaceholders() {\n if (this._control.placeholder && this._placeholderChild) {\n throw getMatFormFieldPlaceholderConflictError();\n }\n }\n\n /** Does any extra processing that is required when handling the hints. */\n private _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n\n /**\n * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\n * attribute being considered as `align=\"start\"`.\n */\n private _validateHints() {\n if (this._hintChildren) {\n let startHint: MatHint;\n let endHint: MatHint;\n this._hintChildren.forEach((hint: MatHint) => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n } else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n private _syncDescribedByIds() {\n if (this._control) {\n let ids: string[] = [];\n\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'end') : null;\n\n if (startHint) {\n ids.push(startHint.id);\n } else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n\n if (endHint) {\n ids.push(endHint.id);\n }\n } else if (this._errorChildren) {\n ids = this._errorChildren.map(error => error.id);\n }\n\n this._control.setDescribedByIds(ids);\n }\n }\n\n /** Throws an error if the form field's control is missing. */\n protected _validateControlChild() {\n if (!this._control) {\n throw getMatFormFieldMissingControlError();\n }\n }\n\n /**\n * Updates the width and position of the gap in the outline. Only relevant for the outline\n * appearance.\n */\n updateOutlineGap() {\n const labelEl = this._label ? this._label.nativeElement : null;\n\n if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length ||\n !labelEl.textContent.trim()) {\n return;\n }\n\n if (!this._platform.isBrowser) {\n // getBoundingClientRect isn't available on the server.\n return;\n }\n // If the element is not present in the DOM, the outline gap will need to be calculated\n // the next time it is checked and in the DOM.\n if (!document.documentElement!.contains(this._elementRef.nativeElement)) {\n this._outlineGapCalculationNeededImmediately = true;\n return;\n }\n\n let startWidth = 0;\n let gapWidth = 0;\n\n const container = this._connectionContainerRef.nativeElement;\n const startEls = container.querySelectorAll('.mat-form-field-outline-start');\n const gapEls = container.querySelectorAll('.mat-form-field-outline-gap');\n\n if (this._label && this._label.nativeElement.children.length) {\n const containerRect = container.getBoundingClientRect();\n\n // If the container's width and height are zero, it means that the element is\n // invisible and we can't calculate the outline gap. Mark the element as needing\n // to be checked the next time the zone stabilizes. We can't do this immediately\n // on the next change detection, because even if the element becomes visible,\n // the `ClientRect` won't be reclaculated immediately. We reset the\n // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.\n if (containerRect.width === 0 && containerRect.height === 0) {\n this._outlineGapCalculationNeededOnStable = true;\n this._outlineGapCalculationNeededImmediately = false;\n return;\n }\n\n const containerStart = this._getStartEnd(containerRect);\n const labelStart = this._getStartEnd(labelEl.children[0].getBoundingClientRect());\n let labelWidth = 0;\n\n for (const child of labelEl.children) {\n labelWidth += child.offsetWidth;\n }\n startWidth = labelStart - containerStart - outlineGapPadding;\n gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;\n }\n\n for (let i = 0; i < startEls.length; i++) {\n startEls.item(i).style.width = `${startWidth}px`;\n }\n for (let i = 0; i < gapEls.length; i++) {\n gapEls.item(i).style.width = `${gapWidth}px`;\n }\n\n this._outlineGapCalculationNeededOnStable =\n this._outlineGapCalculationNeededImmediately = false;\n }\n\n /** Gets the start end of the rect considering the current directionality. */\n private _getStartEnd(rect: ClientRect): number {\n return this._dir && this._dir.value === 'rtl' ? rect.right : rect.left;\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 {Directive} from '@angular/core';\n\n\n/** Suffix to be placed at the end of the form field. */\n@Directive({\n selector: '[matSuffix]',\n})\nexport class MatSuffix {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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} from '@angular/core';\n\n\n/** Prefix to be placed in front of the form field. */\n@Directive({\n selector: '[matPrefix]',\n})\nexport class MatPrefix {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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} from '@angular/core';\n\n\n/**\n * The placeholder text for an `MatFormField`.\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\n * placeholder.\n * @breaking-change 8.0.0\n */\n@Directive({\n selector: 'mat-placeholder'\n})\nexport class MatPlaceholder {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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} from '@angular/core';\n\n\n/** The floating label for a `mat-form-field`. */\n@Directive({\n selector: 'mat-label'\n})\nexport class MatLabel {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Hint text to be shown underneath the form field control. */\n@Directive({\n selector: 'mat-hint',\n host: {\n 'class': 'mat-hint',\n '[class.mat-right]': 'align == \"end\"',\n '[attr.id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null',\n }\n})\nexport class MatHint {\n /** Whether to align the hint label at the start or end of the line. */\n @Input() align: 'start' | 'end' = 'start';\n\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n @Input() id: string = `mat-hint-${nextUniqueId++}`;\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/** @docs-private */\nexport function getMatFormFieldPlaceholderConflictError(): Error {\n return Error('Placeholder attribute and child element were both specified.');\n}\n\n/** @docs-private */\nexport function getMatFormFieldDuplicatedHintError(align: string): Error {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n\n/** @docs-private */\nexport function getMatFormFieldMissingControlError(): Error {\n return Error('mat-form-field must contain a MatFormFieldControl.');\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} from 'rxjs';\nimport {NgControl} from '@angular/forms';\n\n\n/** An interface which allows a control to work inside of a `MatFormField`. */\nexport abstract class MatFormFieldControl<T> {\n /** The value of the control. */\n value: T | null;\n\n /**\n * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n * needs to run change detection.\n */\n readonly stateChanges: Observable<void>;\n\n /** The element ID for this control. */\n readonly id: string;\n\n /** The placeholder for this control. */\n readonly placeholder: string;\n\n /** Gets the NgControl for this control. */\n readonly ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n readonly focused: boolean;\n\n /** Whether the control is empty. */\n readonly empty: boolean;\n\n /** Whether the `MatFormField` label should try to float. */\n readonly shouldLabelFloat: boolean;\n\n /** Whether the control is required. */\n readonly required: boolean;\n\n /** Whether the control is disabled. */\n readonly disabled: boolean;\n\n /** Whether the control is in an error state. */\n readonly errorState: boolean;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n readonly controlType?: string;\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n readonly autofilled?: boolean;\n\n /** Sets the list of element IDs that currently describe this control. */\n abstract setDescribedByIds(ids: string[]): void;\n\n /** Handles a click on the control's container. */\n abstract onContainerClick(event: MouseEvent): void;\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 AnimationTriggerMetadata,\n} from '@angular/animations';\n\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nexport const matFormFieldAnimations: {\n readonly transitionMessages: AnimationTriggerMetadata\n} = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: trigger('transitionMessages', [\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n transition('void => enter', [\n style({ opacity: 0, transform: 'translateY(-100%)' }),\n animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\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 {Directive, Input} from '@angular/core';\n\n\nlet nextUniqueId = 0;\n\n\n/** Single error message to be shown underneath the form field. */\n@Directive({\n selector: 'mat-error',\n host: {\n 'class': 'mat-error',\n 'role': 'alert',\n '[attr.id]': 'id',\n }\n})\nexport class MatError {\n @Input() id: string = `mat-error-${nextUniqueId++}`;\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 * When constructing a Date, the month is zero-based. This can be confusing, since people are\n * used to seeing them one-based. So we create these aliases to make writing the tests easier.\n * @docs-private\n * @breaking-change 8.0.0 Remove this with V8 since it was only targeted for testing.\n */\nexport const JAN = 0, FEB = 1, MAR = 2, APR = 3, MAY = 4, JUN = 5, JUL = 6, AUG = 7, SEP = 8,\n OCT = 9, NOV = 10, DEC = 11;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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/** InjectionToken that can be used to specify the global label options. */\nexport const MAT_LABEL_GLOBAL_OPTIONS =\n new InjectionToken<LabelOptions>('mat-label-global-options');\n\n/** Type for the available floatLabel values. */\nexport type FloatLabelType = 'always' | 'never' | 'auto';\n\n/** Configurable options for floating labels. */\nexport interface LabelOptions {\n /**\n * Whether the label should float `always`, `never`, or `auto` (only when necessary).\n * Default behavior is assumed to be `auto`.\n */\n float?: FloatLabelType;\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 {MatOption} from './option';\nimport {MatOptgroup} from './optgroup';\n\n\n@NgModule({\n imports: [MatRippleModule, CommonModule, MatPseudoCheckboxModule],\n exports: [MatOption, MatOptgroup],\n declarations: [MatOption, MatOptgroup]\n})\nexport class MatOptionModule {}\n\n\nexport * from './option';\nexport * from './optgroup';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {ENTER, SPACE, hasModifierKey} from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {MatOptgroup} from './optgroup';\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: MatOption,\n /** Whether the change in the option's value was a result of a user action. */\n public isUserInput = false) { }\n}\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}\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 * Single option inside of a `<mat-select>` element.\n */\n@Component({\n moduleId: module.id,\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',\n },\n styleUrls: ['option.css'],\n templateUrl: 'option.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatOption implements 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 @Optional() @Inject(MAT_OPTION_PARENT_COMPONENT) private _parent: MatOptionParentComponent,\n @Optional() readonly group: MatOptgroup) {}\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(): void {\n const element = this._getHostElement();\n\n if (typeof element.focus === 'function') {\n element.focus();\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\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 optionIndex Index of the option to be scrolled into the view.\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(optionIndex: number, optionHeight: number,\n currentScrollPosition: number, panelHeight: number): number {\n const optionOffset = optionIndex * optionHeight;\n\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 {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {CanDisable, CanDisableCtor, mixinDisabled} from '../common-behaviors/disabled';\n\n\n// Boilerplate for applying mixins to MatOptgroup.\n/** @docs-private */\nclass MatOptgroupBase { }\nconst _MatOptgroupMixinBase: CanDisableCtor & typeof MatOptgroupBase =\n mixinDisabled(MatOptgroupBase);\n\n// Counter for unique group ids.\nlet _uniqueOptgroupIdCounter = 0;\n\n/**\n * Component that is used to group instances of `mat-option`.\n */\n@Component({\n moduleId: module.id,\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 'role': 'group',\n '[class.mat-optgroup-disabled]': 'disabled',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-labelledby]': '_labelId',\n }\n})\nexport class MatOptgroup 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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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';\n\n\n@NgModule({\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 {\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 moduleId: module.id,\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 {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 {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 {RippleRef} from './ripple-ref';\nimport {RippleAnimationConfig, RippleConfig, 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 * Configuration for the animation duration of the ripples. There are two phases with different\n * durations for the ripples. The animation durations will be overwritten if the\n * `NoopAnimationsModule` is being used.\n */\n animation?: RippleAnimationConfig;\n\n /**\n * Whether ripples should start fading out immediately after the mouse our 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 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) animationMode?: string) {\n\n this._globalOptions = globalOptions || {};\n this._rippleRenderer = new RippleRenderer(this, ngZone, _elementRef, platform);\n\n if (animationMode === 'NoopAnimations') {\n this._globalOptions.animation = {enterDuration: 0, exitDuration: 0};\n }\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 /**\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: {...this._globalOptions.animation, ...this.animation},\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 within the element.\n * @param x Coordinate within the element, along the X axis at which to fade-in the ripple.\n * @param y Coordinate within the element, along the Y axis at which to fade-in the ripple.\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 */\nimport {ElementRef, NgZone} from '@angular/core';\nimport {Platform, normalizePassiveListenerOptions} from '@angular/cdk/platform';\nimport {isFakeMousedownFromScreenReader} from '@angular/cdk/a11y';\nimport {RippleRef, RippleState} from './ripple-ref';\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 * 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 * Default ripple animation configuration for ripples without an explicit\n * animation config specified.\n */\nexport const defaultRippleAnimationConfig = {\n enterDuration: 450,\n exitDuration: 400\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/**\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 {\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 /** Events to be registered on the trigger element. */\n private _triggerEvents = new Map<string, any>();\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 /**\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 elementRef: ElementRef<HTMLElement>,\n platform: Platform) {\n\n // Only do anything if we're on the browser.\n if (platform.isBrowser) {\n this._containerElement = elementRef.nativeElement;\n\n // Specify events which need to be registered on the trigger.\n this._triggerEvents\n .set('mousedown', this._onMousedown)\n .set('mouseup', this._onPointerUp)\n .set('mouseleave', this._onPointerUp)\n\n .set('touchstart', this._onTouchStart)\n .set('touchend', this._onPointerUp)\n .set('touchcancel', this._onPointerUp);\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 the color is not set, the default CSS color will be used.\n ripple.style.backgroundColor = config.color || null;\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 /** Sets up the trigger event listeners */\n setupTriggerEvents(element: HTMLElement) {\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._ngZone.runOutsideAngular(() => {\n this._triggerEvents.forEach((fn, type) => {\n element.addEventListener(type, fn, passiveEventOptions);\n });\n });\n\n this._triggerElement = element;\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) {\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 /** Removes previously registered event listeners from the trigger element. */\n _removeTriggerEvents() {\n if (this._triggerElement) {\n this._triggerEvents.forEach((fn, type) => {\n this._triggerElement!.removeEventListener(type, fn, passiveEventOptions);\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 {RippleConfig, RippleRenderer} from './ripple-renderer';\n\n/** Possible states for a ripple element. */\nexport enum RippleState {\n FADING_IN, VISIBLE, FADING_OUT, HIDDEN\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: RippleRenderer,\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 */\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<MatLine>, element: ElementRef<HTMLElement>) {\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, 'mat-2-line', false);\n setClass(element, 'mat-3-line', false);\n setClass(element, 'mat-multi-line', false);\n\n if (length === 2 || length === 3) {\n setClass(element, `mat-${length}-line`, true);\n } else if (length > 3) {\n setClass(element, `mat-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/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n * @deprecated Use `setLines` instead.\n * @breaking-change 8.0.0\n */\nexport class MatLineSetter {\n constructor(lines: QueryList<MatLine>, element: ElementRef<HTMLElement>) {\n setLines(lines, element);\n }\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\nimport {Injectable, InjectionToken, Inject, Optional} from '@angular/core';\nimport {HammerGestureConfig} from '@angular/platform-browser';\nimport {MatCommonModule} from '../common-behaviors/common-module';\nimport {\n HammerStatic,\n HammerInstance,\n Recognizer,\n RecognizerStatic,\n HammerOptions,\n} from './gesture-annotations';\n\n/**\n * Injection token that can be used to provide options to the Hammerjs instance.\n * More info at http://hammerjs.github.io/api/.\n */\nexport const MAT_HAMMER_OPTIONS = new InjectionToken<HammerOptions>('MAT_HAMMER_OPTIONS');\n\nconst ANGULAR_MATERIAL_SUPPORTED_HAMMER_GESTURES = [\n 'longpress',\n 'slide',\n 'slidestart',\n 'slideend',\n 'slideright',\n 'slideleft'\n];\n\n/**\n * Fake HammerInstance that is used when a Hammer instance is requested when HammerJS has not\n * been loaded on the page.\n */\nconst noopHammerInstance: HammerInstance = {\n on: () => {},\n off: () => {},\n};\n\n/** Adjusts configuration of our gesture library, Hammer. */\n@Injectable()\nexport class GestureConfig extends HammerGestureConfig {\n /** List of new event names to add to the gesture support list */\n events = ANGULAR_MATERIAL_SUPPORTED_HAMMER_GESTURES;\n\n constructor(\n @Optional() @Inject(MAT_HAMMER_OPTIONS) private _hammerOptions?: HammerOptions,\n @Optional() commonModule?: MatCommonModule) {\n super();\n if (commonModule) {\n commonModule._checkHammerIsAvailable();\n }\n }\n\n /**\n * Builds Hammer instance manually to add custom recognizers that match the Material Design spec.\n *\n * Our gesture names come from the Material Design gestures spec:\n * https://material.io/design/#gestures-touch-mechanics\n *\n * More information on default recognizers can be found in Hammer docs:\n * http://hammerjs.github.io/recognizer-pan/\n * http://hammerjs.github.io/recognizer-press/\n *\n * @param element Element to which to assign the new HammerJS gestures.\n * @returns Newly-created HammerJS instance.\n */\n buildHammer(element: HTMLElement): HammerInstance {\n const hammer: HammerStatic = typeof window !== 'undefined' ? (window as any).Hammer : null;\n\n if (!hammer) {\n // If HammerJS is not loaded here, return the noop HammerInstance. This is necessary to\n // ensure that omitting HammerJS completely will not cause any errors while *also* supporting\n // the lazy-loading of HammerJS via the HAMMER_LOADER token introduced in Angular 6.1.\n // Because we can't depend on HAMMER_LOADER's existance until 7.0, we have to always set\n // `this.events` to the set we support, instead of conditionally setting it to `[]` if\n // `HAMMER_LOADER` is present (and then throwing an Error here if `window.Hammer` is\n // undefined).\n // @breaking-change 8.0.0\n return noopHammerInstance;\n }\n\n const mc = new hammer(element, this._hammerOptions || undefined);\n\n // Default Hammer Recognizers.\n const pan = new hammer.Pan();\n const swipe = new hammer.Swipe();\n const press = new hammer.Press();\n\n // Notice that a HammerJS recognizer can only depend on one other recognizer once.\n // Otherwise the previous `recognizeWith` will be dropped.\n // TODO: Confirm threshold numbers with Material Design UX Team\n const slide = this._createRecognizer(pan, {event: 'slide', threshold: 0}, swipe);\n const longpress = this._createRecognizer(press, {event: 'longpress', time: 500});\n\n // Overwrite the default `pan` event to use the swipe event.\n pan.recognizeWith(swipe);\n\n // Since the slide event threshold is set to zero, the slide recognizer can fire and\n // accidentally reset the longpress recognizer. In order to make sure that the two\n // recognizers can run simultaneously but don't affect each other, we allow the slide\n // recognizer to recognize while a longpress is being processed.\n // See: https://github.com/hammerjs/hammer.js/blob/master/src/manager.js#L123-L124\n longpress.recognizeWith(slide);\n\n // Add customized gestures to Hammer manager\n mc.add([swipe, press, pan, slide, longpress]);\n\n return mc as HammerInstance;\n }\n\n /** Creates a new recognizer, without affecting the default recognizers of HammerJS */\n private _createRecognizer(base: Recognizer, options: any, ...inheritances: Recognizer[]) {\n let recognizer = new (base.constructor as RecognizerStatic)(options);\n\n inheritances.push(base);\n inheritances.forEach(item => recognizer.recognizeWith(item));\n\n return recognizer;\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} 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 {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 {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 {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 it's 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 // 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 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) {\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 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 const result = new Date(year, month, date);\n\n // We need to correct for the fact that JS native Date treats years in range [0, 99] as\n // abbreviations for 19xx.\n if (year >= 0 && year < 100) {\n result.setFullYear(this.getYear(result) - 1900);\n }\n return result;\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 const d = new Date(Date.UTC(\n date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(),\n 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 {InjectionToken} from '@angular/core';\n\n\nexport type MatDateFormats = {\n parse: {\n dateInput: any\n },\n display: {\n dateInput: 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 {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/**\n * No longer needed since MAT_DATE_LOCALE has been changed to a scoped injectable.\n * If you are importing and providing this in your code you can simply remove it.\n * @deprecated\n * @breaking-change 8.0.0\n */\nexport const MAT_DATE_LOCALE_PROVIDER = {provide: MAT_DATE_LOCALE, useExisting: LOCALE_ID};\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\n /** A stream that emits when the locale changes. */\n get localeChanges(): Observable<void> { return this._localeChanges; }\n protected _localeChanges = new Subject<void>();\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 * 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 it's `@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 {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/** @docs-private */\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) {\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\nimport {FormControl, FormGroupDirective, NgControl, NgForm} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ErrorStateMatcher} from '../error/error-options';\nimport {Constructor} from './constructor';\n\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n updateErrorState(): void;\n readonly stateChanges: Subject<void>;\n errorState: boolean;\n errorStateMatcher: ErrorStateMatcher;\n}\n\n/** @docs-private */\nexport type CanUpdateErrorStateCtor = Constructor<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 Constructor<HasErrorState>>(base: T)\n: CanUpdateErrorStateCtor & T {\n return class extends base {\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n\n /**\n * Stream that emits whenever the state of the input changes such that the wrapping\n * `MatFormField` needs to run change detection.\n */\n readonly stateChanges = new Subject<void>();\n\n errorStateMatcher: ErrorStateMatcher;\n\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 {Constructor} from './constructor';\nimport {CanDisable} from './disabled';\n\n\n/** @docs-private */\nexport interface HasTabIndex {\n /** Tabindex of the component. */\n tabIndex: number;\n}\n\n/** @docs-private */\nexport type HasTabIndexCtor = Constructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(base: T, defaultTabIndex = 0)\n : HasTabIndexCtor & T {\n return class extends base {\n private _tabIndex: number = 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 ? value : 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 {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisableRipple {\n /** Whether ripples are disabled. */\n disableRipple: boolean;\n}\n\n/** @docs-private */\nexport type CanDisableRippleCtor = Constructor<CanDisableRipple>;\n\n/** Mixin to augment a directive with a `disableRipple` property. */\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 {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\n/** @docs-private */\nexport type CanColorCtor = Constructor<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 Constructor<HasElementRef>>(\n base: T, defaultColor?: ThemePalette): CanColorCtor & T {\n return class extends base {\n private _color: ThemePalette;\n\n get color(): ThemePalette { return this._color; }\n set color(value: ThemePalette) {\n const colorPalette = value || 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 {Constructor} from './constructor';\n\n/** @docs-private */\nexport interface CanDisable {\n /** Whether the component is disabled. */\n disabled: boolean;\n}\n\n/** @docs-private */\nexport type CanDisableCtor = Constructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\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 {NgModule, InjectionToken, Optional, Inject, isDevMode, Version} from '@angular/core';\nimport {HammerLoader, HAMMER_LOADER} from '@angular/platform-browser';\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {VERSION as CDK_VERSION} from '@angular/cdk';\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('8.1.0');\n\n\n/** Injection token that configures whether the Material sanity checks are enabled. */\nexport const MATERIAL_SANITY_CHECKS = new InjectionToken<boolean>('mat-sanity-checks', {\n providedIn: 'root',\n factory: MATERIAL_SANITY_CHECKS_FACTORY,\n});\n\n/** @docs-private */\nexport function MATERIAL_SANITY_CHECKS_FACTORY(): boolean {\n return true;\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 /** Whether we've already checked for HammerJs availability. */\n private _hasCheckedHammer = false;\n\n /** Reference to the global `document` object. */\n private _document = typeof document === 'object' && document ? document : null;\n\n /** Reference to the global 'window' object. */\n private _window = typeof window === 'object' && window ? window : null;\n\n constructor(\n @Optional() @Inject(MATERIAL_SANITY_CHECKS) private _sanityChecksEnabled: boolean,\n @Optional() @Inject(HAMMER_LOADER) private _hammerLoader?: HammerLoader) {\n\n if (this._areChecksEnabled() && !this._hasDoneGlobalChecks) {\n this._checkDoctypeIsDefined();\n this._checkThemeIsPresent();\n this._checkCdkVersionMatch();\n this._hasDoneGlobalChecks = true;\n }\n }\n\n /** Whether any sanity checks are enabled */\n private _areChecksEnabled(): boolean {\n return this._sanityChecksEnabled && isDevMode() && !this._isTestEnv();\n }\n\n /** Whether the code is running in tests. */\n private _isTestEnv() {\n const window = this._window as any;\n return window && (window.__karma__ || window.jasmine);\n }\n\n private _checkDoctypeIsDefined(): void {\n if (this._document && !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._document || !this._document.body || 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 (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 /** Checks whether HammerJS is available. */\n _checkHammerIsAvailable(): void {\n if (this._hasCheckedHammer || !this._window) {\n return;\n }\n\n if (this._areChecksEnabled() && !(this._window as any)['Hammer'] && !this._hammerLoader) {\n console.warn(\n 'Could not find HammerJS. Certain Angular Material components may not work correctly.');\n }\n this._hasCheckedHammer = true;\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/** @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 {Version} from '@angular/core';\n\n/** Current version of Angular Material. */\nexport const VERSION = new Version('8.1.0');\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":["DataSource","merge","map","BehaviorSubject","tslib_1.__extends","take","CdkTreeModule","CommonModule","NgModule","CdkTreeNodeToggle","Input","Directive","ViewEncapsulation","Component","CdkTreeNodePadding","ContentChildren","Attribute","IterableDiffers","CdkTree","ElementRef","CDK_TREE_NODE_OUTLET_NODE","CdkTreeNode","CdkNestedTreeNode","CdkTreeNodeDef","Inject","Optional","ViewContainerRef","DOCUMENT","ChangeDetectionStrategy","isDevMode","A11yModule","ObserversModule","PortalModule","ANIMATION_MODULE_TYPE","FocusMonitor","Platform","NgZone","platform","ViewChild","ViewportRuler","ChangeDetectorRef","coerceBooleanProperty","Output","coerceNumberProperty","nextId","EventEmitter","Subscription","InjectionToken","Directionality","takeUntil","timer","SPACE","ENTER","END","HOME","hasModifierKey","FocusKeyManager","observableOf","fromEvent","passiveEventListenerOptions","Subject","normalizePassiveListenerOptions","PortalHostDirective","distinctUntilChanged","CdkPortalOutlet","forwardRef","ComponentFactoryResolver","startWith","animate","style","transition","state","trigger","TemplateRef","TemplatePortal","CdkPortal","combineLatest","_isNumberValue","CdkTableModule","CdkRow","CdkFooterRow","CdkHeaderRow","CDK_ROW_TEMPLATE","CdkRowDef","CdkFooterRowDef","CdkHeaderRowDef","CdkCell","CdkColumnDef","CdkFooterCell","CdkHeaderCell","CdkFooterCellDef","CdkHeaderCellDef","CdkCellDef","CdkTable","CDK_TABLE_TEMPLATE","CdkStepperModule","CdkStepperPrevious","CdkStepperNext","CdkStepper","STEPPER_GLOBAL_OPTIONS","stepper","SkipSelf","Injectable","CdkStepLabel","query","animateChild","keyframes","BreakpointObserver","Injector","LiveAnnouncer","Overlay","PortalInjector","OverlayConfig","Breakpoints","portal","ComponentPortal","tslib_1.__assign","OverlayModule","HAMMER_GESTURE_CONFIG","DOWN_ARROW","RIGHT_ARROW","UP_ARROW","LEFT_ARROW","PAGE_DOWN","PAGE_UP","NG_VALUE_ACCESSOR","nextUniqueId","PlatformModule","ScrollingModule","ContentChild","ScrollDispatcher","debounceTime","HostListener","HostBinding","UniqueSelectionDispatcher","filter","inject","HAMMER_LOADER","AriaDescriber","overlay","ESCAPE","CdkConnectedOverlay","NgControl","Self","FormGroupDirective","NgForm","SELECT_MULTIPLE_PANEL_PADDING_X","ActiveDescendantKeyManager","A","SelectionModel","switchMap","defer","delay","asapScheduler","isFakeMousedownFromScreenReader","QueryList","ApplicationRef","DomPortalOutlet","group","ɵ0","DomSanitizer","HttpClient","share","finalize","SecurityContext","forkJoin","catchError","tap","observableThrow","CdkAccordionModule","CdkAccordion","EMPTY","accordion","uniqueId","Validators","NG_VALIDATORS","TextFieldModule","AutofillMonitor","getSupportedInputTypes","CdkTextareaAutosize","_applyConfigDefaults","OverlayContainer","Location","TAB","BACKSPACE","DELETE","CheckboxRequiredValidator","_uniqueIdCounter","FocusTrapFactory","Renderer2","Host","HammerGestureConfig","LOCALE_ID","Observable","BidiModule","CDK_VERSION","VERSION","Version"],"mappings":"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"}