diff --git a/.github/workflows/qunit_tests-additional-renovation.yml b/.github/workflows/qunit_tests-additional-renovation.yml index e19f0a287cc6..541c8f62174d 100644 --- a/.github/workflows/qunit_tests-additional-renovation.yml +++ b/.github/workflows/qunit_tests-additional-renovation.yml @@ -148,8 +148,10 @@ jobs: 'ui.editors(1/2)', 'ui.editors(2/2)', 'ui.htmlEditor', - 'ui.grid(1/2)', - 'ui.grid(2/2)', + 'ui.grid(1/4)', + 'ui.grid(2/4)', + 'ui.grid(3/4)', + 'ui.grid(4/4)', 'ui.scheduler(1/3)', 'ui.scheduler(2/3)', 'ui.scheduler(3/3)', diff --git a/apps/demos/Demos/DataGrid/CustomEditors/Vue/App.vue b/apps/demos/Demos/DataGrid/CustomEditors/Vue/App.vue index 947f3c1416ab..24cc9c530859 100644 --- a/apps/demos/Demos/DataGrid/CustomEditors/Vue/App.vue +++ b/apps/demos/Demos/DataGrid/CustomEditors/Vue/App.vue @@ -144,13 +144,13 @@ const onRowInserted = (e: DxDataGridTypes.RowInsertedEvent) => { }; function calculateFilterExpression( - column: DxDataGridTypes.Column, + this: DxDataGridTypes.Column, filterValue: any, selectedFilterOperations: string | null, target: string, ) { if (target === 'search' && typeof filterValue === 'string') { - return [column.dataField, 'contains', filterValue]; + return [this.dataField, 'contains', filterValue]; } return (rowData: Task) => (rowData.AssignedEmployee || []).includes(filterValue); diff --git a/apps/demos/testing/etalons/Scheduler-CurrentTimeIndicator (fluent.blue.light).png b/apps/demos/testing/etalons/Scheduler-CurrentTimeIndicator (fluent.blue.light).png index b6f1e7a5e9fa..32ce4422ce2c 100644 Binary files a/apps/demos/testing/etalons/Scheduler-CurrentTimeIndicator (fluent.blue.light).png and b/apps/demos/testing/etalons/Scheduler-CurrentTimeIndicator (fluent.blue.light).png differ diff --git a/apps/demos/testing/widgets/datagrid/etalons/datagrid_filtering_by_range_3_desktop (fluent.blue.light).png b/apps/demos/testing/widgets/datagrid/etalons/datagrid_filtering_by_range_3_desktop (fluent.blue.light).png index e595c2c9531f..28a2d3e08fde 100644 Binary files a/apps/demos/testing/widgets/datagrid/etalons/datagrid_filtering_by_range_3_desktop (fluent.blue.light).png and b/apps/demos/testing/widgets/datagrid/etalons/datagrid_filtering_by_range_3_desktop (fluent.blue.light).png differ diff --git a/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (fluent-blue-light).png b/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (fluent-blue-light).png index 85c9c15a4045..c961a032c5c9 100644 Binary files a/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (fluent-blue-light).png and b/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (fluent-blue-light).png differ diff --git a/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (material-blue-light).png b/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (material-blue-light).png index b50c2e021b79..2f9055365763 100644 Binary files a/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (material-blue-light).png and b/e2e/testcafe-devextreme/tests/chat/etalons/Alertlist with long text in error (material-blue-light).png differ diff --git a/e2e/testcafe-devextreme/tests/common/eventsEngine.ts b/e2e/testcafe-devextreme/tests/common/eventsEngine.ts new file mode 100644 index 000000000000..fc3d070ac956 --- /dev/null +++ b/e2e/testcafe-devextreme/tests/common/eventsEngine.ts @@ -0,0 +1,61 @@ +import { ClientFunction, Selector } from 'testcafe'; +import url from '../../helpers/getPageUrl'; + +fixture.disablePageReloads`Events` + .page(url(__dirname, '../container.html')); + +const init = ClientFunction(() => { + const markup = `
+
+
+
hoverStartTriggerCount
+
0
+
hoverEndTriggerCount
+
0
+
`; + + $('#container').html(markup); + + const { DevExpress } = (window as any); + + let hoverStartTriggerCount = 0; + let hoverEndTriggerCount = 0; + + DevExpress.events.on($('#target'), 'dxhoverstart', () => { + hoverStartTriggerCount += 1; + + $('#hoverStartTriggerCount').text(hoverStartTriggerCount); + }); + + DevExpress.events.on($('#target'), 'dxhoverend', () => { + hoverEndTriggerCount += 1; + + $('#hoverEndTriggerCount').text(hoverEndTriggerCount); + }); +}); + +test('The `dxhoverstart` event should be triggered after dragging and dropping an HTML draggable element (T1260277)', async (t) => { + const draggable = Selector('#draggable'); + const target = Selector('#target'); + const hoverStartTriggerCount = Selector('#hoverStartTriggerCount'); + const hoverEndTriggerCount = Selector('#hoverEndTriggerCount'); + + await t + .drag(draggable, 0, 400, { speed: 1 }); + + // `.drag` does not trigger the `pointercancel` event. + // A sequence of `.drag` calls behaves like a single drag&drop operation, + // and each call does not trigger the `pointerup` event. + // Even if it did, the `pointercancel` event would not be triggered as specified in: + // https://www.w3.org/TR/pointerevents/#suppressing-a-pointer-event-stream + // This is a hack to test the event engine's logic. + await t.dispatchEvent(draggable, 'pointercancel'); + + await t + .drag(target, 0, 400, { speed: 1 }); + + await t.expect(hoverStartTriggerCount.textContent).eql('1'); + await t.expect(hoverEndTriggerCount.textContent).eql('1'); +}).before(async () => { + await init(); +}); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-fluent.blue.light.png b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-fluent.blue.light.png new file mode 100644 index 000000000000..a1306ae8cd3d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-fluent.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-generic.light.png b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-generic.light.png new file mode 100644 index 000000000000..13fad88006fb Binary files /dev/null and b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-generic.light.png differ diff --git a/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-material.blue.light.png b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-material.blue.light.png new file mode 100644 index 000000000000..74fac3f21290 Binary files /dev/null and b/e2e/testcafe-devextreme/tests/dataGrid/etalons/invisible-toolbar-buttons-material.blue.light.png differ diff --git a/e2e/testcafe-devextreme/tests/dataGrid/filterRow/filterRow.ts b/e2e/testcafe-devextreme/tests/dataGrid/filterRow/filterRow.ts index 592c53de5a70..6fc220d919fb 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/filterRow/filterRow.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/filterRow/filterRow.ts @@ -9,6 +9,49 @@ import { getNumberData } from '../helpers/generateDataSourceData'; fixture.disablePageReloads`FilterRow` .page(url(__dirname, '../../container.html')); +test('Filter should reset if the filter row editor text is cleared (T1257261)', async (t) => { + const dataGrid = new DataGrid('#container'); + const filterEditor = dataGrid.getFilterEditor(1, FilterTextBox); + const filterPanelText = dataGrid.getFilterPanel().getFilterText(); + + await t + // assert + .expect(filterPanelText.element.textContent) + .eql('[Text] Equals \'i\'') + // act + .click(filterEditor.input) + .pressKey('backspace') + .wait(100) // updateValueTimeout + // assert + .expect(filterPanelText.element.textContent) + .eql('Create Filter') + // act + .click(dataGrid.element) + // assert + .expect(filterPanelText.element.textContent) + .eql('Create Filter'); +}).before(async () => createWidget('dxDataGrid', { + dataSource: [ + { ID: 1, Text: 'Item 1' }, + { ID: 2, Text: '' }, + { ID: 3, Text: 'Item 3' }, + ], + keyExpr: 'ID', + showBorders: true, + remoteOperations: true, + headerFilter: { visible: true }, + filterRow: { visible: true }, + filterPanel: { visible: true }, + filterValue: ['Text', '=', 'i'], + columns: ['ID', { + dataField: 'Text', + selectedFilterOperation: '=', + }], + onEditorPreparing(e: any) { + e.updateValueTimeout = 100; + }, +})); + test('Filter row\'s height should be adjusted by content (T1072609)', async (t) => { const dataGrid = new DataGrid('#container'); const { takeScreenshot, compareResults } = createScreenshotsComparer(t); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/headerFilter/headerFilter.ts b/e2e/testcafe-devextreme/tests/dataGrid/headerFilter/headerFilter.ts index 15fd2fd294f2..c292258582e1 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/headerFilter/headerFilter.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/headerFilter/headerFilter.ts @@ -10,6 +10,47 @@ fixture.disablePageReloads`Header Filter` const GRID_CONTAINER = '#container'; +test('Data should be filtered if (Blank) is selected in the header filter (T1257261)', async (t) => { + const result: string[] = []; + const dataGrid = new DataGrid(GRID_CONTAINER); + const headerCell = dataGrid.getHeaders().getHeaderRow(0).getHeaderCell(1); + const dataCell = dataGrid.getDataRow(0).getDataCell(0); + const filterIconElement = headerCell.getFilterIcon(); + const headerFilter = new HeaderFilter(); + const buttons = headerFilter.getButtons(); + const list = headerFilter.getList(); + + await t + .click(filterIconElement) + .click(list.getItem(1).element) // Select second item with value 'Item 1' + .click(buttons.nth(0)); // Click OK + + result[0] = await dataCell.element().innerText; + + await t + .click(filterIconElement) + .click(list.getItem(1).element) // Deselect second item with value 'Item 1' + .click(list.getItem(0).element) // Select second item with value '(Blanks)' + .click(buttons.nth(0)); // Click OK + + result[1] = await dataCell.element().innerText; + + await t.expect(result[0]).eql('1') + .expect(result[1]).eql('2'); +}).before(async () => createWidget('dxDataGrid', { + dataSource: [ + { ID: 1, Text: 'Item 1' }, + { ID: 2, Text: '' }, + { ID: 3, Text: 'Item 3' }, + ], + keyExpr: 'ID', + showBorders: true, + remoteOperations: true, + headerFilter: { visible: true }, + filterRow: { visible: true }, + filterPanel: { visible: true }, +})); + test('HeaderFilter icon should be grayed out after the clearFilter call (T1193648)', async (t) => { const { takeScreenshot, compareResults } = createScreenshotsComparer(t); const dataGrid = new DataGrid(GRID_CONTAINER); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/headerPanel.ts b/e2e/testcafe-devextreme/tests/dataGrid/headerPanel.ts index dbf2a11af7d0..cd559d928c79 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/headerPanel.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/headerPanel.ts @@ -180,3 +180,33 @@ test('Toolbar should not reset its widget values when changing the disabled prop }], }, })); + +[ + Themes.genericLight, + Themes.materialBlue, + Themes.fluentBlue, +].forEach((theme) => { + test(`Invisible toolbar doesn't have additional paddings (T1261773) in ${theme}`, async (t) => { + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + const dataGrid = new DataGrid('#container'); + + await t + .expect(await takeScreenshot(`invisible-toolbar-buttons-${theme}.png`, dataGrid.element)) + .ok() + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); + }).before(async () => { + await changeTheme(theme); + + return createWidget('dxDataGrid', { + dataSource: getData(5, 3), + keyExpr: 'field_0', + toolbar: { + items: ['columnChooserButton'], + visible: false, + }, + }); + }).after(async () => { + await changeTheme(Themes.genericLight); + }); +}); diff --git a/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/T1269088_grid_with_fixed_columns_and_without_data.png b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/T1269088_grid_with_fixed_columns_and_without_data.png new file mode 100644 index 000000000000..7dd9ff334d0d Binary files /dev/null and b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/T1269088_grid_with_fixed_columns_and_without_data.png differ diff --git a/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/band-columns-1-(case-10)(rLines_=_false_cLines_=_false_borders_=_true_rtl_=_true_rAlt_=_true).png b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/band-columns-1-(case-10)(rLines_=_false_cLines_=_false_borders_=_true_rtl_=_true_rAlt_=_true).png index 37c1a547ffed..7c740fb1e86e 100644 Binary files a/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/band-columns-1-(case-10)(rLines_=_false_cLines_=_false_borders_=_true_rtl_=_true_rAlt_=_true).png and b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/etalons/band-columns-1-(case-10)(rLines_=_false_cLines_=_false_borders_=_true_rtl_=_true_rAlt_=_true).png differ diff --git a/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/stickyColumns.ts b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/stickyColumns.ts index fb473246a65e..489b020324a8 100644 --- a/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/stickyColumns.ts +++ b/e2e/testcafe-devextreme/tests/dataGrid/stickyColumns/stickyColumns.ts @@ -7,6 +7,7 @@ import { getData } from '../helpers/generateDataSourceData'; import url from '../../../helpers/getPageUrl'; import { changeTheme } from '../../../helpers/changeTheme'; import { Themes } from '../../../helpers/themes'; +import { defaultConfig } from './data'; const DATA_GRID_SELECTOR = '#container'; @@ -1367,3 +1368,21 @@ safeSizeTest('The simulated scrollbar should display correctly when there are st }); }); }); + +safeSizeTest('The grid should display correctly when there is no data and there are fixed columns (T1269088)', async (t) => { + // arrange, act + const dataGrid = new DataGrid('#container'); + const { takeScreenshot, compareResults } = createScreenshotsComparer(t); + + await t.expect(dataGrid.isReady()).ok(); + + await takeScreenshot('T1269088_grid_with_fixed_columns_and_without_data.png', dataGrid.element); + + // assert + await t + .expect(compareResults.isValid()) + .ok(compareResults.errorMessages()); +}, [1000, 800]).before(async () => createWidget('dxDataGrid', { + ...defaultConfig, + dataSource: [], +})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-horizontal-middle.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-horizontal-middle.png index e857ec3d287a..f0073716ac9e 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-horizontal-middle.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-horizontal-middle.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-vertical-end.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-vertical-end.png index 0b8246ec699e..25b7b401bac2 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-vertical-end.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-month-vertical-end.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-week-horizontal-middle.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-week-horizontal-middle.png index 088e955f6956..f5a597357236 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-week-horizontal-middle.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-week-horizontal-middle.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-workWeek-horizontal-middle.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-workWeek-horizontal-middle.png index 63b53f23262c..47fad764360e 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-workWeek-horizontal-middle.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-many-cells-workWeek-horizontal-middle.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-grouping-by-date.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-grouping-by-date.png index 45ae2a4e7090..0606bc62110a 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-grouping-by-date.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-grouping-by-date.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping-scaling.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping-scaling.png index 94c2d9309c19..f9e468120601 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping-scaling.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping-scaling.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping.png index 470fcce016d5..f76b52e9bc7d 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll-horizontal-grouping.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineDay-after-scroll-horizontal-grouping-scaling.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineDay-after-scroll-horizontal-grouping-scaling.png index 23b271b7f8bc..19f9e13de030 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineDay-after-scroll-horizontal-grouping-scaling.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineDay-after-scroll-horizontal-grouping-scaling.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineMonth-after-scroll-horizontal-grouping-scaling.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineMonth-after-scroll-horizontal-grouping-scaling.png index 424bf50337ac..955a3977fad7 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineMonth-after-scroll-horizontal-grouping-scaling.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineMonth-after-scroll-horizontal-grouping-scaling.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineWeek-after-scroll-horizontal-grouping-scaling.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineWeek-after-scroll-horizontal-grouping-scaling.png index ce8dfcddf549..17cdbbe36d3f 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineWeek-after-scroll-horizontal-grouping-scaling.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-timelineWeek-after-scroll-horizontal-grouping-scaling.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-grouping-by-date.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-grouping-by-date.png index 3f146ec4e7f4..d8bc2bec81fa 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-grouping-by-date.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-grouping-by-date.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping-scaling.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping-scaling.png index 4e944b53d9ae..6c7918e73ecb 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping-scaling.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping-scaling.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping.png index bce2d95a75a2..b7771f2633b9 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll-horizontal-grouping.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll.png index 1631e7368832..a1aceb1da8d8 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-week-after-scroll.png differ diff --git a/packages/devextreme-scss/.stylelintrc.json b/packages/devextreme-scss/.stylelintrc.json index c687a25cd37e..dee6e4c52eac 100644 --- a/packages/devextreme-scss/.stylelintrc.json +++ b/packages/devextreme-scss/.stylelintrc.json @@ -33,6 +33,8 @@ "selector-not-notation": null, "keyframe-selector-notation": null, "media-feature-range-notation": null, + "no-eol-whitespace": true, + "no-missing-end-of-source-newline": true, "scss/at-else-empty-line-before": null, "scss/at-if-closing-brace-newline-after": null, diff --git a/packages/devextreme-scss/package.json b/packages/devextreme-scss/package.json index 7e60505cfc10..cf0dba126cc8 100644 --- a/packages/devextreme-scss/package.json +++ b/packages/devextreme-scss/package.json @@ -14,7 +14,7 @@ "sass-embedded": "1.59.2", "stylelint": "15.11.0", "stylelint-config-standard-scss": "9.0.0", - "stylelint-scss": "5.3.1", + "stylelint-scss": "6.10.0", "through2": "2.0.5", "ts-jest": "29.1.2" }, diff --git a/packages/devextreme-scss/scss/widgets/base/_dropDownMenu.scss b/packages/devextreme-scss/scss/widgets/base/_dropDownMenu.scss index ba9b48e37745..3e409eae572d 100644 --- a/packages/devextreme-scss/scss/widgets/base/_dropDownMenu.scss +++ b/packages/devextreme-scss/scss/widgets/base/_dropDownMenu.scss @@ -21,7 +21,7 @@ display: block; border-top: 0; } - + .dx-list-item-content { display: block; } diff --git a/packages/devextreme-scss/scss/widgets/base/_tabPanel.scss b/packages/devextreme-scss/scss/widgets/base/_tabPanel.scss index 5519366a30a2..9a2f5e5e242e 100644 --- a/packages/devextreme-scss/scss/widgets/base/_tabPanel.scss +++ b/packages/devextreme-scss/scss/widgets/base/_tabPanel.scss @@ -22,7 +22,7 @@ .dx-tabpanel-tabs-position-right { flex-direction: row-reverse; - + &.dx-rtl { flex-direction: row; } @@ -34,7 +34,7 @@ .dx-tabpanel-tabs-position-left { flex-direction: row; - + &.dx-rtl { flex-direction: row-reverse; } diff --git a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagebubble/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagebubble/_mixins.scss index 1fc8d090db03..f688e795e40b 100644 --- a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagebubble/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagebubble/_mixins.scss @@ -24,13 +24,13 @@ &:first-child { border-start-start-radius: $border-radius; } - + &:last-child { border-end-start-radius: $border-radius; } } } - + .dx-chat-messagegroup-alignment-end { .dx-chat-messagebubble { color: $color-primary; diff --git a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagegroup/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagegroup/_mixins.scss index 94ca46ab9cda..322e4ab4cebd 100644 --- a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagegroup/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-messagegroup/_mixins.scss @@ -20,7 +20,7 @@ .dx-chat-messagegroup-information { column-gap: $information-gap; } - + .dx-chat-messagegroup-alignment-start { grid-template-columns: $messagegroup-start-template; } @@ -28,7 +28,7 @@ .dx-chat-messagegroup-alignment-start:has(.dx-avatar) { column-gap: $messagegroup-start-gap; } - + .dx-chat-messagegroup-time { font-size: $information-font-size; color: $information-timestamp-color; diff --git a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-typingindicator/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-typingindicator/_mixins.scss index 6567b4f99356..854ef661568d 100644 --- a/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-typingindicator/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/chat/layout/chat-typingindicator/_mixins.scss @@ -25,7 +25,7 @@ font-size: $font-size; color: $color; } - + .dx-chat-typingindicator-bubble { padding-block: $bubble-padding-block; padding-inline: $bubble-padding-inline; diff --git a/packages/devextreme-scss/scss/widgets/base/checkBox/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/checkBox/_mixins.scss index 2dd40c861269..b131e5edc239 100644 --- a/packages/devextreme-scss/scss/widgets/base/checkBox/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/checkBox/_mixins.scss @@ -29,7 +29,7 @@ .dx-checkbox-icon { .dx-checkbox-indeterminate & { color: $color; - + @include dx-checkbox-icon-centered($icon-height, $icon-width); &::before { diff --git a/packages/devextreme-scss/scss/widgets/base/dataGrid/_index.scss b/packages/devextreme-scss/scss/widgets/base/dataGrid/_index.scss index 4dcdf14e8b47..35b65dcb9a42 100644 --- a/packages/devextreme-scss/scss/widgets/base/dataGrid/_index.scss +++ b/packages/devextreme-scss/scss/widgets/base/dataGrid/_index.scss @@ -417,10 +417,9 @@ $datagrid-text-stub-background-image-path: null !default; tr { outline: none; } - + &:focus-within { outline: 2px solid $datagrid-focused-border-color; outline-offset: -2px; } } - diff --git a/packages/devextreme-scss/scss/widgets/base/dropDownButton/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/dropDownButton/_mixins.scss index f9220895908b..c5386d732acb 100644 --- a/packages/devextreme-scss/scss/widgets/base/dropDownButton/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/dropDownButton/_mixins.scss @@ -7,7 +7,7 @@ width: $dropdownbutton-icon-spindown-size; height: $dropdownbutton-icon-spindown-size; } - } + } .dx-dropdownbutton-action { &.dx-button-has-icon:not(.dx-button-has-text) { @@ -22,7 +22,7 @@ margin-inline-start: 4px; margin-inline-end: 0; } - } + } } .dx-dropdownbutton-has-arrow { diff --git a/packages/devextreme-scss/scss/widgets/base/dropDownEditor/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/dropDownEditor/_mixins.scss index 641fb4232792..5cf26b247242 100644 --- a/packages/devextreme-scss/scss/widgets/base/dropDownEditor/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/dropDownEditor/_mixins.scss @@ -29,7 +29,7 @@ .dx-texteditor-input { padding-inline-end: $invalid-badge-size + $texteditor-filled-input-horizontal-padding; } - + .dx-start-datebox { .dx-texteditor-input { padding-inline-end: $texteditor-filled-input-horizontal-padding; diff --git a/packages/devextreme-scss/scss/widgets/base/lookup/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/lookup/_mixins.scss index 8ccc7a728477..8b576c814548 100644 --- a/packages/devextreme-scss/scss/widgets/base/lookup/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/lookup/_mixins.scss @@ -10,20 +10,20 @@ ) { .dx-lookup-arrow { @include dx-icon($spin-icon-glyph); - + .dx-rtl & { &::before { content: $spin-icon-glyph-rtl; } } - + width: $arror-width; color: $icon-color; .dx-dropdowneditor-active & { color: $icon-color-active; } - + @include dx-icon-font-centered-sizing($icon-size); } } diff --git a/packages/devextreme-scss/scss/widgets/base/scrollable/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/scrollable/_mixins.scss index 397adc9a516b..b0dcce779eae 100644 --- a/packages/devextreme-scss/scss/widgets/base/scrollable/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/scrollable/_mixins.scss @@ -13,19 +13,19 @@ ) { .dx-scrollbar-hoverable { background-color: $scrollable-scrollbar-bg; - + &.dx-state-hover, &.dx-scrollable-scrollbar-active { background-color: $scrollable-scrollbar-active-bg; } - + &.dx-scrollable-scrollbar-active .dx-scrollable-scroll-content { background-color: $scrollable-scroll-active-bg; } - + .dx-scrollable-scroll.dx-state-invisible { opacity: 1; - + .dx-scrollable-scroll-content { background-color: transparent; } @@ -44,31 +44,31 @@ width: $scrollbar-size-thin; padding-inline-end: $scrollbar-scroll-boundary-padding; } - + &.dx-scrollbar-hoverable { width: $scrollbar-size-thin; transition: width 0.2s linear 0.15s, background-color 0.2s linear 0.15s; - + .dx-scrollable-scroll { transition: background-color 0.5s linear 1s, width 0.2s linear 150ms; - + .dx-scrollable-scroll-content { transition: background-color 0.15s linear 0.15s; } - + &.dx-state-invisible { transition: background-color 0.5s linear 1s, width 0.2s linear 0.15s; - + .dx-scrollable-scroll-content { transition: background-color 0.5s linear 1s; } } } - + &.dx-state-hover, &.dx-scrollable-scrollbar-active { width: $scrollbar-size; - + .dx-scrollable-scroll { width: $scrollbar-size; } @@ -87,31 +87,31 @@ height: $scrollbar-size-thin; padding-bottom: $scrollbar-scroll-boundary-padding; } - + &.dx-scrollbar-hoverable { height: $scrollbar-size-thin; transition: height 0.2s linear 0.15s, background-color 0.2s linear 0.15s; - + .dx-scrollable-scroll { transition: background-color 0.5s linear 1s, height 0.2s linear 0.15s; - + .dx-scrollable-scroll-content { transition: background-color 0.15s linear 0.15s; } - + &.dx-state-invisible { transition: background-color 0.5s linear 1s, height 0.2s linear 0.15s; - + .dx-scrollable-scroll-content { transition: background-color 0.5s linear 1s; } } } - + &.dx-state-hover, &.dx-scrollable-scrollbar-active { height: $scrollbar-size; - + .dx-scrollable-scroll { height: $scrollbar-size; } @@ -133,7 +133,7 @@ } } } - + &.dx-rtl, .dx-rtl & { > .dx-scrollable-wrapper { @@ -146,7 +146,7 @@ } } } - + &.dx-scrollable-horizontal, &.dx-scrollable-both { > .dx-scrollable-wrapper { diff --git a/packages/devextreme-scss/scss/widgets/base/splitter/_index.scss b/packages/devextreme-scss/scss/widgets/base/splitter/_index.scss index 409d3e8bad7d..a6b294c93841 100644 --- a/packages/devextreme-scss/scss/widgets/base/splitter/_index.scss +++ b/packages/devextreme-scss/scss/widgets/base/splitter/_index.scss @@ -4,7 +4,7 @@ display: flex; height: 100%; width: 100%; - + .dx-splitter-item { display: flex; overflow: hidden; @@ -49,7 +49,7 @@ &.dx-resize-handle-vertical { flex-direction: row; - + &.dx-resize-handle-resizable { cursor: row-resize; } diff --git a/packages/devextreme-scss/scss/widgets/base/splitter/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/splitter/_mixins.scss index 9562176fd919..5465a522f49c 100644 --- a/packages/devextreme-scss/scss/widgets/base/splitter/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/splitter/_mixins.scss @@ -9,12 +9,12 @@ .dx-resize-handle { color: $color; background-color: $background-color; - + &.dx-state-hover { color: $color-hover; background-color: $background-color-hover; } - + &.dx-state-active, &.dx-state-focused { color: $color-focused; diff --git a/packages/devextreme-scss/scss/widgets/base/switch/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/switch/_mixins.scss index 403613f18382..53c6d2604c6d 100644 --- a/packages/devextreme-scss/scss/widgets/base/switch/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/switch/_mixins.scss @@ -15,7 +15,7 @@ .dx-switch { width: $switch-width; height: $switch-height; - + .dx-switch-wrapper { position: relative; padding-top: $switch-padding,; @@ -35,7 +35,7 @@ overflow: visible; position: relative; padding: 0 $switch-container-horizontal-padding; - + &::before { position: absolute; content: ''; @@ -46,12 +46,12 @@ transition: $switch-transition; } } - + .dx-switch-inner { width: 200%; height: 100%; } - + .dx-switch-on, .dx-switch-off { flex-shrink: 0; @@ -63,17 +63,17 @@ text-align: center; line-height: 100%; } - + .dx-switch-on { background: transparent; } - + .dx-switch-off { display: none; padding-bottom: 10px; background-color: transparent; } - + .dx-switch-handle { flex-basis: $switch-handle-height; flex-shrink: 0; @@ -83,7 +83,7 @@ width: $switch-handle-height; height: $switch-handle-height; border-radius: $switch-handle-border-radius; - + &::before { display: block; content: ' '; @@ -112,7 +112,7 @@ .dx-switch-handle::before { background-color: $switch-handle-disabled-bg; } - + .dx-switch-container::before { background-color: $switch-disabled-bg; } @@ -156,11 +156,11 @@ .dx-switch-container::before { background-color: $switch-on-bg; } - + .dx-switch-handle::before { background-color: $switch-handle-on-bg; } - + &.dx-state-active, &.dx-state-focused { .dx-switch-handle::before { @@ -221,7 +221,7 @@ &.dx-state-readonly { .dx-switch-container::before { border-color: $switch-off-border-color-hover; - } + } } &.dx-invalid { @@ -373,12 +373,12 @@ background-color: $switch-invalid-container-bg; } } - + &.dx-switch-on-value:not(.dx-state-readonly):not(.dx-state-disabled) { .dx-switch-container .dx-switch-handle::before { background-color: $switch-invalid-handle-bg; } - + &.dx-state-active, &.dx-state-focused { .dx-switch-container .dx-switch-handle::before { diff --git a/packages/devextreme-scss/scss/widgets/base/textArea/_mixins.scss b/packages/devextreme-scss/scss/widgets/base/textArea/_mixins.scss index c18f7e580775..49a7e5a90cf5 100644 --- a/packages/devextreme-scss/scss/widgets/base/textArea/_mixins.scss +++ b/packages/devextreme-scss/scss/widgets/base/textArea/_mixins.scss @@ -11,12 +11,12 @@ .dx-texteditor-input-container { margin: $input-container-margin; } - + .dx-texteditor-input, .dx-placeholder::before { line-height: $content-line-height; } - + &.dx-texteditor-with-label:not(.dx-texteditor-label-outside), &.dx-texteditor-with-floating-label { &.dx-editor-outlined, @@ -27,26 +27,26 @@ padding-top: 0; } } - + &.dx-editor-outlined { .dx-texteditor-container { padding-top: $outlined-top-padding; } } - + &.dx-editor-filled { .dx-texteditor-container { padding-top: $filled-top-padding; } } - + &.dx-editor-underlined { .dx-texteditor-container { padding-top: $underlined-top-padding; } } } - + .dx-icon-clear { top: 0; margin-top: 0; diff --git a/packages/devextreme-scss/scss/widgets/base/treeView/_index.scss b/packages/devextreme-scss/scss/widgets/base/treeView/_index.scss index 8080410cfb21..e9a59d5d1d8f 100644 --- a/packages/devextreme-scss/scss/widgets/base/treeView/_index.scss +++ b/packages/devextreme-scss/scss/widgets/base/treeView/_index.scss @@ -39,15 +39,15 @@ gap: $gap; padding: $padding; margin: $margin; - + .dx-treeview-item-content { .dx-icon { @include dx-icon-sizing($icon-size); - + vertical-align: bottom; } } - + &.dx-state-hover { background-color: $hover-bg; border-radius: $border-radius; @@ -80,20 +80,20 @@ .dx-treeview-search { margin-bottom: $searchbox-margin-bottom; } - + .dx-treeview-with-search > .dx-scrollable { height: calc(100% - #{round($search-editor-height + $searchbox-margin-bottom)}); } - + .dx-treeview-select-all-item { border-bottom: 1px solid $border-color; padding: $select-all-item-padding; - + .dx-checkbox-container { display: flex; align-items: center; } - + .dx-checkbox-text { padding-inline-start: $item-element-gap; } @@ -106,11 +106,11 @@ .dx-treeview-border-visible { border: 1px solid $border-color; - + .dx-treeview-select-all-item { padding-inline-start: $select-all-item-border-visible-padding; } - + .dx-scrollable-content { > .dx-treeview-node-container { padding: $treeview-container-padding; @@ -120,8 +120,8 @@ } @mixin treeview-checkbox( - $checkbox-container-size, - $base-text-color, + $checkbox-container-size, + $base-text-color, $checkbox-border-color-focused, $treeview-item-selected-color, $treeview-item-selected-bg, diff --git a/packages/devextreme-scss/scss/widgets/fluent/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/_colors.scss index 832e5826d250..595f26a61f8c 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/_colors.scss @@ -188,7 +188,7 @@ $scrollview-pulldown-path: null !default; $base-separator-color: $base-border-color !default; $base-inverted-bg: darken($base-bg, 100%) !default; - + $base-inverted-text-color: #fff !default; $base-danger-hover: darken(desaturate($base-danger, 3.05), 5.10) !default; @@ -217,14 +217,14 @@ $scrollview-pulldown-path: null !default; $base-success: #10B230 !default; $base-danger: #F92F2F !default; $base-border-color: #414B5F !default; - + $base-typography-bg: #141E28 !default; } $base-accent-hover: lighten(desaturate($base-accent, 1.67), 5.29) !default; $base-accent-active: darken(desaturate(adjust-hue($base-accent, -1), 16.30), 10.59) !default; $base-accent-selected: darken(desaturate(adjust-hue($base-accent, -3), 9.05), 31.57) !default; - + $base-text-color: rgba(255, 255, 255, 1) !default; $base-label-color: darken($base-text-color, 40.00) !default; $base-icon-color: darken($base-text-color, 32.16) !default; diff --git a/packages/devextreme-scss/scss/widgets/fluent/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/_sizes.scss index 7e6ed9c8ff4d..88ad9823f724 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/_sizes.scss @@ -77,10 +77,10 @@ $base-border-radius: $fluent-base-border-radius !default; $fluent-base-standard-texteditor-input-horizontal-padding: 0 !default; -:root { +:root { --dx-component-height: #{$fluent-base-inline-widget-height}; --dx-font-size: #{$fluent-base-font-size}; - --dx-border-width: #{$fluent-base-border-width}; - --dx-border-radius: #{$fluent-base-border-radius}; - --dx-font-size-icon: #{$fluent-base-icon-size}; -} + --dx-border-width: #{$fluent-base-border-width}; + --dx-border-radius: #{$fluent-base-border-radius}; + --dx-font-size-icon: #{$fluent-base-icon-size}; +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/button/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/button/_sizes.scss index 83456e2e392e..5c4cec6e2300 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/button/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/button/_sizes.scss @@ -28,6 +28,6 @@ $fluent-button-box-shadow-size: 0 1px 3px !default; $fluent-button-icon-text-padding: $fluent-button-horizontal-padding !default; } -:root { - --dx-button-padding-inline: #{$fluent-button-horizontal-padding}; -} +:root { + --dx-button-padding-inline: #{$fluent-button-horizontal-padding}; +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/chat/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/chat/_colors.scss index fea35d1797d2..e7f2cded30f7 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/chat/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/chat/_colors.scss @@ -147,11 +147,11 @@ $chat-typingindicator-circle-bg-color: null !default; @if $mode == "dark" { $chat-bubble-background-color-secondary: lighten($base-bg, 7.84) !default; $chat-bubble-background-color-primary: darken(desaturate(adjust-hue($base-accent, 356.3), 14.7), 49.4) !default; - + $chat-information-author-name-color: lighten($base-bg, 43.92) !default; $chat-information-timestamp-color: lighten($base-bg, 43.92) !default; $chat-typingindicator-color: lighten($base-bg, 43.92) !default; - + $chat-messagelist-day-header-color: lighten($base-bg, 43.92) !default; $chat-messagelist-empty-icon-color: darken($base-icon-color, 25.88) !default; $chat-messagelist-empty-icon-background-color: lighten($base-bg, 7.84) !default; diff --git a/packages/devextreme-scss/scss/widgets/fluent/checkBox/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/checkBox/_index.scss index 84caa389d26f..81a8ab676685 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/checkBox/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/checkBox/_index.scss @@ -82,7 +82,7 @@ &.dx-state-disabled, .dx-state-disabled & { - opacity: 1; + opacity: 1; .dx-checkbox-icon { border-color: $checkbox-border-color-disabled; diff --git a/packages/devextreme-scss/scss/widgets/fluent/common/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/common/_sizes.scss index 0d7317380fa5..ca2a3c4ef064 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/common/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/common/_sizes.scss @@ -28,6 +28,6 @@ $fluent-base-dropdown-widgets-shadow: null !default; $fluent-base-dropdown-widgets-shadow: 0 0 2px 0 $base-dropdown-shadow-color1, 0 4px 8px 0 $base-dropdown-shadow-color2 !default; } -:root { +:root { --dx-line-height: #{$fluent-line-height}; -} +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/dataGrid/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/dataGrid/_colors.scss index 8ec5be6106cc..d8a80bb49733 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/dataGrid/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/dataGrid/_colors.scss @@ -10,10 +10,10 @@ $fluent-datagrid-grouppanel-item-bg: null !default; @if $color == "blue"{ $fluent-datagrid-grouppanel-item-bg: darken($base-bg, 5.88) !default; } - + @if $color == "saas" { $fluent-datagrid-grouppanel-item-bg: color.change($base-hover-bg, $alpha: 0.4) !default; - } + } } @if $mode == "dark" { diff --git a/packages/devextreme-scss/scss/widgets/fluent/dateRangeBox/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/dateRangeBox/_index.scss index 8d8ba5dd283b..e3fa5bf43d5e 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/dateRangeBox/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/dateRangeBox/_index.scss @@ -32,7 +32,7 @@ $fluent-editor-custom-button-margin: 6px; width: calc(100% - 2 * $fluent-daterangebox-active-bar-horizontal-margin); margin: 0 $fluent-daterangebox-active-bar-horizontal-margin; } - } + } } &.dx-editor-underlined, diff --git a/packages/devextreme-scss/scss/widgets/fluent/filterBuilder/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/filterBuilder/_sizes.scss index f195b1f2b64e..2f9224d4db40 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/filterBuilder/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/filterBuilder/_sizes.scss @@ -12,7 +12,7 @@ $fluent-filterbuilder-treeview-item-min-heigth: null !default; @if $size == "default" { $fluent-filterbuilder-icon-padding: 8px !default; $fluent-filterbuilder-filled-editor-padding: 13px 12px !default; - + $fluent-filterbuilder-treeview-item-left-padding: 12px !default; $fluent-filterbuilder-treeview-item-padding: 6px 12px 6px $fluent-filterbuilder-treeview-item-left-padding !default; $fluent-filterbuilder-treeview-toggle-left: 16px !default; diff --git a/packages/devextreme-scss/scss/widgets/fluent/form/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/form/_colors.scss index c09c1a678cad..ef8a1f3bac79 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/form/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/form/_colors.scss @@ -23,7 +23,7 @@ $form-field-mark-color: $form-field-item-color !default; @if $color == "blue" { $form-field-item-color: $base-text-color !default; } - + @if $color == "saas" { $form-field-item-color: $base-label-color !default; } diff --git a/packages/devextreme-scss/scss/widgets/fluent/gridBase/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/gridBase/_index.scss index ef7744ed3d00..c5959e7e34fd 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/gridBase/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/gridBase/_index.scss @@ -1139,7 +1139,7 @@ $fluent-grid-base-group-panel-message-line-height: $fluent-button-text-line-heig } &.dx-#{$widget-name}-sticky-columns { - .dx-row:not(.dx-row-lines, .dx-group-row, .dx-#{$widget-name}-group-footer, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { + .dx-data-row:not(.dx-row-lines, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { padding-top: $fluent-grid-base-cell-vertical-padding + 1px; } @@ -1151,7 +1151,7 @@ $fluent-grid-base-group-panel-message-line-height: $fluent-button-text-line-heig .dx-row.dx-edit-row > td.dx-command-edit { padding-top: $fluent-grid-base-cell-vertical-padding - 1px; } - + .dx-row.dx-edit-row > td:not(.dx-master-detail-cell) .dx-texteditor-input { height: $fluent-grid-base-cell-height - 2px; line-height: $fluent-grid-base-cell-height - 2px; diff --git a/packages/devextreme-scss/scss/widgets/fluent/list/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/list/_index.scss index c26f594e4ec1..6b7b26bbab3a 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/list/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/list/_index.scss @@ -267,7 +267,7 @@ $fluent-list-item-border: $fluent-list-item-border-width solid $list-border-colo color: $list-group-color; } } - + &:last-of-type { .dx-list-item { &:last-of-type { @@ -300,11 +300,11 @@ $fluent-list-item-border: $fluent-list-item-border-width solid $list-border-colo .dx-list-group-header-indicator { color: $list-header-indicator-color; - + .dx-list-collapsible-groups & { display: flex; align-items: center; - + @include dx-icon(chevrondown); @include dx-icon-sizing($fluent-base-icon-size); } @@ -463,7 +463,7 @@ $fluent-list-item-border: $fluent-list-item-border-width solid $list-border-colo @include dx-icon(dragvertical); color: $list-icon-color; - + @include dx-icon-sizing($fluent-base-icon-size); } } diff --git a/packages/devextreme-scss/scss/widgets/fluent/list/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/list/_sizes.scss index bf861ec37864..5cc5743c44a7 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/list/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/list/_sizes.scss @@ -29,6 +29,6 @@ $fluent-list-next-button-horizontal-padding: null !default; } :root { - --dx-list-item-padding-inline: #{$fluent-list-item-horizontal-padding}; - --dx-list-item-padding-block: #{$fluent-list-item-vertical-padding}; -} + --dx-list-item-padding-inline: #{$fluent-list-item-horizontal-padding}; + --dx-list-item-padding-block: #{$fluent-list-item-vertical-padding}; +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/loadIndicator/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/loadIndicator/_colors.scss index 705fdd537399..abd837a311b3 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/loadIndicator/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/loadIndicator/_colors.scss @@ -27,5 +27,5 @@ $load-indicator-inner-segment-border-color: null !default; } @if $mode == "dark" { - $load-indicator-inner-segment-border-color: $base-accent-selected !default; + $load-indicator-inner-segment-border-color: $base-accent-selected !default; } diff --git a/packages/devextreme-scss/scss/widgets/fluent/lookup/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/lookup/_index.scss index 0c6cad09c1a7..120f08c13a2e 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/lookup/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/lookup/_index.scss @@ -147,7 +147,7 @@ box-shadow: 0 0 2px 0 color.change($base-shadow-color, $alpha: 0.12); background: $overlay-content-bg; border-top-right-radius: $lookup-arrow-border-radius; - } + } } &.dx-position-top { diff --git a/packages/devextreme-scss/scss/widgets/fluent/numberBox/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/numberBox/_sizes.scss index 563d1da2ad5e..c2fd8daf91af 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/numberBox/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/numberBox/_sizes.scss @@ -8,8 +8,8 @@ $fluent-numberbox-touch-friendly-spin-container-width: null !default; @if $size == "default" { $fluent-numberbox-touch-friendly-spin-container-width: 48px !default; } - + @else if $size == "compact" { $fluent-numberbox-touch-friendly-spin-container-width: 48px !default; } - + diff --git a/packages/devextreme-scss/scss/widgets/fluent/pivotGrid/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/pivotGrid/_colors.scss index a45668ff782a..a4bc9d11c119 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/pivotGrid/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/pivotGrid/_colors.scss @@ -46,11 +46,11 @@ $pivotgrid-chevron-icon-color: $pivotgrid-area-color !default; $pivotgrid-grandtotalcolor: $base-hover-bg !default; $pivotgrid-field-area-box-background-color: darken($base-bg, 5.88) !default; } - + @if $color == "saas" { $pivotgrid-grandtotalcolor: color.change($base-hover-bg, $alpha: 0.4) !default; $pivotgrid-field-area-box-background-color: color.change($base-hover-bg, $alpha: 0.4) !default; - } + } } @if $mode == "dark" { diff --git a/packages/devextreme-scss/scss/widgets/fluent/popup/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/popup/_sizes.scss index 24c44ec20136..93f5409ad501 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/popup/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/popup/_sizes.scss @@ -45,6 +45,6 @@ $fluent-popup-focused-content-shadow: null !default; $fluent-popup-focused-content-shadow: 0 0 12px 0 $popup-focused-content-shadow-color, 0 32px 64px 0 $popup-focused-content-shadow-color !default; } -:root { - --dx-popup-toolbar-item-padding-inline: #{$fluent-popup-toolbar-item-spacing}; -} +:root { + --dx-popup-toolbar-item-padding-inline: #{$fluent-popup-toolbar-item-spacing}; +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/navigation-button/_base.scss b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/navigation-button/_base.scss index 9449cedfdbaa..c0c51ce9a080 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/navigation-button/_base.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/navigation-button/_base.scss @@ -35,7 +35,7 @@ height: $fluent-tab-nav-button-icon-height; font-size: $fluent-tab-nav-button-icon-font-size; } - + &.dx-state-active { border: none; } diff --git a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_primary.scss b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_primary.scss index 877f17c41b24..349f5d7faf91 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_primary.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_primary.scss @@ -19,11 +19,11 @@ &.dx-state-hover { background-color: $tabs-tab-bg-color-hover-primary; } - + &.dx-state-focused { background-color: $tabs-tab-bg-color-focus-primary; } - + &.dx-state-active { background-color: $tabs-tab-bg-color-active-primary; } @@ -47,7 +47,7 @@ &.dx-state-hover { @include dx-tabs-indicator-background($tabs-tab-border-color-hover); } - + &.dx-state-active { @include dx-tabs-indicator-background($tabs-tab-border-color-active); } @@ -92,7 +92,7 @@ &.dx-state-hover { @include dx-tabs-indicator-background($tabs-tab-border-color-hover); } - + &.dx-state-active { @include dx-tabs-indicator-background($tabs-tab-border-color-active); } diff --git a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_secondary.scss b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_secondary.scss index 7afc7291ed41..745cda66a2ac 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_secondary.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/tabs/layout/tab/styling-mode/_secondary.scss @@ -39,33 +39,33 @@ &.dx-state-hover .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-hover); } - + &.dx-state-active .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-active); } - + &.dx-tab-selected { .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-basic); } - + &.dx-state-focused .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-focused); } - + &.dx-state-hover .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-hover); } - + &.dx-state-active .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-active); } - + &.dx-state-disabled .dx-tab-content { @include dx-tabs-indicator-background($tabs-tab-border-color-disabled); } } - } + } } &.dx-tab-indicator-position-right { @@ -88,27 +88,27 @@ &.dx-state-hover { @include dx-tabs-indicator-background($tabs-tab-border-color-hover); } - + &.dx-state-active { @include dx-tabs-indicator-background($tabs-tab-border-color-active); } } - + .dx-tab-selected { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-basic); - + &.dx-state-focused { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-focused); } - + &.dx-state-hover { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-hover); } - + &.dx-state-active { @include dx-tabs-indicator-background($tabs-tab-border-color-selected-active); } - + &.dx-state-disabled { @include dx-tabs-indicator-background($tabs-tab-border-color-disabled); } diff --git a/packages/devextreme-scss/scss/widgets/fluent/tabs/mixins/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/tabs/mixins/_index.scss index ca6d2a994259..002c2ac14ca9 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/tabs/mixins/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/tabs/mixins/_index.scss @@ -50,7 +50,7 @@ @mixin dx-tabs-indicator-secondary { @include dx-tabs-indicator(); - + &::after { border-radius: $fluent-indicator-border-radius-secondary; } diff --git a/packages/devextreme-scss/scss/widgets/fluent/tagBox/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/tagBox/_index.scss index 8eef44cff592..5a9c7bfa1925 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/tagBox/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/tagBox/_index.scss @@ -66,7 +66,7 @@ padding-bottom: $fluent-tagbox-filled-with-label-bottom-padding; } } - + &.dx-editor-underlined { .dx-tag-container, .dx-placeholder::before { diff --git a/packages/devextreme-scss/scss/widgets/fluent/textEditor/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/textEditor/_colors.scss index 5883c78087db..738a801a7c0f 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/textEditor/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/textEditor/_colors.scss @@ -98,7 +98,7 @@ $texteditor-label-transition: $texteditor-outlined-bg: $base-element-bg !default; $texteditor-filled-bg: darken($base-element-bg, 3.9) !default; } - + @if $color == "saas" { $texteditor-color: rgba(66, 81, 118, 1) !default; $texteditor-placeholder-color: rgba(144, 158, 192, 1) !default; @@ -148,9 +148,6 @@ $texteditor-label-color: $texteditor-placeholder-color; $texteditor-label-color-focused: $base-accent; :root { - --dx-texteditor-color-text: #{$texteditor-color}; + --dx-texteditor-color-text: #{$texteditor-color}; --dx-texteditor-color-label: #{$texteditor-label-color}; } - - - diff --git a/packages/devextreme-scss/scss/widgets/fluent/toast/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/toast/_colors.scss index 8a55ffc9ab31..057b1a0013f5 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/toast/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/toast/_colors.scss @@ -10,7 +10,7 @@ $warning-color: null !default; @if $mode == "light" { $warning-color: $base-text-color !default; } - + @if $mode == "dark" { $warning-color: $base-inverted-text-color !default; } diff --git a/packages/devextreme-scss/scss/widgets/fluent/toolbar/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/toolbar/_sizes.scss index f4d132c25a7c..d72e05698d91 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/toolbar/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/toolbar/_sizes.scss @@ -21,5 +21,5 @@ $fluent-toolbar-section-padding: null !default; } :root { - --dx-toolbar-height: #{$fluent-toolbar-height}; -} + --dx-toolbar-height: #{$fluent-toolbar-height}; +} diff --git a/packages/devextreme-scss/scss/widgets/fluent/typography/_sizes.scss b/packages/devextreme-scss/scss/widgets/fluent/typography/_sizes.scss index 1d68a76e0039..42f21a2d9a20 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/typography/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/typography/_sizes.scss @@ -45,16 +45,16 @@ $fluent-h6-font-size: null !default; } :root { - --dx-font-size-heading-1: #{$fluent-h1-font-size}; - --dx-font-size-heading-2: #{$fluent-h2-font-size}; - --dx-font-size-heading-3: #{$fluent-h3-font-size}; - --dx-font-size-heading-4: #{$fluent-h4-font-size}; - --dx-font-size-heading-5: #{$fluent-h5-font-size}; + --dx-font-size-heading-1: #{$fluent-h1-font-size}; + --dx-font-size-heading-2: #{$fluent-h2-font-size}; + --dx-font-size-heading-3: #{$fluent-h3-font-size}; + --dx-font-size-heading-4: #{$fluent-h4-font-size}; + --dx-font-size-heading-5: #{$fluent-h5-font-size}; --dx-font-size-heading-6: #{$fluent-h6-font-size}; - --dx-font-size-xl: #{$fluent-xl-font-size}; - --dx-font-size-lg: #{$fluent-l-font-size}; - --dx-font-size-md: #{$fluent-m-font-size}; - --dx-font-size-sm: #{$fluent-s-font-size}; - --dx-font-size-xs: #{$fluent-xs-font-size}; + --dx-font-size-xl: #{$fluent-xl-font-size}; + --dx-font-size-lg: #{$fluent-l-font-size}; + --dx-font-size-md: #{$fluent-m-font-size}; + --dx-font-size-sm: #{$fluent-s-font-size}; + --dx-font-size-xs: #{$fluent-xs-font-size}; } diff --git a/packages/devextreme-scss/scss/widgets/generic/_sizes.scss b/packages/devextreme-scss/scss/widgets/generic/_sizes.scss index d4e51bd412d9..bc8003862f40 100644 --- a/packages/devextreme-scss/scss/widgets/generic/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/generic/_sizes.scss @@ -74,7 +74,7 @@ $generic-treeview-search-editor-height: round($generic-base-line-height * $gener :root { --dx-component-height: #{$generic-base-inline-widget-height}; --dx-font-size: #{$generic-base-font-size}; - --dx-border-width: #{$generic-base-border-width}; - --dx-border-radius: #{$base-border-radius}; - --dx-font-size-icon: #{$generic-base-icon-size}; + --dx-border-width: #{$generic-base-border-width}; + --dx-border-radius: #{$base-border-radius}; + --dx-font-size-icon: #{$generic-base-icon-size}; } diff --git a/packages/devextreme-scss/scss/widgets/generic/button/_sizes.scss b/packages/devextreme-scss/scss/widgets/generic/button/_sizes.scss index a44b3355592f..824673362b6c 100644 --- a/packages/devextreme-scss/scss/widgets/generic/button/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/generic/button/_sizes.scss @@ -27,6 +27,6 @@ $generic-button-content-line-height: $generic-base-line-height !default; $generic-button-box-shadow-size: 0 1px 2px !default; } -:root { - --dx-button-padding-inline: #{$generic-button-horizontal-padding}; -} +:root { + --dx-button-padding-inline: #{$generic-button-horizontal-padding}; +} diff --git a/packages/devextreme-scss/scss/widgets/generic/chat/_colors.scss b/packages/devextreme-scss/scss/widgets/generic/chat/_colors.scss index 6665e0c4a189..43f13cb02bc5 100644 --- a/packages/devextreme-scss/scss/widgets/generic/chat/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/generic/chat/_colors.scss @@ -148,7 +148,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: lighten($base-bg, 32.55) !default; $chat-information-timestamp-color: lighten($base-bg, 32.55) !default; $chat-typingindicator-color: lighten($base-bg, 32.55) !default; - + $chat-messagelist-day-header-color: lighten($base-bg, 32.55) !default; $chat-messagelist-empty-icon-color: darken($base-icon-color, 37.25) !default; $chat-messagelist-empty-icon-background-color: lighten($base-bg, 7.84) !default; @@ -168,7 +168,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: darken($base-bg, 41.57) !default; $chat-information-timestamp-color: darken($base-bg, 41.57) !default; $chat-typingindicator-color: darken($base-bg, 41.57) !default; - + $chat-messagelist-day-header-color: darken($base-bg, 41.57) !default; $chat-messagelist-empty-icon-color: $base-icon-color !default; $chat-messagelist-empty-icon-background-color: darken($base-bg, 7.84) !default; @@ -188,7 +188,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: $base-text-color !default; $chat-information-timestamp-color: $base-text-color !default; $chat-typingindicator-color: $base-text-color !default; - + $chat-messagelist-day-header-color: $base-text-color !default; $chat-messagelist-empty-icon-color: $base-bg !default; $chat-messagelist-empty-icon-background-color: $base-inverted-bg !default; @@ -208,7 +208,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: lighten($base-bg, 32.55) !default; $chat-information-timestamp-color: lighten($base-bg, 32.55) !default; $chat-typingindicator-color: lighten($base-bg, 32.55) !default; - + $chat-messagelist-day-header-color: lighten($base-bg, 32.55) !default; $chat-messagelist-empty-icon-color: $base-icon-color !default; $chat-messagelist-empty-icon-background-color: darken($base-bg, 7.84) !default; @@ -228,7 +228,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: lighten($base-bg, 32.55) !default; $chat-information-timestamp-color: lighten($base-bg, 32.55) !default; $chat-typingindicator-color: lighten($base-bg, 32.55) !default; - + $chat-messagelist-day-header-color: lighten($base-bg, 32.55) !default; $chat-messagelist-empty-icon-color: darken($base-icon-color, 37.25) !default; $chat-messagelist-empty-icon-background-color: lighten($base-bg, 7.84) !default; @@ -248,7 +248,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: darken($base-bg, 41.57) !default; $chat-information-timestamp-color: darken($base-bg, 41.57) !default; $chat-typingindicator-color: darken($base-bg, 41.57) !default; - + $chat-messagelist-day-header-color: darken($base-bg, 41.57) !default; $chat-messagelist-empty-icon-color: $base-icon-color !default; $chat-messagelist-empty-icon-background-color: darken($base-bg, 7.84) !default; @@ -268,7 +268,7 @@ $chat-typingindicator-circle-bg-color: null !default; $chat-information-author-name-color: darken($base-bg, 41.57) !default; $chat-information-timestamp-color: darken($base-bg, 41.57) !default; $chat-typingindicator-color: darken($base-bg, 41.57) !default; - + $chat-messagelist-day-header-color: darken($base-bg, 41.57) !default; $chat-messagelist-empty-icon-color: $base-icon-color !default; $chat-messagelist-empty-icon-background-color: darken($base-bg, 7.84) !default; diff --git a/packages/devextreme-scss/scss/widgets/generic/gridBase/_index.scss b/packages/devextreme-scss/scss/widgets/generic/gridBase/_index.scss index 87ad7929bf10..a005ee5a11e2 100644 --- a/packages/devextreme-scss/scss/widgets/generic/gridBase/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/gridBase/_index.scss @@ -201,7 +201,7 @@ $generic-grid-base-cell-input-height: round($generic-base-line-height * $generic min-width: 20px; } } - + .dx-command-edit-with-icons { .dx-link { @include dx-icon-sizing($generic-command-edit-icon-size); @@ -1019,7 +1019,7 @@ $generic-grid-base-cell-input-height: round($generic-base-line-height * $generic } .dx-#{$widget-name}-rowsview.dx-#{$widget-name}-sticky-columns { - .dx-row:not(.dx-row-lines, .dx-group-row, .dx-#{$widget-name}-group-footer, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { + .dx-data-row:not(.dx-row-lines, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { padding-top: $generic-grid-base-cell-padding + 1px; } diff --git a/packages/devextreme-scss/scss/widgets/generic/list/_index.scss b/packages/devextreme-scss/scss/widgets/generic/list/_index.scss index bd0b5c5a6e64..72f6f988006f 100644 --- a/packages/devextreme-scss/scss/widgets/generic/list/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/list/_index.scss @@ -201,7 +201,7 @@ $generic-list-search-editor-height: round($generic-base-line-height * $generic-b border-top-color: $list-group-color; content: ' '; } - + .dx-list-group-collapsed &::before { border-bottom-color: $list-group-color; border-width: 0 5px 5px 5px; diff --git a/packages/devextreme-scss/scss/widgets/generic/list/_sizes.scss b/packages/devextreme-scss/scss/widgets/generic/list/_sizes.scss index 72aedd6a9f6d..5162b259dcf2 100644 --- a/packages/devextreme-scss/scss/widgets/generic/list/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/generic/list/_sizes.scss @@ -51,4 +51,4 @@ $generic-list-border-width: 1px !default; :root { --dx-list-item-padding-inline: #{$generic-list-item-horizontal-padding}; --dx-list-item-padding-block: #{$generic-list-item-vertical-padding}; -} +} diff --git a/packages/devextreme-scss/scss/widgets/generic/menu/_index.scss b/packages/devextreme-scss/scss/widgets/generic/menu/_index.scss index 1051c240c967..22be73c9673c 100644 --- a/packages/devextreme-scss/scss/widgets/generic/menu/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/menu/_index.scss @@ -21,7 +21,7 @@ border-style: solid; border-color: transparent; border-width: 1px; - + &::before { content: ''; position: absolute; diff --git a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_base.scss b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_base.scss index 811ca9a49aa4..85df8f51721e 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_base.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_base.scss @@ -16,7 +16,7 @@ .dx-tabpanel { .dx-tabs-wrapper { border: none; - + &::after { top: 0; bottom: 0; diff --git a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-bottom.scss b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-bottom.scss index 07e646602ccd..e901b36f91e9 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-bottom.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-bottom.scss @@ -16,7 +16,7 @@ .dx-tabs-wrapper { border-block-start: $generic-tabs-border; border-block-end: $generic-tabs-border; - + @include dx-tabs-border-mixin( none, $generic-tabs-border, diff --git a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-top.scss b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-top.scss index 3a4543fc7fe1..2ce2e76fc300 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-top.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab-panel/_position-top.scss @@ -16,7 +16,7 @@ .dx-tabs-wrapper { border-block-start: $generic-tabs-border; border-block-end: $generic-tabs-border; - + @include dx-tabs-border-mixin( none, $generic-tabs-border, diff --git a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab/_base.scss b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab/_base.scss index df78a5e269fe..1bcc97509911 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab/_base.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabPanel/layout/tab/_base.scss @@ -58,7 +58,7 @@ border-inline-end: none; } } - + &.dx-focused-disabled-prev-tab { &::after { border-inline-start: none; @@ -73,7 +73,7 @@ border-block-end: none; } } - + &.dx-focused-disabled-prev-tab { &::after { border-block-start: none; diff --git a/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tab/_base.scss b/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tab/_base.scss index 8689113b458f..aae274a6bc20 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tab/_base.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tab/_base.scss @@ -133,7 +133,7 @@ border-inline-end: none; } } - + &.dx-focused-disabled-prev-tab { &::after { border-inline-start: none; diff --git a/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tabs/_base.scss b/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tabs/_base.scss index 822df2418768..65f96ccda915 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tabs/_base.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabs/layout/tabs/_base.scss @@ -44,7 +44,7 @@ background-color: $tabs-tab-bg; border-block-start: $generic-tabs-border-transparent; border-block-end: $generic-tabs-border-transparent; - + @include dx-tabs-after-mixin(true); @include dx-tabs-border-mixin( $generic-tabs-border, diff --git a/packages/devextreme-scss/scss/widgets/generic/tabs/mixins/_index.scss b/packages/devextreme-scss/scss/widgets/generic/tabs/mixins/_index.scss index 944344b6eea1..5a0561e9a4eb 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tabs/mixins/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tabs/mixins/_index.scss @@ -39,6 +39,6 @@ border-block-start: $border-block-start; border-inline-end: $border-inline-end; border-block-end: $border-block-end; - border-inline-start: $border-inline-start; + border-inline-start: $border-inline-start; } } diff --git a/packages/devextreme-scss/scss/widgets/generic/tagBox/_index.scss b/packages/devextreme-scss/scss/widgets/generic/tagBox/_index.scss index 6959bafea2a5..4f5da6db4618 100644 --- a/packages/devextreme-scss/scss/widgets/generic/tagBox/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/tagBox/_index.scss @@ -40,7 +40,7 @@ .dx-tagbox { .dx-tag-container.dx-texteditor-input-container { padding-bottom: $generic-tagbox-tag-container-padding-bottom; - + .dx-texteditor-input { padding-bottom: $generic-base-inline-borderedwidget-bottom-padding - $generic-tagbox-tag-container-padding-bottom; min-height: $generic-texteditor-input-height - $generic-tagbox-tag-container-padding-bottom; diff --git a/packages/devextreme-scss/scss/widgets/generic/textEditor/_colors.scss b/packages/devextreme-scss/scss/widgets/generic/textEditor/_colors.scss index 985dd9daea09..e9ba30b175ee 100644 --- a/packages/devextreme-scss/scss/widgets/generic/textEditor/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/generic/textEditor/_colors.scss @@ -134,6 +134,6 @@ $texteditor-label-transition: $texteditor-label-color: $texteditor-placeholder-color; :root { - --dx-texteditor-color-text: #{$texteditor-color}; + --dx-texteditor-color-text: #{$texteditor-color}; --dx-texteditor-color-label: #{$texteditor-label-color}; } diff --git a/packages/devextreme-scss/scss/widgets/generic/textEditor/_index.scss b/packages/devextreme-scss/scss/widgets/generic/textEditor/_index.scss index 2d010a18f8aa..b3f330f9c7b2 100644 --- a/packages/devextreme-scss/scss/widgets/generic/textEditor/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/textEditor/_index.scss @@ -155,7 +155,7 @@ $generic-texteditor-invalid-badge-size: $generic-invalid-badge-size + 2 * $gener } @include validation-icon-position(); - + &.dx-validation-pending { .dx-texteditor-input { padding-inline-end: $generic-texteditor-invalid-badge-size; @@ -285,7 +285,7 @@ $generic-texteditor-invalid-badge-size: $generic-invalid-badge-size + 2 * $gener $generic-texteditor-filled-input-with-label-bottom-padding, $generic-texteditor-label-outside-font-size, $generic-texteditor-label-outside-height, -); +); @include dx-editor-underlined( $texteditor-label-transition, $generic-texteditor-label-size, diff --git a/packages/devextreme-scss/scss/widgets/generic/treeView/_index.scss b/packages/devextreme-scss/scss/widgets/generic/treeView/_index.scss index 858406900a9e..afab366f1002 100644 --- a/packages/devextreme-scss/scss/widgets/generic/treeView/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/treeView/_index.scss @@ -24,7 +24,7 @@ ); @include default-expander-icon( 'spindown', - 'spinright', + 'spinright', $generic-base-icon-size, $generic-treeview-toggle-item-width, $treeview-spin-icon-color, diff --git a/packages/devextreme-scss/scss/widgets/generic/typography/_sizes.scss b/packages/devextreme-scss/scss/widgets/generic/typography/_sizes.scss index 15b6e6b29a6f..7bf7aea4124a 100644 --- a/packages/devextreme-scss/scss/widgets/generic/typography/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/generic/typography/_sizes.scss @@ -43,15 +43,15 @@ $generic-h6-font-size: null !default; } :root { - --dx-font-size-heading-1: #{$generic-h1-font-size}; - --dx-font-size-heading-2: #{$generic-h2-font-size}; - --dx-font-size-heading-3: #{$generic-h3-font-size}; - --dx-font-size-heading-4: #{$generic-h4-font-size}; - --dx-font-size-heading-5: #{$generic-h5-font-size}; + --dx-font-size-heading-1: #{$generic-h1-font-size}; + --dx-font-size-heading-2: #{$generic-h2-font-size}; + --dx-font-size-heading-3: #{$generic-h3-font-size}; + --dx-font-size-heading-4: #{$generic-h4-font-size}; + --dx-font-size-heading-5: #{$generic-h5-font-size}; --dx-font-size-heading-6: #{$generic-h6-font-size}; - --dx-font-size-xl: #{$generic-xl-font-size}; - --dx-font-size-lg: #{$generic-l-font-size}; - --dx-font-size-md: #{$generic-m-font-size}; - --dx-font-size-sm: #{$generic-s-font-size}; - --dx-font-size-xs: #{$generic-xs-font-size}; + --dx-font-size-xl: #{$generic-xl-font-size}; + --dx-font-size-lg: #{$generic-l-font-size}; + --dx-font-size-md: #{$generic-m-font-size}; + --dx-font-size-sm: #{$generic-s-font-size}; + --dx-font-size-xs: #{$generic-xs-font-size}; } diff --git a/packages/devextreme-scss/scss/widgets/material/button/_sizes.scss b/packages/devextreme-scss/scss/widgets/material/button/_sizes.scss index 7930dd56b496..0999f8b0b357 100644 --- a/packages/devextreme-scss/scss/widgets/material/button/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/material/button/_sizes.scss @@ -34,6 +34,6 @@ $material-button-active-box-shadow-size: 0 4px 6px !default; $material-button-min-width: 48px !default; } -:root { - --dx-button-padding-inline: #{$material-button-horizontal-padding}; -} +:root { + --dx-button-padding-inline: #{$material-button-horizontal-padding}; +} diff --git a/packages/devextreme-scss/scss/widgets/material/gridBase/_index.scss b/packages/devextreme-scss/scss/widgets/material/gridBase/_index.scss index 75bcbec0bf06..6e65314d0f56 100644 --- a/packages/devextreme-scss/scss/widgets/material/gridBase/_index.scss +++ b/packages/devextreme-scss/scss/widgets/material/gridBase/_index.scss @@ -1110,7 +1110,7 @@ $material-grid-base-group-panel-message-line-height: $material-button-text-line- } &.dx-#{$widget-name}-sticky-columns { - .dx-row:not(.dx-row-lines, .dx-group-row, .dx-datagrid-group-footer, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { + .dx-data-row:not(.dx-row-lines, .dx-edit-row, .dx-selection, .dx-row-focused) > td:not(.dx-editor-cell, .dx-master-detail-cell) { padding-top: $material-grid-base-cell-vertical-padding + 1px; } @@ -1123,7 +1123,7 @@ $material-grid-base-group-panel-message-line-height: $material-button-text-line- padding-top: $material-grid-base-cell-vertical-padding - 1px; padding-bottom: $material-grid-base-cell-vertical-padding - 1px; } - + .dx-row.dx-edit-row > td:not(.dx-master-detail-cell) .dx-texteditor-input { height: $material-grid-base-cell-height - 1px; line-height: $material-grid-base-cell-height - 1px; diff --git a/packages/devextreme-scss/scss/widgets/material/list/_sizes.scss b/packages/devextreme-scss/scss/widgets/material/list/_sizes.scss index ec946edfb1c4..61a9d35270c3 100644 --- a/packages/devextreme-scss/scss/widgets/material/list/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/material/list/_sizes.scss @@ -40,7 +40,7 @@ $material-list-select-all-margin-top: -1px !default; $material-list-main-font-size: 13px !default; } -:root { +:root { --dx-list-item-padding-inline: #{$material-list-item-horizontal-padding}; --dx-list-item-padding-block: #{$material-list-item-vertical-padding}; -} +} diff --git a/packages/devextreme-scss/scss/widgets/material/tabs/layout/navigation-button/_base.scss b/packages/devextreme-scss/scss/widgets/material/tabs/layout/navigation-button/_base.scss index 1f1d66c3c9e0..fb6a332046bf 100644 --- a/packages/devextreme-scss/scss/widgets/material/tabs/layout/navigation-button/_base.scss +++ b/packages/devextreme-scss/scss/widgets/material/tabs/layout/navigation-button/_base.scss @@ -41,7 +41,7 @@ height: $material-tab-nav-button-icon-height; font-size: $material-tab-nav-button-icon-font-size; } - + &.dx-state-active { border: none; } diff --git a/packages/devextreme-scss/scss/widgets/material/tabs/layout/tab/styling-mode/_secondary.scss b/packages/devextreme-scss/scss/widgets/material/tabs/layout/tab/styling-mode/_secondary.scss index c3116658d947..4448864253f2 100644 --- a/packages/devextreme-scss/scss/widgets/material/tabs/layout/tab/styling-mode/_secondary.scss +++ b/packages/devextreme-scss/scss/widgets/material/tabs/layout/tab/styling-mode/_secondary.scss @@ -35,7 +35,7 @@ .dx-tab.dx-tab-selected .dx-tab-content { @include dx-tabs-horizontal-indicator-secondary(top, $tabs-selected-tab-border-color); } - + .dx-tab-selected.dx-state-disabled .dx-tab-content { @include dx-tabs-horizontal-indicator-secondary(top, $tabs-disabled-tab-border-color); } @@ -58,7 +58,7 @@ .dx-tab-selected.dx-state-disabled .dx-tab-content { @include dx-tabs-horizontal-indicator-secondary(bottom, $tabs-disabled-tab-border-color); - } + } } &.dx-tab-indicator-position-left { diff --git a/packages/devextreme-scss/scss/widgets/material/textArea/_sizes.scss b/packages/devextreme-scss/scss/widgets/material/textArea/_sizes.scss index b95a495411d7..500c42cdb0ee 100644 --- a/packages/devextreme-scss/scss/widgets/material/textArea/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/material/textArea/_sizes.scss @@ -5,7 +5,7 @@ $textarea-content-line-height: null !default; $textarea-font-size: $material-texteditor-font-size !default; - + @if $size == "default" { $textarea-content-line-height: 24px !default; } diff --git a/packages/devextreme-scss/scss/widgets/material/textEditor/_colors.scss b/packages/devextreme-scss/scss/widgets/material/textEditor/_colors.scss index e516770eef84..01e52ca51c43 100644 --- a/packages/devextreme-scss/scss/widgets/material/textEditor/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/material/textEditor/_colors.scss @@ -74,7 +74,7 @@ $texteditor-label-transition: } :root { - --dx-texteditor-color-text: #{$texteditor-color}; + --dx-texteditor-color-text: #{$texteditor-color}; --dx-texteditor-color-label: #{$texteditor-label-color}; } diff --git a/packages/devextreme-scss/scss/widgets/material/treeView/_index.scss b/packages/devextreme-scss/scss/widgets/material/treeView/_index.scss index 6be9b2920a6f..c887bef84d09 100644 --- a/packages/devextreme-scss/scss/widgets/material/treeView/_index.scss +++ b/packages/devextreme-scss/scss/widgets/material/treeView/_index.scss @@ -20,7 +20,7 @@ background-color: color.change($checkbox-border-color, $alpha: 0.1); transform: scale(1); } - + &.dx-checkbox-checked, &.dx-checkbox-indeterminate { .dx-checkbox-icon::after { @@ -43,7 +43,7 @@ ); @include default-expander-icon( 'chevrondown', - 'chevronright', + 'chevronright', $material-base-icon-size, $material-treeview-toggle-item-width, $treeview-spin-icon-color, diff --git a/packages/devextreme-scss/scss/widgets/material/typography/_sizes.scss b/packages/devextreme-scss/scss/widgets/material/typography/_sizes.scss index 0b7f635b3707..e2ec13fb78a2 100644 --- a/packages/devextreme-scss/scss/widgets/material/typography/_sizes.scss +++ b/packages/devextreme-scss/scss/widgets/material/typography/_sizes.scss @@ -45,16 +45,16 @@ $material-h6-font-size: null !default; } :root { - --dx-font-size-heading-1: #{$material-h1-font-size}; - --dx-font-size-heading-2: #{$material-h2-font-size}; - --dx-font-size-heading-3: #{$material-h3-font-size}; - --dx-font-size-heading-4: #{$material-h4-font-size}; - --dx-font-size-heading-5: #{$material-h5-font-size}; + --dx-font-size-heading-1: #{$material-h1-font-size}; + --dx-font-size-heading-2: #{$material-h2-font-size}; + --dx-font-size-heading-3: #{$material-h3-font-size}; + --dx-font-size-heading-4: #{$material-h4-font-size}; + --dx-font-size-heading-5: #{$material-h5-font-size}; --dx-font-size-heading-6: #{$material-h6-font-size}; - --dx-font-size-xl: #{$material-xl-font-size}; - --dx-font-size-lg: #{$material-l-font-size}; - --dx-font-size-md: #{$material-m-font-size}; - --dx-font-size-sm: #{$material-s-font-size}; - --dx-font-size-xs: #{$material-xs-font-size}; + --dx-font-size-xl: #{$material-xl-font-size}; + --dx-font-size-lg: #{$material-l-font-size}; + --dx-font-size-md: #{$material-m-font-size}; + --dx-font-size-sm: #{$material-s-font-size}; + --dx-font-size-xs: #{$material-xs-font-size}; } diff --git a/packages/devextreme/js/__internal/events/pointer/m_mouse.ts b/packages/devextreme/js/__internal/events/pointer/m_mouse.ts index c5bb04abef0d..d5dd704dfd51 100644 --- a/packages/devextreme/js/__internal/events/pointer/m_mouse.ts +++ b/packages/devextreme/js/__internal/events/pointer/m_mouse.ts @@ -1,5 +1,6 @@ import BaseStrategy from '@js/common/core/events/pointer/base'; import Observer from '@js/common/core/events/pointer/observer'; +import browser from '@js/core/utils/browser'; import { extend } from '@js/core/utils/extend'; /* eslint-disable spellcheck/spell-checker */ @@ -7,13 +8,19 @@ const eventMap = { dxpointerdown: 'mousedown', dxpointermove: 'mousemove', dxpointerup: 'mouseup', - dxpointercancel: '', + dxpointercancel: 'pointercancel', dxpointerover: 'mouseover', dxpointerout: 'mouseout', dxpointerenter: 'mouseenter', dxpointerleave: 'mouseleave', }; +// due to this https://bugs.webkit.org/show_bug.cgi?id=222632 issue +if (browser.safari) { + // eslint-disable-next-line no-useless-concat + eventMap.dxpointercancel += ' ' + 'dragstart'; +} + const normalizeMouseEvent = function (e) { e.pointerId = 1; diff --git a/packages/devextreme/js/__internal/grids/data_grid/export/m_export.ts b/packages/devextreme/js/__internal/grids/data_grid/export/m_export.ts index b3bee519040b..238482e5ab10 100644 --- a/packages/devextreme/js/__internal/grids/data_grid/export/m_export.ts +++ b/packages/devextreme/js/__internal/grids/data_grid/export/m_export.ts @@ -886,10 +886,6 @@ const headerPanel = (Base: ModuleType) => class ExportHeaderPanelEx this.setToolbarItemDisabled('exportButton', disabled); }); } - - public isVisible() { - return super.isVisible() || this._isExportButtonVisible(); - } }; dataGridCore.registerModule('export', { diff --git a/packages/devextreme/js/__internal/grids/data_grid/grouping/m_grouping.ts b/packages/devextreme/js/__internal/grids/data_grid/grouping/m_grouping.ts index 921272af50c6..ce320c762b3d 100644 --- a/packages/devextreme/js/__internal/grids/data_grid/grouping/m_grouping.ts +++ b/packages/devextreme/js/__internal/grids/data_grid/grouping/m_grouping.ts @@ -584,10 +584,6 @@ export const GroupingHeaderPanelExtender = (Base: ModuleType) => cl return items; } - public isVisible() { - return super.isVisible() || this._isGroupPanelVisible(); - } - public hasGroupedColumns(): boolean { return this._isGroupPanelVisible() && !!this.getColumns().length; } diff --git a/packages/devextreme/js/__internal/grids/grid_core/column_chooser/m_column_chooser.ts b/packages/devextreme/js/__internal/grids/grid_core/column_chooser/m_column_chooser.ts index e36d2a2cb89d..dcf090f37bbd 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/column_chooser/m_column_chooser.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/column_chooser/m_column_chooser.ts @@ -579,13 +579,6 @@ const headerPanel = (Base: ModuleType) => class ColumnChooserHeader super.optionChanged(args); } } - - public isVisible() { - const that = this; - const columnChooserEnabled = that.option('columnChooser.enabled')!; - - return super.isVisible() || columnChooserEnabled; - } }; const columns = (Base: ModuleType) => class ColumnsChooserColumnsControllerExtender extends Base { diff --git a/packages/devextreme/js/__internal/grids/grid_core/context_menu/m_context_menu.ts b/packages/devextreme/js/__internal/grids/grid_core/context_menu/m_context_menu.ts index 4fcab10b261d..0fd6a64790f9 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/context_menu/m_context_menu.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/context_menu/m_context_menu.ts @@ -109,7 +109,6 @@ export class ContextMenuView extends modules.View { } }, onItemClick(params) { - // @ts-expect-error params.itemData?.onItemClick?.(params); }, diff --git a/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing.ts b/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing.ts index 1e6fcbf1f082..22df69404467 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing.ts @@ -2873,13 +2873,6 @@ const headerPanel = (Base: ModuleType) => class HeaderPanelEditingE return editButtonItems.concat(items); } - - public isVisible() { - const editingOptions = this._editingController.option('editing'); - - // @ts-expect-error - return super.isVisible() || editingOptions?.allowAdding; - } }; export const editingModule = { diff --git a/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing_cell_based.ts b/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing_cell_based.ts index f6a407840b87..35ffc9039bc7 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing_cell_based.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/editing/m_editing_cell_based.ts @@ -12,7 +12,6 @@ import type { DeferredObj } from '@js/core/utils/deferred'; import { Deferred, when } from '@js/core/utils/deferred'; import { isElementInDom } from '@js/core/utils/dom'; import { isDefined, isString } from '@js/core/utils/type'; -import type { HeaderPanel } from '@ts/grids/grid_core/header_panel/m_header_panel'; import type { RowsView } from '@ts/grids/grid_core/views/m_rows_view'; import type { ModuleType } from '../m_types'; @@ -721,15 +720,6 @@ const rowsView = (Base: ModuleType) => class RowsViewEditingCellBasedE } }; -const headerPanel = (Base: ModuleType) => class HeaderPanelEditingCellBasedExtender extends Base { - public isVisible() { - const editingOptions = this._editingController.option('editing'); - - // @ts-expect-error - return super.isVisible() || editingOptions && (editingOptions.allowUpdating || editingOptions.allowDeleting) && editingOptions.mode === EDIT_MODE_BATCH; - } -}; - export const editingCellBasedModule = { extenders: { controllers: { @@ -737,7 +727,6 @@ export const editingCellBasedModule = { }, views: { rowsView, - headerPanel, }, }, }; diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts index 496779c3de95..8bd2dce6eae5 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts @@ -1013,10 +1013,6 @@ const headerPanel = (Base: ModuleType) => class FilterRowHeaderPane private enableApplyButton(value) { this.setToolbarItemDisabled('applyFilterButton', !value); } - - public isVisible() { - return super.isVisible() || this._isShowApplyFilterButton(); - } }; export const filterRowModule = { diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_sync.ts b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_sync.ts index 48df0b766237..7389ab42f2d0 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_sync.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_sync.ts @@ -122,9 +122,13 @@ const updateFilterRowCondition = function (columnsController, column, condition) const filterValue = condition?.[2]; const filterOperations = column.filterOperations || column.defaultFilterOperations; - if ((!filterOperations || filterOperations.indexOf(selectedFilterOperation) >= 0 || selectedFilterOperation === column.defaultFilterOperation) - && FILTER_ROW_OPERATIONS.includes(selectedFilterOperation) && filterValue !== null) { - if (selectedFilterOperation === column.defaultFilterOperation && !isDefined(column.selectedFilterOperation)) { + const selectedOperationExists = !filterOperations || filterOperations.indexOf(selectedFilterOperation) >= 0; + const defaultOperationSelected = selectedFilterOperation === column.defaultFilterOperation; + const builtInOperationSelected = FILTER_ROW_OPERATIONS.includes(selectedFilterOperation); + const filterValueNotNullOrEmpty = filterValue !== null && filterValue !== ''; + + if ((selectedOperationExists || defaultOperationSelected) && builtInOperationSelected && filterValueNotNullOrEmpty) { + if (defaultOperationSelected && !isDefined(column.selectedFilterOperation)) { selectedFilterOperation = column.selectedFilterOperation; } filterRowOptions = { diff --git a/packages/devextreme/js/__internal/grids/grid_core/header_panel/m_header_panel.ts b/packages/devextreme/js/__internal/grids/grid_core/header_panel/m_header_panel.ts index b89733dfe7f3..c4682b9c663d 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/header_panel/m_header_panel.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/header_panel/m_header_panel.ts @@ -214,8 +214,7 @@ export class HeaderPanel extends ColumnsView { } else if (parts[1] === 'items') { if (parts.length === 2) { // `toolbar.items` case - const toolbarOptions = this._getToolbarOptions(); - this._toolbar?.option('items', toolbarOptions.items); + this._invalidate(); } else if (parts.length === 3) { // `toolbar.items[i]` case const normalizedItem = this._normalizeToolbarItems(this._getToolbarItems(), args.value); diff --git a/packages/devextreme/js/__internal/grids/grid_core/search/m_search.ts b/packages/devextreme/js/__internal/grids/grid_core/search/m_search.ts index bf39e10ba154..39d39f9d65d9 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/search/m_search.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/search/m_search.ts @@ -193,11 +193,6 @@ const headerPanel = ( } return null; } - - public isVisible() { - const searchPanelOptions = this.option('searchPanel'); - return super.isVisible() || !!searchPanelOptions?.visible; - } }; const rowsView = ( diff --git a/packages/devextreme/js/__internal/grids/grid_core/sticky_columns/m_sticky_columns.ts b/packages/devextreme/js/__internal/grids/grid_core/sticky_columns/m_sticky_columns.ts index 7177887f521d..7539b11e2cbe 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/sticky_columns/m_sticky_columns.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/sticky_columns/m_sticky_columns.ts @@ -3,7 +3,7 @@ import type { dxElementWrapper } from '@js/core/renderer'; import $ from '@js/core/renderer'; import type { DeferredObj } from '@js/core/utils/deferred'; import { getBoundingRect } from '@js/core/utils/position'; -import { setWidth } from '@js/core/utils/size'; +import { getWidth, setWidth } from '@js/core/utils/size'; import type { EditorFactory } from '@ts/grids/grid_core/editor_factory/m_editor_factory'; import type { ResizingController } from '@ts/grids/grid_core/views/m_grid_view'; import { getElementLocationInternal } from '@ts/ui/scroll_view/utils/get_element_location_internal'; @@ -362,9 +362,10 @@ const rowsView = ( Base: ModuleType, ) => class RowsViewStickyColumnsExtender extends baseStickyColumns(Base) { private _getMasterDetailWidth(): number { - // @ts-expect-error - const componentWidth = this.component.$element().width?.() ?? 0; - return componentWidth - gridCoreUtils.getComponentBorderWidth(this, this._$element) - this.getScrollbarWidth(); + const componentWidth = getWidth(this.component.$element()) ?? 0; + const borderWidth = gridCoreUtils.getComponentBorderWidth(this, this._$element); + + return componentWidth - borderWidth - this.getScrollbarWidth(); } protected _renderMasterDetailCell($row, row, options): dxElementWrapper { @@ -372,10 +373,8 @@ const rowsView = ( const $detailCell: dxElementWrapper = super._renderMasterDetailCell($row, row, options); if (this.hasStickyColumns()) { - $detailCell - .addClass(this.addWidgetPrefix(CLASSES.stickyColumnLeft)) - // @ts-expect-error - .width(this._getMasterDetailWidth()); + $detailCell.addClass(this.addWidgetPrefix(CLASSES.stickyColumnLeft)); + setWidth($detailCell, this._getMasterDetailWidth()); } return $detailCell; @@ -485,9 +484,10 @@ const rowsView = ( public _scrollToElement($element, offset?) { let scrollOffset = offset; + const scrollable = this.getScrollable(); const hasStickyColumns = this.hasStickyColumns(); - if (hasStickyColumns) { + if (hasStickyColumns && scrollable) { const isFixedCell = GridCoreStickyColumnsDom .isFixedCell($element, this.addWidgetPrefix.bind(this)); @@ -497,10 +497,9 @@ const rowsView = ( const $row = $element?.closest('tr'); const $cells = $row?.children(); - const $scrollContainer = this.getScrollable()?.container(); scrollOffset = GridCoreStickyColumnsDom - .getScrollPadding($cells, $scrollContainer, this.addWidgetPrefix.bind(this)); + .getScrollPadding($cells, $(scrollable.container()), this.addWidgetPrefix.bind(this)); } super._scrollToElement($element, scrollOffset); @@ -820,7 +819,7 @@ const keyboardNavigation = (Base: ModuleType) => c if (cellIsOutsideVisibleArea) { const scrollPadding = GridCoreStickyColumnsDom.getScrollPadding( $cells, - scrollable.container(), + $(scrollable.container()), this.addWidgetPrefix.bind(this), ); const scrollPosition = getElementLocationInternal( diff --git a/packages/devextreme/js/__internal/ui/collection/async.ts b/packages/devextreme/js/__internal/ui/collection/async.ts index bb3b8a54dcd0..6dd2a3ab0a33 100644 --- a/packages/devextreme/js/__internal/ui/collection/async.ts +++ b/packages/devextreme/js/__internal/ui/collection/async.ts @@ -16,7 +16,7 @@ declare class Async< args: { itemData: unknown } ): () => void; - _planPostRenderActions(): void; + _planPostRenderActions(...args: unknown[]): void; } // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/devextreme/js/__internal/ui/collection/hierarchical.ts b/packages/devextreme/js/__internal/ui/collection/hierarchical.ts index 5de8fd5a0b06..79f01834fb87 100644 --- a/packages/devextreme/js/__internal/ui/collection/hierarchical.ts +++ b/packages/devextreme/js/__internal/ui/collection/hierarchical.ts @@ -3,7 +3,7 @@ import type { ItemLike } from '@js/ui/collection/ui.collection_widget.base'; import type { HierarchicalCollectionWidgetOptions } from '@js/ui/hierarchical_collection/ui.hierarchical_collection_widget'; import HierarchicalCollectionWidget from '@js/ui/hierarchical_collection/ui.hierarchical_collection_widget'; -import CollectionWidgetEdit from './edit'; +import AsyncCollectionWidget from './async'; export interface TypedCollectionWidgetOptions< // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -22,7 +22,7 @@ declare class Hierarchical< TItem extends ItemLike = any, // eslint-disable-next-line @typescript-eslint/no-explicit-any TKey = any, -> extends CollectionWidgetEdit { +> extends AsyncCollectionWidget { // eslint-disable-next-line @typescript-eslint/no-explicit-any _dataAdapter?: any; diff --git a/packages/devextreme/js/__internal/ui/collection/m_collection_widget.async.ts b/packages/devextreme/js/__internal/ui/collection/m_collection_widget.async.ts index 7cb167866381..7660b180bc8d 100644 --- a/packages/devextreme/js/__internal/ui/collection/m_collection_widget.async.ts +++ b/packages/devextreme/js/__internal/ui/collection/m_collection_widget.async.ts @@ -36,10 +36,10 @@ const AsyncCollectionWidget = CollectionWidgetEdit.inherit({ _postProcessRenderItems: noop, - _planPostRenderActions() { + _planPostRenderActions(...args: unknown[]) { const d = Deferred(); when.apply(this, this._asyncTemplateItems).done(() => { - this._postProcessRenderItems(); + this._postProcessRenderItems(...args); d.resolve(); }); return d.promise(); diff --git a/packages/devextreme/js/__internal/ui/context_menu/m_context_menu.ts b/packages/devextreme/js/__internal/ui/context_menu/m_context_menu.ts index 30c11c7f6906..e05648df2371 100644 --- a/packages/devextreme/js/__internal/ui/context_menu/m_context_menu.ts +++ b/packages/devextreme/js/__internal/ui/context_menu/m_context_menu.ts @@ -741,8 +741,19 @@ class ContextMenu extends MenuBase { $submenu = $item.children(`.${DX_SUBMENU_CLASS}`); } + this._planPostRenderActions($submenu); + } + + _setSubmenuVisible($submenu?: dxElementWrapper) { + if (!$submenu) { + return; + } + + const $item = $submenu?.closest(`.${DX_MENU_ITEM_CLASS}`); + this._setSubMenuHeight($submenu, $item, true); - if (!this._isSubmenuVisible($submenu)) { + + if (!this._isSubmenuVisible($submenu) && $item) { this._drawSubmenu($item); } } @@ -1130,6 +1141,10 @@ class ContextMenu extends MenuBase { hide(): Promise { return this.toggle(false); } + + _postProcessRenderItems($submenu?: dxElementWrapper) { + this._setSubmenuVisible($submenu); + } } // @ts-expect-error diff --git a/packages/devextreme/js/__internal/ui/context_menu/m_menu_base.edit.strategy.ts b/packages/devextreme/js/__internal/ui/context_menu/m_menu_base.edit.strategy.ts index db834dff7343..248c6a0aa771 100644 --- a/packages/devextreme/js/__internal/ui/context_menu/m_menu_base.edit.strategy.ts +++ b/packages/devextreme/js/__internal/ui/context_menu/m_menu_base.edit.strategy.ts @@ -5,7 +5,6 @@ import PlainEditStrategy from '@ts/ui/collection/m_collection_widget.edit.strate class MenuBaseEditStrategy extends PlainEditStrategy { _getPlainItems(): Item { - // @ts-expect-error return map(this._collectionWidget.option('items'), function getMenuItems(item) { return item.items ? [item].concat(map(item.items, getMenuItems)) : item; }); diff --git a/packages/devextreme/js/__internal/ui/form/m_form.layout_manager.utils.ts b/packages/devextreme/js/__internal/ui/form/m_form.layout_manager.utils.ts index a39176229f65..868bdc5b8423 100644 --- a/packages/devextreme/js/__internal/ui/form/m_form.layout_manager.utils.ts +++ b/packages/devextreme/js/__internal/ui/form/m_form.layout_manager.utils.ts @@ -3,10 +3,10 @@ import $ from '@js/core/renderer'; import { extend } from '@js/core/utils/extend'; import { captionize } from '@js/core/utils/inflector'; import { each } from '@js/core/utils/iterator'; -import { isBoolean, isDefined, isFunction } from '@js/core/utils/type'; +import { isDefined, isFunction } from '@js/core/utils/type'; import type { dxDropDownEditorOptions } from '@js/ui/drop_down_editor/ui.drop_down_editor'; import type { FormItemComponent } from '@js/ui/form'; -import type { dxOverlayOptions } from '@js/ui/overlay'; +import type { Properties as PopupProperties } from '@js/ui/popup'; import type dxTextBox from '@js/ui/text_box'; import { SIMPLE_ITEM_TYPE } from './constants'; @@ -167,12 +167,10 @@ export function convertToLabelMarkOptions( }; } -// eslint-disable-next-line @typescript-eslint/naming-convention -function _getDropDownEditorOptions( +function getDropDownEditorOptions( $parent, editorType: FormItemComponent, editorInputId: string, - onContentReadyExternal?: DropDownOptions['onContentReady'], ): DropDownOptions { const isDropDownEditor = DROP_DOWN_EDITORS.includes(editorType); @@ -181,33 +179,28 @@ function _getDropDownEditorOptions( } return { - onContentReady: (e) => { - const { component } = e; + // @ts-expect-error // unpublished option + onPopupInitialized: ({ component, popup }): void => { const openOnFieldClick = component.option('openOnFieldClick') as DropDownOptions['openOnFieldClick']; - const initialHideOnOutsideClick = component.option('dropDownOptions.hideOnOutsideClick') as dxOverlayOptions['hideOnOutsideClick']; - - if (openOnFieldClick) { - component.option('dropDownOptions', { - hideOnOutsideClick: (e) => { - if (isBoolean(initialHideOnOutsideClick)) { - return initialHideOnOutsideClick; - } + const initialHideOnOutsideClick = popup.option('hideOnOutsideClick') as PopupProperties['hideOnOutsideClick']; - const $target = $(e.target); - const $label = $parent.find(`label[for="${editorInputId}"]`); - const isLabelClicked = !!$target.closest($label).length; + // Do not overwrite boolean hideOnOutsideClick + if (openOnFieldClick && isFunction(initialHideOnOutsideClick)) { + const hideOnOutsideClick: PopupProperties['hideOnOutsideClick'] = (e) => { + const $target = $(e.target); + const $label = $parent.find(`label[for="${editorInputId}"]`); + const isLabelClicked = !!$target.closest($label).length; - if (!isFunction(initialHideOnOutsideClick)) { - return !isLabelClicked; - } + return !isLabelClicked && initialHideOnOutsideClick(e); + }; - return !isLabelClicked && initialHideOnOutsideClick(e); - }, + component.option('dropDownOptions', { + hideOnOutsideClick, }); - } - if (isFunction(onContentReadyExternal)) { - onContentReadyExternal(e); + popup.option({ + hideOnOutsideClick, + }); } }, }; @@ -245,7 +238,7 @@ function _convertToEditorOptions({ const stylingMode = externalEditorOptions?.stylingMode || editorStylingMode; const useSpecificLabelOptions = EDITORS_WITH_SPECIFIC_LABELS.includes(editorType); - const dropDownEditorOptions = _getDropDownEditorOptions($parent, editorType, editorInputId, externalEditorOptions?.onContentReady); + const dropDownEditorOptions = getDropDownEditorOptions($parent, editorType, editorInputId); const result = extend( true, diff --git a/packages/devextreme/js/__internal/ui/hierarchical_collection/m_hierarchical_collection_widget.ts b/packages/devextreme/js/__internal/ui/hierarchical_collection/m_hierarchical_collection_widget.ts index 6deddad62d6d..9d894e8ddfb5 100644 --- a/packages/devextreme/js/__internal/ui/hierarchical_collection/m_hierarchical_collection_widget.ts +++ b/packages/devextreme/js/__internal/ui/hierarchical_collection/m_hierarchical_collection_widget.ts @@ -7,7 +7,7 @@ import { extend } from '@js/core/utils/extend'; import { getImageContainer } from '@js/core/utils/icon'; import { each } from '@js/core/utils/iterator'; import { isFunction, isObject } from '@js/core/utils/type'; -import CollectionWidget from '@js/ui/collection/ui.collection_widget.edit'; +import CollectionWidget from '@js/ui/collection/ui.collection_widget.async'; import HierarchicalDataAdapter from './m_data_adapter'; diff --git a/packages/devextreme/js/__internal/ui/popover/m_popover.ts b/packages/devextreme/js/__internal/ui/popover/m_popover.ts index b250bf143193..3ae43a8b19aa 100644 --- a/packages/devextreme/js/__internal/ui/popover/m_popover.ts +++ b/packages/devextreme/js/__internal/ui/popover/m_popover.ts @@ -457,6 +457,11 @@ const Popover = Popup.inherit({ this._clearEventTimeout(args.value ? 'show' : 'hide'); this.callBase(args); break; + case 'disabled': + this._detachEvents(this.option('target')); + this._attachEvents(); + this.callBase(args); + break; default: this.callBase(args); } diff --git a/packages/devextreme/js/__internal/ui/scroll_view/m_scrollable.simulated.ts b/packages/devextreme/js/__internal/ui/scroll_view/m_scrollable.simulated.ts index 66309a045793..314e9fbf1308 100644 --- a/packages/devextreme/js/__internal/ui/scroll_view/m_scrollable.simulated.ts +++ b/packages/devextreme/js/__internal/ui/scroll_view/m_scrollable.simulated.ts @@ -220,10 +220,10 @@ export const Scroller = Class.inherit({ if (location > 0) { translateOffset = location; - } else if (location <= minOffset) { + } + + if (location <= minOffset) { translateOffset = location - minOffset; - } else { - translateOffset = location % 1; } if (this._translateOffset === translateOffset) { @@ -234,7 +234,7 @@ export const Scroller = Class.inherit({ targetLocation[this._prop] = translateOffset; this._translateOffset = translateOffset; - if (translateOffset === 0) { + if (!translateOffset) { resetPosition(this._$content); return; } diff --git a/packages/devextreme/js/localization/messages/pt.json b/packages/devextreme/js/localization/messages/pt.json index e67f21c6156e..384c4c2ec262 100644 --- a/packages/devextreme/js/localization/messages/pt.json +++ b/packages/devextreme/js/localization/messages/pt.json @@ -3,7 +3,7 @@ "Yes": "Sim", "No": "Não", "Cancel": "Cancelar", - "CheckState": "Check state", + "CheckState": "Verificar estado", "Close": "Fechar", "Clear": "Limpar", "Done": "Concluído", @@ -13,7 +13,7 @@ "Back": "Voltar", "OK": "OK", "Today": "Hoje", - "Yesterday": "Yesterday", + "Yesterday": "Ontem", "dxCollectionWidget-noDataText": "Sem dados", @@ -47,13 +47,13 @@ "dxList-pageLoadingText": "A carregar ...", "dxList-nextButtonText": "Mais", "dxList-selectAll": "Selecionar todos", - "dxList-listAriaLabel": "Items", - "dxList-listAriaLabel-deletable": "Deletable items", + "dxList-listAriaLabel": "Itens", + "dxList-listAriaLabel-deletable": "Itens deletáveis", "dxListEditDecorator-delete": "Eliminar", "dxListEditDecorator-more": "Mais", - "dxList-selectAll-indeterminate": "Half-checked", - "dxList-selectAll-checked": "Checked", - "dxList-selectAll-notChecked": "Not checked", + "dxList-selectAll-indeterminate": "Meio marcado", + "dxList-selectAll-checked": "Marcado", + "dxList-selectAll-notChecked": "Não marcado", "dxScrollView-pullingDownText": "Puxar para baixo para recarregar...", "dxScrollView-pulledDownText": "Soltar para recarregar...", @@ -134,17 +134,17 @@ "dxDataGrid-filterRowOperationBetween": "Entre", "dxDataGrid-filterRowOperationBetweenStartText": "Início", "dxDataGrid-filterRowOperationBetweenEndText": "Fim", - "dxDataGrid-ariaSearchBox": "Search box", + "dxDataGrid-ariaSearchBox": "Caixa de pesquisa", "dxDataGrid-applyFilterText": "Aplicar filtro", "dxDataGrid-trueText": "verdadeiro", "dxDataGrid-falseText": "falso", "dxDataGrid-sortingAscendingText": "Ordenar ascendentemente", "dxDataGrid-sortingDescendingText": "Ordenar descendentemente", "dxDataGrid-sortingClearText": "Limpar ordenação", - "dxDataGrid-ariaNotSortedColumn": "Not sorted column", - "dxDataGrid-ariaSortedAscendingColumn": "Column sorted in ascending order", - "dxDataGrid-ariaSortedDescendingColumn": "Column sorted in descending order", - "dxDataGrid-ariaSortIndex": "Sort index {0}", + "dxDataGrid-ariaNotSortedColumn": "Coluna não ordenada", + "dxDataGrid-ariaSortedAscendingColumn": "Coluna ordenada em ordem crescente", + "dxDataGrid-ariaSortedDescendingColumn": "Coluna ordenada em ordem decrescente", + "dxDataGrid-ariaSortIndex": "Índice de ordenação {0}", "dxDataGrid-editingSaveAllChanges": "Salvar todas as alterações", "dxDataGrid-editingCancelAllChanges": "Descartar alterações", "dxDataGrid-editingAddRow": "Adicionar uma linha", @@ -157,11 +157,11 @@ "dxDataGrid-summarySum": "Soma: {0}", "dxDataGrid-summarySumOtherColumn": "Soma de {1} é {0}", "dxDataGrid-summaryCount": "Contagem: {0}", - "dxDataGrid-columnFixingFix": "Set Fixed Position", - "dxDataGrid-columnFixingUnfix": "Unfix", - "dxDataGrid-columnFixingLeftPosition": "Left", - "dxDataGrid-columnFixingRightPosition": "Right", - "dxDataGrid-columnFixingStickyPosition": "Sticky", + "dxDataGrid-columnFixingFix": "Definir posição fixa", + "dxDataGrid-columnFixingUnfix": "Desfixar", + "dxDataGrid-columnFixingLeftPosition": "Esquerda", + "dxDataGrid-columnFixingRightPosition": "Direita", + "dxDataGrid-columnFixingStickyPosition": "Fixo", "dxDataGrid-exportTo": "Exportar para", "dxDataGrid-exportToExcel": "Exportar para Excel", "dxDataGrid-exporting": "Exportar...", @@ -177,24 +177,24 @@ "dxDataGrid-ariaAdaptiveCollapse": "Ocultar dados adicionais", "dxDataGrid-ariaAdaptiveExpand": "Exibir dados adicionais", "dxDataGrid-ariaColumn": "Coluna", - "dxDataGrid-ariaColumnHeader": "Column header", + "dxDataGrid-ariaColumnHeader": "Cabeçalho da coluna", "dxDataGrid-ariaValue": "Valor", - "dxDataGrid-ariaError": "Error", - "dxDataGrid-ariaRevertButton": "Press Escape to discard the changes", + "dxDataGrid-ariaError": "Erro", + "dxDataGrid-ariaRevertButton": "Pressione Escape para descartar as alterações", "dxDataGrid-ariaFilterCell": "Filtro de célula", "dxDataGrid-ariaCollapse": "Contrair", - "dxDataGrid-ariaModifiedCell": "Modified", - "dxDataGrid-ariaDeletedCell": "Deleted", - "dxDataGrid-ariaEditableCell": "Editable", + "dxDataGrid-ariaModifiedCell": "Modificado", + "dxDataGrid-ariaDeletedCell": "Deletado", + "dxDataGrid-ariaEditableCell": "Editável", "dxDataGrid-ariaExpand": "Expandir", - "dxDataGrid-ariaCollapsedRow": "Collapsed row", - "dxDataGrid-ariaExpandedRow": "Expanded row", + "dxDataGrid-ariaCollapsedRow": "Linha recolhida", + "dxDataGrid-ariaExpandedRow": "Linha expandida", "dxDataGrid-ariaDataGrid": "Grelha de dados", "dxDataGrid-ariaSearchInGrid": "Pesquisar na grade de dados", "dxDataGrid-ariaSelectAll": "Selecionar todos", "dxDataGrid-ariaSelectRow": "Selecionar linha", - "dxDataGrid-ariaToolbar": "Data grid toolbar", - "dxDataGrid-ariaEditForm": "Edit form", + "dxDataGrid-ariaToolbar": "Barra de ferramentas da grade de dados", + "dxDataGrid-ariaEditForm": "Formulário de edição", "dxDataGrid-filterBuilderPopupTitle": "Construtor de filtro", "dxDataGrid-filterPanelCreateFilter": "Criar filtro", "dxDataGrid-filterPanelClearFilter": "Limpar", @@ -249,13 +249,13 @@ "dxPivotGrid-rowFieldArea": "Arraste os campos de linha até aqui", "dxPivotGrid-filterFieldArea": "Arraste os campos de filtro até aqui", - "dxScheduler-ariaLabel": "Scheduler. {0} view", + "dxScheduler-ariaLabel": "Agendador. Vista {0}", - "dxScheduler-appointmentAriaLabel-group": "Group: {0}", - "dxScheduler-appointmentAriaLabel-recurring": "Recurring appointment", + "dxScheduler-appointmentAriaLabel-group": "Grupo: {0}", + "dxScheduler-appointmentAriaLabel-recurring": "Compromisso recorrente", - "dxScheduler-appointmentListAriaLabel": "Appointment list", + "dxScheduler-appointmentListAriaLabel": "Lista de compromissos", "dxScheduler-editorLabelTitle": "Assunto", @@ -264,8 +264,8 @@ "dxScheduler-editorLabelDescription": "Descrição", "dxScheduler-editorLabelRecurrence": "Repetir", - "dxScheduler-navigationPrevious": "Previous page", - "dxScheduler-navigationNext": "Next page", + "dxScheduler-navigationPrevious": "Página anterior", + "dxScheduler-navigationNext": "Próxima página", "dxScheduler-openAppointment": "Abrir compromisso", @@ -306,10 +306,10 @@ "dxScheduler-recurrenceRepeatCount": "ocorrência(s)", "dxScheduler-allDay": "Todo o dia", - "dxScheduler-ariaEditForm": "Edit form", + "dxScheduler-ariaEditForm": "Editar formulário", - "dxScheduler-confirmRecurrenceEditTitle": "Edit Recurring Appointment", - "dxScheduler-confirmRecurrenceDeleteTitle": "Delete Recurring Appointment", + "dxScheduler-confirmRecurrenceEditTitle": "Editar compromisso recorrente", + "dxScheduler-confirmRecurrenceDeleteTitle": "Excluir compromisso recorrente", "dxScheduler-confirmRecurrenceEditMessage": "Deseja editar só este compromisso ou a série toda?", "dxScheduler-confirmRecurrenceDeleteMessage": "Deseja eliminar só este compromisso ou a série toda?", @@ -322,45 +322,45 @@ "dxScheduler-noTimezoneTitle": "Sem fuso horário", "dxScheduler-moreAppointments": "{0} mais", - "dxCalendar-currentDay": "Today", - "dxCalendar-currentMonth": "Current month", - "dxCalendar-currentYear": "Current year", - "dxCalendar-currentYearRange": "Current year range", + "dxCalendar-currentDay": "Hoje", + "dxCalendar-currentMonth": "Mês atual", + "dxCalendar-currentYear": "Ano atual", + "dxCalendar-currentYearRange": "Intervalo de ano atual", "dxCalendar-todayButtonText": "Hoje", "dxCalendar-ariaWidgetName": "Calendário", - "dxCalendar-previousMonthButtonLabel": "Previous month", - "dxCalendar-previousYearButtonLabel": "Previous year", - "dxCalendar-previousDecadeButtonLabel": "Previous decade", - "dxCalendar-previousCenturyButtonLabel": "Previous century", - "dxCalendar-nextMonthButtonLabel": "Next month", - "dxCalendar-nextYearButtonLabel": "Next year", - "dxCalendar-nextDecadeButtonLabel": "Next decade", - "dxCalendar-nextCenturyButtonLabel": "Next century", - "dxCalendar-captionMonthLabel": "Month selection", - "dxCalendar-captionYearLabel": "Year selection", - "dxCalendar-captionDecadeLabel": "Decade selection", - "dxCalendar-captionCenturyLabel": "Century selection", - "dxCalendar-selectedDate": "The selected date is {0}", - "dxCalendar-selectedDates": "The selected dates", - "dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}", - "dxCalendar-selectedMultipleDateRange": "from {0} to {1}", - "dxCalendar-selectedDateRangeCount": "There are {0} selected date ranges", - "dxCalendar-readOnlyLabel": "Read-only calendar", + "dxCalendar-previousMonthButtonLabel": "Mês anterior", + "dxCalendar-previousYearButtonLabel": "Ano anterior", + "dxCalendar-previousDecadeButtonLabel": "Década anterior", + "dxCalendar-previousCenturyButtonLabel": "Século anterior", + "dxCalendar-nextMonthButtonLabel": "Próximo mês", + "dxCalendar-nextYearButtonLabel": "Próximo ano", + "dxCalendar-nextDecadeButtonLabel": "Próxima década", + "dxCalendar-nextCenturyButtonLabel": "Próximo século", + "dxCalendar-captionMonthLabel": "Seleção de mês", + "dxCalendar-captionYearLabel": "Seleção de ano", + "dxCalendar-captionDecadeLabel": "Seleção de década", + "dxCalendar-captionCenturyLabel": "Seleção de século", + "dxCalendar-selectedDate": "A data selecionada é {0}", + "dxCalendar-selectedDates": "As datas selecionadas", + "dxCalendar-selectedDateRange": "O intervalo de datas selecionado é de {0} a {1}", + "dxCalendar-selectedMultipleDateRange": "de {0} a {1}", + "dxCalendar-selectedDateRangeCount": "Há {0} intervalos de datas selecionados", + "dxCalendar-readOnlyLabel": "Calendário somente leitura", "dxAvatar-defaultImageAlt": "Avatar", "dxChat-elementAriaLabel": "Chat", - "dxChat-textareaPlaceholder": "Type a message", - "dxChat-sendButtonAriaLabel": "Send", - "dxChat-defaultUserName": "Unknown User", - "dxChat-messageListAriaLabel": "Message list", - "dxChat-alertListAriaLabel": "Error list", - "dxChat-emptyListMessage": "There are no messages in this chat", - "dxChat-emptyListPrompt": "Write your first message", - "dxChat-typingMessageSingleUser": "{0} is typing...", - "dxChat-typingMessageTwoUsers": "{0} and {1} are typing...", - "dxChat-typingMessageThreeUsers": "{0}, {1} and {2} are typing...", - "dxChat-typingMessageMultipleUsers": "{0} and others are typing...", + "dxChat-textareaPlaceholder": "Digite uma mensagem", + "dxChat-sendButtonAriaLabel": "Enviar", + "dxChat-defaultUserName": "Usuário desconhecido", + "dxChat-messageListAriaLabel": "Lista de mensagens", + "dxChat-alertListAriaLabel": "Lista de erros", + "dxChat-emptyListMessage": "Não há mensagens neste chat", + "dxChat-emptyListPrompt": "Escreva sua primeira mensagem", + "dxChat-typingMessageSingleUser": "{0} está digitando...", + "dxChat-typingMessageTwoUsers": "{0} e {1} estão digitando...", + "dxChat-typingMessageThreeUsers": "{0}, {1} e {2} estão digitando...", + "dxChat-typingMessageMultipleUsers": "{0} e outros estão digitando...", "dxColorView-ariaRed": "Vermelho", "dxColorView-ariaGreen": "Verde", @@ -371,7 +371,7 @@ "dxTagBox-selected": "{0} selecionados", "dxTagBox-allSelected": "Todos selecionados ({0})", "dxTagBox-moreSelected": "{0} mais", - "dxTagBox-tagRoleDescription": "Tag. Press the delete button to remove this tag", + "dxTagBox-tagRoleDescription": "Tag. Pressione o botão de deletar para remover esta tag", "vizExport-printingButtonText": "Imprimir", "vizExport-titleMenuText": "Exportar/Imprimir", @@ -399,15 +399,15 @@ "dxFilterBuilder-filterOperationBetween": "Entre", "dxFilterBuilder-filterOperationAnyOf": "Algum de", "dxFilterBuilder-filterOperationNoneOf": "Nenhum de", - "dxFilterBuilder-filterAriaRootElement": "Filter builder", - "dxFilterBuilder-filterAriaGroupLevel": "Level {0}", - "dxFilterBuilder-filterAriaGroupItem": "Group item", - "dxFilterBuilder-filterAriaOperationButton": "Operation", - "dxFilterBuilder-filterAriaAddButton": "Add", - "dxFilterBuilder-filterAriaRemoveButton": "Remove {0}", - "dxFilterBuilder-filterAriaItemField": "Item field", - "dxFilterBuilder-filterAriaItemOperation": "Item operation", - "dxFilterBuilder-filterAriaItemValue": "Item value", + "dxFilterBuilder-filterAriaRootElement": "Construtor de filtro", + "dxFilterBuilder-filterAriaGroupLevel": "Nível {0}", + "dxFilterBuilder-filterAriaGroupItem": "Item de grupo", + "dxFilterBuilder-filterAriaOperationButton": "Operação", + "dxFilterBuilder-filterAriaAddButton": "Adicionar", + "dxFilterBuilder-filterAriaRemoveButton": "Remover {0}", + "dxFilterBuilder-filterAriaItemField": "Campo do item", + "dxFilterBuilder-filterAriaItemOperation": "Operação do item", + "dxFilterBuilder-filterAriaItemValue": "Valor do item", "dxHtmlEditor-dialogColorCaption": "Alterar cor da fonte", "dxHtmlEditor-dialogBackgroundCaption": "Alterar cor de plano de fundo", @@ -786,13 +786,13 @@ "dxGantt-dialogStartDateValidation": "A data de início deve ser após {0}", "dxGantt-dialogEndDateValidation": "A data de término deve ser posterior a {0}", - "dxGallery-itemName": "Gallery item", + "dxGallery-itemName": "Item da galeria", "dxMultiView-elementAriaRoleDescription": "MultiView", - "dxMultiView-elementAriaLabel": "Use the arrow keys or swipe to navigate between views", - "dxMultiView-itemAriaRoleDescription": "View", - "dxMultiView-itemAriaLabel": "{0} of {1}", + "dxMultiView-elementAriaLabel": "Use as teclas de seta ou deslize para navegar entre as visualizações", + "dxMultiView-itemAriaRoleDescription": "Visualização", + "dxMultiView-itemAriaLabel": "{0} de {1}", - "dxSplitter-resizeHandleAriaLabel": "Split bar" + "dxSplitter-resizeHandleAriaLabel": "Barra de divisão" } } diff --git a/packages/devextreme/js/ui/menu.d.ts b/packages/devextreme/js/ui/menu.d.ts index 4b9f0089f3b0..61ccbfb50b9c 100644 --- a/packages/devextreme/js/ui/menu.d.ts +++ b/packages/devextreme/js/ui/menu.d.ts @@ -333,6 +333,8 @@ export interface MenuBasePlainItem extends CollectionWidgetItem { * @public */ visible?: boolean; + + [key: string]: any; } /** diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/dataGrid.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/dataGrid.tests.js index e2000e8a5f9c..b9a9f6d52294 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/dataGrid.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/dataGrid.tests.js @@ -2879,7 +2879,7 @@ QUnit.module('Assign options', baseModuleConfig, () => { dataGrid.option('toolbar.visible', false); // assert - assert.ok($toolbar.hasClass('dx-state-invisible'), 'toolbar is hidden'); + assert.ok($toolbar.parent().hasClass('dx-hidden'), 'toolbar is hidden'); // act dataGrid.option('toolbar.disabled', true); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/editing.integration.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/editing.integration.tests.js index 23cbd3158a7f..4addc614ae66 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/editing.integration.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/editing.integration.tests.js @@ -3487,7 +3487,7 @@ QUnit.module('Editing', baseModuleConfig, () => { assert.strictEqual(onSelectedSpy.callCount, 0, 'is not selected after change'); }); - QUnit.testInActiveWindow('key should not be compared many times on paging (T1047506)', function(assert) { + QUnit.test('key should not be compared many times on paging (T1047506)', function(assert) { // arrange let idCallCount = 0; const items = Array.from({ length: 50 }).map((_, index) => { @@ -3506,7 +3506,9 @@ QUnit.module('Editing', baseModuleConfig, () => { keyExpr: 'id', scrolling: { mode: 'virtual', - useNative: false + useNative: false, + scrollByThumb: false, + showScrollbar: 'onHover', }, }); @@ -3518,7 +3520,7 @@ QUnit.module('Editing', baseModuleConfig, () => { dataGrid.pageIndex(1); // assert - assert.equal(idCallCount, 200, 'key call count after paging'); + assert.true(idCallCount < 280, 'key call count after paging'); }); QUnit.test('Popup should render editor if columns[].renderAsync option is true', function(assert) { @@ -5044,6 +5046,11 @@ QUnit.module('API methods', baseModuleConfig, () => { // T722161 QUnit.test('add row after scrolling if rowRenderingMode is virtual', function(assert) { + if(devices.real().ios) { + assert.ok(true); + return; + } + const array = []; for(let i = 1; i <= 20; i++) { array.push({ id: i, text: 'text' + i }); @@ -7048,6 +7055,10 @@ QUnit.module('Editing state', baseModuleConfig, () => { }); QUnit.test(`Add row at the end of the last page via changes option if virtual scrolling (editMode = ${editMode}, key = ${key})`, function(assert) { + if(devices.real().ios) { + assert.ok(true); + return; + } // arrange const changes = [{ data: { field: 'test' }, diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/scrolling.integration.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/scrolling.integration.tests.js index 27c0b4fa179c..3f03cf733960 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/scrolling.integration.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/scrolling.integration.tests.js @@ -990,7 +990,7 @@ QUnit.module('Scrolling', baseModuleConfig, () => { scrollable.scrollTo(100.7); // assert - assert.equal(scrollable.scrollLeft(), 100.7); + assert.equal(scrollable.scrollLeft(), 100); assert.equal($(scrollable.container()).scrollLeft(), 100); const $headersScrollable = $dataGrid.find('.dx-datagrid-headers' + ' .dx-datagrid-scroll-container').first(); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/stickyColumns.integration.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/stickyColumns.integration.tests.js new file mode 100644 index 000000000000..367f576ecbae --- /dev/null +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/stickyColumns.integration.tests.js @@ -0,0 +1,78 @@ +import $ from 'jquery'; +import { createDataGrid, baseModuleConfig } from '../../helpers/dataGridHelper.js'; + +QUnit.testStart(function() { + const gridMarkup = ` +
+
+
+ `; + + $('#qunit-fixture').html(gridMarkup); +}); + +QUnit.module('Sticky columns', baseModuleConfig, () => { + QUnit.test('Editing a row should not throw an exception when edit mode is row (T1268965)', function(assert) { + // arrange + const dataGrid = createDataGrid({ + dataSource: [ + { id: 1, field1: 'test1', field2: 'test2' }, + { id: 1, field1: 'test3', field2: 'test4' } + ], + keyExpr: 'id', + columnFixing: { + enabled: true, + }, + editing: { + mode: 'row', + allowUpdating: true, + } + }); + + this.clock.tick(30); + + try { + // act + dataGrid.editRow(0); + this.clock.tick(10); + + // assert + assert.ok(true, 'no exceptions'); + } catch(e) { + // assert + assert.ok(false, `exception - ${e}`); + } + }); + + QUnit.test('Editing a row should not throw an exception when edit mode is form (T1268965)', function(assert) { + // arrange + const dataGrid = createDataGrid({ + dataSource: [ + { id: 1, field1: 'test1', field2: 'test2' }, + { id: 1, field1: 'test3', field2: 'test4' } + ], + keyExpr: 'id', + columnFixing: { + enabled: true, + }, + editing: { + mode: 'form', + allowUpdating: true, + } + }); + + this.clock.tick(30); + + try { + // act + dataGrid.editRow(0); + this.clock.tick(10); + + // assert + assert.ok(true, 'no exceptions'); + } catch(e) { + // assert + assert.ok(false, `exception - ${e}`); + } + }); +}); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/virtualScrolling.integration.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/virtualScrolling.integration.tests.js index aacfa5f7a6f4..5a3cf4d4bd53 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/virtualScrolling.integration.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/virtualScrolling.integration.tests.js @@ -1612,6 +1612,10 @@ QUnit.module('Virtual Scrolling', baseModuleConfig, () => { }); QUnit.test('synchronous render and asynchronous updateDimensions during paging if virtual scrolling is enabled', function(assert) { + if(devices.real().ios) { + assert.ok(true); + return; + } // arrange, act let contentReadyCount = 0; @@ -5858,7 +5862,7 @@ QUnit.module('Virtual Scrolling', baseModuleConfig, () => { assert.equal(loadSpy.args[1][0].take, 15, 'take in the second call'); }); - QUnit.skip('Rows in fixed table should not have the offset when the content is scrolled to the bottom (T1072358)', function(assert) { + QUnit.test('Rows in fixed table should not have the offset when the content is scrolled to the bottom (T1072358)', function(assert) { // arrange const getData = function() { const items = []; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js index 0a28a0451ea2..2e10e3410ae5 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js @@ -4579,15 +4579,100 @@ QUnit.test('form should be dirty when some editors are dirty', function(assert) // NOTE: In the real environment, clicking the label triggers a click on the editor, // toggling the popup visibility if openOnFieldClick=true. // This assertion only takes hideOnOutsideClick into account - if(hideOnOutsideClick === false) { - assert.true(editorInstance.option('opened'), `drop down list ${openOnFieldClick ? 'is hidden by triggered input click' : 'is visible'}`); - } else { - assert.strictEqual(editorInstance.option('opened'), openOnFieldClick, `drop down list is hidden by ${openOnFieldClick ? 'triggered input click' : 'outside click'}`); + switch(hideOnOutsideClick) { + case true: + assert.false(editorInstance.option('opened'), 'drop down list is hidden by outside click'); + break; + case false: + assert.true(editorInstance.option('opened'), `drop down list ${openOnFieldClick ? 'is hidden by triggered input click' : 'is visible'}`); + break; + default: + assert.strictEqual(editorInstance.option('opened'), openOnFieldClick, `drop down list is hidden by ${openOnFieldClick ? 'triggered input click' : 'outside click'}`); } }); }); }); +QUnit.test('DropDownEditor popup must toggle on input or dropDownButton click if openOnFieldClick = true', function(assert) { + const $form = $('#form').dxForm({ + formData: { CustomerID: 'VINET' }, + items: [{ + itemType: 'group', + colCount: 2, + items: [{ + dataField: 'CustomerID', + editorType: 'dxSelectBox', + editorOptions: { + items: ['VINET', 'VALUE', 'VINS'], + value: '', + openOnFieldClick: true, + }, + }], + }], + }); + + const $dropDownEditorInput = $form.find(`.${EDITOR_INPUT_CLASS}`); + const $dropDownButton = $form.find(`.${DROP_DOWN_EDITOR_BUTTON_CLASS}`); + + pointerMock($dropDownEditorInput).click(); + + const editorInstance = $form.dxForm('instance').getEditor('CustomerID'); + + assert.true(editorInstance.option('opened'), 'drop down list is visible'); + + pointerMock($dropDownEditorInput).click(); + + assert.false(editorInstance.option('opened'), 'drop down list is hidden'); + + pointerMock($dropDownButton).click(); + + assert.true(editorInstance.option('opened'), 'drop down list is visible'); + + pointerMock($dropDownButton).click(); + + assert.false(editorInstance.option('opened'), 'drop down list is hidden'); +}); + +QUnit.test('DropDownEditor popup must toggle on dropDownButton click if openOnFieldClick = false', function(assert) { + const $form = $('#form').dxForm({ + formData: { CustomerID: 'VINET' }, + items: [{ + itemType: 'group', + colCount: 2, + items: [{ + dataField: 'CustomerID', + editorType: 'dxSelectBox', + editorOptions: { + items: ['VINET', 'VALUE', 'VINS'], + value: '', + openOnFieldClick: false, + }, + }], + }], + }); + + const $dropDownEditorInput = $form.find(`.${EDITOR_INPUT_CLASS}`); + const $dropDownButton = $form.find(`.${DROP_DOWN_EDITOR_BUTTON_CLASS}`); + + pointerMock($dropDownEditorInput).click(); + + const editorInstance = $form.dxForm('instance').getEditor('CustomerID'); + + assert.false(editorInstance.option('opened'), 'drop down list is hidden'); + + pointerMock($dropDownButton).click(); + + assert.true(editorInstance.option('opened'), 'drop down list is visible'); + + pointerMock($dropDownEditorInput).click(); + + assert.true(editorInstance.option('opened'), 'drop down list is visible'); + + pointerMock($dropDownButton).click(); + + assert.false(editorInstance.option('opened'), 'drop down list is hidden'); +}); + QUnit.module('reset', () => { [ ['dxCalendar', new Date(2019, 1, 2), { dxCalendar: new Date(2019, 1, 3) } ], diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/contextMenu.async.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/contextMenu.async.tests.js index a31b99b7b069..aff5557629e8 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/contextMenu.async.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/contextMenu.async.tests.js @@ -1,9 +1,15 @@ import $ from 'jquery'; import ContextMenu from 'ui/context_menu'; +import devices from '__internal/core/m_devices'; import 'ui/button'; import 'generic_light.css!'; +const DX_SUBMENU_CLASS = 'dx-submenu'; +const DX_CONTEXT_MENU_ITEMS_CONTAINER_CLASS = 'dx-menu-items-container'; +const DX_SCROLLABLE_CONTENT_CLASS = 'dx-scrollable-container'; +const DX_MENU_ITEM_CLASS = 'dx-menu-item'; + QUnit.testStart(() => { const markup = '\
\ @@ -60,5 +66,61 @@ QUnit.module('Context menu', () => { assert.strictEqual(instance.option('items').length, 2, 'items.length'); }); + + QUnit.test('Context menu should have correct height on async render (T1258881)', function(assert) { + const done = assert.async(); + + const menuTargetSelector = '#menuTarget'; + const items = [{ + text: 'root', + items: [ + { text: 'sub 1', template: 'myTemplate' }, + { text: 'sub 2', template: 'myTemplate' }, + { text: 'sub 3', template: 'myTemplate' }, + { text: 'sub 4', template: 'myTemplate' }, + { text: 'sub 5', template: 'myTemplate' }, + { text: 'sub 6', template: 'myTemplate' }, + { text: 'sub 7', template: 'myTemplate' }, + ] + }]; + + const instance = new ContextMenu($('#simpleMenu'), { + target: menuTargetSelector, + items, + templatesRenderAsynchronously: true, + itemTemplate: 'myTemplate', + integrationOptions: { + templates: { + myTemplate: { + render({ model, container, onRendered }) { + setTimeout(() => { + container.append($('
').text(model.text)); + onRendered(); + }); + } + } + } + }, + }); + + $(menuTargetSelector).trigger($.Event('dxcontextmenu')); + + const $itemsContainer = instance.itemsContainer(); + const $rootItem = $itemsContainer.find(`.${DX_MENU_ITEM_CLASS}`).eq(0); + + const eventName = devices.real().deviceType === 'desktop' ? 'dxhoverstart' : 'dxclick'; + + $($itemsContainer).trigger($.Event(eventName, { target: $rootItem.get(0) })); + + instance.option('onShown', (e) => { + const $submenus = $(`.${DX_SUBMENU_CLASS}`); + const $nestedSubmenu = $submenus.eq(1); + const $nestedSubmenuItemsContainer = $nestedSubmenu.find(`.${DX_CONTEXT_MENU_ITEMS_CONTAINER_CLASS}`); + const $scrollableContainer = $nestedSubmenu.find(`.${DX_SCROLLABLE_CONTENT_CLASS}`); + + assert.roughEqual($nestedSubmenuItemsContainer.outerHeight(), $scrollableContainer.outerHeight(), .1); + done(); + }); + }); }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/popover.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/popover.tests.js index 6407421084f5..6c590cdfedce 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/popover.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/popover.tests.js @@ -2284,6 +2284,78 @@ QUnit.module('target option', { }); }); +QUnit.module('disabled option', { + beforeEach: function() { + fixtures.simple.create(); + }, + afterEach: function() { + fixtures.simple.drop(); + } +}, () => { + QUnit.test('popover should not be shown after clicking on the target if disable is set to true during initialization', function(assert) { + const $popover = $('#what'); + const $target = $('#where'); + + const popover = new Popover($popover, { + target: $target, + showEvent: 'dxclick', + disabled: true, + }); + + $target.trigger('dxclick'); + + assert.strictEqual(popover.option('visible'), false, 'popover should not be shown after clicking on the target'); + }); + + QUnit.test('popover should be shown after clicking on the target if disable is set to false during initialization', function(assert) { + const $popover = $('#what'); + const $target = $('#where'); + + const popover = new Popover($popover, { + target: $target, + showEvent: 'dxclick', + disabled: false, + }); + + $target.trigger('dxclick'); + + assert.strictEqual(popover.option('visible'), true, 'popover should be shown after clicking on the target'); + }); + + QUnit.test('popover should not be shown after clicking on the target if disable is set to true at runtime', function(assert) { + const $popover = $('#what'); + const $target = $('#where'); + + const popover = new Popover($popover, { + target: $target, + showEvent: 'dxclick', + }); + + popover.option('disabled', true); + + $target.trigger('dxclick'); + + assert.strictEqual(popover.option('visible'), false, 'popover should not be shown after clicking on the target'); + }); + + QUnit.test('popover should be shown after clicking on the target if disable is set to false at runtime', function(assert) { + const $popover = $('#what'); + const $target = $('#where'); + + const popover = new Popover($popover, { + target: $target, + showEvent: 'dxclick', + disabled: true, + }); + + popover.option('disabled', false); + + $target.trigger('dxclick'); + + assert.strictEqual(popover.option('visible'), true, 'popover should be shown after clicking on the target'); + }); +}); + QUnit.module('aria accessibility', { beforeEach: function() { fixtures.simple.create(); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.api.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.api.tests.js index 93d061d3f4d1..3c4fd5a30254 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.api.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.api.tests.js @@ -20,7 +20,6 @@ import { SCROLLBAR_VERTICAL_CLASS, SCROLLABLE_SCROLLBARS_HIDDEN, SCROLLABLE_DISABLED_CLASS, - calculateInertiaDistance, } from './scrollable.constants.js'; import { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.dynamic.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.dynamic.tests.js index 69713f341355..a492b994f202 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.dynamic.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.dynamic.tests.js @@ -453,7 +453,6 @@ QUnit.test('bounce is disabled', function(assert) { useNative: false, bounceEnabled: false, inertiaEnabled: false, - onBounce: function() { assert.ok(false, 'bounce action was not fired'); } @@ -479,11 +478,9 @@ QUnit.test('inertia stopped on the bound when bounce is disabled', function(asse $scrollable.dxScrollable({ useNative: false, bounceEnabled: false, - onBounce: function() { assert.ok(false, 'bounce action was not fired'); }, - onEnd: function() { const location = getScrollOffset($scrollable); assert.equal(location.top, 0, 'content stopped on the bound'); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.main.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.main.tests.js index d509a85b9306..e416d8085be2 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.main.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/scrollableParts/scrollable.main.tests.js @@ -161,6 +161,56 @@ QUnit.test('reset unused position after change direction', function(assert) { QUnit.module('both directions', moduleConfig); +['horizontal', 'vertical'].forEach((direction) => { + QUnit.test(`content should have the translate(0,0) when scrolling within the bounds of the container in ${direction} direction`, function(assert) { + const done = assert.async(); + assert.expect(2); + + const contentWidth = 9000; + const contentHeight = 9000; + const moveDistance = -10; + const moveDuration = 10; + const $scrollable = $('#scrollable'); + + $scrollable + .find('.content1') + .width(contentWidth) + .height(contentHeight); + + $scrollable.dxScrollable({ + useNative: false, + direction, + onEnd: function() { + const translate = getTranslateValues($content.get(0)); + + assert.equal(translate.left, 0, 'translate left should have zero value'); + assert.equal(translate.top, 0, 'translate top should have zero value'); + + done(); + } + }); + + const $content = $scrollable.find(`.${SCROLLABLE_CONTENT_CLASS}`); + const mouse = pointerMock($content).start(); + + mouse + .down() + .wait(moveDuration); + + if(direction === 'horizontal') { + mouse + .move(moveDistance, 0) + .up(); + } else { + mouse + .move(0, moveDistance) + .up(); + } + + this.clock.tick(10); + }); +}); + QUnit.test('bounce problem', function(assert) { assert.expect(2); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js index 2afc216148fe..6a56836c19be 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js @@ -1240,7 +1240,7 @@ QUnit.module('Pane sizing', moduleConfig, () => { assert.strictEqual($leftPane.css('width'), '0px'); }); - QUnit.skip('The splitter panes should maintain the correct ratio after being rendered inside an invisible element and display correctly when shown (T1241434)', function(assert) { + QUnit.test('The splitter panes should maintain the correct ratio after being rendered inside an invisible element and display correctly when shown (T1241434)', function(assert) { const done = assert.async(); $('#splitterParentContainer').css('display', 'none'); @@ -1255,15 +1255,16 @@ QUnit.module('Pane sizing', moduleConfig, () => { $('#splitterParentContainer').css('display', 'block'); + const resizeObserverTimeout = 50; setTimeout(() => { this.assertLayout(['30.4054', '69.5946']); done(); - }, 10); + }, resizeObserverTimeout); }); }); - QUnit.skip('The splitter panes should maintain the correct ratio after being initialized on a detached element and then attached to the DOM (T1241434)', function(assert) { + QUnit.test('The splitter panes should maintain the correct ratio after being initialized on a detached element and then attached to the DOM (T1241434)', function(assert) { const done = assert.async(); const $splitter = $('
'); @@ -1278,11 +1279,12 @@ QUnit.module('Pane sizing', moduleConfig, () => { $splitter.appendTo('#splitterParentContainer'); + const resizeObserverTimeout = 50; setTimeout(() => { this.assertLayout(['30.4054', '69.5946']); done(); - }, 10); + }, resizeObserverTimeout); }); }); }); diff --git a/packages/devextreme/ts/aliases.d.ts b/packages/devextreme/ts/aliases.d.ts index 4e43900f2519..4484af09af53 100644 --- a/packages/devextreme/ts/aliases.d.ts +++ b/packages/devextreme/ts/aliases.d.ts @@ -825,116 +825,123 @@ declare namespace DevExpress.common.grids { } declare namespace DevExpress { - export type AnimationConfig = DevExpress.common.core.animation.AnimationConfig; - export const animationPresets: typeof DevExpress.common.core.animation.animationPresets - export type Device = DevExpress.common.core.environment.Device; - export const devices: typeof DevExpress.common.core.environment.devices; - export type dxSchedulerTimeZone = DevExpress.common.core.environment.SchedulerTimeZone; - export type EndpointSelector = DevExpress.common.data.EndpointSelector; - export const fx: typeof DevExpress.common.core.animation.fx; - export const hideTopOverlay: typeof DevExpress.common.core.environment.hideTopOverlay; - export const localizationformatDate: typeof DevExpress.common.core.localization.formatDate; - export const localizationformatMessage: typeof DevExpress.common.core.localization.formatMessage; - export const localizationformatNumber: typeof DevExpress.common.core.localization.formatNumber; - export const localizationloadMessages: typeof DevExpress.common.core.localization.loadMessages; - export const localizationlocale: typeof DevExpress.common.core.localization.locale; - export const localizationparseDate: typeof DevExpress.common.core.localization.parseDate; - export const localizationparseNumber: typeof DevExpress.common.core.localization.parseNumber; - export type PositionConfig = DevExpress.common.core.animation.PositionConfig; - export type TransitionExecutor = DevExpress.common.core.animation.TransitionExecutor; - export const utilscancelAnimationFrame: typeof DevExpress.common.core.animation.cancelAnimationFrame; - export const utilsrequestAnimationFrame: typeof DevExpress.common.core.animation.requestAnimationFrame; + export type AnimationConfig = common.core.animation.AnimationConfig; + export const animationPresets: typeof common.core.animation.animationPresets; + export type Device = common.core.environment.Device; + export const devices: typeof common.core.environment.devices; + export type dxSchedulerTimeZone = common.core.environment.SchedulerTimeZone; + export class EndpointSelector extends common.data.EndpointSelector {} + export const fx: typeof common.core.animation.fx; + export const hideTopOverlay: typeof common.core.environment.hideTopOverlay; + export type PositionConfig = common.core.animation.PositionConfig; + export class TransitionExecutor extends common.core.animation.TransitionExecutor {} +} + +declare namespace DevExpress.localization { + export const formatDate: typeof common.core.localization.formatDate; + export const formatMessage: typeof common.core.localization.formatMessage; + export const formatNumber: typeof common.core.localization.formatNumber; + export const loadMessages: typeof common.core.localization.loadMessages; + export const locale: typeof common.core.localization.locale; + export const parseDate: typeof common.core.localization.parseDate; + export const parseNumber: typeof common.core.localization.parseNumber; } declare namespace DevExpress.common { - export type GroupItem = DevExpress.common.data.GroupItem; - export const isGroupItemsArray: typeof DevExpress.common.data.isGroupItemsArray; - export const isItemsArray: typeof DevExpress.common.data.isItemsArray; - export const isLoadResultObject: typeof DevExpress.common.data.isLoadResultObject; - export type LoadResult = DevExpress.common.data.LoadResult; - export type LoadResultObject = DevExpress.common.data.LoadResultObject; + export type GroupItem = data.GroupItem; + export const isGroupItemsArray: typeof common.data.isGroupItemsArray; + export const isItemsArray: typeof common.data.isItemsArray; + export const isLoadResultObject: typeof common.data.isLoadResultObject; + export type LoadResult = data.LoadResult; + export type LoadResultObject = data.LoadResultObject; } declare namespace DevExpress.animation { - export type AnimationState = DevExpress.common.core.animation.AnimationState; - export type CollisionResolution = DevExpress.common.core.animation.CollisionResolution; - export type CollisionResolutionCombination = DevExpress.common.core.animation.CollisionResolutionCombination; + export type AnimationState = common.core.animation.AnimationState; + export type CollisionResolution = common.core.animation.CollisionResolution; + export type CollisionResolutionCombination = common.core.animation.CollisionResolutionCombination; } declare namespace DevExpress.data { - export const applyChanges: typeof DevExpress.common.data.applyChanges; - export type ArrayStore = DevExpress.common.data.ArrayStore; - export const base64_encode: typeof DevExpress.common.data.base64_encode; - export type CustomStore = DevExpress.common.data.CustomStore; - export type DataSource = DevExpress.common.data.DataSource; - export type EdmLiteral = DevExpress.common.data.EdmLiteral; - export const errorHandler: typeof DevExpress.common.data.errorHandler; - export type LangParams = DevExpress.common.data.LangParams; - export type LocalStore = DevExpress.common.data.LocalStore; - export type ODataContext = DevExpress.common.data.ODataContext; - export type ODataStore = DevExpress.common.data.ODataStore; - export const query: typeof DevExpress.common.data.query; - export type Query = DevExpress.common.data.Query; - export const setErrorHandler: typeof DevExpress.common.data.setErrorHandler; - export type Store = DevExpress.common.data.Store; + export const applyChanges: typeof common.data.applyChanges; + export class ArrayStore extends common.data.ArrayStore {} + export const base64_encode: typeof common.data.base64_encode; + export class CustomStore extends common.data.CustomStore {} + export class DataSource extends common.data.DataSource {} + export class EdmLiteral extends common.data.EdmLiteral {} + export const errorHandler: typeof common.data.errorHandler; + export type LangParams = common.data.LangParams; + export class LocalStore extends common.data.LocalStore {} + export class ODataContext extends common.data.ODataContext {} + export class ODataStore extends common.data.ODataStore {} + export const query: typeof common.data.query; + export type Query = common.data.Query; + export const setErrorHandler: typeof common.data.setErrorHandler; + export class Store extends common.data.Store{} } declare namespace DevExpress.data.CustomStore { - export type GroupItem = DevExpress.common.data.GroupItem; - export type ResolvedData = DevExpress.common.data.ResolvedData; + export type GroupItem = common.data.GroupItem; + export type ResolvedData = common.data.ResolvedData; } declare namespace DevExpress.data.DataSource { - export type Options = DevExpress.common.data.DataSourceOptions; + export type Options = common.data.DataSourceOptions; } declare namespace DevExpress.data.Store { - export type Options = DevExpress.common.data.StoreOptions; + export type Options = common.data.StoreOptions; } declare namespace DevExpress.data.utils { - export const compileGetter: typeof DevExpress.common.data.compileGetter; - export const compileSetter: typeof DevExpress.common.data.compileSetter; + export const compileGetter: typeof common.data.compileGetter; + export const compileSetter: typeof common.data.compileSetter; } declare namespace DevExpress.data.utils.odata { - export const keyConverters: typeof DevExpress.common.data.keyConverters; + export const keyConverters: typeof common.data.keyConverters; } declare namespace DevExpress.events { - export type AsyncCancelable = DevExpress.common.core.events.AsyncCancelable; - export type Cancelable = DevExpress.common.core.events.Cancelable; - export type ChangedOptionInfo = DevExpress.common.core.events.ChangedOptionInfo; - export type EventInfo = DevExpress.common.core.events.EventInfo; - export type InitializedEventInfo = DevExpress.common.core.events.InitializedEventInfo; - export type ItemInfo = DevExpress.common.core.events.ItemInfo; - export type NativeEventInfo = DevExpress.common.core.events.NativeEventInfo; - export const off: typeof DevExpress.common.core.events.off; - export const on: typeof DevExpress.common.core.events.on; - export const one: typeof DevExpress.common.core.events.one; - export const trigger: typeof DevExpress.common.core.events.trigger; + export type AsyncCancelable = common.core.events.AsyncCancelable; + export type Cancelable = common.core.events.Cancelable; + export type ChangedOptionInfo = common.core.events.ChangedOptionInfo; + export type EventInfo = common.core.events.EventInfo; + export type InitializedEventInfo = common.core.events.InitializedEventInfo; + export type ItemInfo = common.core.events.ItemInfo; + export type NativeEventInfo = common.core.events.NativeEventInfo; + export const off: typeof common.core.events.off; + export const on: typeof common.core.events.on; + export const one: typeof common.core.events.one; + export const trigger: typeof common.core.events.trigger; } declare namespace DevExpress.excelExporter { - export type DataGridCell = DevExpress.common.Export.excel.DataGridCell; - export type ExcelExportDataGridProps = DevExpress.common.Export.excel.DataGridExportOptions; - export type ExcelExportPivotGridProps = DevExpress.common.Export.excel.PivotGridExportOptions; - export const exportDataGrid: typeof DevExpress.common.Export.excel.exportDataGrid; - export const exportPivotGrid: typeof DevExpress.common.Export.excel.exportPivotGrid; - export type PivotGridCell = DevExpress.common.Export.excel.PivotGridCell; + export type DataGridCell = common.Export.excel.DataGridCell; + export type ExcelExportDataGridProps = common.Export.excel.DataGridExportOptions; + export type ExcelExportPivotGridProps = common.Export.excel.PivotGridExportOptions; + export const exportDataGrid: typeof common.Export.excel.exportDataGrid; + export const exportPivotGrid: typeof common.Export.excel.exportPivotGrid; + export type PivotGridCell = common.Export.excel.PivotGridCell; } declare namespace DevExpress.pdfExporter { - export type Cell = DevExpress.common.Export.pdf.Cell; - export type DataGridCell = DevExpress.common.Export.pdf.DataGridCell; - export const exportDataGrid: typeof DevExpress.common.Export.pdf.exportDataGrid; - export const exportGantt: typeof DevExpress.common.Export.pdf.exportGantt; - export type PdfExportDataGridProps = DevExpress.common.Export.pdf.DataGridExportOptions; - export type PdfExportGanttFont = DevExpress.common.Export.pdf.GanttExportFont; - export type PdfExportGanttProps = DevExpress.common.Export.pdf.GanttExportOptions; + export type Cell = common.Export.pdf.Cell; + export type DataGridCell = common.Export.pdf.DataGridCell; + export const exportDataGrid: typeof common.Export.pdf.exportDataGrid; + export const exportGantt: typeof common.Export.pdf.exportGantt; + export type PdfExportDataGridProps = common.Export.pdf.DataGridExportOptions; + export type PdfExportGanttFont = common.Export.pdf.GanttExportFont; + export type PdfExportGanttProps = common.Export.pdf.GanttExportOptions; } declare namespace DevExpress.utils { - export const getTimeZones: typeof DevExpress.common.core.environment.getTimeZones; - export const initMobileViewport: typeof DevExpress.common.core.environment.initMobileViewport; + export const getTimeZones: typeof common.core.environment.getTimeZones; + export const initMobileViewport: typeof common.core.environment.initMobileViewport; + export const cancelAnimationFrame: typeof common.core.animation.cancelAnimationFrame; + export const requestAnimationFrame: typeof common.core.animation.requestAnimationFrame; +} + +declare namespace DevExpress.ui { + export type Format = common.core.localization.Format; } diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index 816903aedf63..6eada8a2ea01 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -21267,6 +21267,8 @@ declare module DevExpress.ui { * [descr:dxMenuBaseItem.visible] */ visible?: boolean; + + [key: string]: any; } /** * [descr:_ui_menu_OptionChangedEvent] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fbd1fc04f86..f8d02e48547f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1511,8 +1511,8 @@ importers: specifier: 9.0.0 version: 9.0.0(postcss@8.4.49)(stylelint@15.11.0(typescript@5.4.5)) stylelint-scss: - specifier: 5.3.1 - version: 5.3.1(stylelint@15.11.0(typescript@5.4.5)) + specifier: 6.10.0 + version: 6.10.0(stylelint@15.11.0(typescript@5.4.5)) through2: specifier: 2.0.5 version: 2.0.5 @@ -7695,6 +7695,10 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -11289,6 +11293,9 @@ packages: known-css-properties@0.30.0: resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==} + known-css-properties@0.35.0: + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -11798,6 +11805,12 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdn-data@2.14.0: + resolution: {integrity: sha512-QjcSiIvUHjmXp5wNLClRjQeU0Zp+I2Dag+AhtQto0nyKYZ3IF/pUzCuHe7Bv77EC92XE5t3EXeEiEv/to2Bwig==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -14753,10 +14766,11 @@ packages: peerDependencies: stylelint: ^14.5.1 || ^15.0.0 - stylelint-scss@5.3.1: - resolution: {integrity: sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==} + stylelint-scss@6.10.0: + resolution: {integrity: sha512-y03if6Qw9xBMoVaf7tzp5BbnYhYvudIKzURkhSHzcHG0bW0fAYvQpTUVJOe7DyhHaxeThBil4ObEMvGbV7+M+w==} + engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^14.5.1 || ^15.0.0 + stylelint: ^16.0.2 stylelint@15.11.0: resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} @@ -19691,17 +19705,16 @@ snapshots: '@one-ini/wasm@0.1.1': {} - '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 '@parcel/graph': 3.2.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: @@ -19717,47 +19730,46 @@ snapshots: dependencies: chalk: 4.1.2 - '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.4.5)': dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/core': 2.12.0(@swc/helpers@0.5.15) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.4.5) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(postcss@8.4.49)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.4.5) + '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/helpers' - cssnano @@ -19779,13 +19791,13 @@ snapshots: '@parcel/graph': 3.2.0 '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/profiler': 2.12.0 '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) abortcontroller-polyfill: 1.7.6 base-x: 3.0.10 browserslist: 4.24.2 @@ -19813,7 +19825,7 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 '@parcel/watcher': 2.5.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/helpers' @@ -19830,14 +19842,13 @@ snapshots: dependencies: chalk: 4.1.2 - '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: @@ -19851,10 +19862,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -19862,18 +19873,16 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.4.5)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(postcss@8.4.49)(relateurl@0.2.7)(terser@5.36.0)(typescript@5.4.5)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) htmlnano: 2.1.1(postcss@8.4.49)(relateurl@0.2.7)(svgo@2.8.0)(terser@5.36.0)(typescript@5.4.5) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - cssnano - postcss - purgecss @@ -19883,31 +19892,28 @@ snapshots: - typescript - uncss - '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - transitivePeerDependencies: - - '@swc/helpers' + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/optimizer-swc@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 '@swc/core': 1.9.2(@swc/helpers@0.5.15) @@ -19925,39 +19931,37 @@ snapshots: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@swc/core': 1.9.2(@swc/helpers@0.5.15) semver: 7.6.3 transitivePeerDependencies: - '@swc/helpers' - '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 lightningcss: 1.28.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) @@ -19966,38 +19970,33 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/profiler@2.12.0': dependencies: @@ -20005,79 +20004,71 @@ snapshots: '@parcel/events': 2.12.0 chrome-trace-event: 1.0.4 - '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 chalk: 4.1.2 term-size: 2.2.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 chrome-trace-event: 1.0.4 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 react-error-overlay: 6.0.9 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/rust@2.12.0': {} @@ -20085,10 +20076,10 @@ snapshots: dependencies: detect-libc: 1.0.3 - '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -20097,12 +20088,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.2 @@ -20110,12 +20100,11 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -20125,45 +20114,41 @@ snapshots: srcset: 4.0.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@swc/helpers': 0.5.15 browserslist: 4.24.2 nullthrows: 1.1.1 regenerator-runtime: 0.13.11 semver: 7.6.3 - '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) json5: 2.2.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 clone: 2.1.2 @@ -20172,11 +20157,10 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -20185,28 +20169,25 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -20215,7 +20196,6 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: @@ -20224,7 +20204,7 @@ snapshots: '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/source-map': 2.1.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) utility-types: 3.11.0 transitivePeerDependencies: - '@parcel/core' @@ -20301,7 +20281,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 - '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 @@ -20310,8 +20290,6 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' '@phenomnomnominal/tsquery@5.0.1(typescript@5.4.5)': dependencies: @@ -24967,6 +24945,11 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + css-what@6.1.0: {} css.escape@1.5.1: {} @@ -29869,6 +29852,8 @@ snapshots: known-css-properties@0.30.0: {} + known-css-properties@0.35.0: {} + kuler@2.0.0: {} labeled-stream-splicer@2.0.2: @@ -30441,6 +30426,10 @@ snapshots: mdn-data@2.0.30: {} + mdn-data@2.12.2: {} + + mdn-data@2.14.0: {} + media-typer@0.3.0: {} memfs@3.5.3: @@ -31619,9 +31608,9 @@ snapshots: '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 chalk: 4.1.2 commander: 7.2.0 @@ -33918,12 +33907,15 @@ snapshots: postcss-value-parser: 4.2.0 stylelint: 15.11.0(typescript@5.4.5) - stylelint-scss@5.3.1(stylelint@15.11.0(typescript@5.4.5)): + stylelint-scss@6.10.0(stylelint@15.11.0(typescript@5.4.5)): dependencies: - known-css-properties: 0.29.0 + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.35.0 + mdn-data: 2.14.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 stylelint: 15.11.0(typescript@5.4.5)