Skip to content

Commit 598823a

Browse files
committed
feat(progress-container): add progress-container component
* Add two new components: `mat-progress-container` and `mat-progress-content` for use with new directive `matProgress` * When triggered, the `matProgress` directive will emit an event that notifies the components which will, if triggered to show the progress container, add that template to the view and hide the progress content, and otherwise remove the template from the view and show the progress content
1 parent 0bd8899 commit 598823a

38 files changed

+418
-7
lines changed

.github/CODEOWNERS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
/src/lib/paginator/** @andrewseguin
2222
/src/lib/prebuilt-themes/** @jelbourn
2323
/src/lib/progress-bar/** @jelbourn @crisbeto @josephperrott
24+
/src/lib/progress-container/** @jelbourn @crisbeto
2425
/src/lib/progress-spinner/** @jelbourn @crisbeto @josephperrott
2526
/src/lib/radio/** @jelbourn @devversion
2627
/src/lib/schematics/** @devversion @jelbourn
@@ -129,6 +130,7 @@
129130
/src/demo-app/platform/** @jelbourn @devversion
130131
/src/demo-app/portal/** @jelbourn
131132
/src/demo-app/progress-bar/** @jelbourn @crisbeto @josephperrott
133+
/src/demo-app/progress-container/** @jelbourn @crisbeto
132134
/src/demo-app/progress-spinner/** @jelbourn @crisbeto @josephperrott
133135
/src/demo-app/radio/** @jelbourn @devversion
134136
/src/demo-app/ripple/** @devversion
@@ -162,6 +164,7 @@
162164
/e2e/components/list-e2e.spec.ts @jelbourn @crisbeto @devversion
163165
/e2e/components/menu-e2e.spec.ts @crisbeto
164166
/e2e/components/progress-bar-e2e.spec.ts @jelbourn @crisbeto @josephperrott
167+
/e2e/components/progress-container-e2e.spec.ts @jelbourn @crisbeto
165168
/e2e/components/progress-spinner-e2e.spec.ts @jelbourn @crisbeto @josephperrott
166169
/e2e/components/radio-e2e.spec.ts @jelbourn @devversion
167170
/e2e/components/sidenav-e2e.spec.ts @mmalerba
@@ -182,6 +185,7 @@
182185
/src/e2e-app/input/** @mmalerba
183186
/src/e2e-app/menu/** @crisbeto
184187
/src/e2e-app/progress-bar/** @jelbourn @crisbeto @josephperrott
188+
/src/e2e-app/progress-container/** @jelbourn @crisbeto
185189
/src/e2e-app/progress-spinner/** @jelbourn @crisbeto @josephperrott
186190
/src/e2e-app/radio/** @jelbourn @devversion
187191
/src/e2e-app/sidenav/** @mmalerba

packages.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ MATERIAL_PACKAGES = [
5353
"menu",
5454
"paginator",
5555
"progress-bar",
56+
"progress-container",
5657
"progress-spinner",
5758
"radio",
5859
"select",

src/demo-app/demo-app/demo-app.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export class DemoApp {
7676
{name: 'Platform', route: '/platform'},
7777
{name: 'Portal', route: '/portal'},
7878
{name: 'Progress Bar', route: '/progress-bar'},
79+
{name: 'Progress Container', route: '/progress-container'},
7980
{name: 'Progress Spinner', route: '/progress-spinner'},
8081
{name: 'Radio', route: '/radio'},
8182
{name: 'Ripple', route: '/ripple'},

src/demo-app/demo-app/demo-module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import {VirtualScrollDemo} from '../virtual-scroll/virtual-scroll-demo';
6464
import {DemoApp, Home} from './demo-app';
6565
import {DEMO_APP_ROUTES} from './routes';
6666
import {DragAndDropDemo} from '../drag-drop/drag-drop-demo';
67+
import {ProgressContainerDemo} from '../progress-container/progress-container-demo';
6768

6869
@NgModule({
6970
imports: [
@@ -116,6 +117,7 @@ import {DragAndDropDemo} from '../drag-drop/drag-drop-demo';
116117
PlatformDemo,
117118
PortalDemo,
118119
ProgressBarDemo,
120+
ProgressContainerDemo,
119121
ProgressSpinnerDemo,
120122
RadioDemo,
121123
RippleDemo,

src/demo-app/demo-app/routes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import {PaginatorDemo} from '../paginator/paginator-demo';
5656
import {ExamplesPage} from '../examples-page/examples-page';
5757
import {TableDemo} from '../table/table-demo';
5858
import {DragAndDropDemo} from '../drag-drop/drag-drop-demo';
59+
import {ProgressContainerDemo} from '../progress-container/progress-container-demo';
5960

6061
export const DEMO_APP_ROUTES: Routes = [
6162
{path: '', component: DemoApp, children: [
@@ -86,6 +87,7 @@ export const DEMO_APP_ROUTES: Routes = [
8687
{path: 'platform', component: PlatformDemo},
8788
{path: 'portal', component: PortalDemo},
8889
{path: 'progress-bar', component: ProgressBarDemo},
90+
{path: 'progress-container', component: ProgressContainerDemo},
8991
{path: 'progress-spinner', component: ProgressSpinnerDemo},
9092
{path: 'radio', component: RadioDemo},
9193
{path: 'ripple', component: RippleDemo},

src/demo-app/demo-material-module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import {
4343
MatNativeDateModule,
4444
MatPaginatorModule,
4545
MatProgressBarModule,
46+
MatProgressContainerModule,
4647
MatProgressSpinnerModule,
4748
MatRadioModule,
4849
MatRippleModule,
@@ -87,6 +88,7 @@ import {
8788
MatMenuModule,
8889
MatPaginatorModule,
8990
MatProgressBarModule,
91+
MatProgressContainerModule,
9092
MatProgressSpinnerModule,
9193
MatRadioModule,
9294
MatRippleModule,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<button mat-raised-button [matProgress]="trigger" (click)="trigger = !trigger">
2+
<mat-progress-container>
3+
<mat-spinner></mat-spinner>
4+
</mat-progress-container>
5+
<mat-progress-content>
6+
TOGGLE
7+
</mat-progress-content>
8+
</button>

src/demo-app/progress-container/progress-container-demo.scss

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import {Component} from '@angular/core';
10+
11+
@Component({
12+
moduleId: module.id,
13+
selector: 'progress-container-demo',
14+
templateUrl: 'progress-container-demo.html',
15+
styleUrls: ['progress-container-demo.css'],
16+
})
17+
export class ProgressContainerDemo {
18+
trigger: boolean = false;
19+
}

src/demo-app/system-config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ System.config({
8585
'@angular/material/menu': 'dist/packages/material/menu/index.js',
8686
'@angular/material/paginator': 'dist/packages/material/paginator/index.js',
8787
'@angular/material/progress-bar': 'dist/packages/material/progress-bar/index.js',
88+
'@angular/material/progress-container': 'dist/packages/material/progress-container/index.js',
8889
'@angular/material/progress-spinner': 'dist/packages/material/progress-spinner/index.js',
8990
'@angular/material/radio': 'dist/packages/material/radio/index.js',
9091
'@angular/material/select': 'dist/packages/material/select/index.js',

src/e2e-app/e2e-app-module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
MatMenuModule,
1818
MatNativeDateModule,
1919
MatProgressBarModule,
20+
MatProgressContainerModule,
2021
MatProgressSpinnerModule,
2122
MatRadioModule,
2223
MatSidenavModule,
@@ -45,6 +46,7 @@ import {SidenavE2E} from './sidenav/sidenav-e2e';
4546
import {SlideToggleE2E} from './slide-toggle/slide-toggle-e2e';
4647
import {BasicTabs} from './tabs/tabs-e2e';
4748
import {VirtualScrollE2E} from './virtual-scroll/virtual-scroll-e2e';
49+
import {ProgressContainerE2E} from './progress-container/progress-container-e2e';
4850

4951
/**
5052
* NgModule that contains all Material modules that are required to serve the e2e-app.
@@ -62,6 +64,7 @@ import {VirtualScrollE2E} from './virtual-scroll/virtual-scroll-e2e';
6264
MatListModule,
6365
MatMenuModule,
6466
MatProgressBarModule,
67+
MatProgressContainerModule,
6568
MatProgressSpinnerModule,
6669
MatRadioModule,
6770
MatSidenavModule,
@@ -97,6 +100,7 @@ export class E2eMaterialModule {}
97100
InputE2E,
98101
MenuE2E,
99102
ProgressBarE2E,
103+
ProgressContainerE2E,
100104
ProgressSpinnerE2E,
101105
SidenavE2E,
102106
SimpleCheckboxes,

src/e2e-app/e2e-app/routes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {SimpleCheckboxes} from '../checkbox/checkbox-e2e';
1010
import {DialogE2E} from '../dialog/dialog-e2e';
1111
import {GridListE2E} from '../grid-list/grid-list-e2e';
1212
import {ProgressBarE2E} from '../progress-bar/progress-bar-e2e';
13+
import {ProgressContainerE2E} from '../progress-container/progress-container-e2e';
1314
import {ProgressSpinnerE2E} from '../progress-spinner/progress-spinner-e2e';
1415
import {SlideToggleE2E} from '../slide-toggle/slide-toggle-e2e';
1516
import {InputE2E} from '../input/input-e2e';
@@ -38,6 +39,7 @@ export const E2E_APP_ROUTES: Routes = [
3839
{path: 'list', component: ListOverviewExample},
3940
{path: 'menu', component: MenuE2E},
4041
{path: 'progress-bar', component: ProgressBarE2E},
42+
{path: 'progress-container', component: ProgressContainerE2E},
4143
{path: 'progress-spinner', component: ProgressSpinnerE2E},
4244
{path: 'radio', component: SimpleRadioButtons},
4345
{path: 'sidenav', component: SidenavE2E},
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<button mat-raised-button [matProgress]="trigger" (click)="trigger = !trigger">
2+
<mat-progress-container>
3+
<mat-spinner></mat-spinner>
4+
</mat-progress-container>
5+
<mat-progress-content>
6+
TOGGLE
7+
</mat-progress-content>
8+
</button>
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+
@Component({
4+
moduleId: module.id,
5+
selector: 'progress-container-e2e',
6+
templateUrl: 'progress-container-e2e.html',
7+
})
8+
export class ProgressContainerE2E {
9+
trigger = true;
10+
}

src/e2e-app/system-config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ System.config({
7676
'@angular/material/menu': 'dist/bundles/material-menu.umd.js',
7777
'@angular/material/paginator': 'dist/bundles/material-paginator.umd.js',
7878
'@angular/material/progress-bar': 'dist/bundles/material-progress-bar.umd.js',
79+
'@angular/material/progress-container': 'dist/bundles/material-progress-container.umd.js',
7980
'@angular/material/progress-spinner': 'dist/bundles/material-progress-spinner.umd.js',
8081
'@angular/material/radio': 'dist/bundles/material-radio.umd.js',
8182
'@angular/material/select': 'dist/bundles/material-select.umd.js',
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package(default_visibility=["//visibility:public"])
2+
3+
load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary")
4+
load("//tools:defaults.bzl", "ng_module")
5+
6+
ng_module(
7+
name = "progress-container",
8+
srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]),
9+
module_name = "@angular/material/progress-container",
10+
assets = [":progress-container.css"] + glob(["**/*.html"]),
11+
deps = [
12+
"@angular//packages/common",
13+
"@angular//packages/core",
14+
"@rxjs",
15+
"//src/lib/core",
16+
"//src/cdk/coercion"
17+
],
18+
)
19+
20+
21+
# TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup
22+
filegroup(
23+
name = "progress_container_scss_partials",
24+
srcs = glob(["**/_*.scss"]),
25+
)
26+
27+
sass_binary(
28+
name = "progress_container_scss",
29+
src = "progress-container.scss",
30+
deps = ["//src/lib/core:core_scss_lib"],
31+
)
32+
33+
sass_library(
34+
name = "theme",
35+
srcs = glob(["**/*-theme.scss"]),
36+
)

