diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fd1c570492c1..dd3e5cc982fe 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -164,6 +164,7 @@ /src/dev-app/mdc-checkbox/** @mmalerba /src/dev-app/mdc-chips/** @mmalerba /src/dev-app/mdc-input/** @devversion @mmalerba +/src/dev-app/mdc-list/** @mmalerba /src/dev-app/mdc-menu/** @crisbeto /src/dev-app/mdc-progress-bar/** @crisbeto /src/dev-app/mdc-radio/** @mmalerba diff --git a/package.json b/package.json index 129d0b15aa00..be1ab6ea7add 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@types/youtube": "^0.0.38", "@webcomponents/custom-elements": "^1.1.0", "core-js": "^2.6.9", - "material-components-web": "5.0.0", + "material-components-web": "^6.0.0-canary.265ecbad5.0", "rxjs": "^6.5.3", "systemjs": "0.19.43", "tslib": "^1.10.0", diff --git a/packages.bzl b/packages.bzl index 8ad59ff64509..fcefe89815bb 100644 --- a/packages.bzl +++ b/packages.bzl @@ -2,7 +2,7 @@ # all in-sync. This map is passed to each ng_package rule to stamp out the appropriate # version for the placeholders. ANGULAR_PACKAGE_VERSION = "^9.0.0 || ^10.0.0-0" -MDC_PACKAGE_VERSION = "^4.0.0" +MDC_PACKAGE_VERSION = "^6.0.0-canary.265ecbad5.0" TSLIB_PACKAGE_VERSION = "^1.9.0" VERSION_PLACEHOLDER_REPLACEMENTS = { diff --git a/src/dev-app/BUILD.bazel b/src/dev-app/BUILD.bazel index ef3316e9edce..4fba4db3a8ba 100644 --- a/src/dev-app/BUILD.bazel +++ b/src/dev-app/BUILD.bazel @@ -48,6 +48,7 @@ ng_module( "//src/dev-app/mdc-checkbox", "//src/dev-app/mdc-chips", "//src/dev-app/mdc-input", + "//src/dev-app/mdc-list", "//src/dev-app/mdc-menu", "//src/dev-app/mdc-progress-bar", "//src/dev-app/mdc-radio", diff --git a/src/dev-app/dev-app/dev-app-layout.ts b/src/dev-app/dev-app/dev-app-layout.ts index 6896a9bba085..889caeb53f16 100644 --- a/src/dev-app/dev-app/dev-app-layout.ts +++ b/src/dev-app/dev-app/dev-app-layout.ts @@ -75,6 +75,7 @@ export class DevAppLayout { {name: 'MDC Checkbox', route: '/mdc-checkbox'}, {name: 'MDC Chips', route: '/mdc-chips'}, {name: 'MDC Input', route: '/mdc-input'}, + {name: 'MDC List', route: '/mdc-list'}, {name: 'MDC Menu', route: '/mdc-menu'}, {name: 'MDC Radio', route: '/mdc-radio'}, {name: 'MDC Progress Bar', route: '/mdc-progress-bar'}, diff --git a/src/dev-app/dev-app/routes.ts b/src/dev-app/dev-app/routes.ts index 801e5bd8c3fb..66347e769d16 100644 --- a/src/dev-app/dev-app/routes.ts +++ b/src/dev-app/dev-app/routes.ts @@ -68,6 +68,7 @@ export const DEV_APP_ROUTES: Routes = [ }, {path: 'mdc-chips', loadChildren: 'mdc-chips/mdc-chips-demo-module#MdcChipsDemoModule'}, {path: 'mdc-input', loadChildren: 'mdc-input/mdc-input-demo-module#MdcInputDemoModule'}, + {path: 'mdc-list', loadChildren: 'mdc-list/mdc-list-demo-module#MdcListDemoModule'}, {path: 'mdc-menu', loadChildren: 'mdc-menu/mdc-menu-demo-module#MdcMenuDemoModule'}, {path: 'mdc-radio', loadChildren: 'mdc-radio/mdc-radio-demo-module#MdcRadioDemoModule'}, { diff --git a/src/dev-app/list/list-demo.html b/src/dev-app/list/list-demo.html index 3325bce2db43..83918a690db0 100644 --- a/src/dev-app/list/list-demo.html +++ b/src/dev-app/list/list-demo.html @@ -162,11 +162,11 @@

Dogs

- +

Single Selection list

- diff --git a/src/dev-app/mdc-list/BUILD.bazel b/src/dev-app/mdc-list/BUILD.bazel new file mode 100644 index 000000000000..031c44a3f41e --- /dev/null +++ b/src/dev-app/mdc-list/BUILD.bazel @@ -0,0 +1,24 @@ +package(default_visibility = ["//visibility:public"]) + +load("//tools:defaults.bzl", "ng_module", "sass_binary") + +ng_module( + name = "mdc-list", + srcs = glob(["**/*.ts"]), + assets = [ + "mdc-list-demo.html", + ":mdc_list_demo_scss", + ], + deps = [ + "//src/material-experimental/mdc-button", + "//src/material-experimental/mdc-checkbox", + "//src/material-experimental/mdc-list", + "//src/material/icon", + "@npm//@angular/router", + ], +) + +sass_binary( + name = "mdc_list_demo_scss", + src = "mdc-list-demo.scss", +) diff --git a/src/dev-app/mdc-list/mdc-list-demo-module.ts b/src/dev-app/mdc-list/mdc-list-demo-module.ts new file mode 100644 index 000000000000..cce93685a8ce --- /dev/null +++ b/src/dev-app/mdc-list/mdc-list-demo-module.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; +import {MatButtonModule} from '@angular/material-experimental/mdc-button'; +import {MatCheckboxModule} from '@angular/material-experimental/mdc-checkbox'; +import {MatListModule} from '@angular/material-experimental/mdc-list'; +import {MatIconModule} from '@angular/material/icon'; +import {RouterModule} from '@angular/router'; +import {MdcListDemo} from './mdc-list-demo'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + MatButtonModule, + MatCheckboxModule, + MatIconModule, + MatListModule, + RouterModule.forChild([{path: '', component: MdcListDemo}]), + ], + declarations: [MdcListDemo], +}) +export class MdcListDemoModule { +} diff --git a/src/dev-app/mdc-list/mdc-list-demo.html b/src/dev-app/mdc-list/mdc-list-demo.html new file mode 100644 index 000000000000..80fe14661e23 --- /dev/null +++ b/src/dev-app/mdc-list/mdc-list-demo.html @@ -0,0 +1,121 @@ + +

