From 1cfe4531ffdc1607895daf84518dfb7e676aacd0 Mon Sep 17 00:00:00 2001 From: Rajat Date: Sat, 28 Sep 2024 12:03:20 +0530 Subject: [PATCH 01/48] [DataGridPro] Fix dragging styles removal in column reorder (#14680) --- .../columnReorder/useGridColumnReorder.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/x-data-grid-pro/src/hooks/features/columnReorder/useGridColumnReorder.tsx b/packages/x-data-grid-pro/src/hooks/features/columnReorder/useGridColumnReorder.tsx index 9f47e47ab497..db0e3dc99fdd 100644 --- a/packages/x-data-grid-pro/src/hooks/features/columnReorder/useGridColumnReorder.tsx +++ b/packages/x-data-grid-pro/src/hooks/features/columnReorder/useGridColumnReorder.tsx @@ -311,6 +311,12 @@ export const useGridColumnReorder = ( event.stopPropagation(); clearTimeout(removeDnDStylesTimeout.current); + + // For more information check here https://github.com/mui/mui-x/issues/14678 + if (dragColNode.current!.classList.contains(classes.columnHeaderDragging)) { + dragColNode.current!.classList.remove(classes.columnHeaderDragging); + } + dragColNode.current = null; // Check if the column was dropped outside the grid. @@ -335,7 +341,13 @@ export const useGridColumnReorder = ( })); apiRef.current.forceUpdate(); }, - [props.disableColumnReorder, props.keepColumnPositionIfDraggedOutside, logger, apiRef], + [ + apiRef, + props.disableColumnReorder, + props.keepColumnPositionIfDraggedOutside, + logger, + classes.columnHeaderDragging, + ], ); useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleDragStart); From 50f9889d6ee1e45ce85a8728b10455ef3c327abd Mon Sep 17 00:00:00 2001 From: Bilal Shafi Date: Sat, 28 Sep 2024 11:33:56 +0500 Subject: [PATCH 02/48] [DataGrid] Fix `checkboxSelectionVisibleOnly` reset the selection on filtering (#14677) Signed-off-by: Bilal Shafi Co-authored-by: Armin Mehinovic <4390250+arminmeh@users.noreply.github.com> --- .../tests/rowSelection.DataGridPro.test.tsx | 37 +++++++++++++++++++ .../rowSelection/useGridRowSelection.ts | 15 +++++--- .../src/tests/rowSelection.DataGrid.test.tsx | 36 +++++++++++++++++- 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx index 8d0af590260d..f878b572a3c5 100644 --- a/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx @@ -253,6 +253,43 @@ describe(' - Row selection', () => { fireEvent.click(selectAllCheckbox); expect(apiRef.current.getSelectedRows()).to.have.length(2); }); + + // https://github.com/mui/mui-x/issues/14074 + it('should select all the rows of the current page keeping the previously selected rows when a filter is applied', () => { + render( + , + ); + + fireEvent.click(getCell(0, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([0]); + fireEvent.click(screen.getByRole('button', { name: /next page/i })); + const selectAllCheckbox: HTMLInputElement = screen.getByRole('checkbox', { + name: /select all rows/i, + }); + fireEvent.click(selectAllCheckbox); + expect(apiRef.current.getSelectedRows()).to.have.keys([0, 3, 4]); + expect(selectAllCheckbox.checked).to.equal(true); + }); }); describe('apiRef: getSelectedRows', () => { diff --git a/packages/x-data-grid/src/hooks/features/rowSelection/useGridRowSelection.ts b/packages/x-data-grid/src/hooks/features/rowSelection/useGridRowSelection.ts index e42e696554f9..337b324e48b5 100644 --- a/packages/x-data-grid/src/hooks/features/rowSelection/useGridRowSelection.ts +++ b/packages/x-data-grid/src/hooks/features/rowSelection/useGridRowSelection.ts @@ -10,7 +10,6 @@ import { GridRowId } from '../../../models/gridRows'; import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler'; import { useGridApiMethod } from '../../utils/useGridApiMethod'; import { useGridLogger } from '../../utils/useGridLogger'; -import { gridRowsLookupSelector } from '../rows/gridRowsSelector'; import { gridRowSelectionStateSelector, selectedGridRowsSelector, @@ -20,7 +19,7 @@ import { gridPaginatedVisibleSortedGridRowIdsSelector } from '../pagination'; import { gridFocusCellSelector } from '../focus/gridFocusStateSelector'; import { gridExpandedSortedRowIdsSelector, - gridFilterModelSelector, + gridFilteredRowsLookupSelector, } from '../filter/gridFilterSelector'; import { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../../../colDef'; import { GridCellModes } from '../../../models/gridEditRowModel'; @@ -331,14 +330,14 @@ export const useGridRowSelection = ( return; } const currentSelection = gridRowSelectionStateSelector(apiRef.current.state); - const rowsLookup = gridRowsLookupSelector(apiRef); + const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project const selectionLookup = { ...selectedIdsLookupSelector(apiRef) }; let hasChanged = false; currentSelection.forEach((id: GridRowId) => { - if (!rowsLookup[id]) { + if (!filteredRowsLookup[id]) { delete selectionLookup[id]; hasChanged = true; } @@ -452,8 +451,7 @@ export const useGridRowSelection = ( ? gridPaginatedVisibleSortedGridRowIdsSelector(apiRef) : gridExpandedSortedRowIdsSelector(apiRef); - const filterModel = gridFilterModelSelector(apiRef); - apiRef.current.selectRows(rowsToBeSelected, params.value, filterModel?.items.length > 0); + apiRef.current.selectRows(rowsToBeSelected, params.value); }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination, props.paginationMode], ); @@ -539,6 +537,11 @@ export const useGridRowSelection = ( 'sortedRowsSet', runIfRowSelectionIsEnabled(removeOutdatedSelection), ); + useGridApiEventHandler( + apiRef, + 'filteredRowsSet', + runIfRowSelectionIsEnabled(removeOutdatedSelection), + ); useGridApiEventHandler(apiRef, 'rowClick', runIfRowSelectionIsEnabled(handleRowClick)); useGridApiEventHandler( apiRef, diff --git a/packages/x-data-grid/src/tests/rowSelection.DataGrid.test.tsx b/packages/x-data-grid/src/tests/rowSelection.DataGrid.test.tsx index 45ddd727ca21..67f6e8350ca2 100644 --- a/packages/x-data-grid/src/tests/rowSelection.DataGrid.test.tsx +++ b/packages/x-data-grid/src/tests/rowSelection.DataGrid.test.tsx @@ -367,6 +367,38 @@ describe(' - Row selection', () => { expect(input2.checked).to.equal(true); }); + it('should remove the selection from rows that are filtered out', async function test() { + if (isJSDOM) { + this.skip(); + } + render( + , + ); + const selectAllCheckbox = screen.getByRole('checkbox', { name: 'Select all rows' }); + fireEvent.click(selectAllCheckbox); + await act(() => { + expect(getSelectedRowIds()).to.deep.equal([0, 1, 2, 3]); + }); + expect(grid('selectedRowCount')?.textContent).to.equal('4 rows selected'); + + fireEvent.change(screen.getByRole('spinbutton', { name: 'Value' }), { + target: { value: 1 }, + }); + await waitFor(() => { + // Previous selection is cleaned with only the filtered rows + expect(getSelectedRowIds()).to.deep.equal([1]); + }); + expect(grid('selectedRowCount')?.textContent).to.equal('1 row selected'); + }); + it('should only select filtered items when "select all" is toggled after applying a filter', async () => { render( - Row selection', () => { target: { value: 1 }, }); await waitFor(() => { - // Previous selection remains, but only one row is visible + // Previous selection is cleared and only the filtered row is selected expect(getSelectedRowIds()).to.deep.equal([1]); }); - expect(grid('selectedRowCount')?.textContent).to.equal('4 rows selected'); + expect(grid('selectedRowCount')?.textContent).to.equal('1 row selected'); fireEvent.click(selectAllCheckbox); // Unselect all await waitFor(() => { From 55bb09ae35a8a897abc58c66ab345417c6a70512 Mon Sep 17 00:00:00 2001 From: Flavien DELANGLE Date: Mon, 30 Sep 2024 09:39:55 +0200 Subject: [PATCH 03/48] [docs] Fix typo in row spanning doc (#14770) --- .../{RowSpanningCalender.js => RowSpanningCalendar.js} | 2 +- .../{RowSpanningCalender.tsx => RowSpanningCalendar.tsx} | 2 +- ...ningCalender.tsx.preview => RowSpanningCalendar.tsx.preview} | 0 docs/data/data-grid/row-spanning/row-spanning.md | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename docs/data/data-grid/row-spanning/{RowSpanningCalender.js => RowSpanningCalendar.js} (98%) rename docs/data/data-grid/row-spanning/{RowSpanningCalender.tsx => RowSpanningCalendar.tsx} (98%) rename docs/data/data-grid/row-spanning/{RowSpanningCalender.tsx.preview => RowSpanningCalendar.tsx.preview} (100%) diff --git a/docs/data/data-grid/row-spanning/RowSpanningCalender.js b/docs/data/data-grid/row-spanning/RowSpanningCalendar.js similarity index 98% rename from docs/data/data-grid/row-spanning/RowSpanningCalender.js rename to docs/data/data-grid/row-spanning/RowSpanningCalendar.js index b311a543d4c1..fa234baca5fe 100644 --- a/docs/data/data-grid/row-spanning/RowSpanningCalender.js +++ b/docs/data/data-grid/row-spanning/RowSpanningCalendar.js @@ -131,7 +131,7 @@ const rootStyles = { }, }; -export default function RowSpanningCalender() { +export default function RowSpanningCalendar() { return ( Date: Mon, 30 Sep 2024 10:29:57 +0200 Subject: [PATCH 04/48] Bump @docsearch/react to ^3.6.2 (#14758) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/package.json b/docs/package.json index 75ef42a322bb..aa1c2f9f7054 100644 --- a/docs/package.json +++ b/docs/package.json @@ -22,7 +22,7 @@ "@babel/core": "^7.25.2", "@babel/runtime": "^7.25.6", "@babel/runtime-corejs2": "^7.25.6", - "@docsearch/react": "^3.6.1", + "@docsearch/react": "^3.6.2", "@emotion/cache": "^11.13.1", "@emotion/react": "^11.13.3", "@emotion/server": "^11.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 281e775e80c3..be4935774be0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -414,8 +414,8 @@ importers: specifier: ^7.25.6 version: 7.25.6 '@docsearch/react': - specifier: ^3.6.1 - version: 3.6.1(@algolia/client-search@4.22.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) + specifier: ^3.6.2 + version: 3.6.2(@algolia/client-search@4.22.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) '@emotion/cache': specifier: ^11.13.1 version: 11.13.1 @@ -2476,11 +2476,11 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/css@3.6.1': - resolution: {integrity: sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==} + '@docsearch/css@3.6.2': + resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} - '@docsearch/react@3.6.1': - resolution: {integrity: sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==} + '@docsearch/react@3.6.2': + resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -11357,13 +11357,13 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/css@3.6.1': {} + '@docsearch/css@3.6.2': {} - '@docsearch/react@3.6.1(@algolia/client-search@4.22.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/react@3.6.2(@algolia/client-search@4.22.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': dependencies: '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1)(search-insights@2.13.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) - '@docsearch/css': 3.6.1 + '@docsearch/css': 3.6.2 algoliasearch: 4.22.1 optionalDependencies: '@types/react': 18.3.4 From 6693d5912cfda4d6f0271dc2fff42bcf859a7844 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:37:09 +0200 Subject: [PATCH 05/48] Bump vitest to 2.1.1 (#14704) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 211 +++++++++++++-------------- test/performance-charts/package.json | 2 +- 2 files changed, 100 insertions(+), 113 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be4935774be0..dc630c93267a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1620,7 +1620,7 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: ^3.1.1 - version: 3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0)) + version: 3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0)) '@emotion/react': specifier: ^11.13.3 version: 11.13.3(@types/react@18.3.4)(react@18.3.1) @@ -1647,7 +1647,7 @@ importers: version: 3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) '@vitest/ui': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.5) + version: 2.0.5(vitest@2.1.1) jsdom: specifier: ^24.1.3 version: 24.1.3 @@ -1658,8 +1658,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vitest: - specifier: 2.0.5 - version: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) + specifier: 2.1.1 + version: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) packages: @@ -3071,8 +3071,8 @@ packages: '@jridgewell/source-map@0.3.5': resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -4387,20 +4387,35 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@2.1.1': + resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + + '@vitest/mocker@2.1.1': + resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + peerDependencies: + '@vitest/spy': 2.1.1 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/runner@2.0.5': - resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + '@vitest/pretty-format@2.1.1': + resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + + '@vitest/runner@2.1.1': + resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} - '@vitest/snapshot@2.0.5': - resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + '@vitest/snapshot@2.1.1': + resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@2.1.1': + resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} '@vitest/ui@2.0.5': resolution: {integrity: sha512-m+ZpVt/PVi/nbeRKEjdiYeoh0aOfI9zr3Ria9LO7V2PlMETtAXJS3uETEZkc8Be2oOl8mhd7Ew+5SRBXRYncNw==} @@ -4410,6 +4425,9 @@ packages: '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + '@vitest/utils@2.1.1': + resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -6150,10 +6168,6 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - execa@9.3.1: resolution: {integrity: sha512-gdhefCCNy/8tpH/2+ajP9IQc14vXchNdd0weyzSJEFURhRMGncQ+zKFxwjAufIewPEJm9BPOaJnvg2UtlH2gPQ==} engines: {node: ^18.19.0 || >=20.5.0} @@ -6450,10 +6464,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} @@ -6731,10 +6741,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - human-signals@8.0.0: resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} engines: {node: '>=18.18.0'} @@ -6996,10 +7002,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -7590,8 +7592,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} make-array@1.0.5: resolution: {integrity: sha512-sgK2SAzxT19rWU+qxKUcn6PAh/swiIiz2F8C2cZjLc1z4iwYIfdoihqFIDQ8BDzAGtWPYJ6Sr13K1j/DXynDLA==} @@ -7798,10 +7800,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -8187,10 +8185,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -9384,10 +9378,6 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-final-newline@4.0.0: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} @@ -9557,8 +9547,11 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybench@2.8.0: - resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} tinypool@1.0.0: resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} @@ -9913,8 +9906,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@2.0.5: - resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} + vite-node@2.1.1: + resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -9946,15 +9939,15 @@ packages: terser: optional: true - vitest@2.0.5: - resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} + vitest@2.1.1: + resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^20.16.5 - '@vitest/browser': 2.0.5 - '@vitest/ui': 2.0.5 + '@vitest/browser': 2.1.1 + '@vitest/ui': 2.1.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -11345,11 +11338,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0))': + '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0))': dependencies: '@codspeed/core': 3.1.1 vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - vitest: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) + vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) transitivePeerDependencies: - debug @@ -11824,7 +11817,7 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.1': {} @@ -11836,12 +11829,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@lerna/create@8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13)(typescript@5.5.4)': dependencies: @@ -13463,33 +13456,45 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@2.0.5': + '@vitest/expect@2.1.1': dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 chai: 5.1.1 tinyrainbow: 1.2.0 + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))': + dependencies: + '@vitest/spy': 2.1.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.0.5': + '@vitest/pretty-format@2.1.1': dependencies: - '@vitest/utils': 2.0.5 + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.1': + dependencies: + '@vitest/utils': 2.1.1 pathe: 1.1.2 - '@vitest/snapshot@2.0.5': + '@vitest/snapshot@2.1.1': dependencies: - '@vitest/pretty-format': 2.0.5 - magic-string: 0.30.10 + '@vitest/pretty-format': 2.1.1 + magic-string: 0.30.11 pathe: 1.1.2 - '@vitest/spy@2.0.5': + '@vitest/spy@2.1.1': dependencies: tinyspy: 3.0.0 - '@vitest/ui@2.0.5(vitest@2.0.5)': + '@vitest/ui@2.0.5(vitest@2.1.1)': dependencies: '@vitest/utils': 2.0.5 fast-glob: 3.3.2 @@ -13498,7 +13503,7 @@ snapshots: pathe: 1.1.2 sirv: 2.0.4 tinyrainbow: 1.2.0 - vitest: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) + vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) '@vitest/utils@2.0.5': dependencies: @@ -13507,6 +13512,12 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 + '@vitest/utils@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + '@webassemblyjs/ast@1.12.1': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -15653,18 +15664,6 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - execa@9.3.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -16017,8 +16016,6 @@ snapshots: get-stream@6.0.1: {} - get-stream@8.0.1: {} - get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 @@ -16386,8 +16383,6 @@ snapshots: human-signals@2.1.0: {} - human-signals@5.0.0: {} - human-signals@8.0.0: {} hyperlinker@1.0.0: {} @@ -16611,8 +16606,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-stream@4.0.1: {} is-string@1.0.7: @@ -17389,9 +17382,9 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.10: + magic-string@0.30.11: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-array@1.0.5: {} @@ -17692,8 +17685,6 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} - min-indent@1.0.1: {} minimatch@10.0.1: @@ -18195,10 +18186,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -19545,8 +19532,6 @@ snapshots: strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} strip-indent@3.0.0: @@ -19716,7 +19701,9 @@ snapshots: tiny-warning@1.0.3: {} - tinybench@2.8.0: {} + tinybench@2.9.0: {} + + tinyexec@0.3.0: {} tinypool@1.0.0: {} @@ -20053,12 +20040,11 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.0.5(@types/node@20.16.5)(terser@5.27.0): + vite-node@2.1.1(@types/node@20.16.5)(terser@5.27.0): dependencies: cac: 6.7.14 debug: 4.3.6(supports-color@8.1.1) pathe: 1.1.2 - tinyrainbow: 1.2.0 vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) transitivePeerDependencies: - '@types/node' @@ -20080,34 +20066,35 @@ snapshots: fsevents: 2.3.3 terser: 5.27.0 - vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0): + vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0): dependencies: - '@ampproject/remapping': 2.3.0 - '@vitest/expect': 2.0.5 - '@vitest/pretty-format': 2.0.5 - '@vitest/runner': 2.0.5 - '@vitest/snapshot': 2.0.5 - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 + '@vitest/expect': 2.1.1 + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) + '@vitest/pretty-format': 2.1.1 + '@vitest/runner': 2.1.1 + '@vitest/snapshot': 2.1.1 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 chai: 5.1.1 debug: 4.3.6(supports-color@8.1.1) - execa: 8.0.1 - magic-string: 0.30.10 + magic-string: 0.30.11 pathe: 1.1.2 std-env: 3.7.0 - tinybench: 2.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - vite-node: 2.0.5(@types/node@20.16.5)(terser@5.27.0) + vite-node: 2.1.1(@types/node@20.16.5)(terser@5.27.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.16.5 - '@vitest/ui': 2.0.5(vitest@2.0.5) + '@vitest/ui': 2.0.5(vitest@2.1.1) jsdom: 24.1.3 transitivePeerDependencies: - less - lightningcss + - msw - sass - stylus - sugarss diff --git a/test/performance-charts/package.json b/test/performance-charts/package.json index d8a2c84264fb..ee8cfe34f0df 100644 --- a/test/performance-charts/package.json +++ b/test/performance-charts/package.json @@ -20,6 +20,6 @@ "jsdom": "^24.1.3", "react": "^18.3.1", "react-dom": "^18.3.1", - "vitest": "2.0.5" + "vitest": "2.1.1" } } From ae663f7e4ad77795d37b18bb4f20817ed30d892e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:02:28 +0700 Subject: [PATCH 06/48] Bump @vitest/ui to 2.1.1 (#14633) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 74 ++++++++++++++++------------ test/performance-charts/package.json | 2 +- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc630c93267a..b65afade8691 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1620,7 +1620,7 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: ^3.1.1 - version: 3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0)) + version: 3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0)) '@emotion/react': specifier: ^11.13.3 version: 11.13.3(@types/react@18.3.4)(react@18.3.1) @@ -1646,8 +1646,8 @@ importers: specifier: ^3.7.0 version: 3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) '@vitest/ui': - specifier: 2.0.5 - version: 2.0.5(vitest@2.1.1) + specifier: 2.1.1 + version: 2.1.1(vitest@2.1.1) jsdom: specifier: ^24.1.3 version: 24.1.3 @@ -1659,7 +1659,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: 2.1.1 - version: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) + version: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) packages: @@ -4402,9 +4402,6 @@ packages: vite: optional: true - '@vitest/pretty-format@2.0.5': - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/pretty-format@2.1.1': resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} @@ -4417,13 +4414,10 @@ packages: '@vitest/spy@2.1.1': resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} - '@vitest/ui@2.0.5': - resolution: {integrity: sha512-m+ZpVt/PVi/nbeRKEjdiYeoh0aOfI9zr3Ria9LO7V2PlMETtAXJS3uETEZkc8Be2oOl8mhd7Ew+5SRBXRYncNw==} + '@vitest/ui@2.1.1': + resolution: {integrity: sha512-IIxo2LkQDA+1TZdPLYPclzsXukBWd5dX2CKpGqH8CCt8Wh0ZuDn4+vuQ9qlppEju6/igDGzjWF/zyorfsf+nHg==} peerDependencies: - vitest: 2.0.5 - - '@vitest/utils@2.0.5': - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + vitest: 2.1.1 '@vitest/utils@2.1.1': resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} @@ -6227,6 +6221,14 @@ packages: fastq@1.17.0: resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + fdir@6.4.0: + resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -8487,6 +8489,10 @@ packages: resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} engines: {node: '>=10'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -9553,6 +9559,10 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinyglobby@0.2.6: + resolution: {integrity: sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==} + engines: {node: '>=12.0.0'} + tinypool@1.0.0: resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -11338,11 +11348,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0))': + '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0))': dependencies: '@codspeed/core': 3.1.1 vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) + vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) transitivePeerDependencies: - debug @@ -13471,10 +13481,6 @@ snapshots: optionalDependencies: vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - '@vitest/pretty-format@2.0.5': - dependencies: - tinyrainbow: 1.2.0 - '@vitest/pretty-format@2.1.1': dependencies: tinyrainbow: 1.2.0 @@ -13494,23 +13500,16 @@ snapshots: dependencies: tinyspy: 3.0.0 - '@vitest/ui@2.0.5(vitest@2.1.1)': + '@vitest/ui@2.1.1(vitest@2.1.1)': dependencies: - '@vitest/utils': 2.0.5 - fast-glob: 3.3.2 + '@vitest/utils': 2.1.1 fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 sirv: 2.0.4 + tinyglobby: 0.2.6 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0) - - '@vitest/utils@2.0.5': - dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.1 - tinyrainbow: 1.2.0 + vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) '@vitest/utils@2.1.1': dependencies: @@ -15766,6 +15765,10 @@ snapshots: dependencies: reusify: 1.0.4 + fdir@6.4.0(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fflate@0.8.2: {} fg-loadcss@3.1.0: {} @@ -18492,6 +18495,8 @@ snapshots: picomatch@3.0.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} pify@3.0.0: {} @@ -19705,6 +19710,11 @@ snapshots: tinyexec@0.3.0: {} + tinyglobby@0.2.6: + dependencies: + fdir: 6.4.0(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.0: {} tinyrainbow@1.2.0: {} @@ -20066,7 +20076,7 @@ snapshots: fsevents: 2.3.3 terser: 5.27.0 - vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@24.1.3)(terser@5.27.0): + vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0): dependencies: '@vitest/expect': 2.1.1 '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) @@ -20089,7 +20099,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.16.5 - '@vitest/ui': 2.0.5(vitest@2.1.1) + '@vitest/ui': 2.1.1(vitest@2.1.1) jsdom: 24.1.3 transitivePeerDependencies: - less diff --git a/test/performance-charts/package.json b/test/performance-charts/package.json index ee8cfe34f0df..1abf9ad23465 100644 --- a/test/performance-charts/package.json +++ b/test/performance-charts/package.json @@ -16,7 +16,7 @@ "@testing-library/user-event": "^14.5.2", "@vitejs/plugin-react": "^4.3.1", "@vitejs/plugin-react-swc": "^3.7.0", - "@vitest/ui": "2.0.5", + "@vitest/ui": "2.1.1", "jsdom": "^24.1.3", "react": "^18.3.1", "react-dom": "^18.3.1", From fccf14a33f82e799ad2b60851837aeaf777c3278 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 09:03:02 +0000 Subject: [PATCH 07/48] Bump execa to ^9.4.0 (#14701) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/x-charts-vendor/package.json | 2 +- pnpm-lock.yaml | 29 +++++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/x-charts-vendor/package.json b/packages/x-charts-vendor/package.json index ddea9fdbaaa6..b0368ced6528 100644 --- a/packages/x-charts-vendor/package.json +++ b/packages/x-charts-vendor/package.json @@ -50,7 +50,7 @@ "d3-format": "^3.1.0", "d3-path": "^3.1.0", "d3-time-format": "^4.1.0", - "execa": "^9.3.1", + "execa": "^9.4.0", "internmap": "^2.0.3", "rimraf": "^6.0.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b65afade8691..59cc7b6a0995 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -937,8 +937,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 execa: - specifier: ^9.3.1 - version: 9.3.1 + specifier: ^9.4.0 + version: 9.4.0 internmap: specifier: ^2.0.3 version: 2.0.3 @@ -6162,8 +6162,8 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@9.3.1: - resolution: {integrity: sha512-gdhefCCNy/8tpH/2+ajP9IQc14vXchNdd0weyzSJEFURhRMGncQ+zKFxwjAufIewPEJm9BPOaJnvg2UtlH2gPQ==} + execa@9.4.0: + resolution: {integrity: sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==} engines: {node: ^18.19.0 || >=20.5.0} expand-tilde@2.0.2: @@ -8092,9 +8092,9 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -9789,6 +9789,10 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -12108,7 +12112,7 @@ snapshots: '@googleapis/sheets': 9.3.1(encoding@0.1.13) '@netlify/functions': 2.8.1 '@slack/bolt': 3.21.4 - execa: 9.3.1 + execa: 9.4.0 google-auth-library: 9.14.1(encoding@0.1.13) transitivePeerDependencies: - bufferutil @@ -15663,7 +15667,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@9.3.1: + execa@9.4.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.3 @@ -15672,7 +15676,7 @@ snapshots: human-signals: 8.0.0 is-plain-obj: 4.1.0 is-stream: 4.0.1 - npm-run-path: 5.3.0 + npm-run-path: 6.0.0 pretty-ms: 9.0.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 @@ -18021,9 +18025,10 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 + unicorn-magic: 0.3.0 nprogress@0.2.0: {} @@ -19911,6 +19916,8 @@ snapshots: unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 From 9732dcef15dac870811afe0e5343304dde9b03fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:06:34 +0700 Subject: [PATCH 08/48] Bump GitHub Actions (#14697) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/cherry-pick-master-to-v6.yml | 2 +- .github/workflows/cherry-pick-next-to-master.yml | 2 +- .github/workflows/codeql.yml | 6 +++--- .github/workflows/codspeed.yml | 4 ++-- .github/workflows/l10n.yml | 4 ++-- .github/workflows/scorecards.yml | 4 ++-- .github/workflows/vale-action.yml | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/cherry-pick-master-to-v6.yml b/.github/workflows/cherry-pick-master-to-v6.yml index 17479c515c23..fc54376de5c9 100644 --- a/.github/workflows/cherry-pick-master-to-v6.yml +++ b/.github/workflows/cherry-pick-master-to-v6.yml @@ -18,7 +18,7 @@ jobs: if: ${{ contains(github.event.pull_request.labels.*.name, 'needs cherry-pick') && github.event.pull_request.merged == true }} steps: - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: fetch-depth: 0 - name: Cherry pick and create the new PR diff --git a/.github/workflows/cherry-pick-next-to-master.yml b/.github/workflows/cherry-pick-next-to-master.yml index 0b1810db6524..97334ed66a6c 100644 --- a/.github/workflows/cherry-pick-next-to-master.yml +++ b/.github/workflows/cherry-pick-next-to-master.yml @@ -18,7 +18,7 @@ jobs: if: ${{ contains(github.event.pull_request.labels.*.name, 'needs cherry-pick') && github.event.pull_request.merged == true }} steps: - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: fetch-depth: 0 - name: Cherry pick and create the new PR diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 07306021258e..87681c351b34 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -16,10 +16,10 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + uses: github/codeql-action/init@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 with: languages: typescript # If you wish to specify custom queries, you can do so here or in a config file. @@ -29,4 +29,4 @@ jobs: # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + uses: github/codeql-action/analyze@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 2311d7eb030e..a066a4cde6c9 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -34,12 +34,12 @@ jobs: (github.event_name == 'pull_request' && github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'component: charts')) }} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 with: run_install: false - name: Use Node.js 20.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: 'pnpm' # https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-dependencies diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml index a8fb89c86769..33283fdf9c2c 100644 --- a/.github/workflows/l10n.yml +++ b/.github/workflows/l10n.yml @@ -17,12 +17,12 @@ jobs: issues: write steps: - run: echo "${{ github.actor }}" - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0 with: run_install: false - name: Use Node.js 20.x - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: 20 cache: 'pnpm' # https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-dependencies diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 5b11e2853ccc..087069aec08c 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: persist-credentials: false @@ -44,6 +44,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + uses: github/codeql-action/upload-sarif@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 with: sarif_file: results.sarif diff --git a/.github/workflows/vale-action.yml b/.github/workflows/vale-action.yml index b2bb951d043c..481a539b78f9 100644 --- a/.github/workflows/vale-action.yml +++ b/.github/workflows/vale-action.yml @@ -12,7 +12,7 @@ jobs: contents: read pull-requests: write steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: errata-ai/vale-action@38bf078c328061f59879b347ca344a718a736018 # v2.1.0 continue-on-error: true # GitHub Action flag needed until https://github.com/errata-ai/vale-action/issues/89 is fixed with: From 7a598c48a5e1bf4a3a35b7cb7abde3430aef47c6 Mon Sep 17 00:00:00 2001 From: gabrielv Date: Mon, 30 Sep 2024 11:19:32 +0200 Subject: [PATCH 09/48] [l10n] Improve French (fr-FR) locale (#14750) Signed-off-by: Flavien DELANGLE Co-authored-by: Flavien DELANGLE --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/frFR.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index 663b4e2c1a8e..b4f60078aba3 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -91,7 +91,7 @@ "languageTag": "fr-FR", "importName": "frFR", "localeName": "French", - "missingKeysCount": 4, + "missingKeysCount": 0, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/frFR.ts" }, diff --git a/packages/x-data-grid/src/locales/frFR.ts b/packages/x-data-grid/src/locales/frFR.ts index 2b1f3805a77a..96abb7fc40e9 100644 --- a/packages/x-data-grid/src/locales/frFR.ts +++ b/packages/x-data-grid/src/locales/frFR.ts @@ -58,9 +58,9 @@ const frFRGrid: Partial = { // Filter operators text filterOperatorContains: 'contient', - // filterOperatorDoesNotContain: 'does not contain', + filterOperatorDoesNotContain: 'ne contient pas', filterOperatorEquals: 'est égal à', - // filterOperatorDoesNotEqual: 'does not equal', + filterOperatorDoesNotEqual: "n'est pas égal à", filterOperatorStartsWith: 'commence par', filterOperatorEndsWith: 'se termine par', filterOperatorIs: 'est', @@ -81,9 +81,9 @@ const frFRGrid: Partial = { // Header filter operators text headerFilterOperatorContains: 'Contient', - // headerFilterOperatorDoesNotContain: 'Does not contain', + headerFilterOperatorDoesNotContain: 'Ne contient pas', headerFilterOperatorEquals: 'Est égal à', - // headerFilterOperatorDoesNotEqual: 'Does not equal', + headerFilterOperatorDoesNotEqual: "N'est pas égal à", headerFilterOperatorStartsWith: 'Commence par', headerFilterOperatorEndsWith: 'Se termine par', headerFilterOperatorIs: 'Est', From 6777754f9e0c466f90891ceebd0e70643b29d34e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:20:11 +0200 Subject: [PATCH 10/48] Bump ESLint plugins (#14763) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- pnpm-lock.yaml | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 06d3c5a2d1f8..53baf2a39d63 100644 --- a/package.json +++ b/package.json @@ -144,12 +144,12 @@ "eslint-import-resolver-webpack": "^0.13.9", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-import": "^2.30.0", - "eslint-plugin-jsdoc": "^50.2.4", + "eslint-plugin-jsdoc": "^50.3.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-material-ui": "workspace:^", "eslint-plugin-mocha": "^10.5.0", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.36.1", + "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-compiler": "0.0.0-experimental-9ed098e-20240725", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-testing-library": "^6.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59cc7b6a0995..10c6189ff2c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -229,7 +229,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.36.1(eslint@8.57.0))(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.37.0(eslint@8.57.0))(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: ^18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0) @@ -246,8 +246,8 @@ importers: specifier: ^2.30.0 version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) eslint-plugin-jsdoc: - specifier: ^50.2.4 - version: 50.2.4(eslint@8.57.0) + specifier: ^50.3.0 + version: 50.3.0(eslint@8.57.0) eslint-plugin-jsx-a11y: specifier: ^6.10.0 version: 6.10.0(eslint@8.57.0) @@ -261,8 +261,8 @@ importers: specifier: ^5.2.1 version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) eslint-plugin-react: - specifier: ^7.36.1 - version: 7.36.1(eslint@8.57.0) + specifier: ^7.37.0 + version: 7.37.0(eslint@8.57.0) eslint-plugin-react-compiler: specifier: 0.0.0-experimental-9ed098e-20240725 version: 0.0.0-experimental-9ed098e-20240725(eslint@8.57.0) @@ -5997,8 +5997,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@50.2.4: - resolution: {integrity: sha512-020jA+dXaXdb+TML3ZJBvpPmzwbNROjnYuTYi/g6A5QEmEjhptz4oPJDKkOGMIByNxsPpdTLzSU1HYVqebOX1w==} + eslint-plugin-jsdoc@50.3.0: + resolution: {integrity: sha512-P7qDB/RckdKETpBM4CtjHRQ5qXByPmFhRi86sN3E+J+tySchq+RSOGGhI2hDIefmmKFuTi/1ACjqsnDJDDDfzg==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -6041,8 +6041,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.36.1: - resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + eslint-plugin-react@7.37.0: + resolution: {integrity: sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -15326,13 +15326,13 @@ snapshots: transitivePeerDependencies: - eslint-plugin-import - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.36.1(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.37.0(eslint@8.57.0))(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0) - eslint-plugin-react: 7.36.1(eslint@8.57.0) + eslint-plugin-react: 7.37.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.8 @@ -15413,7 +15413,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.2.4(eslint@8.57.0): + eslint-plugin-jsdoc@50.3.0(eslint@8.57.0): dependencies: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 @@ -15483,7 +15483,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react@7.36.1(eslint@8.57.0): + eslint-plugin-react@7.37.0(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 From c379f5fb9708a68fbc11390aee2b643da85a18ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:34:29 +0200 Subject: [PATCH 11/48] Bump nyc to ^17.1.0 (#14702) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 53baf2a39d63..cf2e3da12931 100644 --- a/package.json +++ b/package.json @@ -175,7 +175,7 @@ "mocha": "^10.7.3", "moment": "^2.30.1", "moment-timezone": "^0.5.45", - "nyc": "^17.0.0", + "nyc": "^17.1.0", "prettier": "^3.3.3", "pretty-quick": "^4.0.0", "process": "^0.11.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10c6189ff2c1..f5720d1ac7f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -339,8 +339,8 @@ importers: specifier: ^0.5.45 version: 0.5.45 nyc: - specifier: ^17.0.0 - version: 17.0.0 + specifier: ^17.1.0 + version: 17.1.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -6335,8 +6335,8 @@ packages: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} form-data@2.5.1: @@ -8117,8 +8117,8 @@ packages: '@swc/core': optional: true - nyc@17.0.0: - resolution: {integrity: sha512-ISp44nqNCaPugLLGGfknzQwSwt10SSS5IMoPR7GLoMAyS18Iw5js8U7ga2VF9lYuMZ42gOHr3UddZw4WZltxKg==} + nyc@17.1.0: + resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} engines: {node: '>=18'} hasBin: true @@ -15895,7 +15895,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 3.0.7 - foreground-child@3.1.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -16094,7 +16094,7 @@ snapshots: glob@10.3.10: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 minimatch: 9.0.4 minipass: 7.1.2 @@ -16102,7 +16102,7 @@ snapshots: glob@11.0.0: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 4.0.1 minimatch: 10.0.1 minipass: 7.1.2 @@ -18089,7 +18089,7 @@ snapshots: transitivePeerDependencies: - debug - nyc@17.0.0: + nyc@17.1.0: dependencies: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 @@ -18098,7 +18098,7 @@ snapshots: decamelize: 1.2.0 find-cache-dir: 3.3.2 find-up: 4.1.0 - foreground-child: 2.0.0 + foreground-child: 3.3.0 get-package-type: 0.1.0 glob: 7.2.3 istanbul-lib-coverage: 3.2.2 From 42c6d54318a6102a3636dd560b88e9454254e615 Mon Sep 17 00:00:00 2001 From: k725 Date: Mon, 30 Sep 2024 18:56:55 +0900 Subject: [PATCH 12/48] [l10n] Improve Japanese (ja-JP) locale (#14381) Signed-off-by: Olivier Tassinari Co-authored-by: Olivier Tassinari --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/jaJP.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index b4f60078aba3..f790309694f4 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -147,7 +147,7 @@ "languageTag": "ja-JP", "importName": "jaJP", "localeName": "Japanese", - "missingKeysCount": 5, + "missingKeysCount": 4, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/jaJP.ts" }, diff --git a/packages/x-data-grid/src/locales/jaJP.ts b/packages/x-data-grid/src/locales/jaJP.ts index e34a41428381..0d80664e4021 100644 --- a/packages/x-data-grid/src/locales/jaJP.ts +++ b/packages/x-data-grid/src/locales/jaJP.ts @@ -41,7 +41,7 @@ const jaJPGrid: Partial = { columnsManagementSearchTitle: '検索', columnsManagementNoColumns: 'カラムなし', columnsManagementShowHideAllText: 'すべて表示/非表示', - // columnsManagementReset: 'Reset', + columnsManagementReset: 'リセット', // Filter panel text filterPanelAddFilter: 'フィルター追加', From 682ed65e1ea69142d9f6d50f05cc52eafe438759 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:19:40 +0200 Subject: [PATCH 13/48] Bump webpack to ^5.95.0 (#14764) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 98 +++++++++++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index cf2e3da12931..bf1f93ac5c01 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "typescript": "^5.5.4", "unist-util-visit": "^5.0.0", "util": "^0.12.5", - "webpack": "^5.94.0", + "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4", "yargs": "^17.7.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5720d1ac7f4..ca3494e93c1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -175,7 +175,7 @@ importers: version: 4.10.0 babel-loader: specifier: ^9.2.1 - version: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) babel-plugin-istanbul: specifier: ^7.0.0 version: 7.0.0 @@ -205,7 +205,7 @@ importers: version: 1.12.0(chai@4.5.0) compression-webpack-plugin: specifier: ^11.1.0 - version: 11.1.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 11.1.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) concurrently: specifier: ^9.0.1 version: 9.0.1 @@ -238,7 +238,7 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-import-resolver-webpack: specifier: ^0.13.9 - version: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) eslint-plugin-filenames: specifier: ^1.3.2 version: 1.3.2(eslint@8.57.0) @@ -289,7 +289,7 @@ importers: version: 14.0.2 html-webpack-plugin: specifier: ^5.6.0 - version: 5.6.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 5.6.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) jsdom: specifier: 24.1.3 version: 24.1.3 @@ -319,7 +319,7 @@ importers: version: 0.4.0 karma-webpack: specifier: ^5.0.1 - version: 5.0.1(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 5.0.1(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) lerna: specifier: ^8.1.8 version: 8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13) @@ -373,10 +373,10 @@ importers: version: 3.0.0 string-replace-loader: specifier: ^3.1.0 - version: 3.1.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 3.1.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + version: 5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) tsx: specifier: ^4.19.1 version: 4.19.1 @@ -390,14 +390,14 @@ importers: specifier: ^0.12.5 version: 0.12.5 webpack: - specifier: ^5.94.0 - version: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + specifier: ^5.95.0 + version: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0) + version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -692,7 +692,7 @@ importers: version: 4.2.6 '@types/webpack-bundle-analyzer': specifier: ^4.7.0 - version: 4.7.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + version: 4.7.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) gm: specifier: ^1.25.0 version: 1.25.0 @@ -10036,8 +10036,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.94.0: - resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + webpack@5.95.0: + resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -13307,11 +13307,11 @@ snapshots: '@types/unist@3.0.3': {} - '@types/webpack-bundle-analyzer@4.7.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))': + '@types/webpack-bundle-analyzer@4.7.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))': dependencies: '@types/node': 20.16.5 tapable: 2.2.1 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -13597,20 +13597,20 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)))': dependencies: - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)))': dependencies: - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)))': dependencies: - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0) '@xtuc/ieee754@1.2.0': {} @@ -13974,12 +13974,12 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) babel-plugin-istanbul@7.0.0: dependencies: @@ -14489,11 +14489,11 @@ snapshots: dependencies: mime-db: 1.52.0 - compression-webpack-plugin@11.1.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + compression-webpack-plugin@11.1.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) compression@1.7.4: dependencies: @@ -15349,7 +15349,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: debug: 3.2.7 enhanced-resolve: 0.9.1 @@ -15362,18 +15362,18 @@ snapshots: lodash: 4.17.21 resolve: 2.0.0-next.5 semver: 5.7.2 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))))(eslint@8.57.0): + eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-webpack: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + eslint-import-resolver-webpack: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) transitivePeerDependencies: - supports-color @@ -15396,7 +15396,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))))(eslint@8.57.0) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16324,7 +16324,7 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 - html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + html-webpack-plugin@5.6.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -16332,7 +16332,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) htmlparser2@6.1.0: dependencies: @@ -17028,11 +17028,11 @@ snapshots: dependencies: graceful-fs: 4.2.11 - karma-webpack@5.0.1(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + karma-webpack@5.0.1(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: glob: 7.2.3 minimatch: 9.0.4 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) webpack-merge: 4.2.2 karma@6.4.4: @@ -19456,11 +19456,11 @@ snapshots: streamsearch@1.1.0: {} - string-replace-loader@3.1.0(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + string-replace-loader@3.1.0(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) string-width@4.2.3: dependencies: @@ -19659,14 +19659,14 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.6.3 - terser-webpack-plugin@5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))): + terser-webpack-plugin@5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.27.0 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) optionalDependencies: '@swc/core': 1.6.13(@swc/helpers@0.5.5) @@ -20157,12 +20157,12 @@ snapshots: - bufferutil - utf-8-validate - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0): + webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -20171,7 +20171,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)) + webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 4.10.2 @@ -20188,7 +20188,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0)): + webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)): dependencies: '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 @@ -20210,11 +20210,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0))) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) watchpack: 2.4.1 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.94.0) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0) transitivePeerDependencies: - '@swc/core' - esbuild From 13d1e5dda277a0885f19197ca639ed8f29367bc0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:20:20 +0200 Subject: [PATCH 14/48] Bump glob-gitignore to ^1.0.15 (#14762) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index bf1f93ac5c01..f13b767302ae 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,7 @@ "fast-glob": "^3.3.2", "format-util": "^1.0.5", "fs-extra": "^11.2.0", - "glob-gitignore": "^1.0.14", + "glob-gitignore": "^1.0.15", "globby": "^14.0.2", "html-webpack-plugin": "^5.6.0", "jsdom": "24.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca3494e93c1a..2aef06645aed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -282,8 +282,8 @@ importers: specifier: ^11.2.0 version: 11.2.0 glob-gitignore: - specifier: ^1.0.14 - version: 1.0.14 + specifier: ^1.0.15 + version: 1.0.15 globby: specifier: ^14.0.2 version: 14.0.2 @@ -6504,8 +6504,8 @@ packages: gitconfiglocal@1.0.0: resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==} - glob-gitignore@1.0.14: - resolution: {integrity: sha512-YuAEPqL58bOQDqDF2kMv009rIjSAtPs+WPzyGbwRWK+wD0UWQVRoP34Pz6yJ6ivco65C9tZnaIt0I3JCuQ8NZQ==} + glob-gitignore@1.0.15: + resolution: {integrity: sha512-22pvDWt2hMPfL3UF6lWcZpP+VIwBekJyj6xyb1DpeSALJm+n/0gI9lWD30kvA/h3bgPqYeAX7xGONzmyHrSfqQ==} engines: {node: '>= 6'} glob-parent@5.1.2: @@ -16073,12 +16073,11 @@ snapshots: dependencies: ini: 1.3.8 - glob-gitignore@1.0.14: + glob-gitignore@1.0.15: dependencies: glob: 7.2.3 ignore: 5.3.1 - lodash.difference: 4.5.0 - lodash.union: 4.6.0 + lodash: 4.17.21 make-array: 1.0.5 util.inherits: 1.0.3 From 9ffa9d5d7e01f2cbbc39996bd1047458c92423ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:21:46 +0200 Subject: [PATCH 15/48] Bump @types/lodash to ^4.17.9 (#14760) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/package.json b/docs/package.json index aa1c2f9f7054..a5d384cb48da 100644 --- a/docs/package.json +++ b/docs/package.json @@ -108,7 +108,7 @@ "@types/d3-scale-chromatic": "^3.0.3", "@types/doctrine": "^0.0.9", "@types/gtag.js": "^0.0.20", - "@types/lodash": "^4.17.7", + "@types/lodash": "^4.17.9", "@types/luxon": "^3.4.2", "@types/moment-hijri": "^2.1.4", "@types/moment-jalaali": "^0.7.9", diff --git a/package.json b/package.json index f13b767302ae..b6366c42c418 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "@types/chai-dom": "^1.11.3", "@types/fs-extra": "^11.0.4", "@types/karma": "^6.3.8", - "@types/lodash": "^4.17.7", + "@types/lodash": "^4.17.9", "@types/mocha": "^10.0.8", "@types/node": "^20.16.5", "@types/react": "^18.3.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2aef06645aed..e0c1d3344fcd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,8 +135,8 @@ importers: specifier: ^6.3.8 version: 6.3.8 '@types/lodash': - specifier: ^4.17.7 - version: 4.17.7 + specifier: ^4.17.9 + version: 4.17.9 '@types/mocha': specifier: ^10.0.8 version: 10.0.8 @@ -667,8 +667,8 @@ importers: specifier: ^0.0.20 version: 0.0.20 '@types/lodash': - specifier: ^4.17.7 - version: 4.17.7 + specifier: ^4.17.9 + version: 4.17.9 '@types/luxon': specifier: ^3.4.2 version: 3.4.2 @@ -4171,8 +4171,8 @@ packages: '@types/karma@6.3.8': resolution: {integrity: sha512-+QGoOPhb1f6Oli8pG+hxdnGDzVhIrpsHaFSJ4UJg15Xj+QBtluKELkJY+L4Li532HmT3l5K5o1FoUZHRQeOOaQ==} - '@types/lodash@4.17.7': - resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + '@types/lodash@4.17.9': + resolution: {integrity: sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==} '@types/luxon@3.4.2': resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} @@ -13204,7 +13204,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@types/lodash@4.17.7': {} + '@types/lodash@4.17.9': {} '@types/luxon@3.4.2': {} From 55119e0dd2a4c614d450e9bc89401e8ce8bc6a53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:22:10 +0200 Subject: [PATCH 16/48] Bump @types/chai to ^4.3.20 (#14759) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- test/package.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index b6366c42c418..259969974fcd 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "@playwright/test": "^1.44.1", "@types/babel__core": "^7.20.5", "@types/babel__traverse": "^7.20.6", - "@types/chai": "^4.3.19", + "@types/chai": "^4.3.20", "@types/chai-dom": "^1.11.3", "@types/fs-extra": "^11.0.4", "@types/karma": "^6.3.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0c1d3344fcd..30bd97716826 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,8 +123,8 @@ importers: specifier: ^7.20.6 version: 7.20.6 '@types/chai': - specifier: ^4.3.19 - version: 4.3.19 + specifier: ^4.3.20 + version: 4.3.20 '@types/chai-dom': specifier: ^1.11.3 version: 1.11.3 @@ -1565,8 +1565,8 @@ importers: specifier: ^9.7.4 version: 9.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/chai': - specifier: ^4.3.19 - version: 4.3.19 + specifier: ^4.3.20 + version: 4.3.20 '@types/karma': specifier: ^6.3.8 version: 6.3.8 @@ -4063,8 +4063,8 @@ packages: '@types/chai-dom@1.11.3': resolution: {integrity: sha512-EUEZI7uID4ewzxnU7DJXtyvykhQuwe+etJ1wwOiJyQRTH/ifMWKX+ghiXkxCUvNJ6IQDodf0JXhuP6zZcy2qXQ==} - '@types/chai@4.3.19': - resolution: {integrity: sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==} + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} '@types/chance@1.1.6': resolution: {integrity: sha512-V+pm3stv1Mvz8fSKJJod6CglNGVqEQ6OyuqitoDkWywEODM/eJd1eSuIp9xt6DrX8BWZ2eDSIzbw1tPCUTvGbQ==} @@ -13088,9 +13088,9 @@ snapshots: '@types/chai-dom@1.11.3': dependencies: - '@types/chai': 4.3.19 + '@types/chai': 4.3.20 - '@types/chai@4.3.19': {} + '@types/chai@4.3.20': {} '@types/chance@1.1.6': {} diff --git a/test/package.json b/test/package.json index e7e0f912b525..f2a662c82bfc 100644 --- a/test/package.json +++ b/test/package.json @@ -20,7 +20,7 @@ "@mui/x-license": "workspace:*", "@playwright/test": "^1.44.1", "@react-spring/web": "^9.7.4", - "@types/chai": "^4.3.19", + "@types/chai": "^4.3.20", "@types/karma": "^6.3.8", "@types/moment-jalaali": "^0.7.9", "@types/prop-types": "^15.7.13", From 7d901056627c7a57224a074ac0540c38bfd24250 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:35:53 +0200 Subject: [PATCH 17/48] Bump @types/node to ^20.16.10 (#14761) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +- packages/rsc-builder/package.json | 2 +- pnpm-lock.yaml | 110 +++++++++++++++--------------- 3 files changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 259969974fcd..4ba3effa8e2d 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "@types/karma": "^6.3.8", "@types/lodash": "^4.17.9", "@types/mocha": "^10.0.8", - "@types/node": "^20.16.5", + "@types/node": "^20.16.10", "@types/react": "^18.3.4", "@types/react-dom": "^18.3.0", "@types/react-test-renderer": "^18.3.0", @@ -199,7 +199,7 @@ }, "resolutions": { "react-is": "^18.3.1", - "@types/node": "^20.16.5" + "@types/node": "^20.16.10" }, "packageManager": "pnpm@9.11.0", "engines": { diff --git a/packages/rsc-builder/package.json b/packages/rsc-builder/package.json index cc9b3b13ca76..a798dbe5c53b 100644 --- a/packages/rsc-builder/package.json +++ b/packages/rsc-builder/package.json @@ -9,6 +9,6 @@ }, "devDependencies": { "@types/mocha": "^10.0.8", - "@types/node": "^20.16.5" + "@types/node": "^20.16.10" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30bd97716826..22c0c9c82812 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: overrides: react-is: ^18.3.1 - '@types/node': ^20.16.5 + '@types/node': ^20.16.10 patchedDependencies: babel-plugin-replace-imports@1.0.2: @@ -141,8 +141,8 @@ importers: specifier: ^10.0.8 version: 10.0.8 '@types/node': - specifier: ^20.16.5 - version: 20.16.5 + specifier: ^20.16.10 + version: 20.16.10 '@types/react': specifier: ^18.3.4 version: 18.3.4 @@ -725,8 +725,8 @@ importers: specifier: ^10.0.8 version: 10.0.8 '@types/node': - specifier: ^20.16.5 - version: 20.16.5 + specifier: ^20.16.10 + version: 20.16.10 packages/x-charts: dependencies: @@ -1620,7 +1620,7 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: ^3.1.1 - version: 3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0)) + version: 3.1.1(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0)) '@emotion/react': specifier: ^11.13.3 version: 11.13.3(@types/react@18.3.4)(react@18.3.1) @@ -1641,10 +1641,10 @@ importers: version: 14.5.2(@testing-library/dom@10.4.0) '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.3.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) + version: 4.3.1(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0)) '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) + version: 3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0)) '@vitest/ui': specifier: 2.1.1 version: 2.1.1(vitest@2.1.1) @@ -1659,7 +1659,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: 2.1.1 - version: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) + version: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) packages: @@ -4204,8 +4204,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.16.5': - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@20.16.10': + resolution: {integrity: sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -9930,7 +9930,7 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': ^20.16.5 + '@types/node': ^20.16.10 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -9959,7 +9959,7 @@ packages: hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^20.16.5 + '@types/node': ^20.16.10 '@vitest/browser': 2.1.1 '@vitest/ui': 2.1.1 happy-dom: '*' @@ -11352,11 +11352,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0))': + '@codspeed/vitest-plugin@3.1.1(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0))(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0))': dependencies: '@codspeed/core': 3.1.1 - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) + vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) transitivePeerDependencies: - debug @@ -11655,7 +11655,7 @@ snapshots: '@fast-csv/format@4.3.5': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 lodash.escaperegexp: 4.1.2 lodash.isboolean: 3.0.3 lodash.isequal: 4.5.0 @@ -11664,7 +11664,7 @@ snapshots: '@fast-csv/parse@4.3.6': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 lodash.escaperegexp: 4.1.2 lodash.groupby: 4.6.0 lodash.isfunction: 3.0.9 @@ -12903,18 +12903,18 @@ snapshots: '@slack/logger@3.0.0': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@slack/logger@4.0.0': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@slack/oauth@2.6.3': dependencies: '@slack/logger': 3.0.0 '@slack/web-api': 6.12.1 '@types/jsonwebtoken': 8.5.9 - '@types/node': 20.16.5 + '@types/node': 20.16.10 jsonwebtoken: 9.0.2 lodash.isstring: 4.0.1 transitivePeerDependencies: @@ -12924,7 +12924,7 @@ snapshots: dependencies: '@slack/logger': 3.0.0 '@slack/web-api': 6.12.1 - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/ws': 7.4.7 eventemitter3: 5.0.1 finity: 0.5.4 @@ -12941,7 +12941,7 @@ snapshots: '@slack/logger': 3.0.0 '@slack/types': 2.13.0 '@types/is-stream': 1.1.0 - '@types/node': 20.16.5 + '@types/node': 20.16.10 axios: 1.7.5(debug@4.3.6) eventemitter3: 3.1.2 form-data: 2.5.1 @@ -13084,7 +13084,7 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/chai-dom@1.11.3': dependencies: @@ -13096,13 +13096,13 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/cookie@0.4.1': {} '@types/cors@2.8.17': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/d3-array@3.2.1': {} @@ -13147,7 +13147,7 @@ snapshots: '@types/express-serve-static-core@4.17.42': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13164,7 +13164,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/gtag.js@0.0.20': {} @@ -13176,7 +13176,7 @@ snapshots: '@types/is-stream@1.1.0': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/istanbul-lib-coverage@2.0.6': {} @@ -13191,15 +13191,15 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/jsonwebtoken@8.5.9': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/karma@6.3.8': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -13232,7 +13232,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.16.5': + '@types/node@20.16.10': dependencies: undici-types: 6.19.8 @@ -13285,13 +13285,13 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/sinon@17.0.3': dependencies: @@ -13309,7 +13309,7 @@ snapshots: '@types/webpack-bundle-analyzer@4.7.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 tapable: 2.2.1 webpack: 5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0)) transitivePeerDependencies: @@ -13320,7 +13320,7 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@types/yargs-parser@21.0.3': {} @@ -13452,21 +13452,21 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))': + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.5)(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0))': dependencies: '@swc/core': 1.6.13(@swc/helpers@0.5.5) - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.3.1(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))': + '@vitejs/plugin-react@4.3.1(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) transitivePeerDependencies: - supports-color @@ -13477,13 +13477,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0))': + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) '@vitest/pretty-format@2.1.1': dependencies: @@ -13513,7 +13513,7 @@ snapshots: sirv: 2.0.4 tinyglobby: 0.2.6 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) + vitest: 2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0) '@vitest/utils@2.1.1': dependencies: @@ -15082,7 +15082,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.16.5 + '@types/node': 20.16.10 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -16775,7 +16775,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -20056,12 +20056,12 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.1(@types/node@20.16.5)(terser@5.27.0): + vite-node@2.1.1(@types/node@20.16.10)(terser@5.27.0): dependencies: cac: 6.7.14 debug: 4.3.6(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) transitivePeerDependencies: - '@types/node' - less @@ -20072,20 +20072,20 @@ snapshots: - supports-color - terser - vite@5.3.4(@types/node@20.16.5)(terser@5.27.0): + vite@5.3.4(@types/node@20.16.10)(terser@5.27.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.18.1 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 fsevents: 2.3.3 terser: 5.27.0 - vitest@2.1.1(@types/node@20.16.5)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0): + vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)(jsdom@24.1.3)(terser@5.27.0): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.5)(terser@5.27.0)) + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.4(@types/node@20.16.10)(terser@5.27.0)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 @@ -20100,11 +20100,11 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.3.4(@types/node@20.16.5)(terser@5.27.0) - vite-node: 2.1.1(@types/node@20.16.5)(terser@5.27.0) + vite: 5.3.4(@types/node@20.16.10)(terser@5.27.0) + vite-node: 2.1.1(@types/node@20.16.10)(terser@5.27.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.16.10 '@vitest/ui': 2.1.1(vitest@2.1.1) jsdom: 24.1.3 transitivePeerDependencies: From 7d2d9bd33d3ba9b536cf90941526b89504dbfbf8 Mon Sep 17 00:00:00 2001 From: Lucas Hilgert <77863078+lhilgert9@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:58:40 +0200 Subject: [PATCH 18/48] [l10n] Improve German (de-DE) locale (#14755) --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/deDE.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index f790309694f4..8d0f5baa84c8 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -99,7 +99,7 @@ "languageTag": "de-DE", "importName": "deDE", "localeName": "German", - "missingKeysCount": 4, + "missingKeysCount": 0, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/deDE.ts" }, diff --git a/packages/x-data-grid/src/locales/deDE.ts b/packages/x-data-grid/src/locales/deDE.ts index 38787ebf21ae..31a9350cb5e1 100644 --- a/packages/x-data-grid/src/locales/deDE.ts +++ b/packages/x-data-grid/src/locales/deDE.ts @@ -58,9 +58,9 @@ const deDEGrid: Partial = { // Filter operators text filterOperatorContains: 'enthält', - // filterOperatorDoesNotContain: 'does not contain', + filterOperatorDoesNotContain: 'enthält nicht', filterOperatorEquals: 'ist gleich', - // filterOperatorDoesNotEqual: 'does not equal', + filterOperatorDoesNotEqual: 'ist ungleich', filterOperatorStartsWith: 'beginnt mit', filterOperatorEndsWith: 'endet mit', filterOperatorIs: 'ist', @@ -81,9 +81,9 @@ const deDEGrid: Partial = { // Header filter operators text headerFilterOperatorContains: 'Enthält', - // headerFilterOperatorDoesNotContain: 'Does not contain', + headerFilterOperatorDoesNotContain: 'Enthält nicht', headerFilterOperatorEquals: 'Gleich', - // headerFilterOperatorDoesNotEqual: 'Does not equal', + headerFilterOperatorDoesNotEqual: 'Ungleich', headerFilterOperatorStartsWith: 'Beginnt mit', headerFilterOperatorEndsWith: 'Endet mit', headerFilterOperatorIs: 'Ist', From b14a751cbfeade2ce72b120e98048be01b78bc95 Mon Sep 17 00:00:00 2001 From: Phong Chu <58473133+chucamphong@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:58:47 +0700 Subject: [PATCH 19/48] [l10n] Improve Vietnamese (vi-VN) locale (#14769) --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/viVN.ts | 40 +++++++++++----------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index 8d0f5baa84c8..fc5dc6e1ec11 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -275,7 +275,7 @@ "languageTag": "vi-VN", "importName": "viVN", "localeName": "Vietnamese", - "missingKeysCount": 4, + "missingKeysCount": 0, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/viVN.ts" } diff --git a/packages/x-data-grid/src/locales/viVN.ts b/packages/x-data-grid/src/locales/viVN.ts index 389cd79b4acf..a76c4783b593 100644 --- a/packages/x-data-grid/src/locales/viVN.ts +++ b/packages/x-data-grid/src/locales/viVN.ts @@ -57,21 +57,21 @@ const viVNGrid: Partial = { filterPanelInputPlaceholder: 'Lọc giá trị', // Filter operators text - filterOperatorContains: 'Chứa', - // filterOperatorDoesNotContain: 'does not contain', - filterOperatorEquals: 'Bằng', - // filterOperatorDoesNotEqual: 'does not equal', - filterOperatorStartsWith: 'Bắt đầu bằng', - filterOperatorEndsWith: 'Kết thúc bằng', - filterOperatorIs: 'Là', - filterOperatorNot: 'Không là', - filterOperatorAfter: 'Trước', + filterOperatorContains: 'chứa', + filterOperatorDoesNotContain: 'không chứa', + filterOperatorEquals: 'bằng', + filterOperatorDoesNotEqual: 'không bằng', + filterOperatorStartsWith: 'bắt đầu với', + filterOperatorEndsWith: 'kết thúc với', + filterOperatorIs: 'là', + filterOperatorNot: 'không phải là', + filterOperatorAfter: 'sau', filterOperatorOnOrAfter: 'bằng hoặc sau', - filterOperatorBefore: 'Sau', + filterOperatorBefore: 'trước', filterOperatorOnOrBefore: 'bằng hoặc trước', - filterOperatorIsEmpty: 'Rỗng', - filterOperatorIsNotEmpty: 'Khác rỗng', - filterOperatorIsAnyOf: 'Bất kỳ', + filterOperatorIsEmpty: 'rỗng', + filterOperatorIsNotEmpty: 'khác rỗng', + filterOperatorIsAnyOf: 'là một trong', 'filterOperator=': '=', 'filterOperator!=': '!=', 'filterOperator>': '>', @@ -81,20 +81,20 @@ const viVNGrid: Partial = { // Header filter operators text headerFilterOperatorContains: 'Chứa', - // headerFilterOperatorDoesNotContain: 'Does not contain', + headerFilterOperatorDoesNotContain: 'Không chứa', headerFilterOperatorEquals: 'Bằng', - // headerFilterOperatorDoesNotEqual: 'Does not equal', + headerFilterOperatorDoesNotEqual: 'Không bằng', headerFilterOperatorStartsWith: 'Bắt đầu với', headerFilterOperatorEndsWith: 'Kết thúc với', - headerFilterOperatorIs: 'là', - headerFilterOperatorNot: 'Không là', + headerFilterOperatorIs: 'Là', + headerFilterOperatorNot: 'Không phải là', headerFilterOperatorAfter: 'Sau', - headerFilterOperatorOnOrAfter: 'Đang hoặc sau', + headerFilterOperatorOnOrAfter: 'Bằng hoặc sau', headerFilterOperatorBefore: 'Trước', - headerFilterOperatorOnOrBefore: 'Đang hoặc trước', + headerFilterOperatorOnOrBefore: 'Bằng hoặc trước', headerFilterOperatorIsEmpty: 'Rỗng', headerFilterOperatorIsNotEmpty: 'Khác rỗng', - headerFilterOperatorIsAnyOf: 'Bất kỳ', + headerFilterOperatorIsAnyOf: 'Là một trong', 'headerFilterOperator=': 'Bằng', 'headerFilterOperator!=': 'Khác', 'headerFilterOperator>': 'Lớn hơn', From 1ee9075e54341d9f446327ecc0e7e2d00fc512bc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:14:52 +0200 Subject: [PATCH 20/48] Bump eslint to ^8.57.1 (#14698) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 202 ++++++++++++++++++++++++------------------------- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/package.json b/package.json index 4ba3effa8e2d..042c57633602 100644 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "danger": "^12.3.3", "date-fns-jalali-v3": "npm:date-fns-jalali@3.6.0-1", "date-fns-v4": "npm:date-fns@4.1.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^18.0.0", "eslint-config-prettier": "^9.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22c0c9c82812..70893e659054 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,10 +163,10 @@ importers: version: 17.0.33 '@typescript-eslint/eslint-plugin': specifier: ^7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -225,53 +225,53 @@ importers: specifier: npm:date-fns@4.1.0 version: date-fns@4.1.0 eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.37.0(eslint@8.57.0))(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1) eslint-config-airbnb-typescript: specifier: ^18.0.0 - version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0) + version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-import-resolver-webpack: specifier: ^0.13.9 version: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) eslint-plugin-filenames: specifier: ^1.3.2 - version: 1.3.2(eslint@8.57.0) + version: 1.3.2(eslint@8.57.1) eslint-plugin-import: specifier: ^2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) + version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) eslint-plugin-jsdoc: specifier: ^50.3.0 - version: 50.3.0(eslint@8.57.0) + version: 50.3.0(eslint@8.57.1) eslint-plugin-jsx-a11y: specifier: ^6.10.0 - version: 6.10.0(eslint@8.57.0) + version: 6.10.0(eslint@8.57.1) eslint-plugin-material-ui: specifier: workspace:^ version: link:packages/eslint-plugin-material-ui eslint-plugin-mocha: specifier: ^10.5.0 - version: 10.5.0(eslint@8.57.0) + version: 10.5.0(eslint@8.57.1) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) + version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) eslint-plugin-react: specifier: ^7.37.0 - version: 7.37.0(eslint@8.57.0) + version: 7.37.0(eslint@8.57.1) eslint-plugin-react-compiler: specifier: 0.0.0-experimental-9ed098e-20240725 - version: 0.0.0-experimental-9ed098e-20240725(eslint@8.57.0) + version: 0.0.0-experimental-9ed098e-20240725(eslint@8.57.1) eslint-plugin-react-hooks: specifier: ^4.6.2 - version: 4.6.2(eslint@8.57.0) + version: 4.6.2(eslint@8.57.1) eslint-plugin-testing-library: specifier: ^6.3.0 - version: 6.3.0(eslint@8.57.0)(typescript@5.5.4) + version: 6.3.0(eslint@8.57.1)(typescript@5.5.4) fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -707,10 +707,10 @@ importers: version: 8.56.12 '@typescript-eslint/parser': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/utils': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) packages/rsc-builder: dependencies: @@ -2870,8 +2870,8 @@ packages: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@fast-csv/format@4.3.5': @@ -2915,8 +2915,8 @@ packages: resolution: {integrity: sha512-nPgzOiDs/FSFhE+dX2KfkmsmkXM3WfXYP06FoW8cXvHshwxHSI3FbXwe5XJYstDAWXP9YA7AMSvmwnuD4OAl2w==} engines: {node: '>=12.0.0'} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -2924,8 +2924,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead '@hutson/parse-repository-url@3.0.2': @@ -6079,8 +6079,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -11630,9 +11630,9 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.10.0': {} @@ -11651,7 +11651,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} '@fast-csv/format@4.3.5': dependencies: @@ -11714,9 +11714,9 @@ snapshots: - encoding - supports-color - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.6(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -11724,7 +11724,7 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/object-schema@2.0.3': {} '@hutson/parse-repository-url@3.0.2': {} @@ -13328,15 +13328,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.0 + eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -13346,14 +13346,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 8.57.1 optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -13369,12 +13369,12 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 @@ -13414,28 +13414,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - eslint: 8.57.0 + eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - eslint: 8.57.0 + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript @@ -15308,38 +15308,38 @@ snapshots: optionalDependencies: source-map: 0.2.0 - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) object.assign: 4.1.5 object.entries: 1.1.8 semver: 6.3.1 - eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + eslint: 8.57.1 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - eslint-plugin-import - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.37.0(eslint@8.57.0))(eslint@8.57.0): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1): dependencies: - eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0) - eslint-plugin-react: 7.37.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + eslint: 8.57.1 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-react: 7.37.0(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) object.assign: 4.1.5 object.entries: 1.1.8 - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node@0.3.9: dependencies: @@ -15353,7 +15353,7 @@ snapshots: dependencies: debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -15366,26 +15366,26 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.0): + eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-webpack: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) transitivePeerDependencies: - supports-color - eslint-plugin-filenames@1.3.2(eslint@8.57.0): + eslint-plugin-filenames@1.3.2(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.upperfirst: 4.3.1 - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.0): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -15394,9 +15394,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.0) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -15407,20 +15407,20 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.3.0(eslint@8.57.0): + eslint-plugin-jsdoc@50.3.0(eslint@8.57.1): dependencies: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.6(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 8.57.0 + eslint: 8.57.1 espree: 10.1.0 esquery: 1.6.0 parse-imports: 2.1.1 @@ -15430,7 +15430,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 @@ -15441,7 +15441,7 @@ snapshots: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 8.57.1 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -15450,40 +15450,40 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-mocha@10.5.0(eslint@8.57.0): + eslint-plugin-mocha@10.5.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 - eslint-utils: 3.0.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-utils: 3.0.0(eslint@8.57.1) globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-prettier@5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: '@types/eslint': 8.56.12 - eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-react-compiler@0.0.0-experimental-9ed098e-20240725(eslint@8.57.0): + eslint-plugin-react-compiler@0.0.0-experimental-9ed098e-20240725(eslint@8.57.1): dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.6 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.25.2) - eslint: 8.57.0 + eslint: 8.57.1 hermes-parser: 0.20.1 zod: 3.23.8 zod-validation-error: 3.3.0(zod@3.23.8) transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 - eslint-plugin-react@7.37.0(eslint@8.57.0): + eslint-plugin-react@7.37.0(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -15491,7 +15491,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 - eslint: 8.57.0 + eslint: 8.57.1 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -15505,10 +15505,10 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-plugin-testing-library@6.3.0(eslint@8.57.0)(typescript@5.5.4): + eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript @@ -15523,9 +15523,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@8.57.0): + eslint-utils@3.0.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -15534,13 +15534,13 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 From 7a515d847244648135ea9af8e54959a5b7db5b64 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 30 Sep 2024 14:45:09 +0200 Subject: [PATCH 21/48] [core] Fix class name composition order (#14775) --- .../src/components/cell/GridCell.tsx | 2 +- .../columnHeaders/GridBaseColumnHeaders.tsx | 2 +- .../src/components/containers/GridRoot.tsx | 2 +- .../containers/GridToolbarContainer.tsx | 2 +- .../src/components/menu/GridMenu.tsx | 2 +- .../src/components/panel/GridPanel.tsx | 2 +- .../src/components/panel/GridPanelContent.tsx | 2 +- .../src/components/panel/GridPanelFooter.tsx | 2 +- .../src/components/panel/GridPanelHeader.tsx | 2 +- .../src/components/panel/GridPanelWrapper.tsx | 2 +- .../toolbar/GridToolbarQuickFilter.tsx | 2 +- .../DateRangeCalendar/DateRangeCalendar.tsx | 2 +- .../DateRangePickerToolbar.tsx | 2 +- .../DateTimeRangePickerToolbar.tsx | 2 +- .../src/DateTimePicker/DateTimePickerTabs.tsx | 2 +- .../DesktopDateTimePickerLayout.tsx | 2 +- .../PickersCalendarHeader.tsx | 2 +- .../src/PickersLayout/PickersLayout.tsx | 2 +- .../x-date-pickers/src/TimeClock/Clock.tsx | 2 +- .../src/TimeClock/ClockNumber.tsx | 2 +- .../src/TimeClock/ClockPointer.tsx | 2 +- .../components/PickersToolbarButton.tsx | 2 +- .../components/PickersToolbarText.tsx | 2 +- .../src/TreeItem/TreeItemContent.tsx | 20 +++++++++++-------- 24 files changed, 35 insertions(+), 31 deletions(-) diff --git a/packages/x-data-grid/src/components/cell/GridCell.tsx b/packages/x-data-grid/src/components/cell/GridCell.tsx index c742def4102e..f47282bae2e4 100644 --- a/packages/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/x-data-grid/src/components/cell/GridCell.tsx @@ -481,7 +481,7 @@ const GridCell = React.forwardRef(function GridCe return (
(function GridRo return ( diff --git a/packages/x-data-grid/src/components/containers/GridToolbarContainer.tsx b/packages/x-data-grid/src/components/containers/GridToolbarContainer.tsx index e53f8d7809d1..e797f56e7b5d 100644 --- a/packages/x-data-grid/src/components/containers/GridToolbarContainer.tsx +++ b/packages/x-data-grid/src/components/containers/GridToolbarContainer.tsx @@ -47,7 +47,7 @@ const GridToolbarContainer = React.forwardRef diff --git a/packages/x-data-grid/src/components/menu/GridMenu.tsx b/packages/x-data-grid/src/components/menu/GridMenu.tsx index 5c338398ba4d..34440811f93e 100644 --- a/packages/x-data-grid/src/components/menu/GridMenu.tsx +++ b/packages/x-data-grid/src/components/menu/GridMenu.tsx @@ -111,7 +111,7 @@ function GridMenu(props: GridMenuProps) { return ( ((props, ref) & { sx?: S return ( diff --git a/packages/x-data-grid/src/components/panel/GridPanelFooter.tsx b/packages/x-data-grid/src/components/panel/GridPanelFooter.tsx index 7744ad239b7d..358fe2d4cf6c 100644 --- a/packages/x-data-grid/src/components/panel/GridPanelFooter.tsx +++ b/packages/x-data-grid/src/components/panel/GridPanelFooter.tsx @@ -36,7 +36,7 @@ function GridPanelFooter(props: React.HTMLAttributes & { sx?: Sx return ( diff --git a/packages/x-data-grid/src/components/panel/GridPanelHeader.tsx b/packages/x-data-grid/src/components/panel/GridPanelHeader.tsx index 64cf34faf373..39471e04a49e 100644 --- a/packages/x-data-grid/src/components/panel/GridPanelHeader.tsx +++ b/packages/x-data-grid/src/components/panel/GridPanelHeader.tsx @@ -34,7 +34,7 @@ function GridPanelHeader(props: React.HTMLAttributes & { sx?: Sx return ( diff --git a/packages/x-data-grid/src/components/panel/GridPanelWrapper.tsx b/packages/x-data-grid/src/components/panel/GridPanelWrapper.tsx index d1afe7d8f292..6bac76afe9d5 100644 --- a/packages/x-data-grid/src/components/panel/GridPanelWrapper.tsx +++ b/packages/x-data-grid/src/components/panel/GridPanelWrapper.tsx @@ -55,7 +55,7 @@ const GridPanelWrapper = React.forwardRef diff --git a/packages/x-data-grid/src/components/toolbar/GridToolbarQuickFilter.tsx b/packages/x-data-grid/src/components/toolbar/GridToolbarQuickFilter.tsx index 4921f12486ed..a323c08b20eb 100644 --- a/packages/x-data-grid/src/components/toolbar/GridToolbarQuickFilter.tsx +++ b/packages/x-data-grid/src/components/toolbar/GridToolbarQuickFilter.tsx @@ -146,7 +146,7 @@ function GridToolbarQuickFilter(props: GridToolbarQuickFilterProps) { variant="standard" value={searchValue} onChange={handleSearchValueChange} - className={clsx(className, classes.root)} + className={clsx(classes.root, className)} placeholder={apiRef.current.getLocaleText('toolbarQuickFilterPlaceholder')} aria-label={apiRef.current.getLocaleText('toolbarQuickFilterLabel')} type="search" diff --git a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx index d46019e3c753..2dbfe9224065 100644 --- a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx +++ b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx @@ -543,7 +543,7 @@ const DateRangeCalendar = React.forwardRef(function DateRangeCalendar< return ( diff --git a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerToolbar.tsx b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerToolbar.tsx index bd0064bc58e5..ca7361d378d4 100644 --- a/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerToolbar.tsx +++ b/packages/x-date-pickers-pro/src/DateRangePicker/DateRangePickerToolbar.tsx @@ -105,7 +105,7 @@ const DateRangePickerToolbar = React.forwardRef(function DateRangePickerToolbar< {...other} toolbarTitle={translations.dateRangePickerToolbarTitle} isLandscape={false} - className={clsx(className, classes.root)} + className={clsx(classes.root, className)} ownerState={ownerState} ref={ref} > diff --git a/packages/x-date-pickers-pro/src/DateTimeRangePicker/DateTimeRangePickerToolbar.tsx b/packages/x-date-pickers-pro/src/DateTimeRangePicker/DateTimeRangePickerToolbar.tsx index 9a16f3cba069..4247ad3b5b02 100644 --- a/packages/x-date-pickers-pro/src/DateTimeRangePicker/DateTimeRangePickerToolbar.tsx +++ b/packages/x-date-pickers-pro/src/DateTimeRangePicker/DateTimeRangePickerToolbar.tsx @@ -204,7 +204,7 @@ const DateTimeRangePickerToolbar = React.forwardRef(function DateTimeRangePicker return ( {isLandscape ? shortcuts : toolbar} diff --git a/packages/x-date-pickers/src/TimeClock/Clock.tsx b/packages/x-date-pickers/src/TimeClock/Clock.tsx index d7fc0a8b2e60..8b3d64f2f579 100644 --- a/packages/x-date-pickers/src/TimeClock/Clock.tsx +++ b/packages/x-date-pickers/src/TimeClock/Clock.tsx @@ -343,7 +343,7 @@ export function Clock(inProps: ClockProps) }; return ( - + diff --git a/packages/x-date-pickers/src/internals/components/PickersToolbarButton.tsx b/packages/x-date-pickers/src/internals/components/PickersToolbarButton.tsx index e79c5cec6346..d5f20b9cc52a 100644 --- a/packages/x-date-pickers/src/internals/components/PickersToolbarButton.tsx +++ b/packages/x-date-pickers/src/internals/components/PickersToolbarButton.tsx @@ -53,7 +53,7 @@ export const PickersToolbarButton = React.forwardRef(function PickersToolbarButt data-mui-test="toolbar-button" variant="text" ref={ref} - className={clsx(className, classes.root)} + className={clsx(classes.root, className)} {...(width ? { sx: { width } } : {})} {...other} > diff --git a/packages/x-date-pickers/src/internals/components/PickersToolbarText.tsx b/packages/x-date-pickers/src/internals/components/PickersToolbarText.tsx index a3b0c533e77e..969f0ae05f07 100644 --- a/packages/x-date-pickers/src/internals/components/PickersToolbarText.tsx +++ b/packages/x-date-pickers/src/internals/components/PickersToolbarText.tsx @@ -56,7 +56,7 @@ export const PickersToolbarText = React.forwardRef diff --git a/packages/x-tree-view/src/TreeItem/TreeItemContent.tsx b/packages/x-tree-view/src/TreeItem/TreeItemContent.tsx index 247c593f687d..61f3bacc9203 100644 --- a/packages/x-tree-view/src/TreeItem/TreeItemContent.tsx +++ b/packages/x-tree-view/src/TreeItem/TreeItemContent.tsx @@ -147,14 +147,18 @@ const TreeItemContent = React.forwardRef(function TreeItemContent( /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions -- Key event is handled by the TreeView */
Date: Mon, 30 Sep 2024 14:50:43 +0200 Subject: [PATCH 22/48] [l10n] Improve Czech (cs-CZ) locale (#14732) --- docs/data/date-pickers/localization/data.json | 2 +- packages/x-date-pickers/src/locales/csCZ.ts | 30 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/data/date-pickers/localization/data.json b/docs/data/date-pickers/localization/data.json index c459e3de2f0d..bb5d1353acca 100644 --- a/docs/data/date-pickers/localization/data.json +++ b/docs/data/date-pickers/localization/data.json @@ -43,7 +43,7 @@ "languageTag": "cs-CZ", "importName": "csCZ", "localeName": "Czech", - "missingKeysCount": 15, + "missingKeysCount": 0, "totalKeysCount": 50, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/csCZ.ts" }, diff --git a/packages/x-date-pickers/src/locales/csCZ.ts b/packages/x-date-pickers/src/locales/csCZ.ts index 06205145964b..a419db112f53 100644 --- a/packages/x-date-pickers/src/locales/csCZ.ts +++ b/packages/x-date-pickers/src/locales/csCZ.ts @@ -26,10 +26,10 @@ const csCZPickers: Partial> = { // DateRange labels start: 'Začátek', end: 'Konec', - // startDate: 'Start date', - // startTime: 'Start time', - // endDate: 'End date', - // endTime: 'End time', + startDate: 'Datum začátku', + startTime: 'Čas začátku', + endDate: 'Datum konce', + endTime: 'Čas konce', // Action bar cancelButtonLabel: 'Zrušit', @@ -68,7 +68,7 @@ const csCZPickers: Partial> = { formattedTime || (value !== null && utils.isValid(value)) ? `Vyberte čas, vybraný čas je ${formattedTime ?? utils.format(value, 'fullTime')}` : 'Vyberte čas', - // fieldClearLabel: 'Clear', + fieldClearLabel: 'Vymazat', // Table labels timeTableLabel: 'vyberte čas', @@ -78,24 +78,24 @@ const csCZPickers: Partial> = { fieldYearPlaceholder: (params) => 'Y'.repeat(params.digitAmount), fieldMonthPlaceholder: (params) => (params.contentType === 'letter' ? 'MMMM' : 'MM'), fieldDayPlaceholder: () => 'DD', - // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE', + fieldWeekDayPlaceholder: (params) => (params.contentType === 'letter' ? 'EEEE' : 'EE'), fieldHoursPlaceholder: () => 'hh', fieldMinutesPlaceholder: () => 'mm', fieldSecondsPlaceholder: () => 'ss', fieldMeridiemPlaceholder: () => 'aa', // View names - // year: 'Year', - // month: 'Month', - // day: 'Day', - // weekDay: 'Week day', - // hours: 'Hours', - // minutes: 'Minutes', - // seconds: 'Seconds', - // meridiem: 'Meridiem', + year: 'Rok', + month: 'Měsíc', + day: 'Den', + weekDay: 'Pracovní den', + hours: 'Hodiny', + minutes: 'Minuty', + seconds: 'Sekundy', + meridiem: 'Odpoledne', // Common - // empty: 'Empty', + empty: 'Prázdný', }; export const csCZ = getPickersLocalization(csCZPickers); From f100d151c45f8e2fedd3a647c24a2138350b05a6 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 30 Sep 2024 15:13:21 +0200 Subject: [PATCH 23/48] [docs] Fix what's new link to use absolute URL (#14543) --- docs/data/pages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/data/pages.ts b/docs/data/pages.ts index 8761f4cb80c3..0a2c15787190 100644 --- a/docs/data/pages.ts +++ b/docs/data/pages.ts @@ -6,7 +6,7 @@ import treeViewComponentApi from './tree-view-component-api-pages'; const pages: MuiPage[] = [ { - pathname: '/x/whats-new', + pathname: 'https://mui.com/x/whats-new/', title: "What's new in MUI X", }, { From 0f0a7ec0ea4ffcd09e1290919ae3a1b714d74746 Mon Sep 17 00:00:00 2001 From: sai chand <60743144+sai6855@users.noreply.github.com> Date: Mon, 30 Sep 2024 19:36:51 +0530 Subject: [PATCH 24/48] [data grid] Fix column definition undefined value (#14456) --- .../src/tests/filtering.DataGridPro.test.tsx | 20 +++++++++++++++++++ .../features/columns/gridColumnsUtils.ts | 7 ++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/x-data-grid-pro/src/tests/filtering.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/filtering.DataGridPro.test.tsx index 3f9e9f9a36f6..0f52a5973d60 100644 --- a/packages/x-data-grid-pro/src/tests/filtering.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/filtering.DataGridPro.test.tsx @@ -1059,6 +1059,26 @@ describe(' - Filter', () => { expect(getColumnHeaderCell(0, 1).textContent).to.equal('Custom Input'); }); + it('should not cause unexpected behavior when props are explictly set to undefined', () => { + expect(() => { + render( + [action], + }, + ]} + headerFilters + />, + ); + }).not.toErrorDev(); + }); + // See https://github.com/mui/mui-x/issues/13217 it('should not throw when custom filter operator is used with an initilaized value', () => { expect(() => { diff --git a/packages/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts b/packages/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts index cd3c0d8d42ce..60a5566ada00 100644 --- a/packages/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts +++ b/packages/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts @@ -1,4 +1,5 @@ import * as React from 'react'; +import resolveProps from '@mui/utils/resolveProps'; import { GridColumnLookup, GridColumnsState, @@ -379,11 +380,7 @@ export const createColumnsState = ({ } }); - columnsState.lookup[field] = { - ...existingState, - ...newColumn, - hasBeenResized, - }; + columnsState.lookup[field] = resolveProps(existingState, { ...newColumn, hasBeenResized }); }); if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) { From 51d0b3ad9cc1cb4840c86e1969401d3368131d75 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 30 Sep 2024 18:27:40 +0200 Subject: [PATCH 25/48] [core] Replace minWidth, maxWidth with width (#14776) --- packages/x-data-grid/src/components/cell/GridCell.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x-data-grid/src/components/cell/GridCell.tsx b/packages/x-data-grid/src/components/cell/GridCell.tsx index f47282bae2e4..8dabe559a1c7 100644 --- a/packages/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/x-data-grid/src/components/cell/GridCell.tsx @@ -393,7 +393,7 @@ const GridCell = React.forwardRef(function GridCe
); } From 215adb185b18a1dd802356f6124283dd59812dfa Mon Sep 17 00:00:00 2001 From: Armin Mehinovic <4390250+arminmeh@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:15:59 +0200 Subject: [PATCH 26/48] [DataGridPro] onRowsScrollEnd not firing on very fast scrolling (#14171) Signed-off-by: Armin Mehinovic <4390250+arminmeh@users.noreply.github.com> Co-authored-by: Bilal Shafi --- .../infiniteLoader/useGridInfiniteLoader.tsx | 37 ++++++++++++++----- .../tests/infiniteLoader.DataGridPro.test.tsx | 2 + 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/x-data-grid-pro/src/hooks/features/infiniteLoader/useGridInfiniteLoader.tsx b/packages/x-data-grid-pro/src/hooks/features/infiniteLoader/useGridInfiniteLoader.tsx index 1558c773857a..9e38bde1833f 100644 --- a/packages/x-data-grid-pro/src/hooks/features/infiniteLoader/useGridInfiniteLoader.tsx +++ b/packages/x-data-grid-pro/src/hooks/features/infiniteLoader/useGridInfiniteLoader.tsx @@ -6,7 +6,11 @@ import { useGridApiMethod, gridDimensionsSelector, } from '@mui/x-data-grid'; -import { useGridVisibleRows, GridInfiniteLoaderPrivateApi } from '@mui/x-data-grid/internals'; +import { + useGridVisibleRows, + GridInfiniteLoaderPrivateApi, + useTimeout, +} from '@mui/x-data-grid/internals'; import useEventCallback from '@mui/utils/useEventCallback'; import { styled } from '@mui/system'; import { GridRowScrollEndParams } from '../../../models'; @@ -35,6 +39,7 @@ export const useGridInfiniteLoader = ( const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector); const currentPage = useGridVisibleRows(apiRef, props); const observer = React.useRef(); + const updateTargetTimeout = useTimeout(); const triggerElement = React.useRef(null); const isEnabled = props.rowsLoadingMode === 'client' && !!props.onRowsScrollEnd; @@ -82,6 +87,17 @@ export const useGridInfiniteLoader = ( } }, [virtualScroller, handleLoadMoreRows, isEnabled, marginBottom]); + const updateTarget = (node: HTMLElement | null) => { + if (triggerElement.current !== node) { + observer.current?.disconnect(); + + triggerElement.current = node; + if (triggerElement.current) { + observer.current?.observe(triggerElement.current); + } + } + }; + const triggerRef = React.useCallback( (node: HTMLElement | null) => { // Prevent the infite loading working in combination with lazy loading @@ -89,16 +105,17 @@ export const useGridInfiniteLoader = ( return; } - if (triggerElement.current !== node) { - observer.current?.disconnect(); - - triggerElement.current = node; - if (triggerElement.current) { - observer.current?.observe(triggerElement.current); - } - } + // If the user scrolls through the grid too fast it might happen that the observer is connected to the trigger element + // that will be intersecting the root inside the same render cycle (but not intersecting at the time of the connection). + // This will cause the observer to not call the callback with `isIntersecting` set to `true`. + // https://www.w3.org/TR/intersection-observer/#event-loop + // Delaying the connection to the next cycle helps since the observer will always call the callback the first time it is connected. + // https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/observe + // Related to + // https://github.com/mui/mui-x/issues/14116 + updateTargetTimeout.start(0, () => updateTarget(node)); }, - [isEnabled], + [isEnabled, updateTargetTimeout], ); const getInfiniteLoadingTriggerElement = React.useCallback< diff --git a/packages/x-data-grid-pro/src/tests/infiniteLoader.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/infiniteLoader.DataGridPro.test.tsx index 19c8a82a619b..131bc7fc6668 100644 --- a/packages/x-data-grid-pro/src/tests/infiniteLoader.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/infiniteLoader.DataGridPro.test.tsx @@ -209,6 +209,8 @@ describe(' - Infnite loader', () => { // arbitrary number to make sure that the bottom of the grid window is reached. virtualScroller.scrollTop = 12345; virtualScroller.dispatchEvent(new Event('scroll')); + // wait for the next render cycle + await sleep(0); // observer was attached expect(observe.callCount).to.equal(1); }); From c5fc715ad547ea149e28638560863163d29f286f Mon Sep 17 00:00:00 2001 From: Awais Hassan <55058852+AWAIS97@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:48:25 +0500 Subject: [PATCH 27/48] [docs] Fix typo in usage of Moment guide for UTC and timezones (#14780) --- docs/data/date-pickers/timezone/timezone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/data/date-pickers/timezone/timezone.md b/docs/data/date-pickers/timezone/timezone.md index 5e1eb1fe02f7..74cd2b5e1f61 100644 --- a/docs/data/date-pickers/timezone/timezone.md +++ b/docs/data/date-pickers/timezone/timezone.md @@ -272,7 +272,7 @@ Please check out the documentation of the [UTC and timezones on Luxon](https://m :::info **How to create a UTC date with Moment?** -To create a UTC date, use the `dayjs.utc` method +To create a UTC date, use the `moment.utc` method ```tsx const date = moment.utc('2022-04-17T15:30'); From cd363b4c44a832b9dab0d1a0ea7cc6900ba3e762 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:09:32 +0300 Subject: [PATCH 28/48] Bump lru-cache to ^11.0.1 (#14437) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/x-data-grid-generator/package.json | 2 +- pnpm-lock.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/x-data-grid-generator/package.json b/packages/x-data-grid-generator/package.json index 1bc8d0653a30..e18f7b52fa39 100644 --- a/packages/x-data-grid-generator/package.json +++ b/packages/x-data-grid-generator/package.json @@ -37,7 +37,7 @@ "@mui/x-data-grid-premium": "workspace:*", "chance": "^1.1.12", "clsx": "^2.1.1", - "lru-cache": "^10.4.3" + "lru-cache": "^11.0.1" }, "devDependencies": { "@mui/icons-material": "^5.16.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70893e659054..d75c3ab2642d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1055,8 +1055,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 lru-cache: - specifier: ^10.4.3 - version: 10.4.3 + specifier: ^11.0.1 + version: 11.0.1 react: specifier: ^17.0.0 || ^18.0.0 version: 18.3.1 From 8edc40a9b2a12a08089522f4c255fbe5a278c66c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:00:03 +0200 Subject: [PATCH 29/48] Bump typescript to ^5.6.2 (#14571) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jose Quintas --- .../api/buildInterfacesDocumentation.ts | 8 +- package.json | 2 +- pnpm-lock.yaml | 134 +++++++++--------- .../DatePicker/DesktopDatePickerForm.tsx | 6 +- .../DatePicker/DesktopDatePickerFormV7.tsx | 6 +- 5 files changed, 83 insertions(+), 73 deletions(-) diff --git a/docs/scripts/api/buildInterfacesDocumentation.ts b/docs/scripts/api/buildInterfacesDocumentation.ts index 4dbd278ff2f3..c93fc57571d8 100644 --- a/docs/scripts/api/buildInterfacesDocumentation.ts +++ b/docs/scripts/api/buildInterfacesDocumentation.ts @@ -168,7 +168,13 @@ function extractDemos(tagInfo: ts.JSDocTagInfo): { demos?: string } { } const demos = tagInfo.text .map(({ text }) => text.matchAll(/\[(.*)\]\((.*)\)/g).next().value) - .map(([, text, url]) => `
  • ${text}
  • `); + .map((match) => { + if (match) { + const [, text, url] = match; + return `
  • ${text}
  • `; + } + return ''; + }); if (demos.length === 0) { return {}; diff --git a/package.json b/package.json index 042c57633602..0becd99e7ca6 100644 --- a/package.json +++ b/package.json @@ -189,7 +189,7 @@ "string-replace-loader": "^3.1.0", "terser-webpack-plugin": "^5.3.10", "tsx": "^4.19.1", - "typescript": "^5.5.4", + "typescript": "^5.6.2", "unist-util-visit": "^5.0.0", "util": "^0.12.5", "webpack": "^5.95.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d75c3ab2642d..55e1aed3f78b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,10 +163,10 @@ importers: version: 17.0.33 '@typescript-eslint/eslint-plugin': specifier: ^7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -229,10 +229,10 @@ importers: version: 8.57.1 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1) + version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1) eslint-config-airbnb-typescript: specifier: ^18.0.0 - version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) + version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) @@ -244,7 +244,7 @@ importers: version: 1.3.2(eslint@8.57.1) eslint-plugin-import: specifier: ^2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) + version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) eslint-plugin-jsdoc: specifier: ^50.3.0 version: 50.3.0(eslint@8.57.1) @@ -271,7 +271,7 @@ importers: version: 4.6.2(eslint@8.57.1) eslint-plugin-testing-library: specifier: ^6.3.0 - version: 6.3.0(eslint@8.57.1)(typescript@5.5.4) + version: 6.3.0(eslint@8.57.1)(typescript@5.6.2) fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -381,8 +381,8 @@ importers: specifier: ^4.19.1 version: 4.19.1 typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 @@ -707,10 +707,10 @@ importers: version: 8.56.12 '@typescript-eslint/parser': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/utils': specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) + version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) packages/rsc-builder: dependencies: @@ -9743,8 +9743,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true @@ -11850,7 +11850,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.5.0 - '@lerna/create@8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13)(typescript@5.5.4)': + '@lerna/create@8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13)(typescript@5.6.2)': dependencies: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 @@ -11868,7 +11868,7 @@ snapshots: console-control-strings: 1.1.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 8.3.6(typescript@5.5.4) + cosmiconfig: 8.3.6(typescript@5.6.2) dedent: 1.5.3(babel-plugin-macros@3.1.0) execa: 5.0.0 fs-extra: 11.2.0 @@ -11984,7 +11984,7 @@ snapshots: '@mui/internal-docs-utils@1.0.13': dependencies: rimraf: 6.0.1 - typescript: 5.5.4 + typescript: 5.6.2 '@mui/internal-markdown@1.0.14': dependencies: @@ -12003,7 +12003,7 @@ snapshots: '@mui/internal-docs-utils': 1.0.13 doctrine: 3.0.0 lodash: 4.17.21 - typescript: 5.5.4 + typescript: 5.6.2 uuid: 9.0.1 transitivePeerDependencies: - supports-color @@ -13328,34 +13328,34 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.6(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -13369,15 +13369,15 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) debug: 4.3.6(supports-color@8.1.1) eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -13385,7 +13385,7 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -13393,13 +13393,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.4) + tsutils: 3.21.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -13408,20 +13408,20 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.4 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -13429,12 +13429,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -14637,14 +14637,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.5.4): + cosmiconfig@8.3.6(typescript@5.6.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 cp-file@10.0.0: dependencies: @@ -15308,29 +15308,29 @@ snapshots: optionalDependencies: source-map: 0.2.0 - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.1 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) object.assign: 4.1.5 object.entries: 1.1.8 semver: 6.3.1 - eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb-typescript@18.0.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - eslint-plugin-import - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.0(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.37.0(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) @@ -15353,7 +15353,7 @@ snapshots: dependencies: debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1) find-root: 1.1.0 hasown: 2.0.2 interpret: 1.4.0 @@ -15366,11 +15366,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1): + eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-webpack: 0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))) @@ -15385,7 +15385,7 @@ snapshots: lodash.snakecase: 4.1.1 lodash.upperfirst: 4.3.1 - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.9)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -15396,7 +15396,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.9(eslint-plugin-import@2.30.0)(webpack@5.95.0(@swc/core@1.6.13(@swc/helpers@0.5.5))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.95.0))))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -15407,7 +15407,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -15505,9 +15505,9 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): + eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -17084,7 +17084,7 @@ snapshots: lerna@8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13): dependencies: - '@lerna/create': 8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13)(typescript@5.5.4) + '@lerna/create': 8.1.8(@swc/core@1.6.13(@swc/helpers@0.5.5))(babel-plugin-macros@3.1.0)(encoding@0.1.13)(typescript@5.6.2) '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 @@ -17102,7 +17102,7 @@ snapshots: conventional-changelog-angular: 7.0.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 8.3.6(typescript@5.5.4) + cosmiconfig: 8.3.6(typescript@5.6.2) dedent: 1.5.3(babel-plugin-macros@3.1.0) envinfo: 7.13.0 execa: 5.0.0 @@ -17155,7 +17155,7 @@ snapshots: strong-log-transformer: 2.1.0 tar: 6.2.1 temp-dir: 1.0.0 - typescript: 5.5.4 + typescript: 5.6.2 upath: 2.0.1 uuid: 10.0.0 validate-npm-package-license: 3.0.4 @@ -19764,9 +19764,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 ts-interface-checker@0.1.13: {} @@ -19789,10 +19789,10 @@ snapshots: tsscmp@1.0.6: {} - tsutils@3.21.0(typescript@5.5.4): + tsutils@3.21.0(typescript@5.6.2): dependencies: tslib: 1.14.1 - typescript: 5.5.4 + typescript: 5.6.2 tsx@4.19.1: dependencies: @@ -19880,7 +19880,7 @@ snapshots: typedarray@0.0.6: {} - typescript@5.5.4: {} + typescript@5.6.2: {} ua-parser-js@0.7.37: {} diff --git a/test/e2e/fixtures/DatePicker/DesktopDatePickerForm.tsx b/test/e2e/fixtures/DatePicker/DesktopDatePickerForm.tsx index e9ff9435433e..37d3bac6f1b4 100644 --- a/test/e2e/fixtures/DatePicker/DesktopDatePickerForm.tsx +++ b/test/e2e/fixtures/DatePicker/DesktopDatePickerForm.tsx @@ -5,10 +5,12 @@ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; export default function DesktopDatePickerForm() { - const [submittedDate, setSubmittedDate] = React.useState(null); + const [submittedDate, setSubmittedDate] = React.useState(undefined); const submitHandler: React.FormEventHandler = (event) => { event.preventDefault(); - setSubmittedDate(new FormData(event.target as HTMLFormElement).values().next().value); + setSubmittedDate( + new FormData(event.target as HTMLFormElement).values().next().value?.toString(), + ); }; return (
    diff --git a/test/e2e/fixtures/DatePicker/DesktopDatePickerFormV7.tsx b/test/e2e/fixtures/DatePicker/DesktopDatePickerFormV7.tsx index 6cc1c44fd5a9..83cbc0032ad8 100644 --- a/test/e2e/fixtures/DatePicker/DesktopDatePickerFormV7.tsx +++ b/test/e2e/fixtures/DatePicker/DesktopDatePickerFormV7.tsx @@ -5,10 +5,12 @@ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; export default function DesktopDatePickerFormV7() { - const [submittedDate, setSubmittedDate] = React.useState(null); + const [submittedDate, setSubmittedDate] = React.useState(undefined); const submitHandler: React.FormEventHandler = (event) => { event.preventDefault(); - setSubmittedDate(new FormData(event.target as HTMLFormElement).values().next().value); + setSubmittedDate( + new FormData(event.target as HTMLFormElement).values().next().value?.toString(), + ); }; return ( From 24c0442f1e3b33198df0b757d4dccc66be5e6526 Mon Sep 17 00:00:00 2001 From: Rajat Date: Tue, 1 Oct 2024 18:18:21 +0530 Subject: [PATCH 30/48] [data-grid]: use `event.type` for detecting IME key press (#14146) --- .../tests/cellEditing.DataGridPro.test.tsx | 25 +++++++++++++++++-- .../src/tests/rowEditing.DataGridPro.test.tsx | 23 +++++++++++++++-- .../features/editing/useGridCellEditing.ts | 3 +-- .../features/editing/useGridRowEditing.ts | 3 +-- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx index 61eb25906561..9564c63bc621 100644 --- a/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx @@ -958,7 +958,13 @@ describe(' - Cell editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'あ' } }); - fireEvent.keyDown(cell, { key: 'Enter', keyCode: 229 }); + fireEvent.keyDown(cell, { + type: 'compositionstart', + isComposing: true, + charCode: 'あ'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(cell, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); @@ -974,7 +980,22 @@ describe(' - Cell editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'ありがとう' } }); - fireEvent.keyDown(cell, { key: 'Enter', keyCode: 229 }); + + fireEvent.keyDown(cell, { + type: 'compositionstart', + isComposing: true, + charCode: 'あ'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); + fireEvent.keyDown(cell, { + type: 'compositionupdate', + isComposing: true, + charCode: 'う'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); + expect(listener.callCount).to.equal(0); fireEvent.keyDown(cell, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); diff --git a/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx index d469b0bb87a2..716d799de53b 100644 --- a/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx @@ -931,7 +931,13 @@ describe(' - Row editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'あ' } }); - fireEvent.keyDown(input, { key: 'Enter', keyCode: 229 }); + fireEvent.keyDown(input, { + type: 'compositionstart', + isComposing: true, + charCode: 'あ'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(input, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); @@ -947,7 +953,20 @@ describe(' - Row editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'ありがとう' } }); - fireEvent.keyDown(input, { key: 'Enter', keyCode: 229 }); + fireEvent.keyDown(input, { + type: 'compositionstart', + isComposing: true, + charCode: 'あ'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); + fireEvent.keyDown(input, { + type: 'compositionupdate', + isComposing: true, + charCode: 'う'.charCodeAt(0), + bubbles: true, + cancelable: true, + }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(input, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); diff --git a/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts b/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts index bb2224185e8e..e2be976204c9 100644 --- a/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts +++ b/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts @@ -127,8 +127,7 @@ export const useGridCellEditing = ( (params, event) => { if (params.cellMode === GridCellModes.Edit) { // Wait until IME is settled for Asian languages like Japanese and Chinese - // TODO: `event.which` is deprecated but this is a temporary workaround - if (event.which === 229) { + if (event.type === 'compositionstart' || event.type === 'compositionupdate') { return; } diff --git a/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts b/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts index 3953006c4b33..d010bc314158 100644 --- a/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts +++ b/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts @@ -186,8 +186,7 @@ export const useGridRowEditing = ( (params, event) => { if (params.cellMode === GridRowModes.Edit) { // Wait until IME is settled for Asian languages like Japanese and Chinese - // TODO: `event.which` is deprecated but this is a temporary workaround - if (event.which === 229) { + if (event.type === 'compositionstart' || event.type === 'compositionupdate') { return; } From 72fab7906aa3d431b49683b0ebc358fbe96d4886 Mon Sep 17 00:00:00 2001 From: Flavien DELANGLE Date: Tue, 1 Oct 2024 15:05:37 +0200 Subject: [PATCH 31/48] [pickers] Improve `PickerValidDate` type (#14771) Signed-off-by: Flavien DELANGLE --- .../base-concepts/base-concepts.md | 19 +++++++++++++++--- .../picker-valid-date-configured.png | Bin 0 -> 18741 bytes .../picker-valid-date-not-configured.png | Bin 0 -> 18725 bytes packages/x-date-pickers/src/models/pickers.ts | 4 +++- 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 docs/public/static/x/date-pickers/picker-valid-date-configured.png create mode 100644 docs/public/static/x/date-pickers/picker-valid-date-not-configured.png diff --git a/docs/data/date-pickers/base-concepts/base-concepts.md b/docs/data/date-pickers/base-concepts/base-concepts.md index 82590c92d376..bdae427685bc 100644 --- a/docs/data/date-pickers/base-concepts/base-concepts.md +++ b/docs/data/date-pickers/base-concepts/base-concepts.md @@ -185,15 +185,28 @@ To correctly type all the props that are date-related, the adapters override a g to allow the usage of their own date format. This allows TypeScript to throw an error if you try to pass `value={new Date()}` to a component using `AdapterDayjs` for instance. -If you run into TypeScript errors such as `DesktopDatePickerProps error Type 'Date' does not satisfy the constraint 'never'`, -it is probably because you are not importing the adapter in the same TypeScript project as the rest of your codebase. -You can fix it by manually importing the adapter in some file of your project as follows: +If you are not sure your adapter is set up correctly to infer the type of date-related props, you can import the `PickerValidDate` type and check its current value. + +If its equal to the format used by your date library, then you don't have to do anything: + +PickerValidDate correctly configured + +If it's equal to `any`, you can fix it by manually importing the adapter in some file of your project as show below: + +PickerValidDate not correctly configured ```ts // Replace `AdapterDayjs` with the adapter you are using. import type {} from '@mui/x-date-pickers/AdapterDayjs'; ``` +:::info +Before version 7.19.0, TypeScript was throwing an error such as `DesktopDatePickerProps error Type 'Date' does not satisfy the constraint 'never'` +when you were not importing the adapter in the same TypeScript project as the rest of your codebase. + +The fix described above should also solve the problem. +::: + ## Testing caveats ### Responsive components diff --git a/docs/public/static/x/date-pickers/picker-valid-date-configured.png b/docs/public/static/x/date-pickers/picker-valid-date-configured.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2a0f637e9ba8564ccce381ceb575a1c2474c3a GIT binary patch literal 18741 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 literal 0 HcmV?d00001 diff --git a/packages/x-date-pickers/src/models/pickers.ts b/packages/x-date-pickers/src/models/pickers.ts index db341d045e20..d84c87dbbd59 100644 --- a/packages/x-date-pickers/src/models/pickers.ts +++ b/packages/x-date-pickers/src/models/pickers.ts @@ -11,4 +11,6 @@ export interface PickerChangeHandlerContext { export interface PickerValidDateLookup {} -export type PickerValidDate = PickerValidDateLookup[keyof PickerValidDateLookup]; +export type PickerValidDate = keyof PickerValidDateLookup extends number + ? any + : PickerValidDateLookup[keyof PickerValidDateLookup]; From 591a4dac94e65015319f87d45368c87653c75118 Mon Sep 17 00:00:00 2001 From: Jose C Quintas Jr Date: Tue, 1 Oct 2024 17:21:22 +0200 Subject: [PATCH 32/48] [charts] Type improvements & `warnOnce` usage (#14792) Signed-off-by: Jose C Quintas Jr Co-authored-by: Olivier Tassinari Co-authored-by: Lukas Tyla --- docs/pages/x/api/charts/line-series-type.json | 2 +- .../api-docs/charts/line-series-type.json | 4 +++- packages/x-charts/src/BarChart/formatter.ts | 16 +++++++--------- packages/x-charts/src/LineChart/formatter.ts | 16 ++++++++-------- .../src/SparkLineChart/SparkLineChart.tsx | 4 ++-- packages/x-charts/src/hooks/useSeries.ts | 8 ++++---- packages/x-charts/src/internals/geometry.ts | 19 ++++++++----------- .../x-charts/src/models/seriesType/line.ts | 5 +++++ 8 files changed, 38 insertions(+), 36 deletions(-) diff --git a/docs/pages/x/api/charts/line-series-type.json b/docs/pages/x/api/charts/line-series-type.json index 61608bfce9c6..147f90302c1d 100644 --- a/docs/pages/x/api/charts/line-series-type.json +++ b/docs/pages/x/api/charts/line-series-type.json @@ -7,7 +7,7 @@ "baseline": { "type": { "description": "number | 'min' | 'max'" }, "default": "0" }, "color": { "type": { "description": "string" } }, "connectNulls": { "type": { "description": "boolean" }, "default": "false" }, - "curve": { "type": { "description": "CurveType" } }, + "curve": { "type": { "description": "CurveType" }, "default": "'monotoneX'" }, "data": { "type": { "description": "(number | null)[]" } }, "dataKey": { "type": { "description": "string" } }, "disableHighlight": { "type": { "description": "boolean" }, "default": "false" }, diff --git a/docs/translations/api-docs/charts/line-series-type.json b/docs/translations/api-docs/charts/line-series-type.json index 824efbcd4acb..c7c871a6b8e8 100644 --- a/docs/translations/api-docs/charts/line-series-type.json +++ b/docs/translations/api-docs/charts/line-series-type.json @@ -10,7 +10,9 @@ "connectNulls": { "description": "If true, line and area connect points separated by null values." }, - "curve": { "description": "" }, + "curve": { + "description": "The type of curve to use for the line.
    Read more about curves at line interpolation." + }, "data": { "description": "Data associated to the line." }, "dataKey": { "description": "The key used to retrieve data from the dataset." }, "disableHighlight": { diff --git a/packages/x-charts/src/BarChart/formatter.ts b/packages/x-charts/src/BarChart/formatter.ts index 35d2cb3ae7e3..d2c5639f7973 100644 --- a/packages/x-charts/src/BarChart/formatter.ts +++ b/packages/x-charts/src/BarChart/formatter.ts @@ -1,4 +1,5 @@ import { stack as d3Stack } from '@mui/x-charts-vendor/d3-shape'; +import { warnOnce } from '@mui/x-internals/warning'; import { getStackingGroups } from '../internals/stackSeries'; import { ChartSeries, DatasetElementType, DatasetType } from '../models/seriesType/config'; import { defaultizeValueFormatter } from '../internals/defaultizeValueFormatter'; @@ -6,8 +7,6 @@ import { DefaultizedProps } from '../models/helpers'; import { SeriesId } from '../models/seriesType/common'; import { SeriesFormatter } from '../context/PluginProvider/SeriesFormatter.types'; -let warnOnce = false; - type BarDataset = DatasetType; const formatter: SeriesFormatter<'bar'> = (params, dataset) => { @@ -63,14 +62,13 @@ const formatter: SeriesFormatter<'bar'> = (params, dataset) => { ? dataset!.map((data) => { const value = data[dataKey]; if (typeof value !== 'number') { - if (process.env.NODE_ENV !== 'production' && !warnOnce && value !== null) { - warnOnce = true; - console.error( - [ - `MUI X charts: your dataset key "${dataKey}" is used for plotting bars, but contains nonnumerical elements.`, + if (process.env.NODE_ENV !== 'production') { + if (value !== null) { + warnOnce([ + `MUI X: your dataset key "${dataKey}" is used for plotting bars, but contains nonnumerical elements.`, 'Bar plots only support numbers and null values.', - ].join('\n'), - ); + ]); + } } return 0; } diff --git a/packages/x-charts/src/LineChart/formatter.ts b/packages/x-charts/src/LineChart/formatter.ts index bf5261999f63..ec0ec804abb5 100644 --- a/packages/x-charts/src/LineChart/formatter.ts +++ b/packages/x-charts/src/LineChart/formatter.ts @@ -1,4 +1,5 @@ import { stack as d3Stack } from '@mui/x-charts-vendor/d3-shape'; +import { warnOnce } from '@mui/x-internals/warning'; import { getStackingGroups } from '../internals/stackSeries'; import { ChartSeries, DatasetElementType, DatasetType } from '../models/seriesType/config'; import { defaultizeValueFormatter } from '../internals/defaultizeValueFormatter'; @@ -6,8 +7,6 @@ import { DefaultizedProps } from '../models/helpers'; import { SeriesId } from '../models/seriesType/common'; import { SeriesFormatter } from '../context/PluginProvider/SeriesFormatter.types'; -let warnedOnce = false; - // For now it's a copy past of bar charts formatter, but maybe will diverge later const formatter: SeriesFormatter<'line'> = (params, dataset) => { const { seriesOrder, series } = params; @@ -60,12 +59,13 @@ const formatter: SeriesFormatter<'line'> = (params, dataset) => { ? dataset!.map((data) => { const value = data[dataKey]; if (typeof value !== 'number') { - if (process.env.NODE_ENV !== 'production' && !warnedOnce && value !== null) { - warnedOnce = true; - console.error([ - `MUI X: Your dataset key "${dataKey}" is used for plotting line, but contains nonnumerical elements.`, - 'Line plots only support numbers and null values.', - ]); + if (process.env.NODE_ENV !== 'production') { + if (value !== null) { + warnOnce([ + `MUI X: Your dataset key "${dataKey}" is used for plotting line, but contains nonnumerical elements.`, + 'Line plots only support numbers and null values.', + ]); + } } return null; } diff --git a/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx b/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx index 455b8eda8526..6e600868512e 100644 --- a/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx +++ b/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx @@ -17,7 +17,7 @@ import { import { ChartsAxisHighlight, ChartsAxisHighlightProps } from '../ChartsAxisHighlight'; import { AxisConfig, ChartsXAxisProps, ChartsYAxisProps, ScaleName } from '../models/axis'; import { MakeOptional } from '../models/helpers'; -import { LineSeriesType } from '../models/seriesType/line'; +import { LineSeriesType, BarSeriesType } from '../models/seriesType'; import { CardinalDirections } from '../models/layout'; import { AreaPlotSlots, AreaPlotSlotProps } from '../LineChart/AreaPlot'; import { LinePlotSlots, LinePlotSlotProps } from '../LineChart/LinePlot'; @@ -177,7 +177,7 @@ const SparkLineChart = React.forwardRef(function SparkLineChart(props: SparkLine data, valueFormatter, ...(plotType === 'bar' ? {} : { area, curve, disableHighlight: !showHighlight }), - }, + } as LineSeriesType | BarSeriesType, ]} width={width} height={height} diff --git a/packages/x-charts/src/hooks/useSeries.ts b/packages/x-charts/src/hooks/useSeries.ts index 727a94300fcf..4f68bfa6ef1e 100644 --- a/packages/x-charts/src/hooks/useSeries.ts +++ b/packages/x-charts/src/hooks/useSeries.ts @@ -28,7 +28,7 @@ export function useSeries(): FormattedSeries { * The returned object contains: * - series: a mapping from ids to series attributes. * - seriesOrder: the array of series ids. - * @returns { series: Record; seriesOrder: SeriesId[]; } | undefined pieSeries + * @returns {{ series: Record; seriesOrder: SeriesId[]; } | undefined} pieSeries */ export function usePieSeries(): FormattedSeries['pie'] { const series = useSeries(); @@ -41,7 +41,7 @@ export function usePieSeries(): FormattedSeries['pie'] { * The returned object contains: * - series: a mapping from ids to series attributes. * - seriesOrder: the array of series ids. - * @returns { series: Record; seriesOrder: SeriesId[]; } | undefined lineSeries + * @returns {{ series: Record; seriesOrder: SeriesId[]; } | undefined} lineSeries */ export function useLineSeries(): FormattedSeries['line'] { const series = useSeries(); @@ -54,7 +54,7 @@ export function useLineSeries(): FormattedSeries['line'] { * The returned object contains: * - series: a mapping from ids to series attributes. * - seriesOrder: the array of series ids. - * @returns { series: Record; seriesOrder: SeriesId[]; } | undefined barSeries + * @returns {{ series: Record; seriesOrder: SeriesId[]; } | undefined} barSeries */ export function useBarSeries(): FormattedSeries['bar'] { const series = useSeries(); @@ -67,7 +67,7 @@ export function useBarSeries(): FormattedSeries['bar'] { * The returned object contains: * - series: a mapping from ids to series attributes. * - seriesOrder: the array of series ids. - * @returns { series: Record; seriesOrder: SeriesId[]; } | undefined scatterSeries + * @returns {{ series: Record; seriesOrder: SeriesId[]; } | undefined} scatterSeries */ export function useScatterSeries(): FormattedSeries['scatter'] { const series = useSeries(); diff --git a/packages/x-charts/src/internals/geometry.ts b/packages/x-charts/src/internals/geometry.ts index 43fd024cacc3..5bef1a35eec1 100644 --- a/packages/x-charts/src/internals/geometry.ts +++ b/packages/x-charts/src/internals/geometry.ts @@ -1,6 +1,6 @@ -const ANGLE_APPROX = 5; // Angle (in deg) for which we approximate the rectangle as perfectly horizontal/vertical +import { warnOnce } from '@mui/x-internals/warning'; -let warnedOnce = false; +const ANGLE_APPROX = 5; // Angle (in deg) for which we approximate the rectangle as perfectly horizontal/vertical /** * Return the minimal translation along the x-axis to avoid overflow of a rectangle of a given width, height, and rotation. @@ -12,15 +12,12 @@ let warnedOnce = false; */ export function getMinXTranslation(width: number, height: number, angle: number = 0) { if (process.env.NODE_ENV !== 'production') { - if (!warnedOnce && angle > 90 && angle < -90) { - warnedOnce = true; - console.warn( - [ - `MUI X: It seems you applied an angle larger than 90° or smaller than -90° to an axis text.`, - `This could cause some text overlapping.`, - `If you encounter a use case where it's needed, please open an issue.`, - ].join('\n'), - ); + if (angle > 90 && angle < -90) { + warnOnce([ + `MUI X: It seems you applied an angle larger than 90° or smaller than -90° to an axis text.`, + `This could cause some text overlapping.`, + `If you encounter a use case where it's needed, please open an issue.`, + ]); } } const standardAngle = Math.min( diff --git a/packages/x-charts/src/models/seriesType/line.ts b/packages/x-charts/src/models/seriesType/line.ts index 744749d66833..f27c6f4eec49 100644 --- a/packages/x-charts/src/models/seriesType/line.ts +++ b/packages/x-charts/src/models/seriesType/line.ts @@ -60,6 +60,11 @@ export interface LineSeriesType * The label to display on the tooltip or the legend. It can be a string or a function. */ label?: string | ((location: 'tooltip' | 'legend') => string); + /** + * The type of curve to use for the line. + * Read more about curves at [line interpolation](https://mui.com/x/react-charts/lines/#interpolation). + * @default 'monotoneX' + */ curve?: CurveType; /** * Define which items of the series should display a mark. From df8ee29807f01969f08bcc22113d0076627f8946 Mon Sep 17 00:00:00 2001 From: Sycamore <71297412+samuelsycamore@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:32:29 -0700 Subject: [PATCH 33/48] [docs] Copyedit `pages.ts` navigation (#14782) --- docs/data/pages.ts | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/docs/data/pages.ts b/docs/data/pages.ts index 0a2c15787190..0d129b937a5a 100644 --- a/docs/data/pages.ts +++ b/docs/data/pages.ts @@ -23,9 +23,7 @@ const pages: MuiPage[] = [ { pathname: '/x/common-features-group', title: 'Common concepts', - children: [ - { pathname: `/x/common-concepts/custom-components`, title: 'Custom slots and subcomponents' }, - ], + children: [{ pathname: `/x/common-concepts/custom-components`, title: 'Custom subcomponents' }], }, { pathname: '/x/react-data-grid-group', @@ -94,7 +92,7 @@ const pages: MuiPage[] = [ { pathname: '/x/react-data-grid/export' }, { pathname: '/x/react-data-grid/clipboard', title: 'Copy and paste', newFeature: true }, { pathname: '/x/react-data-grid/overlays', title: 'Overlays' }, - { pathname: '/x/react-data-grid/components', title: 'Custom slots and subcomponents' }, + { pathname: '/x/react-data-grid/components', title: 'Custom subcomponents' }, { pathname: '/x/react-data-grid/style-group', title: 'Style', @@ -108,17 +106,10 @@ const pages: MuiPage[] = [ { pathname: '/x/react-data-grid/virtualization' }, { pathname: '/x/react-data-grid/accessibility' }, { pathname: '/x/react-data-grid/performance' }, - { - pathname: '/x/react-data-grid-group-pivot', - title: 'Group & Pivot', - plan: 'pro', - children: [ - { pathname: '/x/react-data-grid/tree-data', plan: 'pro' }, - { pathname: '/x/react-data-grid/row-grouping', plan: 'premium' }, - { pathname: '/x/react-data-grid/aggregation', plan: 'premium' }, - { pathname: '/x/react-data-grid/pivoting', plan: 'premium', planned: true }, - ], - }, + { pathname: '/x/react-data-grid/tree-data', plan: 'pro' }, + { pathname: '/x/react-data-grid/row-grouping', plan: 'premium' }, + { pathname: '/x/react-data-grid/aggregation', plan: 'premium' }, + { pathname: '/x/react-data-grid/pivoting', plan: 'premium', planned: true }, { pathname: '/x/react-data-grid/server-side-data-group', title: 'Server-side data', @@ -149,7 +140,7 @@ const pages: MuiPage[] = [ ], }, { - pathname: '/x/react-data-grid/advanced', + pathname: '/x/react-data-grid/custom-behavior', children: [ { pathname: '/x/react-data-grid/api-object', title: 'API object' }, { pathname: '/x/react-data-grid/events' }, @@ -169,7 +160,7 @@ const pages: MuiPage[] = [ }, { pathname: '/x/api/data-grid-group', - title: 'API Reference', + title: 'API reference', children: [ { pathname: '/x/api/data-grid', title: 'Index' }, { @@ -332,7 +323,7 @@ const pages: MuiPage[] = [ { pathname: '/x/react-date-pickers/fields', title: 'Field components' }, { pathname: '/x/api/date-pickers-group', - title: 'API Reference', + title: 'API reference', children: [{ pathname: '/x/api/date-pickers', title: 'Index' }, ...pickersComponentApi], }, ], @@ -371,7 +362,7 @@ const pages: MuiPage[] = [ children: [ { pathname: '/x/react-date-pickers/custom-components', - title: 'Custom slots and subcomponents', + title: 'Custom subcomponents', }, { pathname: '/x/react-date-pickers/custom-layout' }, { pathname: '/x/react-date-pickers/custom-field' }, @@ -447,10 +438,10 @@ const pages: MuiPage[] = [ { pathname: '/x/react-charts/legend' }, { pathname: '/x/react-charts/stacking' }, { pathname: '/x/react-charts/styling' }, - { pathname: '/x/react-charts/tooltip', title: 'Tooltip & Highlights' }, + { pathname: '/x/react-charts/tooltip', title: 'Tooltips and highlights' }, { pathname: '/x/react-charts/zoom-and-pan', - title: 'Zoom & Pan', + title: 'Zooming and panning', plan: 'pro', unstable: true, }, @@ -458,7 +449,7 @@ const pages: MuiPage[] = [ }, { pathname: '/x/api/charts-group', - title: 'API Reference', + title: 'API reference', children: [ ...chartsComponentApi, { @@ -530,7 +521,7 @@ const pages: MuiPage[] = [ }, { pathname: '/x/api/tree-view-group', - title: 'API Reference', + title: 'API reference', children: [...treeViewComponentApi], }, ], From a4eaf65ed8ceecad611fdae0bae168204510dd3f Mon Sep 17 00:00:00 2001 From: Kristian Ignatov Date: Tue, 1 Oct 2024 20:40:55 +0300 Subject: [PATCH 34/48] [l10n] Improve Bulgarian (bg-BG) locale (#14451) --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/bgBG.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index fc5dc6e1ec11..13b5346a5e52 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -19,7 +19,7 @@ "languageTag": "bg-BG", "importName": "bgBG", "localeName": "Bulgarian", - "missingKeysCount": 8, + "missingKeysCount": 0, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/bgBG.ts" }, diff --git a/packages/x-data-grid/src/locales/bgBG.ts b/packages/x-data-grid/src/locales/bgBG.ts index 01420eeb886f..3c360f174e45 100644 --- a/packages/x-data-grid/src/locales/bgBG.ts +++ b/packages/x-data-grid/src/locales/bgBG.ts @@ -38,10 +38,10 @@ const bgBGGrid: Partial = { toolbarExportExcel: 'Изтегли като Excel', // Columns management text - // columnsManagementSearchTitle: 'Search', - // columnsManagementNoColumns: 'No columns', - // columnsManagementShowHideAllText: 'Show/Hide All', - // columnsManagementReset: 'Reset', + columnsManagementSearchTitle: 'Търсене', + columnsManagementNoColumns: 'Няма колони', + columnsManagementShowHideAllText: 'Покажи/Скрий Всичко', + columnsManagementReset: 'Нулирай', // Filter panel text filterPanelAddFilter: 'Добави Филтър', @@ -57,9 +57,9 @@ const bgBGGrid: Partial = { // Filter operators text filterOperatorContains: 'съдържа', - // filterOperatorDoesNotContain: 'does not contain', + filterOperatorDoesNotContain: 'не съдържа', filterOperatorEquals: 'равно', - // filterOperatorDoesNotEqual: 'does not equal', + filterOperatorDoesNotEqual: 'не е равно', filterOperatorStartsWith: 'започва с', filterOperatorEndsWith: 'завършва с', filterOperatorIs: 'е', @@ -80,9 +80,9 @@ const bgBGGrid: Partial = { // Header filter operators text headerFilterOperatorContains: 'Съдържа', - // headerFilterOperatorDoesNotContain: 'Does not contain', + headerFilterOperatorDoesNotContain: 'Не съдържа', headerFilterOperatorEquals: 'Равнo', - // headerFilterOperatorDoesNotEqual: 'Does not equal', + headerFilterOperatorDoesNotEqual: 'Не е равно', headerFilterOperatorStartsWith: 'Започва с', headerFilterOperatorEndsWith: 'Завършва с', headerFilterOperatorIs: 'Равно е на', From 539a7ba601d8f9fd57e67f43d314bbbe620cb578 Mon Sep 17 00:00:00 2001 From: Armin Mehinovic <4390250+arminmeh@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:53:58 +0200 Subject: [PATCH 35/48] [l10n] Add Croatian (hr-HR) locale (#14795) --- docs/data/date-pickers/localization/data.json | 8 ++ packages/x-date-pickers/src/locales/hrHR.ts | 118 ++++++++++++++++++ packages/x-date-pickers/src/locales/index.ts | 1 + 3 files changed, 127 insertions(+) create mode 100644 packages/x-date-pickers/src/locales/hrHR.ts diff --git a/docs/data/date-pickers/localization/data.json b/docs/data/date-pickers/localization/data.json index bb5d1353acca..a0d146c0cd87 100644 --- a/docs/data/date-pickers/localization/data.json +++ b/docs/data/date-pickers/localization/data.json @@ -39,6 +39,14 @@ "totalKeysCount": 50, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/zhCN.ts" }, + { + "languageTag": "hr-HR", + "importName": "hrHR", + "localeName": "Croatian", + "missingKeysCount": 0, + "totalKeysCount": 50, + "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/hrHR.ts" + }, { "languageTag": "cs-CZ", "importName": "csCZ", diff --git a/packages/x-date-pickers/src/locales/hrHR.ts b/packages/x-date-pickers/src/locales/hrHR.ts new file mode 100644 index 000000000000..0f83f17a9d6b --- /dev/null +++ b/packages/x-date-pickers/src/locales/hrHR.ts @@ -0,0 +1,118 @@ +import { PickersLocaleText } from './utils/pickersLocaleTextApi'; +import { getPickersLocalization } from './utils/getPickersLocalization'; +import { TimeViewWithMeridiem } from '../internals/models'; + +// maps TimeView to its translation +const timeViews: Record = { + hours: 'sati', + minutes: 'minute', + seconds: 'sekunde', + meridiem: 'meridiem', +}; + +const hrHRPickers: Partial> = { + // Calendar navigation + previousMonth: 'Prethodni mjesec', + nextMonth: 'Naredni mjesec', + + // View navigation + openPreviousView: 'Otvori prethodni prikaz', + openNextView: 'Otvori naredni prikaz', + calendarViewSwitchingButtonAriaLabel: (view) => + view === 'year' + ? 'Otvoren je godišnji prikaz, promijeni na kalendarski prikaz' + : 'Otvoren je kalendarski prikaz, promijeni na godišnji prikaz', + + // DateRange labels + start: 'Početak', + end: 'Kraj', + startDate: 'Početni datum', + startTime: 'Početno vrijeme', + endDate: 'Krajnji datum', + endTime: 'Krajnje vrijeme', + + // Action bar + cancelButtonLabel: 'Otkaži', + clearButtonLabel: 'Izbriši', + okButtonLabel: 'U redu', + todayButtonLabel: 'Danas', + + // Toolbar titles + datePickerToolbarTitle: 'Odaberi datum', + dateTimePickerToolbarTitle: 'Odaberi datum i vrijeme', + timePickerToolbarTitle: 'Odaberi vrijeme', + dateRangePickerToolbarTitle: 'Odaberi vremenski okvir', + + // Clock labels + clockLabelText: (view, time, utils, formattedTime) => + `Odaberi ${timeViews[view] ?? view}. ${!formattedTime && (time === null || !utils.isValid(time)) ? 'Vrijeme nije odabrano' : `Odabrano vrijeme je ${formattedTime ?? utils.format(time, 'fullTime')}`}`, + hoursClockNumberText: (hours) => { + let suffix = 'sati'; + if (Number(hours) === 1) { + suffix = 'sat'; + } else if (Number(hours) < 5) { + suffix = 'sata'; + } + return `${hours} ${suffix}`; + }, + minutesClockNumberText: (minutes) => + `${minutes} ${Number(minutes) > 1 && Number(minutes) < 5 ? 'minute' : 'minuta'}`, + secondsClockNumberText: (seconds) => { + let suffix = 'sekundi'; + if (Number(seconds) === 1) { + suffix = 'sekunda'; + } else if (Number(seconds) < 5) { + suffix = 'sekunde'; + } + return `${seconds} ${suffix}`; + }, + + // Digital clock labels + selectViewText: (view) => `Odaberi ${timeViews[view]}`, + + // Calendar labels + calendarWeekNumberHeaderLabel: 'Broj tjedna', + calendarWeekNumberHeaderText: '#', + calendarWeekNumberAriaLabelText: (weekNumber) => `Tjedan ${weekNumber}`, + calendarWeekNumberText: (weekNumber) => `${weekNumber}`, + + // Open picker labels + openDatePickerDialogue: (value, utils, formattedDate) => + formattedDate || (value !== null && utils.isValid(value)) + ? `Odaberi datum, odabrani datum je ${formattedDate ?? utils.format(value, 'fullDate')}` + : 'Odaberi datum', + openTimePickerDialogue: (value, utils, formattedTime) => + formattedTime || (value !== null && utils.isValid(value)) + ? `Odaberi vrijeme, odabrano vrijeme je ${formattedTime ?? utils.format(value, 'fullTime')}` + : 'Odaberi vrijeme', + fieldClearLabel: 'Izbriši', + + // Table labels + timeTableLabel: 'Odaberi vrijeme', + dateTableLabel: 'Odaberi datum', + + // Field section placeholders + fieldYearPlaceholder: (params) => 'G'.repeat(params.digitAmount), + fieldMonthPlaceholder: (params) => (params.contentType === 'letter' ? 'MMMM' : 'MM'), + fieldDayPlaceholder: () => 'DD', + fieldWeekDayPlaceholder: (params) => (params.contentType === 'letter' ? 'EEEE' : 'EE'), + fieldHoursPlaceholder: () => 'hh', + fieldMinutesPlaceholder: () => 'mm', + fieldSecondsPlaceholder: () => 'ss', + fieldMeridiemPlaceholder: () => 'aa', + + // View names + year: 'Godina', + month: 'Mjesec', + day: 'Dan', + weekDay: 'Dan u tjednu', + hours: 'Sati', + minutes: 'Minute', + seconds: 'Sekunde', + meridiem: 'Meridiem', + + // Common + empty: 'Isprazni', +}; + +export const hrHR = getPickersLocalization(hrHRPickers); diff --git a/packages/x-date-pickers/src/locales/index.ts b/packages/x-date-pickers/src/locales/index.ts index 2c885d5505f6..dc0af3610571 100644 --- a/packages/x-date-pickers/src/locales/index.ts +++ b/packages/x-date-pickers/src/locales/index.ts @@ -11,6 +11,7 @@ export * from './faIR'; export * from './fiFI'; export * from './frFR'; export * from './heIL'; +export * from './hrHR'; export * from './huHU'; export * from './isIS'; export * from './itIT'; From 82b7df27a51cc761330525d9dbde6c3c7caaecb9 Mon Sep 17 00:00:00 2001 From: Kristian Ignatov Date: Wed, 2 Oct 2024 09:42:19 +0300 Subject: [PATCH 36/48] [l10n] Add Bulgarian (bg-BG) locale (#14469) --- docs/data/date-pickers/localization/data.json | 8 ++ packages/x-date-pickers/src/locales/bgBG.ts | 100 ++++++++++++++++++ packages/x-date-pickers/src/locales/index.ts | 1 + 3 files changed, 109 insertions(+) create mode 100644 packages/x-date-pickers/src/locales/bgBG.ts diff --git a/docs/data/date-pickers/localization/data.json b/docs/data/date-pickers/localization/data.json index a0d146c0cd87..f8d4e61e2317 100644 --- a/docs/data/date-pickers/localization/data.json +++ b/docs/data/date-pickers/localization/data.json @@ -15,6 +15,14 @@ "totalKeysCount": 50, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/beBY.ts" }, + { + "languageTag": "bg-BG", + "importName": "bgBG", + "localeName": "Bulgarian", + "missingKeysCount": 0, + "totalKeysCount": 50, + "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/locales/bgBG.ts" + }, { "languageTag": "ca-ES", "importName": "caES", diff --git a/packages/x-date-pickers/src/locales/bgBG.ts b/packages/x-date-pickers/src/locales/bgBG.ts new file mode 100644 index 000000000000..5425ad03d161 --- /dev/null +++ b/packages/x-date-pickers/src/locales/bgBG.ts @@ -0,0 +1,100 @@ +import { PickersLocaleText } from './utils/pickersLocaleTextApi'; +import { getPickersLocalization } from './utils/getPickersLocalization'; +import { TimeViewWithMeridiem } from '../internals/models'; + +const views: Record = { + hours: 'часове', + minutes: 'минути', + seconds: 'секунди', + meridiem: 'преди обяд/след обяд', +}; + +const bgBGPickers: Partial> = { + // Calendar navigation + previousMonth: 'Предишен месец', + nextMonth: 'Следващ месец', + + // View navigation + openPreviousView: 'Отвори предишен изглед', + openNextView: 'Отвори следващ изглед', + calendarViewSwitchingButtonAriaLabel: (view) => + view === 'year' + ? 'отворен е изглед на година, премини на изглед на календар' + : 'отворен е изглед на календар, премини на изглед на година', + + // DateRange labels + start: 'Начало', + end: 'Край', + startDate: 'Начална дата', + startTime: 'Начален час', + endDate: 'Крайна дата', + endTime: 'Краен час', + + // Action bar + cancelButtonLabel: 'Отказ', + clearButtonLabel: 'Изчисти', + okButtonLabel: 'ОК', + todayButtonLabel: 'Днес', + + // Toolbar titles + datePickerToolbarTitle: 'Избери дата', + dateTimePickerToolbarTitle: 'Избери дата и час', + timePickerToolbarTitle: 'Избери час', + dateRangePickerToolbarTitle: 'Избери времеви период', + + // Clock labels + clockLabelText: (view, time, adapter) => + `Избери ${views[view]}. ${time === null ? 'Не е избран час' : `Избраният час е ${adapter.format(time, 'fullTime')}`}`, + hoursClockNumberText: (hours) => `${hours} часа`, + minutesClockNumberText: (minutes) => `${minutes} минути`, + secondsClockNumberText: (seconds) => `${seconds} секунди`, + + // Digital clock labels + selectViewText: (view) => `Избери ${views[view]}`, + + // Calendar labels + calendarWeekNumberHeaderLabel: 'Седмица', + calendarWeekNumberHeaderText: '#', + calendarWeekNumberAriaLabelText: (weekNumber) => `Седмица ${weekNumber}`, + calendarWeekNumberText: (weekNumber) => `${weekNumber}`, + + // Open picker labels + openDatePickerDialogue: (value, utils) => + value !== null && utils.isValid(value) + ? `Избери дата, избраната дата е ${utils.format(value, 'fullDate')}` + : 'Избери дата', + openTimePickerDialogue: (value, utils) => + value !== null && utils.isValid(value) + ? `Избери час, избраният час е ${utils.format(value, 'fullTime')}` + : 'Избери час', + fieldClearLabel: 'Изчисти стойност', + + // Table labels + timeTableLabel: 'избери час', + dateTableLabel: 'избери дата', + + // Field section placeholders + fieldYearPlaceholder: (params) => 'Г'.repeat(params.digitAmount), + fieldMonthPlaceholder: (params) => (params.contentType === 'letter' ? 'ММММ' : 'ММ'), + fieldDayPlaceholder: () => 'ДД', + fieldWeekDayPlaceholder: (params) => (params.contentType === 'letter' ? 'СССС' : 'СС'), + fieldHoursPlaceholder: () => 'чч', + fieldMinutesPlaceholder: () => 'мм', + fieldSecondsPlaceholder: () => 'сс', + fieldMeridiemPlaceholder: () => 'пс', + + // View names + year: 'Година', + month: 'Месец', + day: 'Ден', + weekDay: 'Ден от седмицата', + hours: 'Часове', + minutes: 'Минути', + seconds: 'Секунди', + meridiem: 'Преди обяд/след обяд', + + // Common + empty: 'Празно', +}; + +export const bgBG = getPickersLocalization(bgBGPickers); diff --git a/packages/x-date-pickers/src/locales/index.ts b/packages/x-date-pickers/src/locales/index.ts index dc0af3610571..9ea212216886 100644 --- a/packages/x-date-pickers/src/locales/index.ts +++ b/packages/x-date-pickers/src/locales/index.ts @@ -1,4 +1,5 @@ export * from './beBY'; +export * from './bgBG'; export * from './caES'; export * from './csCZ'; export * from './daDK'; From 588deeaff292ba95808f98747fb371184f13359e Mon Sep 17 00:00:00 2001 From: sai chand <60743144+sai6855@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:49:56 +0530 Subject: [PATCH 37/48] [TreeView] Fix Cursor navigation interferes with browser shortcut keys (#14798) --- .../useTreeViewKeyboardNavigation.test.tsx | 26 +++++++++++++++++++ .../useTreeViewKeyboardNavigation.ts | 6 +++++ 2 files changed, 32 insertions(+) diff --git a/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.test.tsx b/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.test.tsx index f15ef9c93251..7dab02bcf8b2 100644 --- a/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.test.tsx +++ b/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.test.tsx @@ -178,6 +178,19 @@ describeTreeView< expect(view.getFocusedItemId()).to.equal('1'); }); + it('should not change focus if ctrl is pressed', () => { + const view = render({ + items: [{ id: '1', children: [{ id: '1.1' }] }], + defaultExpandedItems: ['1'], + }); + + act(() => { + view.getItemRoot('1').focus(); + }); + fireEvent.keyDown(view.getItemRoot('1'), { key: 'ArrowRight', ctrlKey: true }); + expect(view.getFocusedItemId()).to.equal('1'); + }); + it('should move the focus to the first child if the focus is on an open item', () => { const view = render({ items: [{ id: '1', children: [{ id: '1.1' }] }], @@ -232,6 +245,19 @@ describeTreeView< expect(view.isItemExpanded('1')).to.equal(false); }); + it('should not change focus if ctrl is pressed', () => { + const view = render({ + items: [{ id: '1', children: [{ id: '1.1' }] }], + defaultExpandedItems: ['1'], + }); + + act(() => { + view.getItemRoot('1.1').focus(); + }); + fireEvent.keyDown(view.getItemRoot('1.1'), { key: 'ArrowLeft', ctrlKey: true }); + expect(view.getFocusedItemId()).to.equal('1.1'); + }); + it("should move focus to the item's parent if the focus is on a child item that is a leaf", () => { const view = render({ items: [{ id: '1', children: [{ id: '1.1' }] }], diff --git a/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.ts b/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.ts index c00321273754..88bad3cccb21 100644 --- a/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.ts +++ b/packages/x-tree-view/src/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.ts @@ -182,6 +182,9 @@ export const useTreeViewKeyboardNavigation: TreeViewPlugin< // If the focused item is expanded, we move the focus to its first child // If the focused item is collapsed and has children, we expand it case (key === 'ArrowRight' && !isRtl) || (key === 'ArrowLeft' && isRtl): { + if (ctrlPressed) { + return; + } if (instance.isItemExpanded(itemId)) { const nextItemId = getNextNavigableItem(instance, itemId); if (nextItemId) { @@ -199,6 +202,9 @@ export const useTreeViewKeyboardNavigation: TreeViewPlugin< // If the focused item is expanded, we collapse it // If the focused item is collapsed and has a parent, we move the focus to this parent case (key === 'ArrowLeft' && !isRtl) || (key === 'ArrowRight' && isRtl): { + if (ctrlPressed) { + return; + } if (canToggleItemExpansion(itemId) && instance.isItemExpanded(itemId)) { instance.toggleItemExpansion(event, itemId); event.preventDefault(); From 98a7511df0160127052cf5a260ff6ea6b7bc8e1d Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Wed, 2 Oct 2024 12:37:42 +0200 Subject: [PATCH 38/48] [test] Fix `Escape` event firing event (#14797) --- .../plugins/useTreeViewLabel/useTreeViewLabel.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/x-tree-view/src/internals/plugins/useTreeViewLabel/useTreeViewLabel.test.tsx b/packages/x-tree-view/src/internals/plugins/useTreeViewLabel/useTreeViewLabel.test.tsx index a89bbdbd8e05..375cc7a066a1 100644 --- a/packages/x-tree-view/src/internals/plugins/useTreeViewLabel/useTreeViewLabel.test.tsx +++ b/packages/x-tree-view/src/internals/plugins/useTreeViewLabel/useTreeViewLabel.test.tsx @@ -133,7 +133,7 @@ describeTreeView<[UseTreeViewLabelSignature]>( view.getItemRoot('1').focus(); }); fireEvent.doubleClick(view.getItemLabel('1')); - fireEvent.keyDown(view.getItemLabelInput('1'), { key: 'Esc' }); + fireEvent.keyDown(view.getItemLabelInput('1'), { key: 'Escape' }); expect(view.getItemLabelInput('1')).to.equal(null); expect(view.getItemLabel('1')).not.to.equal(null); @@ -215,7 +215,7 @@ describeTreeView<[UseTreeViewLabelSignature]>( }); fireEvent.doubleClick(view.getItemLabel('1')); fireEvent.change(view.getItemLabelInput('1'), { target: { value: 'new value' } }); - fireEvent.keyDown(view.getItemLabelInput('1'), { key: 'Esc' }); + fireEvent.keyDown(view.getItemLabelInput('1'), { key: 'Escape' }); expect(view.getItemLabel('1').textContent).to.equal('test'); fireEvent.doubleClick(view.getItemLabel('1')); From 1b6ae0e0437180b2532cd1f1003a6713a90657c7 Mon Sep 17 00:00:00 2001 From: Armin Mehinovic <4390250+arminmeh@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:28:12 +0200 Subject: [PATCH 39/48] [l10n] Improve Croatian (hr-HR) locale (#14794) --- docs/data/data-grid/localization/data.json | 2 +- packages/x-data-grid/src/locales/hrHR.ts | 119 ++++++++++++--------- 2 files changed, 70 insertions(+), 51 deletions(-) diff --git a/docs/data/data-grid/localization/data.json b/docs/data/data-grid/localization/data.json index 13b5346a5e52..f286b966870b 100644 --- a/docs/data/data-grid/localization/data.json +++ b/docs/data/data-grid/localization/data.json @@ -51,7 +51,7 @@ "languageTag": "hr-HR", "importName": "hrHR", "localeName": "Croatian", - "missingKeysCount": 8, + "missingKeysCount": 0, "totalKeysCount": 122, "githubLink": "https://github.com/mui/mui-x/blob/master/packages/x-data-grid/src/locales/hrHR.ts" }, diff --git a/packages/x-data-grid/src/locales/hrHR.ts b/packages/x-data-grid/src/locales/hrHR.ts index 3691ee737004..26493db593d9 100644 --- a/packages/x-data-grid/src/locales/hrHR.ts +++ b/packages/x-data-grid/src/locales/hrHR.ts @@ -10,8 +10,8 @@ const hrHRGrid: Partial = { // Density selector toolbar button text toolbarDensity: 'Gustoća', toolbarDensityLabel: 'Gustoća', - toolbarDensityCompact: 'Kompaktan', - toolbarDensityStandard: 'Standard', + toolbarDensityCompact: 'Kompaktno', + toolbarDensityStandard: 'Standardno', toolbarDensityComfortable: 'Udobno', // Columns selector toolbar button text @@ -20,47 +20,54 @@ const hrHRGrid: Partial = { // Filters toolbar button text toolbarFilters: 'Filteri', - toolbarFiltersLabel: 'Prikaži filtre', - toolbarFiltersTooltipHide: 'Sakrij filtre', - toolbarFiltersTooltipShow: 'Prikaži filtre', - toolbarFiltersTooltipActive: (count) => - count !== 1 ? `${count} aktivnih filtara` : `${count} aktivni filter`, + toolbarFiltersLabel: 'Prikaži filtere', + toolbarFiltersTooltipHide: 'Sakrij filtere', + toolbarFiltersTooltipShow: 'Prikaži filtere', + toolbarFiltersTooltipActive: (count) => { + if (count === 1) { + return `${count} aktivan filter`; + } + if (count < 5) { + return `${count} aktivna filtera`; + } + return `${count} aktivnih filtera`; + }, // Quick filter toolbar field toolbarQuickFilterPlaceholder: 'Traži…', toolbarQuickFilterLabel: 'traži', - toolbarQuickFilterDeleteIconLabel: 'Čisto', + toolbarQuickFilterDeleteIconLabel: 'Obriši', // Export selector toolbar button text toolbarExport: 'Izvoz', toolbarExportLabel: 'Izvoz', toolbarExportCSV: 'Preuzmi kao CSV', - toolbarExportPrint: 'Ispis', - toolbarExportExcel: 'Preuzmite kao Excel', + toolbarExportPrint: 'Štampaj', + toolbarExportExcel: 'Preuzmi kao Excel', // Columns management text - // columnsManagementSearchTitle: 'Search', - // columnsManagementNoColumns: 'No columns', - // columnsManagementShowHideAllText: 'Show/Hide All', - // columnsManagementReset: 'Reset', + columnsManagementSearchTitle: 'Traži', + columnsManagementNoColumns: 'Nema stupaca', + columnsManagementShowHideAllText: 'Prikaži/Sakrij sve', + columnsManagementReset: 'Ponovno namjesti', // Filter panel text - filterPanelAddFilter: 'Dodajte filter', - filterPanelRemoveAll: 'Ukloniti sve', - filterPanelDeleteIconLabel: 'Izbrisati', + filterPanelAddFilter: 'Dodaj filter', + filterPanelRemoveAll: 'Ukloni sve', + filterPanelDeleteIconLabel: 'Obriši', filterPanelLogicOperator: 'Logički operator', - filterPanelOperator: 'Operater', + filterPanelOperator: 'Operator', filterPanelOperatorAnd: 'I', filterPanelOperatorOr: 'Ili', - filterPanelColumns: 'Stupci', + filterPanelColumns: 'Stupac', filterPanelInputLabel: 'Vrijednost', - filterPanelInputPlaceholder: 'Vrijednost filtra', + filterPanelInputPlaceholder: 'Vrijednost filtera', // Filter operators text filterOperatorContains: 'sadrži', - // filterOperatorDoesNotContain: 'does not contain', - filterOperatorEquals: 'jednaki', - // filterOperatorDoesNotEqual: 'does not equal', + filterOperatorDoesNotContain: 'ne sadrži', + filterOperatorEquals: 'je jednak', + filterOperatorDoesNotEqual: 'nije jednak', filterOperatorStartsWith: 'počinje sa', filterOperatorEndsWith: 'završava sa', filterOperatorIs: 'je', @@ -69,8 +76,8 @@ const hrHRGrid: Partial = { filterOperatorOnOrAfter: 'je na ili poslije', filterOperatorBefore: 'je prije', filterOperatorOnOrBefore: 'je na ili prije', - filterOperatorIsEmpty: 'prazno je', - filterOperatorIsNotEmpty: 'nije prazna', + filterOperatorIsEmpty: 'je prazno', + filterOperatorIsNotEmpty: 'nije prazno', filterOperatorIsAnyOf: 'je bilo koji od', 'filterOperator=': '=', 'filterOperator!=': '!=', @@ -81,20 +88,20 @@ const hrHRGrid: Partial = { // Header filter operators text headerFilterOperatorContains: 'Sadrži', - // headerFilterOperatorDoesNotContain: 'Does not contain', + headerFilterOperatorDoesNotContain: 'Ne sadrži', headerFilterOperatorEquals: 'Jednako', - // headerFilterOperatorDoesNotEqual: 'Does not equal', + headerFilterOperatorDoesNotEqual: 'Nije jednako', headerFilterOperatorStartsWith: 'Počinje sa', - headerFilterOperatorEndsWith: 'Završava s', + headerFilterOperatorEndsWith: 'Završava sa', headerFilterOperatorIs: 'Je', headerFilterOperatorNot: 'Nije', headerFilterOperatorAfter: 'Je poslije', headerFilterOperatorOnOrAfter: 'Je uključeno ili poslije', - headerFilterOperatorBefore: 'Je li prije', - headerFilterOperatorOnOrBefore: 'Uključeno je ili prije', - headerFilterOperatorIsEmpty: 'Prazno je', - headerFilterOperatorIsNotEmpty: 'Nije prazna', - headerFilterOperatorIsAnyOf: 'Je li bilo koji od', + headerFilterOperatorBefore: 'Je prije', + headerFilterOperatorOnOrBefore: 'Je uključeno ili prije', + headerFilterOperatorIsEmpty: 'Je prazno', + headerFilterOperatorIsNotEmpty: 'Nije prazno', + headerFilterOperatorIsAnyOf: 'Je bilo koji od', 'headerFilterOperator=': 'Jednako', 'headerFilterOperator!=': 'Nije jednako', 'headerFilterOperator>': 'Veći od', @@ -104,30 +111,42 @@ const hrHRGrid: Partial = { // Filter values text filterValueAny: 'bilo koji', - filterValueTrue: 'pravi', - filterValueFalse: 'lažno', + filterValueTrue: 'tačno', + filterValueFalse: 'netačno', // Column menu text - columnMenuLabel: 'Jelovnik ', + columnMenuLabel: 'Izbornik', columnMenuShowColumns: 'Prikaži stupce', columnMenuManageColumns: 'Upravljanje stupcima', - columnMenuFilter: 'filtar', + columnMenuFilter: 'Filter', columnMenuHideColumn: 'Sakrij stupac', columnMenuUnsort: 'Poništi sortiranje', columnMenuSortAsc: 'Poredaj uzlazno', - columnMenuSortDesc: 'Poredaj silaznim redom', + columnMenuSortDesc: 'Poredaj silazno', // Column header text - columnHeaderFiltersTooltipActive: (count) => - count !== 1 ? `${count} aktivnih filtara` : `${count} aktivni filter`, - columnHeaderFiltersLabel: 'Prikaži filtre', - columnHeaderSortIconLabel: 'Vrsta', + columnHeaderFiltersTooltipActive: (count) => { + if (count === 1) { + return `${count} aktivan filter`; + } + if (count < 5) { + return `${count} aktivna filtera`; + } + return `${count} aktivnih filtera`; + }, + columnHeaderFiltersLabel: 'Prikaži filtere', + columnHeaderSortIconLabel: 'Poredaj', // Rows selected footer text - footerRowSelected: (count) => - count !== 1 - ? `Odabrano je ${count.toLocaleString()} redaka` - : `${count.toLocaleString()} redak odabran`, + footerRowSelected: (count) => { + if (count === 1) { + return `Odabran je ${count.toLocaleString()} redak`; + } + if (count < 5) { + return `Odabrana su ${count.toLocaleString()} retka`; + } + return `Odabrano je ${count.toLocaleString()} redaka`; + }, // Total row amount footer text footerTotalRows: 'Ukupno redaka:', @@ -137,10 +156,10 @@ const hrHRGrid: Partial = { `${visibleCount.toLocaleString()} od ${totalCount.toLocaleString()}`, // Checkbox selection text - checkboxSelectionHeaderName: 'Odabir potvrdnog okvira', + checkboxSelectionHeaderName: 'Odabir redaka', checkboxSelectionSelectAllRows: 'Odaberite sve retke', checkboxSelectionUnselectAllRows: 'Poništi odabir svih redaka', - checkboxSelectionSelectRow: 'Odaberite red', + checkboxSelectionSelectRow: 'Odaberite redak', checkboxSelectionUnselectRow: 'Poništi odabir retka', // Boolean cell text @@ -156,7 +175,7 @@ const hrHRGrid: Partial = { unpin: 'Otkvači', // Tree Data - treeDataGroupingHeaderName: 'Group', + treeDataGroupingHeaderName: 'Skupina', treeDataExpand: 'vidjeti djecu', treeDataCollapse: 'sakriti djecu', @@ -168,7 +187,7 @@ const hrHRGrid: Partial = { // Master/detail detailPanelToggle: 'Prebacivanje ploče s detaljima', expandDetailPanel: 'Proširiti', - collapseDetailPanel: 'Kolaps', + collapseDetailPanel: 'Skupiti', // Row reordering text rowReorderingHeaderName: 'Promjena redoslijeda', From 4148642b952dd4d4bfc70476bde2f29ec37bc905 Mon Sep 17 00:00:00 2001 From: Michel Engelen <32863416+michelengelen@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:28:47 +0200 Subject: [PATCH 40/48] [docs] Added warning callout for Firefox reordering bug (#14516) --- docs/data/data-grid/column-ordering/column-ordering.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/data/data-grid/column-ordering/column-ordering.md b/docs/data/data-grid/column-ordering/column-ordering.md index 6afb80cf9e1c..81d3bc079d8f 100644 --- a/docs/data/data-grid/column-ordering/column-ordering.md +++ b/docs/data/data-grid/column-ordering/column-ordering.md @@ -6,6 +6,13 @@ title: Data Grid - Column ordering

    Drag and drop your columns to reorder them.

    +:::warning +There is [a known issue with Firefox v129](https://github.com/mui/mui-x/issues/14263) that impacts this feature. +Reordering does not work on that specific version of Firefox because the value for `event.dataTransfer` is `null` which results in an error. + +You must upgrade to Firefox v130 or higher to avoid this issue. +::: + By default, columns are ordered according to the order they are included in the `columns` array. By default, `DataGridPro` allows all column reordering by dragging the header cells and moving them left or right. From 21450deb54041f85ed8727dabcc8428fa4f4877a Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Wed, 2 Oct 2024 14:37:52 -0400 Subject: [PATCH 41/48] [datagrid] Revert "use `event.type` for detecting IME key press" (#14803) Signed-off-by: Rom Grk Co-authored-by: Olivier Tassinari --- .../tests/cellEditing.DataGridPro.test.tsx | 25 ++----------------- .../src/tests/rowEditing.DataGridPro.test.tsx | 23 ++--------------- .../features/editing/useGridCellEditing.ts | 3 ++- .../features/editing/useGridRowEditing.ts | 3 ++- 4 files changed, 8 insertions(+), 46 deletions(-) diff --git a/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx index 9564c63bc621..61eb25906561 100644 --- a/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/cellEditing.DataGridPro.test.tsx @@ -958,13 +958,7 @@ describe(' - Cell editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'あ' } }); - fireEvent.keyDown(cell, { - type: 'compositionstart', - isComposing: true, - charCode: 'あ'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); + fireEvent.keyDown(cell, { key: 'Enter', keyCode: 229 }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(cell, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); @@ -980,22 +974,7 @@ describe(' - Cell editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'ありがとう' } }); - - fireEvent.keyDown(cell, { - type: 'compositionstart', - isComposing: true, - charCode: 'あ'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); - fireEvent.keyDown(cell, { - type: 'compositionupdate', - isComposing: true, - charCode: 'う'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); - + fireEvent.keyDown(cell, { key: 'Enter', keyCode: 229 }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(cell, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); diff --git a/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx index 716d799de53b..d469b0bb87a2 100644 --- a/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/rowEditing.DataGridPro.test.tsx @@ -931,13 +931,7 @@ describe(' - Row editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'あ' } }); - fireEvent.keyDown(input, { - type: 'compositionstart', - isComposing: true, - charCode: 'あ'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); + fireEvent.keyDown(input, { key: 'Enter', keyCode: 229 }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(input, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); @@ -953,20 +947,7 @@ describe(' - Row editing', () => { fireEvent.doubleClick(cell); const input = cell.querySelector('input')!; fireEvent.change(input, { target: { value: 'ありがとう' } }); - fireEvent.keyDown(input, { - type: 'compositionstart', - isComposing: true, - charCode: 'あ'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); - fireEvent.keyDown(input, { - type: 'compositionupdate', - isComposing: true, - charCode: 'う'.charCodeAt(0), - bubbles: true, - cancelable: true, - }); + fireEvent.keyDown(input, { key: 'Enter', keyCode: 229 }); expect(listener.callCount).to.equal(0); fireEvent.keyDown(input, { key: 'Enter', keyCode: 13 }); expect(listener.callCount).to.equal(1); diff --git a/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts b/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts index e2be976204c9..2fe01488b6d7 100644 --- a/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts +++ b/packages/x-data-grid/src/hooks/features/editing/useGridCellEditing.ts @@ -127,7 +127,8 @@ export const useGridCellEditing = ( (params, event) => { if (params.cellMode === GridCellModes.Edit) { // Wait until IME is settled for Asian languages like Japanese and Chinese - if (event.type === 'compositionstart' || event.type === 'compositionupdate') { + // TODO: to replace at one point. See https://github.com/mui/material-ui/pull/39713#discussion_r1381678957. + if (event.which === 229) { return; } diff --git a/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts b/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts index d010bc314158..1add4f0a64ad 100644 --- a/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts +++ b/packages/x-data-grid/src/hooks/features/editing/useGridRowEditing.ts @@ -186,7 +186,8 @@ export const useGridRowEditing = ( (params, event) => { if (params.cellMode === GridRowModes.Edit) { // Wait until IME is settled for Asian languages like Japanese and Chinese - if (event.type === 'compositionstart' || event.type === 'compositionupdate') { + // TODO: to replace at one point. See https://github.com/mui/material-ui/pull/39713#discussion_r1381678957. + if (event.which === 229) { return; } From 2c86040d250825e4678d4792bba1d221f3e23c2d Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Thu, 3 Oct 2024 00:22:57 +0200 Subject: [PATCH 42/48] [infra] Fix line break in Stack Overflow message --- .github/workflows/support-stackoverflow.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/support-stackoverflow.yml b/.github/workflows/support-stackoverflow.yml index d6c113db37c6..6b0cb2701e83 100644 --- a/.github/workflows/support-stackoverflow.yml +++ b/.github/workflows/support-stackoverflow.yml @@ -24,8 +24,7 @@ jobs: issue-comment: | 👋 Thanks for using this project! - We use GitHub issues as a bug and feature requests tracker, however, - this issue appears to be a support request. + We use GitHub issues as a bug and feature requests tracker, however, this issue appears to be a support request. For support with MUI X please check out https://mui.com/x/introduction/support/. Thanks! From 7923dd1f026be8deeb7e8225e849c3e9d3a8d2f7 Mon Sep 17 00:00:00 2001 From: Michel Engelen <32863416+michelengelen@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:30:20 +0200 Subject: [PATCH 43/48] [infra] Adds community contribution section to the changelog script (#14799) Signed-off-by: Michel Engelen <32863416+michelengelen@users.noreply.github.com> Co-authored-by: Lukas Tyla --- scripts/releaseChangelog.mjs | 48 +++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/scripts/releaseChangelog.mjs b/scripts/releaseChangelog.mjs index 22fd5a708d60..7b565212ddb1 100644 --- a/scripts/releaseChangelog.mjs +++ b/scripts/releaseChangelog.mjs @@ -108,6 +108,11 @@ async function main(argv) { const changeLogMessages = []; const prsLabelsMap = {}; + const community = { + firstTimers: new Set(), + contributors: new Set(), + team: new Set(), + }; await Promise.all( commitsItems.map(async (commitsItem) => { const searchPullRequestId = commitsItem.commit.message.match(/\(#([0-9]+)\)/); @@ -116,13 +121,31 @@ async function main(argv) { } const { - data: { body: bodyMessage, labels }, + data: { + body: bodyMessage, + labels, + author_association, + user: { login }, + }, } = await octokit.request('GET /repos/{owner}/{repo}/pulls/{pull_number}', { owner: GIT_ORGANIZATION, repo: GIT_REPO, pull_number: Number(searchPullRequestId[1]), }); + switch (author_association) { + case 'CONTRIBUTOR': + community.contributors.add(`@${login}`); + break; + case 'FIRST_TIMER': + community.firstTimers.add(`@${login}`); + break; + case 'MEMBER': + community.team.add(`@${login}`); + break; + default: + } + prsLabelsMap[commitsItem.sha] = labels; if (!bodyMessage) { @@ -264,6 +287,27 @@ async function main(argv) { year: 'numeric', }); + const logCommunitySection = () => { + // TODO: separate first timers and regular contributors + const contributors = [ + ...Array.from(community.contributors), + ...Array.from(community.firstTimers), + ].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())); + if (contributors.length === 0) { + return ''; + } + + return `Special thanks go out to our community contributors who have helped make this release possible:\n${contributors.join(', ')}.`; + }; + + const logTeamSection = () => { + return `Following are all team members who have contributed to this release:\n${Array.from( + community.team, + ) + .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) + .join(', ')}.`; + }; + const changelog = ` ## __VERSION__ @@ -275,6 +319,8 @@ We'd like to offer a big thanks to the ${ TODO INSERT HIGHLIGHTS ${changeLogMessages.length > 0 ? '\n\n' : ''}${changeLogMessages.join('\n')} +${logCommunitySection()} +${logTeamSection()} From c39b7347a96cf13e25d059a691f966daa6fb65ff Mon Sep 17 00:00:00 2001 From: Bilal Shafi Date: Thu, 3 Oct 2024 14:27:08 +0500 Subject: [PATCH 44/48] [DataGridPro] Fix row pre-processing running with a stale data source (#14810) --- .../x-data-grid/src/hooks/features/rows/useGridRows.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/x-data-grid/src/hooks/features/rows/useGridRows.ts b/packages/x-data-grid/src/hooks/features/rows/useGridRows.ts index 775962e697bc..bd89c281f729 100644 --- a/packages/x-data-grid/src/hooks/features/rows/useGridRows.ts +++ b/packages/x-data-grid/src/hooks/features/rows/useGridRows.ts @@ -1,4 +1,5 @@ import * as React from 'react'; +import useLazyRef from '@mui/utils/useLazyRef'; import { GridEventListener } from '../../../models/events'; import { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { GridPrivateApiCommunity } from '../../../models/api/gridApiCommunity'; @@ -73,6 +74,7 @@ export const useGridRows = ( | 'pagination' | 'paginationMode' | 'loading' + | 'unstable_dataSource' >, ): void => { if (process.env.NODE_ENV !== 'production') { @@ -536,15 +538,20 @@ export const useGridRows = ( throttledRowsChange, ]); + const previousDataSource = useLazyRef(() => props.unstable_dataSource); const handleStrategyProcessorChange = React.useCallback< GridEventListener<'activeStrategyProcessorChange'> >( (methodName) => { + if (props.unstable_dataSource && props.unstable_dataSource !== previousDataSource.current) { + previousDataSource.current = props.unstable_dataSource; + return; + } if (methodName === 'rowTreeCreation') { groupRows(); } }, - [groupRows], + [groupRows, previousDataSource, props.unstable_dataSource], ); const handleStrategyActivityChange = React.useCallback< From 978a438c041a0b7fecef03a964d4d6a095871b9b Mon Sep 17 00:00:00 2001 From: Bilal Shafi Date: Fri, 4 Oct 2024 08:48:53 +0500 Subject: [PATCH 45/48] [DataGridPremium] Automatic parents and children selection (#13757) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bilal Shafi Co-authored-by: José Rodolfo Freitas Co-authored-by: Andrew Cherniavskii --- .../RowGroupingPropagateSelection.js | 72 +++ .../RowGroupingPropagateSelection.tsx | 74 +++ .../data-grid/row-grouping/row-grouping.md | 44 ++ docs/data/data-grid/tree-data/tree-data.md | 4 + .../x/api/data-grid/data-grid-premium.json | 4 + docs/pages/x/api/data-grid/data-grid-pro.json | 4 + .../data-grid-premium/data-grid-premium.json | 5 +- .../data-grid-pro/data-grid-pro.json | 5 +- .../src/DataGridPremium/DataGridPremium.tsx | 18 +- .../rowSelection.DataGridPremium.test.tsx | 164 ++++++ .../src/DataGridPro/DataGridPro.tsx | 18 +- .../src/DataGridPro/useDataGridProProps.ts | 7 +- .../tests/rowSelection.DataGridPro.test.tsx | 507 +++++++++++++++++- .../GridCellCheckboxRenderer.tsx | 23 +- .../rowSelection/useGridRowSelection.ts | 235 ++++++-- .../src/hooks/features/rowSelection/utils.ts | 230 +++++++- packages/x-data-grid/src/internals/index.ts | 1 + .../src/models/gridRowSelectionModel.ts | 5 + .../src/models/props/DataGridProps.ts | 16 +- scripts/x-data-grid-premium.exports.json | 1 + scripts/x-data-grid-pro.exports.json | 1 + scripts/x-data-grid.exports.json | 1 + 22 files changed, 1380 insertions(+), 59 deletions(-) create mode 100644 docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.js create mode 100644 docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.tsx create mode 100644 packages/x-data-grid-premium/src/tests/rowSelection.DataGridPremium.test.tsx diff --git a/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.js b/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.js new file mode 100644 index 000000000000..5baa5839b6f8 --- /dev/null +++ b/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.js @@ -0,0 +1,72 @@ +import * as React from 'react'; +import { + DataGridPremium, + useGridApiRef, + useKeepGroupedColumnsHidden, +} from '@mui/x-data-grid-premium'; +import { useMovieData } from '@mui/x-data-grid-generator'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import Stack from '@mui/material/Stack'; + +export default function RowGroupingPropagateSelection() { + const data = useMovieData(); + const apiRef = useGridApiRef(); + const [rowSelectionPropagation, setRowSelectionPropagation] = React.useState({ + parents: true, + descendants: true, + }); + + const initialState = useKeepGroupedColumnsHidden({ + apiRef, + initialState: { + rowGrouping: { + model: ['company', 'director'], + }, + }, + }); + + return ( +
    + + + setRowSelectionPropagation((prev) => ({ + ...prev, + descendants: event.target.checked, + })) + } + /> + } + label="Auto select descendants" + /> + + setRowSelectionPropagation((prev) => ({ + ...prev, + parents: event.target.checked, + })) + } + /> + } + label="Auto select parents" + /> + +
    + +
    +
    + ); +} diff --git a/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.tsx b/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.tsx new file mode 100644 index 000000000000..9229e086666a --- /dev/null +++ b/docs/data/data-grid/row-grouping/RowGroupingPropagateSelection.tsx @@ -0,0 +1,74 @@ +import * as React from 'react'; +import { + DataGridPremium, + useGridApiRef, + useKeepGroupedColumnsHidden, + GridRowSelectionPropagation, +} from '@mui/x-data-grid-premium'; +import { useMovieData } from '@mui/x-data-grid-generator'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import Stack from '@mui/material/Stack'; + +export default function RowGroupingPropagateSelection() { + const data = useMovieData(); + const apiRef = useGridApiRef(); + const [rowSelectionPropagation, setRowSelectionPropagation] = + React.useState({ + parents: true, + descendants: true, + }); + + const initialState = useKeepGroupedColumnsHidden({ + apiRef, + initialState: { + rowGrouping: { + model: ['company', 'director'], + }, + }, + }); + + return ( +
    + + + setRowSelectionPropagation((prev) => ({ + ...prev, + descendants: event.target.checked, + })) + } + /> + } + label="Auto select descendants" + /> + + setRowSelectionPropagation((prev) => ({ + ...prev, + parents: event.target.checked, + })) + } + /> + } + label="Auto select parents" + /> + +
    + +
    +
    + ); +} diff --git a/docs/data/data-grid/row-grouping/row-grouping.md b/docs/data/data-grid/row-grouping/row-grouping.md index 8b387aa8d42b..7e234f5c3632 100644 --- a/docs/data/data-grid/row-grouping/row-grouping.md +++ b/docs/data/data-grid/row-grouping/row-grouping.md @@ -305,6 +305,50 @@ In the example below: If you are dynamically switching the `leafField` or `mainGroupingCriteria`, the sorting and filtering models will not be cleaned up automatically, and the sorting/filtering will not be re-applied. ::: +## Automatic parents and children selection + +By default, selecting a parent row does not select its children. +You can override this behavior by using the `rowSelectionPropagation` prop. + +Here's how it's structured: + +```ts +type GridRowSelectionPropagation = { + descendants?: boolean; // default: false + parents?: boolean; // default: false +}; +``` + +When `rowSelectionPropagation.descendants` is set to `true`. + +- Selecting a parent would auto-select all its filtered descendants. +- Deselecting a parent row would auto-deselect all its filtered descendants. + +When `rowSelectionPropagation.parents` is set to `true`. + +- Selecting all the filtered descendants of a parent would auto-select the parent. +- Deselecting a descendant of a selected parent would auto-deselect the parent. + +The example below demonstrates the usage of the `rowSelectionPropagation` prop. + +{{"demo": "RowGroupingPropagateSelection.js", "bg": "inline", "defaultCodeOpen": false}} + +:::info +The row selection propagation also affects the "Select all" checkbox like any other group checkbox. +::: + +:::info +The selected rows that do not pass the filtering criteria are automatically deselected when the filter is applied. Row selection propagation is not applied to the unfiltered rows. +::: + +:::warning +If `props.disableMultipleRowSelection` is set to `true`, the row selection propagation doesn't apply. +::: + +:::warning +Row selection propagation is a client-side feature and is not supported with the [server-side data source](/x/react-data-grid/server-side-data/). +::: + ## Get the rows in a group You can use the `apiRef.current.getRowGroupChildren` method to get the id of all rows contained in a group. diff --git a/docs/data/data-grid/tree-data/tree-data.md b/docs/data/data-grid/tree-data/tree-data.md index 3af238f688a3..b6c67e6528cb 100644 --- a/docs/data/data-grid/tree-data/tree-data.md +++ b/docs/data/data-grid/tree-data/tree-data.md @@ -87,6 +87,10 @@ If you want to access the grouping column field, for instance, to use it with co Same behavior as for the [Row grouping](/x/react-data-grid/row-grouping/#group-expansion). +## Automatic parents and children selection + +Same behavior as for the [Row grouping](/x/react-data-grid/row-grouping/#automatic-parents-and-children-selection). + ## Gaps in the tree If some entries are missing to build the full tree, the `DataGridPro` will automatically create rows to fill those gaps. diff --git a/docs/pages/x/api/data-grid/data-grid-premium.json b/docs/pages/x/api/data-grid/data-grid-premium.json index 5e824d9e015d..832c3d4eec29 100644 --- a/docs/pages/x/api/data-grid/data-grid-premium.json +++ b/docs/pages/x/api/data-grid/data-grid-premium.json @@ -594,6 +594,10 @@ "description": "Array<number
    | string>
    | number
    | string" } }, + "rowSelectionPropagation": { + "type": { "name": "shape", "description": "{ descendants?: bool, parents?: bool }" }, + "default": "{ parents: false, descendants: false }" + }, "rowsLoadingMode": { "type": { "name": "enum", "description": "'client'
    | 'server'" } }, diff --git a/docs/pages/x/api/data-grid/data-grid-pro.json b/docs/pages/x/api/data-grid/data-grid-pro.json index fa8a22c24d5e..ee04a078942e 100644 --- a/docs/pages/x/api/data-grid/data-grid-pro.json +++ b/docs/pages/x/api/data-grid/data-grid-pro.json @@ -529,6 +529,10 @@ "description": "Array<number
    | string>
    | number
    | string" } }, + "rowSelectionPropagation": { + "type": { "name": "shape", "description": "{ descendants?: bool, parents?: bool }" }, + "default": "{ parents: false, descendants: false }" + }, "rowsLoadingMode": { "type": { "name": "enum", "description": "'client'
    | 'server'" } }, diff --git a/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json b/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json index 6ad9d6baa7aa..a5f876df50d1 100644 --- a/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json +++ b/docs/translations/api-docs/data-grid/data-grid-premium/data-grid-premium.json @@ -187,7 +187,7 @@ "groupingColDef": { "description": "The grouping column used by the tree data." }, "headerFilterHeight": { "description": "Override the height of the header filters." }, "headerFilters": { - "description": "If true, enables the data grid filtering on header feature." + "description": "If true, the header filters feature is enabled." }, "hideFooter": { "description": "If true, the footer component is hidden." }, "hideFooterPagination": { @@ -610,6 +610,9 @@ "rows": { "description": "Set of rows of type GridRowsProp." }, "rowSelection": { "description": "If false, the row selection mode is disabled." }, "rowSelectionModel": { "description": "Sets the row selection model of the Data Grid." }, + "rowSelectionPropagation": { + "description": "When rowSelectionPropagation.descendants is set to true. - Selecting a parent will auto-select all its filtered descendants. - Deselecting a parent will auto-deselect all its filtered descendants.
    When rowSelectionPropagation.parents=true - Selecting all descendants of a parent would auto-select it. - Deselecting a descendant of a selected parent would deselect the parent.
    Works with tree data and row grouping on the client-side only." + }, "rowsLoadingMode": { "description": "Loading rows can be processed on the server or client-side. Set it to 'client' if you would like enable infnite loading. Set it to 'server' if you would like to enable lazy loading. * @default "client"" }, diff --git a/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json b/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json index dd8849adea65..3e24702b10cd 100644 --- a/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json +++ b/docs/translations/api-docs/data-grid/data-grid-pro/data-grid-pro.json @@ -168,7 +168,7 @@ "groupingColDef": { "description": "The grouping column used by the tree data." }, "headerFilterHeight": { "description": "Override the height of the header filters." }, "headerFilters": { - "description": "If true, enables the data grid filtering on header feature." + "description": "If true, the header filters feature is enabled." }, "hideFooter": { "description": "If true, the footer component is hidden." }, "hideFooterPagination": { @@ -552,6 +552,9 @@ "rows": { "description": "Set of rows of type GridRowsProp." }, "rowSelection": { "description": "If false, the row selection mode is disabled." }, "rowSelectionModel": { "description": "Sets the row selection model of the Data Grid." }, + "rowSelectionPropagation": { + "description": "When rowSelectionPropagation.descendants is set to true. - Selecting a parent will auto-select all its filtered descendants. - Deselecting a parent will auto-deselect all its filtered descendants.
    When rowSelectionPropagation.parents=true - Selecting all descendants of a parent would auto-select it. - Deselecting a descendant of a selected parent would deselect the parent.
    Works with tree data and row grouping on the client-side only." + }, "rowsLoadingMode": { "description": "Loading rows can be processed on the server or client-side. Set it to 'client' if you would like enable infnite loading. Set it to 'server' if you would like to enable lazy loading. * @default "client"" }, diff --git a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx index 46e1fcd78fbb..4df3406d73a3 100644 --- a/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx +++ b/packages/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx @@ -439,7 +439,7 @@ DataGridPremiumRaw.propTypes = { */ headerFilterHeight: PropTypes.number, /** - * If `true`, enables the data grid filtering on header feature. + * If `true`, the header filters feature is enabled. * @default false */ headerFilters: PropTypes.bool, @@ -985,6 +985,22 @@ DataGridPremiumRaw.propTypes = { PropTypes.number, PropTypes.string, ]), + /** + * When `rowSelectionPropagation.descendants` is set to `true`. + * - Selecting a parent will auto-select all its filtered descendants. + * - Deselecting a parent will auto-deselect all its filtered descendants. + * + * When `rowSelectionPropagation.parents=true` + * - Selecting all descendants of a parent would auto-select it. + * - Deselecting a descendant of a selected parent would deselect the parent. + * + * Works with tree data and row grouping on the client-side only. + * @default { parents: false, descendants: false } + */ + rowSelectionPropagation: PropTypes.shape({ + descendants: PropTypes.bool, + parents: PropTypes.bool, + }), /** * Loading rows can be processed on the server or client-side. * Set it to 'client' if you would like enable infnite loading. diff --git a/packages/x-data-grid-premium/src/tests/rowSelection.DataGridPremium.test.tsx b/packages/x-data-grid-premium/src/tests/rowSelection.DataGridPremium.test.tsx new file mode 100644 index 000000000000..d330b84ebd8c --- /dev/null +++ b/packages/x-data-grid-premium/src/tests/rowSelection.DataGridPremium.test.tsx @@ -0,0 +1,164 @@ +import * as React from 'react'; +import { createRenderer, fireEvent } from '@mui/internal-test-utils'; +import { getCell } from 'test/utils/helperFn'; +import { expect } from 'chai'; +import { + DataGridPremium, + DataGridPremiumProps, + GridApi, + GridRowsProp, + useGridApiRef, +} from '@mui/x-data-grid-premium'; + +const isJSDOM = /jsdom/.test(window.navigator.userAgent); + +interface BaselineProps extends DataGridPremiumProps { + rows: GridRowsProp; +} + +const rows: GridRowsProp = [ + { id: 0, category1: 'Cat A', category2: 'Cat 1' }, + { id: 1, category1: 'Cat A', category2: 'Cat 2' }, + { id: 2, category1: 'Cat A', category2: 'Cat 2' }, + { id: 3, category1: 'Cat B', category2: 'Cat 2' }, + { id: 4, category1: 'Cat B', category2: 'Cat 1' }, +]; + +const baselineProps: BaselineProps = { + autoHeight: isJSDOM, + disableVirtualization: true, + rows, + columns: [ + { + field: 'id', + type: 'number', + }, + { + field: 'category1', + }, + { + field: 'category2', + }, + ], +}; + +describe(' - Row selection', () => { + const { render } = createRenderer(); + + describe('props: rowSelectionPropagation = { descendants: true, parents: true }', () => { + let apiRef: React.MutableRefObject; + + function Test(props: Partial) { + apiRef = useGridApiRef(); + + return ( +
    + +
    + ); + } + + it('should select all the children when selecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([ + 'auto-generated-row-category1/Cat B', + 3, + 4, + ]); + }); + + it('should deselect all the children when deselecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([ + 'auto-generated-row-category1/Cat B', + 3, + 4, + ]); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + + it('should auto select the parent if all the children are selected', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([ + 0, + 1, + 2, + 'auto-generated-row-category1/Cat A', + ]); + }); + + it('should deselect auto selected parent if one of the children is deselected', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([ + 0, + 1, + 2, + 'auto-generated-row-category1/Cat A', + ]); + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([0, 2]); + }); + + describe("prop: indeterminateCheckboxAction = 'select'", () => { + it('should select all the children when selecting an indeterminate parent', () => { + render( + , + ); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(getCell(0, 0).querySelector('input')!).to.have.attr('data-indeterminate', 'true'); + fireEvent.click(getCell(0, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([ + 0, + 1, + 2, + 'auto-generated-row-category1/Cat A', + ]); + }); + }); + + describe("prop: indeterminateCheckboxAction = 'deselect'", () => { + it('should deselect all the children when selecting an indeterminate parent', () => { + render( + , + ); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(getCell(0, 0).querySelector('input')!).to.have.attr('data-indeterminate', 'true'); + fireEvent.click(getCell(0, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + }); + }); +}); diff --git a/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx b/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx index 022003ef5d6d..cc4801eda0c9 100644 --- a/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx +++ b/packages/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx @@ -394,7 +394,7 @@ DataGridProRaw.propTypes = { */ headerFilterHeight: PropTypes.number, /** - * If `true`, enables the data grid filtering on header feature. + * If `true`, the header filters feature is enabled. * @default false */ headerFilters: PropTypes.bool, @@ -891,6 +891,22 @@ DataGridProRaw.propTypes = { PropTypes.number, PropTypes.string, ]), + /** + * When `rowSelectionPropagation.descendants` is set to `true`. + * - Selecting a parent will auto-select all its filtered descendants. + * - Deselecting a parent will auto-deselect all its filtered descendants. + * + * When `rowSelectionPropagation.parents=true` + * - Selecting all descendants of a parent would auto-select it. + * - Deselecting a descendant of a selected parent would deselect the parent. + * + * Works with tree data and row grouping on the client-side only. + * @default { parents: false, descendants: false } + */ + rowSelectionPropagation: PropTypes.shape({ + descendants: PropTypes.bool, + parents: PropTypes.bool, + }), /** * Loading rows can be processed on the server or client-side. * Set it to 'client' if you would like enable infnite loading. diff --git a/packages/x-data-grid-pro/src/DataGridPro/useDataGridProProps.ts b/packages/x-data-grid-pro/src/DataGridPro/useDataGridProProps.ts index 0149f1a482f3..a54285727759 100644 --- a/packages/x-data-grid-pro/src/DataGridPro/useDataGridProProps.ts +++ b/packages/x-data-grid-pro/src/DataGridPro/useDataGridProProps.ts @@ -5,7 +5,11 @@ import { DATA_GRID_PROPS_DEFAULT_VALUES, GridValidRowModel, } from '@mui/x-data-grid'; -import { computeSlots, useProps } from '@mui/x-data-grid/internals'; +import { + computeSlots, + useProps, + ROW_SELECTION_PROPAGATION_DEFAULT, +} from '@mui/x-data-grid/internals'; import { DataGridProProps, DataGridProProcessedProps, @@ -46,6 +50,7 @@ export const DATA_GRID_PRO_PROPS_DEFAULT_VALUES: DataGridProPropsWithDefaultValu getDetailPanelHeight: () => 500, headerFilters: false, keepColumnPositionIfDraggedOutside: false, + rowSelectionPropagation: ROW_SELECTION_PROPAGATION_DEFAULT, rowReordering: false, rowsLoadingMode: 'client', scrollEndThreshold: 80, diff --git a/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx b/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx index f878b572a3c5..23994a6684d0 100644 --- a/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx +++ b/packages/x-data-grid-pro/src/tests/rowSelection.DataGridPro.test.tsx @@ -9,6 +9,8 @@ import { DataGridPro, DataGridProProps, GridRowSelectionModel, + GridRowsProp, + GridColDef, } from '@mui/x-data-grid-pro'; import { getBasicGridData } from '@mui/x-data-grid-generator'; @@ -44,6 +46,161 @@ describe(' - Row selection', () => { ); } + const rows: GridRowsProp = [ + { + hierarchy: ['Sarah'], + jobTitle: 'Head of Human Resources', + recruitmentDate: new Date(2020, 8, 12), + id: 0, + }, + { + hierarchy: ['Thomas'], + jobTitle: 'Head of Sales', + recruitmentDate: new Date(2017, 3, 4), + id: 1, + }, + { + hierarchy: ['Thomas', 'Robert'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 11, 20), + id: 2, + }, + { + hierarchy: ['Thomas', 'Karen'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 10, 14), + id: 3, + }, + { + hierarchy: ['Thomas', 'Nancy'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2017, 10, 29), + id: 4, + }, + { + hierarchy: ['Thomas', 'Daniel'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 7, 21), + id: 5, + }, + { + hierarchy: ['Thomas', 'Christopher'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2020, 7, 20), + id: 6, + }, + { + hierarchy: ['Thomas', 'Donald'], + jobTitle: 'Sales Person', + recruitmentDate: new Date(2019, 6, 28), + id: 7, + }, + { + hierarchy: ['Mary'], + jobTitle: 'Head of Engineering', + recruitmentDate: new Date(2016, 3, 14), + id: 8, + }, + { + hierarchy: ['Mary', 'Jennifer'], + jobTitle: 'Tech lead front', + recruitmentDate: new Date(2016, 5, 17), + id: 9, + }, + { + hierarchy: ['Mary', 'Jennifer', 'Anna'], + jobTitle: 'Front-end developer', + recruitmentDate: new Date(2019, 11, 7), + id: 10, + }, + { + hierarchy: ['Mary', 'Michael'], + jobTitle: 'Tech lead devops', + recruitmentDate: new Date(2021, 7, 1), + id: 11, + }, + { + hierarchy: ['Mary', 'Linda'], + jobTitle: 'Tech lead back', + recruitmentDate: new Date(2017, 0, 12), + id: 12, + }, + { + hierarchy: ['Mary', 'Linda', 'Elizabeth'], + jobTitle: 'Back-end developer', + recruitmentDate: new Date(2019, 2, 22), + id: 13, + }, + { + hierarchy: ['Mary', 'Linda', 'William'], + jobTitle: 'Back-end developer', + recruitmentDate: new Date(2018, 4, 19), + id: 14, + }, + ]; + + const columns: GridColDef[] = [ + { field: 'jobTitle', headerName: 'Job Title', width: 200 }, + { + field: 'recruitmentDate', + headerName: 'Recruitment Date', + type: 'date', + width: 150, + }, + ]; + + const getTreeDataPath: DataGridProProps['getTreeDataPath'] = (row) => row.hierarchy; + + function TreeDataGrid(props: Partial) { + apiRef = useGridApiRef(); + return ( +
    + +
    + ); + } + + it('should keep the previously selected tree data parent selected if it becomes leaf after filtering', () => { + render(); + + fireEvent.click( + screen.getByRole('checkbox', { + name: /select all rows/i, + }), + ); + + expect(apiRef.current.getSelectedRows()).to.have.length(15); + + act(() => { + apiRef.current.setFilterModel({ + items: [ + { + field: 'jobTitle', + value: 'Head of Sales', + operator: 'equals', + }, + ], + }); + }); + + expect(apiRef.current.getSelectedRows()).to.have.keys([1]); + }); + + it('should put the parent into indeterminate if some but not all the children are selected', () => { + render(); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(getCell(1, 0).querySelector('input')!).to.have.attr('data-indeterminate', 'true'); + }); + describe('prop: checkboxSelectionVisibleOnly = false', () => { it('should select all rows of all pages if no row is selected', () => { render( @@ -221,16 +378,14 @@ describe(' - Row selection', () => { const data = React.useMemo(() => getBasicGridData(rowLength, 2), [rowLength]); - const rows = data.rows.slice( - paginationModel.pageSize * paginationModel.page, - paginationModel.pageSize * (paginationModel.page + 1), - ); - return (
    - Row selection', () => { }); }); + describe('prop: rowSelectionPropagation = { descendants: false, parents: false }', () => { + function SelectionPropagationGrid(props: Partial) { + return ( + + ); + } + + it('should select the parent only when selecting it', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1]); + }); + + it('should deselect the parent only when deselecting it', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2]); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([2]); + }); + + it('should not auto select the parent if all the children are selected', () => { + render(); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should not be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([2, 3, 4, 5, 6, 7]); + }); + + it('should not deselect selected parent if one of the children is deselected', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + fireEvent.click(getCell(2, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should still be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 3, 4, 5, 6, 7]); + }); + + it('should select only the unwrapped rows when clicking "Select All" checkbox', () => { + render(); + + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows()).to.have.keys([0, 1, 8]); + }); + + it('should deselect only the unwrapped rows when clicking "Select All" checkbox', () => { + render(); + + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows()).to.have.keys([0, 1, 8]); + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + }); + + describe('prop: rowSelectionPropagation = { descendants: true, parents: false }', () => { + function SelectionPropagationGrid(props: Partial) { + return ( + + ); + } + + it('should select all the children when selecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + }); + + it('should deselect all the children when deselecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + + it('should not auto select the parent if all the children are selected', () => { + render(); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should not be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([2, 3, 4, 5, 6, 7]); + }); + + it('should not deselect selected parent if one of the children is deselected', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + fireEvent.click(getCell(2, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should still be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 3, 4, 5, 6, 7]); + }); + + it('should select all the nested rows when clicking "Select All" checkbox', () => { + render(); + + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows().size).to.equal(15); + }); + + it('should deselect all the nested rows when clicking "Select All" checkbox', () => { + render(); + + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows().size).to.equal(15); + fireEvent.click(screen.getByRole('checkbox', { name: /select all rows/i })); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + + describe('prop: isRowSelectable', () => { + it("should not select a parent or it's descendants if not allowed", () => { + render( + params.id !== 1} + />, + ); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + + it('should not auto-select a descendant if not allowed', () => { + render( + params.id !== 2} + />, + ); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 3, 4, 5, 6, 7]); + }); + }); + }); + + describe('prop: rowSelectionPropagation = { descendants: false, parents: true }', () => { + function SelectionPropagationGrid(props: Partial) { + return ( + + ); + } + + it('should select the parent only when selecting it', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1]); + }); + + it('should deselect the parent only when deselecting it', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2]); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([2]); + }); + + it('should auto select the parent if all the children are selected', () => { + render(); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([2, 3, 4, 5, 6, 7, 1]); + }); + + it('should deselect selected parent if one of the children is deselected', () => { + render(); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([2, 3, 4, 5, 6, 7, 1]); + fireEvent.click(getCell(2, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should not be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([3, 4, 5, 6, 7]); + }); + + describe('prop: isRowSelectable', () => { + it('should not auto select a parent if not allowed', () => { + render( + params.id !== 1} + />, + ); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + fireEvent.click(getCell(3, 0).querySelector('input')!); + fireEvent.click(getCell(4, 0).querySelector('input')!); + fireEvent.click(getCell(5, 0).querySelector('input')!); + fireEvent.click(getCell(6, 0).querySelector('input')!); + fireEvent.click(getCell(7, 0).querySelector('input')!); + // The parent row (Thomas, id: 1) should still not be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([2, 3, 4, 5, 6, 7]); + }); + }); + }); + + describe('prop: rowSelectionPropagation = { descendants: true, parents: true }', () => { + function SelectionPropagationGrid(props: Partial) { + return ( + + ); + } + + it('should select all the children when selecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + }); + + it('should deselect all the children when deselecting a parent', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + + it('should auto select the parent if all the children are selected', () => { + render(); + + fireEvent.click(getCell(9, 0).querySelector('input')!); + fireEvent.click(getCell(11, 0).querySelector('input')!); + fireEvent.click(getCell(12, 0).querySelector('input')!); + + // The parent row (Mary, id: 8) should be among the selected rows + expect(apiRef.current.getSelectedRows()).to.have.keys([9, 10, 11, 12, 8, 13, 14]); + }); + + it('should deselect auto selected parent if one of the children is deselected', () => { + render(); + + fireEvent.click(getCell(9, 0).querySelector('input')!); + fireEvent.click(getCell(11, 0).querySelector('input')!); + fireEvent.click(getCell(12, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([9, 10, 11, 12, 8, 13, 14]); + fireEvent.click(getCell(9, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([11, 12, 13, 14]); + }); + + describe("prop: indeterminateCheckboxAction = 'select'", () => { + it('should select all the children when selecting an indeterminate parent', () => { + render( + , + ); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(getCell(1, 0).querySelector('input')!).to.have.attr('data-indeterminate', 'true'); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + }); + }); + + describe("prop: indeterminateCheckboxAction = 'deselect'", () => { + it('should deselect all the children when selecting an indeterminate parent', () => { + render( + , + ); + + fireEvent.click(getCell(2, 0).querySelector('input')!); + expect(getCell(1, 0).querySelector('input')!).to.have.attr('data-indeterminate', 'true'); + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows().size).to.equal(0); + }); + }); + + describe('prop: keepNonExistentRowsSelected = true', () => { + it('should keep non-existent rows selected on filtering', () => { + render(); + + fireEvent.click(getCell(1, 0).querySelector('input')!); + expect(apiRef.current.getSelectedRows()).to.have.keys([1, 2, 3, 4, 5, 6, 7]); + + act(() => { + apiRef.current.setFilterModel({ + items: [ + { + field: 'jobTitle', + value: 'Head of Human Resources', + operator: 'equals', + }, + ], + }); + }); + + fireEvent.click(getCell(0, 0).querySelector('input')!); + + expect(apiRef.current.getSelectedRows()).to.have.keys([0, 1, 2, 3, 4, 5, 6, 7]); + }); + }); + }); + describe('apiRef: getSelectedRows', () => { it('should handle the event internally before triggering onRowSelectionModelChange', () => { render( diff --git a/packages/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx b/packages/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx index 377713f3bb3b..5bfadd9b96f7 100644 --- a/packages/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx +++ b/packages/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx @@ -4,12 +4,14 @@ import { unstable_composeClasses as composeClasses, unstable_useForkRef as useForkRef, } from '@mui/utils'; -import type { GridRenderCellParams } from '../../models/params/gridCellParams'; import { useGridApiContext } from '../../hooks/utils/useGridApiContext'; import { useGridRootProps } from '../../hooks/utils/useGridRootProps'; import { getDataGridUtilityClass } from '../../constants/gridClasses'; +import { useGridSelector } from '../../hooks/utils/useGridSelector'; +import { getCheckboxPropsSelector } from '../../hooks/features/rowSelection/utils'; import type { DataGridProcessedProps } from '../../models/props/DataGridProps'; import type { GridRowSelectionCheckboxParams } from '../../models/params/gridRowSelectionCheckboxParams'; +import type { GridRenderCellParams } from '../../models/params/gridCellParams'; type OwnerState = { classes: DataGridProcessedProps['classes'] }; @@ -32,7 +34,6 @@ const GridCellCheckboxForwardRef = React.forwardRef, ): void => { const logger = useGridLogger(apiRef, 'useGridSelection'); - const runIfRowSelectionIsEnabled = + const runIfRowSelectionIsEnabled = React.useCallback( (callback: (...args: Args) => void) => - (...args: Args) => { - if (props.rowSelection) { - callback(...args); - } - }; + (...args: Args) => { + if (props.rowSelection) { + callback(...args); + } + }, + [props.rowSelection], + ); + + const applyAutoSelection = + props.signature !== GridSignature.DataGrid && + (props.rowSelectionPropagation?.parents || props.rowSelectionPropagation?.descendants); const propRowSelectionModel = React.useMemo(() => { return getSelectionModelPropValue( @@ -120,6 +129,8 @@ export const useGridRowSelection = ( const canHaveMultipleSelection = isMultipleRowSelectionEnabled(props); const visibleRows = useGridVisibleRows(apiRef, props); + const tree = useGridSelector(apiRef, gridRowTreeSelector); + const isNestedData = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector) > 1; const expandMouseRowRangeSelection = React.useCallback( (id: GridRowId) => { @@ -147,7 +158,7 @@ export const useGridRowSelection = ( [apiRef], ); - /** + /* * API METHODS */ const setRowSelectionModel = React.useCallback( @@ -219,24 +230,77 @@ export const useGridRowSelection = ( if (resetSelection) { logger.debug(`Setting selection for row ${id}`); - apiRef.current.setRowSelectionModel(isSelected ? [id] : []); + const newSelection: GridRowId[] = []; + const addRow = (rowId: GridRowId) => { + newSelection.push(rowId); + }; + if (isSelected) { + addRow(id); + if (applyAutoSelection) { + findRowsToSelect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + addRow, + ); + } + } + + apiRef.current.setRowSelectionModel(newSelection); } else { logger.debug(`Toggling selection for row ${id}`); const selection = gridRowSelectionStateSelector(apiRef.current.state); - const newSelection: GridRowId[] = selection.filter((el) => el !== id); + const newSelection: Set = new Set(selection); + newSelection.delete(id); + + const addRow = (rowId: GridRowId) => { + newSelection.add(rowId); + }; + const removeRow = (rowId: GridRowId) => { + newSelection.delete(rowId); + }; if (isSelected) { - newSelection.push(id); + addRow(id); + if (applyAutoSelection) { + findRowsToSelect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + addRow, + ); + } + } else if (applyAutoSelection) { + findRowsToDeselect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + removeRow, + ); } - const isSelectionValid = newSelection.length < 2 || canHaveMultipleSelection; + const isSelectionValid = newSelection.size < 2 || canHaveMultipleSelection; if (isSelectionValid) { - apiRef.current.setRowSelectionModel(newSelection); + apiRef.current.setRowSelectionModel(Array.from(newSelection)); } } }, - [apiRef, logger, canHaveMultipleSelection], + [ + apiRef, + logger, + applyAutoSelection, + tree, + props.rowSelectionPropagation?.descendants, + props.rowSelectionPropagation?.parents, + canHaveMultipleSelection, + ], ); const selectRows = React.useCallback( @@ -247,18 +311,63 @@ export const useGridRowSelection = ( let newSelection: GridRowId[]; if (resetSelection) { - newSelection = isSelected ? selectableIds : []; + if (isSelected) { + newSelection = selectableIds; + if (applyAutoSelection) { + const addRow = (rowId: GridRowId) => { + newSelection.push(rowId); + }; + selectableIds.forEach((id) => { + findRowsToSelect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + addRow, + ); + }); + } + } else { + newSelection = []; + } } else { // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project const selectionLookup = { ...selectedIdsLookupSelector(apiRef), }; + const addRow = (rowId: GridRowId) => { + selectionLookup[rowId] = rowId; + }; + const removeRow = (rowId: GridRowId) => { + delete selectionLookup[rowId]; + }; selectableIds.forEach((id) => { if (isSelected) { selectionLookup[id] = id; + if (applyAutoSelection) { + findRowsToSelect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + addRow, + ); + } } else { - delete selectionLookup[id]; + removeRow(id); + if (applyAutoSelection) { + findRowsToDeselect( + apiRef, + tree, + id, + props.rowSelectionPropagation?.descendants ?? false, + props.rowSelectionPropagation?.parents ?? false, + removeRow, + ); + } } }); @@ -270,7 +379,15 @@ export const useGridRowSelection = ( apiRef.current.setRowSelectionModel(newSelection); } }, - [apiRef, logger, canHaveMultipleSelection], + [ + logger, + applyAutoSelection, + canHaveMultipleSelection, + apiRef, + tree, + props.rowSelectionPropagation?.descendants, + props.rowSelectionPropagation?.parents, + ], ); const selectRowRange = React.useCallback( @@ -322,31 +439,63 @@ export const useGridRowSelection = ( props.signature === GridSignature.DataGrid ? 'private' : 'public', ); - /** + /* * EVENTS */ - const removeOutdatedSelection = React.useCallback(() => { - if (props.keepNonExistentRowsSelected) { - return; - } - const currentSelection = gridRowSelectionStateSelector(apiRef.current.state); - const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); - - // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project - const selectionLookup = { ...selectedIdsLookupSelector(apiRef) }; + const removeOutdatedSelection = React.useCallback( + (sortModelUpdated = false) => { + const currentSelection = gridRowSelectionStateSelector(apiRef.current.state); + const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); + + // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project + const selectionLookup = { ...selectedIdsLookupSelector(apiRef) }; + + let hasChanged = false; + currentSelection.forEach((id: GridRowId) => { + if (filteredRowsLookup[id] === false) { + if (props.keepNonExistentRowsSelected) { + return; + } + delete selectionLookup[id]; + hasChanged = true; + return; + } + if (!props.rowSelectionPropagation?.parents) { + return; + } + const node = tree[id]; + if (node.type === 'group') { + const isAutoGenerated = (node as GridGroupNode).isAutoGenerated; + if (isAutoGenerated) { + delete selectionLookup[id]; + hasChanged = true; + return; + } + // Keep previously selected tree data parents selected if all their children are filtered out + if (!node.children.every((childId) => filteredRowsLookup[childId] === false)) { + delete selectionLookup[id]; + hasChanged = true; + } + } + }); - let hasChanged = false; - currentSelection.forEach((id: GridRowId) => { - if (!filteredRowsLookup[id]) { - delete selectionLookup[id]; - hasChanged = true; + if (hasChanged || (isNestedData && !sortModelUpdated)) { + const newSelection = Object.values(selectionLookup); + if (isNestedData) { + apiRef.current.selectRows(newSelection, true, true); + } else { + apiRef.current.setRowSelectionModel(newSelection); + } } - }); - - if (hasChanged) { - apiRef.current.setRowSelectionModel(Object.values(selectionLookup)); - } - }, [apiRef, props.keepNonExistentRowsSelected]); + }, + [ + apiRef, + isNestedData, + props.rowSelectionPropagation?.parents, + props.keepNonExistentRowsSelected, + tree, + ], + ); const handleSingleRowSelection = React.useCallback( (id: GridRowId, event: React.MouseEvent | React.KeyboardEvent) => { @@ -535,7 +684,7 @@ export const useGridRowSelection = ( useGridApiEventHandler( apiRef, 'sortedRowsSet', - runIfRowSelectionIsEnabled(removeOutdatedSelection), + runIfRowSelectionIsEnabled(() => removeOutdatedSelection(true)), ); useGridApiEventHandler( apiRef, @@ -560,7 +709,7 @@ export const useGridRowSelection = ( ); useGridApiEventHandler(apiRef, 'cellKeyDown', runIfRowSelectionIsEnabled(handleCellKeyDown)); - /** + /* * EFFECTS */ React.useEffect(() => { @@ -604,4 +753,8 @@ export const useGridRowSelection = ( apiRef.current.setRowSelectionModel([]); } }, [apiRef, canHaveMultipleSelection, checkboxSelection, isStateControlled, props.rowSelection]); + + React.useEffect(() => { + runIfRowSelectionIsEnabled(removeOutdatedSelection); + }, [removeOutdatedSelection, runIfRowSelectionIsEnabled]); }; diff --git a/packages/x-data-grid/src/hooks/features/rowSelection/utils.ts b/packages/x-data-grid/src/hooks/features/rowSelection/utils.ts index 908dc4260d1e..ba1ff85f77be 100644 --- a/packages/x-data-grid/src/hooks/features/rowSelection/utils.ts +++ b/packages/x-data-grid/src/hooks/features/rowSelection/utils.ts @@ -1,5 +1,102 @@ -import type { DataGridProcessedProps } from '../../../models/props/DataGridProps'; import { GridSignature } from '../../utils/useGridApiEventHandler'; +import { GRID_ROOT_GROUP_ID } from '../rows/gridRowsUtils'; +import { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector'; +import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector'; +import { selectedIdsLookupSelector } from './gridRowSelectionSelector'; +import { gridRowTreeSelector } from '../rows/gridRowsSelector'; +import { createSelector } from '../../../utils/createSelector'; +import type { GridGroupNode, GridRowId, GridRowTreeConfig } from '../../../models/gridRows'; +import type { DataGridProcessedProps } from '../../../models/props/DataGridProps'; +import type { + GridPrivateApiCommunity, + GridApiCommunity, +} from '../../../models/api/gridApiCommunity'; +import type { GridRowSelectionPropagation } from '../../../models/gridRowSelectionModel'; + +export const ROW_SELECTION_PROPAGATION_DEFAULT: GridRowSelectionPropagation = { + parents: false, + descendants: false, +}; + +function getGridRowGroupSelectableDescendants( + apiRef: React.MutableRefObject, + groupId: GridRowId, +) { + const rowTree = gridRowTreeSelector(apiRef); + const sortedRowIds = gridSortedRowIdsSelector(apiRef); + const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); + const groupNode = rowTree[groupId]; + if (!groupNode || groupNode.type !== 'group') { + return []; + } + + const descendants: GridRowId[] = []; + + const startIndex = sortedRowIds.findIndex((id) => id === groupId) + 1; + for ( + let index = startIndex; + index < sortedRowIds.length && rowTree[sortedRowIds[index]]?.depth > groupNode.depth; + index += 1 + ) { + const id = sortedRowIds[index]; + if (filteredRowsLookup[id] !== false && apiRef.current.isRowSelectable(id)) { + descendants.push(id); + } + } + return descendants; +} + +// TODO v8: Use `createSelectorV8` +export function getCheckboxPropsSelector(groupId: GridRowId, autoSelectParents: boolean) { + return createSelector( + gridRowTreeSelector, + gridSortedRowIdsSelector, + gridFilteredRowsLookupSelector, + selectedIdsLookupSelector, + (rowTree, sortedRowIds, filteredRowsLookup, rowSelectionLookup) => { + const groupNode = rowTree[groupId]; + if (!groupNode || groupNode.type !== 'group') { + return { + isIndeterminate: false, + isChecked: rowSelectionLookup[groupId] === groupId, + }; + } + + if (rowSelectionLookup[groupId] === groupId) { + return { + isIndeterminate: false, + isChecked: true, + }; + } + + let selectableDescendentsCount = 0; + let selectedDescendentsCount = 0; + const startIndex = sortedRowIds.findIndex((id) => id === groupId) + 1; + for ( + let index = startIndex; + index < sortedRowIds.length && rowTree[sortedRowIds[index]]?.depth > groupNode.depth; + index += 1 + ) { + const id = sortedRowIds[index]; + if (filteredRowsLookup[id] !== false) { + selectableDescendentsCount += 1; + if (rowSelectionLookup[id] !== undefined) { + selectedDescendentsCount += 1; + } + } + } + return { + isIndeterminate: + (selectedDescendentsCount > 0 && selectedDescendentsCount < selectableDescendentsCount) || + (selectedDescendentsCount === selectableDescendentsCount && + rowSelectionLookup[groupId] === undefined), + isChecked: autoSelectParents + ? selectedDescendentsCount > 0 + : rowSelectionLookup[groupId] === groupId, + }; + }, + ); +} export function isMultipleRowSelectionEnabled( props: Pick< @@ -13,3 +110,134 @@ export function isMultipleRowSelectionEnabled( } return !props.disableMultipleRowSelection; } + +const getRowNodeParents = (tree: GridRowTreeConfig, id: GridRowId) => { + const parents: GridRowId[] = []; + + let parent: GridRowId | null = id; + + while (parent != null && parent !== GRID_ROOT_GROUP_ID) { + const node = tree[parent] as GridGroupNode; + if (!node) { + return parents; + } + parents.push(parent); + parent = node.parent; + } + return parents; +}; + +const getFilteredRowNodeSiblings = ( + tree: GridRowTreeConfig, + filteredRows: Record, + id: GridRowId, +) => { + const node = tree[id]; + if (!node) { + return []; + } + + const parent = node.parent; + if (parent == null) { + return []; + } + + const parentNode = tree[parent] as GridGroupNode; + + return parentNode.children.filter((childId) => childId !== id && filteredRows[childId]); +}; + +export const findRowsToSelect = ( + apiRef: React.MutableRefObject, + tree: GridRowTreeConfig, + selectedRow: GridRowId, + autoSelectDescendants: boolean, + autoSelectParents: boolean, + addRow: (rowId: GridRowId) => void, +) => { + const filteredRows = gridFilteredRowsLookupSelector(apiRef); + const selectedIdsLookup = selectedIdsLookupSelector(apiRef); + const selectedDescendants: Set = new Set([]); + + if (!autoSelectDescendants && !autoSelectParents) { + return; + } + + if (autoSelectDescendants) { + const rowNode = tree[selectedRow]; + + if (rowNode?.type === 'group') { + const descendants = getGridRowGroupSelectableDescendants(apiRef, selectedRow); + descendants.forEach((rowId) => { + addRow(rowId); + selectedDescendants.add(rowId); + }); + } + } + + if (autoSelectParents) { + const checkAllDescendantsSelected = (rowId: GridRowId): boolean => { + if (selectedIdsLookup[rowId] !== rowId && !selectedDescendants.has(rowId)) { + return false; + } + const node = tree[rowId]; + if (node?.type !== 'group') { + return true; + } + return node.children.every(checkAllDescendantsSelected); + }; + + const traverseParents = (rowId: GridRowId) => { + const siblings: GridRowId[] = getFilteredRowNodeSiblings(tree, filteredRows, rowId); + if (siblings.length === 0 || siblings.every(checkAllDescendantsSelected)) { + const rowNode = tree[rowId] as GridGroupNode; + const parent = rowNode.parent; + if ( + parent != null && + parent !== GRID_ROOT_GROUP_ID && + apiRef.current.isRowSelectable(parent) + ) { + addRow(parent); + selectedDescendants.add(parent); + traverseParents(parent); + } + } + }; + traverseParents(selectedRow); + } +}; + +export const findRowsToDeselect = ( + apiRef: React.MutableRefObject, + tree: GridRowTreeConfig, + deselectedRow: GridRowId, + autoSelectDescendants: boolean, + autoSelectParents: boolean, + removeRow: (rowId: GridRowId) => void, +) => { + const selectedIdsLookup = selectedIdsLookupSelector(apiRef); + + if (!autoSelectParents && !autoSelectDescendants) { + return; + } + + if (autoSelectParents) { + const allParents = getRowNodeParents(tree, deselectedRow); + allParents.forEach((parent) => { + const isSelected = selectedIdsLookup[parent] === parent; + if (isSelected) { + removeRow(parent); + } + }); + } + + if (autoSelectDescendants) { + const rowNode = tree[deselectedRow]; + if (rowNode?.type === 'group') { + const descendants = getGridRowGroupSelectableDescendants(apiRef, deselectedRow); + descendants.forEach((descendant) => { + removeRow(descendant); + }); + } + } +}; diff --git a/packages/x-data-grid/src/internals/index.ts b/packages/x-data-grid/src/internals/index.ts index 6d0b8e5b91b6..7463a879c2f6 100644 --- a/packages/x-data-grid/src/internals/index.ts +++ b/packages/x-data-grid/src/internals/index.ts @@ -133,6 +133,7 @@ export { useGridColumnResize, columnResizeStateInitializer, } from '../hooks/features/columnResize/useGridColumnResize'; +export { ROW_SELECTION_PROPAGATION_DEFAULT } from '../hooks/features/rowSelection/utils'; export { useTimeout } from '../hooks/utils/useTimeout'; export { useGridVisibleRows, getVisibleRows } from '../hooks/utils/useGridVisibleRows'; diff --git a/packages/x-data-grid/src/models/gridRowSelectionModel.ts b/packages/x-data-grid/src/models/gridRowSelectionModel.ts index 599d21df8b8f..92b98a2b8dca 100644 --- a/packages/x-data-grid/src/models/gridRowSelectionModel.ts +++ b/packages/x-data-grid/src/models/gridRowSelectionModel.ts @@ -1,5 +1,10 @@ import { GridRowId } from './gridRows'; +export type GridRowSelectionPropagation = { + descendants?: boolean; + parents?: boolean; +}; + export type GridInputRowSelectionModel = readonly GridRowId[] | GridRowId; export type GridRowSelectionModel = readonly GridRowId[]; diff --git a/packages/x-data-grid/src/models/props/DataGridProps.ts b/packages/x-data-grid/src/models/props/DataGridProps.ts index 449f56046587..8d4495333596 100644 --- a/packages/x-data-grid/src/models/props/DataGridProps.ts +++ b/packages/x-data-grid/src/models/props/DataGridProps.ts @@ -33,6 +33,7 @@ import { GridColumnGroupingModel } from '../gridColumnGrouping'; import { GridPaginationMeta, GridPaginationModel } from '../gridPaginationProps'; import type { GridAutosizeOptions } from '../../hooks/features/columnResize'; import type { GridDataSource } from '../gridDataSource'; +import type { GridRowSelectionPropagation } from '../gridRowSelectionModel'; export interface GridExperimentalFeatures { /** @@ -827,10 +828,23 @@ export interface DataGridPropsWithoutDefaultValue Date: Fri, 4 Oct 2024 00:46:04 -0700 Subject: [PATCH 46/48] [code-infra] Replace or remove all instances of `e` identifier (#14724) Signed-off-by: Sycamore <71297412+samuelsycamore@users.noreply.github.com> Co-authored-by: Jan Potoms <2109932+Janpot@users.noreply.github.com> Co-authored-by: Lukas --- docs/data/charts/bars/BorderRadius.js | 2 +- docs/data/charts/bars/BorderRadius.tsx | 2 +- .../ServerSideErrorHandling.js | 4 +- .../ServerSideErrorHandling.tsx | 4 +- .../ServerSideTreeDataErrorHandling.js | 6 +- .../ServerSideTreeDataErrorHandling.tsx | 6 +- .../components/CustomizationPlayground.tsx | 2 +- .../overview/Internationalization.tsx | 2 +- .../modules/components/overview/Keyboard.tsx | 6 +- .../components/overview/WorldMapSvg.tsx | 12 +- package.json | 2 +- .../src/context/ZoomProvider/useSetupPan.ts | 2 +- .../src/context/ZoomProvider/useSetupZoom.ts | 2 +- .../src/ChartContainer/useDefaultizeAxis.ts | 2 +- .../x-charts/src/ChartsAxis/ChartsAxis.tsx | 8 +- .../src/ChartsLegend/DefaultChartsLegend.tsx | 2 +- .../src/ChartsLegend/LegendPerItem.tsx | 2 +- .../src/ChartsLegend/PiecewiseColorLegend.tsx | 2 +- .../src/context/ZAxisContextProvider.tsx | 2 +- .../x-charts/src/hooks/useReducedMotion.ts | 4 +- packages/x-charts/src/internals/domUtils.ts | 2 +- .../src/internals/getPercentageValue.ts | 2 +- .../src/hooks/useMockServer.ts | 2 +- .../aggregation/gridAggregationUtils.ts | 2 +- .../features/dataSource/useGridDataSource.ts | 6 +- .../src/components/cell/GridCell.tsx | 6 +- .../x-data-grid/src/utils/createSelector.ts | 6 + .../AdapterDateFnsBase/AdapterDateFnsBase.ts | 1 + .../src/AdapterMoment/AdapterMoment.ts | 1 + pnpm-lock.yaml | 172 +++++++----------- .../describeGregorianAdapter.ts | 2 +- 31 files changed, 127 insertions(+), 149 deletions(-) diff --git a/docs/data/charts/bars/BorderRadius.js b/docs/data/charts/bars/BorderRadius.js index 03864320f950..824c7f55ff37 100644 --- a/docs/data/charts/bars/BorderRadius.js +++ b/docs/data/charts/bars/BorderRadius.js @@ -19,7 +19,7 @@ export default function BorderRadius() { Border Radius setRadius(v)} + onChange={(event, value) => setRadius(value)} valueLabelDisplay="auto" min={0} max={50} diff --git a/docs/data/charts/bars/BorderRadius.tsx b/docs/data/charts/bars/BorderRadius.tsx index e1b72ab6feac..f08f1bde8194 100644 --- a/docs/data/charts/bars/BorderRadius.tsx +++ b/docs/data/charts/bars/BorderRadius.tsx @@ -19,7 +19,7 @@ export default function BorderRadius() { Border Radius setRadius(v as number)} + onChange={(event, value) => setRadius(value as number)} valueLabelDisplay="auto" min={0} max={50} diff --git a/docs/data/data-grid/server-side-data/ServerSideErrorHandling.js b/docs/data/data-grid/server-side-data/ServerSideErrorHandling.js index 75fd9a5422ac..e7d292657902 100644 --- a/docs/data/data-grid/server-side-data/ServerSideErrorHandling.js +++ b/docs/data/data-grid/server-side-data/ServerSideErrorHandling.js @@ -104,7 +104,9 @@ export default function ServerSideErrorHandling() { setError(e.message)} + unstable_onDataSourceError={(dataSourceError) => + setError(dataSourceError.message) + } unstable_dataSourceCache={null} apiRef={apiRef} pagination diff --git a/docs/data/data-grid/server-side-data/ServerSideErrorHandling.tsx b/docs/data/data-grid/server-side-data/ServerSideErrorHandling.tsx index 2ea04e50c57f..3e094b19fdf7 100644 --- a/docs/data/data-grid/server-side-data/ServerSideErrorHandling.tsx +++ b/docs/data/data-grid/server-side-data/ServerSideErrorHandling.tsx @@ -110,7 +110,9 @@ export default function ServerSideErrorHandling() { setError(e.message)} + unstable_onDataSourceError={(dataSourceError) => + setError(dataSourceError.message) + } unstable_dataSourceCache={null} apiRef={apiRef} pagination diff --git a/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.js b/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.js index 1066e54daf35..1b93b99e8ebf 100644 --- a/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.js +++ b/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.js @@ -89,12 +89,12 @@ export default function ServerSideTreeDataErrorHandling() { {...props} treeData unstable_dataSource={dataSource} - unstable_onDataSourceError={(e, params) => { + unstable_onDataSourceError={(error, params) => { if (!params.groupKeys || params.groupKeys.length === 0) { - setRootError(e.message); + setRootError(error.message); } else { setChildrenError( - `${e.message} (Requested level: ${params.groupKeys.join(' > ')})`, + `${error.message} (Requested level: ${params.groupKeys.join(' > ')})`, ); } }} diff --git a/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.tsx b/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.tsx index c62baec1a6a7..a4662f30ac3a 100644 --- a/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.tsx +++ b/docs/data/data-grid/server-side-data/ServerSideTreeDataErrorHandling.tsx @@ -94,12 +94,12 @@ export default function ServerSideTreeDataErrorHandling() { {...props} treeData unstable_dataSource={dataSource} - unstable_onDataSourceError={(e, params) => { + unstable_onDataSourceError={(error, params) => { if (!params.groupKeys || params.groupKeys.length === 0) { - setRootError(e.message); + setRootError(error.message); } else { setChildrenError( - `${e.message} (Requested level: ${params.groupKeys.join(' > ')})`, + `${error.message} (Requested level: ${params.groupKeys.join(' > ')})`, ); } }} diff --git a/docs/src/modules/components/CustomizationPlayground.tsx b/docs/src/modules/components/CustomizationPlayground.tsx index 64aaa0e48bec..8f82c2c0dc30 100644 --- a/docs/src/modules/components/CustomizationPlayground.tsx +++ b/docs/src/modules/components/CustomizationPlayground.tsx @@ -134,7 +134,7 @@ const StyledTabs = styled(Tabs)(({ theme }) => ({ type TabsProps = { value: string; - onChange: (e: React.SyntheticEvent, value: any) => void; + onChange: (event: React.SyntheticEvent, value: any) => void; options: Partial; }; diff --git a/docs/src/modules/components/overview/Internationalization.tsx b/docs/src/modules/components/overview/Internationalization.tsx index b0f898001d8a..bfdb81a42f66 100644 --- a/docs/src/modules/components/overview/Internationalization.tsx +++ b/docs/src/modules/components/overview/Internationalization.tsx @@ -102,7 +102,7 @@ function TimezonesDemo() { const brandingTheme = useTheme(); const theme = createTheme({ palette: { mode: brandingTheme.palette.mode } }); - const handleContinentClick: ContinentClickHandler = (e, newTimezone) => { + const handleContinentClick: ContinentClickHandler = (event, newTimezone) => { if (selectedTimezone === newTimezone) { setSelectedTimezone(null); } else { diff --git a/docs/src/modules/components/overview/Keyboard.tsx b/docs/src/modules/components/overview/Keyboard.tsx index 456604d975c9..2d0a141601f0 100644 --- a/docs/src/modules/components/overview/Keyboard.tsx +++ b/docs/src/modules/components/overview/Keyboard.tsx @@ -410,20 +410,20 @@ export default function Keyboard() { const brandingTheme = useTheme(); const theme = createTheme({ palette: { mode: brandingTheme.palette.mode } }); - const handleKeySelection = (e: React.SyntheticEvent, key: SelectedKey | null) => { + const handleKeySelection = (event: React.SyntheticEvent, key: SelectedKey | null) => { const sectionContent = (ref.current as any).querySelector( `.MuiPickersSectionList-section[data-sectionindex="${selectedSection.current || 0}"] .MuiPickersSectionList-sectionContent`, ); sectionContent.focus(); if (key) { - const event = new KeyboardEvent('keydown', { + const keydownEvent = new KeyboardEvent('keydown', { ...key, bubbles: true, cancelable: true, }); - sectionContent.dispatchEvent(event); + sectionContent.dispatchEvent(keydownEvent); if (key.key === 'Backspace') { sectionContent.textContent = ''; diff --git a/docs/src/modules/components/overview/WorldMapSvg.tsx b/docs/src/modules/components/overview/WorldMapSvg.tsx index 9818f694d745..aef3641d92f3 100644 --- a/docs/src/modules/components/overview/WorldMapSvg.tsx +++ b/docs/src/modules/components/overview/WorldMapSvg.tsx @@ -41,7 +41,7 @@ export default function WorldMapSvg({ onClickContinent, selectedTimezone }: Worl onClickContinent(e, timezones.northAmerica)} + onClick={(event) => onClickContinent(event, timezones.northAmerica)} > @@ -56,14 +56,14 @@ export default function WorldMapSvg({ onClickContinent, selectedTimezone }: Worl onClickContinent(e, timezones.southAmerica)} + onClick={(event) => onClickContinent(event, timezones.southAmerica)} > onClickContinent(e, timezones.europe)} + onClick={(event) => onClickContinent(event, timezones.europe)} > @@ -80,7 +80,7 @@ export default function WorldMapSvg({ onClickContinent, selectedTimezone }: Worl onClickContinent(e, timezones.asia)} + onClick={(event) => onClickContinent(event, timezones.asia)} > @@ -104,7 +104,7 @@ export default function WorldMapSvg({ onClickContinent, selectedTimezone }: Worl onClickContinent(e, timezones.africa)} + onClick={(event) => onClickContinent(event, timezones.africa)} > @@ -112,7 +112,7 @@ export default function WorldMapSvg({ onClickContinent, selectedTimezone }: Worl onClickContinent(e, timezones.australia)} + onClick={(event) => onClickContinent(event, timezones.australia)} > diff --git a/package.json b/package.json index 0becd99e7ca6..315bd2e7e742 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@mui/internal-markdown": "^1.0.14", "@mui/internal-test-utils": "^1.0.14", "@mui/material": "^5.16.7", - "@mui/monorepo": "github:mui/material-ui#263c7259451d5b928bbdfd299c9c0afc89dfec02", + "@mui/monorepo": "github:mui/material-ui#95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c", "@mui/utils": "^5.16.6", "@next/eslint-plugin-next": "14.2.13", "@octokit/plugin-retry": "^7.1.1", diff --git a/packages/x-charts-pro/src/context/ZoomProvider/useSetupPan.ts b/packages/x-charts-pro/src/context/ZoomProvider/useSetupPan.ts index 98b89fe73a3b..84d043676a8c 100644 --- a/packages/x-charts-pro/src/context/ZoomProvider/useSetupPan.ts +++ b/packages/x-charts-pro/src/context/ZoomProvider/useSetupPan.ts @@ -106,7 +106,7 @@ export const useSetupPan = () => { const handleUp = (event: PointerEvent) => { eventCacheRef.current.splice( - eventCacheRef.current.findIndex((e) => e.pointerId === event.pointerId), + eventCacheRef.current.findIndex((cachedEvent) => cachedEvent.pointerId === event.pointerId), 1, ); setIsInteracting(false); diff --git a/packages/x-charts-pro/src/context/ZoomProvider/useSetupZoom.ts b/packages/x-charts-pro/src/context/ZoomProvider/useSetupZoom.ts index 6410372fc74b..5f4a50f39530 100644 --- a/packages/x-charts-pro/src/context/ZoomProvider/useSetupZoom.ts +++ b/packages/x-charts-pro/src/context/ZoomProvider/useSetupZoom.ts @@ -178,7 +178,7 @@ export const useSetupZoom = () => { function pointerUpHandler(event: PointerEvent) { eventCacheRef.current.splice( - eventCacheRef.current.findIndex((e) => e.pointerId === event.pointerId), + eventCacheRef.current.findIndex((cachedEvent) => cachedEvent.pointerId === event.pointerId), 1, ); diff --git a/packages/x-charts/src/ChartContainer/useDefaultizeAxis.ts b/packages/x-charts/src/ChartContainer/useDefaultizeAxis.ts index e85f4175832c..a260517f0ba0 100644 --- a/packages/x-charts/src/ChartContainer/useDefaultizeAxis.ts +++ b/packages/x-charts/src/ChartContainer/useDefaultizeAxis.ts @@ -25,7 +25,7 @@ const defaultizeAxis = ( return axisConfig; } if (dataset === undefined) { - throw Error(`MUI X: ${axisName}-axis uses \`dataKey\` but no \`dataset\` is provided.`); + throw new Error(`MUI X: ${axisName}-axis uses \`dataKey\` but no \`dataset\` is provided.`); } return { ...axisConfig, diff --git a/packages/x-charts/src/ChartsAxis/ChartsAxis.tsx b/packages/x-charts/src/ChartsAxis/ChartsAxis.tsx index ff2b06bd2733..e34f231ab416 100644 --- a/packages/x-charts/src/ChartsAxis/ChartsAxis.tsx +++ b/packages/x-charts/src/ChartsAxis/ChartsAxis.tsx @@ -98,7 +98,7 @@ function ChartsAxis(props: ChartsAxisProps) { const rightId = getAxisId(rightAxis, yAxisIds[0]); if (topId !== null && !xAxis[topId]) { - throw Error( + throw new Error( [ `MUI X: id used for top axis "${topId}" is not defined.`, `Available ids are: ${xAxisIds.join(', ')}.`, @@ -106,7 +106,7 @@ function ChartsAxis(props: ChartsAxisProps) { ); } if (leftId !== null && !yAxis[leftId]) { - throw Error( + throw new Error( [ `MUI X: id used for left axis "${leftId}" is not defined.`, `Available ids are: ${yAxisIds.join(', ')}.`, @@ -114,7 +114,7 @@ function ChartsAxis(props: ChartsAxisProps) { ); } if (rightId !== null && !yAxis[rightId]) { - throw Error( + throw new Error( [ `MUI X: id used for right axis "${rightId}" is not defined.`, `Available ids are: ${yAxisIds.join(', ')}.`, @@ -122,7 +122,7 @@ function ChartsAxis(props: ChartsAxisProps) { ); } if (bottomId !== null && !xAxis[bottomId]) { - throw Error( + throw new Error( [ `MUI X: id used for bottom axis "${bottomId}" is not defined.`, `Available ids are: ${xAxisIds.join(', ')}.`, diff --git a/packages/x-charts/src/ChartsLegend/DefaultChartsLegend.tsx b/packages/x-charts/src/ChartsLegend/DefaultChartsLegend.tsx index e161bdb9a4f2..7278a105536f 100644 --- a/packages/x-charts/src/ChartsLegend/DefaultChartsLegend.tsx +++ b/packages/x-charts/src/ChartsLegend/DefaultChartsLegend.tsx @@ -54,7 +54,7 @@ function DefaultChartsLegend(props: LegendRendererProps) { itemsToDisplay={seriesToDisplay} onItemClick={ onItemClick - ? (e, i) => onItemClick(e, seriesContextBuilder(seriesToDisplay[i]), i) + ? (event, i) => onItemClick(event, seriesContextBuilder(seriesToDisplay[i]), i) : undefined } /> diff --git a/packages/x-charts/src/ChartsLegend/LegendPerItem.tsx b/packages/x-charts/src/ChartsLegend/LegendPerItem.tsx index 6edd54deb32a..60abf0ff950d 100644 --- a/packages/x-charts/src/ChartsLegend/LegendPerItem.tsx +++ b/packages/x-charts/src/ChartsLegend/LegendPerItem.tsx @@ -206,7 +206,7 @@ export function LegendPerItem(props: LegendPerItemProps) { markGap={markGap} labelStyle={labelStyle} classes={classes} - onClick={onItemClick ? (e) => onItemClick(e, i) : undefined} + onClick={onItemClick ? (event) => onItemClick(event, i) : undefined} /> ))} diff --git a/packages/x-charts/src/ChartsLegend/PiecewiseColorLegend.tsx b/packages/x-charts/src/ChartsLegend/PiecewiseColorLegend.tsx index f7df59c36952..fa94832fc4d3 100644 --- a/packages/x-charts/src/ChartsLegend/PiecewiseColorLegend.tsx +++ b/packages/x-charts/src/ChartsLegend/PiecewiseColorLegend.tsx @@ -121,7 +121,7 @@ function PiecewiseColorLegend(props: PiecewiseColorLegendProps) { itemsToDisplay={itemsToDisplay} onItemClick={ onItemClick - ? (e, i) => onItemClick(e, piecewiseColorContextBuilder(itemsToDisplay[i]), i) + ? (event, i) => onItemClick(event, piecewiseColorContextBuilder(itemsToDisplay[i]), i) : undefined } /> diff --git a/packages/x-charts/src/context/ZAxisContextProvider.tsx b/packages/x-charts/src/context/ZAxisContextProvider.tsx index 93a08641f452..0c028a6e7fc9 100644 --- a/packages/x-charts/src/context/ZAxisContextProvider.tsx +++ b/packages/x-charts/src/context/ZAxisContextProvider.tsx @@ -48,7 +48,7 @@ function ZAxisContextProvider(props: ZAxisContextProviderProps) { return axisConfig; } if (dataset === undefined) { - throw Error('MUI X: z-axis uses `dataKey` but no `dataset` is provided.'); + throw new Error('MUI X: z-axis uses `dataKey` but no `dataset` is provided.'); } return { ...axisConfig, diff --git a/packages/x-charts/src/hooks/useReducedMotion.ts b/packages/x-charts/src/hooks/useReducedMotion.ts index 5acafab44e80..cda035597e46 100644 --- a/packages/x-charts/src/hooks/useReducedMotion.ts +++ b/packages/x-charts/src/hooks/useReducedMotion.ts @@ -1,10 +1,10 @@ 'use client'; import { useIsomorphicLayoutEffect, Globals } from '@react-spring/web'; -const handleMediaChange = (e: { matches: boolean | undefined }) => { +const handleMediaChange = (event: { matches: boolean | undefined }) => { Globals.assign({ // Modification such the react-spring implementation such that this hook can remove animation but never activate animation. - skipAnimation: e.matches || undefined, + skipAnimation: event.matches || undefined, }); }; diff --git a/packages/x-charts/src/internals/domUtils.ts b/packages/x-charts/src/internals/domUtils.ts index e8a1b2e2d119..eccb61fb69ff 100644 --- a/packages/x-charts/src/internals/domUtils.ts +++ b/packages/x-charts/src/internals/domUtils.ts @@ -156,7 +156,7 @@ export const getStringSize = (text: string | number, style: React.CSSProperties }, 0); return result; - } catch (e) { + } catch { return { width: 0, height: 0 }; } }; diff --git a/packages/x-charts/src/internals/getPercentageValue.ts b/packages/x-charts/src/internals/getPercentageValue.ts index 85f843f10852..3e2f4589f912 100644 --- a/packages/x-charts/src/internals/getPercentageValue.ts +++ b/packages/x-charts/src/internals/getPercentageValue.ts @@ -24,7 +24,7 @@ export function getPercentageValue(value: number | string, refValue: number) { return val; } } - throw Error( + throw new Error( `MUI X: Received an unknown value "${value}". It should be a number, or a string with a percentage value.`, ); } diff --git a/packages/x-data-grid-generator/src/hooks/useMockServer.ts b/packages/x-data-grid-generator/src/hooks/useMockServer.ts index 7f16fc41c647..83c43fd30c05 100644 --- a/packages/x-data-grid-generator/src/hooks/useMockServer.ts +++ b/packages/x-data-grid-generator/src/hooks/useMockServer.ts @@ -51,7 +51,7 @@ function decodeParams(url: string): GridGetRowsParams { for (const [key, value] of array) { try { decodedParams[key] = JSON.parse(value); - } catch (e) { + } catch { decodedParams[key] = value; } } diff --git a/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts b/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts index b826d8f0d7d5..0f15aa74136b 100644 --- a/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts +++ b/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts @@ -261,7 +261,7 @@ export const getAggregationFunctionLabel = ({ aggregationRule.aggregationFunctionName, )}` as 'aggregationFunctionLabelSum', ); - } catch (e) { + } catch { return aggregationRule.aggregationFunctionName; } }; diff --git a/packages/x-data-grid-pro/src/hooks/features/dataSource/useGridDataSource.ts b/packages/x-data-grid-pro/src/hooks/features/dataSource/useGridDataSource.ts index b948c0a48745..4e365d10d7ee 100644 --- a/packages/x-data-grid-pro/src/hooks/features/dataSource/useGridDataSource.ts +++ b/packages/x-data-grid-pro/src/hooks/features/dataSource/useGridDataSource.ts @@ -178,9 +178,9 @@ export const useGridDataSource = ( apiRef.current.updateServerRows(getRowsResponse.rows, rowNode.path); apiRef.current.setRowChildrenExpansion(id, true); } catch (error) { - const e = error as Error; - apiRef.current.unstable_dataSource.setChildrenFetchError(id, e); - onError?.(e, fetchParams); + const childrenFetchError = error as Error; + apiRef.current.unstable_dataSource.setChildrenFetchError(id, childrenFetchError); + onError?.(childrenFetchError, fetchParams); } finally { apiRef.current.unstable_dataSource.setChildrenLoading(id, false); nestedDataManager.setRequestSettled(id); diff --git a/packages/x-data-grid/src/components/cell/GridCell.tsx b/packages/x-data-grid/src/components/cell/GridCell.tsx index 8dabe559a1c7..e4ac06440ba7 100644 --- a/packages/x-data-grid/src/components/cell/GridCell.tsx +++ b/packages/x-data-grid/src/components/cell/GridCell.tsx @@ -197,11 +197,11 @@ const GridCell = React.forwardRef(function GridCe ); result.api = apiRef.current; return result; - } catch (e) { - if (e instanceof MissingRowIdError) { + } catch (error) { + if (error instanceof MissingRowIdError) { return EMPTY_CELL_PARAMS; } - throw e; + throw error; } }, objectShallowCompare, diff --git a/packages/x-data-grid/src/utils/createSelector.ts b/packages/x-data-grid/src/utils/createSelector.ts index 965b07ed5c2b..61f343783780 100644 --- a/packages/x-data-grid/src/utils/createSelector.ts +++ b/packages/x-data-grid/src/utils/createSelector.ts @@ -91,6 +91,7 @@ export const createSelector = (( b: Function, c?: Function, d?: Function, + // eslint-disable-next-line id-denylist e?: Function, f?: Function, ...other: any[] @@ -101,6 +102,7 @@ export const createSelector = (( let selector: any; + // eslint-disable-next-line id-denylist if (a && b && c && d && e && f) { selector = (stateOrApiRef: any, instanceIdParam: any) => { const isAPIRef = checkIsAPIRef(stateOrApiRef); @@ -114,6 +116,7 @@ export const createSelector = (( const ve = e(state, instanceId); return f(va, vb, vc, vd, ve); }; + // eslint-disable-next-line id-denylist } else if (a && b && c && d && e) { selector = (stateOrApiRef: any, instanceIdParam: any) => { const isAPIRef = checkIsAPIRef(stateOrApiRef); @@ -173,6 +176,7 @@ export const createSelectorV8 = (( b: Function, c?: Function, d?: Function, + // eslint-disable-next-line id-denylist e?: Function, f?: Function, ...other: any[] @@ -183,6 +187,7 @@ export const createSelectorV8 = (( let selector: any; + // eslint-disable-next-line id-denylist if (a && b && c && d && e && f) { selector = (stateOrApiRef: any, args: any, instanceIdParam: any) => { const isAPIRef = checkIsAPIRef(stateOrApiRef); @@ -196,6 +201,7 @@ export const createSelectorV8 = (( const ve = e(state, args, instanceId); return f(va, vb, vc, vd, ve, args); }; + // eslint-disable-next-line id-denylist } else if (a && b && c && d && e) { selector = (stateOrApiRef: any, args: any, instanceIdParam: any) => { const isAPIRef = checkIsAPIRef(stateOrApiRef); diff --git a/packages/x-date-pickers/src/AdapterDateFnsBase/AdapterDateFnsBase.ts b/packages/x-date-pickers/src/AdapterDateFnsBase/AdapterDateFnsBase.ts index 32f9f873d0aa..4001a00d973c 100644 --- a/packages/x-date-pickers/src/AdapterDateFnsBase/AdapterDateFnsBase.ts +++ b/packages/x-date-pickers/src/AdapterDateFnsBase/AdapterDateFnsBase.ts @@ -49,6 +49,7 @@ const formatTokenMap: FieldFormatTokenMap = { ii: 'weekDay', iii: { sectionType: 'weekDay', contentType: 'letter' }, iiii: { sectionType: 'weekDay', contentType: 'letter' }, + // eslint-disable-next-line id-denylist e: { sectionType: 'weekDay', contentType: 'digit', maxLength: 1 }, ee: 'weekDay', eee: { sectionType: 'weekDay', contentType: 'letter' }, diff --git a/packages/x-date-pickers/src/AdapterMoment/AdapterMoment.ts b/packages/x-date-pickers/src/AdapterMoment/AdapterMoment.ts index a6e5288f2ed9..426d0404f487 100644 --- a/packages/x-date-pickers/src/AdapterMoment/AdapterMoment.ts +++ b/packages/x-date-pickers/src/AdapterMoment/AdapterMoment.ts @@ -29,6 +29,7 @@ const formatTokenMap: FieldFormatTokenMap = { // Day of the week E: { sectionType: 'weekDay', contentType: 'digit', maxLength: 1 }, + // eslint-disable-next-line id-denylist e: { sectionType: 'weekDay', contentType: 'digit', maxLength: 1 }, d: { sectionType: 'weekDay', contentType: 'digit', maxLength: 1 }, dd: { sectionType: 'weekDay', contentType: 'letter' }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55e1aed3f78b..a1166d6b94df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,8 +99,8 @@ importers: specifier: ^5.16.7 version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/monorepo': - specifier: github:mui/material-ui#263c7259451d5b928bbdfd299c9c0afc89dfec02 - version: https://codeload.github.com/mui/material-ui/tar.gz/263c7259451d5b928bbdfd299c9c0afc89dfec02(encoding@0.1.13) + specifier: github:mui/material-ui#95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c + version: https://codeload.github.com/mui/material-ui/tar.gz/95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c(encoding@0.1.13) '@mui/utils': specifier: ^5.16.6 version: 5.16.6(@types/react@18.3.4)(react@18.3.1) @@ -3085,7 +3085,7 @@ packages: resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} engines: {node: '>=12.0.0'} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 + '@types/react': ^18.3.4 react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 peerDependenciesMeta: @@ -3213,10 +3213,10 @@ packages: '@types/react': optional: true - '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/263c7259451d5b928bbdfd299c9c0afc89dfec02': - resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/263c7259451d5b928bbdfd299c9c0afc89dfec02} - version: 6.1.1 - engines: {pnpm: 9.10.0} + '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c': + resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c} + version: 6.1.2 + engines: {pnpm: 9.11.0} '@mui/private-theming@5.16.6': resolution: {integrity: sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==} @@ -3889,8 +3889,8 @@ packages: '@sinonjs/text-encoding@0.7.2': resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} - '@slack/bolt@3.21.4': - resolution: {integrity: sha512-4PqOuHXcVt8KxjKiLdLIqZp8285zdiYLj7HrrKvVHnUNbkD0l16HZxtMfIEe07REQ+vmM1mrqCiZqe9dPAMucA==} + '@slack/bolt@3.22.0': + resolution: {integrity: sha512-iKDqGPEJDnrVwxSVlFW6OKTkijd7s4qLBeSufoBsTM0reTyfdp/5izIQVkxNfzjHi3o6qjdYbRXkYad5HBsBog==} engines: {node: '>=14.21.3', npm: '>=6.14.18'} '@slack/logger@3.0.0': @@ -3913,8 +3913,8 @@ packages: resolution: {integrity: sha512-OAQVtKYIgBVNRmgIoiTjorGPTlgfcfstU3XYYCBA+czlB9aGcKb9MQc+6Jovi4gq3S98yP/GPBZsJSI/2mHKDQ==} engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} - '@slack/web-api@6.12.1': - resolution: {integrity: sha512-dXHyHkvvziqkDdZlPRnUl/H2uvnUmdJ5B7kxiH1HIgHe18vcbUk1zjU/XCZgJFhxGeq5Zwa95Z+SbNW9mbRhtw==} + '@slack/web-api@6.13.0': + resolution: {integrity: sha512-dv65crIgdh9ZYHrevLU6XFHTQwTyDmNqEqzuIrV+Vqe/vgiG6w37oex5ePDU1RGm2IJ90H8iOvHFvzdEO/vB+g==} engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} '@socket.io/component-emitter@3.1.0': @@ -4907,12 +4907,8 @@ packages: bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} - body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} boolbase@1.0.0: @@ -5359,8 +5355,8 @@ packages: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} core-js-compat@3.38.1: @@ -5793,6 +5789,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -6173,8 +6173,8 @@ packages: exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + express@4.21.0: + resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} engines: {node: '>= 0.10.0'} extend-shallow@2.0.1: @@ -6259,8 +6259,8 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} find-babel-config@2.1.1: @@ -7691,8 +7691,8 @@ packages: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -8443,8 +8443,8 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} path-to-regexp@2.2.1: resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} @@ -8705,12 +8705,8 @@ packages: resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} engines: {node: '>=0.9'} - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - - qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} querystringify@2.2.0: @@ -8737,10 +8733,6 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -9109,8 +9101,8 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} serialize-javascript@6.0.2: @@ -9119,8 +9111,8 @@ packages: serve-handler@6.1.5: resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} serve@14.2.3: @@ -11694,12 +11686,12 @@ snapshots: '@gitbeaker/core@38.12.1': dependencies: '@gitbeaker/requester-utils': 38.12.1 - qs: 6.11.2 + qs: 6.13.0 xcase: 2.0.1 '@gitbeaker/requester-utils@38.12.1': dependencies: - qs: 6.11.2 + qs: 6.13.0 xcase: 2.0.1 '@gitbeaker/rest@38.12.1': @@ -12107,11 +12099,11 @@ snapshots: '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1) '@types/react': 18.3.4 - '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/263c7259451d5b928bbdfd299c9c0afc89dfec02(encoding@0.1.13)': + '@mui/monorepo@https://codeload.github.com/mui/material-ui/tar.gz/95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c(encoding@0.1.13)': dependencies: '@googleapis/sheets': 9.3.1(encoding@0.1.13) '@netlify/functions': 2.8.1 - '@slack/bolt': 3.21.4 + '@slack/bolt': 3.22.0 execa: 9.4.0 google-auth-library: 9.14.1(encoding@0.1.13) transitivePeerDependencies: @@ -12879,18 +12871,18 @@ snapshots: '@sinonjs/text-encoding@0.7.2': {} - '@slack/bolt@3.21.4': + '@slack/bolt@3.22.0': dependencies: '@slack/logger': 4.0.0 '@slack/oauth': 2.6.3 '@slack/socket-mode': 1.3.6 '@slack/types': 2.13.0 - '@slack/web-api': 6.12.1 + '@slack/web-api': 6.13.0 '@types/express': 4.17.21 '@types/promise.allsettled': 1.0.6 '@types/tsscmp': 1.0.2 axios: 1.7.5(debug@4.3.6) - express: 4.18.2 + express: 4.21.0 path-to-regexp: 8.1.0 promise.allsettled: 1.0.7 raw-body: 2.5.2 @@ -12912,7 +12904,7 @@ snapshots: '@slack/oauth@2.6.3': dependencies: '@slack/logger': 3.0.0 - '@slack/web-api': 6.12.1 + '@slack/web-api': 6.13.0 '@types/jsonwebtoken': 8.5.9 '@types/node': 20.16.10 jsonwebtoken: 9.0.2 @@ -12923,7 +12915,7 @@ snapshots: '@slack/socket-mode@1.3.6': dependencies: '@slack/logger': 3.0.0 - '@slack/web-api': 6.12.1 + '@slack/web-api': 6.13.0 '@types/node': 20.16.10 '@types/ws': 7.4.7 eventemitter3: 5.0.1 @@ -12936,7 +12928,7 @@ snapshots: '@slack/types@2.13.0': {} - '@slack/web-api@6.12.1': + '@slack/web-api@6.13.0': dependencies: '@slack/logger': 3.0.0 '@slack/types': 2.13.0 @@ -14099,24 +14091,7 @@ snapshots: bluebird@3.4.7: {} - body-parser@1.20.1: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - body-parser@1.20.2: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -14126,7 +14101,7 @@ snapshots: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 @@ -14612,7 +14587,7 @@ snapshots: cookie@0.4.2: {} - cookie@0.5.0: {} + cookie@0.6.0: {} core-js-compat@3.38.1: dependencies: @@ -15067,6 +15042,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -15688,34 +15665,34 @@ snapshots: exponential-backoff@3.1.1: {} - express@4.18.2: + express@4.21.0: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -15809,10 +15786,10 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@1.2.0: + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -16202,7 +16179,7 @@ snapshots: extend: 3.0.2 gaxios: 6.1.1(encoding@0.1.13) google-auth-library: 9.14.1(encoding@0.1.13) - qs: 6.11.2 + qs: 6.13.0 url-template: 2.0.8 uuid: 9.0.1 transitivePeerDependencies: @@ -17037,7 +17014,7 @@ snapshots: karma@6.4.4: dependencies: '@colors/colors': 1.5.0 - body-parser: 1.20.2 + body-parser: 1.20.3 braces: 3.0.3 chokidar: 3.6.0 connect: 3.7.0 @@ -17527,7 +17504,7 @@ snapshots: type-fest: 0.18.1 yargs-parser: 20.2.9 - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -18471,7 +18448,7 @@ snapshots: lru-cache: 11.0.1 minipass: 7.1.2 - path-to-regexp@0.1.7: {} + path-to-regexp@0.1.10: {} path-to-regexp@2.2.1: {} @@ -18686,11 +18663,7 @@ snapshots: qjobs@1.2.0: {} - qs@6.11.0: - dependencies: - side-channel: 1.0.6 - - qs@6.11.2: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -18710,13 +18683,6 @@ snapshots: range-parser@1.2.1: {} - raw-body@2.5.1: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - raw-body@2.5.2: dependencies: bytes: 3.1.2 @@ -19150,7 +19116,7 @@ snapshots: semver@7.6.3: {} - send@0.18.0: + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -19183,12 +19149,12 @@ snapshots: path-to-regexp: 2.2.1 range-parser: 1.2.0 - serve-static@1.15.0: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color diff --git a/test/utils/pickers/describeGregorianAdapter/describeGregorianAdapter.ts b/test/utils/pickers/describeGregorianAdapter/describeGregorianAdapter.ts index be64e37fa3af..9b457d082181 100644 --- a/test/utils/pickers/describeGregorianAdapter/describeGregorianAdapter.ts +++ b/test/utils/pickers/describeGregorianAdapter/describeGregorianAdapter.ts @@ -12,7 +12,7 @@ function innerGregorianDescribeAdapter( Adapter: new (...args: any) => MuiPickersAdapter, params: DescribeGregorianAdapterParams, ) { - const prepareAdapter = params.prepareAdapter ?? ((e) => e); + const prepareAdapter = params.prepareAdapter ?? ((adapter) => adapter); const adapter = new Adapter(); const adapterTZ = params.dateLibInstanceWithTimezoneSupport From c0ab117cdd7369cdb22c776f100db6cb5ed51ab3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:23:54 +0300 Subject: [PATCH 47/48] Bump @octokit/plugin-retry to ^7.1.2 (#14695) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 315bd2e7e742..b19b0def91c2 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "@mui/monorepo": "github:mui/material-ui#95fd6b5c97aca84f1f8b02bfeefddf4a55baea5c", "@mui/utils": "^5.16.6", "@next/eslint-plugin-next": "14.2.13", - "@octokit/plugin-retry": "^7.1.1", + "@octokit/plugin-retry": "^7.1.2", "@octokit/rest": "^21.0.2", "@playwright/test": "^1.44.1", "@types/babel__core": "^7.20.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1166d6b94df..0aa2e5823670 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: 14.2.13 version: 14.2.13 '@octokit/plugin-retry': - specifier: ^7.1.1 - version: 7.1.1(@octokit/core@4.2.4(encoding@0.1.13)) + specifier: ^7.1.2 + version: 7.1.2(@octokit/core@4.2.4(encoding@0.1.13)) '@octokit/rest': specifier: ^21.0.2 version: 21.0.2 @@ -3634,8 +3634,8 @@ packages: peerDependencies: '@octokit/core': '>=3' - '@octokit/plugin-retry@7.1.1': - resolution: {integrity: sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==} + '@octokit/plugin-retry@7.1.2': + resolution: {integrity: sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -12601,7 +12601,7 @@ snapshots: '@octokit/core': 4.2.4(encoding@0.1.13) '@octokit/types': 10.0.0 - '@octokit/plugin-retry@7.1.1(@octokit/core@4.2.4(encoding@0.1.13))': + '@octokit/plugin-retry@7.1.2(@octokit/core@4.2.4(encoding@0.1.13))': dependencies: '@octokit/core': 4.2.4(encoding@0.1.13) '@octokit/request-error': 6.1.1 From eb5b6fd92f6efd9978f29b4a5a775f17b1071aaf Mon Sep 17 00:00:00 2001 From: Flavien DELANGLE Date: Fri, 4 Oct 2024 11:48:24 +0200 Subject: [PATCH 48/48] [pickers] Improve typing of the range pickers (#14716) --- .../useDesktopRangePicker.tsx | 38 +++----- .../hooks/useEnrichedRangePickerFieldProps.ts | 88 ++++++++++++------- .../useMobileRangePicker.tsx | 38 +++----- 3 files changed, 79 insertions(+), 85 deletions(-) diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx b/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx index 55d56d9b6ca5..412b616b3781 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx @@ -12,21 +12,19 @@ import { DateOrTimeViewWithMeridiem, ExportedBaseTabsProps, } from '@mui/x-date-pickers/internals'; -import { - PickerValidDate, - FieldRef, - BaseSingleInputFieldProps, - InferError, -} from '@mui/x-date-pickers/models'; +import { PickerValidDate, FieldRef, InferError } from '@mui/x-date-pickers/models'; import { DesktopRangePickerAdditionalViewProps, UseDesktopRangePickerParams, UseDesktopRangePickerProps, UseDesktopRangePickerSlotProps, } from './useDesktopRangePicker.types'; -import { useEnrichedRangePickerFieldProps } from '../useEnrichedRangePickerFieldProps'; +import { + RangePickerPropsForFieldSlot, + useEnrichedRangePickerFieldProps, +} from '../useEnrichedRangePickerFieldProps'; import { getReleaseInfo } from '../../utils/releaseInfo'; -import { DateRange, BaseMultiInputFieldProps, RangeFieldSection } from '../../../models'; +import { DateRange, RangeFieldSection } from '../../../models'; import { useRangePosition } from '../useRangePosition'; const releaseInfo = getReleaseInfo(); @@ -138,24 +136,12 @@ export const useDesktopRangePicker = < const fieldProps = useSlotProps< typeof Field, UseDesktopRangePickerSlotProps['field'], - | Partial< - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - > - | Partial< - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - >, + RangePickerPropsForFieldSlot< + boolean, + TDate, + TEnableAccessibleFieldDOMStructure, + InferError + >, TExternalProps >({ elementType: Field, diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts b/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts index 92161a1d50da..9c0bde6d9d5b 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts +++ b/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts @@ -19,7 +19,6 @@ import { } from '@mui/x-date-pickers/hooks'; import { PickersInputLocaleText } from '@mui/x-date-pickers/locales'; import { - BaseFieldProps, onSpaceOrEnter, UsePickerResponse, WrapperVariant, @@ -83,24 +82,37 @@ export interface RangePickerFieldSlotProps< >; } +export type RangePickerPropsForFieldSlot< + TIsSingleInput extends boolean, + TDate extends PickerValidDate, + TEnableAccessibleFieldDOMStructure extends boolean, + TError, +> = + | (TIsSingleInput extends true + ? BaseSingleInputFieldProps< + DateRange, + TDate, + RangeFieldSection, + TEnableAccessibleFieldDOMStructure, + TError + > + : never) + | (TIsSingleInput extends false + ? BaseMultiInputFieldProps< + DateRange, + TDate, + RangeFieldSection, + TEnableAccessibleFieldDOMStructure, + TError + > + : never); + export interface UseEnrichedRangePickerFieldPropsParams< + TIsSingleInput extends boolean, TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, - FieldProps extends BaseFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > = BaseFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - >, > extends Pick< UsePickerResponse, TView, RangeFieldSection, any>, 'open' | 'actions' @@ -116,7 +128,12 @@ export interface UseEnrichedRangePickerFieldPropsParams< localeText: PickersInputLocaleText | undefined; pickerSlotProps: RangePickerFieldSlotProps | undefined; pickerSlots: RangePickerFieldSlots | undefined; - fieldProps: FieldProps; + fieldProps: RangePickerPropsForFieldSlot< + TIsSingleInput, + TDate, + TEnableAccessibleFieldDOMStructure, + TError + >; anchorRef?: React.Ref; currentView?: TView | null; initialView?: TView; @@ -151,17 +168,11 @@ const useMultiInputFieldSlotProps = < startFieldRef, endFieldRef, }: UseEnrichedRangePickerFieldPropsParams< + false, TDate, TView, TEnableAccessibleFieldDOMStructure, - TError, - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > + TError >) => { type ReturnType = BaseMultiInputFieldProps< DateRange, @@ -336,17 +347,11 @@ const useSingleInputFieldSlotProps = < anchorRef, currentView, }: UseEnrichedRangePickerFieldPropsParams< + true, TDate, TView, TEnableAccessibleFieldDOMStructure, - TError, - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > + TError >) => { type ReturnType = BaseSingleInputFieldProps< DateRange, @@ -453,6 +458,7 @@ export const useEnrichedRangePickerFieldProps = < TError, >( params: UseEnrichedRangePickerFieldPropsParams< + boolean, TDate, TView, TEnableAccessibleFieldDOMStructure, @@ -470,9 +476,25 @@ export const useEnrichedRangePickerFieldProps = < } if (params.fieldType === 'multi-input') { - return useMultiInputFieldSlotProps(params); + return useMultiInputFieldSlotProps( + params as unknown as UseEnrichedRangePickerFieldPropsParams< + false, + TDate, + TView, + TEnableAccessibleFieldDOMStructure, + TError + >, + ); } - return useSingleInputFieldSlotProps(params); + return useSingleInputFieldSlotProps( + params as UseEnrichedRangePickerFieldPropsParams< + true, + TDate, + TView, + TEnableAccessibleFieldDOMStructure, + TError + >, + ); /* eslint-enable react-hooks/rules-of-hooks */ }; diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx b/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx index 518914bdb1b5..58f509d3c8aa 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx @@ -11,12 +11,7 @@ import { ExportedBaseTabsProps, } from '@mui/x-date-pickers/internals'; import { usePickersTranslations } from '@mui/x-date-pickers/hooks'; -import { - PickerValidDate, - FieldRef, - BaseSingleInputFieldProps, - InferError, -} from '@mui/x-date-pickers/models'; +import { PickerValidDate, FieldRef, InferError } from '@mui/x-date-pickers/models'; import useId from '@mui/utils/useId'; import { MobileRangePickerAdditionalViewProps, @@ -24,9 +19,12 @@ import { UseMobileRangePickerProps, UseMobileRangePickerSlotProps, } from './useMobileRangePicker.types'; -import { useEnrichedRangePickerFieldProps } from '../useEnrichedRangePickerFieldProps'; +import { + RangePickerPropsForFieldSlot, + useEnrichedRangePickerFieldProps, +} from '../useEnrichedRangePickerFieldProps'; import { getReleaseInfo } from '../../utils/releaseInfo'; -import { DateRange, BaseMultiInputFieldProps, RangeFieldSection } from '../../../models'; +import { DateRange, RangeFieldSection } from '../../../models'; import { useRangePosition } from '../useRangePosition'; const releaseInfo = getReleaseInfo(); @@ -114,24 +112,12 @@ export const useMobileRangePicker = < const fieldProps = useSlotProps< typeof Field, UseMobileRangePickerSlotProps['field'], - | Partial< - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - > - | Partial< - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - >, + RangePickerPropsForFieldSlot< + boolean, + TDate, + TEnableAccessibleFieldDOMStructure, + InferError + >, TExternalProps >({ elementType: Field,