Skip to content

Commit b1e1e4b

Browse files
zarendamysorto
authored andcommitted
docs(material/datepicker): require communicating date format for a11y (#24682)
In the accessibility section of the datepicker documentation, require communicating the date format string (e.g. 'MM/DD/YYYY'). Update datepicker examples to show the date format string via `<mat-hint>` and use 'en-US' as the locale. This commit only changes examples and does not affect source code. Addresses #11127 (cherry picked from commit 6118b68)
1 parent ecd24e9 commit b1e1e4b

File tree

25 files changed

+55
-5
lines changed

25 files changed

+55
-5
lines changed

src/components-examples/material/datepicker/date-range-picker-comparison/date-range-picker-comparison-example.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<input matStartDate placeholder="Start date" formControlName="start">
99
<input matEndDate placeholder="End date" formControlName="end">
1010
</mat-date-range-input>
11+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
1112
<mat-datepicker-toggle matSuffix [for]="campaignOnePicker"></mat-datepicker-toggle>
1213
<mat-date-range-picker #campaignOnePicker></mat-date-range-picker>
1314
</mat-form-field>
@@ -23,5 +24,6 @@
2324
<input matEndDate placeholder="End date" formControlName="end">
2425
</mat-date-range-input>
2526
<mat-datepicker-toggle matSuffix [for]="campaignTwoPicker"></mat-datepicker-toggle>
27+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
2628
<mat-date-range-picker #campaignTwoPicker></mat-date-range-picker>
2729
</mat-form-field>

src/components-examples/material/datepicker/date-range-picker-forms/date-range-picker-forms-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<input matStartDate formControlName="start" placeholder="Start date">
55
<input matEndDate formControlName="end" placeholder="End date">
66
</mat-date-range-input>
7+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
78
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
89
<mat-date-range-picker #picker></mat-date-range-picker>
910

src/components-examples/material/datepicker/date-range-picker-overview/date-range-picker-overview-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<input matStartDate placeholder="Start date">
55
<input matEndDate placeholder="End date">
66
</mat-date-range-input>
7+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
78
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
89
<mat-date-range-picker #picker></mat-date-range-picker>
910
</mat-form-field>

src/components-examples/material/datepicker/date-range-picker-selection-strategy/date-range-picker-selection-strategy-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<input matStartDate placeholder="Start date">
55
<input matEndDate placeholder="End date">
66
</mat-date-range-input>
7+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
78
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
89
<mat-date-range-picker #picker></mat-date-range-picker>
910
</mat-form-field>

src/components-examples/material/datepicker/datepicker-actions/datepicker-actions-example.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill" class="example-form-field">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="datepicker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="datepicker"></mat-datepicker-toggle>
56
<!-- #docregion datepicker-actions -->
67
<mat-datepicker #datepicker>
@@ -18,6 +19,7 @@
1819
<input matStartDate placeholder="Start date">
1920
<input matEndDate placeholder="End date">
2021
</mat-date-range-input>
22+
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
2123
<mat-datepicker-toggle matSuffix [for]="rangePicker"></mat-datepicker-toggle>
2224
<!-- #docregion date-range-picker-actions -->
2325
<mat-date-range-picker #rangePicker>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker #picker></mat-datepicker>
56
</mat-form-field>
67
<button mat-raised-button (click)="picker.open()">Open</button>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
<mat-form-field color="accent" appearance="fill">
22
<mat-label>Inherited calendar color</mat-label>
33
<input matInput [matDatepicker]="picker1">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
56
<mat-datepicker #picker1></mat-datepicker>
67
</mat-form-field>
78

89
<mat-form-field color="accent" appearance="fill">
910
<mat-label>Custom calendar color</mat-label>
1011
<input matInput [matDatepicker]="picker2">
12+
<mat-hint>MM/DD/YYYY</mat-hint>
1113
<mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
1214
<mat-datepicker #picker2 color="primary"></mat-datepicker>
1315
</mat-form-field>
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Custom calendar header</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker #picker [calendarHeaderComponent]="exampleHeader"></mat-datepicker>
67
</mat-form-field>

src/components-examples/material/datepicker/datepicker-custom-icon/datepicker-custom-icon-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker">
56
<mat-icon matDatepickerToggleIcon>keyboard_arrow_down</mat-icon>
67
</mat-datepicker-toggle>
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker [dateClass]="dateClass" #picker></mat-datepicker>
67
</mat-form-field>

src/components-examples/material/datepicker/datepicker-disabled/datepicker-disabled-example.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<mat-form-field appearance="fill">
33
<mat-label>Completely disabled</mat-label>
44
<input matInput [matDatepicker]="dp1" disabled>
5+
<mat-hint>MM/DD/YYYY</mat-hint>
56
<mat-datepicker-toggle matSuffix [for]="dp1"></mat-datepicker-toggle>
67
<mat-datepicker #dp1></mat-datepicker>
78
</mat-form-field>
@@ -11,6 +12,7 @@
1112
<mat-form-field appearance="fill">
1213
<mat-label>Popup disabled</mat-label>
1314
<input matInput [matDatepicker]="dp2">
15+
<mat-hint>MM/DD/YYYY</mat-hint>
1416
<mat-datepicker-toggle matSuffix [for]="dp2" disabled></mat-datepicker-toggle>
1517
<mat-datepicker #dp2></mat-datepicker>
1618
</mat-form-field>
@@ -20,6 +22,7 @@
2022
<mat-form-field appearance="fill">
2123
<mat-label>Input disabled</mat-label>
2224
<input matInput [matDatepicker]="dp3" disabled>
25+
<mat-hint>MM/DD/YYYY</mat-hint>
2326
<mat-datepicker-toggle matSuffix [for]="dp3"></mat-datepicker-toggle>
2427
<mat-datepicker #dp3 disabled="false"></mat-datepicker>
2528
</mat-form-field>

src/components-examples/material/datepicker/datepicker-events/datepicker-events-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<mat-label>Input & change events</mat-label>
33
<input matInput [matDatepicker]="picker"
44
(dateInput)="addEvent('input', $event)" (dateChange)="addEvent('change', $event)">
5+
<mat-hint>MM/DD/YYYY</mat-hint>
56
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
67
<mat-datepicker #picker></mat-datepicker>
78
</mat-form-field>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepickerFilter]="myFilter" [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker #picker></mat-datepicker>
67
</mat-form-field>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Verbose datepicker</mat-label>
33
<input matInput [matDatepicker]="dp" [formControl]="date">
4+
<mat-hint>MMMM DD, YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="dp"></mat-datepicker-toggle>
56
<mat-datepicker #dp></mat-datepicker>
67
</mat-form-field>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Different locale</mat-label>
33
<input matInput [matDatepicker]="dp">
4+
<mat-hint>{{getDateFormatString()}}</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="dp"></mat-datepicker-toggle>
56
<mat-datepicker #dp></mat-datepicker>
67
</mat-form-field>
7-
88
<button mat-button (click)="french()">Dynamically switch to French</button>

src/components-examples/material/datepicker/datepicker-locale/datepicker-locale-example.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component} from '@angular/core';
1+
import {Component, Inject} from '@angular/core';
22
import {
33
MAT_MOMENT_DATE_FORMATS,
44
MomentDateAdapter,
@@ -30,9 +30,22 @@ import 'moment/locale/fr';
3030
],
3131
})
3232
export class DatepickerLocaleExample {
33-
constructor(private _adapter: DateAdapter<any>) {}
33+
constructor(
34+
private _adapter: DateAdapter<any>,
35+
@Inject(MAT_DATE_LOCALE) private _locale: string,
36+
) {}
3437

3538
french() {
36-
this._adapter.setLocale('fr');
39+
this._locale = 'fr';
40+
this._adapter.setLocale(this._locale);
41+
}
42+
43+
getDateFormatString(): string {
44+
if (this._locale === 'ja-JP') {
45+
return 'YYYY/MM/DD';
46+
} else if (this._locale === 'fr') {
47+
return 'DD/MM/YYYY';
48+
}
49+
return '';
3750
}
3851
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker #picker></mat-datepicker>
67
</mat-form-field>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Moment.js datepicker</mat-label>
33
<input matInput [matDatepicker]="dp" [formControl]="date">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="dp"></mat-datepicker-toggle>
56
<mat-datepicker #dp></mat-datepicker>
67
</mat-form-field>

src/components-examples/material/datepicker/datepicker-overview/datepicker-overview-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<mat-label>Choose a date</mat-label>
33
<!-- #docregion toggle -->
44
<input matInput [matDatepicker]="picker">
5+
<mat-hint>MM/DD/YYYY</mat-hint>
56
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
67
<mat-datepicker #picker></mat-datepicker>
78
<!-- #enddocregion toggle -->
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker #picker startView="year" [startAt]="startDate"></mat-datepicker>
67
</mat-form-field>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field class="example-full-width" appearance="fill">
22
<mat-label>Choose a date</mat-label>
33
<input matInput [matDatepicker]="picker">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
56
<mat-datepicker touchUi #picker></mat-datepicker>
67
</mat-form-field>

src/components-examples/material/datepicker/datepicker-value/datepicker-value-example.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Angular forms</mat-label>
33
<input matInput [matDatepicker]="picker1" [formControl]="date">
4+
<mat-hint>MM/DD/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
56
<mat-datepicker #picker1></mat-datepicker>
67
</mat-form-field>
@@ -9,13 +10,15 @@
910
<mat-label>Angular forms (w/ deserialization)</mat-label>
1011
<input matInput [matDatepicker]="picker2"
1112
[formControl]="serializedDate">
13+
<mat-hint>MM/DD/YYYY</mat-hint>
1214
<mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
1315
<mat-datepicker #picker2></mat-datepicker>
1416
</mat-form-field>
1517

1618
<mat-form-field appearance="fill">
1719
<mat-label>Value binding</mat-label>
1820
<input matInput [matDatepicker]="picker3" [value]="date.value">
21+
<mat-hint>MM/DD/YYYY</mat-hint>
1922
<mat-datepicker-toggle matSuffix [for]="picker3"></mat-datepicker-toggle>
2023
<mat-datepicker #picker3></mat-datepicker>
2124
</mat-form-field>

src/components-examples/material/datepicker/datepicker-views-selection/datepicker-views-selection-example.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<mat-form-field appearance="fill">
22
<mat-label>Month and Year</mat-label>
33
<input matInput [matDatepicker]="dp" [formControl]="date">
4+
<mat-hint>MM/YYYY</mat-hint>
45
<mat-datepicker-toggle matSuffix [for]="dp"></mat-datepicker-toggle>
56
<mat-datepicker #dp
67
startView="multi-year"

src/components-examples/material/datepicker/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {NgModule} from '@angular/core';
33
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
44
import {MatButtonModule} from '@angular/material/button';
55
import {MatCardModule} from '@angular/material/card';
6-
import {MatNativeDateModule} from '@angular/material/core';
6+
import {MatNativeDateModule, MAT_DATE_LOCALE} from '@angular/material/core';
77
import {MatDatepickerModule} from '@angular/material/datepicker';
88
import {MatIconModule} from '@angular/material/icon';
99
import {MatInputModule} from '@angular/material/input';
@@ -106,5 +106,11 @@ const EXAMPLES = [
106106
],
107107
declarations: EXAMPLES,
108108
exports: EXAMPLES,
109+
providers: [
110+
// Except in specific examples, use 'en-US' locale in datepicker examples. This ensures that
111+
// the hardcoded date format strings displayed in `<mat-hint>` will match the format used by
112+
// `NativeDateModule`.
113+
{provide: MAT_DATE_LOCALE, useValue: 'en-US'},
114+
],
109115
})
110116
export class DatepickerExamplesModule {}

src/material/datepicker/datepicker.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,9 @@ attribute to the native input and button elements, respectively.
581581
the datepicker text input a meaningful label via `<mat-label>`, `aria-label`, `aria-labelledby` or
582582
`MatDatepickerIntl`.
583583

584+
Always communicate the date format (e.g. 'MM/DD/YYYY'). This can be accomplished using `<mat-hint>`
585+
or by providing an additional label adjacent to the form field.
586+
584587
`MatDatepickerInput` adds <kbd>>Alt</kbd> + <kbd>Down Arrow</kbd> as a keyboard short to open the
585588
datepicker pop-up. However, ChromeOS intercepts this key combination at the OS level such that the
586589
browser only receives a `PageDown` key event. Because of this behavior, you should always include an

0 commit comments

Comments
 (0)