src/lib/progress-container/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Please see the official documentation at https://material.angular.io/components/component/progress-container

src/lib/progress-container/_progress-container-theme.scss

Whitespace-only changes.

src/lib/progress-container/index.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
export * from './public-api';
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import {NgModule} from '@angular/core';
10+
import {CommonModule} from '@angular/common';
11+
import {MatCommonModule} from '@angular/material/core';
12+
import {MatProgressContainer} from './progress-container';
13+
import {MatProgress} from './progress-directive';
14+
import {MatProgressContent} from './progress-content';
15+
16+
17+
@NgModule({
18+
imports: [CommonModule, MatCommonModule],
19+
exports: [MatProgressContainer, MatProgress, MatProgressContent, MatCommonModule],
20+
declarations: [MatProgressContainer, MatProgress, MatProgressContent],
21+
})
22+
export class MatProgressContainerModule {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<ng-template>
2+
<div class="mat-progress-container">
3+
<ng-content></ng-content>
4+
</div>
5+
</ng-template>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
`<mat-progress-bar>` is a horizontal progress-bar for indicating progress and activity.
2+
3+
### Progress mode
4+
The progress-bar supports four modes: determinate, indeterminate, buffer and query.
5+
6+
#### Determinate
7+
Operations where the percentage of the operation complete is known should use the
8+
determinate indicator.
9+
10+
<!-- example(progress-bar-determinate) -->
11+
12+
This is the default mode and the progress is represented by the `value` property.
13+
14+
#### Indeterminate
15+
Operations where the user is asked to wait while something finishes and it’s
16+
not necessary to indicate how long it will take should use the indeterminate indicator.
17+
18+
<!-- example(progress-bar-indeterminate) -->
19+
20+
In this mode the `value` property is ignored.
21+
22+
#### Buffer
23+
Operations where the user wants to indicate some activity or loading from the server,
24+
use the buffer indicator.
25+
26+
<!-- example(progress-bar-buffer) -->
27+
28+
In "buffer" mode, `value` determines the progress of the primary bar while the `bufferValue` is
29+
used to show the additional buffering progress.
30+
31+
#### Query
32+
For situations where the user wants to indicate pre-loading (until the loading can actually be made),
33+
use the query indicator.
34+
35+
<!-- example(progress-bar-query) -->
36+
37+
In "query" mode, the progress-bar renders as an inverted "indeterminate" bar. Once the response
38+
progress is available, the `mode` should be changed to determinate to convey the progress. In
39+
this mode the `value` property is ignored.
40+
41+
### Theming
42+
The color of a progress-bar can be changed by using the `color` property. By default, progress-bars
43+
use the theme's primary color. This can be changed to `'accent'` or `'warn'`.
44+
45+
### Accessibility
46+
Each progress bar should be given a meaningful label via `aria-label` or `aria-labelledby`.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.mat-progress {
2+
opacity: 0;
3+
visibility: hidden;
4+
}
5+
6+
.mat-progress-container {
7+
position: absolute;
8+
top: 50%;
9+
left: 50%;
10+
transform: translate(-50%, -50%);
11+
}
12+
13+
.mat-progress-host {
14+
position: relative;
15+
}

src/lib/progress-container/progress-container.spec.ts

Whitespace-only changes.

0 commit comments

Comments
 (0)