diff --git a/e2e/testcafe-devextreme/tests/accessibility/scheduler/appointment.ts b/e2e/testcafe-devextreme/tests/accessibility/scheduler/appointment.ts index b9533979d68c..6a7727e2871a 100644 --- a/e2e/testcafe-devextreme/tests/accessibility/scheduler/appointment.ts +++ b/e2e/testcafe-devextreme/tests/accessibility/scheduler/appointment.ts @@ -16,7 +16,7 @@ const currentDate = Date.UTC(2021, 1, 1); const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.text}
`; ['month', 'week', 'day', 'agenda'].forEach((currentView) => { - test(`appointment should have correct aria-label without description (${currentView})`, async (t) => { + test(`appointment should have correct aria-label and have description (${currentView})`, async (t) => { const scheduler = new Scheduler('#container'); const appointment = scheduler.getAppointment('App 1'); @@ -24,7 +24,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex .expect(appointment.getAriaLabel()) .eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM') .expect(await appointment.hasAriaDescription()) - .notOk(); + .ok(); await a11yCheck(t, a11yCheckConfig, '#container'); }).before(async () => { @@ -36,7 +36,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex }); }); - test(`appointment with template should have correct aria-label without description (${currentView})`, async (t) => { + test(`appointment with template should have correct aria-label and have description (${currentView})`, async (t) => { const scheduler = new Scheduler('#container'); const appointment = scheduler.getAppointment('App 1'); @@ -44,7 +44,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex .expect(appointment.getAriaLabel()) .eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM') .expect(await appointment.hasAriaDescription()) - .notOk(); + .ok(); await a11yCheck(t, a11yCheckConfig, '#container'); }).before(async () => { @@ -65,7 +65,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex .expect(appointment.getAriaLabel()) .eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM') .expect(await appointment.getAriaDescription()) - .eql('Group: resource1; Group 1: resource1'); + .contains('Group: resource1; Group 1: resource1'); await a11yCheck(t, a11yCheckConfig, '#container'); }).before(async () => { @@ -99,7 +99,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex .expect(appointment.getAriaLabel()) .eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM') .expect(await appointment.getAriaDescription()) - .eql('Group: resource1; Group 1: resource1'); + .contains('Group: resource1; Group 1: resource1'); await a11yCheck(t, a11yCheckConfig, '#container'); }).before(async () => { @@ -134,7 +134,7 @@ const appointmentTemplate = ({ appointmentData }) => `
${appointmentData.tex .expect(appointment.getAriaLabel()) .eql('App 1: February 1, 2021, 12:00 PM - 1:00 PM') .expect(await appointment.getAriaDescription()) - .eql('Group: resource11, resource21; Group 1: resource11; Group 2: resource21, resource22'); + .contains('Group: resource11, resource21; Group 1: resource11; Group 2: resource21, resource22'); await a11yCheck(t, a11yCheckConfig, '#container'); }).before(async () => { diff --git a/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts b/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts index 072aafdf3f48..745573effa48 100644 --- a/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts +++ b/e2e/testcafe-devextreme/tests/accessibility/scheduler/scheduler.ts @@ -13,7 +13,7 @@ test('Scheduler should have right aria attributes after view changed', async (t) await t.expect(scheduler.element.getAttribute('aria-label')).contains('Scheduler. Month view'); await t.expect(scheduler.getGeneralStatusContainer().textContent).contains('Scheduler. Month view'); - await t.expect(scheduler.element.getAttribute('role')).eql('group'); + await t.expect(scheduler.element.getAttribute('role')).eql('application'); await scheduler.option('currentView', 'week'); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts b/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts new file mode 100644 index 000000000000..e9e97e80d4d4 --- /dev/null +++ b/e2e/testcafe-devextreme/tests/scheduler/common/keyboardNavigation/appointments.ts @@ -0,0 +1,98 @@ +import Scheduler from 'devextreme-testcafe-models/scheduler'; +import { ClientFunction } from 'testcafe'; +import url from '../../../../helpers/getPageUrl'; +import { createWidget } from '../../../../helpers/createWidget'; +import { getDocumentScrollTop } from '../../../../helpers/domUtils'; + +fixture.disablePageReloads`KeyboardNavigation.Appointments` + .page(url(__dirname, '../../../container.html')); + +const SCHEDULER_SELECTOR = '#container'; + +test('Document should not scroll on \'End\' press when appointment is focused', async (t) => { + const scheduler = new Scheduler(SCHEDULER_SELECTOR); + + await t.click(scheduler.getAppointment('Appointment 1').element); + + const expectedScrollTop = await getDocumentScrollTop(); + + await t + .pressKey('End') + .expect(getDocumentScrollTop()).eql(expectedScrollTop); +}).before(async () => { + await ClientFunction(() => { + document.body.style.height = '2000px'; + })(); + + await createWidget('dxScheduler', { + dataSource: [ + { + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }, + { + text: 'Appointment 2', + startDate: new Date(2015, 1, 9, 10), + endDate: new Date(2015, 1, 9, 11), + }, + { + text: 'Appointment 3', + startDate: new Date(2015, 1, 9, 12), + endDate: new Date(2015, 1, 9, 13), + }, + ], + height: 300, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); +}).after(async () => { + await ClientFunction(() => { + document.body.style.height = ''; + })(); +}); + +test('Document should not scroll on \'Home\' press when appointment is focused', async (t) => { + const scheduler = new Scheduler(SCHEDULER_SELECTOR); + + await t + .scroll(0, 100) + .click(scheduler.getAppointment('Appointment 1').element); + + const expectedScrollTop = await getDocumentScrollTop(); + + await t + .pressKey('Home') + .expect(getDocumentScrollTop()).eql(expectedScrollTop); +}).before(async () => { + await ClientFunction(() => { + document.body.style.height = '2000px'; + })(); + + await createWidget('dxScheduler', { + dataSource: [ + { + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }, + { + text: 'Appointment 2', + startDate: new Date(2015, 1, 9, 10), + endDate: new Date(2015, 1, 9, 11), + }, + { + text: 'Appointment 3', + startDate: new Date(2015, 1, 9, 12), + endDate: new Date(2015, 1, 9, 13), + }, + ], + height: 300, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); +}).after(async () => { + await ClientFunction(() => { + document.body.style.height = ''; + })(); +}); diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts index 06ec245aaac9..4a5cf02fd5cd 100644 --- a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts +++ b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/appointment.ts @@ -8,9 +8,11 @@ export interface AppointmentModel { getText: () => string; getDisplayDate: () => string; getAriaLabel: () => string; + getAriaDescription: () => string; getGeometry: () => Position; getColor: (view: string) => string | undefined; getSnapshot: () => object; + isFocused: () => boolean; } const getColor = (appointment: HTMLDivElement): string => appointment.style.backgroundColor; @@ -45,6 +47,11 @@ export const createAppointmentModel = ( getText: () => getText(element), getDisplayDate: () => getDisplayDate(element), getAriaLabel: () => element?.getAttribute('aria-label') ?? '', + getAriaDescription: (): string => { + const id = element?.getAttribute('aria-describedby') ?? ''; + const descriptionElement = id ? document.getElementById(id) : null; + return descriptionElement?.textContent ?? ''; + }, getGeometry: () => getGeometry(element), getColor(view: string): string | undefined { if (!element) { @@ -60,4 +67,5 @@ export const createAppointmentModel = ( date: getDisplayDate(element), ...getGeometry(element), }), + isFocused: () => element?.classList.contains('dx-state-focused') ?? false, }); diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts b/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts index e50e51e78830..b02f955123f1 100644 --- a/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts +++ b/packages/devextreme/js/__internal/scheduler/__tests__/appointments.test.ts @@ -1,16 +1,26 @@ import { - afterEach, describe, expect, it, jest, + afterEach, beforeEach, describe, expect, it, jest, } from '@jest/globals'; +import messageLocalization from '@js/common/core/localization/message'; +import $ from '@js/core/renderer'; import { createScheduler } from './__mock__/create_scheduler'; import { setupSchedulerTestEnvironment } from './__mock__/m_mock_scheduler'; describe('Appointments', () => { + beforeEach(() => { + setupSchedulerTestEnvironment(); + }); + afterEach(() => { + const $scheduler = $('.dx-scheduler'); + // @ts-expect-error + $scheduler.dxScheduler('dispose'); + document.body.innerHTML = ''; jest.useRealTimers(); }); + it('All-day appointment should not be resizable if current view is "day"', async () => { - setupSchedulerTestEnvironment(); const { POM } = await createScheduler({ dataSource: [{ text: 'Appointment 1', @@ -27,7 +37,6 @@ describe('Appointments', () => { }); it('should display "(No subject)" for appointments without title', async () => { - setupSchedulerTestEnvironment({ height: 200 }); const appointmentWithoutTitle = { startDate: new Date(2017, 4, 9, 9, 30), endDate: new Date(2017, 4, 9, 11), @@ -50,7 +59,6 @@ describe('Appointments', () => { }); it('should display "(No subject)" in tooltip for appointments without title', async () => { - setupSchedulerTestEnvironment({ height: 200 }); const appointmentWithoutTitle = { startDate: new Date(2017, 4, 9, 9, 30), endDate: new Date(2017, 4, 9, 11), @@ -81,4 +89,172 @@ describe('Appointments', () => { expect(tooltipTitleElement?.textContent?.trim()).toBe('(No subject)'); } }); + + describe('Appointment aria attributes', () => { + const deleteHotkeyText = messageLocalization.format('dxScheduler-hotkeysAriaDescription-delete'); + const homeEndHotkeysText = messageLocalization.format('dxScheduler-hotkeysAriaDescription-homeEnd'); + + it('should have correct aria-describedby when editing = false', async () => { + const { POM } = await createScheduler({ + dataSource: [{ + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }], + currentView: 'day', + currentDate: new Date(2015, 1, 9, 8), + editing: false, + }); + + const appointment = POM.getAppointment(); + expect(appointment.getAriaDescription()).toBe(homeEndHotkeysText); + }); + + it('should have correct aria-describedby when allowUpdating = true', async () => { + const { POM } = await createScheduler({ + dataSource: [{ + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }], + currentView: 'day', + currentDate: new Date(2015, 1, 9, 8), + editing: { + allowUpdating: true, + }, + }); + + const appointment = POM.getAppointment(); + expect(appointment.getAriaDescription()).toBe(`${deleteHotkeyText}; ${homeEndHotkeysText}`); + }); + + it('should have correct aria-describedby when allowUpdating = true and allowDeleting = false', async () => { + const { POM } = await createScheduler({ + dataSource: [{ + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }], + currentView: 'day', + currentDate: new Date(2015, 1, 9, 8), + editing: { + allowUpdating: true, + allowDeleting: false, + }, + }); + + const appointment = POM.getAppointment(); + expect(appointment.getAriaDescription()).toBe(homeEndHotkeysText); + }); + + it('should have correct aria-describedby when allowDeleting is updated', async () => { + const { scheduler, POM } = await createScheduler({ + dataSource: [{ + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }], + currentView: 'day', + currentDate: new Date(2015, 1, 9, 8), + editing: { + allowUpdating: true, + allowDeleting: false, + }, + }); + + scheduler.option('editing.allowDeleting', true); + await new Promise(process.nextTick); + + const appointment = POM.getAppointment(); + expect(appointment.getAriaDescription()).toBe(`${deleteHotkeyText}; ${homeEndHotkeysText}`); + }); + }); + + describe('Keyboard Navigation', () => { + const dataSource = [ + { + text: 'Appointment 1', + startDate: new Date(2015, 1, 9, 8), + endDate: new Date(2015, 1, 9, 9), + }, + { + text: 'Appointment 2', + startDate: new Date(2015, 1, 9, 10), + endDate: new Date(2015, 1, 9, 11), + }, + { + text: 'Appointment 3', + startDate: new Date(2015, 1, 9, 12), + endDate: new Date(2015, 1, 9, 13), + }, + ]; + + it('should focus first appointment on Home', async () => { + const { POM, keydown } = await createScheduler({ + dataSource, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); + + const appointments = POM.getAppointments(); + const firstAppointment = appointments[0]; + const lastAppointment = appointments[2]; + + lastAppointment.element.focus(); + keydown(lastAppointment.element, 'Home'); + + expect(firstAppointment.isFocused()).toBe(true); + expect(lastAppointment.isFocused()).toBe(false); + }); + + it('should focus last appointment on End', async () => { + const { POM, keydown } = await createScheduler({ + dataSource, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); + + const appointments = POM.getAppointments(); + const firstAppointment = appointments[0]; + const lastAppointment = appointments[2]; + + firstAppointment.element.focus(); + keydown(firstAppointment.element, 'End'); + + expect(firstAppointment.isFocused()).toBe(false); + expect(lastAppointment.isFocused()).toBe(true); + }); + + it('should not change focus when Home is pressed on the first appointment', async () => { + const { POM, keydown } = await createScheduler({ + dataSource, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); + + const appointments = POM.getAppointments(); + const firstAppointment = appointments[0]; + + firstAppointment.element.focus(); + keydown(firstAppointment.element, 'Home'); + + expect(firstAppointment.isFocused()).toBe(true); + }); + + it('should not change focus when End is pressed on the last appointment', async () => { + const { POM, keydown } = await createScheduler({ + dataSource, + currentView: 'day', + currentDate: new Date(2015, 1, 9), + }); + + const appointments = POM.getAppointments(); + const lastAppointment = appointments[2]; + + lastAppointment.element.focus(); + keydown(lastAppointment.element, 'End'); + + expect(lastAppointment.isFocused()).toBe(true); + }); + }); }); diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts index d92be8078b3b..b00534f0106a 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts @@ -193,15 +193,15 @@ export class Appointment extends DOMComponent { // eslint-disable-next-line no-void void getAriaDescription(this.option()) .then((text) => { - if (text) { - const id = `dx-${new Guid()}`; - const $description = $element.find(`.${APPOINTMENT_CONTENT_CLASSES.ARIA_DESCRIPTION}`); - - if ($description) { - $element.attr('aria-describedby', id); - $description.text(text).attr('id', id); - } + const $description = $element.find(`.${APPOINTMENT_CONTENT_CLASSES.ARIA_DESCRIPTION}`); + + if (!text || !$description.length) { + return; } + + const id = `dx-${new Guid()}`; + $element.attr('aria-describedby', id); + $description.text(text).attr('id', id); }); } diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts index 42daf2e45316..4b0e3bd34090 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/m_types.ts @@ -14,6 +14,7 @@ export interface AppointmentProperties extends Record { direction: Orientation; allowResize: boolean; allowDrag: boolean; + allowDelete: boolean; allDay: boolean; reduced: string; isCompact: boolean; diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts index d3c80cffcf0c..f8423acebe58 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.test.ts @@ -83,7 +83,7 @@ describe('Appointment text utils', () => { expect(await getAriaDescription({ ...options, groupTexts: [], - })).toBe('Assignee: Samantha Bright'); + })).toContain('Assignee: Samantha Bright'); }); it('should return text with multiple resources', async () => { @@ -94,7 +94,7 @@ describe('Appointment text utils', () => { expect(await getAriaDescription({ ...options, groupTexts: [], - })).toBe('Assignee: Samantha Bright, John Heart; Room: Room 1'); + })).toContain('Assignee: Samantha Bright, John Heart; Room: Room 1'); }); it('should return text with group', async () => { @@ -103,7 +103,7 @@ describe('Appointment text utils', () => { ...options, groupIndex: 0, groupTexts: ['Samantha Bright'], - })).toBe('Group: Samantha Bright'); + })).toContain('Group: Samantha Bright'); }); it('should return text with multiple groups and resources', async () => { @@ -115,7 +115,7 @@ describe('Appointment text utils', () => { ...options, groupIndex: 1, groupTexts: ['Samantha Bright', 'Room 1'], - })).toBe('Group: Samantha Bright, Room 1; Assignee: Samantha Bright; Room: Room 1, Room 2'); + })).toContain('Group: Samantha Bright, Room 1; Assignee: Samantha Bright; Room: Room 1, Room 2'); }); }); }); diff --git a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts index 3c8efe798b7c..610a7112ea29 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/appointment/text_utils.ts @@ -68,7 +68,7 @@ const getGroupText = (options: AppointmentProperties): string => { const groupText = options.groupTexts.join(', '); // @ts-ignore @ts-expect-error - return messageLocalization.format('dxScheduler-appointmentAriaLabel-group', groupText); + return messageLocalization.format('dxScheduler-appointmentAriaDescription-group', groupText); }; const getResourceText = async (options: AppointmentProperties): Promise => { @@ -80,10 +80,14 @@ const getResourceText = async (options: AppointmentProperties): Promise => { const resources = await getResourceText(options); - const texts = [ + const text = [ getGroupText(options), ...resources, - ].filter(Boolean); + options.allowDelete + ? messageLocalization.format('dxScheduler-hotkeysAriaDescription-delete') + : null, + messageLocalization.format('dxScheduler-hotkeysAriaDescription-homeEnd'), + ].filter(Boolean).join('; '); - return texts.join('; '); + return text; }; diff --git a/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts b/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts index a03bf2f4aafc..f1a32bc4f6c3 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts @@ -223,6 +223,7 @@ class SchedulerAppointments extends CollectionWidget { break; case 'allowDrag': case 'allowResize': + case 'allowDelete': case 'allowAllDayResize': (this as any)._cleanFocusState(); this.forceRepaintAllAppointments(this.option('items') || []); @@ -232,8 +233,6 @@ class SchedulerAppointments extends CollectionWidget { this._kbn.resetTabIndex($(args.value)); super._optionChanged(args); break; - case 'allowDelete': - break; case 'focusStateEnabled': this._clearDropDownItemsElements(); this.renderDropDownAppointments(); @@ -619,6 +618,7 @@ class SchedulerAppointments extends CollectionWidget { ): void { const allowResize = this.option('allowResize') && !settings.skipResizing; const allowDrag = this.option('allowDrag'); + const allowDelete = this.option('allowDelete'); const { allDay } = settings; const { groups, groupsLeafs, resourceById } = this.getResourceManager(); const isGroupByDate = this.option('groupByDate'); @@ -631,6 +631,7 @@ class SchedulerAppointments extends CollectionWidget { direction: settings.direction || 'vertical', allowResize, allowDrag, + allowDelete, allDay, // NOTE: hide reduced icon for grouped by date workspace reduced: isGroupByDate ? undefined : settings.reduced, diff --git a/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts b/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts index 88124bb7beb2..56c01578c029 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/m_appointments_kbn.ts @@ -59,6 +59,8 @@ export class AppointmentsKeyboardNavigation { escape: this.escHandler.bind(this), del: this.delHandler.bind(this), tab: this.tabHandler.bind(this), + home: this.homeHandler.bind(this), + end: this.endHandler.bind(this), }; } @@ -87,8 +89,7 @@ export class AppointmentsKeyboardNavigation { $nextAppointment = this.getFocusableItemBySortedIndex(index); } - this.resetTabIndex($nextAppointment); - eventsEngine.trigger($nextAppointment, 'focus'); + this.focusItem($nextAppointment); } } @@ -115,4 +116,33 @@ export class AppointmentsKeyboardNavigation { resizableInstance._toggleResizingClass(false); } } + + private homeHandler(e: DxEvent): void { + e.preventDefault(); + + const $firstItem = this.getFocusableItems().first(); + + if (this.$focusedItem && $firstItem.is(this.$focusedItem)) { + return; + } + + this.focusItem($firstItem); + } + + private endHandler(e: DxEvent): void { + e.preventDefault(); + + const $lastItem = this.getFocusableItems().last(); + + if (this.$focusedItem && $lastItem.is(this.$focusedItem)) { + return; + } + + this.focusItem($lastItem); + } + + private focusItem($item: dxElementWrapper): void { + this.resetTabIndex($item); + eventsEngine.trigger($item, 'focus'); + } } diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index 0c635929bded..23fdd2f53413 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -991,7 +991,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { this._a11yStatus = createA11yStatusContainer(); this._a11yStatus.prependTo(this.$element()); // @ts-expect-error - this.setAria({ role: 'group' }); + this.setAria({ role: 'application' }); } _initMarkupOnResourceLoaded() { diff --git a/packages/devextreme/js/localization/messages/ar.json b/packages/devextreme/js/localization/messages/ar.json index 2fd9446ec636..ccf0f4475004 100644 --- a/packages/devextreme/js/localization/messages/ar.json +++ b/packages/devextreme/js/localization/messages/ar.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/bg.json b/packages/devextreme/js/localization/messages/bg.json index 92b304373d28..1b70be7dad7f 100644 --- a/packages/devextreme/js/localization/messages/bg.json +++ b/packages/devextreme/js/localization/messages/bg.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/ca.json b/packages/devextreme/js/localization/messages/ca.json index 2e96b054aebe..7921028cacee 100644 --- a/packages/devextreme/js/localization/messages/ca.json +++ b/packages/devextreme/js/localization/messages/ca.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/cs.json b/packages/devextreme/js/localization/messages/cs.json index 7d6dce123b91..6e031dab8034 100644 --- a/packages/devextreme/js/localization/messages/cs.json +++ b/packages/devextreme/js/localization/messages/cs.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/da.json b/packages/devextreme/js/localization/messages/da.json index 000af0913d61..5153d6a8b1d6 100644 --- a/packages/devextreme/js/localization/messages/da.json +++ b/packages/devextreme/js/localization/messages/da.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Gruppe: {0}", + "dxScheduler-appointmentAriaDescription-group": "Gruppe: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Tilbagevendende aftale", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Aftaleliste", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/de.json b/packages/devextreme/js/localization/messages/de.json index 820fbc1bb60e..6479f5b4580c 100644 --- a/packages/devextreme/js/localization/messages/de.json +++ b/packages/devextreme/js/localization/messages/de.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "Die aktuelle Zeitanzeige ist in der Ansicht sichtbar", "dxScheduler-ariaLabel-currentIndicator-not-present": "Die aktuelle Zeitanzeige ist auf dem Bildschirm nicht sichtbar", - "dxScheduler-appointmentAriaLabel-group": "Gruppe: {0}", + "dxScheduler-appointmentAriaDescription-group": "Gruppe: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Wiederkehrender Termin", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Terminliste", "dxScheduler-newPopupTitle": "Neuer Termin", diff --git a/packages/devextreme/js/localization/messages/el.json b/packages/devextreme/js/localization/messages/el.json index 76963c3d52a5..ba4a6ad7ac70 100644 --- a/packages/devextreme/js/localization/messages/el.json +++ b/packages/devextreme/js/localization/messages/el.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/en.json b/packages/devextreme/js/localization/messages/en.json index f8493a9ee8e7..8716c6537340 100644 --- a/packages/devextreme/js/localization/messages/en.json +++ b/packages/devextreme/js/localization/messages/en.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/es.json b/packages/devextreme/js/localization/messages/es.json index 34f15c972163..ede810cc4f99 100644 --- a/packages/devextreme/js/localization/messages/es.json +++ b/packages/devextreme/js/localization/messages/es.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/fa.json b/packages/devextreme/js/localization/messages/fa.json index c07d06c1503b..f6b212f11cb1 100644 --- a/packages/devextreme/js/localization/messages/fa.json +++ b/packages/devextreme/js/localization/messages/fa.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/fi.json b/packages/devextreme/js/localization/messages/fi.json index bfcd789211ca..1a6891fe9b9f 100644 --- a/packages/devextreme/js/localization/messages/fi.json +++ b/packages/devextreme/js/localization/messages/fi.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/fr.json b/packages/devextreme/js/localization/messages/fr.json index e75febe222be..9f5726ff0242 100644 --- a/packages/devextreme/js/localization/messages/fr.json +++ b/packages/devextreme/js/localization/messages/fr.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "L'indicateur de temps actuel est visible dans la vue", "dxScheduler-ariaLabel-currentIndicator-not-present": "L'indicateur de l'heure actuelle n'est pas visible sur l'écran", - "dxScheduler-appointmentAriaLabel-group": "Groupe : {0}", + "dxScheduler-appointmentAriaDescription-group": "Groupe : {0}", "dxScheduler-appointmentAriaLabel-recurring": "Rendez-vous récurrent", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Liste des rendez-vous ", "dxScheduler-newPopupTitle": "Nouveau rendez-vous", @@ -588,7 +590,6 @@ "dxHtmlEditor-aiCommandChangeTone": "Changer le ton", "dxHtmlEditor-aiCommandTranslate": "Traduire", "dxHtmlEditor-aiCommandAskAI": "Demander à l’IA", - "dxHtmlEditor-aiCommandChangeStyleFormal": "Formel", "dxHtmlEditor-aiCommandChangeStyleInformal": "Informel", "dxHtmlEditor-aiCommandChangeStyleTechnical": "Technique", @@ -601,13 +602,11 @@ "dxHtmlEditor-aiCommandChangeStyleExpository": "Expositif", "dxHtmlEditor-aiCommandChangeStyleDescriptive": "Descriptif", "dxHtmlEditor-aiCommandChangeStyleConversational": "Conversationnel", - "dxHtmlEditor-aiCommandChangeToneProfessional": "Professionnel", "dxHtmlEditor-aiCommandChangeToneCasual": "Décontracté", "dxHtmlEditor-aiCommandChangeToneStraightforward": "Direct", "dxHtmlEditor-aiCommandChangeToneConfident": "Confiant", "dxHtmlEditor-aiCommandChangeToneFriendly": "Amical", - "dxHtmlEditor-aiCommandTranslateArabic": "Arabe", "dxHtmlEditor-aiCommandTranslateChinese": "Chinois", "dxHtmlEditor-aiCommandTranslateEnglish": "Anglais", diff --git a/packages/devextreme/js/localization/messages/hu.json b/packages/devextreme/js/localization/messages/hu.json index 0a07fa405a93..af200ee4bb35 100644 --- a/packages/devextreme/js/localization/messages/hu.json +++ b/packages/devextreme/js/localization/messages/hu.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/it.json b/packages/devextreme/js/localization/messages/it.json index d3dec65cba7e..4644b667a500 100644 --- a/packages/devextreme/js/localization/messages/it.json +++ b/packages/devextreme/js/localization/messages/it.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/ja.json b/packages/devextreme/js/localization/messages/ja.json index 46ad5ee4dde4..c93f3f37479f 100644 --- a/packages/devextreme/js/localization/messages/ja.json +++ b/packages/devextreme/js/localization/messages/ja.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/lt.json b/packages/devextreme/js/localization/messages/lt.json index 604ec07302ce..ed2477d2e04a 100644 --- a/packages/devextreme/js/localization/messages/lt.json +++ b/packages/devextreme/js/localization/messages/lt.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/lv.json b/packages/devextreme/js/localization/messages/lv.json index 7c2e65d24e12..ae8abfa6b6a5 100644 --- a/packages/devextreme/js/localization/messages/lv.json +++ b/packages/devextreme/js/localization/messages/lv.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/nb.json b/packages/devextreme/js/localization/messages/nb.json index e35b82f3d5ab..e3d2ef5c87b9 100644 --- a/packages/devextreme/js/localization/messages/nb.json +++ b/packages/devextreme/js/localization/messages/nb.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/nl.json b/packages/devextreme/js/localization/messages/nl.json index 221a58b307f3..040920019581 100644 --- a/packages/devextreme/js/localization/messages/nl.json +++ b/packages/devextreme/js/localization/messages/nl.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/pl.json b/packages/devextreme/js/localization/messages/pl.json index ffbb12ecb54c..b2c58d514d8d 100644 --- a/packages/devextreme/js/localization/messages/pl.json +++ b/packages/devextreme/js/localization/messages/pl.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/pt.json b/packages/devextreme/js/localization/messages/pt.json index 11d46de782cc..639f1831179b 100644 --- a/packages/devextreme/js/localization/messages/pt.json +++ b/packages/devextreme/js/localization/messages/pt.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Grupo: {0}", + "dxScheduler-appointmentAriaDescription-group": "Grupo: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Compromisso recorrente", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Lista de compromissos", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/ro.json b/packages/devextreme/js/localization/messages/ro.json index 7a5ffb517ff9..575b8538eb4f 100644 --- a/packages/devextreme/js/localization/messages/ro.json +++ b/packages/devextreme/js/localization/messages/ro.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/ru.json b/packages/devextreme/js/localization/messages/ru.json index f6986284fced..11d5d1f13010 100644 --- a/packages/devextreme/js/localization/messages/ru.json +++ b/packages/devextreme/js/localization/messages/ru.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/sl.json b/packages/devextreme/js/localization/messages/sl.json index 5d3b0832eaaf..e8af068f4b4e 100644 --- a/packages/devextreme/js/localization/messages/sl.json +++ b/packages/devextreme/js/localization/messages/sl.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/sv.json b/packages/devextreme/js/localization/messages/sv.json index 7a140cf3ce4f..fd0c909a8e22 100644 --- a/packages/devextreme/js/localization/messages/sv.json +++ b/packages/devextreme/js/localization/messages/sv.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "Aktuell tidsindikator visas i vyn", "dxScheduler-ariaLabel-currentIndicator-not-present": "Aktuell tidsindikator visas inte på skärmen", - "dxScheduler-appointmentAriaLabel-group": "Grupp: {0}", + "dxScheduler-appointmentAriaDescription-group": "Grupp: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Återkommande bokning", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Bokningslista", "dxScheduler-newPopupTitle": "Ny bokning", diff --git a/packages/devextreme/js/localization/messages/tr.json b/packages/devextreme/js/localization/messages/tr.json index 76677399dcb6..cb7ad2144c0b 100644 --- a/packages/devextreme/js/localization/messages/tr.json +++ b/packages/devextreme/js/localization/messages/tr.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/uk.json b/packages/devextreme/js/localization/messages/uk.json index 31a1f7141d12..3715cda70b12 100644 --- a/packages/devextreme/js/localization/messages/uk.json +++ b/packages/devextreme/js/localization/messages/uk.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "Індикатор поточного часу відображається у поданні", "dxScheduler-ariaLabel-currentIndicator-not-present": "Індикатор поточного часу не відображається на екрані", - "dxScheduler-appointmentAriaLabel-group": "Група: {0}", + "dxScheduler-appointmentAriaDescription-group": "Група: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Повторювана подія", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Список подій", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/vi.json b/packages/devextreme/js/localization/messages/vi.json index eb042eeeec46..461a6ed96473 100644 --- a/packages/devextreme/js/localization/messages/vi.json +++ b/packages/devextreme/js/localization/messages/vi.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/zh-tw.json b/packages/devextreme/js/localization/messages/zh-tw.json index 3cb9d947df4e..d81a1446f323 100644 --- a/packages/devextreme/js/localization/messages/zh-tw.json +++ b/packages/devextreme/js/localization/messages/zh-tw.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment", diff --git a/packages/devextreme/js/localization/messages/zh.json b/packages/devextreme/js/localization/messages/zh.json index 1a90edc4be73..0337590f72b7 100644 --- a/packages/devextreme/js/localization/messages/zh.json +++ b/packages/devextreme/js/localization/messages/zh.json @@ -272,8 +272,10 @@ "dxScheduler-ariaLabel-currentIndicator-present": "The current time indicator is visible in the view", "dxScheduler-ariaLabel-currentIndicator-not-present": "The current time indicator is not visible on the screen", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", + "dxScheduler-appointmentAriaDescription-group": "Group: {0}", "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-hotkeysAriaDescription-delete": "Press Delete to delete this appointment", + "dxScheduler-hotkeysAriaDescription-homeEnd": "Press Home or End to quickly navigate to the first or last appointment", "dxScheduler-appointmentListAriaLabel": "Appointment list", "dxScheduler-newPopupTitle": "New Appointment",