diff --git a/.bazelrc b/.bazelrc index c5f13f75da26..9d0ae2aea127 100644 --- a/.bazelrc +++ b/.bazelrc @@ -42,7 +42,7 @@ build:release --workspace_status_command="node ./tools/bazel-stamp-vars.js" # Use the legacy AOT compiler strategy. We don't want to compile with Ivy nor with "ngtsc" which # does not generate factory files which are needed for AOT. -build --define=compile=legacy +build --define=compile=aot ####################### # Remote HTTP Caching # diff --git a/package.json b/package.json index d5b5ffe02d94..6fbd8871ebb9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "yarn": ">= 1.17.3" }, "scripts": { - "postinstall": "node --preserve-symlinks --preserve-symlinks-main tools/bazel/postinstall-patches.js", + "postinstall": "node --preserve-symlinks --preserve-symlinks-main tools/bazel/postinstall-patches.js | ivy-ngcc --properties es2015 --create-ivy-entry-points", "build": "bash ./scripts/build-packages-dist.sh", "bazel:buildifier": "find . -type f \\( -name \"*.bzl\" -or -name WORKSPACE -or -name BUILD -or -name BUILD.bazel \\) ! -path \"*/node_modules/*\" | xargs buildifier -v --warnings=attr-cfg,attr-license,attr-non-empty,attr-output-default,attr-single-file,constant-glob,ctx-args,depset-iteration,depset-union,dict-concatenation,duplicated-name,filetype,git-repository,http-archive,integer-division,load,load-on-top,native-build,native-package,output-group,package-name,package-on-top,redefined-variable,repository-name,same-origin-load,string-iteration,unused-variable,unsorted-dict-items,out-of-order-load", "bazel:format-lint": "yarn -s bazel:buildifier --lint=warn --mode=check", @@ -51,12 +51,12 @@ "@types/googlemaps": "^3.37.0", "@types/youtube": "^0.0.38", "@webcomponents/custom-elements": "^1.1.0", - "core-js": "^2.6.1", + "core-js": "^2.6.9", "material-components-web": "^4.0.0-canary.e851d4f40.0", "rxjs": "^6.5.3", "systemjs": "0.19.43", "tsickle": "^0.35.0", - "tslib": "^1.9.3", + "tslib": "^1.10.0", "zone.js": "~0.10.2" }, "devDependencies": { @@ -98,11 +98,11 @@ "browser-sync": "^2.26.7", "chalk": "^2.4.2", "clang-format": "^1.2.4", - "codelyzer": "^5.1.1", + "codelyzer": "^5.1.2", "conventional-changelog": "^3.0.5", "dgeni": "^0.4.11", "dgeni-packages": "^0.27.1", - "firebase-tools": "^4.1.0", + "firebase-tools": "^7.5.0", "fs-extra": "^3.0.1", "glob": "^7.1.2", "gulp": "^3.9.1", @@ -151,7 +151,7 @@ "ts-api-guardian": "^0.4.6", "ts-node": "^3.0.4", "tsconfig-paths": "^2.3.0", - "tslint": "^5.19.0", + "tslint": "^5.20.0", "tsutils": "^3.0.0", "typescript": "3.5.3", "uglify-js": "^2.8.14" diff --git a/src/cdk/stepper/stepper.ts b/src/cdk/stepper/stepper.ts index f5a2e59cf349..71dd1d37d693 100644 --- a/src/cdk/stepper/stepper.ts +++ b/src/cdk/stepper/stepper.ts @@ -124,7 +124,8 @@ export class CdkStep implements OnChanges { @ViewChild(TemplateRef, {static: true}) content: TemplateRef; /** The top level abstract control of the step. */ - @Input() stepControl: FormControlLike; + // TODO figure out how to support FormGroup here + @Input() stepControl: FormControlLike | any; /** Whether user has seen the expanded step content or not. */ interacted = false; diff --git a/src/dev-app/badge/badge-demo.html b/src/dev-app/badge/badge-demo.html index 029c183d6bdd..c07828170996 100644 --- a/src/dev-app/badge/badge-demo.html +++ b/src/dev-app/badge/badge-demo.html @@ -6,7 +6,7 @@

