diff --git a/docs/pages/material-ui/api/table-pagination.json b/docs/pages/material-ui/api/table-pagination.json index 67dfeebfd74910..dacabc881904e1 100644 --- a/docs/pages/material-ui/api/table-pagination.json +++ b/docs/pages/material-ui/api/table-pagination.json @@ -60,14 +60,14 @@ "slotProps": { "type": { "name": "shape", - "description": "{ actions?: { firstButton?: object, firstButtonIcon?: object, lastButton?: object, lastButtonIcon?: object, nextButton?: object, nextButtonIcon?: object, previousButton?: object, previousButtonIcon?: object }, select?: object }" + "description": "{ actions?: { firstButton?: object, firstButtonIcon?: object, lastButton?: object, lastButtonIcon?: object, nextButton?: object, nextButtonIcon?: object, previousButton?: object, previousButtonIcon?: object }, displayedRows?: func
| object, menuItem?: func
| object, root?: func
| object, select?: object, selectLabel?: func
| object, spacer?: func
| object, toolbar?: func
| object }" }, "default": "{}" }, "slots": { "type": { "name": "shape", - "description": "{ actions?: { firstButton?: elementType, firstButtonIcon?: elementType, lastButton?: elementType, lastButtonIcon?: elementType, nextButton?: elementType, nextButtonIcon?: elementType, previousButton?: elementType, previousButtonIcon?: elementType } }" + "description": "{ actions?: { firstButton?: elementType, firstButtonIcon?: elementType, lastButton?: elementType, lastButtonIcon?: elementType, nextButton?: elementType, nextButtonIcon?: elementType, previousButton?: elementType, previousButtonIcon?: elementType }, displayedRows?: elementType, menuItem?: elementType, root?: elementType, select?: elementType, selectLabel?: elementType, spacer?: elementType, toolbar?: elementType }" }, "default": "{}" }, @@ -84,71 +84,72 @@ "import TablePagination from '@mui/material/TablePagination';", "import { TablePagination } from '@mui/material';" ], - "classes": [ + "slots": [ { - "key": "actions", - "className": "MuiTablePagination-actions", - "description": "Styles applied to the internal `TablePaginationActions` component.", - "isGlobal": false + "name": "root", + "description": "The component that renders the root slot.\n[Follow this guide](https://mui.com/material-ui/api/table-cell/#props) to learn more about the requirements for this component.", + "default": "TableCell", + "class": "MuiTablePagination-root" }, { - "key": "displayedRows", - "className": "MuiTablePagination-displayedRows", - "description": "Styles applied to the displayed rows Typography element.", - "isGlobal": false + "name": "toolbar", + "description": "The component that renders the toolbar slot.\n[Follow this guide](https://mui.com/material-ui/api/toolbar/#props) to learn more about the requirements for this component.", + "default": "Toolbar", + "class": "MuiTablePagination-toolbar" }, { - "key": "input", - "className": "MuiTablePagination-input", - "description": "Styles applied to the Select component `root` element.", - "isGlobal": false + "name": "spacer", + "description": "The tag that renders the spacer slot.", + "default": "'div'", + "class": "MuiTablePagination-spacer" }, { - "key": "menuItem", - "className": "MuiTablePagination-menuItem", - "description": "Styles applied to the MenuItem component.", - "isGlobal": false + "name": "selectLabel", + "description": "The tag that renders the selectLabel slot.", + "default": "'p'", + "class": "MuiTablePagination-selectLabel" }, { - "key": "root", - "className": "MuiTablePagination-root", - "description": "Styles applied to the root element.", - "isGlobal": false + "name": "select", + "description": "The component that renders the select slot.\n[Follow this guide](https://mui.com/material-ui/api/select/#props) to learn more about the requirements for this component.", + "default": "Select", + "class": "MuiTablePagination-select" }, { - "key": "select", - "className": "MuiTablePagination-select", - "description": "Styles applied to the Select component `select` class.", - "isGlobal": false + "name": "menuItem", + "description": "The component that renders the select slot.\n[Follow this guide](https://mui.com/material-ui/api/menu-item/#props) to learn more about the requirements for this component.", + "default": "MenuItem", + "class": "MuiTablePagination-menuItem" }, { - "key": "selectIcon", - "className": "MuiTablePagination-selectIcon", - "description": "Styles applied to the Select component `icon` class.", - "isGlobal": false + "name": "displayedRows", + "description": "The tag that renders the displayedRows slot.", + "default": "'p'", + "class": "MuiTablePagination-displayedRows" }, { - "key": "selectLabel", - "className": "MuiTablePagination-selectLabel", - "description": "Styles applied to the select label Typography element.", - "isGlobal": false - }, + "name": "actions", + "description": "The slots that passed to the actions slot.", + "class": "MuiTablePagination-actions" + } + ], + "classes": [ { - "key": "selectRoot", - "className": "MuiTablePagination-selectRoot", + "key": "input", + "className": "MuiTablePagination-input", "description": "Styles applied to the Select component `root` element.", "isGlobal": false }, { - "key": "spacer", - "className": "MuiTablePagination-spacer", - "description": "Styles applied to the spacer element.", + "key": "selectIcon", + "className": "MuiTablePagination-selectIcon", + "description": "Styles applied to the Select component `icon` class.", "isGlobal": false }, { - "key": "toolbar", - "className": "MuiTablePagination-toolbar", - "description": "Styles applied to the Toolbar component.", + "key": "selectRoot", + "className": "MuiTablePagination-selectRoot", + "description": "Styles applied to the Select component `root` element.", "isGlobal": false } ], diff --git a/docs/translations/api-docs/table-pagination/table-pagination.json b/docs/translations/api-docs/table-pagination/table-pagination.json index fa2666ec9c1be5..9fdcc243099e5d 100644 --- a/docs/translations/api-docs/table-pagination/table-pagination.json +++ b/docs/translations/api-docs/table-pagination/table-pagination.json @@ -53,55 +53,34 @@ }, "showFirstButton": { "description": "If true, show the first-page button." }, "showLastButton": { "description": "If true, show the last-page button." }, - "slotProps": { "description": "The props used for each slot inside the TablePagination." }, - "slots": { - "description": "The components used for each slot inside the TablePagination. Either a string to use a HTML element or a component." - }, + "slotProps": { "description": "The props used for each slot inside." }, + "slots": { "description": "The components used for each slot inside." }, "sx": { "description": "The system prop that allows defining system overrides as well as additional CSS styles." } }, "classDescriptions": { - "actions": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the internal TablePaginationActions component" - }, - "displayedRows": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the displayed rows Typography element" - }, "input": { "description": "Styles applied to {{nodeName}}.", "nodeName": "the Select component root element" }, - "menuItem": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the MenuItem component" - }, - "root": { "description": "Styles applied to the root element." }, - "select": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the Select component select class" - }, "selectIcon": { "description": "Styles applied to {{nodeName}}.", "nodeName": "the Select component icon class" }, - "selectLabel": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the select label Typography element" - }, "selectRoot": { "description": "Styles applied to {{nodeName}}.", "nodeName": "the Select component root element" - }, - "spacer": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the spacer element" - }, - "toolbar": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the Toolbar component" } + }, + "slotDescriptions": { + "actions": "The slots that passed to the actions slot.", + "displayedRows": "The tag that renders the displayedRows slot.", + "menuItem": "The component that renders the select slot. Follow this guide to learn more about the requirements for this component.", + "root": "The component that renders the root slot. Follow this guide to learn more about the requirements for this component.", + "select": "The component that renders the select slot. Follow this guide to learn more about the requirements for this component.", + "selectLabel": "The tag that renders the selectLabel slot.", + "spacer": "The tag that renders the spacer slot.", + "toolbar": "The component that renders the toolbar slot. Follow this guide to learn more about the requirements for this component." } } diff --git a/packages/mui-codemod/src/deprecations/all/deprecations-all.js b/packages/mui-codemod/src/deprecations/all/deprecations-all.js index 91658509b72b89..c6a16ef48d29ba 100644 --- a/packages/mui-codemod/src/deprecations/all/deprecations-all.js +++ b/packages/mui-codemod/src/deprecations/all/deprecations-all.js @@ -28,6 +28,7 @@ import transformTextFieldProps from '../text-field-props'; import transformTabClasses from '../tab-classes'; import transformToggleButtonGroupClasses from '../toggle-button-group-classes'; import transformTooltipProps from '../tooltip-props'; +import transformTablePaginationProps from '../table-pagination-props'; /** * @param {import('jscodeshift').FileInfo} file @@ -64,6 +65,7 @@ export default function deprecationsAll(file, api, options) { file.source = transformTabClasses(file, api, options); file.source = transformToggleButtonGroupClasses(file, api, options); file.source = transformTooltipProps(file, api, options); + file.source = transformTablePaginationProps(file, api, options); return file.source; } diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/index.js b/packages/mui-codemod/src/deprecations/table-pagination-props/index.js new file mode 100644 index 00000000000000..e5547f42c7e42b --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/index.js @@ -0,0 +1 @@ +export { default } from './table-pagination-props'; diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.js b/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.js new file mode 100644 index 00000000000000..57dad168bddb2a --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.js @@ -0,0 +1,28 @@ +import movePropIntoSlots from '../utils/movePropIntoSlots'; +import movePropIntoSlotProps from '../utils/movePropIntoSlotProps'; + +/** + * @param {import('jscodeshift').FileInfo} file + * @param {import('jscodeshift').API} api + */ +export default function transformer(file, api, options) { + const j = api.jscodeshift; + const root = j(file.source); + const printOptions = options.printOptions; + + movePropIntoSlots(j, { + root, + componentName: 'TablePagination', + propName: 'ActionsComponent', + slotName: 'actions', + }); + + movePropIntoSlotProps(j, { + root, + componentName: 'TablePagination', + propName: 'SelectProps', + slotName: 'select', + }); + + return root.toSource(printOptions); +} diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.test.js b/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.test.js new file mode 100644 index 00000000000000..858ae985e08589 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/table-pagination-props.test.js @@ -0,0 +1,16 @@ +import { describeJscodeshiftTransform } from '../../../testUtils'; +import transform from './table-pagination-props'; + +describe('@mui/codemod', () => { + describe('deprecations', () => { + describeJscodeshiftTransform({ + transform, + transformName: 'table-pagination-props', + dirname: __dirname, + testCases: [ + { actual: '/test-cases/actual.js', expected: '/test-cases/expected.js' }, + { actual: '/test-cases/theme.actual.js', expected: '/test-cases/theme.expected.js' }, + ], + }); + }); +}); diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/actual.js b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/actual.js new file mode 100644 index 00000000000000..70bcf7a045076a --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/actual.js @@ -0,0 +1,32 @@ +import TablePagination from '@mui/material/TablePagination'; +import { TablePagination as MyTablePagination } from '@mui/material'; + +; +; +; + null }} + slotProps={{ select: { native: false } }} +/>; + +; + +; diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/expected.js b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/expected.js new file mode 100644 index 00000000000000..98c5aada897e06 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/expected.js @@ -0,0 +1,39 @@ +import TablePagination from '@mui/material/TablePagination'; +import { TablePagination as MyTablePagination } from '@mui/material'; + +; +; +; + null }} + slotProps={{ select: { + ...{ native: true }, + ...{ native: false } + } }} />; + +; + +; diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.actual.js b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.actual.js new file mode 100644 index 00000000000000..99f324af4424bd --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.actual.js @@ -0,0 +1,23 @@ +fn({ + MuiTablePagination: { + defaultProps: { + ActionsComponent: 'div', + SelectProps: { native: true }, + }, + }, +}); + +fn({ + MuiTablePagination: { + defaultProps: { + ActionsComponent: 'div', + SelectProps: { native: true }, + slotProps: { + root: { id: 'test' }, + }, + slots: { + root: 'div', + }, + }, + }, +}); diff --git a/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.expected.js b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.expected.js new file mode 100644 index 00000000000000..847943f93d7139 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/table-pagination-props/test-cases/theme.expected.js @@ -0,0 +1,29 @@ +fn({ + MuiTablePagination: { + defaultProps: { + slots: { + actions: 'div' + }, + + slotProps: { + select: { native: true } + } + }, + }, +}); + +fn({ + MuiTablePagination: { + defaultProps: { + slotProps: { + root: { id: 'test' }, + select: { native: true } + }, + + slots: { + root: 'div', + actions: 'div' + } + }, + }, +}); diff --git a/packages/mui-codemod/src/deprecations/utils/movePropIntoSlots.js b/packages/mui-codemod/src/deprecations/utils/movePropIntoSlots.js index 9910853c3b4949..fc3be19f791dd0 100644 --- a/packages/mui-codemod/src/deprecations/utils/movePropIntoSlots.js +++ b/packages/mui-codemod/src/deprecations/utils/movePropIntoSlots.js @@ -9,7 +9,8 @@ function moveJsxPropIntoSlots(j, element, propName, slotName) { ); if (index !== -1) { - const removedValue = element.openingElement.attributes.splice(index, 1)[0].value.expression; + const attrNode = element.openingElement.attributes.splice(index, 1)[0]; + const removedValue = attrNode.value.expression || attrNode.value; let hasSlots = false; element.openingElement.attributes.forEach((attr) => { if (attr.name?.name === 'slots') { diff --git a/packages/mui-material/src/TablePagination/TablePagination.d.ts b/packages/mui-material/src/TablePagination/TablePagination.d.ts index e52eee2e1b898e..c55d4747fdd1a3 100644 --- a/packages/mui-material/src/TablePagination/TablePagination.d.ts +++ b/packages/mui-material/src/TablePagination/TablePagination.d.ts @@ -2,11 +2,14 @@ import * as React from 'react'; import { SxProps } from '@mui/system'; import { Theme } from '../styles'; import { OverridableComponent, OverrideProps } from '../OverridableComponent'; -import { TablePaginationActionsProps } from './TablePaginationActions'; +import { TablePaginationActionsProps, TablePaginationActionsSlots } from './TablePaginationActions'; import { TableCellProps } from '../TableCell'; import { IconButtonProps } from '../IconButton'; import { SelectProps } from '../Select'; import { TablePaginationClasses } from './tablePaginationClasses'; +import { CreateSlotsAndSlotProps, SlotProps } from '../utils/types'; +import { ToolbarProps } from '../Toolbar'; +import { MenuItemProps } from '../MenuItem'; export interface LabelDisplayedRowsArgs { from: number; @@ -15,6 +18,133 @@ export interface LabelDisplayedRowsArgs { page: number; } +export interface TablePaginationRootSlotPropsOverrides {} + +export interface TablePaginationToolbarSlotPropsOverrides {} + +export interface TablePaginationSpacerSlotPropsOverrides {} + +export interface TablePaginationSelectLabelSlotPropsOverrides {} + +export interface TablePaginationSelectSlotPropsOverrides {} + +export interface TablePaginationMenuItemSlotPropsOverrides {} + +export interface TablePaginationDisplayedRowsSlotPropsOverrides {} + +export interface TablePaginationActionsSlotPropsOverrides {} + +export interface TablePaginationSlots { + /** + * The component that renders the root slot. + * [Follow this guide](https://mui.com/material-ui/api/table-cell/#props) to learn more about the requirements for this component. + * @default TableCell + */ + root: React.ElementType; + /** + * The component that renders the toolbar slot. + * [Follow this guide](https://mui.com/material-ui/api/toolbar/#props) to learn more about the requirements for this component. + * @default Toolbar + */ + toolbar: React.ElementType; + /** + * The tag that renders the spacer slot. + * @default 'div' + */ + spacer: React.ElementType; + /** + * The tag that renders the selectLabel slot. + * @default 'p' + */ + selectLabel: React.ElementType; + /** + * The component that renders the select slot. + * [Follow this guide](https://mui.com/material-ui/api/select/#props) to learn more about the requirements for this component. + * @default Select + */ + select: React.ElementType; + /** + * The component that renders the select slot. + * [Follow this guide](https://mui.com/material-ui/api/menu-item/#props) to learn more about the requirements for this component. + * @default MenuItem + */ + menuItem: React.ElementType; + /** + * The tag that renders the displayedRows slot. + * @default 'p' + */ + displayedRows: React.ElementType; + /** + * The slots that passed to the actions slot. + */ + actions: TablePaginationActionsSlots; +} + +export type TablePaginationSlotsAndSlotProps = CreateSlotsAndSlotProps< + TablePaginationSlots, + { + /** + * Props forwarded to the root slot. + * By default, the avaible props are based on the [TableCell](https://mui.com/material-ui/api/table-cell/#props) component. + */ + root: SlotProps< + React.ElementType, + TablePaginationRootSlotPropsOverrides, + TablePaginationOwnerState + >; + /** + * Props forwarded to the toolbar slot. + * By default, the avaible props are based on the [Toolbar](https://mui.com/material-ui/api/toolbar/#props) component. + */ + toolbar: SlotProps< + React.ElementType, + TablePaginationToolbarSlotPropsOverrides, + TablePaginationOwnerState + >; + /** + * Props forwarded to the spacer slot. + * By default, the avaible props are based on the div element. + */ + spacer: SlotProps<'div', TablePaginationSpacerSlotPropsOverrides, TablePaginationOwnerState>; + /** + * Props forwarded to the selectLabel slot. + * By default, the avaible props are based on the paragraph element. + */ + selectLabel: SlotProps< + 'p', + TablePaginationSelectLabelSlotPropsOverrides, + TablePaginationOwnerState + >; + /** + * Props forwarded to the select slot. + * By default, the avaible props are based on the [Select](https://mui.com/material-ui/api/select/#props) component. + */ + select: Partial & TablePaginationSelectSlotPropsOverrides; + /** + * Props forwarded to the menuItem slot. + * By default, the avaible props are based on the [MenuItem](https://mui.com/material-ui/api/menu-item/#props) component. + */ + menuItem: SlotProps< + React.ElementType, + TablePaginationMenuItemSlotPropsOverrides, + TablePaginationOwnerState + >; + /** + * Props forwarded to the displayedRows slot. + * By default, the avaible props are based on the paragraph element. + */ + displayedRows: SlotProps< + 'p', + TablePaginationDisplayedRowsSlotPropsOverrides, + TablePaginationOwnerState + >; + /** + * Props forwarded to the actions slot. + */ + actions: TablePaginationActionsProps['slotProps'] & TablePaginationActionsSlotPropsOverrides; + } +>; + /** * This type is kept for compatibility. Use `TablePaginationOwnProps` instead. */ @@ -134,30 +264,16 @@ export interface TablePaginationOwnProps extends TablePaginationBaseProps { * @default false */ showLastButton?: boolean; - /** - * The props used for each slot inside the TablePagination. - * @default {} - */ - slotProps?: { - actions?: TablePaginationActionsProps['slotProps']; - select?: Partial; - }; - /** - * The components used for each slot inside the TablePagination. - * Either a string to use a HTML element or a component. - * @default {} - */ - slots?: { - actions?: TablePaginationActionsProps['slots']; - }; /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx?: SxProps; } +export interface TablePaginationOwnerState extends TablePaginationOwnProps {} + export interface TablePaginationTypeMap { - props: AdditionalProps & TablePaginationOwnProps; + props: AdditionalProps & TablePaginationOwnProps & TablePaginationSlotsAndSlotProps; defaultComponent: RootComponent; } diff --git a/packages/mui-material/src/TablePagination/TablePagination.js b/packages/mui-material/src/TablePagination/TablePagination.js index 7cf4445542451c..8133a43a687512 100644 --- a/packages/mui-material/src/TablePagination/TablePagination.js +++ b/packages/mui-material/src/TablePagination/TablePagination.js @@ -5,7 +5,6 @@ import clsx from 'clsx'; import integerPropType from '@mui/utils/integerPropType'; import chainPropTypes from '@mui/utils/chainPropTypes'; import composeClasses from '@mui/utils/composeClasses'; -import isHostComponent from '../utils/isHostComponent'; import { styled } from '../zero-styled'; import memoTheme from '../utils/memoTheme'; import { useDefaultProps } from '../DefaultPropsProvider'; @@ -17,6 +16,7 @@ import Toolbar from '../Toolbar'; import TablePaginationActions from './TablePaginationActions'; import useId from '../utils/useId'; import tablePaginationClasses, { getTablePaginationUtilityClass } from './tablePaginationClasses'; +import useSlot from '../utils/useSlot'; const TablePaginationRoot = styled(TableCell, { name: 'MuiTablePagination', @@ -152,7 +152,6 @@ const TablePagination = React.forwardRef(function TablePagination(inProps, ref) const { ActionsComponent = TablePaginationActions, backIconButtonProps, - className, colSpan: colSpanProp, component = TableCell, count, @@ -196,25 +195,78 @@ const TablePagination = React.forwardRef(function TablePagination(inProps, ref) return rowsPerPage === -1 ? count : Math.min(count, (page + 1) * rowsPerPage); }; + const externalForwardedProps = { slots, slotProps }; + + const [RootSlot, rootSlotProps] = useSlot('root', { + ref, + className: classes.root, + elementType: TablePaginationRoot, + externalForwardedProps: { + ...externalForwardedProps, + component, + ...other, + }, + ownerState, + additionalProps: { + colSpan, + }, + }); + + const [ToolbarSlot, toolbarSlotProps] = useSlot('toolbar', { + className: classes.toolbar, + elementType: TablePaginationToolbar, + externalForwardedProps, + ownerState, + }); + + const [SpacerSlot, spacerSlotProps] = useSlot('spacer', { + className: classes.spacer, + elementType: TablePaginationSpacer, + externalForwardedProps, + ownerState, + }); + + const [SelectLabelSlot, selectLabelSlotProps] = useSlot('selectLabel', { + className: classes.selectLabel, + elementType: TablePaginationSelectLabel, + externalForwardedProps, + ownerState, + additionalProps: { + id: labelId, + }, + }); + + const [SelectSlot, selectSlotProps] = useSlot('select', { + className: classes.select, + elementType: TablePaginationSelect, + externalForwardedProps, + ownerState, + }); + + const [MenuItemSlot, menuItemSlotProps] = useSlot('menuItem', { + className: classes.menuItem, + elementType: MenuItemComponent, + externalForwardedProps, + ownerState, + }); + + const [DisplayedRows, displayedRowsProps] = useSlot('displayedRows', { + className: classes.displayedRows, + elementType: TablePaginationDisplayedRows, + externalForwardedProps, + ownerState, + }); + return ( - - - + + + {rowsPerPageOptions.length > 1 && ( - - {labelRowsPerPage} - + {labelRowsPerPage} )} {rowsPerPageOptions.length > 1 && ( - })} value={rowsPerPage} @@ -231,30 +283,28 @@ const TablePagination = React.forwardRef(function TablePagination(inProps, ref) icon: clsx(classes.selectIcon, (selectProps.classes || {}).icon), }} disabled={disabled} + {...selectSlotProps} > {rowsPerPageOptions.map((rowsPerPageOption) => ( - {rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption} - + ))} - + )} - + {labelDisplayedRows({ from: count === 0 ? 0 : page * rowsPerPage + 1, to: getLabelDisplayedRowsTo(), count: count === -1 ? -1 : count, page, })} - + - - + + ); }); @@ -297,10 +347,6 @@ TablePagination.propTypes /* remove-proptypes */ = { * Override or extend the styles applied to the component. */ classes: PropTypes.object, - /** - * @ignore - */ - className: PropTypes.string, /** * @ignore */ @@ -430,7 +476,7 @@ TablePagination.propTypes /* remove-proptypes */ = { */ showLastButton: PropTypes.bool, /** - * The props used for each slot inside the TablePagination. + * The props used for each slot inside. * @default {} */ slotProps: PropTypes.shape({ @@ -444,11 +490,16 @@ TablePagination.propTypes /* remove-proptypes */ = { previousButton: PropTypes.object, previousButtonIcon: PropTypes.object, }), + displayedRows: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + menuItem: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), select: PropTypes.object, + selectLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + spacer: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + toolbar: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), }), /** - * The components used for each slot inside the TablePagination. - * Either a string to use a HTML element or a component. + * The components used for each slot inside. * @default {} */ slots: PropTypes.shape({ @@ -462,6 +513,13 @@ TablePagination.propTypes /* remove-proptypes */ = { previousButton: PropTypes.elementType, previousButtonIcon: PropTypes.elementType, }), + displayedRows: PropTypes.elementType, + menuItem: PropTypes.elementType, + root: PropTypes.elementType, + select: PropTypes.elementType, + selectLabel: PropTypes.elementType, + spacer: PropTypes.elementType, + toolbar: PropTypes.elementType, }), /** * The system prop that allows defining system overrides as well as additional CSS styles. diff --git a/packages/mui-material/src/TablePagination/TablePagination.spec.tsx b/packages/mui-material/src/TablePagination/TablePagination.spec.tsx index ddeee0cf3f1216..b39b4b3b1044bc 100644 --- a/packages/mui-material/src/TablePagination/TablePagination.spec.tsx +++ b/packages/mui-material/src/TablePagination/TablePagination.spec.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; -import TablePagination from '@mui/material/TablePagination'; +import TablePagination, { TablePaginationOwnerState } from '@mui/material/TablePagination'; import SvgIcon from '@mui/material/SvgIcon'; import IconButton, { IconButtonProps } from '@mui/material/IconButton'; +import { expectType } from '@mui/types'; function SampleIcon() { return ( @@ -92,3 +93,84 @@ function classesTest() { }, }} />; + {}} + slots={{ + root: 'div', + toolbar: 'div', + spacer: 'div', + displayedRows: 'p', + select: 'select', + selectLabel: 'label', + menuItem: 'div', + }} + slotProps={{ + root: { + id: 'root', + }, + toolbar: { + id: 'toolbar', + disableGutters: true, + }, + displayedRows: { + id: 'displayedRows', + }, + menuItem: { + id: 'menuItem', + }, + selectLabel: { + id: 'selectLabel', + }, + spacer: { + id: 'spacer', + }, + }} +/>; + {}} + slotProps={{ + root: (ownerState) => { + expectType(ownerState); + return { + id: 'root', + }; + }, + toolbar: (ownerState) => { + expectType(ownerState); + return { + id: 'toolbar', + disableGutters: true, + }; + }, + displayedRows: (ownerState) => { + expectType(ownerState); + return { + id: 'displayedRows', + }; + }, + menuItem: (ownerState) => { + expectType(ownerState); + return { + id: 'menuItem', + }; + }, + selectLabel: (ownerState) => { + expectType(ownerState); + return { + id: 'selectLabel', + }; + }, + spacer: (ownerState) => { + expectType(ownerState); + return { + id: 'spacer', + }; + }, + }} +/>; diff --git a/packages/mui-material/src/TablePagination/TablePagination.test.js b/packages/mui-material/src/TablePagination/TablePagination.test.js index e75062a8d16902..59fa608a48d1b0 100644 --- a/packages/mui-material/src/TablePagination/TablePagination.test.js +++ b/packages/mui-material/src/TablePagination/TablePagination.test.js @@ -49,7 +49,26 @@ describe('', () => { refInstanceof: window.HTMLTableCellElement, testComponentPropWith: 'td', testComponentsRootPropWith: 'td', - testDeepOverrides: { slotName: 'toolbar', slotClassName: classes.toolbar }, + testRootOverrides: { slotName: 'root', slotClassName: classes.root }, + testDeepOverrides: [ + { slotName: 'toolbar', slotClassName: classes.toolbar }, + { slotName: 'spacer', slotClassName: classes.spacer }, + { slotName: 'selectLabel', slotClassName: classes.selectLabel }, + { slotName: 'displayedRows', slotClassName: classes.displayedRows }, + ], + slots: { + root: { + expectedClassName: classes.root, + testWithComponent: React.forwardRef((props, ref) => ( + + )), + testWithElement: 'th', + }, + toolbar: { expectedClassName: classes.toolbar }, + spacer: { expectedClassName: classes.spacer }, + selectLabel: { expectedClassName: classes.selectLabel }, + displayedRows: { expectedClassName: classes.displayedRows }, + }, skip: ['themeVariants', 'componentsProps'], }), ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1b15a0eee6ddf1..ce33e4b902dd31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -359,7 +359,7 @@ importers: version: link:../../packages/mui-utils/build next: specifier: latest - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -369,7 +369,7 @@ importers: devDependencies: '@pigment-css/nextjs-plugin': specifier: 0.0.28 - version: 0.0.28(@types/react@19.0.1)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3) + version: 0.0.28(@types/react@19.0.1)(next@15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3) '@types/node': specifier: ^20.17.10 version: 20.17.10 @@ -661,7 +661,7 @@ importers: version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@toolpad/core': specifier: ^0.10.0 - version: 0.10.0(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.2.1(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@pigment-css/react@0.0.28(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.1)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 0.10.0(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.2.1(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@pigment-css/react@0.0.28(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.1)(next@15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) @@ -745,7 +745,7 @@ importers: version: 5.3.1(@mui/material@packages+mui-material+build)(react@19.0.0) next: specifier: ^15.1.1 - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) notistack: specifier: 3.0.1 version: 3.0.1(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -1457,7 +1457,7 @@ importers: version: 19.0.1 next: specifier: ^15.1.1 - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -1631,7 +1631,7 @@ importers: version: 4.17.21 next: specifier: ^15.1.1 - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -1835,7 +1835,7 @@ importers: version: 19.0.1 next: specifier: ^15.1.1 - version: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -4459,56 +4459,56 @@ packages: resolution: {integrity: sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==} engines: {node: '>=18.0.0'} - '@next/env@15.1.1': - resolution: {integrity: sha512-ldU8IpUqxa87LsWyMh8eIqAzejt8+ZuEsdtCV+fpDog++cBO5b/PWaI7wQQwun8LKJeFFpnY4kv/6r+/dCON6A==} + '@next/env@15.1.2': + resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} '@next/eslint-plugin-next@15.1.0': resolution: {integrity: sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==} - '@next/swc-darwin-arm64@15.1.1': - resolution: {integrity: sha512-pq7Hzu0KaaH6UYcCQ22mOuj2mWCD6iqGvYprp/Ep1EcCxbdNOSS+8EJADFbPHsaXLkaonIJ8lTKBGWXaFxkeNQ==} + '@next/swc-darwin-arm64@15.1.2': + resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.1': - resolution: {integrity: sha512-h567/b/AHAnMpaJ1D3l3jKLrzNOgN9bmDSRd+Gb0hXTkLZh8mE0Kd9MbIw39QeTZQJ3192uFRFWlDjWiifwVhQ==} + '@next/swc-darwin-x64@15.1.2': + resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.1': - resolution: {integrity: sha512-I5Q6M3T9jzTUM2JlwTBy/VBSX+YCDvPLnSaJX5wE5GEPeaJkipMkvTA9+IiFK5PG5ljXTqVFVUj5BSHiYLCpoQ==} + '@next/swc-linux-arm64-gnu@15.1.2': + resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.1': - resolution: {integrity: sha512-4cPMSYmyXlOAk8U04ouEACEGnOwYM9uJOXZnm9GBXIKRbNEvBOH9OePhHiDWqOws6iaHvGayaKr+76LmM41yJA==} + '@next/swc-linux-arm64-musl@15.1.2': + resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.1': - resolution: {integrity: sha512-KgIiKDdV35KwL9TrTxPFGsPb3J5RuDpw828z3MwMQbWaOmpp/T4MeWQCwo+J2aOxsyAcfsNE334kaWXCb6YTTA==} + '@next/swc-linux-x64-gnu@15.1.2': + resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.1': - resolution: {integrity: sha512-aHP/29x8loFhB3WuW2YaWaYFJN389t6/SBsug19aNwH+PRLzDEQfCvtuP6NxRCido9OAoExd+ZuYJKF9my1Kpg==} + '@next/swc-linux-x64-musl@15.1.2': + resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.1': - resolution: {integrity: sha512-klbzXYwqHMwiucNFF0tWiWJyPb45MBX1q/ATmxrMjEYgA+V/0OXc9KmNVRIn6G/ab0ASUk4uWqxik5m6wvm1sg==} + '@next/swc-win32-arm64-msvc@15.1.2': + resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.1': - resolution: {integrity: sha512-V5fm4aULqHSlMQt3U1rWAWuwJTFsb6Yh4P8p1kQFoayAF9jAQtjBvHku4zCdrtQuw9u9crPC0FNML00kN4WGhA==} + '@next/swc-win32-x64-msvc@15.1.2': + resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -10064,8 +10064,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - next@15.1.1: - resolution: {integrity: sha512-SBZlcvdIxajw8//H3uOR1G3iu3jxsra/77m2ulRIxi3m89p+s3ACsoOXR49JEAbaun/DVoRJ9cPKq8eF/oNB5g==} + next@15.1.2: + resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -15539,34 +15539,34 @@ snapshots: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 - '@next/env@15.1.1': {} + '@next/env@15.1.2': {} '@next/eslint-plugin-next@15.1.0': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.1.1': + '@next/swc-darwin-arm64@15.1.2': optional: true - '@next/swc-darwin-x64@15.1.1': + '@next/swc-darwin-x64@15.1.2': optional: true - '@next/swc-linux-arm64-gnu@15.1.1': + '@next/swc-linux-arm64-gnu@15.1.2': optional: true - '@next/swc-linux-arm64-musl@15.1.1': + '@next/swc-linux-arm64-musl@15.1.2': optional: true - '@next/swc-linux-x64-gnu@15.1.1': + '@next/swc-linux-x64-gnu@15.1.2': optional: true - '@next/swc-linux-x64-musl@15.1.1': + '@next/swc-linux-x64-musl@15.1.2': optional: true - '@next/swc-win32-arm64-msvc@15.1.1': + '@next/swc-win32-arm64-msvc@15.1.2': optional: true - '@next/swc-win32-x64-msvc@15.1.1': + '@next/swc-win32-x64-msvc@15.1.2': optional: true '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -16001,10 +16001,10 @@ snapshots: '@opentelemetry/api@1.8.0': optional: true - '@pigment-css/nextjs-plugin@0.0.28(@types/react@19.0.1)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3)': + '@pigment-css/nextjs-plugin@0.0.28(@types/react@19.0.1)(next@15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3)': dependencies: '@pigment-css/unplugin': 0.0.28(@types/react@19.0.1)(react@19.0.0)(webpack-sources@3.2.3) - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@types/react' - react @@ -16775,7 +16775,7 @@ snapshots: '@theme-ui/css': 0.17.1(@emotion/react@11.13.5(@types/react@18.3.12)(react@19.0.0)) react: 19.0.0 - '@toolpad/core@0.10.0(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.2.1(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@pigment-css/react@0.0.28(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.1)(next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': + '@toolpad/core@0.10.0(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.2.1(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@pigment-css/react@0.0.28(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.1)(next@15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': dependencies: '@babel/runtime': 7.26.0 '@mui/icons-material': link:packages/mui-icons-material/build @@ -16790,7 +16790,7 @@ snapshots: prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - next: 15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router-dom: 6.28.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@emotion/react' @@ -22722,9 +22722,9 @@ snapshots: nested-error-stacks@2.1.1: {} - next@15.1.1(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.1.2(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.1.1 + '@next/env': 15.1.2 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -22734,14 +22734,14 @@ snapshots: react-dom: 19.0.0(react@19.0.0) styled-jsx: 5.1.6(@babel/core@7.26.0)(babel-plugin-macros@3.1.0)(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.1 - '@next/swc-darwin-x64': 15.1.1 - '@next/swc-linux-arm64-gnu': 15.1.1 - '@next/swc-linux-arm64-musl': 15.1.1 - '@next/swc-linux-x64-gnu': 15.1.1 - '@next/swc-linux-x64-musl': 15.1.1 - '@next/swc-win32-arm64-msvc': 15.1.1 - '@next/swc-win32-x64-msvc': 15.1.1 + '@next/swc-darwin-arm64': 15.1.2 + '@next/swc-darwin-x64': 15.1.2 + '@next/swc-linux-arm64-gnu': 15.1.2 + '@next/swc-linux-arm64-musl': 15.1.2 + '@next/swc-linux-x64-gnu': 15.1.2 + '@next/swc-linux-x64-musl': 15.1.2 + '@next/swc-win32-arm64-msvc': 15.1.2 + '@next/swc-win32-x64-msvc': 15.1.2 '@opentelemetry/api': 1.8.0 '@playwright/test': 1.48.2 sharp: 0.33.5