diff --git a/docs/pages/api-docs/dialog-title.json b/docs/pages/api-docs/dialog-title.json
index 2e4c20a05c87c6..ba3c91018022d9 100644
--- a/docs/pages/api-docs/dialog-title.json
+++ b/docs/pages/api-docs/dialog-title.json
@@ -2,7 +2,8 @@
"props": {
"children": { "type": { "name": "node" } },
"classes": { "type": { "name": "object" } },
- "disableTypography": { "type": { "name": "bool" } }
+ "disableTypography": { "type": { "name": "bool" } },
+ "sx": { "type": { "name": "object" } }
},
"name": "DialogTitle",
"styles": { "classes": ["root"], "globalClasses": {}, "name": "MuiDialogTitle" },
@@ -11,6 +12,6 @@
"filename": "/packages/material-ui/src/DialogTitle/DialogTitle.js",
"inheritance": null,
"demos": "
",
- "styledComponent": false,
+ "styledComponent": true,
"cssComponent": false
}
diff --git a/docs/translations/api-docs/dialog-title/dialog-title.json b/docs/translations/api-docs/dialog-title/dialog-title.json
index e94c9c45476891..5c0cf1826837a4 100644
--- a/docs/translations/api-docs/dialog-title/dialog-title.json
+++ b/docs/translations/api-docs/dialog-title/dialog-title.json
@@ -3,7 +3,8 @@
"propDescriptions": {
"children": "The content of the component.",
"classes": "Override or extend the styles applied to the component. See CSS API below for more details.",
- "disableTypography": "If true
, the children won't be wrapped by a typography component. For instance, this can be useful to render an h4 instead of the default h2."
+ "disableTypography": "If true
, the children won't be wrapped by a typography component. For instance, this can be useful to render an h4 instead of the default h2.",
+ "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/DialogTitle/DialogTitle.d.ts b/packages/material-ui/src/DialogTitle/DialogTitle.d.ts
index 17e99ccad85c57..fd523f3e2a8a36 100644
--- a/packages/material-ui/src/DialogTitle/DialogTitle.d.ts
+++ b/packages/material-ui/src/DialogTitle/DialogTitle.d.ts
@@ -1,5 +1,6 @@
import * as React from 'react';
-import { InternalStandardProps as StandardProps } from '..';
+import { SxProps } from '@material-ui/system';
+import { InternalStandardProps as StandardProps, Theme } from '..';
export interface DialogTitleProps extends StandardProps> {
/**
@@ -13,6 +14,10 @@ export interface DialogTitleProps extends StandardProps;
/**
* If `true`, the children won't be wrapped by a typography component.
* For instance, this can be useful to render an h4 instead of the default h2.
diff --git a/packages/material-ui/src/DialogTitle/DialogTitle.js b/packages/material-ui/src/DialogTitle/DialogTitle.js
index 5b193813a85970..b3d9dee9e91270 100644
--- a/packages/material-ui/src/DialogTitle/DialogTitle.js
+++ b/packages/material-ui/src/DialogTitle/DialogTitle.js
@@ -1,23 +1,58 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
-import withStyles from '../styles/withStyles';
+import { unstable_composeClasses as composeClasses } from '@material-ui/unstyled';
import Typography from '../Typography';
+import experimentalStyled from '../styles/experimentalStyled';
+import useThemeProps from '../styles/useThemeProps';
+import { getDialogTitleUtilityClass } from './dialogTitleClasses';
-export const styles = {
- /* Styles applied to the root element. */
- root: {
+const overridesResolver = (props, styles) => styles.root || {};
+
+const useUtilityClasses = (styleProps) => {
+ const { classes } = styleProps;
+
+ const slots = {
+ root: ['root'],
+ };
+
+ return composeClasses(slots, getDialogTitleUtilityClass, classes);
+};
+
+const DialogTitleRoot = experimentalStyled(
+ 'div',
+ {},
+ {
+ name: 'MuiDialogTitle',
+ slot: 'Root',
+ overridesResolver,
+ },
+)(() => {
+ return {
+ /* Styles applied to the root element. */
margin: 0,
padding: '16px 24px',
flex: '0 0 auto',
- },
-};
+ };
+});
-const DialogTitle = React.forwardRef(function DialogTitle(props, ref) {
- const { children, classes, className, disableTypography = false, ...other } = props;
+const DialogTitle = React.forwardRef(function DialogTitle(inProps, ref) {
+ const props = useThemeProps({
+ props: inProps,
+ name: 'MuiDialogTitle',
+ });
+
+ const { children, className, disableTypography = false, ...other } = props;
+ const styleProps = { ...props, disableTypography };
+ const classes = useUtilityClasses(styleProps);
return (
-
+
{disableTypography ? (
children
) : (
@@ -25,7 +60,7 @@ const DialogTitle = React.forwardRef(function DialogTitle(props, ref) {
{children}
)}
-
+
);
});
@@ -52,6 +87,10 @@ DialogTitle.propTypes = {
* @default false
*/
disableTypography: PropTypes.bool,
+ /**
+ * The system prop that allows defining system overrides as well as additional CSS styles.
+ */
+ sx: PropTypes.object,
};
-export default withStyles(styles, { name: 'MuiDialogTitle' })(DialogTitle);
+export default DialogTitle;
diff --git a/packages/material-ui/src/DialogTitle/DialogTitle.test.js b/packages/material-ui/src/DialogTitle/DialogTitle.test.js
index da5466eaa9063a..edbdf7a8e8950d 100644
--- a/packages/material-ui/src/DialogTitle/DialogTitle.test.js
+++ b/packages/material-ui/src/DialogTitle/DialogTitle.test.js
@@ -1,22 +1,20 @@
import * as React from 'react';
-import { getClasses, createMount, describeConformance, createClientRender } from 'test/utils';
+import { createMount, describeConformanceV5, createClientRender } from 'test/utils';
import DialogTitle from './DialogTitle';
+import classes from './dialogTitleClasses';
describe('', () => {
const mount = createMount();
const render = createClientRender();
- let classes;
- before(() => {
- classes = getClasses(foo);
- });
-
- describeConformance(foo, () => ({
+ describeConformanceV5(foo, () => ({
classes,
inheritComponent: 'div',
mount,
+ muiName: 'MuiDialogTitle',
refInstanceof: window.HTMLDivElement,
- skip: ['componentProp'],
+ testVariantProps: { disableTypography: true },
+ skip: ['componentProp', 'componentsProp'],
}));
it('should render JSX children', () => {
diff --git a/packages/material-ui/src/DialogTitle/dialogTitleClasses.d.ts b/packages/material-ui/src/DialogTitle/dialogTitleClasses.d.ts
new file mode 100644
index 00000000000000..08c1f74a2808a1
--- /dev/null
+++ b/packages/material-ui/src/DialogTitle/dialogTitleClasses.d.ts
@@ -0,0 +1,9 @@
+export interface DialogTitleClasses {
+ root: string;
+}
+
+declare const dialogTitleClasses: DialogTitleClasses;
+
+export function getDialogTitleUtilityClass(slot: string): string;
+
+export default dialogTitleClasses;
diff --git a/packages/material-ui/src/DialogTitle/dialogTitleClasses.js b/packages/material-ui/src/DialogTitle/dialogTitleClasses.js
new file mode 100644
index 00000000000000..f083b22e1d4b29
--- /dev/null
+++ b/packages/material-ui/src/DialogTitle/dialogTitleClasses.js
@@ -0,0 +1,9 @@
+import { generateUtilityClass, generateUtilityClasses } from '@material-ui/unstyled';
+
+export function getDialogTitleUtilityClass(slot) {
+ return generateUtilityClass('MuiDialogTitle', slot);
+}
+
+const dialogTitleClasses = generateUtilityClasses('MuiDialogTitle', ['root']);
+
+export default dialogTitleClasses;
diff --git a/packages/material-ui/src/DialogTitle/index.d.ts b/packages/material-ui/src/DialogTitle/index.d.ts
index f2d576011232d6..d89654b25f74fe 100644
--- a/packages/material-ui/src/DialogTitle/index.d.ts
+++ b/packages/material-ui/src/DialogTitle/index.d.ts
@@ -1,2 +1,4 @@
export { default } from './DialogTitle';
export * from './DialogTitle';
+export { default as dialogTitleClasses } from './dialogTitleClasses';
+export * from './dialogTitleClasses';
diff --git a/packages/material-ui/src/DialogTitle/index.js b/packages/material-ui/src/DialogTitle/index.js
index 69720d1cddbc6e..52d3ec908acd69 100644
--- a/packages/material-ui/src/DialogTitle/index.js
+++ b/packages/material-ui/src/DialogTitle/index.js
@@ -1 +1,3 @@
export { default } from './DialogTitle';
+export { default as dialogTitleClasses } from './dialogTitleClasses';
+export * from './dialogTitleClasses';