Skip to content

docs(cdk-experimental/menu): add examples to menu documentation #20482

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions src/cdk-experimental/menu/menu.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ menu directives to build your custom menu. A typical menu consists of the follow
- `cdkMenu` - the actual menu you want to open
- `cdkMenuItem` - added to each button

<!-- TODO basic standalone menu example (like mat-menu has) -->
<!-- example({
"example": "cdk-menu-standalone-menu",
"file": "cdk-menu-standalone-menu-example.html"
}) -->

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

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

<!-- TODO basic menubar example (google docs?) -->
<!-- example({
"example": "cdk-menu-menubar",
"file": "cdk-menu-menubar-example.html"
}) -->

### Context Menus

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

<!-- TODO basic context menu example -->
<!-- example({
"example": "cdk-menu-context",
"file": "cdk-menu-context-example.html"
}) -->

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

<!-- TODO inline menu example (gmail buttons?) -->
<!-- example({
"example": "cdk-menu-inline",
"file": "cdk-menu-inline-example.html"
}) -->

### Menu Items

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

<!-- TODO standalone menu example with checkboxes and grouped radios -->
<!-- example({
"example": "cdk-menu-standalone-stateful-menu",
"file": "cdk-menu-standalone-stateful-menu-example.html"
}) -->

### Smart Menu Aim

Expand Down
1 change: 1 addition & 0 deletions src/components-examples/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ ALL_EXAMPLES = [
"//src/components-examples/cdk/clipboard",
"//src/components-examples/cdk/a11y",
"//src/components-examples/cdk/overlay",
"//src/components-examples/cdk-experimental/menu",
"//src/components-examples/cdk-experimental/popover-edit",
"//src/components-examples/cdk-experimental/selection",
]
Expand Down
26 changes: 26 additions & 0 deletions src/components-examples/cdk-experimental/menu/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
load("//tools:defaults.bzl", "ng_module")

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

ng_module(
name = "menu",
srcs = glob(["**/*.ts"]),
assets = glob([
"**/*.html",
"**/*.css",
]),
module_name = "@angular/components-examples/cdk-experimental/menu",
deps = [
"//src/cdk-experimental/menu",
"@npm//@angular/forms",
],
)

