diff --git a/.github/styles/Blog/BrandName.yml b/.github/styles/Blog/BrandName.yml
index b95387c58510b..bfdb8da88c272 100644
--- a/.github/styles/Blog/BrandName.yml
+++ b/.github/styles/Blog/BrandName.yml
@@ -1,4 +1,7 @@
-# Without a non-breaking space, brand names can be split in the middle, with the start and end on two different lines.
+# Without a non-breaking space, brand names can be split in the middle
+# with the start and end on two different lines.
+# For example, Apple does this meticulously with their brand name: https://www.apple.com/macbook-air/.
+# Also read https://www.chrisdpeters.com/blog/using-non-breaking-spaces-to-help-with-branding/ for why.
extends: substitution
message: Use a non-breaking space for brand name ('%s' instead of '%s')
level: error
@@ -14,3 +17,8 @@ swap:
MUI Core: MUI Core
MUI Toolpad: MUI Toolpad
MUI Connect: MUI Connect
+ Stack Overflow: Stack Overflow
+# Don't forget to run the following command to generate the package writing-rules.zip file
+# Vale uses that ZIP file and not the YAML files.
+#
+# pnpm docs:zipRules
diff --git a/.github/workflows/closed-issue-message.yaml b/.github/workflows/closed-issue-message.yaml
index a14afd879f116..9dddd9cfa32b4 100644
--- a/.github/workflows/closed-issue-message.yaml
+++ b/.github/workflows/closed-issue-message.yaml
@@ -1,23 +1,27 @@
name: Add comment
+
on:
issues:
types:
- closed
-env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GH_REPO: ${{ github.repository }}
- NUMBER: ${{ github.event.issue.number }}
- BODY: |
- :warning: **This issue has been closed.**
- If you have a similar problem, please open a [new issue](https://github.com/mui/mui-x/issues/new/choose) and provide details about your specific problem.
- If you can provide additional information related to this topic that could help future readers, please feel free to leave a comment.
- APPENDIX: |
- **How did we do @${{ github.event.issue.user.login }}?**
- Your experience with our support team matters to us. If you have a moment, please share your thoughts through our [brief survey](https://tally.so/r/w4r5Mk?issue=${{ github.event.issue.number }}).
+permissions: {}
jobs:
add-comment:
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_REPO: ${{ github.repository }}
+ NUMBER: ${{ github.event.issue.number }}
+ BODY: |
+ :warning: **This issue has been closed.**
+ If you have a similar problem, please open a [new issue](https://github.com/mui/mui-x/issues/new/choose) and provide details about your specific problem.
+ If you can provide additional information related to this topic that could help future readers, please feel free to leave a comment.
+ APPENDIX: |
+
+ **How did we do @${{ github.event.issue.user.login }}?**
+ Your experience with our support team matters to us. If you have a moment, please share your thoughts through our [brief survey](https://tally.so/r/w4r5Mk?issue=${{ github.event.issue.number }}).
+
if: github.event.issue.state_reason != 'inactivity'
runs-on: ubuntu-latest
permissions:
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 01d8fd9197102..b83d736e55bf8 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -19,7 +19,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2
+ uses: github/codeql-action/init@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5
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@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2
+ uses: github/codeql-action/analyze@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5
diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml
index 64adb63bc4dee..a1efe0794c607 100644
--- a/.github/workflows/l10n.yml
+++ b/.github/workflows/l10n.yml
@@ -19,7 +19,7 @@ jobs:
- run: echo "${{ github.actor }}"
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Use Node.js 20.x
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
+ uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: 20
cache: 'yarn' # https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-dependencies
diff --git a/.github/workflows/mark-duplicate.yml b/.github/workflows/mark-duplicate.yml
index 15e82efe76c2b..bb3b4df5b23a6 100644
--- a/.github/workflows/mark-duplicate.yml
+++ b/.github/workflows/mark-duplicate.yml
@@ -14,7 +14,7 @@ jobs:
issues: write
steps:
- name: mark-duplicate
- uses: actions-cool/issues-helper@5457ae8d7c1dc20597a753501d30183ed8043c8b # v3.5.2
+ uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3.6.0
with:
actions: 'mark-duplicate'
token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml
index a12c61a4a79ed..cab433e1444d4 100644
--- a/.github/workflows/no-response.yml
+++ b/.github/workflows/no-response.yml
@@ -20,7 +20,7 @@ jobs:
contents: read
issues: write
steps:
- - uses: MBilalShafi/no-response-add-label@629add01d7b6f8e120811f978c42703736098947
+ - uses: MBilalShafi/no-response-add-label@8336c12292902f27b931154c34ba4670cb9899a2
with:
token: ${{ secrets.GITHUB_TOKEN }}
# Number of days of inactivity before an Issue is closed for lack of response
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index 43dd2dc1075fb..21b47b161d200 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -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@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2
+ uses: github/codeql-action/upload-sarif@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5
with:
sarif_file: results.sarif
diff --git a/.github/workflows/support-stackoverflow.yml b/.github/workflows/support-stackoverflow.yml
index 9ccd75e549dc5..c9d8069a636ff 100644
--- a/.github/workflows/support-stackoverflow.yml
+++ b/.github/workflows/support-stackoverflow.yml
@@ -29,7 +29,7 @@ jobs:
For support, please check out https://mui.com/x/introduction/support/. Thanks!
- If you have a question on Stack Overflow, you are welcome to link to it here, it might help others.
+ If you have a question on Stack Overflow, you are welcome to link to it here, it might help others.
If your issue is subsequently confirmed as a bug, and the report follows the issue template, it can be reopened.
close-issue: true
lock-issue: false
diff --git a/.github/workflows/vale-action.yml b/.github/workflows/vale-action.yml
index 61078d7162eef..dc6d9faaf213c 100644
--- a/.github/workflows/vale-action.yml
+++ b/.github/workflows/vale-action.yml
@@ -13,7 +13,7 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- - uses: errata-ai/vale-action@c4213d4de3d5f718b8497bd86161531c78992084 # v2.0.1
+ - uses: errata-ai/vale-action@38bf078c328061f59879b347ca344a718a736018 # v2.1.0
with:
reporter: github-pr-review
files: docs/data
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 41587985378a8..40064527c000f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,157 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-## v7.0.0-beta.3
+## 7.0.0-beta.4
+
+_Feb 23, 2024_
+
+We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
+
+- 🎁 Introduce a new DOM structure for the field components that provides a better accessibility
+- 🚀 Simplify Data Grid DOM structure for improved performance (#12013) @romgrk
+- 🕥 The support for IE11 has been removed (#12151) @flaviendelangle
+- 🐞 Bugfixes
+- 📚 Documentation improvements
+
+### Breaking changes
+
+- The support for IE11 has been removed from all MUI X packages. The `legacy` bundle that used to support old browsers like IE11 is no longer included.
+
+### Data Grid
+
+#### Breaking changes
+
+- The cell inner wrapper `.MuiDataGrid-cellContent` has been removed, use `.MuiDataGrid-cell` to style the cells.
+
+#### `@mui/x-data-grid@7.0.0-beta.4`
+
+- [DataGrid] Simplify cell DOM structure (#12013) @romgrk
+- [DataGrid] Fix values labels in `is any of` filter operator (#11939) @gitstart
+
+#### `@mui/x-data-grid-pro@7.0.0-beta.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+
+Same changes as in `@mui/x-data-grid@7.0.0-beta.4`.
+
+#### `@mui/x-data-grid-premium@7.0.0-beta.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
+
+Same changes as in `@mui/x-data-grid-pro@7.0.0-beta.4`.
+
+### Date Pickers
+
+#### Breaking changes
+
+- The `selectedSections` prop no longer accepts start and end indexes.
+ When selecting several — but not all — sections, the field components were not behaving correctly, you can now only select one or all sections:
+
+ ```diff
+
+ ```
+
+- The headless field hooks (e.g.: `useDateField`) now returns a new prop called `enableAccessibleFieldDOMStructure`.
+ This property is utilized to determine whether the anticipated UI is constructed using an accessible DOM structure. Learn more about this new [accessible DOM structure](/x/react-date-pickers/fields/#accessible-dom-structure).
+
+ When building a custom UI, you are most-likely only supporting one DOM structure, so you can remove `enableAccessibleFieldDOMStructure` before it is passed to the DOM:
+
+ ```diff
+ function MyCustomTextField(props) {
+ const {
+ + // Should be ignored
+ + enableAccessibleFieldDOMStructure,
+ // ... rest of the props you are using
+ } = props;
+
+ return ( /* Some UI to edit the date */ )
+ }
+
+ function MyCustomField(props) {
+ const fieldResponse = useDateField({
+ ...props,
+ + // If you only support one DOM structure, we advise you to hardcode it here to avoid unwanted switches in your application
+ + enableAccessibleFieldDOMStructure: false,
+ });
+
+ return ;
+ }
+
+ function App() {
+ return ;
+ }
+ ```
+
+- The following internal types were exported by mistake and have been removed from the public API:
+
+ - `UseDateFieldDefaultizedProps`
+ - `UseTimeFieldDefaultizedProps`
+ - `UseDateTimeFieldDefaultizedProps`
+ - `UseSingleInputDateRangeFieldComponentProps`
+ - `UseSingleInputTimeRangeFieldComponentProps`
+ - `UseSingleInputDateTimeRangeFieldComponentProps`
+
+#### `@mui/x-date-pickers@7.0.0-beta.4`
+
+- [fields] Add a11y support to multi-HTML field (#12173) @LukasTy
+- [fields] Use the `PickersTextField` component in the fields (#10649) @flaviendelangle
+- [pickers] Fix styling props propagation to `DateTimePickerTabs` (#12096) @LukasTy
+
+#### `@mui/x-date-pickers-pro@7.0.0-beta.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+
+Same changes as in `@mui/x-date-pickers@7.0.0-beta.4`.
+
+### Charts / `@mui/x-charts@7.0.0-beta.4`
+
+#### Breaking changes
+
+These components are no longer exported from `@mui/x-charts`:
+
+- `CartesianContextProvider`
+- `DrawingProvider`
+
+#### `@mui/x-charts@7.0.0-beta.4`
+
+- [charts] Don't display text if no value is provided (#12127) @alexfauquette
+- [charts] Remove export of context providers (#12123) @oliviertassinari
+
+### Tree View / `@mui/x-tree-view@7.0.0-beta.4`
+
+- [TreeView] Stop using custom `findIndex` to support IE11 (#12129) @flaviendelangle
+
+### Docs
+
+- [docs] Add recipe for hiding separator on non-resizable columns (#12134) @michelengelen
+- [docs] Add small improvements to the Gauge Chart page (#12076) @danilo-leal
+- [docs] Add the 'point' scaleType to the axis documentation (#12179) @alexfauquette
+- [docs] Clarify Pickers 'Component composition' section (#12097) @LukasTy
+- [docs] Fix "Licensing" page link (#12156) @LukasTy
+- [docs] Fix the Treemap illustration (#12185) @danilo-leal
+- [docs] Fix error raised by Grammarly on the page @oliviertassinari
+- [docs] Improve performance on Charts entry point @oliviertassinari
+- [docs] Link to React Transition Group with https @oliviertassinari
+- [docs] Move Heatmap to `pro` plan (#12047) @alexfauquette
+- [docs] Reduce number of Vale errors @oliviertassinari
+- [docs] Remove default value set to `undefined` (#12128) @alexfauquette
+
+### Core
+
+- [core] Fix docs link check (#12135) @LukasTy
+- [core] Fix missing context display names (#12124) @oliviertassinari
+- [core] Fix shortcuts when Caps Lock enabled (#12121) @oliviertassinari
+- [core] Remove IE 11 compat logic (#12119) @oliviertassinari
+- [core] Simplify key utils (#12120) @oliviertassinari
+- [core] Use the @mui/internal-scripts package (#12142) @michaldudak
+- [all components] Remove legacy IE 11 bundle (#12151) @flaviendelangle
+- [code-infra] Bump monorepo (#11880) @Janpot
+- [code-infra] Use `experimental.cpus` to control amount of export workers in Next.js (#12095) @Janpot
+- [docs-infra] Remove randomized API page layout (#11876) @alexfauquette
+- [test] Create local wrapper over `describeConformance` (#12130) @michaldudak
+
+## 7.0.0-beta.3
_Feb 16, 2024_
@@ -67,7 +217,7 @@ Same changes as in `@mui/x-data-grid-pro@7.0.0-beta.3`.
- [core] Sort prop asc (#12033) @oliviertassinari
- [core] Bump monorepo (#12055) @alexfauquette
-## v7.0.0-beta.2
+## 7.0.0-beta.2
_Feb 9, 2024_
@@ -1353,7 +1503,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
- The clipboard related exports `ignoreValueFormatterDuringExport` and `splitClipboardPastedText` are no longer prefixed with `unstable_`.
-- The deprecated constants `SUBMIT_FILTER_STROKE_TIME` and `SUBMIT_FILTER_DATE_STROKE_TIME` have been removed from the `DataGrid` exports. Use the [`filterDebounceMs`](https://next.mui.com/x/api/data-grid/data-grid/#DataGrid-prop-filterDebounceMs) prop to customize filter debounce time.
+- The deprecated constants `SUBMIT_FILTER_STROKE_TIME` and `SUBMIT_FILTER_DATE_STROKE_TIME` have been removed from the `DataGrid` exports. Use the [`filterDebounceMs`](https://next.mui.com/x/api/data-grid/data-grid/#data-grid-prop-filterDebounceMs) prop to customize filter debounce time.
- The `slots.preferencesPanel` slot and the `slotProps.preferencesPanel` prop were removed. Use `slots.panel` and `slotProps.panel` instead.
@@ -2202,7 +2352,68 @@ Here is an example of the renaming for the `` component.
- [core] Update release instructions as per v7 configuration (#10962) @MBilalShafi
- [license] Correctly throw errors (#10924) @oliviertassinari
-## v6.19.4
+## 6.19.5
+
+_Feb 23, 2024_
+
+We'd like to offer a big thanks to the 6 contributors who made this release possible. Here are some highlights ✨:
+
+- 🐞 Bugfixes
+- 📚 Documentation improvements
+
+### Data Grid
+
+#### `@mui/x-data-grid@6.19.5`
+
+- [DataGrid] Fix styling grid filter input single select (#12079) @FreakDroid
+
+#### `@mui/x-data-grid-pro@6.19.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+
+Same changes as in `@mui/x-data-grid@6.19.5`.
+
+#### `@mui/x-data-grid-premium@6.19.5` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
+
+Same changes as in `@mui/x-data-grid-pro@6.19.5`.
+
+### Date Pickers
+
+#### `@mui/x-date-pickers@6.19.5`
+
+- [pickers] Fix `referenceDate` day calendar focus (#12136) @LukasTy
+- [pickers] Fix styling props propagation to `DateTimePickerTabs` (#12131) @LukasTy
+
+#### `@mui/x-date-pickers-pro@6.19.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+
+Same changes as in `@mui/x-date-pickers@6.19.5`.
+
+### Charts / `@mui/x-charts@6.19.5`
+
+- [charts] Allow to skip animation on sparkline bar (#12160) @alexfauquette
+
+### Docs
+
+- [docs] Clarify Pickers 'Component composition' section (#12147) @LukasTy
+- [docs] Fix 301 redirection to StackBlitz @oliviertassinari
+- [docs] Fix 301 to Material UI @oliviertassinari
+- [docs] Fix 301 to Material UI @oliviertassinari
+- [docs] Fix 404 links to translation source @oliviertassinari
+- [docs] Fix dead link to translations @oliviertassinari
+- [docs] Fix the Treemap illustration (#12189) @danilo-leal
+- [docs] Fix typo for `AdapterDateFnsV3` (#12037) @flaviendelangle
+- [docs] Improve performance on Charts entry point @oliviertassinari
+- [docs] Move Heatmap to pro (#12170) @alexfauquette
+- [docs] Remove Charts installation next tag call-out (#12133) @LukasTy
+- [docs] Removed `focused` prop from demo (#12126) @michelengelen
+- [docs] Add missing Heatmap pro icon @oliviertassinari
+- [docs] Add more illustrations to the Overview page (#12041) @danilo-leal
+- [docs] Avoid use of shorthand (#12009) @oliviertassinari
+
+### Core
+
+- [core] Fix CI @oliviertassinari
+- [core] Fix docs link check (#12137) @LukasTy
+
+## 6.19.4
_Feb 9, 2024_
@@ -2214,7 +2425,7 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
### Data Grid
-#### `@mui/x-data-grid@v6.19.4`
+#### `@mui/x-data-grid@6.19.4`
- [DataGrid] Add support for dialogs in menu actions (#11937) @cherniavskii
- [DataGrid] Allow passing readonly arrays to `pageSizeOptions` prop (#11992) @pcorpet
@@ -2222,28 +2433,28 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
- [DataGrid] Replace `eval` with `new Function` (#11962) @cherniavskii
- [l10n] Improve Danish (da-DK) locale (#11972) @ShahrazH
-#### `@mui/x-data-grid-pro@v6.19.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+#### `@mui/x-data-grid-pro@6.19.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
-Same changes as in `@mui/x-data-grid@v6.19.4`.
+Same changes as in `@mui/x-data-grid@6.19.4`.
-#### `@mui/x-data-grid-premium@v6.19.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
+#### `@mui/x-data-grid-premium@6.19.4` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
-Same changes as in `@mui/x-data-grid-pro@v6.19.4`, plus:
+Same changes as in `@mui/x-data-grid-pro@6.19.4`, plus:
- [DataGridPremium] Fix autosize grouping cell (#11990) @romgrk
- [DataGridPremium] Fix error after closing print export (#11889) @cherniavskii
### Date Pickers
-#### `@mui/x-date-pickers@v6.19.4`
+#### `@mui/x-date-pickers@6.19.4`
- [pickers] Avoid relying on locale in Luxon `isWithinRange` method (#11940) @LukasTy
-#### `@mui/x-date-pickers-pro@v6.19.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
+#### `@mui/x-date-pickers-pro@6.19.4` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
-Same changes as in `@mui/x-date-pickers@v6.19.4`.
+Same changes as in `@mui/x-date-pickers@6.19.4`.
-### Charts / `@mui/x-charts@v6.19.4`
+### Charts / `@mui/x-charts@6.19.4`
- [charts] Add `reverse` property to axes (#11959) @alexfauquette
- [charts] Allow series ids to be numbers (#11960) @alexfauquette
@@ -4053,7 +4264,7 @@ We'd like to offer a big thanks to the 13 contributors who made this release pos
#### `@mui/x-data-grid@6.9.1`
-- [DataGrid] Add Joy UI `tooltip` and `loadingOverlay` slots (#9028) @cherniavskii
+- [DataGrid] Add Joy UI `tooltip` and `loadingOverlay` slots (#9028) @cherniavskii
- [DataGrid] Add section about enabling pagination on Pro and Premium (#8759) @joserodolfofreitas
- [DataGrid] Don't forward `editCellState` prop to DOM element (#9501) @m4theushw
- [DataGrid] Add experimental API for faster filtering performance (#9254) @romgrk
@@ -4184,7 +4395,7 @@ Same changes as in `@mui/x-date-pickers@6.9.0`.
- [docs] Fix random screenshot generation (#9364) @cherniavskii
- [docs] Remove random generation from chart doc example (#9343) @flaviendelangle
- [docs] Sync h1 with sidenav link (#9252) @oliviertassinari
-- [docs] Use the mui-x Stack Overflow tag (#9352) @oliviertassinari
+- [docs] Use the mui-x Stack Overflow tag (#9352) @oliviertassinari
### Core
@@ -4511,8 +4722,8 @@ We'd like to offer a big thanks to the 12 contributors who made this release pos
- [DataGrid] Fix DataGrid rendering in JSDOM (#8968) @cherniavskii
- [DataGrid] Fix layout when rendered inside a parent with `display: grid` (#8577) @cherniavskii
-- [DataGrid] Add Joy UI icon slots (#8940) @siriwatknp
-- [DataGrid] Add Joy UI pagination slot (#8871) @cherniavskii
+- [DataGrid] Add Joy UI icon slots (#8940) @siriwatknp
+- [DataGrid] Add Joy UI pagination slot (#8871) @cherniavskii
- [DataGrid] Extract `baseChip` slot (#8748) @cherniavskii
- [DataGridPremium] Implement Clipboard import (#7389) @cherniavskii
- [l10n] Improve French (fr-FR) locale (#8825) @allereaugabriel
@@ -4562,7 +4773,7 @@ We'd like to offer a big thanks to the 7 contributors who made this release poss
- [DataGrid] Fix falsy filter values not showing in filter button tooltip (#8550) @ithrforu
- [DataGrid] Fix missing watermark in Pro and Premium packages (#8797) @cherniavskii
- [DataGrid] Remove unwarranted warning log (#8847) @romgrk
-- [DataGrid] Add Joy UI slots (`Select`, `SelectOption`, `InputLabel`, `FormControl`) (#8747) @cherniavskii
+- [DataGrid] Add Joy UI slots (`Select`, `SelectOption`, `InputLabel`, `FormControl`) (#8747) @cherniavskii
- [DataGridPremium] Fix expanded groups being collapsed after calling `updateRows` (#8823) @cherniavskii
### `@mui/x-date-pickers@6.3.1` / `@mui/x-date-pickers-pro@6.3.1`
@@ -4613,7 +4824,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
- [DataGrid] Add overlay classes to `gridClasses` (#8686) @lindapaiste
- [DataGrid] Avoid passing `api` prop to div (#8679) @someden
- [DataGrid] Fix 'ResizeObserver loop limit exceeded' error (#8744) @m4theushw
-- [DataGrid] Add Joy UI slots (button and switch) (#8699) @siriwatknp
+- [DataGrid] Add Joy UI slots (button and switch) (#8699) @siriwatknp
- [DataGrid] Fix aggregation label alignment (#8694) @joserodolfofreitas
- [DataGridPremium] Fix infinite loop when updating grouped rows (#8693) @cherniavskii
- [DataGridPro] Fix error after updating `columns` and `columnGroupingModel` at once (#8730) @cherniavskii
@@ -4675,7 +4886,7 @@ We'd like to offer a big thanks to the 9 contributors who made this release poss
#### Changes
- [DataGrid] Add `getTogglableColumns` to `Hide all` and `Show all` actions (#8496) @MBilalShafi
-- [DataGrid] Add Grid + Joy UI experiment page (#8067) @cherniavskii
+- [DataGrid] Add Grid + Joy UI experiment page (#8067) @cherniavskii
- [DataGrid] Fix print style when rendering inside Shadow DOM (#8656) @Bwatermelon
- [DataGrid] Replace `GridAutoSizer` with `ResizeObserver` (#8091) @m4theushw
- [DataGrid] Use stable ID for the placeholder filter item (#8603) @m4theushw
diff --git a/babel.config.js b/babel.config.js
index 901553e569693..4b9c46dc91c7c 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -34,7 +34,7 @@ const productionPlugins = [
];
module.exports = function getBabelConfig(api) {
- const useESModules = api.env(['legacy', 'modern', 'stable', 'rollup']);
+ const useESModules = api.env(['modern', 'stable', 'rollup']);
const presets = [
[
@@ -155,12 +155,6 @@ module.exports = function getBabelConfig(api) {
],
],
},
- legacy: {
- plugins: [
- // IE11 support
- '@babel/plugin-transform-object-assign',
- ],
- },
test: {
sourceMaps: 'both',
plugins: [
diff --git a/changelogOld/CHANGELOG.v5.md b/changelogOld/CHANGELOG.v5.md
index dc300290b139f..62a6d292bf609 100644
--- a/changelogOld/CHANGELOG.v5.md
+++ b/changelogOld/CHANGELOG.v5.md
@@ -2527,7 +2527,7 @@ A big thanks to the 5 contributors who made this release possible. Here are some
- [core] Fix `yarn prettier` script (#3292) @oliviertassinari
- [core] Improve tests for Tree Data (#3366) @flaviendelangle
- [core] Never import directly from the `__modules__` folder in the `x-data-grid-generator` package (#3379) @flaviendelangle
-- [core] Transition to a new Stack Overflow tag (#3308) @oliviertassinari
+- [core] Transition to a new Stack Overflow tag (#3308) @oliviertassinari
- [core] Update monorepo (#3370) @flaviendelangle
- [core] Use pre-processors for sorting and filtering (#3318) @flaviendelangle
- [test] Replace `useFakeTimers` (#3323) @m4theushw
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000000000..4425211595f51
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1 @@
+next.config.local.js
diff --git a/docs/.link-check-errors.txt b/docs/.link-check-errors.txt
index 87eaaff0f8d8b..8096f1b7324bf 100644
--- a/docs/.link-check-errors.txt
+++ b/docs/.link-check-errors.txt
@@ -1,18 +1,2 @@
Broken links found by `yarn docs:link-check` that exist:
-- https://mui.com/base-ui/react-autocomplete/hooks-api/#use-autocomplete
-- https://mui.com/base-ui/react-portal/components-api/
-- https://mui.com/material-ui/api/button/#props
-- https://mui.com/material-ui/api/input-base/#InputBase-prop-disableInjectingGlobalStyles
-- https://mui.com/material-ui/api/menu-item/#css
-- https://mui.com/material-ui/api/popper/#props
-- https://mui.com/material-ui/guides/api/#native-properties
-- https://mui.com/system/styles/api/#creategenerateclassname-options-class-name-generator
-- https://mui.com/system/styles/api/#serverstylesheets
-- https://mui.com/system/styles/api/#stylesprovider
-- https://mui.com/system/styles/api/#themeprovider
-- https://mui.com/x/api/charts/gauge/#classes
-- https://mui.com/x/api/data-grid/data-grid/#DataGrid-prop-filterDebounceMs
-- https://mui.com/x/api/data-grid/data-grid/#props
-- https://mui.com/x/api/data-grid/data-grid/#slots
-- https://mui.com/x/api/date-pickers/date-picker/#slots
diff --git a/docs/babel.config.js b/docs/babel.config.js
index 2ec7799d61593..d7a30a01f9136 100644
--- a/docs/babel.config.js
+++ b/docs/babel.config.js
@@ -35,8 +35,6 @@ module.exports = function getBabelConfig(api) {
],
plugins: [
...baseConfig.plugins,
- // for IE 11 support
- '@babel/plugin-transform-object-assign',
'babel-plugin-preval',
[
'babel-plugin-module-resolver',
diff --git a/docs/data/charts/axis/axis.md b/docs/data/charts/axis/axis.md
index b860975fb644f..0fa220dbc0fa3 100644
--- a/docs/data/charts/axis/axis.md
+++ b/docs/data/charts/axis/axis.md
@@ -41,6 +41,7 @@ Those demonstrations use the defaultized values.
The axis type is specified by its property `scaleType` which expect one of the following values:
- `'band'`: Split the axis in equal band. Mostly used for bar charts.
+- `'point'`: Split the axis in equally spaced points. Mostly used for line charts on categories.
- `'linear'`, `'log'`, `'sqrt'`: Map numerical values to the space available for the chart. `'linear'` is the default behavior.
- `'time'`, `'utc'`: Map JavaScript `Date()` object to the space available for the chart.
@@ -51,7 +52,7 @@ Which expects an array of value coherent with the `scaleType`:
- For `'linear'`, `'log'`, or `'sqrt'` it should contain numerical values
- For `'time'` or `'utc'` it should contain `Date()` objects
-- For `'band'` it can contain `string`, or numerical values
+- For `'band'` or `'point'` it can contain `string`, or numerical values
Some series types also require specific axis attributes:
diff --git a/docs/data/charts/components/components.md b/docs/data/charts/components/components.md
index 6cb3134cd5549..1501c39b63b1b 100644
--- a/docs/data/charts/components/components.md
+++ b/docs/data/charts/components/components.md
@@ -1,7 +1,7 @@
---
title: Charts - Custom components
productId: x-charts
-components: ChartsClipPath, ChartsSurface, CartesianContextProvider, DrawingProvider, HighlightProvider, InteractionProvider, SeriesContextProvider
+components: ChartsClipPath, ChartsSurface
---
# Charts - Custom components
diff --git a/docs/data/charts/heat-map/heat-map.md b/docs/data/charts/heat-map/heat-map.md
index e44f62204401d..6d6413b064b8e 100644
--- a/docs/data/charts/heat-map/heat-map.md
+++ b/docs/data/charts/heat-map/heat-map.md
@@ -1,9 +1,9 @@
---
-title: React Heat map chart
+title: React Heatmap chart
productId: x-charts
---
-# Charts - Heatmap 🚧
+# Charts - Heatmap [](/x/introduction/licensing/#pro-plan 'Pro plan')🚧
Heatmap charts allow to highlight correlation between categories.
diff --git a/docs/data/charts/overview/overview.md b/docs/data/charts/overview/overview.md
index 26b8942a704e4..e3347418beb63 100644
--- a/docs/data/charts/overview/overview.md
+++ b/docs/data/charts/overview/overview.md
@@ -16,7 +16,7 @@ packageName: '@mui/x-charts'
The `@mui/x-charts` is an MIT library for rendering charts relying on [D3.js](https://d3js.org/) for data manipulation and SVG for rendering.
And, like other MUI X components, charts are production-ready components that integrate smoothly into your app.
-With a high level of customization, MUI X Charts provides on three levels of customization layers: **single components** with great defaults, extensive **configuration props**, and **subcomponents** for flexible composition.
+With a high level of customization, MUI X Charts provides three levels of customization layers: **single components** with great defaults, extensive **configuration props**, and **subcomponents** for flexible composition.
Additionally, you can also use all the [MUI System](https://mui.com/system/getting-started/) tools, such as the theme override or the `sx` prop.
{{"demo": "ChartsOverviewDemo.js", "defaultCodeOpen": true}}
diff --git a/docs/data/charts/tree-map/tree-map.md b/docs/data/charts/tree-map/tree-map.md
index b75b76738a00e..a9dbb2832c96c 100644
--- a/docs/data/charts/tree-map/tree-map.md
+++ b/docs/data/charts/tree-map/tree-map.md
@@ -1,14 +1,14 @@
---
-title: React Tree map chart
+title: React Treemap chart
productId: x-charts
---
-# Charts - Tree map 🚧
+# Charts - Treemap 🚧
-
Tree map allows to display data with a hierarchical structure.
+
Treemap allows to display data with a hierarchical structure.
:::warning
-The Tree map Chart component isn't available yet, but you can upvote [**this GitHub issue**](https://github.com/mui/mui-x/issues/7924) to see it arrive sooner.
+The Treemap Chart component isn't available yet, but you can upvote [**this GitHub issue**](https://github.com/mui/mui-x/issues/7924) to see it arrive sooner.
Don't hesitate to leave a comment there to influence what gets built.
Especially if you already have a use case for this component, or if you're facing a pain point with your current solution.
diff --git a/docs/data/data-grid/accessibility/accessibility.md b/docs/data/data-grid/accessibility/accessibility.md
index 817bf14988e45..3a54c27b73b07 100644
--- a/docs/data/data-grid/accessibility/accessibility.md
+++ b/docs/data/data-grid/accessibility/accessibility.md
@@ -16,7 +16,7 @@ WCAG 2.1 has three levels of conformance: A, AA, and AAA.
Level AA meets the most commonly encountered conformance guidelines.
This is the most common target for organizations so what we aims to support very well.
-The [WAI-ARIA authoring practices](https://www.w3.org/WAI/ARIA/apg/patterns/grid/) provide valuable information on how to optimize the accessibility of a data grid.
+The [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/grid/) provide valuable information on how to optimize the accessibility of a data grid.
## Density
@@ -47,7 +47,7 @@ The Data Grid listens for keyboard interactions from the user and emits events i
### Tab sequence
-According to [WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/patterns/grid/), only one of the focusable elements contained by a composite widget should be included in the page tab sequence.
+According to [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/grid/), only one of the focusable elements contained by a composite widget should be included in the page tab sequence.
For an element to be included in the tab sequence, it needs to have a `tabIndex` value of zero or greater.
When a user focuses on a Data Grid cell, the first inner element with `tabIndex={0}` receives the focus.
diff --git a/docs/data/data-grid/aggregation/AggregationRenderCell.js b/docs/data/data-grid/aggregation/AggregationRenderCell.js
index 4f034261d4239..1bf1c1bcc7b3a 100644
--- a/docs/data/data-grid/aggregation/AggregationRenderCell.js
+++ b/docs/data/data-grid/aggregation/AggregationRenderCell.js
@@ -11,6 +11,7 @@ const COLUMNS = [
type: 'number',
width: 180,
availableAggregationFunctions: ['min', 'max', 'avg', 'size'],
+ display: 'flex',
// Imdb rating is on a scale from 0 to 10, the MUI rating component is on a scale from 0 to 5
renderCell: (params) => {
if (params.aggregation && !params.aggregation.hasCellUnit) {
diff --git a/docs/data/data-grid/aggregation/AggregationRenderCell.tsx b/docs/data/data-grid/aggregation/AggregationRenderCell.tsx
index 11f653668ba1b..a0de64c3ee690 100644
--- a/docs/data/data-grid/aggregation/AggregationRenderCell.tsx
+++ b/docs/data/data-grid/aggregation/AggregationRenderCell.tsx
@@ -11,6 +11,7 @@ const COLUMNS: GridColDef[] = [
type: 'number',
width: 180,
availableAggregationFunctions: ['min', 'max', 'avg', 'size'],
+ display: 'flex',
// Imdb rating is on a scale from 0 to 10, the MUI rating component is on a scale from 0 to 5
renderCell: (params) => {
if (params.aggregation && !params.aggregation.hasCellUnit) {
diff --git a/docs/data/data-grid/column-definition/RenderExpandCellGrid.js b/docs/data/data-grid/column-definition/RenderExpandCellGrid.js
index 0f63178901493..598c8d14e4a83 100644
--- a/docs/data/data-grid/column-definition/RenderExpandCellGrid.js
+++ b/docs/data/data-grid/column-definition/RenderExpandCellGrid.js
@@ -38,8 +38,7 @@ const GridCellExpand = React.memo(function GridCellExpand(props) {
}
function handleKeyDown(nativeEvent) {
- // IE11, Edge (prior to using Bink?) use 'Esc'
- if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
+ if (nativeEvent.key === 'Escape') {
setShowFullCell(false);
}
}
diff --git a/docs/data/data-grid/column-definition/RenderExpandCellGrid.tsx b/docs/data/data-grid/column-definition/RenderExpandCellGrid.tsx
index 945137a179c8f..43420b5fc9c66 100644
--- a/docs/data/data-grid/column-definition/RenderExpandCellGrid.tsx
+++ b/docs/data/data-grid/column-definition/RenderExpandCellGrid.tsx
@@ -45,8 +45,7 @@ const GridCellExpand = React.memo(function GridCellExpand(
}
function handleKeyDown(nativeEvent: KeyboardEvent) {
- // IE11, Edge (prior to using Bink?) use 'Esc'
- if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
+ if (nativeEvent.key === 'Escape') {
setShowFullCell(false);
}
}
diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizing.js b/docs/data/data-grid/column-dimensions/ColumnAutosizing.js
index 030c4d0534d92..3d46d27bbd9b0 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizing.js
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizing.js
@@ -36,7 +36,12 @@ function useData(length) {
{ field: 'id', headerName: 'Brand ID' },
{ field: 'brand', headerName: 'Brand name' },
{ field: 'rep', headerName: 'Representative' },
- { field: 'rating', headerName: 'Rating', renderCell: renderRating },
+ {
+ field: 'rating',
+ headerName: 'Rating',
+ renderCell: renderRating,
+ display: 'flex',
+ },
];
return { rows, columns };
diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizing.tsx b/docs/data/data-grid/column-dimensions/ColumnAutosizing.tsx
index 5f813676e7ee8..841b6642113d8 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizing.tsx
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizing.tsx
@@ -39,7 +39,12 @@ function useData(length: number) {
{ field: 'id', headerName: 'Brand ID' },
{ field: 'brand', headerName: 'Brand name' },
{ field: 'rep', headerName: 'Representative' },
- { field: 'rating', headerName: 'Rating', renderCell: renderRating },
+ {
+ field: 'rating',
+ headerName: 'Rating',
+ renderCell: renderRating,
+ display: 'flex' as const,
+ },
];
return { rows, columns };
diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.js b/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.js
index 01490fbfceb23..b030e5f9c060b 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.js
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.js
@@ -15,7 +15,12 @@ const columns = [
{ field: 'id', headerName: 'Brand ID' },
{ field: 'brand', headerName: 'Brand name' },
{ field: 'rep', headerName: 'Representative' },
- { field: 'rating', headerName: 'Rating', renderCell: renderRating },
+ {
+ field: 'rating',
+ headerName: 'Rating',
+ renderCell: renderRating,
+ display: 'flex',
+ },
];
function renderRating(params) {
diff --git a/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.tsx b/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.tsx
index 2140a5e5ae3b0..d5a7cee379fb1 100644
--- a/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.tsx
+++ b/docs/data/data-grid/column-dimensions/ColumnAutosizingAsync.tsx
@@ -3,7 +3,7 @@ import Button from '@mui/material/Button';
import Rating from '@mui/material/Rating';
import Stack from '@mui/material/Stack';
import { useGridApiRef } from '@mui/x-data-grid';
-import { DataGridPro, GridApiPro } from '@mui/x-data-grid-pro';
+import { DataGridPro, GridApiPro, GridColDef } from '@mui/x-data-grid-pro';
import {
randomInt,
randomRating,
@@ -12,11 +12,16 @@ import {
import * as ReactDOM from 'react-dom';
import { GridData } from 'docsx/data/data-grid/virtualization/ColumnVirtualizationGrid';
-const columns = [
+const columns: GridColDef[] = [
{ field: 'id', headerName: 'Brand ID' },
{ field: 'brand', headerName: 'Brand name' },
{ field: 'rep', headerName: 'Representative' },
- { field: 'rating', headerName: 'Rating', renderCell: renderRating },
+ {
+ field: 'rating',
+ headerName: 'Rating',
+ renderCell: renderRating,
+ display: 'flex',
+ },
];
function renderRating(params: any) {
diff --git a/docs/data/data-grid/custom-columns/SparklineColumn.js b/docs/data/data-grid/custom-columns/SparklineColumn.js
index 3b6eb6b9016b6..f2a38c1813cfa 100644
--- a/docs/data/data-grid/custom-columns/SparklineColumn.js
+++ b/docs/data/data-grid/custom-columns/SparklineColumn.js
@@ -24,6 +24,7 @@ const sparklineColumnType = {
sortable: false,
editable: false,
groupable: false,
+ display: 'flex',
renderCell: (params) => ,
};
diff --git a/docs/data/data-grid/custom-columns/SparklineColumn.tsx b/docs/data/data-grid/custom-columns/SparklineColumn.tsx
index b643d30d037d6..cf646189b49f8 100644
--- a/docs/data/data-grid/custom-columns/SparklineColumn.tsx
+++ b/docs/data/data-grid/custom-columns/SparklineColumn.tsx
@@ -36,6 +36,7 @@ const sparklineColumnType: GridColTypeDef = {
sortable: false,
editable: false,
groupable: false,
+ display: 'flex',
renderCell: (params) => ,
};
diff --git a/docs/data/data-grid/demo/PopularFeaturesDemo.js b/docs/data/data-grid/demo/PopularFeaturesDemo.js
index b30a71abeae74..3da89e7e926b2 100644
--- a/docs/data/data-grid/demo/PopularFeaturesDemo.js
+++ b/docs/data/data-grid/demo/PopularFeaturesDemo.js
@@ -368,6 +368,7 @@ const columns = [
flex: 0.2,
minWidth: 100,
groupable: false,
+ display: 'flex',
renderCell: (params) => {
if (params.aggregation) {
return ;
@@ -430,6 +431,7 @@ const columns = [
flex: 0.3,
type: 'singleSelect',
valueOptions: ['Premium', 'Pro', 'Community'],
+ display: 'flex',
renderCell: (params) => {
if (params.aggregation) {
return ;
diff --git a/docs/data/data-grid/demo/PopularFeaturesDemo.tsx b/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
index 982e81055f7e2..89912c4f12c4b 100644
--- a/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
+++ b/docs/data/data-grid/demo/PopularFeaturesDemo.tsx
@@ -383,6 +383,7 @@ const columns: GridColDef[] = [
flex: 0.2,
minWidth: 100,
groupable: false,
+ display: 'flex',
renderCell: (params) => {
if (params.aggregation) {
return ;
@@ -445,6 +446,7 @@ const columns: GridColDef[] = [
flex: 0.3,
type: 'singleSelect',
valueOptions: ['Premium', 'Pro', 'Community'],
+ display: 'flex',
renderCell: (params: GridRenderCellParams) => {
if (params.aggregation) {
return ;
diff --git a/docs/data/data-grid/editing/CustomEditComponent.js b/docs/data/data-grid/editing/CustomEditComponent.js
index d5d5cd3596fdf..bdacf3318440e 100644
--- a/docs/data/data-grid/editing/CustomEditComponent.js
+++ b/docs/data/data-grid/editing/CustomEditComponent.js
@@ -58,6 +58,7 @@ const columns = [
{
field: 'rating',
headerName: 'Rating',
+ display: 'flex',
renderCell: renderRating,
renderEditCell: renderRatingEditInputCell,
editable: true,
diff --git a/docs/data/data-grid/editing/CustomEditComponent.tsx b/docs/data/data-grid/editing/CustomEditComponent.tsx
index 63d036378717a..d0fb1bde9c103 100644
--- a/docs/data/data-grid/editing/CustomEditComponent.tsx
+++ b/docs/data/data-grid/editing/CustomEditComponent.tsx
@@ -65,6 +65,7 @@ const columns: GridColDef[] = [
{
field: 'rating',
headerName: 'Rating',
+ display: 'flex',
renderCell: renderRating,
renderEditCell: renderRatingEditInputCell,
editable: true,
diff --git a/docs/data/data-grid/editing/ValidateServerNameGrid.tsx b/docs/data/data-grid/editing/ValidateServerNameGrid.tsx
index 0fa47993d1712..5b460c759370f 100644
--- a/docs/data/data-grid/editing/ValidateServerNameGrid.tsx
+++ b/docs/data/data-grid/editing/ValidateServerNameGrid.tsx
@@ -25,7 +25,7 @@ const StyledBox = styled('div')(({ theme }) => ({
},
}));
-let promiseTimeout: any;
+let promiseTimeout: ReturnType;
function validateName(username: string): Promise {
const existingUsers = rows.map((row) => row.name.toLowerCase());
diff --git a/docs/data/data-grid/overview/overview.md b/docs/data/data-grid/overview/overview.md
index 8f6051360e5f7..fbee25d014715 100644
--- a/docs/data/data-grid/overview/overview.md
+++ b/docs/data/data-grid/overview/overview.md
@@ -111,7 +111,7 @@ Here are some resources you might be interested in to learn more about the data
- The [source on GitHub](https://github.com/mui/mui-x/tree/HEAD/packages/)
- The [Material Design specification](https://m2.material.io/components/data-tables) specification
-- The accessibility [WAI-ARIA authoring practices](https://www.w3.org/WAI/ARIA/apg/patterns/grid/)
+- The accessibility [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/grid/)
- The Figma, Adobe XD, and Sketch [design kits](https://mui.com/design-kits/).
## API
diff --git a/docs/data/data-grid/sorting/GetSortComparator.js b/docs/data/data-grid/sorting/GetSortComparator.js
new file mode 100644
index 0000000000000..53ff478e32891
--- /dev/null
+++ b/docs/data/data-grid/sorting/GetSortComparator.js
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { DataGrid, gridStringOrNumberComparator } from '@mui/x-data-grid';
+import {
+ randomQuantity,
+ randomId,
+ randomCommodity,
+} from '@mui/x-data-grid-generator';
+
+const columns = [
+ { field: 'commodity', headerName: 'Commodity', width: 200 },
+ {
+ type: 'number',
+ field: 'quantity',
+ headerName: 'Quantity',
+ getSortComparator: (sortDirection) => {
+ const modifier = sortDirection === 'desc' ? -1 : 1;
+ return (value1, value2, cellParams1, cellParams2) => {
+ if (value1 === null) {
+ return 1;
+ }
+ if (value2 === null) {
+ return -1;
+ }
+ return (
+ modifier *
+ gridStringOrNumberComparator(value1, value2, cellParams1, cellParams2)
+ );
+ };
+ },
+ },
+];
+
+const rows = [
+ { id: randomId(), commodity: randomCommodity(), quantity: randomQuantity() },
+ { id: randomId(), commodity: randomCommodity(), quantity: null },
+ { id: randomId(), commodity: randomCommodity(), quantity: randomQuantity() },
+ { id: randomId(), commodity: randomCommodity(), quantity: null },
+ { id: randomId(), commodity: randomCommodity(), quantity: randomQuantity() },
+];
+
+export default function GetSortComparator() {
+ return (
+
+ );
+}
diff --git a/docs/data/data-grid/sorting/GetSortComparator.tsx.preview b/docs/data/data-grid/sorting/GetSortComparator.tsx.preview
new file mode 100644
index 0000000000000..6f326f7a9cd17
--- /dev/null
+++ b/docs/data/data-grid/sorting/GetSortComparator.tsx.preview
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/data/data-grid/sorting/sorting.md b/docs/data/data-grid/sorting/sorting.md
index 3b486b634f8df..858cfec142d00 100644
--- a/docs/data/data-grid/sorting/sorting.md
+++ b/docs/data/data-grid/sorting/sorting.md
@@ -118,6 +118,16 @@ The sorting is based on `isAdmin` and then on `name`, if necessary. It re-uses t
{{"demo": "ExtendedSortComparator.js", "bg": "inline", "defaultCodeOpen": false}}
+### Asymmetric comparator
+
+The Data Grid considers the `sortComparator` function symmetric, automatically reversing the return value for descending sorting by multiplying it by `-1`.
+
+While this is sufficient for most use cases, it is possible to define an asymmetric comparator using the `getSortComparator` function – it receives the sorting direction as an argument and returns a comparator function.
+
+In the demo below, the `getSortComparator` function is used in the "Quantity" column to keep the `null` values at the bottom when sorting is applied (regardless of the sorting direction):
+
+{{"demo": "GetSortComparator.js", "bg": "inline", "defaultCodeOpen": false}}
+
## Custom sort order
By default, the sort order cycles between these three different modes:
diff --git a/docs/data/data-grid/style-recipes/ColumnHeaderHideSeparator.js b/docs/data/data-grid/style-recipes/ColumnHeaderHideSeparator.js
new file mode 100644
index 0000000000000..dee2d4bd41587
--- /dev/null
+++ b/docs/data/data-grid/style-recipes/ColumnHeaderHideSeparator.js
@@ -0,0 +1,44 @@
+import * as React from 'react';
+import { DataGridPro, gridClasses } from '@mui/x-data-grid-pro';
+
+const rows = [
+ {
+ id: 1,
+ username: '@MUI',
+ age: 20,
+ },
+];
+
+const columns = [
+ {
+ field: 'id',
+ },
+ {
+ field: 'username',
+ width: 200,
+ resizable: false,
+ },
+ {
+ field: 'age',
+ width: 100,
+ resizable: false,
+ },
+];
+
+export default function ColumnHeaderHideSeparator() {
+ return (
+