Skip to content

Commit 3087727

Browse files
committed
feat(material/menu): add option to enable inlined overlay
1 parent 98fbef5 commit 3087727

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

goldens/material/menu/index.api.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ export class MatMenuTrigger extends MatMenuTriggerBase implements AfterContentIn
274274
readonly menuClosed: EventEmitter<void>;
275275
menuData: any;
276276
readonly menuOpened: EventEmitter<void>;
277+
get menuOverlayInlined(): boolean;
278+
set menuOverlayInlined(menuOverlayInlined: boolean);
279+
// (undocumented)
280+
static ngAcceptInputType_menuOverlayInlined: unknown;
277281
// (undocumented)
278282
ngAfterContentInit(): void;
279283
// (undocumented)
@@ -288,7 +292,7 @@ export class MatMenuTrigger extends MatMenuTriggerBase implements AfterContentIn
288292
triggersSubmenu(): boolean;
289293
updatePosition(): void;
290294
// (undocumented)
291-
static ɵdir: i0.ɵɵDirectiveDeclaration<MatMenuTrigger, "[mat-menu-trigger-for], [matMenuTriggerFor]", ["matMenuTrigger"], { "_deprecatedMatMenuTriggerFor": { "alias": "mat-menu-trigger-for"; "required": false; }; "menu": { "alias": "matMenuTriggerFor"; "required": false; }; "menuData": { "alias": "matMenuTriggerData"; "required": false; }; "restoreFocus": { "alias": "matMenuTriggerRestoreFocus"; "required": false; }; }, { "menuOpened": "menuOpened"; "onMenuOpen": "onMenuOpen"; "menuClosed": "menuClosed"; "onMenuClose": "onMenuClose"; }, never, never, true, never>;
295+
static ɵdir: i0.ɵɵDirectiveDeclaration<MatMenuTrigger, "[mat-menu-trigger-for], [matMenuTriggerFor]", ["matMenuTrigger"], { "_deprecatedMatMenuTriggerFor": { "alias": "mat-menu-trigger-for"; "required": false; }; "menu": { "alias": "matMenuTriggerFor"; "required": false; }; "menuData": { "alias": "matMenuTriggerData"; "required": false; }; "menuOverlayInlined": { "alias": "matMenuTriggerOverlayInlined"; "required": false; }; "restoreFocus": { "alias": "matMenuTriggerRestoreFocus"; "required": false; }; }, { "menuOpened": "menuOpened"; "onMenuOpen": "onMenuOpen"; "menuClosed": "menuClosed"; "onMenuClose": "onMenuClose"; }, never, never, true, never>;
292296
// (undocumented)
293297
static ɵfac: i0.ɵɵFactoryDeclaration<MatMenuTrigger, never>;
294298
}

src/dev-app/menu/menu-demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<p>You clicked on: {{ selected }}</p>
44

55
<mat-toolbar>
6-
<button matIconButton [matMenuTriggerFor]="menu" aria-label="Open basic menu">
6+
<button matIconButton [matMenuTriggerFor]="menu" matMenuTriggerOverlayInlined aria-label="Open basic menu">
77
<mat-icon>more_vert</mat-icon>
88
</button>
99
</mat-toolbar>

src/material/menu/menu-trigger-base.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ export abstract class MatMenuTriggerBase implements OnDestroy {
104104
/** Data that will be passed to the menu panel. */
105105
abstract menuData: any;
106106

107+
/**
108+
* Whether to inline the overlay, instead of using the global overlay container.
109+
*/
110+
protected _menuOverlayInlined: boolean;
111+
107112
/** Whether focus should be restored when the menu is closed. */
108113
abstract restoreFocus: boolean;
109114

@@ -367,6 +372,7 @@ export abstract class MatMenuTriggerBase implements OnDestroy {
367372
scrollStrategy: this._scrollStrategy(),
368373
direction: this._dir || 'ltr',
369374
disableAnimations: this._animationsDisabled,
375+
insertOverlayAfter: this._menuOverlayInlined ? this._element : undefined,
370376
});
371377
}
372378

src/material/menu/menu-trigger.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
OnDestroy,
1818
Output,
1919
Renderer2,
20+
booleanAttribute,
2021
} from '@angular/core';
2122
import {OverlayRef} from '@angular/cdk/overlay';
2223
import {Subscription} from 'rxjs';
@@ -67,6 +68,17 @@ export class MatMenuTrigger extends MatMenuTriggerBase implements AfterContentIn
6768
@Input('matMenuTriggerData')
6869
override menuData: any;
6970

71+
/**
72+
* Whether to inline the overlay, instead of using the global overlay container.
73+
*/
74+
@Input({alias: 'matMenuTriggerOverlayInlined', transform: booleanAttribute})
75+
get menuOverlayInlined(): boolean {
76+
return this._menuOverlayInlined;
77+
}
78+
set menuOverlayInlined(menuOverlayInlined: boolean) {
79+
this._menuOverlayInlined = menuOverlayInlined;
80+
}
81+
7082
/**
7183
* Whether focus should be restored when the menu is closed.
7284
* Note that disabling this option can have accessibility implications

0 commit comments

Comments
 (0)