Skip to content

Commit ea05246

Browse files
committed
docs(cdk-experimental/menu): add examples to menu documentation
1 parent 98d4799 commit ea05246

22 files changed

+549
-5
lines changed

src/cdk-experimental/menu/menu.md

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ menu directives to build your custom menu. A typical menu consists of the follow
2929
- `cdkMenu` - the actual menu you want to open
3030
- `cdkMenuItem` - added to each button
3131

32-
<!-- TODO basic standalone menu example (like mat-menu has) -->
32+
<!-- example({
33+
"example": "cdk-menu-standalone-menu",
34+
"file": "cdk-menu-standalone-menu-example.html"
35+
}) -->
3336

3437
Most menu interactions consist of two parts: a trigger and a menu panel.
3538

@@ -70,7 +73,10 @@ layed out horizontally or vertically (defaulting to horizontal). If the layout c
7073
the `orientation` attribute to match in order for the keyboard navigation to work properly and for
7174
menus to open up in the correct location.
7275

73-
<!-- TODO basic menubar example (google docs?) -->
76+
<!-- example({
77+
"example": "cdk-menu-menubar",
78+
"file": "cdk-menu-menubar-example.html"
79+
}) -->
7480

7581
### Context Menus
7682

@@ -79,7 +85,10 @@ container element with the `cdkContextMenuTriggerFor`, which behaves like `cdkMe
7985
that it responds to the browser's native `contextmenu` event. Custom context menus appear next to
8086
the cursor, similarly to native context menus.
8187

82-
<!-- TODO basic context menu example -->
88+
<!-- example({
89+
"example": "cdk-menu-context",
90+
"file": "cdk-menu-context-example.html"
91+
}) -->
8392

8493
You can nest context menu container elements. Upon right-click, the menu associated with the closest
8594
container element will open.
@@ -101,7 +110,10 @@ trigger. You can use an inline menu when you want a persistent menu interaction
101110
items within an inline menus are logically grouped together and you can navigate through them using
102111
your keyboard.
103112

104-
<!-- TODO inline menu example (gmail buttons?) -->
113+
<!-- example({
114+
"example": "cdk-menu-inline",
115+
"file": "cdk-menu-inline-example.html"
116+
}) -->
105117

106118
### Menu Items
107119

@@ -177,7 +189,10 @@ Note however that when the menu is closed and reopened any state is lost. You mu
177189
groups `change` output, or to `cdkMenuItemToggled` on each radio item and track changes your self.
178190
Finally, you can provide state for each item using the `checked` attribute.
179191

180-
<!-- TODO standalone menu example with checkboxes and grouped radios -->
192+
<!-- example({
193+
"example": "cdk-menu-standalone-stateful-menu",
194+
"file": "cdk-menu-standalone-stateful-menu-example.html"
195+
}) -->
181196

182197
### Smart Menu Aim
183198

src/components-examples/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ ALL_EXAMPLES = [
5959
"//src/components-examples/cdk/clipboard",
6060
"//src/components-examples/cdk/a11y",
6161
"//src/components-examples/cdk/overlay",
62+
"//src/components-examples/cdk-experimental/menu",
6263
"//src/components-examples/cdk-experimental/popover-edit",
6364
"//src/components-examples/cdk-experimental/selection",
6465
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
load("//tools:defaults.bzl", "ng_module")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
ng_module(
6+
name = "menu",
7+
srcs = glob(["**/*.ts"]),
8+
assets = glob([
9+
"**/*.html",
10+
"**/*.css",
11+
]),
12+
module_name = "@angular/components-examples/cdk-experimental/menu",
13+
deps = [
14+
"//src/cdk-experimental/menu",
15+
"@npm//@angular/forms",
16+
],
17+
)
18+
19+
filegroup(
20+
name = "source-files",
21+
srcs = glob([
22+
"**/*.html",
23+
"**/*.css",
24+
"**/*.ts",
25+
]),
26+
)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
.example-menu {
2+
display: inline-flex;
3+
flex-direction: column;
4+
min-width: 180px;
5+
max-width: 280px;
6+
background-color: rgb(255, 255, 255);
7+
padding: 6px 0;
8+
}
9+
10+
.example-menu-item {
11+
background-color: transparent;
12+
cursor: pointer;
13+
outline: none;
14+
border: none;
15+
16+
user-select: none;
17+
min-width: 64px;
18+
line-height: 36px;
19+
padding: 0 16px;
20+
21+
display: flex;
22+
align-items: center;
23+
flex-direction: row;
24+
flex: 1;
25+
}
26+
27+
.example-menu-item:hover {
28+
background-color: rgb(208, 208, 208);
29+
}
30+
31+
.example-menu-item:active {
32+
background-color: rgb(170, 170, 170);
33+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<div [cdkContextMenuTriggerFor]="context_menu">
2+
Did you ever hear the tragedy of Darth Plagueis The Wise? I thought not. It's not a story the Jedi
3+
would tell you. It's a Sith legend. Darth Plagueis was a Dark Lord of the Sith, so powerful and so
4+
wise he could use the Force to influence the midichlorians to create life… He had such a knowledge
5+
of the dark side that he could even keep the ones he cared about from dying. The dark side of the
6+
Force is a pathway to many abilities some consider to be unnatural. He became so powerful… the
7+
only thing he was afraid of was losing his power, which eventually, of course, he did.
8+
Unfortunately, he taught his apprentice everything he knew, then his apprentice killed him in his
9+
sleep. Ironic. He could save others from death, but not himself.
10+
</div>
11+
12+
<ng-template #context_menu="cdkMenuPanel" cdkMenuPanel>
13+
<div class="example-menu" cdkMenu [cdkMenuPanel]="context_menu">
14+
<button class="example-menu-item" cdkMenuItem>Cut</button>
15+
<button class="example-menu-item" cdkMenuItem>Copy</button>
16+
<button class="example-menu-item" cdkMenuItem>Link</button>
17+
</div>
18+
</ng-template>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {Component} from '@angular/core';
2+
3+
/** @title Context menu. */
4+
@Component({
5+
selector: 'cdk-menu-context-example',
6+
exportAs: 'cdkMenuContextExample',
7+
styleUrls: ['cdk-menu-context-example.css'],
8+
templateUrl: 'cdk-menu-context-example.html',
9+
})
10+
export class CdkMenuContextExample {}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
.example-menu {
2+
display: inline-flex;
3+
flex-direction: column;
4+
min-width: 180px;
5+
max-width: 280px;
6+
background-color: rgb(255, 255, 255);
7+
padding: 6px 0;
8+
}
9+
10+
.example-menu-item {
11+
background-color: transparent;
12+
cursor: pointer;
13+
outline: none;
14+
border: none;
15+
16+
user-select: none;
17+
min-width: 64px;
18+
line-height: 36px;
19+
padding: 0 16px;
20+
21+
display: flex;
22+
align-items: center;
23+
flex-direction: row;
24+
flex: 1;
25+
}
26+
27+
.example-menu-item:hover {
28+
background-color: rgb(208, 208, 208);
29+
}
30+
31+
.example-menu-item:active {
32+
background-color: rgb(170, 170, 170);
33+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div class="example-menu" cdkMenu>
2+
<button class="example-menu-item" cdkMenuItem>Inbox</button>
3+
<button class="example-menu-item" cdkMenuItem>Snoozed</button>
4+
<button class="example-menu-item" cdkMenuItem>Important</button>
5+
<button class="example-menu-item" cdkMenuItem>Sent</button>
6+
<button class="example-menu-item" cdkMenuItem>Drafts</button>
7+
<button class="example-menu-item" cdkMenuItem>All Mail</button>
8+
</div>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {Component} from '@angular/core';
2+
3+
/** @title Gmail inline menu. */
4+
@Component({
5+
selector: 'cdk-menu-inline-example',
6+
exportAs: 'cdkMenuInlineExample',
7+
styleUrls: ['cdk-menu-inline-example.css'],
8+
templateUrl: 'cdk-menu-inline-example.html',
9+
})
10+
export class CdkMenuInlineExample {}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
.example-menu-bar-item {
2+
cursor: pointer;
3+
outline: none;
4+
border: none;
5+
6+
user-select: none;
7+
min-width: 34px;
8+
line-height: 26px;
9+
padding: 0 16px;
10+
}
11+
12+
.example-menu-bar-item:hover {
13+
background-color: rgb(208, 208, 208);
14+
}
15+
16+
.example-menu {
17+
display: inline-flex;
18+
flex-direction: column;
19+
min-width: 180px;
20+
max-width: 280px;
21+
background-color: rgb(255, 255, 255);
22+
padding: 6px 0;
23+
}
24+
25+
.example-menu hr {
26+
width: 100%;
27+
color: rgba(0, 0, 0, 0.12);
28+
}
29+
30+
.example-menu .example-menu-group {
31+
display: inline-flex;
32+
flex-direction: column;
33+
}
34+
35+
.example-menu .example-menu-item {
36+
background-color: transparent;
37+
cursor: pointer;
38+
outline: none;
39+
border: none;
40+
41+
user-select: none;
42+
min-width: 64px;
43+
line-height: 36px;
44+
padding: 0 16px;
45+
46+
display: flex;
47+
align-items: center;
48+
flex-direction: row;
49+
flex: 1;
50+
}
51+
52+
.example-menu-item > span {
53+
display: flex;
54+
flex-direction: row;
55+
flex: 1;
56+
justify-content: flex-end;
57+
}
58+
59+
.example-menu .example-menu-item:hover {
60+
background-color: rgb(208, 208, 208);
61+
}
62+
63+
.example-menu .example-menu-item[role='menuitemradio'][aria-checked='true'] {
64+
background-color: rgb(225, 225, 225);
65+
}
66+
.example-menu .example-menu-item[role='menuitemcheckbox'][aria-checked='true'] {
67+
background-color: rgb(225, 225, 225);
68+
}
69+
.example-menu .example-menu-item:active {
70+
background-color: rgb(170, 170, 170);
71+
}
72+
73+
.example-menu-bar-item[aria-expanded='true'],
74+
.example-menu-item[aria-expanded='true'] {
75+
background-color: rgb(208, 208, 208) !important;
76+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<div cdkMenuBar>
2+
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="file">File</button>
3+
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="edit">Edit</button>
4+
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="format">Format</button>
5+
</div>
6+
7+
<ng-template cdkMenuPanel #file="cdkMenuPanel">
8+
<div class="example-menu" cdkMenu [cdkMenuPanel]="file">
9+
<button class="example-menu-item" cdkMenuItem>Share</button>
10+
<hr />
11+
<button class="example-menu-item" cdkMenuItem [cdkMenuTriggerFor]="new">
12+
New <span>&#10148;</span>
13+
</button>
14+
<button class="example-menu-item" cdkMenuItem>Open</button>
15+
<button class="example-menu-item" cdkMenuItem>Make a Copy</button>
16+
<hr />
17+
<button class="example-menu-item" cdkMenuItem [cdkMenuTriggerFor]="download">
18+
Download <span>&#10148;</span>
19+
</button>
20+
</div>
21+
</ng-template>
22+
23+
<ng-template #edit="cdkMenuPanel" cdkMenuPanel>
24+
<div class="example-menu" cdkMenu [cdkMenuPanel]="edit">
25+
<button class="example-menu-item" cdkMenuItem>Undo</button>
26+
<button class="example-menu-item" cdkMenuItem>Redo</button>
27+
<hr />
28+
<button class="example-menu-item" cdkMenuItem>Cut</button>
29+
<button class="example-menu-item" cdkMenuItem>Copy</button>
30+
<button class="example-menu-item" cdkMenuItem>Paste</button>
31+
</div>
32+
</ng-template>
33+
34+
<ng-template #format="cdkMenuPanel" cdkMenuPanel>
35+
<div class="example-menu" cdkMenu [cdkMenuPanel]="format">
36+
<div class="example-menu-group" cdkMenuGroup>
37+
<button class="example-menu-item" checked id="bf" cdkMenuItemCheckbox>Bold</button>
38+
<button class="example-menu-item" id="if" cdkMenuItemCheckbox>Italic</button>
39+
</div>
40+
<hr />
41+
<div class="example-menu-group" cdkMenuGroup>
42+
<button class="example-menu-item" id="small" cdkMenuItemRadio>Small</button>
43+
<button class="example-menu-item" checked id="normal" cdkMenuItemRadio>Normal</button>
44+
<button class="example-menu-item" id="large" cdkMenuItemRadio>Big</button>
45+
</div>
46+
</div>
47+
</ng-template>
48+
49+
<ng-template #new="cdkMenuPanel" cdkMenuPanel>
50+
<div class="example-menu" cdkMenu [cdkMenuPanel]="new">
51+
<button class="example-menu-item" cdkMenuItem>Document</button>
52+
<button class="example-menu-item" cdkMenuItem>From template</button>
53+
<hr />
54+
<button class="example-menu-item" cdkMenuItem>Spreadsheet</button>
55+
<button class="example-menu-item" cdkMenuItem>Presentation</button>
56+
<button class="example-menu-item" cdkMenuItem>Form</button>
57+
</div>
58+
</ng-template>
59+
60+
<ng-template #download="cdkMenuPanel" cdkMenuPanel>
61+
<div class="example-menu" cdkMenu [cdkMenuPanel]="download">
62+
<button class="example-menu-item" cdkMenuItem>Microsoft Word</button>
63+
<button class="example-menu-item" cdkMenuItem>PDF</button>
64+
<button class="example-menu-item" cdkMenuItem>Plain text</button>
65+
</div>
66+
</ng-template>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import {Component} from '@angular/core';
2+
3+
/** @title Google Docs Menu Bar. */
4+
@Component({
5+
selector: 'cdk-menu-menubar-example',
6+
exportAs: 'cdkMenuMenubarExample',
7+
styleUrls: ['cdk-menu-menubar-example.css'],
8+
templateUrl: 'cdk-menu-menubar-example.html',
9+
})
10+
export class CdkMenuMenubarExample {}

0 commit comments

Comments
 (0)