mat-list demo

+ + + +
+
+

Normal lists

+ + +

Items

+ + {{item}} + +
+ + + +

{{contact.name}}

+

extra line

+

{{contact.headline}}

+
+
+ + +

Today

+ + Image of {{message.from}} +

{{message.from}}

+

+ {{message.subject}} -- + {{message.message}} +

+ +
+ + +

{{message.from}}

+

{{message.subject}}

+

{{message.message}}

+
+
+
+ +
+

Dense lists

+ +

Items

+ + {{item}} + +
+ + + +

{{contact.name}}

+

{{contact.headline}}

+
+
+ + +

Today

+ + Image of {{message.from}} +

{{message.from}}

+

{{message.subject}}

+

{{message.message}}

+
+
+
+
+

Nav lists

+ + + {{ link.name }} + + +
+ More info! +
+ + + {{ link.name }} + + + + + + folder + {{ link.name }} + Description + + + + + + {{ link.name }} + + + +
+ +
+

Action list

+ + + +
+ +
+

Selection list

+ + TODO: Implement MDC-based selection list. +
+
diff --git a/src/dev-app/mdc-list/mdc-list-demo.scss b/src/dev-app/mdc-list/mdc-list-demo.scss new file mode 100644 index 000000000000..fc16b362cfc1 --- /dev/null +++ b/src/dev-app/mdc-list/mdc-list-demo.scss @@ -0,0 +1,27 @@ +.demo-list { + display: flex; + flex-flow: row wrap; + + .mat-mdc-list-base { + border: 1px solid rgba(0, 0, 0, 0.12); + width: 350px; + margin: 20px 20px 0 0; + } + + h2 { + margin-top: 20px; + } + + .mat-icon { + color: rgba(0, 0, 0, 0.12); + } + + .mat-mdc-list-icon { + color: white; + background: rgba(0, 0, 0, 0.3); + } +} + +.demo-secondary-text { + color: rgba(0, 0, 0, 0.54); +} diff --git a/src/dev-app/mdc-list/mdc-list-demo.ts b/src/dev-app/mdc-list/mdc-list-demo.ts new file mode 100644 index 000000000000..68ec758a79a1 --- /dev/null +++ b/src/dev-app/mdc-list/mdc-list-demo.ts @@ -0,0 +1,78 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Component} from '@angular/core'; + + +@Component({ + selector: 'mdc-list-demo', + templateUrl: 'mdc-list-demo.html', + styleUrls: ['mdc-list-demo.css'], +}) +export class MdcListDemo { + items: string[] = [ + 'Pepper', + 'Salt', + 'Paprika' + ]; + + contacts: {name: string, headline: string}[] = [ + {name: 'Nancy', headline: 'Software engineer'}, + {name: 'Mary', headline: 'TPM'}, + {name: 'Bobby', headline: 'UX designer'} + ]; + + messages: {from: string, subject: string, message: string, image: string}[] = [ + { + from: 'Nancy', + subject: 'Brunch?', + message: 'Did you want to go on Sunday? I was thinking that might work.', + image: 'https://angular.io/generated/images/bios/julie-ralph.jpg' + }, + { + from: 'Mary', + subject: 'Summer BBQ', + message: 'Wish I could come, but I have some prior obligations.', + image: 'https://angular.io/generated/images/bios/juleskremer.jpg' + }, + { + from: 'Bobby', + subject: 'Oui oui', + message: 'Do you have Paris reservations for the 15th? I just booked!', + image: 'https://angular.io/generated/images/bios/jelbourn.jpg' + } + ]; + + links: {name: string}[] = [ + {name: 'Inbox'}, + {name: 'Outbox'}, + {name: 'Spam'}, + {name: 'Trash'} + + ]; + + thirdLine = false; + infoClicked = false; + selectionListDisabled = false; + selectionListRippleDisabled = false; + + selectedOptions: string[] = ['apples']; + changeEventCount = 0; + modelChangeEventCount = 0; + + onSelectedOptionsChange(values: string[]) { + this.selectedOptions = values; + this.modelChangeEventCount++; + } + + favoriteOptions: string[] = []; + + alertItem(msg: string) { + alert(msg); + } +} diff --git a/src/material-experimental/mdc-list/BUILD.bazel b/src/material-experimental/mdc-list/BUILD.bazel index f3a711221031..c5f15a2c660a 100644 --- a/src/material-experimental/mdc-list/BUILD.bazel +++ b/src/material-experimental/mdc-list/BUILD.bazel @@ -22,6 +22,7 @@ ng_module( assets = [":list_scss"] + glob(["**/*.html"]), module_name = "@angular/material-experimental/mdc-list", deps = [ + "//src/material/divider", "@npm//@angular/core", "@npm//@angular/forms", "@npm//@material/list", diff --git a/src/material-experimental/mdc-list/_list-theme.scss b/src/material-experimental/mdc-list/_list-theme.scss index 9bff8ce892c1..03e3f7729e96 100644 --- a/src/material-experimental/mdc-list/_list-theme.scss +++ b/src/material-experimental/mdc-list/_list-theme.scss @@ -1,5 +1,14 @@ +@import '@material/list/mixins.import'; +@import '../mdc-helpers/mdc-helpers'; + @mixin mat-list-theme-mdc($theme) { + @include mat-using-mdc-theme($theme) { + @include mdc-list-without-ripple($query: $mat-theme-styles-query); + } } -@mixin mat-list-typography-mdc($config) { +@mixin mat-list-typography-mdc($config: null) { + @include mat-using-mdc-typography($config) { + @include mdc-list-without-ripple($query: $mat-typography-styles-query); + } } diff --git a/src/material-experimental/mdc-list/action-list.ts b/src/material-experimental/mdc-list/action-list.ts index 914b7ea216ad..b407dee1cd7b 100644 --- a/src/material-experimental/mdc-list/action-list.ts +++ b/src/material-experimental/mdc-list/action-list.ts @@ -12,9 +12,9 @@ import {MatListBase} from './list-base'; @Component({ selector: 'mat-action-list', exportAs: 'matActionList', - templateUrl: 'list.html', + template: '', host: { - 'class': 'mat-mdc-action-list mat-mdc-list-base', + 'class': 'mat-mdc-action-list mat-mdc-list-base mdc-list', }, styleUrls: ['list.css'], encapsulation: ViewEncapsulation.None, diff --git a/src/material-experimental/mdc-list/list-item.html b/src/material-experimental/mdc-list/list-item.html index 05ec09f3cd49..91b88fdf57fa 100644 --- a/src/material-experimental/mdc-list/list-item.html +++ b/src/material-experimental/mdc-list/list-item.html @@ -1 +1 @@ -TODO: Implement. + diff --git a/src/material-experimental/mdc-list/list.html b/src/material-experimental/mdc-list/list.html deleted file mode 100644 index 05ec09f3cd49..000000000000 --- a/src/material-experimental/mdc-list/list.html +++ /dev/null @@ -1 +0,0 @@ -TODO: Implement. diff --git a/src/material-experimental/mdc-list/list.scss b/src/material-experimental/mdc-list/list.scss index d2c9e34f2484..efba495ceb33 100644 --- a/src/material-experimental/mdc-list/list.scss +++ b/src/material-experimental/mdc-list/list.scss @@ -1 +1,10 @@ -// TODO: implement. +@import '@material/list/mixins.import'; +@import '../mdc-helpers/mdc-helpers'; + +@include mdc-list-without-ripple($query: $mat-base-styles-query); + +// MDC expects the list element to be a `