blob: 9bdb7c689b2cb1fa60f012e9202e97b2349defa5 [file] [log] [blame]
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { FocusOrigin } from '@angular/cdk/a11y';
import { Direction } from '@angular/cdk/bidi';
import { AfterContentInit, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, TemplateRef, QueryList, OnInit } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { MatMenuContent } from './menu-content';
import { MenuPositionX, MenuPositionY } from './menu-positions';
import { MatMenuItem } from './menu-item';
import { MatMenuPanel } from './menu-panel';
import { AnimationEvent } from '@angular/animations';
/** Default `mat-menu` options that can be overridden. */
export interface MatMenuDefaultOptions {
/** The x-axis position of the menu. */
xPosition: MenuPositionX;
/** The y-axis position of the menu. */
yPosition: MenuPositionY;
/** Whether the menu should overlap the menu trigger. */
overlapTrigger: boolean;
/** Class to be applied to the menu's backdrop. */
backdropClass: string;
/** Whether the menu has a backdrop. */
hasBackdrop?: boolean;
}
/** Injection token to be used to override the default options for `mat-menu`. */
export declare const MAT_MENU_DEFAULT_OPTIONS: InjectionToken<MatMenuDefaultOptions>;
/** @docs-private */
export declare function MAT_MENU_DEFAULT_OPTIONS_FACTORY(): MatMenuDefaultOptions;
/** Base class with all of the `MatMenu` functionality. */
export declare class _MatMenuBase implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnInit, OnDestroy {
private _elementRef;
private _ngZone;
private _defaultOptions;
private _keyManager;
private _xPosition;
private _yPosition;
private _previousElevation;
/** All items inside the menu. Includes items nested inside another menu. */
_allItems: QueryList<MatMenuItem>;
/** Only the direct descendant menu items. */
private _directDescendantItems;
/** Subscription to tab events on the menu panel */
private _tabSubscription;
/** Config object to be passed into the menu's ngClass */
_classList: {
[key: string]: boolean;
};
/** Current state of the panel animation. */
_panelAnimationState: 'void' | 'enter';
/** Emits whenever an animation on the menu completes. */
_animationDone: Subject<AnimationEvent>;
/** Whether the menu is animating. */
_isAnimating: boolean;
/** Parent menu of the current menu panel. */
parentMenu: MatMenuPanel | undefined;
/** Layout direction of the menu. */
direction: Direction;
/** Class to be added to the backdrop element. */
backdropClass: string;
/** Position of the menu in the X axis. */
xPosition: MenuPositionX;
/** Position of the menu in the Y axis. */
yPosition: MenuPositionY;
/** @docs-private */
templateRef: TemplateRef<any>;
/**
* List of the items inside of a menu.
* @deprecated
* @breaking-change 8.0.0
*/
items: QueryList<MatMenuItem>;
/**
* Menu content that will be rendered lazily.
* @docs-private
*/
lazyContent: MatMenuContent;
/** Whether the menu should overlap its trigger. */
overlapTrigger: boolean;
private _overlapTrigger;
/** Whether the menu has a backdrop. */
hasBackdrop: boolean | undefined;
private _hasBackdrop;
/**
* This method takes classes set on the host mat-menu element and applies them on the
* menu template that displays in the overlay container. Otherwise, it's difficult
* to style the containing menu from outside the component.
* @param classes list of class names
*/
panelClass: string;
private _previousPanelClass;
/**
* This method takes classes set on the host mat-menu element and applies them on the
* menu template that displays in the overlay container. Otherwise, it's difficult
* to style the containing menu from outside the component.
* @deprecated Use `panelClass` instead.
* @breaking-change 8.0.0
*/
classList: string;
/** Event emitted when the menu is closed. */
readonly closed: EventEmitter<void | 'click' | 'keydown' | 'tab'>;
/**
* Event emitted when the menu is closed.
* @deprecated Switch to `closed` instead
* @breaking-change 8.0.0
*/
close: EventEmitter<void | "click" | "keydown" | "tab">;
constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone, _defaultOptions: MatMenuDefaultOptions);
ngOnInit(): void;
ngAfterContentInit(): void;
ngOnDestroy(): void;
/** Stream that emits whenever the hovered menu item changes. */
_hovered(): Observable<MatMenuItem>;
addItem(_item: MatMenuItem): void;
/**
* Removes an item from the menu.
* @docs-private
* @deprecated No longer being used. To be removed.
* @breaking-change 9.0.0
*/
removeItem(_item: MatMenuItem): void;
/** Handle a keyboard event from the menu, delegating to the appropriate action. */
_handleKeydown(event: KeyboardEvent): void;
/**
* Focus the first item in the menu.
* @param origin Action from which the focus originated. Used to set the correct styling.
*/
focusFirstItem(origin?: FocusOrigin): void;
/**
* Resets the active item in the menu. This is used when the menu is opened, allowing
* the user to start from the first option when pressing the down arrow.
*/
resetActiveItem(): void;
/**
* Sets the menu panel elevation.
* @param depth Number of parent menus that come before the menu.
*/
setElevation(depth: number): void;
/**
* Adds classes to the menu panel based on its position. Can be used by
* consumers to add specific styling based on the position.
* @param posX Position of the menu along the x axis.
* @param posY Position of the menu along the y axis.
* @docs-private
*/
setPositionClasses(posX?: MenuPositionX, posY?: MenuPositionY): void;
/** Starts the enter animation. */
_startAnimation(): void;
/** Resets the panel animation to its initial state. */
_resetAnimation(): void;
/** Callback that is invoked when the panel animation completes. */
_onAnimationDone(event: AnimationEvent): void;
_onAnimationStart(event: AnimationEvent): void;
/**
* Sets up a stream that will keep track of any newly-added menu items and will update the list
* of direct descendants. We collect the descendants this way, because `_allItems` can include
* items that are part of child menus, and using a custom way of registering items is unreliable
* when it comes to maintaining the item order.
*/
private _updateDirectDescendants;
}
/** @docs-private We show the "_MatMenu" class as "MatMenu" in the docs. */
export declare class MatMenu extends _MatMenuBase {
}
/** @docs-public MatMenu */
export declare class _MatMenu extends MatMenu {
constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone, defaultOptions: MatMenuDefaultOptions);
}