blob: 1f1b49199df7816d93c4ff0d168c39aa8a726e76 [file] [log] [blame]
{"version":3,"file":"material-menu.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/material/menu/menu-errors.ts","../../src/material/menu/menu.ts","../../src/material/menu/menu-trigger.ts","../../src/material/menu/menu-animations.ts","../../src/material/menu/menu-content.ts","../../src/material/menu/menu-panel.ts","../../src/material/menu/menu-item.ts","../../src/material/menu/menu-module.ts"],"sourcesContent":["/*! *****************************************************************************\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","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source 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 {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 {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{\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 {\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 {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\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 {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"],"names":["__extends","d","b","__","this","constructor","extendStatics","prototype","Object","create","throwMatMenuMissingError","Error","throwMatMenuInvalidPositionX","throwMatMenuInvalidPositionY","MAT_MENU_DEFAULT_OPTIONS_FACTORY","overlapTrigger","xPosition","yPosition","backdropClass","MAT_MENU_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","setPrototypeOf","__proto__","Array","p","hasOwnProperty","matMenuAnimations","transformMenu","trigger","state","style","opacity","transform","transition","group","query","animate","fadeInItems","MatMenuContent","_template","_componentFactoryResolver","_appRef","_injector","_viewContainerRef","_document","_attached","Subject","attach","context","_portal","TemplatePortal","detach","_outlet","DomPortalOutlet","createElement","element","elementRef","nativeElement","insertBefore","outletElement","next","isAttached","ngOnDestroy","dispose","type","Directive","args","selector","TemplateRef","ComponentFactoryResolver","ApplicationRef","Injector","ViewContainerRef","undefined","decorators","Inject","DOCUMENT","MAT_MENU_PANEL","InjectionToken","MatMenuItemBase","_MatMenuItemMixinBase","mixinDisableRipple","mixinDisabled","MatMenuItem","_super","_elementRef","document","_focusMonitor","_parentMenu","_this","call","role","_hovered","_highlighted","_triggersSubmenu","monitor","addItem","tslib_1.__extends","focus","origin","focusVia","_getHostElement","stopMonitoring","removeItem","complete","_getTabIndex","disabled","_checkDisabled","event","preventDefault","stopPropagation","_handleMouseEnter","getLabel","textNodeType","TEXT_NODE","output","childNodes","length_1","length","i","nodeType","textContent","trim","Component","exportAs","inputs","host","[attr.role]","class","[class.mat-menu-item-highlighted]","[class.mat-menu-item-submenu-trigger]","[attr.tabindex]","[attr.aria-disabled]","[attr.disabled]","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","template","FocusMonitor","Optional","propDecorators","HostListener","MAT_MENU_DEFAULT_OPTIONS","providedIn","factory","_MatMenuBase","_ngZone","_defaultOptions","_xPosition","_yPosition","_directDescendantItems","QueryList","_tabSubscription","Subscription","EMPTY","_classList","_panelAnimationState","_animationDone","_overlapTrigger","_hasBackdrop","hasBackdrop","closed","EventEmitter","close","defineProperty","value","setPositionClasses","coerceBooleanProperty","classes","previousPanelClass","_previousPanelClass","split","forEach","className","panelClass","ngOnInit","ngAfterContentInit","_updateDirectDescendants","_keyManager","FocusKeyManager","withWrap","withTypeAhead","tabOut","subscribe","emit","destroy","unsubscribe","changes","pipe","startWith","switchMap","items","merge","apply","map","item","_item","_handleKeydown","keyCode","manager","ESCAPE","hasModifierKey","LEFT_ARROW","parentMenu","direction","RIGHT_ARROW","HOME","END","setFirstItemActive","setLastItemActive","UP_ARROW","DOWN_ARROW","setFocusOrigin","onKeydown","focusFirstItem","lazyContent","onStable","asObservable","take","resetActiveItem","setActiveItem","setElevation","depth","newElevation","customElevation","keys","find","c","startsWith","_previousElevation","posX","posY","_startAnimation","_resetAnimation","_onAnimationDone","_isAnimating","_onAnimationStart","toState","activeItemIndex","scrollTop","_allItems","reset","filter","notifyOnChanges","ElementRef","NgZone","ContentChildren","descendants","Input","templateRef","ViewChild","static","ContentChild","classList","Output","MatMenu","_MatMenu","ngZone","defaultOptions","styles","animations","providers","provide","useExisting","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","deps","Overlay","useFactory","passiveEventListenerOptions","normalizePassiveListenerOptions","passive","MatMenuTrigger","_overlay","_element","scrollStrategy","_menuItemInstance","_dir","_overlayRef","_menuOpen","_closingActionsSubscription","_hoverSubscription","_menuCloseSubscription","_handleTouchStart","_openedBy","restoreFocus","menuOpened","onMenuOpen","menuClosed","onMenuClose","addEventListener","triggersSubmenu","_scrollStrategy","menu","v","_menu","reason","_destroyMenu","_checkMenu","_handleHover","removeEventListener","toggleMenu","closeMenu","openMenu","overlayRef","_createOverlay","overlayConfig","getConfig","_setPosition","_getPortal","menuData","_menuClosingActions","_initMenu","menuOpen","takeUntil","_resetMenu","dir","_setMenuElevation","_setIsMenuOpen","isOpen","config","_getOverlayConfig","_subscribeToPositions","keydownEvents","OverlayConfig","positionStrategy","position","flexibleConnectedTo","withLockedPosition","withTransformOriginOn","positionChanges","change","connectionPair","overlayX","overlayY","_a","originX","originFallbackX","_b","overlayFallbackY","_c","originY","originFallbackY","_d","overlayFallbackX","offsetY","withPositions","backdrop","backdropClick","detachments","parentClose","observableOf","hover","active","_handleMousedown","isFakeMousedownFromScreenReader","button","_handleClick","delay","asapScheduler","aria-haspopup","[attr.aria-expanded]","(mousedown)","(keydown)","(click)","Self","Directionality","_deprecatedMatMenuTriggerFor","_MatMenuDirectivesModule","NgModule","exports","MatCommonModule","declarations","MatMenuModule","imports","CommonModule","MatRippleModule","OverlayModule"],"mappings":"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"}