diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json
index f067fef9c95ec..87dccbd29834a 100644
--- a/.codesandbox/ci.json
+++ b/.codesandbox/ci.json
@@ -3,7 +3,7 @@
"installCommand": "install:codesandbox",
"node": "18",
"packages": [
- "packages/x-license-pro",
+ "packages/x-license",
"packages/grid/x-data-grid",
"packages/grid/x-data-grid-pro",
"packages/grid/x-data-grid-premium",
@@ -14,7 +14,7 @@
"packages/x-tree-view"
],
"publishDirectory": {
- "@mui/x-license-pro": "packages/x-license-pro/build",
+ "@mui/x-license": "packages/x-license/build",
"@mui/x-data-grid": "packages/grid/x-data-grid/build",
"@mui/x-data-grid-pro": "packages/grid/x-data-grid-pro/build",
"@mui/x-data-grid-premium": "packages/grid/x-data-grid-premium/build",
diff --git a/.eslintrc.js b/.eslintrc.js
index 823e51ac43da9..3d1c7318c4195 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -158,6 +158,6 @@ module.exports = {
buildPackageRestrictedImports('@mui/x-data-grid-generator', 'grid/x-data-grid-generator'),
buildPackageRestrictedImports('@mui/x-pickers', 'x-pickers'),
buildPackageRestrictedImports('@mui/x-pickers-pro', 'x-pickers-pro'),
- buildPackageRestrictedImports('@mui/x-license-pro', 'x-license-pro'),
+ buildPackageRestrictedImports('@mui/x-license', 'x-license'),
],
};
diff --git a/babel.config.js b/babel.config.js
index 45a9cc8bb34ff..9fb8f2ed5c4ba 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,5 +1,5 @@
const path = require('path');
-const generateReleaseInfo = require('./packages/x-license-pro/generateReleaseInfo');
+const generateReleaseInfo = require('./packages/x-license/generateReleaseInfo');
function resolveAliasPath(relativeToBabelConf) {
const resolvedPath = path.relative(process.cwd(), path.resolve(__dirname, relativeToBabelConf));
@@ -11,7 +11,7 @@ const defaultAlias = {
'@mui/x-data-grid-generator': resolveAliasPath('./packages/grid/x-data-grid-generator/src'),
'@mui/x-data-grid-pro': resolveAliasPath('./packages/grid/x-data-grid-pro/src'),
'@mui/x-data-grid-premium': resolveAliasPath('./packages/grid/x-data-grid-premium/src'),
- '@mui/x-license-pro': resolveAliasPath('./packages/x-license-pro/src'),
+ '@mui/x-license': resolveAliasPath('./packages/x-license/src'),
'@mui/x-date-pickers': resolveAliasPath('./packages/x-date-pickers/src'),
'@mui/x-date-pickers-pro': resolveAliasPath('./packages/x-date-pickers-pro/src'),
'@mui/x-charts': resolveAliasPath('./packages/x-charts/src'),
diff --git a/bug-reproductions/x-data-grid/public/index.html b/bug-reproductions/x-data-grid/public/index.html
index 80363f8fecc8e..9befde78ff8b2 100644
--- a/bug-reproductions/x-data-grid/public/index.html
+++ b/bug-reproductions/x-data-grid/public/index.html
@@ -1,12 +1,15 @@
-
+
- DataGridProDemo demo — MUI X
+ DataGrid — MUI X
+
+
+
diff --git a/docs/babel.config.js b/docs/babel.config.js
index 44face6ddf1ae..bd75265cabde0 100644
--- a/docs/babel.config.js
+++ b/docs/babel.config.js
@@ -10,7 +10,7 @@ const alias = {
'@mui/x-date-pickers-pro': '../packages/x-date-pickers-pro/src',
'@mui/x-charts': '../packages/x-charts/src',
'@mui/x-tree-view': '../packages/x-tree-view/src',
- '@mui/x-license-pro': '../packages/x-license-pro/src',
+ '@mui/x-license': '../packages/x-license/src',
'@mui/docs': '../node_modules/@mui/monorepo/packages/mui-docs/src',
'@mui/markdown': '../node_modules/@mui/monorepo/packages/markdown',
'@mui/monorepo': '../node_modules/@mui/monorepo',
diff --git a/docs/data/charts/axis/ReverseExampleNoSnap.js b/docs/data/charts/axis/ReverseExampleNoSnap.js
new file mode 100644
index 0000000000000..7d80dd08131e5
--- /dev/null
+++ b/docs/data/charts/axis/ReverseExampleNoSnap.js
@@ -0,0 +1,100 @@
+import * as React from 'react';
+import Box from '@mui/material/Box';
+import Stack from '@mui/material/Stack';
+import FormControlLabel from '@mui/material/FormControlLabel';
+import Checkbox from '@mui/material/Checkbox';
+
+import { ResponsiveChartContainer } from '@mui/x-charts/ResponsiveChartContainer';
+import { LinePlot, MarkPlot } from '@mui/x-charts/LineChart';
+import { BarPlot } from '@mui/x-charts/BarChart';
+import { ChartsXAxis } from '@mui/x-charts/ChartsXAxis';
+import { ChartsYAxis } from '@mui/x-charts/ChartsYAxis';
+
+const dataset = [
+ { min: -12, max: -4, precip: 79, month: 'Jan' },
+ { min: -11, max: -3, precip: 66, month: 'Feb' },
+ { min: -6, max: 2, precip: 76, month: 'Mar' },
+ { min: 1, max: 9, precip: 106, month: 'Apr' },
+ { min: 8, max: 17, precip: 105, month: 'Mai' },
+ { min: 15, max: 24, precip: 114, month: 'Jun' },
+ { min: 18, max: 26, precip: 106, month: 'Jul' },
+ { min: 17, max: 26, precip: 105, month: 'Aug' },
+ { min: 13, max: 21, precip: 100, month: 'Sept' },
+ { min: 6, max: 13, precip: 116, month: 'Oct' },
+ { min: 0, max: 6, precip: 93, month: 'Nov' },
+ { min: -8, max: -1, precip: 93, month: 'Dec' },
+];
+
+const series = [
+ { type: 'line', dataKey: 'min', color: '#577399' },
+ { type: 'line', dataKey: 'max', color: '#fe5f55' },
+ { type: 'bar', dataKey: 'precip', color: '#bfdbf7', yAxisKey: 'rightAxis' },
+];
+
+export default function ReverseExampleNoSnap() {
+ const [reverseX, setReverseX] = React.useState(false);
+ const [reverseLeft, setReverseLeft] = React.useState(false);
+ const [reverseRight, setReverseRight] = React.useState(false);
+
+ return (
+
+
+ setReverseX(event.target.checked)} />
+ }
+ label="reverse x-axis"
+ labelPlacement="end"
+ />
+ setReverseLeft(event.target.checked)} />
+ }
+ label="reverse left axis"
+ labelPlacement="end"
+ />
+ setReverseRight(event.target.checked)} />
+ }
+ label="reverse right axis"
+ labelPlacement="end"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/docs/data/charts/axis/axis.md b/docs/data/charts/axis/axis.md
index a86cb8622a273..4eab6e89f7c5c 100644
--- a/docs/data/charts/axis/axis.md
+++ b/docs/data/charts/axis/axis.md
@@ -74,6 +74,13 @@ xAxis={[
{{"demo": "MinMaxExample.js"}}
+### Axis direction
+
+By default, the axes' directions are left to right and bottom to top.
+You can change this behavior with the property `reverse`.
+
+{{"demo": "ReverseExampleNoSnap.js"}}
+
## Tick position
### Automatic tick position
diff --git a/docs/data/data-grid/column-definition/ActionsWithModalGrid.js b/docs/data/data-grid/column-definition/ActionsWithModalGrid.js
new file mode 100644
index 0000000000000..7a29da11924c4
--- /dev/null
+++ b/docs/data/data-grid/column-definition/ActionsWithModalGrid.js
@@ -0,0 +1,92 @@
+import * as React from 'react';
+import { DataGrid, GridActionsCellItem } from '@mui/x-data-grid';
+import DeleteIcon from '@mui/icons-material/Delete';
+import { randomUserName } from '@mui/x-data-grid-generator';
+import Dialog from '@mui/material/Dialog';
+import DialogTitle from '@mui/material/DialogTitle';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import DialogActions from '@mui/material/DialogActions';
+import Button from '@mui/material/Button';
+
+const initialRows = [
+ { id: 1, name: randomUserName() },
+ { id: 2, name: randomUserName() },
+ { id: 3, name: randomUserName() },
+];
+
+function DeleteUserActionItem({ deleteUser, ...props }) {
+ const [open, setOpen] = React.useState(false);
+
+ return (
+
+ setOpen(true)} />
+ setOpen(false)}
+ aria-labelledby="alert-dialog-title"
+ aria-describedby="alert-dialog-description"
+ >
+ Delete this user?
+
+
+ This action cannot be undone.
+
+
+
+ setOpen(false)}>Cancel
+ {
+ setOpen(false);
+ deleteUser();
+ }}
+ color="warning"
+ autoFocus
+ >
+ Delete
+
+
+
+
+ );
+}
+
+export default function ActionsWithModalGrid() {
+ const [rows, setRows] = React.useState(initialRows);
+
+ const deleteUser = React.useCallback(
+ (id) => () => {
+ setTimeout(() => {
+ setRows((prevRows) => prevRows.filter((row) => row.id !== id));
+ });
+ },
+ [],
+ );
+
+ const columns = React.useMemo(
+ () => [
+ { field: 'name', type: 'string' },
+ {
+ field: 'actions',
+ type: 'actions',
+ width: 80,
+ getActions: (params) => [
+ }
+ deleteUser={deleteUser(params.id)}
+ closeMenuOnClick={false}
+ />,
+ ],
+ },
+ ],
+ [deleteUser],
+ );
+
+ return (
+
+
+
+ );
+}
diff --git a/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx b/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx
new file mode 100644
index 0000000000000..e32fd666d9b75
--- /dev/null
+++ b/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx
@@ -0,0 +1,103 @@
+import * as React from 'react';
+import {
+ DataGrid,
+ GridActionsCellItem,
+ GridRowId,
+ GridColDef,
+ GridActionsCellItemProps,
+} from '@mui/x-data-grid';
+import DeleteIcon from '@mui/icons-material/Delete';
+import { randomUserName } from '@mui/x-data-grid-generator';
+import Dialog from '@mui/material/Dialog';
+import DialogTitle from '@mui/material/DialogTitle';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import DialogActions from '@mui/material/DialogActions';
+import Button from '@mui/material/Button';
+
+const initialRows = [
+ { id: 1, name: randomUserName() },
+ { id: 2, name: randomUserName() },
+ { id: 3, name: randomUserName() },
+];
+
+function DeleteUserActionItem({
+ deleteUser,
+ ...props
+}: GridActionsCellItemProps & { deleteUser: () => void }) {
+ const [open, setOpen] = React.useState(false);
+
+ return (
+
+ setOpen(true)} />
+ setOpen(false)}
+ aria-labelledby="alert-dialog-title"
+ aria-describedby="alert-dialog-description"
+ >
+ Delete this user?
+
+
+ This action cannot be undone.
+
+
+
+ setOpen(false)}>Cancel
+ {
+ setOpen(false);
+ deleteUser();
+ }}
+ color="warning"
+ autoFocus
+ >
+ Delete
+
+
+
+
+ );
+}
+
+type Row = (typeof initialRows)[number];
+
+export default function ActionsWithModalGrid() {
+ const [rows, setRows] = React.useState(initialRows);
+
+ const deleteUser = React.useCallback(
+ (id: GridRowId) => () => {
+ setTimeout(() => {
+ setRows((prevRows) => prevRows.filter((row) => row.id !== id));
+ });
+ },
+ [],
+ );
+
+ const columns = React.useMemo[]>(
+ () => [
+ { field: 'name', type: 'string' },
+ {
+ field: 'actions',
+ type: 'actions',
+ width: 80,
+ getActions: (params) => [
+ }
+ deleteUser={deleteUser(params.id)}
+ closeMenuOnClick={false}
+ />,
+ ],
+ },
+ ],
+ [deleteUser],
+ );
+
+ return (
+
+
+
+ );
+}
diff --git a/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx.preview b/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx.preview
new file mode 100644
index 0000000000000..6f326f7a9cd17
--- /dev/null
+++ b/docs/data/data-grid/column-definition/ActionsWithModalGrid.tsx.preview
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/data/data-grid/column-definition/column-definition.md b/docs/data/data-grid/column-definition/column-definition.md
index dc73721a1e571..0c1ae990eea6f 100644
--- a/docs/data/data-grid/column-definition/column-definition.md
+++ b/docs/data/data-grid/column-definition/column-definition.md
@@ -230,6 +230,8 @@ The following are the native column types with their required value types:
| `'singleSelect'` | A value in `.valueOptions` |
| `'actions'` | Not applicable |
+{{"demo": "ColumnTypesGrid.js", "bg": "inline"}}
+
### Converting types
Default methods, such as filtering and sorting, assume that the type of the values will match the type of the column specified in `type`.
@@ -249,57 +251,67 @@ If for any reason, your data type is not the correct one, you can use `valueGett
To use most of the column types, you only need to define the `type` property in your column definition.
However, some types require additional properties to be set to make them work correctly:
-- If the column type is `'singleSelect'`, you also need to set the `valueOptions` property in the respective column definition. These values are options used for filtering and editing.
+#### Single select
- ```tsx
- {
- field: 'country',
- type: 'singleSelect',
- valueOptions: ['United Kingdom', 'Spain', 'Brazil']
- }
- ```
-
- :::warning
- When using objects values for `valueOptions` you need to provide the `value` and `label` attributes for each option.
- However, you can customize which attribute is used as value and label by using `getOptionValue` and `getOptionLabel`, respectively.
-
- ```tsx
- // Without getOptionValue and getOptionLabel
- {
- valueOptions: [
- { value: 'BR', label: 'Brazil' },
- { value: 'FR', label: 'France' }
- ]
- }
+If the column type is `'singleSelect'`, you also need to set the `valueOptions` property in the respective column definition. These values are options used for filtering and editing.
- // With getOptionValue and getOptionLabel
- {
- getOptionValue: (value: any) => value.code,
- getOptionLabel: (value: any) => value.name,
- valueOptions: [
- { code: 'BR', name: 'Brazil' },
- { code: 'FR', name: 'France' }
- ]
- }
- ```
+```tsx
+{
+ field: 'country',
+ type: 'singleSelect',
+ valueOptions: ['United Kingdom', 'Spain', 'Brazil']
+}
+```
- :::
+:::warning
+When using objects values for `valueOptions` you need to provide the `value` and `label` attributes for each option.
+However, you can customize which attribute is used as value and label by using `getOptionValue` and `getOptionLabel`, respectively.
-- If the column type is `'actions'`, you need to provide a `getActions` function that returns an array of actions available for each row (React elements).
- You can add the `showInMenu` prop on the returned React elements to signal the data grid to group these actions inside a row menu.
+```tsx
+// Without getOptionValue and getOptionLabel
+{
+ valueOptions: [
+ { value: 'BR', label: 'Brazil' },
+ { value: 'FR', label: 'France' }
+ ]
+}
- ```tsx
- {
- field: 'actions',
- type: 'actions',
- getActions: (params: GridRowParams) => [
- ,
- ,
- ]
- }
- ```
+// With getOptionValue and getOptionLabel
+{
+ getOptionValue: (value: any) => value.code,
+ getOptionLabel: (value: any) => value.name,
+ valueOptions: [
+ { code: 'BR', name: 'Brazil' },
+ { code: 'FR', name: 'France' }
+ ]
+}
+```
-{{"demo": "ColumnTypesGrid.js", "bg": "inline"}}
+:::
+
+#### Actions
+
+If the column type is `'actions'`, you need to provide a `getActions` function that returns an array of actions available for each row (React elements).
+You can add the `showInMenu` prop on the returned React elements to signal the data grid to group these actions inside a row menu.
+
+```tsx
+{
+ field: 'actions',
+ type: 'actions',
+ getActions: (params: GridRowParams) => [
+ ,
+ ,
+ ]
+}
+```
+
+By default, actions shown in the menu will close the menu on click.
+But in some cases, you might want to keep the menu open after clicking an action.
+You can achieve this by setting the `closeMenuOnClick` prop to `false`.
+
+In the following example, the "Delete" action opens a confirmation dialog and therefore needs to keep the menu mounted:
+
+{{"demo": "ActionsWithModalGrid.js", "bg": "inline"}}
### Custom column types
diff --git a/docs/data/data-grid/components/CustomColumnMenu.tsx b/docs/data/data-grid/components/CustomColumnMenu.tsx
index 70275eb92d007..9a0a7fa8d4f3e 100644
--- a/docs/data/data-grid/components/CustomColumnMenu.tsx
+++ b/docs/data/data-grid/components/CustomColumnMenu.tsx
@@ -10,6 +10,7 @@ import {
GridColumnMenuSortItem,
useGridApiRef,
DataGridPro,
+ GridSlots,
} from '@mui/x-data-grid-pro';
import StarOutlineIcon from '@mui/icons-material/StarOutline';
@@ -119,7 +120,7 @@ export default function CustomColumnMenu() {
},
]}
slots={{
- columnMenu: CustomColumnMenuComponent,
+ columnMenu: CustomColumnMenuComponent as GridSlots['columnMenu'],
}}
slotProps={{
columnMenu: { color },
diff --git a/docs/data/data-grid/components/CustomLoadingOverlayGrid.tsx b/docs/data/data-grid/components/CustomLoadingOverlayGrid.tsx
index fef9a8145a76c..c278f02c68a45 100644
--- a/docs/data/data-grid/components/CustomLoadingOverlayGrid.tsx
+++ b/docs/data/data-grid/components/CustomLoadingOverlayGrid.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { DataGrid } from '@mui/x-data-grid';
+import { DataGrid, GridSlots } from '@mui/x-data-grid';
import LinearProgress from '@mui/material/LinearProgress';
import { useDemoData } from '@mui/x-data-grid-generator';
@@ -14,7 +14,7 @@ export default function CustomLoadingOverlayGrid() {
```
+If you want to ensure type safety, you can declare your component using the slot props typings:
+
+```tsx
+import { GridSlotProps } from '@mui/x-data-grid';
+
+function MyCustomColumnMenu(
+ props: GridSlotProps['columnMenu'] & { background: string; counter: number },
+) {
+ // ...
+}
+```
+
### Interacting with the data grid
The grid exposes two hooks to help you to access the data grid data while overriding component slots.
diff --git a/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx b/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx
index a3f845377b155..ea0680357f04a 100644
--- a/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx
+++ b/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx
@@ -18,6 +18,7 @@ import {
GridRowId,
GridRowModel,
GridRowEditStopReasons,
+ GridSlots,
} from '@mui/x-data-grid';
import {
randomCreatedDate,
@@ -237,7 +238,7 @@ export default function FullFeaturedCrudGrid() {
onRowEditStop={handleRowEditStop}
processRowUpdate={processRowUpdate}
slots={{
- toolbar: EditToolbar,
+ toolbar: EditToolbar as GridSlots['toolbar'],
}}
slotProps={{
toolbar: { setRows, setRowModesModel },
diff --git a/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx.preview b/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx.preview
index b060ee3cfc323..2693093092106 100644
--- a/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx.preview
+++ b/docs/data/data-grid/editing/FullFeaturedCrudGrid.tsx.preview
@@ -7,7 +7,7 @@
onRowEditStop={handleRowEditStop}
processRowUpdate={processRowUpdate}
slots={{
- toolbar: EditToolbar,
+ toolbar: EditToolbar as GridSlots['toolbar'],
}}
slotProps={{
toolbar: { setRows, setRowModesModel },
diff --git a/docs/data/data-grid/editing/StartEditButtonGrid.tsx b/docs/data/data-grid/editing/StartEditButtonGrid.tsx
index 6397547acaac8..98f848fd4e14e 100644
--- a/docs/data/data-grid/editing/StartEditButtonGrid.tsx
+++ b/docs/data/data-grid/editing/StartEditButtonGrid.tsx
@@ -9,6 +9,7 @@ import {
GridCellModes,
GridEventListener,
GridCellModesModel,
+ GridSlots,
} from '@mui/x-data-grid';
import {
randomCreatedDate,
@@ -147,7 +148,7 @@ export default function StartEditButtonGrid() {
onCellEditStop={handleCellEditStop}
onCellModesModelChange={(model) => setCellModesModel(model)}
slots={{
- toolbar: EditToolbar,
+ toolbar: EditToolbar as GridSlots['toolbar'],
}}
slotProps={{
toolbar: {
diff --git a/docs/data/data-grid/filtering/CustomFilterPanelPosition.tsx b/docs/data/data-grid/filtering/CustomFilterPanelPosition.tsx
index 65f85ed661714..2f686357b240a 100644
--- a/docs/data/data-grid/filtering/CustomFilterPanelPosition.tsx
+++ b/docs/data/data-grid/filtering/CustomFilterPanelPosition.tsx
@@ -1,6 +1,7 @@
import * as React from 'react';
import {
DataGrid,
+ GridSlots,
GridToolbarContainer,
GridToolbarFilterButton,
} from '@mui/x-data-grid';
@@ -35,7 +36,7 @@ export default function CustomFilterPanelPosition() {
diff --git a/docs/data/data-grid/row-updates/InfiniteLoadingGrid.tsx.preview b/docs/data/data-grid/row-updates/InfiniteLoadingGrid.tsx.preview
index db0cc47aa7911..d8a614229f5c7 100644
--- a/docs/data/data-grid/row-updates/InfiniteLoadingGrid.tsx.preview
+++ b/docs/data/data-grid/row-updates/InfiniteLoadingGrid.tsx.preview
@@ -5,6 +5,6 @@
hideFooterPagination
onRowsScrollEnd={handleOnRowsScrollEnd}
slots={{
- loadingOverlay: LinearProgress,
+ loadingOverlay: LinearProgress as GridSlots['loadingOverlay'],
}}
/>
\ No newline at end of file
diff --git a/docs/data/data-grid/state/RestoreStateInitialState.tsx b/docs/data/data-grid/state/RestoreStateInitialState.tsx
index 7e576cec4eb9b..d953a4a8e5a50 100644
--- a/docs/data/data-grid/state/RestoreStateInitialState.tsx
+++ b/docs/data/data-grid/state/RestoreStateInitialState.tsx
@@ -5,6 +5,7 @@ import Stack from '@mui/material/Stack';
import {
DataGridPro,
GridInitialState,
+ GridSlots,
GridToolbarContainer,
GridToolbarDensitySelector,
GridToolbarFilterButton,
@@ -62,7 +63,7 @@ export default function RestoreStateInitialState() {
diff --git a/docs/data/data-grid/state/RestoreStateInitialState.tsx.preview b/docs/data/data-grid/state/RestoreStateInitialState.tsx.preview
index cb7e99c92deb1..a02338eabb0bb 100644
--- a/docs/data/data-grid/state/RestoreStateInitialState.tsx.preview
+++ b/docs/data/data-grid/state/RestoreStateInitialState.tsx.preview
@@ -2,7 +2,7 @@
diff --git a/docs/data/introduction/licensing/licensing.md b/docs/data/introduction/licensing/licensing.md
index bb0d60c079c89..97436b7302853 100644
--- a/docs/data/introduction/licensing/licensing.md
+++ b/docs/data/introduction/licensing/licensing.md
@@ -137,11 +137,11 @@ If this isn't possible, please contact sales@mui.com to request a compatible lic
### How to install the key
-The license key depends on a package called `@mui/x-license-{plan}` that validates whether or not it's active.
+The license key depends on a package called `@mui/x-license` that validates whether or not it's active.
Once you have your license key, import the `LicenseInfo` method from that package and call the `setLicenseKey()` function:
```jsx
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
```
@@ -164,7 +164,7 @@ When using Next.js App Router, you have multiple options to install the license
```tsx
'use client';
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
```
@@ -173,7 +173,7 @@ LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
```tsx
'use client';
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
@@ -204,7 +204,7 @@ export default function RootLayout(props: { children: React.ReactNode }) {
When using Next.js pages, a great place to call `setLicenseKey` is in [`_app.js`](https://nextjs.org/docs/pages/building-your-application/routing/custom-app).
```tsx
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
@@ -225,7 +225,7 @@ The license key is validated on the server and client side so you must expose th
To do this, you need to prefix the environment variables with `NEXT_PUBLIC_` as explained in the [Next.js documentation](https://nextjs.org/docs/app/building-your-application/configuring/environment-variables#bundling-environment-variables-for-the-browser):
```tsx
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
LicenseInfo.setLicenseKey(process.env.NEXT_PUBLIC_MUI_X_LICENSE_KEY);
```
diff --git a/docs/data/migration/migration-data-grid-v6/migration-data-grid-v6.md b/docs/data/migration/migration-data-grid-v6/migration-data-grid-v6.md
index 907ccdf3398a3..8ec34302b4d7a 100644
--- a/docs/data/migration/migration-data-grid-v6/migration-data-grid-v6.md
+++ b/docs/data/migration/migration-data-grid-v6/migration-data-grid-v6.md
@@ -19,6 +19,10 @@ In `package.json`, change the version of the data grid package to `next`.
```diff
-"@mui/x-data-grid": "6.x.x",
+"@mui/x-data-grid": "next",
+-"@mui/x-data-grid-pro": "6.x.x",
++"@mui/x-data-grid-pro": "next",
+-"@mui/x-data-grid-premium": "6.x.x",
++"@mui/x-data-grid-premium": "next",
```
Since v7 is a major release, it contains changes that affect the public API.
@@ -31,6 +35,22 @@ To have the option of using the latest API from `@mui/material`, the package pee
It is a change in minor version only, so it should not cause any breaking changes.
Please update your `@mui/material` package to this or a newer version.
+## Update the license package
+
+If you're using the commercial version of the Data Grid ([Pro](/x/introduction/licensing/#pro-plan) and [Premium](/x/introduction/licensing/#premium-plan) plans), you need to update the import path:
+
+```diff
+-import { LicenseInfo } from '@mui/x-license-pro';
++import { LicenseInfo } from '@mui/x-license';
+```
+
+If you have `@mui/x-license-pro` in the `dependencies` section of your `package.json`, rename and update the license package to the latest version:
+
+```diff
+-"@mui/x-license-pro": "6.x.x",
++"@mui/x-license": "next",
+```
+
## Run codemods
The `preset-safe` codemod will automatically adjust the bulk of your code to account for breaking changes in v7.
@@ -457,5 +477,6 @@ Here's the list of affected features, colDef flags and props to disable them and
- The slot `row` has had these props removed: `containerWidth`, `position`.
- The slot `row` has typed props now.
- The slot `headerFilterCell` has had these props removed: `filterOperators`.
+- All slots are now strongly typed, previously were `React.JSXElementConstructor`.
diff --git a/docs/data/migration/migration-pickers-v6/migration-pickers-v6.md b/docs/data/migration/migration-pickers-v6/migration-pickers-v6.md
index f2e4b8386a3fc..794dd85eb3684 100644
--- a/docs/data/migration/migration-pickers-v6/migration-pickers-v6.md
+++ b/docs/data/migration/migration-pickers-v6/migration-pickers-v6.md
@@ -31,6 +31,22 @@ To have the option of using the latest API from `@mui/material`, the package pee
It is a change in minor version only, so it should not cause any breaking changes.
Please update your `@mui/material` package to this or a newer version.
+## Update the license package
+
+If you're using the commercial version of the Pickers ([Pro](/x/introduction/licensing/#pro-plan) plan), you need to update the import path:
+
+```diff
+-import { LicenseInfo } from '@mui/x-license-pro';
++import { LicenseInfo } from '@mui/x-license';
+```
+
+If you have `@mui/x-license-pro` in the `dependencies` section of your `package.json`, rename and update the license package to the latest version:
+
+```diff
+-"@mui/x-license-pro": "6.x.x",
++"@mui/x-license": "next",
+```
+
## Run codemods
The `preset-safe` codemod will automatically adjust the bulk of your code to account for breaking changes in v7. You can run `v7.0.0/pickers/preset-safe` targeting only Date and Time Pickers or `v7.0.0/preset-safe` to target Data Grid as well.
diff --git a/docs/package.json b/docs/package.json
index baa9269d03f51..f64c94dbc67da 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -5,13 +5,13 @@
"author": "MUI Team",
"license": "MIT",
"scripts": {
- "build": "rimraf docs/export && cross-env NODE_ENV=production next build --profile && yarn build-sw",
+ "build": "rimraf ./export && cross-env NODE_ENV=production next build --profile && yarn build-sw",
"build:clean": "rimraf .next && yarn build",
"build-sw": "node ./scripts/buildServiceWorker.js",
"dev": "next dev --port 3001",
"deploy": "git push -f upstream next:docs-next",
"icons": "rimraf public/static/icons/* && node ./scripts/buildIcons.js",
- "start": "next start",
+ "serve": "serve ./export -l 3010",
"create-playground": "cpy --cwd=scripts playground.template.tsx ../../pages/playground --rename=index.tsx",
"typescript": "tsc -p tsconfig.json",
"typescript:transpile": "cross-env BABEL_ENV=development babel-node --extensions \".tsx,.ts,.js\" scripts/formattedTSDemos",
@@ -52,8 +52,8 @@
"core-js": "^2.6.12",
"cross-env": "^7.0.3",
"date-fns": "^2.30.0",
- "date-fns-v3": "https://registry.npmjs.org/date-fns/-/date-fns-3.2.0.tgz",
"date-fns-jalali": "^2.21.3-1",
+ "date-fns-v3": "https://registry.npmjs.org/date-fns/-/date-fns-3.2.0.tgz",
"dayjs": "^1.11.10",
"doctrine": "^3.0.0",
"exceljs": "^4.4.0",
@@ -98,6 +98,7 @@
"@types/stylis": "^4.2.5",
"@types/webpack-bundle-analyzer": "^4.6.3",
"cpy-cli": "^5.0.0",
- "gm": "^1.25.0"
+ "gm": "^1.25.0",
+ "serve": "^14.2.1"
}
}
diff --git a/docs/pages/_app.js b/docs/pages/_app.js
index 56aaa444f278f..514da6bb6e2f1 100644
--- a/docs/pages/_app.js
+++ b/docs/pages/_app.js
@@ -18,7 +18,7 @@ import DocsStyledEngineProvider from 'docs/src/modules/utils/StyledEngineProvide
import { pathnameToLanguage } from 'docs/src/modules/utils/helpers';
import createEmotionCache from 'docs/src/createEmotionCache';
import findActivePage from 'docs/src/modules/utils/findActivePage';
-import { LicenseInfo } from '@mui/x-license-pro';
+import { LicenseInfo } from '@mui/x-license';
import getProductInfoFromUrl from 'docs/src/modules/utils/getProductInfoFromUrl';
// Remove the license warning from demonstration purposes
diff --git a/docs/pages/x/api/charts/bar-chart.json b/docs/pages/x/api/charts/bar-chart.json
index 168997de456ff..99c7c29a8f49a 100644
--- a/docs/pages/x/api/charts/bar-chart.json
+++ b/docs/pages/x/api/charts/bar-chart.json
@@ -73,13 +73,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/chart-container.json b/docs/pages/x/api/charts/chart-container.json
index d64aa7bfc5f1f..46d245c739233 100644
--- a/docs/pages/x/api/charts/chart-container.json
+++ b/docs/pages/x/api/charts/chart-container.json
@@ -22,13 +22,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/line-chart.json b/docs/pages/x/api/charts/line-chart.json
index 0b323a35b4ec5..2ffb19305c079 100644
--- a/docs/pages/x/api/charts/line-chart.json
+++ b/docs/pages/x/api/charts/line-chart.json
@@ -68,13 +68,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/pie-chart.json b/docs/pages/x/api/charts/pie-chart.json
index d6c78ab026f1f..b3a95d9c307fa 100644
--- a/docs/pages/x/api/charts/pie-chart.json
+++ b/docs/pages/x/api/charts/pie-chart.json
@@ -48,13 +48,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/responsive-chart-container.json b/docs/pages/x/api/charts/responsive-chart-container.json
index da629e62a2fca..ddc4d24576fcd 100644
--- a/docs/pages/x/api/charts/responsive-chart-container.json
+++ b/docs/pages/x/api/charts/responsive-chart-container.json
@@ -22,13 +22,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/scatter-chart.json b/docs/pages/x/api/charts/scatter-chart.json
index 23ea04fa16435..eee3cd3bd833c 100644
--- a/docs/pages/x/api/charts/scatter-chart.json
+++ b/docs/pages/x/api/charts/scatter-chart.json
@@ -61,13 +61,13 @@
"xAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
},
"yAxis": {
"type": {
"name": "arrayOf",
- "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
+ "description": "Array<{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }>"
}
}
},
diff --git a/docs/pages/x/api/charts/spark-line-chart.json b/docs/pages/x/api/charts/spark-line-chart.json
index 5fcdf0c7be519..3bc629b180e12 100644
--- a/docs/pages/x/api/charts/spark-line-chart.json
+++ b/docs/pages/x/api/charts/spark-line-chart.json
@@ -44,7 +44,7 @@
"xAxis": {
"type": {
"name": "shape",
- "description": "{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }"
+ "description": "{ axisId?: number | string, classes?: object, data?: array, dataKey?: string, disableLine?: bool, disableTicks?: bool, fill?: string, hideTooltip?: bool, id?: number | string, label?: string, labelFontSize?: number, labelStyle?: object, max?: Date | number, min?: Date | number, position?: 'bottom' | 'left' | 'right' | 'top', reverse?: bool, scaleType?: 'band' | 'linear' | 'log' | 'point' | 'pow' | 'sqrt' | 'time' | 'utc', slotProps?: object, slots?: object, stroke?: string, tickFontSize?: number, tickInterval?: 'auto' | array | func, tickLabelInterval?: 'auto' | func, tickLabelStyle?: object, tickMaxStep?: number, tickMinStep?: number, tickNumber?: number, tickSize?: number, valueFormatter?: func }"
}
}
},
diff --git a/docs/scripts/createXTypeScriptProjects.ts b/docs/scripts/createXTypeScriptProjects.ts
index 94239b95fe9a1..5fa2d813bd922 100644
--- a/docs/scripts/createXTypeScriptProjects.ts
+++ b/docs/scripts/createXTypeScriptProjects.ts
@@ -29,7 +29,7 @@ export interface XTypeScriptProject extends Omit {
}
export type XProjectNames =
- | 'x-license-pro'
+ | 'x-license'
| 'x-data-grid'
| 'x-data-grid-pro'
| 'x-data-grid-premium'
@@ -117,10 +117,10 @@ export const createXTypeScriptProjects = () => {
const projects: XTypeScriptProjects = new Map();
projects.set(
- 'x-license-pro',
+ 'x-license',
createXTypeScriptProject({
- name: 'x-license-pro',
- rootPath: path.join(workspaceRoot, 'packages/x-license-pro'),
+ name: 'x-license',
+ rootPath: path.join(workspaceRoot, 'packages/x-license'),
entryPointPath: 'src/index.ts',
documentationFolderName: 'license',
}),
diff --git a/package.json b/package.json
index b572a46f3217c..0db7e3d0dabcb 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"scripts": {
"start": "yarn && yarn docs:dev",
"docs:dev": "yarn workspace docs dev",
- "docs:start": "yarn workspace docs start",
+ "docs:serve": "yarn workspace docs serve",
"docs:create-playground": "yarn workspace docs create-playground",
"docs:api": "NODE_OPTIONS=--max-old-space-size=4096 yarn docs:api:build && yarn docs:api:buildX",
"docs:api:build": "cross-env BABEL_ENV=development babel-node -i \"/node_modules/(?!@mui)/\" -x .ts,.tsx,.js ./scripts/buildApiDocs/index.ts",
diff --git a/packages/grid/x-data-grid-premium/package.json b/packages/grid/x-data-grid-premium/package.json
index f73cb63df8184..f500783663e27 100644
--- a/packages/grid/x-data-grid-premium/package.json
+++ b/packages/grid/x-data-grid-premium/package.json
@@ -48,7 +48,7 @@
"@mui/utils": "^5.15.7",
"@mui/x-data-grid": "7.0.0-beta.1",
"@mui/x-data-grid-pro": "7.0.0-beta.1",
- "@mui/x-license-pro": "7.0.0-beta.0",
+ "@mui/x-license": "7.0.0-beta.0",
"@types/format-util": "^1.0.4",
"clsx": "^2.1.0",
"exceljs": "^4.4.0",
diff --git a/packages/grid/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx b/packages/grid/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx
index e4958093925cb..8ccb429225f98 100644
--- a/packages/grid/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx
+++ b/packages/grid/x-data-grid-premium/src/DataGridPremium/DataGridPremium.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
import PropTypes from 'prop-types';
-import { useLicenseVerifier, Watermark } from '@mui/x-license-pro';
+import { useLicenseVerifier, Watermark } from '@mui/x-license';
import {
GridBody,
GridFooterPlaceholder,
@@ -23,6 +23,8 @@ import {
import { useDataGridPremiumProps } from './useDataGridPremiumProps';
import { getReleaseInfo } from '../utils/releaseInfo';
+export type { GridPremiumSlotsComponent as GridSlots } from '../models';
+
const releaseInfo = getReleaseInfo();
const dataGridPremiumPropValidators: PropValidator[] = [
diff --git a/packages/grid/x-data-grid-premium/src/index.ts b/packages/grid/x-data-grid-premium/src/index.ts
index f1a22a200ad24..c84acb31a2e50 100644
--- a/packages/grid/x-data-grid-premium/src/index.ts
+++ b/packages/grid/x-data-grid-premium/src/index.ts
@@ -1,6 +1,6 @@
import './typeOverloads';
-export { LicenseInfo } from '@mui/x-license-pro';
+export { LicenseInfo } from '@mui/x-license';
export * from '@mui/x-data-grid/components';
export * from '@mui/x-data-grid-pro/components';
export * from '@mui/x-data-grid/constants';
diff --git a/packages/grid/x-data-grid-premium/src/tests/license.DataGridPremium.test.tsx b/packages/grid/x-data-grid-premium/src/tests/license.DataGridPremium.test.tsx
index f1b698277677a..52bd05723a498 100644
--- a/packages/grid/x-data-grid-premium/src/tests/license.DataGridPremium.test.tsx
+++ b/packages/grid/x-data-grid-premium/src/tests/license.DataGridPremium.test.tsx
@@ -3,7 +3,7 @@ import addYears from 'date-fns/addYears';
import { expect } from 'chai';
import { createRenderer, screen, waitFor } from '@mui-internal/test-utils';
import { DataGridPremium } from '@mui/x-data-grid-premium';
-import { generateLicense, LicenseInfo } from '@mui/x-license-pro';
+import { generateLicense, LicenseInfo } from '@mui/x-license';
describe(' - License', () => {
const { render } = createRenderer();
diff --git a/packages/grid/x-data-grid-premium/tsconfig.build.json b/packages/grid/x-data-grid-premium/tsconfig.build.json
index 7ce260c259230..04b7831a9a041 100644
--- a/packages/grid/x-data-grid-premium/tsconfig.build.json
+++ b/packages/grid/x-data-grid-premium/tsconfig.build.json
@@ -13,7 +13,7 @@
"references": [
{ "path": "../x-data-grid/tsconfig.build.json" },
{ "path": "../x-data-grid-pro/tsconfig.build.json" },
- { "path": "../../x-license-pro/tsconfig.build.json" }
+ { "path": "../../x-license/tsconfig.build.json" }
],
"include": ["src/**/*.ts*", "../../../node_modules/@mui/material/themeCssVarsAugmentation"],
"exclude": ["src/**/*.spec.ts*", "src/**/*.test.ts*"]
diff --git a/packages/grid/x-data-grid-pro/package.json b/packages/grid/x-data-grid-pro/package.json
index acb1211be650e..3bbc089783c55 100644
--- a/packages/grid/x-data-grid-pro/package.json
+++ b/packages/grid/x-data-grid-pro/package.json
@@ -47,7 +47,7 @@
"@mui/system": "^5.15.7",
"@mui/utils": "^5.15.7",
"@mui/x-data-grid": "7.0.0-beta.1",
- "@mui/x-license-pro": "7.0.0-beta.0",
+ "@mui/x-license": "7.0.0-beta.0",
"@types/format-util": "^1.0.4",
"clsx": "^2.1.0",
"prop-types": "^15.8.1",
diff --git a/packages/grid/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx b/packages/grid/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx
index b6623f1c4d26e..459ca2f7a0c90 100644
--- a/packages/grid/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx
+++ b/packages/grid/x-data-grid-pro/src/DataGridPro/DataGridPro.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
import PropTypes from 'prop-types';
-import { useLicenseVerifier, Watermark } from '@mui/x-license-pro';
+import { useLicenseVerifier, Watermark } from '@mui/x-license';
import {
GridBody,
GridFooterPlaceholder,
@@ -16,6 +16,8 @@ import { useDataGridProProps } from './useDataGridProProps';
import { getReleaseInfo } from '../utils/releaseInfo';
import { propValidatorsDataGridPro } from '../internals/propValidation';
+export type { GridProSlotsComponent as GridSlots } from '../models';
+
const releaseInfo = getReleaseInfo();
const DataGridProRaw = React.forwardRef(function DataGridPro(
diff --git a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx
index 4e89cdfd4d6cd..ac8188dd7226f 100644
--- a/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx
+++ b/packages/grid/x-data-grid-pro/src/components/headerFiltering/GridHeaderFilterMenuContainer.tsx
@@ -53,13 +53,16 @@ function GridHeaderFilterMenuContainer(props: {
return null;
}
+ const label = apiRef.current.getLocaleText('filterPanelOperator');
+ const labelString = label ? String(label) : undefined;
+
return (
- License', () => {
const { render } = createRenderer();
diff --git a/packages/grid/x-data-grid-pro/tsconfig.build.json b/packages/grid/x-data-grid-pro/tsconfig.build.json
index 2f16f7689a735..388cabbecf572 100644
--- a/packages/grid/x-data-grid-pro/tsconfig.build.json
+++ b/packages/grid/x-data-grid-pro/tsconfig.build.json
@@ -12,7 +12,7 @@
},
"references": [
{ "path": "../x-data-grid/tsconfig.build.json" },
- { "path": "../../x-license-pro/tsconfig.build.json" }
+ { "path": "../../x-license/tsconfig.build.json" }
],
"include": ["src/**/*.ts*", "../../../node_modules/@mui/material/themeCssVarsAugmentation"],
"exclude": ["src/**/*.spec.ts*", "src/**/*.test.ts*"]
diff --git a/packages/grid/x-data-grid/src/DataGrid/DataGrid.tsx b/packages/grid/x-data-grid/src/DataGrid/DataGrid.tsx
index 45be6056de0aa..bae5e67639324 100644
--- a/packages/grid/x-data-grid/src/DataGrid/DataGrid.tsx
+++ b/packages/grid/x-data-grid/src/DataGrid/DataGrid.tsx
@@ -12,6 +12,8 @@ import {
validateProps,
} from '../internals/utils/propValidation';
+export type { GridSlotsComponent as GridSlots } from '../models';
+
const propValidators: PropValidator[] = [
...propValidatorsDataGrid,
// Only validate in MIT version
diff --git a/packages/grid/x-data-grid/src/components/GridPagination.tsx b/packages/grid/x-data-grid/src/components/GridPagination.tsx
index 92c2717b2eae8..f7a45091220cb 100644
--- a/packages/grid/x-data-grid/src/components/GridPagination.tsx
+++ b/packages/grid/x-data-grid/src/components/GridPagination.tsx
@@ -26,7 +26,7 @@ const GridPaginationRoot = styled(TablePagination)(({ theme }) => ({
},
})) as typeof TablePagination;
-export const GridPagination = React.forwardRef>(
+export const GridPagination = React.forwardRef>(
function GridPagination(props, ref) {
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
diff --git a/packages/grid/x-data-grid/src/components/GridRow.tsx b/packages/grid/x-data-grid/src/components/GridRow.tsx
index c66b72793ff3e..457218861b733 100644
--- a/packages/grid/x-data-grid/src/components/GridRow.tsx
+++ b/packages/grid/x-data-grid/src/components/GridRow.tsx
@@ -389,7 +389,7 @@ const GridRow = React.forwardRef(function GridRow(
width={width}
contentWidth={contentWidth}
field={column.field}
- align={column.align}
+ align={column.align ?? 'left'}
/>
);
}
diff --git a/packages/grid/x-data-grid/src/components/base/GridFooterPlaceholder.tsx b/packages/grid/x-data-grid/src/components/base/GridFooterPlaceholder.tsx
index 5974991f1bf83..d27336afc8653 100644
--- a/packages/grid/x-data-grid/src/components/base/GridFooterPlaceholder.tsx
+++ b/packages/grid/x-data-grid/src/components/base/GridFooterPlaceholder.tsx
@@ -8,5 +8,7 @@ export function GridFooterPlaceholder() {
return null;
}
- return ;
+ return (
+
+ );
}
diff --git a/packages/grid/x-data-grid/src/components/cell/GridActionsCell.tsx b/packages/grid/x-data-grid/src/components/cell/GridActionsCell.tsx
index 08083eab542e8..c3a64881b58a0 100644
--- a/packages/grid/x-data-grid/src/components/cell/GridActionsCell.tsx
+++ b/packages/grid/x-data-grid/src/components/cell/GridActionsCell.tsx
@@ -180,7 +180,7 @@ function GridActionsCell(props: GridActionsCellProps) {
if (event.key === 'Tab') {
event.preventDefault();
}
- if (['Tab', 'Enter', 'Escape'].includes(event.key)) {
+ if (['Tab', 'Escape'].includes(event.key)) {
hideMenu();
}
};
@@ -223,13 +223,7 @@ function GridActionsCell(props: GridActionsCellProps) {
)}
{menuButtons.length > 0 && (
-
+
)}
diff --git a/packages/grid/x-data-grid/src/components/cell/GridActionsCellItem.tsx b/packages/grid/x-data-grid/src/components/cell/GridActionsCellItem.tsx
index 2d3d5c5307a09..642d410d54ed9 100644
--- a/packages/grid/x-data-grid/src/components/cell/GridActionsCellItem.tsx
+++ b/packages/grid/x-data-grid/src/components/cell/GridActionsCellItem.tsx
@@ -12,29 +12,35 @@ export type GridActionsCellItemProps = {
component?: React.ElementType;
} & (
| ({ showInMenu?: false; icon: React.ReactElement } & IconButtonProps)
- | ({ showInMenu: true } & MenuItemProps)
+ | ({
+ showInMenu: true;
+ /**
+ * If false, the menu will not close when this item is clicked.
+ * @default true
+ */
+ closeMenuOnClick?: boolean;
+ closeMenu?: () => void;
+ } & MenuItemProps)
);
-const GridActionsCellItem = React.forwardRef(
+const GridActionsCellItem = React.forwardRef(
(props, ref) => {
- const { label, icon, showInMenu, onClick, ...other } = props;
-
const rootProps = useGridRootProps();
- const handleClick = (event: any) => {
- if (onClick) {
- onClick(event);
- }
- };
+ if (!props.showInMenu) {
+ const { label, icon, showInMenu, onClick, ...other } = props;
+
+ const handleClick = (event: React.MouseEvent) => {
+ onClick?.(event);
+ };
- if (!showInMenu) {
return (
}
size="small"
role="menuitem"
aria-label={label}
- {...(other as any)}
+ {...other}
onClick={handleClick}
{...rootProps.slotProps?.baseIconButton}
>
@@ -43,8 +49,25 @@ const GridActionsCellItem = React.forwardRef) => {
+ onClick?.(event);
+ if (closeMenuOnClick) {
+ closeMenu?.();
+ }
+ };
+
return (
-
+
{icon && {icon} }
{label}
diff --git a/packages/grid/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx b/packages/grid/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx
index 7353974fabb98..db1ea9d1d3eb6 100644
--- a/packages/grid/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx
+++ b/packages/grid/x-data-grid/src/components/columnSelection/GridCellCheckboxRenderer.tsx
@@ -49,7 +49,7 @@ const GridCellCheckboxForwardRef = React.forwardRef(null);
+ const checkboxElement = React.useRef(null);
const rippleRef = React.useRef(null);
const handleRef = useForkRef(checkboxElement, ref);
@@ -104,7 +104,7 @@ const GridCellCheckboxForwardRef = React.forwardRef
diff --git a/packages/grid/x-data-grid/src/components/columnSelection/GridHeaderCheckbox.tsx b/packages/grid/x-data-grid/src/components/columnSelection/GridHeaderCheckbox.tsx
index b62cc90fed944..215608379c39a 100644
--- a/packages/grid/x-data-grid/src/components/columnSelection/GridHeaderCheckbox.tsx
+++ b/packages/grid/x-data-grid/src/components/columnSelection/GridHeaderCheckbox.tsx
@@ -27,7 +27,7 @@ const useUtilityClasses = (ownerState: OwnerState) => {
return composeClasses(slots, getDataGridUtilityClass, classes);
};
-const GridHeaderCheckbox = React.forwardRef(
+const GridHeaderCheckbox = React.forwardRef(
function GridHeaderCheckbox(props, ref) {
const { field, colDef, ...other } = props;
const [, forceUpdate] = React.useState(false);
diff --git a/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterForm.tsx b/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterForm.tsx
index bc6bfdc1c3549..9ff36187ec42c 100644
--- a/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterForm.tsx
+++ b/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterForm.tsx
@@ -316,7 +316,7 @@ const GridFilterForm = React.forwardRef(
}, [item, currentColumn]);
const changeColumn = React.useCallback(
- (event: SelectChangeEvent) => {
+ (event: SelectChangeEvent) => {
const field = event.target.value as string;
const column = apiRef.current.getColumn(field)!;
@@ -369,7 +369,7 @@ const GridFilterForm = React.forwardRef(
);
const changeOperator = React.useCallback(
- (event: SelectChangeEvent) => {
+ (event: SelectChangeEvent) => {
const operator = event.target.value as string;
const newOperator = currentColumn?.filterOperators!.find((op) => op.value === operator);
@@ -388,7 +388,7 @@ const GridFilterForm = React.forwardRef(
);
const changeLogicOperator = React.useCallback(
- (event: SelectChangeEvent) => {
+ (event: SelectChangeEvent) => {
const logicOperator =
(event.target.value as string) === GridLogicOperator.And.toString()
? GridLogicOperator.And
diff --git a/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterInputBoolean.tsx b/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterInputBoolean.tsx
index 32c79a69e6b76..f8dc457521aa1 100644
--- a/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterInputBoolean.tsx
+++ b/packages/grid/x-data-grid/src/components/panel/filterPanel/GridFilterInputBoolean.tsx
@@ -85,7 +85,9 @@ function GridFilterInputBoolean(props: GridFilterInputBooleanProps) {
native={isSelectNative}
displayEmpty
inputProps={{ ref: focusElementRef, tabIndex }}
- {...others}
+ {
+ ...(others as any) /* FIXME: typing error */
+ }
{...baseSelectProps}
>
{
+ (event: SelectChangeEvent) => {
let value = event.target.value;
// NativeSelect casts the value to a string.
@@ -146,7 +146,9 @@ function GridFilterInputSingleSelect(props: GridFilterInputSingleSelectProps) {
placeholder: placeholder ?? apiRef.current.getLocaleText('filterPanelInputPlaceholder'),
}}
native={isSelectNative}
- {...others}
+ {
+ ...(others as any) /* FIXME: typing error */
+ }
{...rootProps.slotProps?.baseSelect}
>
{renderSingleSelectOptions({
diff --git a/packages/grid/x-data-grid/src/joy/joySlots.tsx b/packages/grid/x-data-grid/src/joy/joySlots.tsx
index 7e245b9180657..7c5819657da0f 100644
--- a/packages/grid/x-data-grid/src/joy/joySlots.tsx
+++ b/packages/grid/x-data-grid/src/joy/joySlots.tsx
@@ -16,7 +16,7 @@ import JoyCircularProgress from '@mui/joy/CircularProgress';
import JoyTooltip from '@mui/joy/Tooltip';
import { unstable_useForkRef as useForkRef } from '@mui/utils';
import joyIconSlots, { GridKeyboardArrowRight, GridKeyboardArrowLeft } from './icons';
-import type { GridSlotsComponent, GridSlotsComponentsProps } from '../models';
+import type { GridSlotProps, GridSlotsComponent, GridSlotsComponentsProps } from '../models';
import { useGridApiContext } from '../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
import { gridFilteredTopLevelRowCountSelector, gridPaginationModelSelector } from '../hooks';
@@ -116,10 +116,10 @@ const TextField = React.forwardRef<
);
});
-const Button = React.forwardRef<
- HTMLButtonElement,
- NonNullable
->(function Button({ startIcon, color, endIcon, size, sx, variant, ...props }, ref) {
+const Button = React.forwardRef(function Button(
+ { startIcon, color, endIcon, size, sx, variant, ...props },
+ ref,
+) {
return (
->(function Switch(
+const Switch = React.forwardRef(function Switch(
{
name,
checkedIcon,
@@ -204,10 +201,7 @@ const Switch = React.forwardRef<
);
});
-const Select = React.forwardRef<
- HTMLButtonElement,
- NonNullable
->(
+const Select = React.forwardRef(
(
{
open,
@@ -314,10 +308,7 @@ const getLabelDisplayedRowsTo = ({
return pageSize === -1 ? rowCount : Math.min(rowCount, (page + 1) * pageSize);
};
-const Pagination = React.forwardRef<
- HTMLDivElement,
- NonNullable
->((props, ref) => {
+const Pagination = React.forwardRef((props, ref) => {
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const paginationModel = gridPaginationModelSelector(apiRef);
@@ -443,8 +434,8 @@ const joySlots: Partial = {
baseSelect: Select,
baseSelectOption: Option,
baseInputLabel: InputLabel,
- baseFormControl: JoyFormControl,
- baseTooltip: JoyTooltip,
+ baseFormControl: JoyFormControl as any /* FIXME: typing error */,
+ baseTooltip: JoyTooltip as any /* FIXME: typing error */,
pagination: Pagination,
loadingOverlay: LoadingOverlay,
};
diff --git a/packages/grid/x-data-grid/src/models/api/gridLocaleTextApi.ts b/packages/grid/x-data-grid/src/models/api/gridLocaleTextApi.ts
index c77fe2f388f9a..b25858988c0a4 100644
--- a/packages/grid/x-data-grid/src/models/api/gridLocaleTextApi.ts
+++ b/packages/grid/x-data-grid/src/models/api/gridLocaleTextApi.ts
@@ -41,9 +41,9 @@ export interface GridLocaleText {
toolbarExportExcel: string;
// Columns management text
- columnsManagementSearchTitle: React.ReactNode;
- columnsManagementNoColumns: React.ReactNode;
- columnsManagementShowHideAllText: React.ReactNode;
+ columnsManagementSearchTitle: string;
+ columnsManagementNoColumns: string;
+ columnsManagementShowHideAllText: string;
// Filter panel text
filterPanelAddFilter: React.ReactNode;
diff --git a/packages/grid/x-data-grid/src/models/gridSlotsComponent.ts b/packages/grid/x-data-grid/src/models/gridSlotsComponent.ts
index 2fec34e839a47..aedf8ceb29a95 100644
--- a/packages/grid/x-data-grid/src/models/gridSlotsComponent.ts
+++ b/packages/grid/x-data-grid/src/models/gridSlotsComponent.ts
@@ -1,77 +1,75 @@
import * as React from 'react';
+import type { GridSlotProps } from './gridSlotsComponentsProps';
import type { GridIconSlotsComponent } from './gridIconSlotsComponent';
-import type { GridRowProps } from '../components/GridRow';
-import type { GridDetailPanelsProps } from '../components/GridDetailPanels';
-import type { GridPinnedRowsProps } from '../components/GridPinnedRows';
-import type { GridColumnHeadersProps } from '../components/GridColumnHeaders';
-// TODO: Convert all `any` to `Props & PropsOverrides`
+export type { GridSlotProps } from './gridSlotsComponentsProps';
+
export interface GridBaseSlots {
/**
* The custom Checkbox component used in the grid for both header and cells.
* @default Checkbox
*/
- baseCheckbox: React.JSXElementConstructor;
+ baseCheckbox: React.JSXElementConstructor;
/**
* The custom Chip component used in the grid.
* @default Chip
*/
- baseChip: React.JSXElementConstructor;
+ baseChip: React.JSXElementConstructor;
/**
* The custom InputAdornment component used in the grid.
* @default InputAdornment
*/
- baseInputAdornment: React.JSXElementConstructor;
+ baseInputAdornment: React.JSXElementConstructor;
/**
* The custom TextField component used in the grid.
* @default TextField
*/
- baseTextField: React.JSXElementConstructor;
+ baseTextField: React.JSXElementConstructor;
/**
* The custom FormControl component used in the grid.
* @default FormControl
*/
- baseFormControl: React.JSXElementConstructor;
+ baseFormControl: React.JSXElementConstructor;
/**
* The custom Select component used in the grid.
* @default Select
*/
- baseSelect: React.JSXElementConstructor;
+ baseSelect: React.JSXElementConstructor;
/**
* The custom Switch component used in the grid.
* @default Switch
*/
- baseSwitch: React.JSXElementConstructor;
+ baseSwitch: React.JSXElementConstructor;
/**
* The custom Button component used in the grid.
* @default Button
*/
- baseButton: React.JSXElementConstructor;
+ baseButton: React.JSXElementConstructor;
/**
* The custom IconButton component used in the grid.
* @default IconButton
*/
- baseIconButton: React.JSXElementConstructor;
+ baseIconButton: React.JSXElementConstructor;
/**
* The custom Tooltip component used in the grid.
* @default Tooltip
*/
- baseTooltip: React.JSXElementConstructor;
+ baseTooltip: React.JSXElementConstructor;
/**
* The custom Popper component used in the grid.
* @default Popper
*/
- basePopper: React.JSXElementConstructor;
+ basePopper: React.JSXElementConstructor;
/**
* The custom InputLabel component used in the grid.
* @default InputLabel
*/
- baseInputLabel: React.JSXElementConstructor;
+ baseInputLabel: React.JSXElementConstructor;
/**
* The custom SelectOption component used in the grid.
* @default MenuItem
*/
- baseSelectOption: React.JSXElementConstructor;
+ baseSelectOption: React.JSXElementConstructor;
}
/**
@@ -82,87 +80,89 @@ export interface GridSlotsComponent extends GridBaseSlots, GridIconSlotsComponen
* The custom Chip component used in the grid.
* @default Chip
*/
- baseChip: React.JSXElementConstructor;
+ baseChip: React.JSXElementConstructor;
/**
* Component rendered for each cell.
* @default GridCell
*/
- cell: React.JSXElementConstructor;
+ cell: React.JSXElementConstructor;
/**
* Component rendered for each skeleton cell.
* @default GridSkeletonCell
*/
- skeletonCell: React.JSXElementConstructor;
+ skeletonCell: React.JSXElementConstructor;
/**
* Filter icon component rendered in each column header.
* @default GridColumnHeaderFilterIconButton
*/
- columnHeaderFilterIconButton: React.JSXElementConstructor;
+ columnHeaderFilterIconButton: React.JSXElementConstructor<
+ GridSlotProps['columnHeaderFilterIconButton']
+ >;
/**
* Column menu component rendered by clicking on the 3 dots "kebab" icon in column headers.
* @default GridColumnMenu
*/
- columnMenu: React.JSXElementConstructor;
+ columnMenu: React.JSXElementConstructor;
/**
* Component responsible for rendering the column headers.
* @default DataGridColumnHeaders
*/
- columnHeaders: React.JSXElementConstructor;
+ columnHeaders: React.JSXElementConstructor;
/**
* Component responsible for rendering the detail panels.
* @default GridDetailPanels
*/
- detailPanels: React.JSXElementConstructor;
+ detailPanels: React.JSXElementConstructor;
/**
* Footer component rendered at the bottom of the grid viewport.
* @default GridFooter
*/
- footer: React.JSXElementConstructor;
+ footer: React.JSXElementConstructor;
/**
* Row count component rendered in the footer
* @default GridRowCount
*/
- footerRowCount: React.JSXElementConstructor;
+ footerRowCount: React.JSXElementConstructor;
/**
* Toolbar component rendered inside the Header component.
* @default null
*/
- toolbar: React.JSXElementConstructor | null;
+ toolbar: React.JSXElementConstructor | null;
/**
* Pinned rows container.
* @ignore - do not document
*/
- pinnedRows: React.JSXElementConstructor;
+ pinnedRows: React.JSXElementConstructor;
/**
* Loading overlay component rendered when the grid is in a loading state.
* @default GridLoadingOverlay
*/
- loadingOverlay: React.JSXElementConstructor;
+ loadingOverlay: React.JSXElementConstructor;
/**
* No results overlay component rendered when the grid has no results after filtering.
* @default GridNoResultsOverlay
*/
- noResultsOverlay: React.JSXElementConstructor;
+ noResultsOverlay: React.JSXElementConstructor;
/**
* No rows overlay component rendered when the grid has no rows.
* @default GridNoRowsOverlay
*/
- noRowsOverlay: React.JSXElementConstructor;
+ noRowsOverlay: React.JSXElementConstructor;
/**
* Pagination component rendered in the grid footer by default.
* @default Pagination
*/
- pagination: React.JSXElementConstructor | null;
+ pagination: React.JSXElementConstructor | null;
/**
* Filter panel component rendered when clicking the filter button.
* @default GridFilterPanel
*/
- filterPanel: React.JSXElementConstructor;
+ filterPanel: React.JSXElementConstructor;
/**
* GridColumns panel component rendered when clicking the columns button.
* @default GridColumnsPanel
*/
- columnsPanel: React.JSXElementConstructor;
+ columnsPanel: React.JSXElementConstructor;
/**
* Component used inside Grid Columns panel to manage columns.
* @default GridColumnsManagement
@@ -172,10 +172,10 @@ export interface GridSlotsComponent extends GridBaseSlots, GridIconSlotsComponen
* Panel component wrapping the filters and columns panels.
* @default GridPanel
*/
- panel: React.JSXElementConstructor;
+ panel: React.JSXElementConstructor;
/**
* Component rendered for each row.
* @default GridRow
*/
- row: React.JSXElementConstructor;
+ row: React.JSXElementConstructor;
}
diff --git a/packages/grid/x-data-grid/src/models/gridSlotsComponentsProps.ts b/packages/grid/x-data-grid/src/models/gridSlotsComponentsProps.ts
index b22b600d1c4cc..6623ae5d4483e 100644
--- a/packages/grid/x-data-grid/src/models/gridSlotsComponentsProps.ts
+++ b/packages/grid/x-data-grid/src/models/gridSlotsComponentsProps.ts
@@ -1,26 +1,31 @@
import * as React from 'react';
-import { CheckboxProps } from '@mui/material/Checkbox';
-import { TextFieldProps } from '@mui/material/TextField';
-import { FormControlProps } from '@mui/material/FormControl';
-import { SelectProps } from '@mui/material/Select';
-import { SwitchProps } from '@mui/material/Switch';
-import { ButtonProps } from '@mui/material/Button';
-import { IconButtonProps } from '@mui/material/IconButton';
-import { TooltipProps } from '@mui/material/Tooltip';
+import type { CheckboxProps } from '@mui/material/Checkbox';
+import type { TextFieldProps } from '@mui/material/TextField';
+import type { FormControlProps } from '@mui/material/FormControl';
+import type { SelectProps } from '@mui/material/Select';
+import type { SwitchProps } from '@mui/material/Switch';
+import type { ButtonProps } from '@mui/material/Button';
+import type { IconButtonProps } from '@mui/material/IconButton';
+import type { InputAdornmentProps } from '@mui/material/InputAdornment';
+import type { TooltipProps } from '@mui/material/Tooltip';
import type { InputLabelProps } from '@mui/material/InputLabel';
-import { PopperProps } from '@mui/material/Popper';
-import { TablePaginationProps } from '@mui/material/TablePagination';
-import { ChipProps } from '@mui/material/Chip';
-import { GridToolbarProps } from '../components/toolbar/GridToolbar';
-import { ColumnHeaderFilterIconButtonProps } from '../components/columnHeaders/GridColumnHeaderFilterIconButton';
-import { GridColumnMenuProps } from '../components/menu/columnMenu/GridColumnMenuProps';
-import { GridColumnsPanelProps } from '../components/panel/GridColumnsPanel';
-import { GridFilterPanelProps } from '../components/panel/filterPanel/GridFilterPanel';
-import { GridFooterContainerProps } from '../components/containers/GridFooterContainer';
-import { GridOverlayProps } from '../components/containers/GridOverlay';
-import { GridPanelProps } from '../components/panel/GridPanel';
+import type { PopperProps } from '@mui/material/Popper';
+import type { TablePaginationProps } from '@mui/material/TablePagination';
+import type { ChipProps } from '@mui/material/Chip';
+import type { GridToolbarProps } from '../components/toolbar/GridToolbar';
+import type { ColumnHeaderFilterIconButtonProps } from '../components/columnHeaders/GridColumnHeaderFilterIconButton';
+import type { GridColumnMenuProps } from '../components/menu/columnMenu/GridColumnMenuProps';
+import type { GridColumnsPanelProps } from '../components/panel/GridColumnsPanel';
+import type { GridFilterPanelProps } from '../components/panel/filterPanel/GridFilterPanel';
+import type { GridFooterContainerProps } from '../components/containers/GridFooterContainer';
+import type { GridOverlayProps } from '../components/containers/GridOverlay';
+import type { GridPanelProps } from '../components/panel/GridPanel';
+import type { GridSkeletonCellProps } from '../components/cell/GridSkeletonCell';
import type { GridRowProps } from '../components/GridRow';
import type { GridCellProps } from '../components/cell/GridCell';
+import type { GridColumnHeadersProps } from '../components/GridColumnHeaders';
+import type { GridDetailPanelsProps } from '../components/GridDetailPanels';
+import type { GridPinnedRowsProps } from '../components/GridPinnedRows';
import type { GridColumnsManagementProps } from '../components/columnsManagement/GridColumnsManagement';
import type { GridRowCountProps } from '../components';
@@ -32,6 +37,7 @@ export interface BaseSelectPropsOverrides {}
export interface BaseSwitchPropsOverrides {}
export interface BaseButtonPropsOverrides {}
export interface BaseIconButtonPropsOverrides {}
+export interface BaseInputAdornmentPropsOverrides {}
export interface BaseTooltipPropsOverrides {}
export interface BasePopperPropsOverrides {}
export interface BaseInputLabelPropsOverrides {}
@@ -42,6 +48,7 @@ export interface ToolbarPropsOverrides {}
export interface ColumnHeaderFilterIconButtonPropsOverrides {}
export interface ColumnMenuPropsOverrides {}
export interface ColumnsPanelPropsOverrides {}
+export interface DetailPanelsPropsOverrides {}
export interface ColumnsManagementPropsOverrides {}
export interface FilterPanelPropsOverrides {}
export interface FooterPropsOverrides {}
@@ -51,45 +58,53 @@ export interface LoadingOverlayPropsOverrides {}
export interface NoResultsOverlayPropsOverrides {}
export interface NoRowsOverlayPropsOverrides {}
export interface PanelPropsOverrides {}
+export interface PinnedRowsPropsOverrides {}
+export interface SkeletonCellPropsOverrides {}
export interface RowPropsOverrides {}
-type SlotProps = Partial;
+export interface GridSlotProps {
+ baseCheckbox: CheckboxProps & BaseCheckboxPropsOverrides;
+ baseTextField: TextFieldProps & BaseTextFieldPropsOverrides;
+ baseFormControl: FormControlProps & BaseFormControlPropsOverrides;
+ baseSelect: SelectProps & BaseSelectPropsOverrides;
+ baseSwitch: SwitchProps & BaseSwitchPropsOverrides;
+ baseButton: ButtonProps & BaseButtonPropsOverrides;
+ baseIconButton: IconButtonProps & BaseIconButtonPropsOverrides;
+ basePopper: PopperProps & BasePopperPropsOverrides;
+ baseTooltip: TooltipProps & BaseTooltipPropsOverrides;
+ baseInputLabel: InputLabelProps & BaseInputLabelPropsOverrides;
+ baseInputAdornment: InputAdornmentProps & BaseInputAdornmentPropsOverrides;
+ baseSelectOption: {
+ native: boolean;
+ value: any;
+ children?: React.ReactNode;
+ } & BaseSelectOptionPropsOverrides;
+ baseChip: ChipProps & BaseChipPropsOverrides;
+ cell: GridCellProps & CellPropsOverrides;
+ columnHeaders: GridColumnHeadersProps;
+ columnHeaderFilterIconButton: ColumnHeaderFilterIconButtonProps &
+ ColumnHeaderFilterIconButtonPropsOverrides;
+ columnMenu: GridColumnMenuProps & ColumnMenuPropsOverrides;
+ columnsPanel: GridColumnsPanelProps & ColumnsPanelPropsOverrides;
+ columnsManagement: GridColumnsManagementProps & ColumnsManagementPropsOverrides;
+ detailPanels: GridDetailPanelsProps & DetailPanelsPropsOverrides;
+ filterPanel: GridFilterPanelProps & FilterPanelPropsOverrides;
+ footer: GridFooterContainerProps & FooterPropsOverrides;
+ footerRowCount: GridRowCountProps & FooterRowCountOverrides;
+ loadingOverlay: GridOverlayProps & LoadingOverlayPropsOverrides;
+ noResultsOverlay: GridOverlayProps & NoResultsOverlayPropsOverrides;
+ noRowsOverlay: GridOverlayProps & NoRowsOverlayPropsOverrides;
+ pagination: Partial & PaginationPropsOverrides;
+ panel: GridPanelProps & PanelPropsOverrides;
+ pinnedRows: GridPinnedRowsProps & PinnedRowsPropsOverrides;
+ row: GridRowProps & RowPropsOverrides;
+ skeletonCell: GridSkeletonCellProps & SkeletonCellPropsOverrides;
+ toolbar: GridToolbarProps & ToolbarPropsOverrides;
+}
/**
* Overridable components props dynamically passed to the component at rendering.
*/
-export interface GridSlotsComponentsProps {
- baseCheckbox?: SlotProps;
- baseTextField?: SlotProps;
- baseFormControl?: SlotProps;
- baseSelect?: SlotProps;
- baseSwitch?: SlotProps;
- baseButton?: SlotProps;
- baseIconButton?: SlotProps;
- basePopper?: SlotProps;
- baseTooltip?: SlotProps;
- baseInputLabel?: SlotProps;
- baseSelectOption?: SlotProps<
- { native: boolean; value: any; children?: React.ReactNode },
- BaseSelectOptionPropsOverrides
- >;
- baseChip?: SlotProps;
- cell?: SlotProps;
- columnHeaderFilterIconButton?: SlotProps<
- ColumnHeaderFilterIconButtonProps,
- ColumnHeaderFilterIconButtonPropsOverrides
- >;
- columnMenu?: SlotProps;
- columnsPanel?: SlotProps;
- columnsManagement?: SlotProps;
- filterPanel?: SlotProps;
- footer?: SlotProps;
- footerRowCount?: SlotProps;
- loadingOverlay?: SlotProps;
- noResultsOverlay?: SlotProps;
- noRowsOverlay?: SlotProps;
- pagination?: SlotProps;
- panel?: SlotProps;
- row?: SlotProps;
- toolbar?: SlotProps;
-}
+export type GridSlotsComponentsProps = Partial<{
+ [K in keyof GridSlotProps]: Partial;
+}>;
diff --git a/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx b/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx
index c69bb7331eca5..1c0e44a39cbf9 100644
--- a/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx
+++ b/packages/grid/x-data-grid/src/tests/filtering.DataGrid.test.tsx
@@ -8,6 +8,7 @@ import {
GridColDef,
GridFilterItem,
GridPreferencePanelsValue,
+ GridSlots,
GridToolbar,
GridFilterOperator,
} from '@mui/x-data-grid';
@@ -1305,7 +1306,7 @@ describe(' - Filter', () => {
type: 'number',
},
]}
- slots={{ toolbar: GridToolbarFilterButton }}
+ slots={{ toolbar: GridToolbarFilterButton as GridSlots['toolbar'] }}
/>,
);
@@ -1369,7 +1370,7 @@ describe(' - Filter', () => {
] as GridFilterOperator[],
},
]}
- slots={{ toolbar: GridToolbarFilterButton }}
+ slots={{ toolbar: GridToolbarFilterButton as GridSlots['toolbar'] }}
/>
,
);
diff --git a/packages/x-charts/src/BarChart/BarChart.tsx b/packages/x-charts/src/BarChart/BarChart.tsx
index f61bdc8ee4b57..8cdf235babe7d 100644
--- a/packages/x-charts/src/BarChart/BarChart.tsx
+++ b/packages/x-charts/src/BarChart/BarChart.tsx
@@ -462,6 +462,7 @@ BarChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -502,6 +503,7 @@ BarChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/BarChart/BarPlot.tsx b/packages/x-charts/src/BarChart/BarPlot.tsx
index 228ab04b81d22..ed56665c69ad2 100644
--- a/packages/x-charts/src/BarChart/BarPlot.tsx
+++ b/packages/x-charts/src/BarChart/BarPlot.tsx
@@ -65,8 +65,6 @@ export interface BarPlotProps extends Pick {
const { stackedData, color } = series[seriesId];
return stackedData.map((values, dataIndex: number) => {
- const bottom = Math.min(...values);
- const top = Math.max(...values);
+ const valueCoordinates = values.map((v) => (verticalLayout ? yScale(v)! : xScale(v)!));
+
+ const minValueCoord = Math.min(...valueCoordinates);
+ const maxValueCoord = Math.max(...valueCoordinates);
return {
- bottom,
- top,
seriesId,
dataIndex,
layout: series[seriesId].layout,
x: verticalLayout
? xScale(xAxis[xAxisKey].data?.[dataIndex])! + barOffset
- : xScale(bottom)!,
- y: verticalLayout ? yScale(top)! : yScale(yAxis[yAxisKey].data?.[dataIndex])! + barOffset,
+ : minValueCoord!,
+ y: verticalLayout
+ ? minValueCoord
+ : yScale(yAxis[yAxisKey].data?.[dataIndex])! + barOffset,
xOrigin: xScale(0)!,
yOrigin: yScale(0)!,
- height: verticalLayout ? Math.abs(yScale(bottom)! - yScale(top)!) : barWidth,
- width: verticalLayout ? barWidth : Math.abs(xScale(bottom)! - xScale(top)!),
+ height: verticalLayout ? maxValueCoord - minValueCoord : barWidth,
+ width: verticalLayout ? barWidth : maxValueCoord - minValueCoord,
color,
highlightScope: series[seriesId].highlightScope,
};
diff --git a/packages/x-charts/src/ChartContainer/ChartContainer.tsx b/packages/x-charts/src/ChartContainer/ChartContainer.tsx
index bad8efa49e8cd..748552c3d10eb 100644
--- a/packages/x-charts/src/ChartContainer/ChartContainer.tsx
+++ b/packages/x-charts/src/ChartContainer/ChartContainer.tsx
@@ -153,6 +153,7 @@ ChartContainer.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -193,6 +194,7 @@ ChartContainer.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/ChartsXAxis/ChartsXAxis.tsx b/packages/x-charts/src/ChartsXAxis/ChartsXAxis.tsx
index 65a525cb50c35..579cf75f94c06 100644
--- a/packages/x-charts/src/ChartsXAxis/ChartsXAxis.tsx
+++ b/packages/x-charts/src/ChartsXAxis/ChartsXAxis.tsx
@@ -6,7 +6,7 @@ import { useThemeProps, useTheme, Theme } from '@mui/material/styles';
import { CartesianContext } from '../context/CartesianContextProvider';
import { DrawingContext } from '../context/DrawingProvider';
import useTicks, { TickItemType } from '../hooks/useTicks';
-import { ChartsXAxisProps } from '../models/axis';
+import { AxisDefaultized, ChartsXAxisProps } from '../models/axis';
import { getAxisUtilityClass } from '../ChartsAxis/axisClasses';
import { AxisRoot } from '../internals/components/AxisSharedComponents';
import { ChartsText, ChartsTextProps } from '../ChartsText';
@@ -35,8 +35,10 @@ function addLabelDimension(
{
tickLabelStyle: style,
tickLabelInterval,
+ reverse,
isMounted,
- }: Pick & { isMounted: boolean },
+ }: Pick &
+ Pick & { isMounted: boolean },
): (TickItemType & LabelExtraData)[] {
const withDimension = xTicks.map((tick) => {
if (!isMounted || tick.formattedValue === undefined) {
@@ -58,9 +60,9 @@ function addLabelDimension(
}
// Filter label to avoid overlap
- let textStart = 0;
- let textEnd = 0;
-
+ let currentTextLimit = 0;
+ let previouseTextLimit = 0;
+ const direction = reverse ? -1 : 1;
return withDimension.map((item, labelIndex) => {
const { width, offset, labelOffset, height } = item;
@@ -68,13 +70,13 @@ function addLabelDimension(
const textPosition = offset + labelOffset;
const gapRatio = 1.2; // Ratio applied to the minimal distance to add some margin.
- textStart = textPosition - (gapRatio * distance) / 2;
- if (labelIndex > 0 && textStart < textEnd) {
+ currentTextLimit = textPosition - (direction * (gapRatio * distance)) / 2;
+ if (labelIndex > 0 && direction * currentTextLimit < direction * previouseTextLimit) {
// Except for the first label, we skip all label that overlap with the last accepted.
- // Notice that the early return prevents `textEnd` from being updated.
+ // Notice that the early return prevents `previouseTextLimit` from being updated.
return { ...item, skipLabel: true };
}
- textEnd = textPosition + (gapRatio * distance) / 2;
+ previouseTextLimit = textPosition + (direction * (gapRatio * distance)) / 2;
return item;
});
}
@@ -100,7 +102,7 @@ function ChartsXAxis(inProps: ChartsXAxisProps) {
const { xAxisIds } = React.useContext(CartesianContext);
const {
xAxis: {
- [props.axisId ?? xAxisIds[0]]: { scale: xScale, tickNumber, ...settings },
+ [props.axisId ?? xAxisIds[0]]: { scale: xScale, tickNumber, reverse, ...settings },
},
} = React.useContext(CartesianContext);
@@ -159,6 +161,7 @@ function ChartsXAxis(inProps: ChartsXAxisProps) {
const xTicksWithDimension = addLabelDimension(xTicks, {
tickLabelStyle: axisTickLabelProps.style,
tickLabelInterval,
+ reverse,
isMounted,
});
diff --git a/packages/x-charts/src/LineChart/LineChart.tsx b/packages/x-charts/src/LineChart/LineChart.tsx
index 0174ceda0973d..5554a34f2b525 100644
--- a/packages/x-charts/src/LineChart/LineChart.tsx
+++ b/packages/x-charts/src/LineChart/LineChart.tsx
@@ -490,6 +490,7 @@ LineChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -530,6 +531,7 @@ LineChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/PieChart/PieChart.tsx b/packages/x-charts/src/PieChart/PieChart.tsx
index 7e4311fb06d80..30104f724d94c 100644
--- a/packages/x-charts/src/PieChart/PieChart.tsx
+++ b/packages/x-charts/src/PieChart/PieChart.tsx
@@ -410,6 +410,7 @@ PieChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -450,6 +451,7 @@ PieChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/ResponsiveChartContainer/ResponsiveChartContainer.tsx b/packages/x-charts/src/ResponsiveChartContainer/ResponsiveChartContainer.tsx
index d9df06ee1e6aa..a3928044c04ea 100644
--- a/packages/x-charts/src/ResponsiveChartContainer/ResponsiveChartContainer.tsx
+++ b/packages/x-charts/src/ResponsiveChartContainer/ResponsiveChartContainer.tsx
@@ -223,6 +223,7 @@ ResponsiveChartContainer.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -263,6 +264,7 @@ ResponsiveChartContainer.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/ScatterChart/ScatterChart.tsx b/packages/x-charts/src/ScatterChart/ScatterChart.tsx
index 41c95e16383a3..b68b1fb3bc54a 100644
--- a/packages/x-charts/src/ScatterChart/ScatterChart.tsx
+++ b/packages/x-charts/src/ScatterChart/ScatterChart.tsx
@@ -419,6 +419,7 @@ ScatterChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -459,6 +460,7 @@ ScatterChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx b/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx
index 622d62ef133f7..aea14b0e94aef 100644
--- a/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx
+++ b/packages/x-charts/src/SparkLineChart/SparkLineChart.tsx
@@ -362,6 +362,7 @@ SparkLineChart.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/context/CartesianContextProvider.tsx b/packages/x-charts/src/context/CartesianContextProvider.tsx
index 7902482671523..9b6556f1a2171 100644
--- a/packages/x-charts/src/context/CartesianContextProvider.tsx
+++ b/packages/x-charts/src/context/CartesianContextProvider.tsx
@@ -193,7 +193,9 @@ function CartesianContextProvider(props: CartesianContextProviderProps) {
const isDefaultAxis = axisIndex === 0;
const [minData, maxData] = getAxisExtremum(axis, xExtremumGetters, isDefaultAxis);
- const range = [drawingArea.left, drawingArea.left + drawingArea.width];
+ const range = axis.reverse
+ ? [drawingArea.left + drawingArea.width, drawingArea.left]
+ : [drawingArea.left, drawingArea.left + drawingArea.width];
if (isBandScaleConfig(axis)) {
const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
@@ -248,7 +250,9 @@ function CartesianContextProvider(props: CartesianContextProviderProps) {
allYAxis.forEach((axis, axisIndex) => {
const isDefaultAxis = axisIndex === 0;
const [minData, maxData] = getAxisExtremum(axis, yExtremumGetters, isDefaultAxis);
- const range = [drawingArea.top + drawingArea.height, drawingArea.top];
+ const range = axis.reverse
+ ? [drawingArea.top, drawingArea.top + drawingArea.height]
+ : [drawingArea.top + drawingArea.height, drawingArea.top];
if (isBandScaleConfig(axis)) {
const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
@@ -342,6 +346,7 @@ CartesianContextProvider.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
@@ -382,6 +387,7 @@ CartesianContextProvider.propTypes = {
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
+ reverse: PropTypes.bool,
scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
slotProps: PropTypes.object,
slots: PropTypes.object,
diff --git a/packages/x-charts/src/models/axis.ts b/packages/x-charts/src/models/axis.ts
index 58651a01416f7..9f49ac4749f1b 100644
--- a/packages/x-charts/src/models/axis.ts
+++ b/packages/x-charts/src/models/axis.ts
@@ -214,6 +214,10 @@ export type AxisConfig = {
* If `true`, hide this value in the tooltip
*/
hideTooltip?: boolean;
+ /**
+ * If `true`, Reverse the axis scaleBand.
+ */
+ reverse?: boolean;
} & Partial &
Partial> &
TickParams;
diff --git a/packages/x-charts/src/models/seriesType/scatter.ts b/packages/x-charts/src/models/seriesType/scatter.ts
index 88fb685571aae..9c2d9941f95ba 100644
--- a/packages/x-charts/src/models/seriesType/scatter.ts
+++ b/packages/x-charts/src/models/seriesType/scatter.ts
@@ -5,7 +5,7 @@ export type ScatterValueType = {
x: number;
y: number;
/**
- * A unique id identifying the scatter point.
+ * A unique identifier for the scatter point
*/
id: string | number;
};
diff --git a/packages/x-charts/tsconfig.build.json b/packages/x-charts/tsconfig.build.json
index 9a57c648d7749..019fe2e46dfe7 100644
--- a/packages/x-charts/tsconfig.build.json
+++ b/packages/x-charts/tsconfig.build.json
@@ -10,7 +10,7 @@
"outDir": "build",
"rootDir": "./src"
},
- "references": [{ "path": "../x-license-pro/tsconfig.build.json" }],
+ "references": [{ "path": "../x-license/tsconfig.build.json" }],
"include": ["src/**/*.ts*", "../../node_modules/@mui/material/themeCssVarsAugmentation"],
"exclude": ["src/**/*.spec.ts*", "src/**/*.test.ts*", "src/tests/**/*"]
}
diff --git a/packages/x-date-pickers-pro/package.json b/packages/x-date-pickers-pro/package.json
index c0bbca565a567..8e4e528ce50f3 100644
--- a/packages/x-date-pickers-pro/package.json
+++ b/packages/x-date-pickers-pro/package.json
@@ -47,7 +47,7 @@
"@mui/system": "^5.15.7",
"@mui/utils": "^5.15.7",
"@mui/x-date-pickers": "7.0.0-beta.1",
- "@mui/x-license-pro": "7.0.0-beta.0",
+ "@mui/x-license": "7.0.0-beta.0",
"clsx": "^2.1.0",
"prop-types": "^15.8.1",
"react-transition-group": "^4.4.5"
diff --git a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx
index bd573303ca85b..ec2f22372bd90 100644
--- a/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx
+++ b/packages/x-date-pickers-pro/src/DateRangeCalendar/DateRangeCalendar.tsx
@@ -6,7 +6,7 @@ import useMediaQuery from '@mui/material/useMediaQuery';
import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
import { styled, useThemeProps } from '@mui/material/styles';
import { unstable_composeClasses as composeClasses } from '@mui/utils';
-import { Watermark } from '@mui/x-license-pro';
+import { Watermark } from '@mui/x-license';
import {
PickersCalendarHeader,
PickersCalendarHeaderProps,
diff --git a/packages/x-date-pickers-pro/src/DateRangePickerDay/DateRangePickerDay.tsx b/packages/x-date-pickers-pro/src/DateRangePickerDay/DateRangePickerDay.tsx
index a7609833e7466..29c0be8863b86 100644
--- a/packages/x-date-pickers-pro/src/DateRangePickerDay/DateRangePickerDay.tsx
+++ b/packages/x-date-pickers-pro/src/DateRangePickerDay/DateRangePickerDay.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
-import { useLicenseVerifier } from '@mui/x-license-pro';
+import { useLicenseVerifier } from '@mui/x-license';
import { alpha, styled, useThemeProps } from '@mui/material/styles';
import { unstable_composeClasses as composeClasses } from '@mui/utils';
import { useUtils } from '@mui/x-date-pickers/internals';
diff --git a/packages/x-date-pickers-pro/src/index.ts b/packages/x-date-pickers-pro/src/index.ts
index 84bd43757e4fd..4644fd2bed955 100644
--- a/packages/x-date-pickers-pro/src/index.ts
+++ b/packages/x-date-pickers-pro/src/index.ts
@@ -1,4 +1,4 @@
-export { LicenseInfo } from '@mui/x-license-pro';
+export { LicenseInfo } from '@mui/x-license';
export * from '@mui/x-date-pickers';
export * from './DateRangePickerDay';
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 b7f2c73c90729..52bf5c8e3e0d5 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
@@ -1,6 +1,6 @@
import * as React from 'react';
import { useSlotProps } from '@mui/base/utils';
-import { useLicenseVerifier } from '@mui/x-license-pro';
+import { useLicenseVerifier } from '@mui/x-license';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { PickersLayout, PickersLayoutSlotProps } from '@mui/x-date-pickers/PickersLayout';
import {
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 7db23cf2c4a4d..7acf65d0aa523 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
@@ -1,6 +1,6 @@
import * as React from 'react';
import { useSlotProps } from '@mui/base/utils';
-import { useLicenseVerifier } from '@mui/x-license-pro';
+import { useLicenseVerifier } from '@mui/x-license';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { PickersLayout, PickersLayoutSlotProps } from '@mui/x-date-pickers/PickersLayout';
import {
diff --git a/packages/x-date-pickers-pro/tsconfig.build.json b/packages/x-date-pickers-pro/tsconfig.build.json
index 0f80aaf556fe2..ae3fe2fae517f 100644
--- a/packages/x-date-pickers-pro/tsconfig.build.json
+++ b/packages/x-date-pickers-pro/tsconfig.build.json
@@ -12,7 +12,7 @@
},
"references": [
{ "path": "../x-date-pickers/tsconfig.build.json" },
- { "path": "../x-license-pro/tsconfig.build.json" }
+ { "path": "../x-license/tsconfig.build.json" }
],
"include": [
"./src/**/*.ts*",
diff --git a/packages/x-date-pickers/src/AdapterLuxon/AdapterLuxon.ts b/packages/x-date-pickers/src/AdapterLuxon/AdapterLuxon.ts
index 295db06c32f41..0118a0025be80 100644
--- a/packages/x-date-pickers/src/AdapterLuxon/AdapterLuxon.ts
+++ b/packages/x-date-pickers/src/AdapterLuxon/AdapterLuxon.ts
@@ -324,8 +324,8 @@ export class AdapterLuxon implements MuiPickersAdapter {
public isWithinRange = (value: DateTime, [start, end]: [DateTime, DateTime]) => {
return (
- value.equals(start) ||
- value.equals(end) ||
+ this.isEqual(value, start) ||
+ this.isEqual(value, end) ||
(this.isAfter(value, start) && this.isBefore(value, end))
);
};
diff --git a/packages/x-license-pro/LICENSE b/packages/x-license/LICENSE
similarity index 100%
rename from packages/x-license-pro/LICENSE
rename to packages/x-license/LICENSE
diff --git a/packages/x-license-pro/README.md b/packages/x-license/README.md
similarity index 70%
rename from packages/x-license-pro/README.md
rename to packages/x-license/README.md
index 50637606a8362..da852b345392e 100644
--- a/packages/x-license-pro/README.md
+++ b/packages/x-license/README.md
@@ -1,3 +1,3 @@
-# @mui/x-license-pro
+# @mui/x-license
Package used by all MUI X to validate license.
diff --git a/packages/x-license-pro/generateReleaseInfo.js b/packages/x-license/generateReleaseInfo.js
similarity index 100%
rename from packages/x-license-pro/generateReleaseInfo.js
rename to packages/x-license/generateReleaseInfo.js
diff --git a/packages/x-license-pro/package.json b/packages/x-license/package.json
similarity index 95%
rename from packages/x-license-pro/package.json
rename to packages/x-license/package.json
index a5af0141425c0..989bb92c6f762 100644
--- a/packages/x-license-pro/package.json
+++ b/packages/x-license/package.json
@@ -1,5 +1,5 @@
{
- "name": "@mui/x-license-pro",
+ "name": "@mui/x-license",
"version": "7.0.0-beta.0",
"description": "MUI X License verification",
"author": "MUI Team",
@@ -32,7 +32,7 @@
"repository": {
"type": "git",
"url": "https://github.com/mui/mui-x.git",
- "directory": "packages/x-license-pro"
+ "directory": "packages/x-license"
},
"dependencies": {
"@babel/runtime": "^7.23.9",
diff --git a/packages/x-license-pro/src/Unstable_LicenseInfoProvider/LicenseInfoContext.ts b/packages/x-license/src/Unstable_LicenseInfoProvider/LicenseInfoContext.ts
similarity index 100%
rename from packages/x-license-pro/src/Unstable_LicenseInfoProvider/LicenseInfoContext.ts
rename to packages/x-license/src/Unstable_LicenseInfoProvider/LicenseInfoContext.ts
diff --git a/packages/x-license-pro/src/Unstable_LicenseInfoProvider/LicenseInfoProvider.tsx b/packages/x-license/src/Unstable_LicenseInfoProvider/LicenseInfoProvider.tsx
similarity index 100%
rename from packages/x-license-pro/src/Unstable_LicenseInfoProvider/LicenseInfoProvider.tsx
rename to packages/x-license/src/Unstable_LicenseInfoProvider/LicenseInfoProvider.tsx
diff --git a/packages/x-license-pro/src/Unstable_LicenseInfoProvider/index.ts b/packages/x-license/src/Unstable_LicenseInfoProvider/index.ts
similarity index 100%
rename from packages/x-license-pro/src/Unstable_LicenseInfoProvider/index.ts
rename to packages/x-license/src/Unstable_LicenseInfoProvider/index.ts
diff --git a/packages/x-license-pro/src/Watermark/Watermark.tsx b/packages/x-license/src/Watermark/Watermark.tsx
similarity index 100%
rename from packages/x-license-pro/src/Watermark/Watermark.tsx
rename to packages/x-license/src/Watermark/Watermark.tsx
diff --git a/packages/x-license-pro/src/Watermark/index.ts b/packages/x-license/src/Watermark/index.ts
similarity index 100%
rename from packages/x-license-pro/src/Watermark/index.ts
rename to packages/x-license/src/Watermark/index.ts
diff --git a/packages/x-license-pro/src/encoding/base64.test.ts b/packages/x-license/src/encoding/base64.test.ts
similarity index 100%
rename from packages/x-license-pro/src/encoding/base64.test.ts
rename to packages/x-license/src/encoding/base64.test.ts
diff --git a/packages/x-license-pro/src/encoding/base64.ts b/packages/x-license/src/encoding/base64.ts
similarity index 100%
rename from packages/x-license-pro/src/encoding/base64.ts
rename to packages/x-license/src/encoding/base64.ts
diff --git a/packages/x-license-pro/src/encoding/md5.test.ts b/packages/x-license/src/encoding/md5.test.ts
similarity index 100%
rename from packages/x-license-pro/src/encoding/md5.test.ts
rename to packages/x-license/src/encoding/md5.test.ts
diff --git a/packages/x-license-pro/src/encoding/md5.ts b/packages/x-license/src/encoding/md5.ts
similarity index 100%
rename from packages/x-license-pro/src/encoding/md5.ts
rename to packages/x-license/src/encoding/md5.ts
diff --git a/packages/x-license-pro/src/generateLicense/generateLicense.test.ts b/packages/x-license/src/generateLicense/generateLicense.test.ts
similarity index 100%
rename from packages/x-license-pro/src/generateLicense/generateLicense.test.ts
rename to packages/x-license/src/generateLicense/generateLicense.test.ts
diff --git a/packages/x-license-pro/src/generateLicense/generateLicense.ts b/packages/x-license/src/generateLicense/generateLicense.ts
similarity index 100%
rename from packages/x-license-pro/src/generateLicense/generateLicense.ts
rename to packages/x-license/src/generateLicense/generateLicense.ts
diff --git a/packages/x-license-pro/src/generateLicense/index.ts b/packages/x-license/src/generateLicense/index.ts
similarity index 100%
rename from packages/x-license-pro/src/generateLicense/index.ts
rename to packages/x-license/src/generateLicense/index.ts
diff --git a/packages/x-license-pro/src/index.ts b/packages/x-license/src/index.ts
similarity index 100%
rename from packages/x-license-pro/src/index.ts
rename to packages/x-license/src/index.ts
diff --git a/packages/x-license-pro/src/useLicenseVerifier/index.ts b/packages/x-license/src/useLicenseVerifier/index.ts
similarity index 100%
rename from packages/x-license-pro/src/useLicenseVerifier/index.ts
rename to packages/x-license/src/useLicenseVerifier/index.ts
diff --git a/packages/x-license-pro/src/useLicenseVerifier/useLicenseVerifier.test.tsx b/packages/x-license/src/useLicenseVerifier/useLicenseVerifier.test.tsx
similarity index 99%
rename from packages/x-license-pro/src/useLicenseVerifier/useLicenseVerifier.test.tsx
rename to packages/x-license/src/useLicenseVerifier/useLicenseVerifier.test.tsx
index 903041728166c..9aaa3bfc713b0 100644
--- a/packages/x-license-pro/src/useLicenseVerifier/useLicenseVerifier.test.tsx
+++ b/packages/x-license/src/useLicenseVerifier/useLicenseVerifier.test.tsx
@@ -6,7 +6,7 @@ import {
LicenseInfo,
generateLicense,
Unstable_LicenseInfoProvider as LicenseInfoProvider,
-} from '@mui/x-license-pro';
+} from '@mui/x-license';
import { sharedLicenseStatuses } from './useLicenseVerifier';
import { generateReleaseInfo } from '../verifyLicense';
diff --git a/packages/x-license-pro/src/useLicenseVerifier/useLicenseVerifier.ts b/packages/x-license/src/useLicenseVerifier/useLicenseVerifier.ts
similarity index 100%
rename from packages/x-license-pro/src/useLicenseVerifier/useLicenseVerifier.ts
rename to packages/x-license/src/useLicenseVerifier/useLicenseVerifier.ts
diff --git a/packages/x-license-pro/src/utils/index.ts b/packages/x-license/src/utils/index.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/index.ts
rename to packages/x-license/src/utils/index.ts
diff --git a/packages/x-license-pro/src/utils/licenseErrorMessageUtils.ts b/packages/x-license/src/utils/licenseErrorMessageUtils.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/licenseErrorMessageUtils.ts
rename to packages/x-license/src/utils/licenseErrorMessageUtils.ts
diff --git a/packages/x-license-pro/src/utils/licenseInfo.ts b/packages/x-license/src/utils/licenseInfo.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/licenseInfo.ts
rename to packages/x-license/src/utils/licenseInfo.ts
diff --git a/packages/x-license-pro/src/utils/licenseScope.ts b/packages/x-license/src/utils/licenseScope.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/licenseScope.ts
rename to packages/x-license/src/utils/licenseScope.ts
diff --git a/packages/x-license-pro/src/utils/licenseStatus.ts b/packages/x-license/src/utils/licenseStatus.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/licenseStatus.ts
rename to packages/x-license/src/utils/licenseStatus.ts
diff --git a/packages/x-license-pro/src/utils/licensingModel.ts b/packages/x-license/src/utils/licensingModel.ts
similarity index 100%
rename from packages/x-license-pro/src/utils/licensingModel.ts
rename to packages/x-license/src/utils/licensingModel.ts
diff --git a/packages/x-license-pro/src/verifyLicense/index.ts b/packages/x-license/src/verifyLicense/index.ts
similarity index 100%
rename from packages/x-license-pro/src/verifyLicense/index.ts
rename to packages/x-license/src/verifyLicense/index.ts
diff --git a/packages/x-license-pro/src/verifyLicense/verifyLicense.test.ts b/packages/x-license/src/verifyLicense/verifyLicense.test.ts
similarity index 100%
rename from packages/x-license-pro/src/verifyLicense/verifyLicense.test.ts
rename to packages/x-license/src/verifyLicense/verifyLicense.test.ts
diff --git a/packages/x-license-pro/src/verifyLicense/verifyLicense.ts b/packages/x-license/src/verifyLicense/verifyLicense.ts
similarity index 100%
rename from packages/x-license-pro/src/verifyLicense/verifyLicense.ts
rename to packages/x-license/src/verifyLicense/verifyLicense.ts
diff --git a/packages/x-license-pro/tsconfig.build.json b/packages/x-license/tsconfig.build.json
similarity index 100%
rename from packages/x-license-pro/tsconfig.build.json
rename to packages/x-license/tsconfig.build.json
diff --git a/packages/x-license-pro/tsconfig.json b/packages/x-license/tsconfig.json
similarity index 100%
rename from packages/x-license-pro/tsconfig.json
rename to packages/x-license/tsconfig.json
diff --git a/scripts/sizeSnapshot/webpack.config.js b/scripts/sizeSnapshot/webpack.config.js
index b2a07570ad87c..316aadc855610 100644
--- a/scripts/sizeSnapshot/webpack.config.js
+++ b/scripts/sizeSnapshot/webpack.config.js
@@ -20,8 +20,8 @@ async function getWebpackEntries() {
path: 'packages/grid/x-data-grid/build/index-esm.js',
},
{
- name: '@mui/x-license-pro',
- path: 'packages/x-license-pro/build/esm/index.js',
+ name: '@mui/x-license',
+ path: 'packages/x-license/build/esm/index.js',
},
];
}
@@ -74,10 +74,7 @@ module.exports = async function webpackConfig(webpack, environment) {
workspaceRoot,
'packages/grid/x-data-grid-premium/build/index-esm.js',
),
- '@mui/x-license-pro': path.join(
- workspaceRoot,
- 'packages/x-license-pro/build/esm/index.js',
- ),
+ '@mui/x-license': path.join(workspaceRoot, 'packages/x-license/build/esm/index.js'),
},
},
entry: { [entry.name]: path.join(workspaceRoot, entry.path) },
diff --git a/scripts/x-data-grid-premium.exports.json b/scripts/x-data-grid-premium.exports.json
index 287b954cc35ce..7093d6eac2ad7 100644
--- a/scripts/x-data-grid-premium.exports.json
+++ b/scripts/x-data-grid-premium.exports.json
@@ -4,6 +4,7 @@
{ "name": "BaseChipPropsOverrides", "kind": "Interface" },
{ "name": "BaseFormControlPropsOverrides", "kind": "Interface" },
{ "name": "BaseIconButtonPropsOverrides", "kind": "Interface" },
+ { "name": "BaseInputAdornmentPropsOverrides", "kind": "Interface" },
{ "name": "BaseInputLabelPropsOverrides", "kind": "Interface" },
{ "name": "BasePopperPropsOverrides", "kind": "Interface" },
{ "name": "BaseSelectOptionPropsOverrides", "kind": "Interface" },
@@ -28,6 +29,7 @@
{ "name": "DataGridPro", "kind": "Function" },
{ "name": "DEFAULT_GRID_AUTOSIZE_OPTIONS", "kind": "Variable" },
{ "name": "DEFAULT_GRID_COL_TYPE_KEY", "kind": "Variable" },
+ { "name": "DetailPanelsPropsOverrides", "kind": "Interface" },
{ "name": "ElementSize", "kind": "Interface" },
{ "name": "EMPTY_PINNED_COLUMN_FIELDS", "kind": "Variable" },
{ "name": "EMPTY_RENDER_CONTEXT", "kind": "Variable" },
@@ -529,8 +531,10 @@
{ "name": "GridSkeletonCell", "kind": "Function" },
{ "name": "GridSkeletonCellProps", "kind": "Interface" },
{ "name": "GridSkeletonRowNode", "kind": "Interface" },
+ { "name": "GridSlotProps", "kind": "Interface" },
+ { "name": "GridSlots", "kind": "Interface" },
{ "name": "GridSlotsComponent", "kind": "Interface" },
- { "name": "GridSlotsComponentsProps", "kind": "Interface" },
+ { "name": "GridSlotsComponentsProps", "kind": "TypeAlias" },
{ "name": "GridSortApi", "kind": "Interface" },
{ "name": "GridSortCellParams", "kind": "Interface" },
{ "name": "GridSortColumnLookup", "kind": "TypeAlias" },
@@ -610,6 +614,7 @@
{ "name": "OutputSelector", "kind": "Interface" },
{ "name": "PaginationPropsOverrides", "kind": "Interface" },
{ "name": "PanelPropsOverrides", "kind": "Interface" },
+ { "name": "PinnedRowsPropsOverrides", "kind": "Interface" },
{ "name": "renderActionsCell", "kind": "Variable" },
{ "name": "renderBooleanCell", "kind": "Variable" },
{ "name": "renderEditBooleanCell", "kind": "Variable" },
@@ -621,6 +626,7 @@
{ "name": "selectedGridRowsSelector", "kind": "Variable" },
{ "name": "selectedIdsLookupSelector", "kind": "Variable" },
{ "name": "setupExcelExportWebWorker", "kind": "Function" },
+ { "name": "SkeletonCellPropsOverrides", "kind": "Interface" },
{ "name": "ToolbarPropsOverrides", "kind": "Interface" },
{ "name": "unstable_resetCleanupTracking", "kind": "Variable" },
{ "name": "useFirstRender", "kind": "Variable" },
diff --git a/scripts/x-data-grid-pro.exports.json b/scripts/x-data-grid-pro.exports.json
index 6e1bffb88d86e..7a9543c73818f 100644
--- a/scripts/x-data-grid-pro.exports.json
+++ b/scripts/x-data-grid-pro.exports.json
@@ -4,6 +4,7 @@
{ "name": "BaseChipPropsOverrides", "kind": "Interface" },
{ "name": "BaseFormControlPropsOverrides", "kind": "Interface" },
{ "name": "BaseIconButtonPropsOverrides", "kind": "Interface" },
+ { "name": "BaseInputAdornmentPropsOverrides", "kind": "Interface" },
{ "name": "BaseInputLabelPropsOverrides", "kind": "Interface" },
{ "name": "BasePopperPropsOverrides", "kind": "Interface" },
{ "name": "BaseSelectOptionPropsOverrides", "kind": "Interface" },
@@ -27,6 +28,7 @@
{ "name": "DataGridProProps", "kind": "Interface" },
{ "name": "DEFAULT_GRID_AUTOSIZE_OPTIONS", "kind": "Variable" },
{ "name": "DEFAULT_GRID_COL_TYPE_KEY", "kind": "Variable" },
+ { "name": "DetailPanelsPropsOverrides", "kind": "Interface" },
{ "name": "ElementSize", "kind": "Interface" },
{ "name": "EMPTY_PINNED_COLUMN_FIELDS", "kind": "Variable" },
{ "name": "EMPTY_RENDER_CONTEXT", "kind": "Variable" },
@@ -483,8 +485,10 @@
{ "name": "GridSkeletonCell", "kind": "Function" },
{ "name": "GridSkeletonCellProps", "kind": "Interface" },
{ "name": "GridSkeletonRowNode", "kind": "Interface" },
+ { "name": "GridSlotProps", "kind": "Interface" },
+ { "name": "GridSlots", "kind": "Interface" },
{ "name": "GridSlotsComponent", "kind": "Interface" },
- { "name": "GridSlotsComponentsProps", "kind": "Interface" },
+ { "name": "GridSlotsComponentsProps", "kind": "TypeAlias" },
{ "name": "GridSortApi", "kind": "Interface" },
{ "name": "GridSortCellParams", "kind": "Interface" },
{ "name": "GridSortColumnLookup", "kind": "TypeAlias" },
@@ -562,6 +566,7 @@
{ "name": "OutputSelector", "kind": "Interface" },
{ "name": "PaginationPropsOverrides", "kind": "Interface" },
{ "name": "PanelPropsOverrides", "kind": "Interface" },
+ { "name": "PinnedRowsPropsOverrides", "kind": "Interface" },
{ "name": "renderActionsCell", "kind": "Variable" },
{ "name": "renderBooleanCell", "kind": "Variable" },
{ "name": "renderEditBooleanCell", "kind": "Variable" },
@@ -572,6 +577,7 @@
{ "name": "selectedGridRowsCountSelector", "kind": "Variable" },
{ "name": "selectedGridRowsSelector", "kind": "Variable" },
{ "name": "selectedIdsLookupSelector", "kind": "Variable" },
+ { "name": "SkeletonCellPropsOverrides", "kind": "Interface" },
{ "name": "ToolbarPropsOverrides", "kind": "Interface" },
{ "name": "unstable_resetCleanupTracking", "kind": "Variable" },
{ "name": "useFirstRender", "kind": "Variable" },
diff --git a/scripts/x-data-grid.exports.json b/scripts/x-data-grid.exports.json
index a14da1163acf4..f55ecfd6630cc 100644
--- a/scripts/x-data-grid.exports.json
+++ b/scripts/x-data-grid.exports.json
@@ -4,6 +4,7 @@
{ "name": "BaseChipPropsOverrides", "kind": "Interface" },
{ "name": "BaseFormControlPropsOverrides", "kind": "Interface" },
{ "name": "BaseIconButtonPropsOverrides", "kind": "Interface" },
+ { "name": "BaseInputAdornmentPropsOverrides", "kind": "Interface" },
{ "name": "BaseInputLabelPropsOverrides", "kind": "Interface" },
{ "name": "BasePopperPropsOverrides", "kind": "Interface" },
{ "name": "BaseSelectOptionPropsOverrides", "kind": "Interface" },
@@ -24,6 +25,7 @@
{ "name": "DataGrid", "kind": "Variable" },
{ "name": "DataGridProps", "kind": "TypeAlias" },
{ "name": "DEFAULT_GRID_COL_TYPE_KEY", "kind": "Variable" },
+ { "name": "DetailPanelsPropsOverrides", "kind": "Interface" },
{ "name": "ElementSize", "kind": "Interface" },
{ "name": "EMPTY_PINNED_COLUMN_FIELDS", "kind": "Variable" },
{ "name": "EMPTY_RENDER_CONTEXT", "kind": "Variable" },
@@ -438,8 +440,10 @@
{ "name": "GridSkeletonCell", "kind": "Function" },
{ "name": "GridSkeletonCellProps", "kind": "Interface" },
{ "name": "GridSkeletonRowNode", "kind": "Interface" },
+ { "name": "GridSlotProps", "kind": "Interface" },
+ { "name": "GridSlots", "kind": "Interface" },
{ "name": "GridSlotsComponent", "kind": "Interface" },
- { "name": "GridSlotsComponentsProps", "kind": "Interface" },
+ { "name": "GridSlotsComponentsProps", "kind": "TypeAlias" },
{ "name": "GridSortApi", "kind": "Interface" },
{ "name": "GridSortCellParams", "kind": "Interface" },
{ "name": "GridSortColumnLookup", "kind": "TypeAlias" },
@@ -515,6 +519,7 @@
{ "name": "OutputSelector", "kind": "Interface" },
{ "name": "PaginationPropsOverrides", "kind": "Interface" },
{ "name": "PanelPropsOverrides", "kind": "Interface" },
+ { "name": "PinnedRowsPropsOverrides", "kind": "Interface" },
{ "name": "renderActionsCell", "kind": "Variable" },
{ "name": "renderBooleanCell", "kind": "Variable" },
{ "name": "renderEditBooleanCell", "kind": "Variable" },
@@ -525,6 +530,7 @@
{ "name": "selectedGridRowsCountSelector", "kind": "Variable" },
{ "name": "selectedGridRowsSelector", "kind": "Variable" },
{ "name": "selectedIdsLookupSelector", "kind": "Variable" },
+ { "name": "SkeletonCellPropsOverrides", "kind": "Interface" },
{ "name": "ToolbarPropsOverrides", "kind": "Interface" },
{ "name": "unstable_resetCleanupTracking", "kind": "Variable" },
{ "name": "useFirstRender", "kind": "Variable" },
diff --git a/scripts/x-license-pro.exports.json b/scripts/x-license.exports.json
similarity index 100%
rename from scripts/x-license-pro.exports.json
rename to scripts/x-license.exports.json
diff --git a/test/e2e/template.html b/test/e2e/template.html
index 081f21ed377a0..7d84cc7643adb 100644
--- a/test/e2e/template.html
+++ b/test/e2e/template.html
@@ -1,9 +1,9 @@
-
+
Playwright end-to-end test
-
+