filegroup(
name = "source-files",
srcs = glob([
"**/*.html",
"**/*.css",
"**/*.ts",
]),
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
.example-menu {
display: inline-flex;
flex-direction: column;
min-width: 180px;
max-width: 280px;
background-color: rgb(255, 255, 255);
padding: 6px 0;
}

.example-menu-item {
background-color: transparent;
cursor: pointer;
outline: none;
border: none;

user-select: none;
min-width: 64px;
line-height: 36px;
padding: 0 16px;

display: flex;
align-items: center;
flex-direction: row;
flex: 1;
}

.example-menu-item:hover {
background-color: rgb(208, 208, 208);
}

.example-menu-item:active {
background-color: rgb(170, 170, 170);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<div [cdkContextMenuTriggerFor]="context_menu">
Did you ever hear the tragedy of Darth Plagueis The Wise? I thought not. It's not a story the Jedi
would tell you. It's a Sith legend. Darth Plagueis was a Dark Lord of the Sith, so powerful and so
wise he could use the Force to influence the midichlorians to create life… He had such a knowledge
of the dark side that he could even keep the ones he cared about from dying. The dark side of the
Force is a pathway to many abilities some consider to be unnatural. He became so powerful… the
only thing he was afraid of was losing his power, which eventually, of course, he did.
Unfortunately, he taught his apprentice everything he knew, then his apprentice killed him in his
sleep. Ironic. He could save others from death, but not himself.
</div>

<ng-template #context_menu="cdkMenuPanel" cdkMenuPanel>
<div class="example-menu" cdkMenu [cdkMenuPanel]="context_menu">
<button class="example-menu-item" cdkMenuItem>Cut</button>
<button class="example-menu-item" cdkMenuItem>Copy</button>
<button class="example-menu-item" cdkMenuItem>Link</button>
</div>
</ng-template>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {Component} from '@angular/core';

/** @title Context menu. */
@Component({
selector: 'cdk-menu-context-example',
exportAs: 'cdkMenuContextExample',
styleUrls: ['cdk-menu-context-example.css'],
templateUrl: 'cdk-menu-context-example.html',
})
export class CdkMenuContextExample {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
.example-menu {
display: inline-flex;
flex-direction: column;
min-width: 180px;
max-width: 280px;
background-color: rgb(255, 255, 255);
padding: 6px 0;
}

.example-menu-item {
background-color: transparent;
cursor: pointer;
outline: none;
border: none;

user-select: none;
min-width: 64px;
line-height: 36px;
padding: 0 16px;

display: flex;
align-items: center;
flex-direction: row;
flex: 1;
}

.example-menu-item:hover {
background-color: rgb(208, 208, 208);
}

.example-menu-item:active {
background-color: rgb(170, 170, 170);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div class="example-menu" cdkMenu>
<button class="example-menu-item" cdkMenuItem>Inbox</button>
<button class="example-menu-item" cdkMenuItem>Snoozed</button>
<button class="example-menu-item" cdkMenuItem>Important</button>
<button class="example-menu-item" cdkMenuItem>Sent</button>
<button class="example-menu-item" cdkMenuItem>Drafts</button>
<button class="example-menu-item" cdkMenuItem>All Mail</button>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {Component} from '@angular/core';

/** @title Gmail inline menu. */
@Component({
selector: 'cdk-menu-inline-example',
exportAs: 'cdkMenuInlineExample',
styleUrls: ['cdk-menu-inline-example.css'],
templateUrl: 'cdk-menu-inline-example.html',
})
export class CdkMenuInlineExample {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
.example-menu-bar-item {
cursor: pointer;
outline: none;
border: none;

user-select: none;
min-width: 34px;
line-height: 26px;
padding: 0 16px;
}

.example-menu-bar-item:hover {
background-color: rgb(208, 208, 208);
}

.example-menu {
display: inline-flex;
flex-direction: column;
min-width: 180px;
max-width: 280px;
background-color: rgb(255, 255, 255);
padding: 6px 0;
}

.example-menu hr {
width: 100%;
color: rgba(0, 0, 0, 0.12);
}

.example-menu .example-menu-group {
display: inline-flex;
flex-direction: column;
}

.example-menu .example-menu-item {
background-color: transparent;
cursor: pointer;
outline: none;
border: none;

user-select: none;
min-width: 64px;
line-height: 36px;
padding: 0 16px;

display: flex;
align-items: center;
flex-direction: row;
flex: 1;
}

.example-menu-item > span {
display: flex;
flex-direction: row;
flex: 1;
justify-content: flex-end;
}

.example-menu .example-menu-item:hover {
background-color: rgb(208, 208, 208);
}

.example-menu .example-menu-item[role='menuitemradio'][aria-checked='true'] {
background-color: rgb(225, 225, 225);
}
.example-menu .example-menu-item[role='menuitemcheckbox'][aria-checked='true'] {
background-color: rgb(225, 225, 225);
}
.example-menu .example-menu-item:active {
background-color: rgb(170, 170, 170);
}

.example-menu-bar-item[aria-expanded='true'],
.example-menu-item[aria-expanded='true'] {
background-color: rgb(208, 208, 208) !important;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<div cdkMenuBar>
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="file">File</button>
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="edit">Edit</button>
<button class="example-menu-bar-item" cdkMenuItem [cdkMenuTriggerFor]="format">Format</button>
</div>

<ng-template cdkMenuPanel #file="cdkMenuPanel">
<div class="example-menu" cdkMenu [cdkMenuPanel]="file">
<button class="example-menu-item" cdkMenuItem>Share</button>
<hr />
<button class="example-menu-item" cdkMenuItem [cdkMenuTriggerFor]="new">
New <span>&#10148;</span>
</button>
<button class="example-menu-item" cdkMenuItem>Open</button>
<button class="example-menu-item" cdkMenuItem>Make a Copy</button>
<hr />
<button class="example-menu-item" cdkMenuItem [cdkMenuTriggerFor]="download">
Download <span>&#10148;</span>
</button>
</div>
</ng-template>

<ng-template #edit="cdkMenuPanel" cdkMenuPanel>
<div class="example-menu" cdkMenu [cdkMenuPanel]="edit">
<button class="example-menu-item" cdkMenuItem>Undo</button>
<button class="example-menu-item" cdkMenuItem>Redo</button>
<hr />
<button class="example-menu-item" cdkMenuItem>Cut</button>
<button class="example-menu-item" cdkMenuItem>Copy</button>
<button class="example-menu-item" cdkMenuItem>Paste</button>
</div>
</ng-template>

<ng-template #format="cdkMenuPanel" cdkMenuPanel>
<div class="example-menu" cdkMenu [cdkMenuPanel]="format">
<div class="example-menu-group" cdkMenuGroup>
<button class="example-menu-item" checked id="bf" cdkMenuItemCheckbox>Bold</button>
<button class="example-menu-item" id="if" cdkMenuItemCheckbox>Italic</button>
</div>
<hr />
<div class="example-menu-group" cdkMenuGroup>
<button class="example-menu-item" id="small" cdkMenuItemRadio>Small</button>
<button class="example-menu-item" checked id="normal" cdkMenuItemRadio>Normal</button>
<button class="example-menu-item" id="large" cdkMenuItemRadio>Big</button>
</div>
</div>
</ng-template>

<ng-template #new="cdkMenuPanel" cdkMenuPanel>
<div class="example-menu" cdkMenu [cdkMenuPanel]="new">
<button class="example-menu-item" cdkMenuItem>Document</button>
<button class="example-menu-item" cdkMenuItem>From template</button>
<hr />
<button class="example-menu-item" cdkMenuItem>Spreadsheet</button>
<button class="example-menu-item" cdkMenuItem>Presentation</button>
<button class="example-menu-item" cdkMenuItem>Form</button>
</div>
</ng-template>

<ng-template #download="cdkMenuPanel" cdkMenuPanel>
<div class="example-menu" cdkMenu [cdkMenuPanel]="download">
<button class="example-menu-item" cdkMenuItem>Microsoft Word</button>
<button class="example-menu-item" cdkMenuItem>PDF</button>
<button class="example-menu-item" cdkMenuItem>Plain text</button>
</div>
</ng-template>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {Component} from '@angular/core';

/** @title Google Docs Menu Bar. */
@Component({
selector: 'cdk-menu-menubar-example',
exportAs: 'cdkMenuMenubarExample',
styleUrls: ['cdk-menu-menubar-example.css'],
templateUrl: 'cdk-menu-menubar-example.html',
})
export class CdkMenuMenubarExample {}
Loading