diff --git a/src/material/datepicker/calendar-header.html b/src/material/datepicker/calendar-header.html index 8c577dcc4f60..32d7a24f263b 100644 --- a/src/material/datepicker/calendar-header.html +++ b/src/material/datepicker/calendar-header.html @@ -2,10 +2,11 @@
diff --git a/src/material/datepicker/calendar-header.spec.ts b/src/material/datepicker/calendar-header.spec.ts index ce6c19dbe7b2..26ca0d653498 100644 --- a/src/material/datepicker/calendar-header.spec.ts +++ b/src/material/datepicker/calendar-header.spec.ts @@ -203,6 +203,14 @@ describe('MatCalendarHeader', () => { expect(calendarInstance.currentView).toBe('multi-year'); expect(periodButton.textContent).toContain('FAKE_YEAR'); }); + + it('should label and describe period button for assistive technology', () => { + const description = periodButton.querySelector('span[id]'); + expect(periodButton.hasAttribute('aria-label')).toBe(true); + expect(periodButton.hasAttribute('aria-describedby')).toBe(true); + expect(periodButton.getAttribute('aria-describedby')).toBe(description?.getAttribute('id')!); + }); + }); describe('calendar with minDate only', () => { diff --git a/src/material/datepicker/calendar.ts b/src/material/datepicker/calendar.ts index 1548e51c35f2..2724cfabe834 100644 --- a/src/material/datepicker/calendar.ts +++ b/src/material/datepicker/calendar.ts @@ -50,6 +50,9 @@ import {MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, DateRange} from './date-select */ export type MatCalendarView = 'month' | 'year' | 'multi-year'; +/** Counter used to generate unique IDs. */ +let uniqueId = 0; + /** Default header for MatCalendar */ @Component({ selector: 'mat-calendar-header', @@ -59,6 +62,8 @@ export type MatCalendarView = 'month' | 'year' | 'multi-year'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class MatCalendarHeader { + _buttonDescriptionId = `mat-calendar-button-${uniqueId++}`; + constructor(private _intl: MatDatepickerIntl, @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar, @Optional() private _dateAdapter: DateAdapter, diff --git a/tools/public_api_guard/material/datepicker.d.ts b/tools/public_api_guard/material/datepicker.d.ts index d0d94f8a916c..2b2b7ade3384 100644 --- a/tools/public_api_guard/material/datepicker.d.ts +++ b/tools/public_api_guard/material/datepicker.d.ts @@ -156,6 +156,7 @@ export declare type MatCalendarCellCssClasses = string | string[] | Set }; export declare class MatCalendarHeader { + _buttonDescriptionId: string; calendar: MatCalendar; get nextButtonLabel(): string; get periodButtonLabel(): string;