diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/collector.ts b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/collector.ts index ca91f75b4ce2..a64f3b864a90 100644 --- a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/collector.ts +++ b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/collector.ts @@ -2,11 +2,13 @@ import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; import Scheduler from 'devextreme-testcafe-models/scheduler'; import { createWidget } from '../../../../../helpers/createWidget'; import url from '../../../../../helpers/getPageUrl'; +import { generateOptionMatrix } from '../../../../../helpers/generateOptionMatrix'; +import { changeTheme } from '../../../../../helpers/changeTheme'; fixture.disablePageReloads`Appointments collector` .page(url(__dirname, '../../../../container.html')); -test('Appointment collector has correct offset when adaptivityEnabled=true', async (t) => { +test('Appointment collector has correct offset when adaptivityEnabled=true (T1024299)', async (t) => { const scheduler = new Scheduler('#container'); const { takeScreenshot, compareResults } = createScreenshotsComparer(t); @@ -29,3 +31,111 @@ test('Appointment collector has correct offset when adaptivityEnabled=true', asy }], height: 300, })); + +const getSchedulerBaseOptions = (view: string, count = 20) => { + const day = ['workWeek', 'timelineWorkWeek'].includes(view) ? 2 : 1; + const allDayAppointments = Array(Math.round(count / 4)).fill({ + allDay: true, + text: 'text', + startDate: new Date(2021, 7, day, 0), + endDate: new Date(2021, 7, day, 2), + }); + const regularAppointments = Array(Math.round((count * 3) / 4)).fill({ + text: 'text', + startDate: new Date(2021, 7, day, 0), + endDate: new Date(2021, 7, day, 2), + }); + const width = ['month', 'week', 'workWeek'].includes(view) ? 800 : 500; + const height = ['month'].includes(view) ? 500 : 300; + + return { + currentDate: new Date(2021, 7, day), + views: [view], + currentView: view, + dataSource: [...allDayAppointments, ...regularAppointments], + height, + width, + }; +}; + +generateOptionMatrix({ + view: ['day', 'week', 'workWeek', 'month', 'timelineDay', 'timelineWeek', 'timelineWorkWeek', 'timelineMonth'], + theme: ['generic.light', 'material.blue.light', 'fluent.blue.light', 'generic.light.compact', 'material.blue.light.compact', 'fluent.blue.light.compact'], + adaptivityEnabled: [false, true], +}).forEach(({ view, theme, adaptivityEnabled }) => { + test(`Appointment collector has correct offset when view=${view} adaptivityEnabled=${adaptivityEnabled} theme=${theme}`, async (t) => { + const scheduler = new Scheduler('#container'); + + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + + await t + .expect(await takeScreenshot(`appointment-collector-${view}-adapt(${adaptivityEnabled})-${theme}.png`, scheduler.workSpace)) + .ok() + + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); + }).before(async () => { + await changeTheme(theme); + + return createWidget('dxScheduler', { + adaptivityEnabled, + ...getSchedulerBaseOptions(view), + }); + }).after(async () => { + await changeTheme('generic.light'); + }); +}); + +['generic.light', 'material.blue.light', 'fluent.blue.light'].forEach((theme) => { + test(`Appointment collector has correct offset when month view with double interval theme=${theme}`, async (t) => { + const scheduler = new Scheduler('#container'); + + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + + await t + .expect(await takeScreenshot(`appointment-collector-month-double-interval-${theme}.png`, scheduler.workSpace)) + .ok() + + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); + }).before(async () => { + await changeTheme(theme); + + return createWidget('dxScheduler', { + ...getSchedulerBaseOptions('month'), + views: [{ type: 'month', intervalCount: 2 }], + }); + }).after(async () => { + await changeTheme('generic.light'); + }); +}); + +generateOptionMatrix({ + view: ['day', 'week', 'workWeek', 'month', 'timelineDay', 'timelineWeek', 'timelineWorkWeek', 'timelineMonth'], + variants: [ + { maxAppointmentsPerCell: 'auto', rtlEnabled: false }, + { maxAppointmentsPerCell: 'auto', rtlEnabled: true }, + { maxAppointmentsPerCell: 0, rtlEnabled: false }, + { maxAppointmentsPerCell: 2, rtlEnabled: false }, + { maxAppointmentsPerCell: 'unlimited', rtlEnabled: false }, + ], +}).forEach(({ + view, variants: { maxAppointmentsPerCell, rtlEnabled }, +}) => { + test(`Appointment collector has correct offset when view=${view} maxAppointmentsPerCell=${maxAppointmentsPerCell} rtlEnabled=${rtlEnabled}`, async (t) => { + const scheduler = new Scheduler('#container'); + + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + + await t + .expect(await takeScreenshot(`appointment-collector-${view}-${maxAppointmentsPerCell}-rtl(${rtlEnabled}).png`, scheduler.workSpace)) + .ok() + + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); + }).before(async () => createWidget('dxScheduler', { + maxAppointmentsPerCell, + rtlEnabled, + ...getSchedulerBaseOptions(view, maxAppointmentsPerCell === 'unlimited' ? 8 : 20), + })); +}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-0-rtl(false).png new file mode 100644 index 000000000000..b7ca6d553b7e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-2-rtl(false).png new file mode 100644 index 000000000000..b070cb8258c5 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..4522d8a55d2c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..e7a4e2204535 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..e6f549dd6ae5 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.png new file mode 100644 index 000000000000..1bcf813e498b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..80c475db7dde Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..91e23570c820 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..2a8e055e6bbc Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..b63d6d2a6797 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..8fccb4d66758 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.png new file mode 100644 index 000000000000..f5b79a3cbb29 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..a879dd72aff7 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..46c56952293f Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(false).png new file mode 100644 index 000000000000..1bcf813e498b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(true).png new file mode 100644 index 000000000000..4f26cd78ee9d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-unlimited-rtl(false).png new file mode 100644 index 000000000000..0d04a6fcfe8a Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-day-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-0-rtl(false).png new file mode 100644 index 000000000000..11f1d7a70713 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-2-rtl(false).png new file mode 100644 index 000000000000..e0213ead2395 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..4b52c1771887 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..ee55c0a73418 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..8cfdc4f8e7b3 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.png new file mode 100644 index 000000000000..a43368a41c59 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..56a136550db1 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..354fa878f239 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..b6772362bd42 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..25f619091653 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..28ef2ef17083 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.png new file mode 100644 index 000000000000..bfca316fe3f7 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..5c8906b31a50 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..ba15be701969 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(false).png new file mode 100644 index 000000000000..a43368a41c59 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(true).png new file mode 100644 index 000000000000..11240eef2908 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-fluent.blue.light.png new file mode 100644 index 000000000000..f95940c04a9b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-generic.light.png new file mode 100644 index 000000000000..8c39358ab271 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-material.blue.light.png new file mode 100644 index 000000000000..2b6fbf771bd1 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-double-interval-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-unlimited-rtl(false).png new file mode 100644 index 000000000000..2d5a90376286 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-month-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-0-rtl(false).png new file mode 100644 index 000000000000..001236acc180 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-2-rtl(false).png new file mode 100644 index 000000000000..29b02e261b5b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..7f2e9cb1a0ad Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..27d5854696e2 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..0567707d9c6d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.png new file mode 100644 index 000000000000..29b02e261b5b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..e8dd3bd26af6 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..1f97f7df0bc7 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..af1f1c9d8e7c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..ae17b9c62bf7 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..8db26288c2fa Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.png new file mode 100644 index 000000000000..33134f23226c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..9f5b91f1949e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..748c2ae95f04 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(false).png new file mode 100644 index 000000000000..29b02e261b5b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(true).png new file mode 100644 index 000000000000..ecc220fff40e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-unlimited-rtl(false).png new file mode 100644 index 000000000000..717fc1bb3372 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineDay-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-0-rtl(false).png new file mode 100644 index 000000000000..fdbbf5255ca3 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-2-rtl(false).png new file mode 100644 index 000000000000..e9a3f6a2e387 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..62311a571a00 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..92106a14f130 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..2c30ac2b6714 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.png new file mode 100644 index 000000000000..e9a3f6a2e387 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..320d1dc6b8e6 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..bbd87af5e1b8 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..4c82657a4748 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..cfa9ab73e038 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..335b6be934a6 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.png new file mode 100644 index 000000000000..fe84b70b8cba Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..4cef15567d53 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..1d3f3e1435ef Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(false).png new file mode 100644 index 000000000000..e9a3f6a2e387 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(true).png new file mode 100644 index 000000000000..9c7d86226f86 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-unlimited-rtl(false).png new file mode 100644 index 000000000000..7092a17164b8 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineMonth-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-0-rtl(false).png new file mode 100644 index 000000000000..7e224e09b5fd Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-2-rtl(false).png new file mode 100644 index 000000000000..d0d5e3fd4f4b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..3e39bbf7cd3f Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..6c48d0c353a9 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..4e79e025455a Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.png new file mode 100644 index 000000000000..ae9f7aeaf62d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..f47b329da242 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..ab78452ca3c9 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..8168deb61619 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..7f772565b45b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..fbcabdb78e1c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.png new file mode 100644 index 000000000000..979e22405f44 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..2cb1d07c7ab4 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..6d712f4159ef Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(false).png new file mode 100644 index 000000000000..ae9f7aeaf62d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(true).png new file mode 100644 index 000000000000..ea69b94e7c6e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-unlimited-rtl(false).png new file mode 100644 index 000000000000..243426c40b68 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWeek-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-0-rtl(false).png new file mode 100644 index 000000000000..7e224e09b5fd Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-2-rtl(false).png new file mode 100644 index 000000000000..d0d5e3fd4f4b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..7b87162ee4fa Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..e32244923958 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..4e79e025455a Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.png new file mode 100644 index 000000000000..ae9f7aeaf62d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..49f63d024472 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..e82fc1efc738 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..57a451dc07c2 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..b3d327b7f883 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..fbcabdb78e1c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.png new file mode 100644 index 000000000000..979e22405f44 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..e4b2b3cc9eb9 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..fa850d40f0c3 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(false).png new file mode 100644 index 000000000000..ae9f7aeaf62d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(true).png new file mode 100644 index 000000000000..ea69b94e7c6e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-unlimited-rtl(false).png new file mode 100644 index 000000000000..243426c40b68 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-timelineWorkWeek-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-0-rtl(false).png new file mode 100644 index 000000000000..acd5c13d621d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-2-rtl(false).png new file mode 100644 index 000000000000..e1680c74256b Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..99b436b9a4ac Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..2705048b164a Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..fda40fc8be89 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.png new file mode 100644 index 000000000000..c011c3b54648 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..2d0e69fa510c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..b1b2feac837c Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..a08a82ab5bab Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..f97da20874c8 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..9bd08fc4ec1f Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.png new file mode 100644 index 000000000000..67dc1dd82333 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..d06d36096539 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..1c6df7175efa Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(false).png new file mode 100644 index 000000000000..c011c3b54648 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(true).png new file mode 100644 index 000000000000..927722793135 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-unlimited-rtl(false).png new file mode 100644 index 000000000000..b609eb293499 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-week-unlimited-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-0-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-0-rtl(false).png new file mode 100644 index 000000000000..4acbfcfe982f Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-0-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-2-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-2-rtl(false).png new file mode 100644 index 000000000000..aa192948d455 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-2-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..225815894a2e Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.png new file mode 100644 index 000000000000..7a50523b92dc Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.compact.png new file mode 100644 index 000000000000..5ed68934e662 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.png new file mode 100644 index 000000000000..aa192948d455 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.compact.png new file mode 100644 index 000000000000..d3f477d551df Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.png new file mode 100644 index 000000000000..3a7032e8195f Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(false)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.compact.png new file mode 100644 index 000000000000..4d08fd202d78 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.png new file mode 100644 index 000000000000..ef54bd4a67f5 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.compact.png new file mode 100644 index 000000000000..538bf7eea208 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.png new file mode 100644 index 000000000000..1bdf02ed7523 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.compact.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.compact.png new file mode 100644 index 000000000000..3b1dd6c7a7ac Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.compact.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.png new file mode 100644 index 000000000000..9f49ffe8eb78 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-adapt(true)-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(false).png new file mode 100644 index 000000000000..aa192948d455 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(false).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(true).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(true).png new file mode 100644 index 000000000000..5d6ae5aea5be Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-auto-rtl(true).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-unlimited-rtl(false).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-unlimited-rtl(false).png new file mode 100644 index 000000000000..ab5349138bcf Binary files /dev/null and b/e2e/testcafe-devextreme/tests/scheduler/common/layout/appointments/etalons/appointment-collector-workWeek-unlimited-rtl(false).png differ 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 71065ec54d05..2062a5673151 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/m_appointment_collection.ts @@ -234,7 +234,6 @@ class SchedulerAppointments extends CollectionWidget { allowResize: true, allowAllDayResize: true, onAppointmentDblClick: null, - _collectorOffset: 0, groups: [], resources: [], }); @@ -983,10 +982,6 @@ class SchedulerAppointments extends CollectionWidget { appointment: AppointmentCollectorViewModel, ): dxElementWrapper { const virtualItems = appointment.items; - const buttonWidth = this.invoke('getDropDownAppointmentWidth', appointment.allDay); - const buttonHeight = this.invoke('getDropDownAppointmentHeight'); - const rtlOffset = this.option('rtlEnabled') ? buttonWidth : 0; - const isGroupCompact = !appointment.allDay && this.invoke('supportCompactDropDownAppointments'); const items: any = { data: [], colors: [], settings: [] }; virtualItems.forEach((item) => { const appointmentConfig = { @@ -1005,17 +1000,16 @@ class SchedulerAppointments extends CollectionWidget { $container: $fragment, coordinates: { top: appointment.top, - left: appointment.left + rtlOffset, + left: appointment.left, }, items, buttonColor: items.colors[0], sortedIndex: appointment.sortedIndex, - width: buttonWidth - this.option('_collectorOffset'), - height: buttonHeight, + width: appointment.width, + height: appointment.height, onAppointmentClick: this.option('onItemClick'), allowDrag: this.option('allowDrag'), - cellWidth: this.invoke('getCellWidth'), - isCompact: this.invoke('isAdaptive') || isGroupCompact, + isCompact: appointment.isCompact, }); this.renderedElementsBySortedIndex[appointment.sortedIndex] = $item; diff --git a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts new file mode 100644 index 000000000000..dbe57be82787 --- /dev/null +++ b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts @@ -0,0 +1,87 @@ +import { + describe, expect, it, +} from '@jest/globals'; + +import { VIEW_TYPES } from '../../utils/options/constants_view'; +import type { ViewType } from '../../utils/options/types'; +import { getDeltaTime } from './get_delta_time'; + +describe('getDeltaTime', () => { + VIEW_TYPES.forEach((view) => { + it(`should return zero for not resized appointment in ${view} view`, () => { + expect(getDeltaTime( + { width: 100, height: 100 }, + { width: 100, height: 100 }, + { + viewType: view, + cellSize: { width: 50, height: 50 }, + resizableStep: 50, + cellDurationInMinutes: 30, + isAllDay: true, + }, + )).toBe(0); + }); + }); + + ['day', 'week', 'workWeek'].forEach((view) => { + it(`should return correct delta in px for resized appointment in vertical ${view} view`, () => { + expect(getDeltaTime( + { width: 100, height: 50 }, + { width: 100, height: 100 }, + { + viewType: view as ViewType, + cellSize: { width: 50, height: 50 }, + resizableStep: 50, + cellDurationInMinutes: 30, + isAllDay: false, + }, + )).toBe(-30 * 60_000); + }); + + it(`should return correct delta in px for resized all day appointment in vertical ${view} view`, () => { + expect(getDeltaTime( + { width: 50, height: 100 }, + { width: 100, height: 100 }, + { + viewType: view as ViewType, + cellSize: { width: 50, height: 50 }, + resizableStep: 50, + cellDurationInMinutes: 30, + isAllDay: true, + }, + )).toBe(-24 * 3600_000); + }); + }); + + ['timelineMonth', 'month'].forEach((view) => { + it(`should return correct delta in px for resized appointment in ${view} view`, () => { + expect(getDeltaTime( + { width: 50, height: 100 }, + { width: 100, height: 100 }, + { + viewType: view as ViewType, + cellSize: { width: 50, height: 50 }, + resizableStep: 50, + cellDurationInMinutes: 30, + isAllDay: false, + }, + )).toBe(-24 * 3600_000); + }); + }); + + ['timelineDay', 'timelineWeek', 'timelineWorkWeek'].forEach((view) => { + it(`should return zero for not resized appointment in horizontal ${view} view`, () => { + expect(getDeltaTime( + { width: 50, height: 100 }, + { width: 100, height: 100 }, + { + viewType: view as ViewType, + cellSize: { width: 50, height: 50 }, + resizableStep: 50, + cellDurationInMinutes: 30, + isAllDay: false, + }, + )).toBe(-30 * 60_000); + }); + }); +}); diff --git a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts new file mode 100644 index 000000000000..1f2682b5aaed --- /dev/null +++ b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts @@ -0,0 +1,60 @@ +import dateUtils from '@js/core/utils/date'; + +import { VERTICAL_VIEW_TYPES } from '../../constants'; +import type { ViewType } from '../../types'; + +const toMs = dateUtils.dateToMilliseconds; + +interface Size { + width: number; + height: number; +} +interface Options { + viewType: ViewType; + cellSize: Size; + cellDurationInMinutes: number; + resizableStep: number; + isAllDay: boolean; +} + +const MIN_RESIZABLE_STEP = 2; +const getAllDayDeltaWidth = (args: Size, initialSize: Size, resizableStep: number): number => { + const intervalWidth = resizableStep || MIN_RESIZABLE_STEP; + const initialWidth = initialSize.width; + + return Math.round((args.width - initialWidth) / intervalWidth); +}; +const getHorizontalDeltaTime = (args: Size, initialSize: Size, { + cellSize, + cellDurationInMinutes, +}: Options): number => { + const deltaWidth = args.width - initialSize.width; + const deltaTime = toMs('minute') * Math.round((deltaWidth * cellDurationInMinutes) / cellSize.width); + return deltaTime; +}; +const getVerticalDeltaTime = (args: Size, initialSize: Size, { + cellSize, + cellDurationInMinutes, +}: Options): number => { + const deltaHeight = args.height - initialSize.height; + const deltaTime = toMs('minute') * Math.round((deltaHeight * cellDurationInMinutes) / cellSize.height); + return deltaTime; +}; + +export const getDeltaTime = ( + args: Size, + initialSize: Size, + options: Options, +): number => { + const { viewType, resizableStep, isAllDay } = options; + switch (true) { + case ['timelineMonth', 'month'].includes(viewType) || Boolean(isAllDay): + return getAllDayDeltaWidth(args, initialSize, resizableStep) * toMs('day'); + case viewType === 'agenda': + return 0; + case VERTICAL_VIEW_TYPES.includes(viewType) && !isAllDay: + return getVerticalDeltaTime(args, initialSize, options); + default: + return getHorizontalDeltaTime(args, initialSize, options); + } +}; diff --git a/packages/devextreme/js/__internal/scheduler/constants.ts b/packages/devextreme/js/__internal/scheduler/constants.ts index 2cb419677572..5842b1ab5d58 100644 --- a/packages/devextreme/js/__internal/scheduler/constants.ts +++ b/packages/devextreme/js/__internal/scheduler/constants.ts @@ -4,3 +4,5 @@ export const APPOINTMENT_SETTINGS_KEY = 'dxAppointmentSettings'; export const VERTICAL_GROUP_ORIENTATION = 'vertical'; export const HORIZONTAL_GROUP_ORIENTATION = 'horizontal'; + +export const VERTICAL_VIEW_TYPES = ['day', 'week', 'workWeek']; diff --git a/packages/devextreme/js/__internal/scheduler/m_compact_appointments_helper.ts b/packages/devextreme/js/__internal/scheduler/m_compact_appointments_helper.ts index 6c3a6592160d..a88d0dc5fd7a 100644 --- a/packages/devextreme/js/__internal/scheduler/m_compact_appointments_helper.ts +++ b/packages/devextreme/js/__internal/scheduler/m_compact_appointments_helper.ts @@ -12,9 +12,6 @@ const APPOINTMENT_COLLECTOR_CLASS = 'dx-scheduler-appointment-collector'; const COMPACT_APPOINTMENT_COLLECTOR_CLASS = `${APPOINTMENT_COLLECTOR_CLASS}-compact`; const APPOINTMENT_COLLECTOR_CONTENT_CLASS = `${APPOINTMENT_COLLECTOR_CLASS}-content`; -const WEEK_VIEW_COLLECTOR_OFFSET = 5; -const COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET = 1; - export class CompactAppointmentsHelper { elements: any[] = []; @@ -104,16 +101,6 @@ export class CompactAppointmentsHelper { }; } - _getCollectorOffset(width, cellWidth) { - return cellWidth - width - this._getCollectorRightOffset(); - } - - _getCollectorRightOffset() { - return this.instance.getRenderingStrategyInstance()._isCompactTheme() - ? COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET - : WEEK_VIEW_COLLECTOR_OFFSET; - } - _setPosition(element, position) { move(element, { top: position.top, diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index d5ce49a1201a..f561491039bc 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -1301,8 +1301,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { if (currentViewOptions.startDate) { this._updateOption('header', 'currentDate', this._workSpace._getHeaderDate()); } - - this._appointments.option('_collectorOffset', this.getCollectorOffset()); } _recalculateWorkspace() { diff --git a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts index 0a48557989ce..8acc451b5429 100644 --- a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts +++ b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts @@ -6,33 +6,43 @@ import { each } from '@js/core/utils/iterator'; import { isPlainObject } from '@js/core/utils/type'; import { formatDates, getFormatType } from './appointments/m_text_utils'; +import { getDeltaTime } from './appointments/resizing/get_delta_time'; +import { VERTICAL_VIEW_TYPES } from './constants'; import { AGENDA_LAST_IN_DATE_APPOINTMENT_CLASS } from './m_classes'; +import type Scheduler from './m_scheduler'; import { utils } from './m_utils'; +import { isAppointmentTakesAllDay } from './r1/utils/base'; +import type { SafeAppointment } from './types'; import { AppointmentAdapter } from './utils/appointment_adapter/appointment_adapter'; import type { AppointmentItemViewModel } from './view_model/generate_view_model/types'; const toMs = dateUtils.dateToMilliseconds; +const isAllDay = ( + scheduler: Scheduler, + appointmentData: SafeAppointment, +): boolean => { + const adapter = new AppointmentAdapter(appointmentData, scheduler._dataAccessors); + + if (scheduler.currentView.type === 'agenda') { + return false; + } + + if (VERTICAL_VIEW_TYPES.includes(scheduler.currentView.type)) { + return isAppointmentTakesAllDay(adapter, scheduler.option('allDayPanelMode')); + } + + return adapter.allDay; +}; const subscribes = { isCurrentViewAgenda() { return this.currentView.type === 'agenda'; }, - currentViewUpdated(currentView) { - this.option('currentView', currentView); - }, - - currentDateUpdated(date) { - this.option('currentDate', date); - }, getOption(name) { return this.option(name); }, - getWorkspaceOption(name) { - return this.getWorkSpace().option(name); - }, - isVirtualScrolling() { return this.isVirtualScrolling(); }, @@ -138,7 +148,7 @@ const subscribes = { const groups = this.getViewOption('groups'); if (groups?.length) { - if (allDay || this.getLayoutManager().getRenderingStrategyInstance()._needHorizontalGroupBounds()) { + if (allDay || !VERTICAL_VIEW_TYPES.includes(this.currentView.type)) { const horizontalGroupBounds = this._workSpace.getGroupBounds(options.coordinates); return { left: horizontalGroupBounds.left, @@ -148,7 +158,7 @@ const subscribes = { }; } - if (this.getLayoutManager().getRenderingStrategyInstance()._needVerticalGroupBounds(allDay) && this._workSpace._isVerticalGroupedWorkSpace()) { + if (!allDay && VERTICAL_VIEW_TYPES.includes(this.currentView.type) && this._workSpace._isVerticalGroupedWorkSpace()) { const verticalGroupBounds = this._workSpace.getGroupBounds(options.coordinates); return { left: 0, @@ -166,25 +176,21 @@ const subscribes = { return this.getWorkSpace().needRecalculateResizableArea(); }, - isAllDay(appointmentData) { - return this.getLayoutManager().getRenderingStrategyInstance().isAllDay(appointmentData); + isAllDay(appointmentData): boolean { + return isAllDay(this, appointmentData); }, getDeltaTime(e, initialSize, itemData) { - return this.getLayoutManager().getRenderingStrategyInstance().getDeltaTime(e, initialSize, itemData); - }, - - getDropDownAppointmentWidth(isAllDay) { - return this.getLayoutManager() - .getRenderingStrategyInstance() - .getDropDownAppointmentWidth( - this.currentView.intervalCount, - isAllDay, - ); - }, - - getDropDownAppointmentHeight() { - return this.getLayoutManager().getRenderingStrategyInstance().getDropDownAppointmentHeight(); + return getDeltaTime(e, initialSize, { + viewType: this.currentView.type, + cellSize: { + width: this.getWorkSpace().getCellWidth(), + height: this.getWorkSpace().getCellHeight(), + }, + cellDurationInMinutes: this.getWorkSpace().option('cellDuration'), + resizableStep: this.getWorkSpace().positionHelper.getResizableStep(), + isAllDay: isAllDay(this, itemData), + }); }, getCellWidth() { @@ -195,16 +201,12 @@ const subscribes = { return this.getWorkSpace().getCellHeight(); }, - getMaxAppointmentCountPerCellByType(isAllDay) { - return this.getLayoutManager().getRenderingStrategyInstance()._getMaxAppointmentCountPerCellByType(isAllDay); - }, - needCorrectAppointmentDates() { - return this.getLayoutManager().getRenderingStrategyInstance().needCorrectAppointmentDates(); + return !['month', 'timelineMonth'].includes(this.currentView.type); }, getRenderingStrategyDirection() { - return this.getLayoutManager().getRenderingStrategyInstance().getDirection(); + return VERTICAL_VIEW_TYPES.includes(this.currentView.type) ? 'vertical' : 'horizontal'; }, updateAppointmentEndDate(options) { @@ -231,10 +233,6 @@ const subscribes = { this._compactAppointmentsHelper.clear(); }, - supportCompactDropDownAppointments() { - return this.getLayoutManager().getRenderingStrategyInstance().supportCompactDropDownAppointments(); - }, - getGroupCount() { return this._workSpace._getGroupCount(); }, diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/add_collector.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/add_collector.ts index aec62e4488c1..cd34c77fe87f 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/add_collector.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/add_collector.ts @@ -61,6 +61,9 @@ const processVirtualAppointment = ( sortedIndex: appointmentSetting.sortedIndex, top: virtualAppointment.top, left: virtualAppointment.left, + width: virtualAppointment.width, + height: virtualAppointment.height, + isCompact: virtualAppointment.isCompact, items: [], }; } diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_agenda.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_agenda.ts index 489c3b251dca..8fbd21b59979 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_agenda.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_agenda.ts @@ -17,9 +17,6 @@ class AgendaRenderingStrategy extends BaseRenderingStrategy { getAppointmentMinSize() { } - getDeltaTime() { - } - keepAppointmentSettings() { return true; } @@ -120,10 +117,6 @@ class AgendaRenderingStrategy extends BaseRenderingStrategy { return undefined; } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _getDeltaWidth(args, initialSize) { - } - _getAppointmentMaxWidth() { return this.cellWidth; } diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_base.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_base.ts index e3506ae42a2f..5bc0312bd3b6 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_base.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_base.ts @@ -128,18 +128,10 @@ class BaseRenderingStrategy { return false; } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getDeltaTime(args, initialSize, appointment) { - } - getAppointmentGeometry(coordinates) { return coordinates; } - needCorrectAppointmentDates() { - return true; - } - getDirection() { return 'horizontal'; } @@ -175,13 +167,6 @@ class BaseRenderingStrategy { return this._getExtendedPositionMap(map, resultPositions); } - _getDeltaWidth(args, initialSize): any { - const intervalWidth = this.resizableStep || this.getAppointmentMinSize(); - const initialWidth = initialSize.width; - - return Math.round((args.width - initialWidth) / intervalWidth); - } - _correctRtlCoordinates(coordinates) { const width = coordinates[0].width || this._getAppointmentMaxWidth(); @@ -647,11 +632,14 @@ class BaseRenderingStrategy { if ((coordinates.count - countFullWidthAppointmentInCell) > 0) { const { top, left } = coordinates; const compactRender = this.isAdaptive || !isAllDay && this.supportCompactDropDownAppointments(); + const width = this.getDropDownAppointmentWidth(this.intervalCount, isAllDay) - this.options._collectorOffset; + const height = this.getDropDownAppointmentHeight(); + const rtlOffset = this.rtlEnabled ? width : 0; coordinates.virtual = { - left: left + this._getCollectorLeftOffset(isAllDay), + left: left + this._getCollectorLeftOffset(isAllDay) + rtlOffset, top, - width: this.getDropDownAppointmentWidth(this.intervalCount, isAllDay), - height: this.getDropDownAppointmentHeight(), + width, + height, index: this._generateAppointmentCollectorIndex(coordinates, isAllDay), isAllDay, groupIndex: coordinates.groupIndex, @@ -854,15 +842,6 @@ class BaseRenderingStrategy { return this._getAppointmentDefaultWidth(); } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _needVerticalGroupBounds(allDay) { - return false; - } - - _needHorizontalGroupBounds() { - return false; - } - getAppointmentDurationInMs(apptStartDate, apptEndDate, allDay) { if (allDay) { const appointmentDuration = apptEndDate.getTime() - apptStartDate.getTime(); diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal.ts index 6a047c24eb5c..9a9156e98bd6 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal.ts @@ -99,15 +99,6 @@ class HorizontalRenderingStrategy extends BaseAppointmentsStrategy { return this.cellWidth - DROP_DOWN_BUTTON_OFFSET * 2; } - getDeltaTime(args, initialSize) { - let deltaTime = 0; - const deltaWidth = args.width - initialSize.width; - - deltaTime = toMs('minute') * Math.round(deltaWidth / this.cellWidth * this.cellDurationInMinutes); - - return deltaTime; - } - isAllDay(appointmentData) { return this.dataAccessors.get('allDay', appointmentData); } diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month.ts index bd7cea7cfbfd..bf00c54d5d50 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month.ts @@ -174,18 +174,6 @@ class HorizontalMonthRenderingStrategy extends HorizontalMonthLineRenderingStrat const offset = intervalCount > 1 ? MONTH_DROPDOWN_APPOINTMENT_MAX_RIGHT_OFFSET : MONTH_DROPDOWN_APPOINTMENT_MIN_RIGHT_OFFSET; return this.cellWidth - offset; } - - needCorrectAppointmentDates() { - return false; - } - - _needVerticalGroupBounds() { - return false; - } - - _needHorizontalGroupBounds() { - return true; - } } export default HorizontalMonthRenderingStrategy; diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month_line.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month_line.ts index 17a98d5cde43..10bf48dc6695 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month_line.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_horizontal_month_line.ts @@ -5,9 +5,6 @@ import type { SafeAppointment } from '@ts/scheduler/types'; import { sortAppointmentsByStartDate } from '../../../appointments/utils/m_utils'; import HorizontalAppointmentsStrategy from './m_strategy_horizontal'; -const HOURS_IN_DAY = 24; -const MINUTES_IN_HOUR = 60; -const MILLISECONDS_IN_MINUTE = 60000; const ZERO_APPOINTMENT_DURATION_IN_DAYS = 1; class HorizontalMonthLineRenderingStrategy extends HorizontalAppointmentsStrategy { @@ -46,10 +43,6 @@ class HorizontalMonthLineRenderingStrategy extends HorizontalAppointmentsStrateg return (adjustedDuration / dateUtils.dateToMilliseconds('day')) || ZERO_APPOINTMENT_DURATION_IN_DAYS; } - getDeltaTime(args, initialSize) { - return HOURS_IN_DAY * MINUTES_IN_HOUR * MILLISECONDS_IN_MINUTE * this._getDeltaWidth(args, initialSize); - } - isAllDay() { return false; } @@ -75,10 +68,6 @@ class HorizontalMonthLineRenderingStrategy extends HorizontalAppointmentsStrateg return result; } - needCorrectAppointmentDates() { - return false; - } - getPositionShift(timeShift) { return { top: 0, diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_vertical.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_vertical.ts index daca674c6173..e7bd88d9ee4c 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_vertical.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/rendering_strategies/m_strategy_vertical.ts @@ -14,18 +14,6 @@ const ALLDAY_APPOINTMENT_MAX_VERTICAL_OFFSET = 20; const toMs = dateUtils.dateToMilliseconds; class VerticalRenderingStrategy extends BaseAppointmentsStrategy { - getDeltaTime(args, initialSize, appointment) { - let deltaTime = 0; - - if (this.isAllDay(appointment)) { - deltaTime = this._getDeltaWidth(args, initialSize) * toMs('day'); - } else { - const deltaHeight = args.height - initialSize.height; - deltaTime = toMs('minute') * Math.round(deltaHeight / this.cellHeight * this.cellDurationInMinutes); - } - return deltaTime; - } - _correctCollectorCoordinatesInAdaptive(coordinates, isAllDay) { if (isAllDay) { super._correctCollectorCoordinatesInAdaptive(coordinates, isAllDay); @@ -435,15 +423,6 @@ class VerticalRenderingStrategy extends BaseAppointmentsStrategy { return this.allDayHeight || this.getAppointmentMinSize(); } - // eslint-disable-next-line class-methods-use-this - _needVerticalGroupBounds(allDay) { - return !allDay; - } - - _needHorizontalGroupBounds() { - return false; - } - getPositionShift(timeShift, isAllDay) { if (!isAllDay && this.isAdaptive && this._getMaxAppointmentCountPerCellByType(isAllDay) === 0) { return { diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/types.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/types.ts index 9762a37b3b59..0ffe62418a9c 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/types.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/types.ts @@ -70,6 +70,9 @@ export interface BaseAppointmentViewModel { export interface AppointmentCollectorViewModel extends BaseAppointmentViewModel { top: number; left: number; + height: number; + width: number; + isCompact: boolean; items: AppointmentItemViewModel[]; } diff --git a/packages/devextreme/js/__internal/scheduler/view_model/m_appointments_layout_manager.ts b/packages/devextreme/js/__internal/scheduler/view_model/m_appointments_layout_manager.ts index a1eb4e8173de..debe11921c67 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/m_appointments_layout_manager.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/m_appointments_layout_manager.ts @@ -144,6 +144,7 @@ class AppointmentLayoutManager { intervalDuration: workspace.getIntervalDuration(), allDayIntervalDuration: workspace.getIntervalDuration(true), isVerticalGroupOrientation: workspace.isVerticalOrientation(), + _collectorOffset: this.instance.getCollectorOffset(), DOMMetaData, // agenda only instance: this.instance, diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointments.tests.js index d83c82850b17..077e39daa92d 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointments.tests.js @@ -451,32 +451,6 @@ QUnit.module('Appointments', moduleOptions, () => { assert.deepEqual(instance.option('items'), items, 'items are not affected'); }); - QUnit.test('Delta time for resizable appointment should be 0 if appointment isn\'t resized', async function(assert) { - const strategy = new HorizontalMonthAppointmentsStrategy({ - instance: { - notifyObserver: commonUtils.noop, - option: commonUtils.noop, - fire: commonUtils.noop, - }, - getResizableStep: () => 0 - }); - const deltaTime = strategy.getDeltaTime({ width: 100 }, { width: 100 }); - - assert.strictEqual(deltaTime, 0, 'Delta time is 0'); - }); - - QUnit.test('Delta time for resizable appointment should decreased correctly in vertical strategy', async function(assert) { - const strategy = new VerticalAppointmentsStrategy({ - dataAccessors: mockDataAccessor, - allDayPanelMode: 'all', - cellDurationInMinutes: 30, - cellHeight: 50 - }); - const deltaTime = strategy.getDeltaTime({ height: 50 }, { height: 100 }, { allDay: false }); - - assert.strictEqual(deltaTime, -1800000, 'Delta time is OK'); - }); - QUnit.test('Scheduler appointment should have aria-role \'button\'', function(assert) { const item = { itemData: { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.tests.js index 75d97c62ed3c..21e9c66ae34a 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.tests.js @@ -834,48 +834,6 @@ QUnit.module('View with configuration', () => { }); }); -QUnit.module('Options for Material-based themes in components', { - beforeEach: function() { - this.origIsMaterialBased = themes.isMaterialBased; - themes.isMaterialBased = function() { return true; }; - }, - afterEach: function() { - themes.isMaterialBased = this.origIsMaterialBased; - } -}, () => { - QUnit.test('_collectorOffset option should be passed to SchedulerAppointments depending on the view', async function(assert) { - const scheduler = await createWrapper({ - currentView: 'month', - showCurrentTimeIndicator: false - }); - - const appointments = scheduler.instance.getAppointmentsInstance(); - - assert.equal(appointments.option('_collectorOffset'), 20, 'SchedulerAppointments has correct _collectorOffset'); - - scheduler.instance.option('currentView', 'week'); - await waitAsync(10); - assert.equal(appointments.option('_collectorOffset'), 0, 'SchedulerAppointments has correct _collectorOffset'); - }); - - QUnit.test('Real _collectorOffset option should be passed to SchedulerAppointments depending on the adaptivityEnabled', async function(assert) { - const scheduler = await createWrapper({ - currentView: 'month', - showCurrentTimeIndicator: false, - adaptivityEnabled: false - }); - - let appointments = scheduler.instance.getAppointmentsInstance(); - - assert.equal(appointments.option('_collectorOffset'), 20, 'SchedulerAppointments has correct _collectorOffset'); - - scheduler.instance.option('adaptivityEnabled', true); - appointments = scheduler.instance.getAppointmentsInstance(); - - assert.equal(appointments.option('_collectorOffset'), 0, 'SchedulerAppointments has correct _collectorOffset'); - }); -}); - QUnit.module('Getting timezones', {}, () => { const findTimeZone = (timeZones, id) => { return timeZones.filter((timeZone) => timeZone.id === id)[0]; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/subscribes.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/subscribes.tests.js index 1ed93acbcb66..9211fef55dfb 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/subscribes.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/subscribes.tests.js @@ -835,34 +835,6 @@ module('Subscribes', { assert.notOk(this.instance.fire('isAdaptive'), 'Scheduler isn\'t adaptive'); }); - test('\'getDropDownAppointmentWidth\' and \'getDropDownAppointmentHeight\' subscribes should work correctly', async function(assert) { - await this.createInstance({ - dataSource: [], - adaptivityEnabled: true - }); - - const width = this.instance.fire('getDropDownAppointmentWidth'); - const height = this.instance.fire('getDropDownAppointmentHeight'); - - assert.equal(height, 28, 'Returned height is ok'); - assert.equal(width, 28, 'Returned width is ok'); - }); - - test('\'supportCompactDropDownAppointments\' should return true for some views', async function(assert) { - await this.createInstance({ - dataSource: [], - views: ['month', 'week'], - currentView: 'week' - }); - - assert.ok(this.instance.fire('supportCompactDropDownAppointments')); - - this.instance.option('currentView', 'month'); - await waitAsync(0); - - assert.notOk(this.instance.fire('supportCompactDropDownAppointments')); - }); - test('getTextAndFormatDate with format TIME should work correct', async function(assert) { const data = { text: 'Appointment test text',