Text

Hello - + Hello diff --git a/src/dev-app/checkbox/checkbox-demo.ts b/src/dev-app/checkbox/checkbox-demo.ts index a56c4d3afa27..ea4535e60b05 100644 --- a/src/dev-app/checkbox/checkbox-demo.ts +++ b/src/dev-app/checkbox/checkbox-demo.ts @@ -9,6 +9,7 @@ import {Component, Directive} from '@angular/core'; import {MAT_CHECKBOX_CLICK_ACTION} from '@angular/material/checkbox'; import {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations'; +import {ThemePalette} from '@angular/material/core'; export interface Task { @@ -46,7 +47,7 @@ export class AnimationsNoop { margin-bottom: 4px; } `], - templateUrl: 'nested-checklist.html', + templateUrl: './nested-checklist.html', }) export class MatCheckboxDemoNestedChecklist { tasks: Task[] = [ @@ -76,12 +77,18 @@ export class MatCheckboxDemoNestedChecklist { return task.completed || (subtasks != null && subtasks.every(t => t.completed)); } - someComplete(tasks: Task[]): boolean { + someComplete(tasks: Task[] | undefined | null): boolean { + if (tasks === undefined || tasks === null) { + return false; + } const numComplete = tasks.filter(t => t.completed).length; return numComplete > 0 && numComplete < tasks.length; } - setAllCompleted(tasks: Task[], completed: boolean) { + setAllCompleted(tasks: Task[] | undefined | null, completed: boolean): void { + if (tasks === undefined || tasks === null) { + return; + } tasks.forEach(t => t.completed = completed); } } @@ -96,7 +103,7 @@ export class CheckboxDemo { isIndeterminate: boolean = false; isChecked: boolean = false; isDisabled: boolean = false; - labelPosition: string = 'after'; + labelPosition: 'after' | 'before' = 'after'; useAlternativeColor: boolean = false; demoRequired = false; @@ -104,12 +111,12 @@ export class CheckboxDemo { demoChecked = false; demoDisabled = false; demoIndeterminate = false; - demoLabel = null; + demoLabel = ''; demoLabelledBy = null; - demoId = null; - demoName = null; - demoValue = null; - demoColor = 'primary'; + demoId = ''; + demoName = ''; + demoValue = ''; + demoColor: ThemePalette = 'primary'; demoDisableRipple = false; demoHideLabel = false; diff --git a/src/dev-app/chips/chips-demo.ts b/src/dev-app/chips/chips-demo.ts index 8a5c79572367..fbf3e2b7813c 100644 --- a/src/dev-app/chips/chips-demo.ts +++ b/src/dev-app/chips/chips-demo.ts @@ -30,7 +30,7 @@ export interface DemoColor { export class ChipsDemo { tabIndex = 0; visible = true; - color = ''; + color: ThemePalette = undefined; selectable = true; removable = true; addOnBlur = true; diff --git a/src/dev-app/connected-overlay/connected-overlay-demo.html b/src/dev-app/connected-overlay/connected-overlay-demo.html index 77dd7445d092..9ab9d62c941f 100644 --- a/src/dev-app/connected-overlay/connected-overlay-demo.html +++ b/src/dev-app/connected-overlay/connected-overlay-demo.html @@ -97,7 +97,7 @@

Options

diff --git a/src/dev-app/datepicker/datepicker-demo.html b/src/dev-app/datepicker/datepicker-demo.html index 3abeedf1d183..31c76d68a393 100644 --- a/src/dev-app/datepicker/datepicker-demo.html +++ b/src/dev-app/datepicker/datepicker-demo.html @@ -51,7 +51,7 @@

Result

[(ngModel)]="date" [min]="minDate" [max]="maxDate" - [matDatepickerFilter]="filterOdd ? dateFilter : null" + [matDatepickerFilter]="filterOdd ? dateFilter : undefined" [disabled]="inputDisabled" (dateInput)="onDateInput($event)" (dateChange)="onDateChange($event)"> @@ -81,7 +81,7 @@

Result

[min]="minDate" [max]="maxDate" [disabled]="inputDisabled" - [matDatepickerFilter]="filterOdd ? dateFilter : null" + [matDatepickerFilter]="filterOdd ? dateFilter : undefined" placeholder="Pick a date"> Input disabled datepicker Input disabled + [matDatepickerFilter]="filterOdd ? dateFilter : undefined" disabled> @@ -111,7 +111,7 @@

Input disabled via FormControl

FormControl disabled + [max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined"> @@ -127,7 +127,7 @@

Input disabled, datepicker popup enabled

Input disabled, datepicker enabled + [max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined"> @@ -138,8 +138,9 @@

Datepicker with value property binding

Value binding + + [max]="maxDate" [matDatepickerFilter]="filterOdd ? dateFilter : undefined"> diff --git a/src/dev-app/datepicker/datepicker-demo.ts b/src/dev-app/datepicker/datepicker-demo.ts index d30a8c19ab87..2d1510570f76 100644 --- a/src/dev-app/datepicker/datepicker-demo.ts +++ b/src/dev-app/datepicker/datepicker-demo.ts @@ -42,15 +42,20 @@ export class DatepickerDemo { minDate: Date; maxDate: Date; startAt: Date; - date: Date; + date: any; lastDateInput: Date | null; lastDateChange: Date | null; color: ThemePalette; dateCtrl = new FormControl(); - dateFilter = - (date: Date) => !(date.getFullYear() % 2) && (date.getMonth() % 2) && !(date.getDate() % 2) + dateFilter: (date: Date | null) => boolean = + (date: Date | null) => { + if (date === null) { + return true; + } + return !(date.getFullYear() % 2) && Boolean(date.getMonth() % 2) && !(date.getDate() % 2); + } onDateInput = (e: MatDatepickerInputEvent) => this.lastDateInput = e.value; onDateChange = (e: MatDatepickerInputEvent) => this.lastDateChange = e.value; @@ -58,6 +63,10 @@ export class DatepickerDemo { // pass custom header component type as input customHeader = CustomHeader; customHeaderNgContent = CustomHeaderNgContent; + + constructor() { + + } } // Custom header component for datepicker diff --git a/src/dev-app/expansion/expansion-demo.ts b/src/dev-app/expansion/expansion-demo.ts index 42d289c30e2b..6afd98baa294 100644 --- a/src/dev-app/expansion/expansion-demo.ts +++ b/src/dev-app/expansion/expansion-demo.ts @@ -19,12 +19,12 @@ import {MatAccordion} from '@angular/material/expansion'; export class ExpansionDemo { @ViewChild(MatAccordion, {static: false}) accordion: MatAccordion; - displayMode = 'default'; + displayMode: 'default' | 'flat' = 'default'; multi = false; hideToggle = false; disabled = false; showPanel3 = true; - togglePosition = 'after'; + togglePosition: 'before' | 'after' = 'after'; expandedHeight: string; collapsedHeight: string; events: string[] = []; diff --git a/src/dev-app/grid-list/grid-list-demo.ts b/src/dev-app/grid-list/grid-list-demo.ts index be82d7b85196..3faab94482bb 100644 --- a/src/dev-app/grid-list/grid-list-demo.ts +++ b/src/dev-app/grid-list/grid-list-demo.ts @@ -35,7 +35,7 @@ export class GridListDemo { basicRowHeight = 80; fixedCols = 4; fixedRowHeight = 100; - ratioGutter = 1; + ratioGutter = '1'; fitListHeight = '400px'; ratio = '4:1'; diff --git a/src/dev-app/input/input-demo.html b/src/dev-app/input/input-demo.html index 5defa027774d..b3c011b1b38c 100644 --- a/src/dev-app/input/input-demo.html +++ b/src/dev-app/input/input-demo.html @@ -363,6 +363,7 @@

Textarea

Email address + email   @gmail.com @@ -548,6 +549,7 @@

Regular <textarea> with maxRows and minRows

  +