diff --git a/docs/pages/api-docs/table-footer.json b/docs/pages/api-docs/table-footer.json
index f3b843a0d17dfb..3feb421f4d8b8f 100644
--- a/docs/pages/api-docs/table-footer.json
+++ b/docs/pages/api-docs/table-footer.json
@@ -2,7 +2,8 @@
"props": {
"children": { "type": { "name": "node" } },
"classes": { "type": { "name": "object" } },
- "component": { "type": { "name": "elementType" } }
+ "component": { "type": { "name": "elementType" } },
+ "sx": { "type": { "name": "object" } }
},
"name": "TableFooter",
"styles": { "classes": ["root"], "globalClasses": {}, "name": "MuiTableFooter" },
@@ -11,6 +12,6 @@
"filename": "/packages/material-ui/src/TableFooter/TableFooter.js",
"inheritance": null,
"demos": "
",
- "styledComponent": false,
+ "styledComponent": true,
"cssComponent": false
}
diff --git a/docs/translations/api-docs/table-footer/table-footer.json b/docs/translations/api-docs/table-footer/table-footer.json
index a97666a1f27185..170e1b7f0c5c68 100644
--- a/docs/translations/api-docs/table-footer/table-footer.json
+++ b/docs/translations/api-docs/table-footer/table-footer.json
@@ -3,7 +3,8 @@
"propDescriptions": {
"children": "The content of the component, normally TableRow
.",
"classes": "Override or extend the styles applied to the component. See CSS API below for more details.",
- "component": "The component used for the root node. Either a string to use a HTML element or a component."
+ "component": "The component used for the root node. Either a string to use a HTML element or a component.",
+ "sx": "The system prop that allows defining system overrides as well as additional CSS styles. See the `sx` page for more details."
},
"classDescriptions": { "root": { "description": "Styles applied to the root element." } }
}
diff --git a/packages/material-ui/src/TableFooter/TableFooter.d.ts b/packages/material-ui/src/TableFooter/TableFooter.d.ts
index 79d08331b7660d..80f68df1ff50a4 100644
--- a/packages/material-ui/src/TableFooter/TableFooter.d.ts
+++ b/packages/material-ui/src/TableFooter/TableFooter.d.ts
@@ -1,4 +1,6 @@
+import { SxProps } from '@material-ui/system';
import * as React from 'react';
+import { Theme } from '..';
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
export interface TableFooterTypeMap {
@@ -14,6 +16,10 @@ export interface TableFooterTypeMap
styles.root || {};
+
+const useUtilityClasses = (styleProps) => {
+ const { classes } = styleProps;
+
+ const slots = {
+ root: ['root'],
+ };
+
+ return composeClasses(slots, getTableFooterUtilityClass, classes);
};
+const TableFooterRoot = experimentalStyled(
+ 'tfoot',
+ {},
+ {
+ name: 'MuiTableFooter',
+ slot: 'Root',
+ overridesResolver,
+ },
+)({
+ /* Styles applied to the root element. */
+ display: 'table-footer-group',
+});
+
const tablelvl2 = {
variant: 'footer',
};
const defaultComponent = 'tfoot';
-const TableFooter = React.forwardRef(function TableFooter(props, ref) {
- const { classes, className, component: Component = defaultComponent, ...other } = props;
+const TableFooter = React.forwardRef(function TableFooter(inProps, ref) {
+ const props = useThemeProps({ props: inProps, name: 'MuiTableFooter' });
+ const { className, component = defaultComponent, ...other } = props;
+
+ const styleProps = {
+ ...props,
+ component,
+ };
+
+ const classes = useUtilityClasses(styleProps);
return (
-
@@ -54,6 +85,10 @@ TableFooter.propTypes = {
* Either a string to use a HTML element or a component.
*/
component: PropTypes.elementType,
+ /**
+ * The system prop that allows defining system overrides as well as additional CSS styles.
+ */
+ sx: PropTypes.object,
};
-export default withStyles(styles, { name: 'MuiTableFooter' })(TableFooter);
+export default TableFooter;
diff --git a/packages/material-ui/src/TableFooter/TableFooter.test.js b/packages/material-ui/src/TableFooter/TableFooter.test.js
index ac34f555c9bc0a..75618416dc6802 100644
--- a/packages/material-ui/src/TableFooter/TableFooter.test.js
+++ b/packages/material-ui/src/TableFooter/TableFooter.test.js
@@ -1,32 +1,34 @@
import * as React from 'react';
import { expect } from 'chai';
-import { getClasses, createMount, createClientRender, describeConformance } from 'test/utils';
+import { createMount, createClientRender, describeConformanceV5 } from 'test/utils';
import TableFooter from './TableFooter';
import Tablelvl2Context from '../Table/Tablelvl2Context';
+import classes from './tableFooterClasses';
describe('', () => {
const mount = createMount();
- let classes;
const render = createClientRender();
function renderInTable(node) {
return render(
);
}
- before(() => {
- classes = getClasses();
- });
-
- describeConformance(, () => ({
+ describeConformanceV5(, () => ({
classes,
inheritComponent: 'tfoot',
mount: (node) => {
const wrapper = mount();
return wrapper.find('table').childAt(0);
},
-
+ render: (node) => {
+ const { container, ...rest } = render();
+ return { container: container.firstChild, ...rest };
+ },
+ muiName: 'MuiTableFooter',
+ testVariantProps: { variant: 'foo' },
refInstanceof: window.HTMLTableSectionElement,
testComponentPropWith: 'thead',
+ skip: ['componentsProp'],
}));
it('should render children', () => {
diff --git a/packages/material-ui/src/TableFooter/index.d.ts b/packages/material-ui/src/TableFooter/index.d.ts
index cae5d63a35f354..9898556e0b2e59 100644
--- a/packages/material-ui/src/TableFooter/index.d.ts
+++ b/packages/material-ui/src/TableFooter/index.d.ts
@@ -1,2 +1,5 @@
export { default } from './TableFooter';
export * from './TableFooter';
+
+export { default as tableFooterClasses } from './tableFooterClasses';
+export * from './tableFooterClasses';
diff --git a/packages/material-ui/src/TableFooter/index.js b/packages/material-ui/src/TableFooter/index.js
index 2cbb49690c5870..4d3199f1bb616d 100644
--- a/packages/material-ui/src/TableFooter/index.js
+++ b/packages/material-ui/src/TableFooter/index.js
@@ -1 +1,4 @@
export { default } from './TableFooter';
+
+export { default as tableFooterClasses } from './tableFooterClasses';
+export * from './tableFooterClasses';
diff --git a/packages/material-ui/src/TableFooter/tableFooterClasses.d.ts b/packages/material-ui/src/TableFooter/tableFooterClasses.d.ts
new file mode 100644
index 00000000000000..de46b8f37c3e77
--- /dev/null
+++ b/packages/material-ui/src/TableFooter/tableFooterClasses.d.ts
@@ -0,0 +1,7 @@
+import { TableFooterClassKey } from './TableFooter';
+
+declare const tableFooterClasses: Record;
+
+export function getTableFooterUtilityClass(slot: string): string;
+
+export default tableFooterClasses;
diff --git a/packages/material-ui/src/TableFooter/tableFooterClasses.js b/packages/material-ui/src/TableFooter/tableFooterClasses.js
new file mode 100644
index 00000000000000..1c73c0a0c32ed0
--- /dev/null
+++ b/packages/material-ui/src/TableFooter/tableFooterClasses.js
@@ -0,0 +1,9 @@
+import { generateUtilityClass, generateUtilityClasses } from '@material-ui/unstyled';
+
+export function getTableFooterUtilityClass(slot) {
+ return generateUtilityClass('MuiTableFooter', slot);
+}
+
+const tableFooterClasses = generateUtilityClasses('MuiTableFooter', ['root']);
+
+export default tableFooterClasses;