Skip to content

Commit 06a9843

Browse files
authored
feat(material-experimental/menubar): update the dev-app to include a fake mat-menu (#20365)
Fake mat-menu and mat-menu-item in the dev-app in order to aid in development of mat-menubar. Once mat-menu extends CdkMenu, the fakses should be removed.
1 parent 4aa8718 commit 06a9843

File tree

5 files changed

+109
-8
lines changed

5 files changed

+109
-8
lines changed

src/dev-app/menubar/BUILD.bazel

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load("//tools:defaults.bzl", "ng_module")
1+
load("//tools:defaults.bzl", "ng_module", "sass_binary")
22

33
package(default_visibility = ["//visibility:public"])
44

@@ -7,9 +7,16 @@ ng_module(
77
srcs = glob(["**/*.ts"]),
88
assets = [
99
"mat-menubar-demo.html",
10+
":mat_menubar_demo_scss",
1011
],
1112
deps = [
13+
"//src/cdk-experimental/menu",
1214
"//src/material-experimental/menubar",
1315
"@npm//@angular/router",
1416
],
1517
)
18+
19+
sass_binary(
20+
name = "mat_menubar_demo_scss",
21+
src = "mat-menubar-demo.scss",
22+
)

src/dev-app/menubar/mat-menubar-demo-module.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
import {NgModule} from '@angular/core';
1010
import {RouterModule} from '@angular/router';
1111
import {MatMenuBarModule} from '@angular/material-experimental/menubar';
12-
import {MatMenuBarDemo} from './mat-menubar-demo';
12+
import {CdkMenuModule} from '@angular/cdk-experimental/menu';
13+
import {MatMenuBarDemo, DemoMenu, DemoMenuItem} from './mat-menubar-demo';
1314

1415
@NgModule({
15-
imports: [MatMenuBarModule, RouterModule.forChild([{path: '', component: MatMenuBarDemo}])],
16-
declarations: [MatMenuBarDemo],
16+
imports: [
17+
CdkMenuModule,
18+
MatMenuBarModule,
19+
RouterModule.forChild([{path: '', component: MatMenuBarDemo}]),
20+
],
21+
declarations: [MatMenuBarDemo, DemoMenu, DemoMenuItem],
1722
})
1823
export class MatMenuBarDemoModule {}
Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
<mat-menubar>
2-
<mat-menubar-item>File</mat-menubar-item>
3-
<mat-menubar-item>Edit</mat-menubar-item>
4-
<mat-menubar-item>View</mat-menubar-item>
2+
<mat-menubar-item [cdkMenuTriggerFor]="file">File</mat-menubar-item>
3+
<mat-menubar-item [cdkMenuTriggerFor]="edit">Edit</mat-menubar-item>
4+
<mat-menubar-item [cdkMenuTriggerFor]="view">View</mat-menubar-item>
55
</mat-menubar>
6+
7+
<ng-template cdkMenuPanel #file="cdkMenuPanel">
8+
<demo-menu [cdkMenuPanel]="file">
9+
<demo-menu-item>Share</demo-menu-item>
10+
<demo-menu-item>Open</demo-menu-item>
11+
<demo-menu-item>Make a Copy</demo-menu-item>
12+
</demo-menu>
13+
</ng-template>
14+
15+
<ng-template cdkMenuPanel #edit="cdkMenuPanel">
16+
<demo-menu [cdkMenuPanel]="edit">
17+
<demo-menu-item>Undo</demo-menu-item>
18+
<demo-menu-item>Redo</demo-menu-item>
19+
</demo-menu>
20+
</ng-template>
21+
22+
<ng-template cdkMenuPanel #view="cdkMenuPanel">
23+
<demo-menu [cdkMenuPanel]="view">
24+
<demo-menu-item>Show Ruler</demo-menu-item>
25+
<demo-menu-item>Show Document Outline</demo-menu-item>
26+
</demo-menu>
27+
</ng-template>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
.mat-menu {
2+
display: flex;
3+
flex-direction: column;
4+
5+
max-height: 808px;
6+
min-height: 64px;
7+
max-width: 280px;
8+
min-width: 112px;
9+
10+
padding: 8px 0;
11+
12+
border-radius: 4px;
13+
box-shadow: #0003 0 2px 4px -1px, #00000024 0 4px 5px 0, #0000001f 0 1px 10px 0;
14+
15+
cursor: pointer;
16+
17+
&[aria-orientation='horizontal'] {
18+
flex-direction: row;
19+
}
20+
}
21+
22+
.mat-menu-item {
23+
display: block;
24+
padding: 16px;
25+
-webkit-user-select: none;
26+
-moz-user-select: none;
27+
-ms-user-select: none;
28+
}

src/dev-app/menubar/mat-menubar-demo.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,48 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Component} from '@angular/core';
9+
import {Component, ViewEncapsulation} from '@angular/core';
10+
import {CdkMenu, CdkMenuItem, CdkMenuGroup, CDK_MENU} from '@angular/cdk-experimental/menu';
1011

1112
@Component({
1213
templateUrl: 'mat-menubar-demo.html',
1314
})
1415
export class MatMenuBarDemo {}
16+
17+
// TODO: Remove the fake when mat-menu is re-built with CdkMenu directives
18+
@Component({
19+
selector: 'demo-menu',
20+
exportAs: 'demoMenu',
21+
template: '<ng-content></ng-content>',
22+
host: {
23+
'[tabindex]': '_isInline() ? 0 : null',
24+
'role': 'menu',
25+
'class': 'cdk-menu mat-menu mat-menu-panel',
26+
'[class.cdk-menu-inline]': '_isInline()',
27+
'[attr.aria-orientation]': 'orientation',
28+
},
29+
providers: [
30+
{provide: CdkMenuGroup, useExisting: DemoMenu},
31+
{provide: CDK_MENU, useExisting: DemoMenu},
32+
],
33+
styleUrls: ['mat-menubar-demo.css'],
34+
encapsulation: ViewEncapsulation.None,
35+
})
36+
export class DemoMenu extends CdkMenu {}
37+
38+
// TODO: Remove the fake when mat-menu-item is re-built with CdkMenu directives
39+
@Component({
40+
selector: 'demo-menu-item',
41+
exportAs: 'demoMenuItem',
42+
host: {
43+
'[tabindex]': '_tabindex',
44+
'type': 'button',
45+
'role': 'menuitem',
46+
'class': 'cdk-menu-item mat-menu-item',
47+
'[attr.aria-disabled]': 'disabled || null',
48+
},
49+
template: '<ng-content></ng-content>',
50+
styleUrls: ['mat-menubar-demo.css'],
51+
encapsulation: ViewEncapsulation.None,
52+
})
53+
export class DemoMenuItem extends CdkMenuItem {}

0 commit comments

Comments
 (0)