Skip to content

Commit f80c7d5

Browse files
annieywjelbourn
authored andcommitted
prototype(progress-spinner): create prototype progress-spinner based on MDC Web (#20048)
* add files for MDC-based MatProgressSpinner * add demo of mdc-based MatProgressSpinner at localhost:4200/mdc-progress-spinner * copy MDC DOM and add MDC styles * set up MDC foundation for MDC-based MatProgressSpinner * (wip) add adapter and fill in API * copy over existing demo to MDC-based demo * serverside rendering, refactor * add tests (adapter class wip) * remove separate class for MatSpinner * add e2e tests * add harness * add user documantation README * add codeowner, theme dep * address CI failures * export MatSpinner as const to avoid build error * fix missing e2e import * fix nits * remove changes to _all-themes to keep PR merge-safe (add back in followup) (cherry picked from commit 294b8ee)
1 parent fdcf675 commit f80c7d5

40 files changed

+1257
-0
lines changed

.github/CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
/src/dev-app/mdc-list/** @mmalerba
178178
/src/dev-app/mdc-menu/** @crisbeto
179179
/src/dev-app/mdc-progress-bar/** @crisbeto
180+
/src/dev-app/mdc-progress-spinner/** @annieyw @mmalerba
180181
/src/dev-app/mdc-radio/** @mmalerba
181182
/src/dev-app/mdc-snack-bar/** @andrewseguin
182183
/src/dev-app/mdc-sidenav/** @crisbeto
@@ -235,6 +236,7 @@
235236
/src/e2e-app/mdc-input/** @devversion
236237
/src/e2e-app/mdc-menu/** @crisbeto
237238
/src/e2e-app/mdc-progress-bar/** @crisbeto
239+
/src/e2e-app/mdc-progress-spinner/** @annieyw @mmalerba
238240
/src/e2e-app/mdc-radio/** @mmalerba
239241
/src/e2e-app/mdc-slider/** @andrewseguin
240242
/src/e2e-app/mdc-slide-toggle/** @crisbeto

rollup-globals.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ROLLUP_GLOBALS = {
4141
"@material/auto-init": "mdc.autoInit",
4242
"@material/base": "mdc.base",
4343
"@material/checkbox": "mdc.checkbox",
44+
"@material/circular-progress": "mdc.circularProgress",
4445
"@material/chips": "mdc.chips",
4546
"@material/dialog": "mdc.dialog",
4647
"@material/dom": "mdc.dom",

src/dev-app/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ ng_module(
5454
"//src/dev-app/mdc-list",
5555
"//src/dev-app/mdc-menu",
5656
"//src/dev-app/mdc-progress-bar",
57+
"//src/dev-app/mdc-progress-spinner",
5758
"//src/dev-app/mdc-radio",
5859
"//src/dev-app/mdc-sidenav",
5960
"//src/dev-app/mdc-slide-toggle",
@@ -129,6 +130,7 @@ filegroup(
129130
"@npm//:node_modules/@material/base/dist/mdc.base.js",
130131
"@npm//:node_modules/@material/checkbox/dist/mdc.checkbox.js",
131132
"@npm//:node_modules/@material/chips/dist/mdc.chips.js",
133+
"@npm//:node_modules/@material/circular-progress/dist/mdc.circularProgress.js",
132134
"@npm//:node_modules/@material/data-table/dist/mdc.dataTable.js",
133135
"@npm//:node_modules/@material/dialog/dist/mdc.dialog.js",
134136
"@npm//:node_modules/@material/dom/dist/mdc.dom.js",

src/dev-app/dev-app/dev-app-layout.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export class DevAppLayout {
8282
{name: 'MDC Menu', route: '/mdc-menu'},
8383
{name: 'MDC Radio', route: '/mdc-radio'},
8484
{name: 'MDC Progress Bar', route: '/mdc-progress-bar'},
85+
{name: 'MDC Progress Spinner', route: '/mdc-progress-spinner'},
8586
{name: 'MDC Tabs', route: '/mdc-tabs'},
8687
{name: 'MDC Sidenav', route: '/mdc-sidenav'},
8788
{name: 'MDC Slide Toggle', route: '/mdc-slide-toggle'},

src/dev-app/dev-app/routes.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ export const DEV_APP_ROUTES: Routes = [
7979
{path: 'mdc-input', loadChildren: 'mdc-input/mdc-input-demo-module#MdcInputDemoModule'},
8080
{path: 'mdc-list', loadChildren: 'mdc-list/mdc-list-demo-module#MdcListDemoModule'},
8181
{path: 'mdc-menu', loadChildren: 'mdc-menu/mdc-menu-demo-module#MdcMenuDemoModule'},
82+
{
83+
path: 'mdc-progress-spinner',
84+
loadChildren:
85+
'mdc-progress-spinner/mdc-progress-spinner-demo-module#MdcProgressSpinnerDemoModule'
86+
},
8287
{path: 'mdc-radio', loadChildren: 'mdc-radio/mdc-radio-demo-module#MdcRadioDemoModule'},
8388
{path: 'mdc-sidenav', loadChildren: 'mdc-sidenav/mdc-sidenav-demo-module#MdcSidenavDemoModule'},
8489
{
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
load("//tools:defaults.bzl", "ng_module", "sass_binary")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
ng_module(
6+
name = "mdc-progress-spinner",
7+
srcs = glob(["**/*.ts"]),
8+
assets = [
9+
"mdc-progress-spinner-demo.html",
10+
":mdc_progress_spinner_demo_scss",
11+
],
12+
deps = [
13+
"//src/material-experimental/mdc-progress-spinner",
14+
"//src/material/button",
15+
"//src/material/button-toggle",
16+
"//src/material/checkbox",
17+
"@npm//@angular/forms",
18+
"@npm//@angular/router",
19+
],
20+
)
21+
22+
sass_binary(
23+
name = "mdc_progress_spinner_demo_scss",
24+
src = "mdc-progress-spinner-demo.scss",
25+
)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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 {MatProgressSpinnerModule} from '@angular/material-experimental/mdc-progress-spinner';
11+
import {RouterModule} from '@angular/router';
12+
import {MdcProgressSpinnerDemo} from './mdc-progress-spinner-demo';
13+
import {MatButtonModule} from '@angular/material/button';
14+
import {MatCheckboxModule} from '@angular/material/checkbox';
15+
import {MatButtonToggleModule} from '@angular/material/button-toggle';
16+
import {FormsModule} from '@angular/forms';
17+
18+
@NgModule({
19+
imports: [
20+
MatButtonModule,
21+
MatCheckboxModule,
22+
MatButtonToggleModule,
23+
FormsModule,
24+
MatProgressSpinnerModule,
25+
RouterModule.forChild([{path: '', component: MdcProgressSpinnerDemo}]),
26+
],
27+
declarations: [MdcProgressSpinnerDemo],
28+
})
29+
export class MdcProgressSpinnerDemoModule {}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<h1>Determinate</h1>
2+
3+
<div class="demo-progress-spinner-controls">
4+
<p>Value: {{progressValue}}</p>
5+
<button mat-raised-button (click)="step(10)">Increase</button>
6+
<button mat-raised-button (click)="step(-10)">Decrease</button>
7+
<mat-checkbox [(ngModel)]="isDeterminate">Is determinate</mat-checkbox>
8+
</div>
9+
10+
<div class="demo-progress-spinner">
11+
<mat-progress-spinner [mode]="isDeterminate ? 'determinate' : 'indeterminate'"
12+
[value]="progressValue" color="warn" [strokeWidth]="1.6" [diameter]="16"></mat-progress-spinner>
13+
<mat-progress-spinner [mode]="isDeterminate ? 'determinate' : 'indeterminate'"
14+
[value]="progressValue" color="accent" [strokeWidth]="1" [diameter]="32"></mat-progress-spinner>
15+
<mat-progress-spinner [mode]="isDeterminate ? 'determinate' : 'indeterminate'"
16+
[value]="progressValue" color="primary" [diameter]="50"></mat-progress-spinner>
17+
</div>
18+
19+
<h1>Indeterminate</h1>
20+
21+
<mat-button-toggle-group class="demo-progress-spinner-controls" [(ngModel)]="color">
22+
<mat-button-toggle value="primary">Primary Color</mat-button-toggle>
23+
<mat-button-toggle value="accent">Accent Color</mat-button-toggle>
24+
<mat-button-toggle value="warn">Warn Color</mat-button-toggle>
25+
</mat-button-toggle-group>
26+
27+
<div class="demo-progress-spinner">
28+
<mat-progress-spinner mode="indeterminate" [color]="color"></mat-progress-spinner>
29+
<mat-progress-spinner mode="indeterminate" [color]="color"></mat-progress-spinner>
30+
<mat-spinner [color]="color"></mat-spinner>
31+
</div>
32+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.demo-progress-spinner {
2+
width: 100%;
3+
4+
.mat-mdc-progress-spinner,
5+
.mat-mdc-spinner {
6+
display: inline-block;
7+
}
8+
}
9+
10+
.demo-progress-spinner-controls {
11+
margin: 10px 0;
12+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
import {ThemePalette} from '@angular/material/core';
11+
12+
13+
@Component({
14+
selector: 'mdc-progress-spinner-demo',
15+
templateUrl: 'mdc-progress-spinner-demo.html',
16+
styleUrls: ['mdc-progress-spinner-demo.css'],
17+
})
18+
export class MdcProgressSpinnerDemo {
19+
progressValue = 60;
20+
color: ThemePalette = 'primary';
21+
isDeterminate = true;
22+
23+
step(val: number) {
24+
this.progressValue = Math.max(0, Math.min(100, val + this.progressValue));
25+
}
26+
}

0 commit comments

Comments
 (0)