diff --git a/packages/material-ui/src/Button/Button.d.ts b/packages/material-ui/src/Button/Button.d.ts
index a01e336643eaa3..a3c77059b68c37 100644
--- a/packages/material-ui/src/Button/Button.d.ts
+++ b/packages/material-ui/src/Button/Button.d.ts
@@ -26,6 +26,8 @@ export type ButtonClassKey =
| 'flatPrimary'
| 'flatSecondary'
| 'outlined'
+ | 'outlinedPrimary'
+ | 'outlinedSecondary'
| 'colorInherit'
| 'contained'
| 'containedPrimary'
diff --git a/packages/material-ui/src/Button/Button.js b/packages/material-ui/src/Button/Button.js
index cff9278f002aee..0e10bb0a88b29c 100644
--- a/packages/material-ui/src/Button/Button.js
+++ b/packages/material-ui/src/Button/Button.js
@@ -19,7 +19,7 @@ export const styles = theme => ({
padding: '8px 16px',
borderRadius: theme.shape.borderRadius,
color: theme.palette.text.primary,
- transition: theme.transitions.create(['background-color', 'box-shadow'], {
+ transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {
duration: theme.transitions.duration.short,
}),
'&:hover': {
@@ -80,6 +80,20 @@ export const styles = theme => ({
theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'
}`,
},
+ /* Styles applied to the root element if `variant="outlined"` and `color="primary"`. */
+ outlinedPrimary: {
+ border: `1px solid ${fade(theme.palette.primary.main, 0.5)}`,
+ '&:hover': {
+ border: `1px solid ${theme.palette.primary.main}`,
+ },
+ },
+ /* Styles applied to the root element if `variant="outlined"` and `color="secondary"`. */
+ outlinedSecondary: {
+ border: `1px solid ${fade(theme.palette.secondary.main, 0.5)}`,
+ '&:hover': {
+ border: `1px solid ${theme.palette.secondary.main}`,
+ },
+ },
/* Styles applied to the root element if `variant="[contained | fab]"`. */
contained: {
color: theme.palette.getContrastText(theme.palette.grey[300]),
@@ -228,6 +242,8 @@ function Button(props) {
[classes.raisedPrimary]: (contained || fab) && color === 'primary',
[classes.raisedSecondary]: (contained || fab) && color === 'secondary',
[classes.outlined]: variant === 'outlined',
+ [classes.outlinedPrimary]: variant === 'outlined' && color === 'primary',
+ [classes.outlinedSecondary]: variant === 'outlined' && color === 'secondary',
[classes[`size${capitalize(size)}`]]: size !== 'medium',
[classes.disabled]: disabled,
[classes.fullWidth]: fullWidth,
diff --git a/packages/material-ui/src/styles/MuiThemeProvider.test.js b/packages/material-ui/src/styles/MuiThemeProvider.test.js
index 27e0afdb133eea..0cb8e1a8595e33 100644
--- a/packages/material-ui/src/styles/MuiThemeProvider.test.js
+++ b/packages/material-ui/src/styles/MuiThemeProvider.test.js
@@ -86,13 +86,13 @@ describe('', () => {
assert.notStrictEqual(markup.match('Hello World'), null);
assert.strictEqual(sheetsRegistry.registry.length, 3);
assert.strictEqual(sheetsRegistry.toString().length > 4000, true);
- assert.strictEqual(sheetsRegistry.registry[0].classes.root, 'MuiTouchRipple-root-28');
+ assert.strictEqual(sheetsRegistry.registry[0].classes.root, 'MuiTouchRipple-root-30');
assert.deepEqual(
sheetsRegistry.registry[1].classes,
{
- disabled: 'MuiButtonBase-disabled-26',
- focusVisible: 'MuiButtonBase-focusVisible-27',
- root: 'MuiButtonBase-root-25',
+ disabled: 'MuiButtonBase-disabled-28',
+ focusVisible: 'MuiButtonBase-focusVisible-29',
+ root: 'MuiButtonBase-root-27',
},
'the class names should be deterministic',
);
diff --git a/pages/api/button.md b/pages/api/button.md
index 76746b89597ed7..93f3015aaa071d 100644
--- a/pages/api/button.md
+++ b/pages/api/button.md
@@ -47,6 +47,8 @@ This property accepts the following keys:
| flatPrimary | Styles applied to the root element for backwards compatibility with legacy variant naming.
| flatSecondary | Styles applied to the root element for backwards compatibility with legacy variant naming.
| outlined | Styles applied to the root element if `variant="outlined"`.
+| outlinedPrimary | Styles applied to the root element if `variant="outlined"` and `color="primary"`.
+| outlinedSecondary | Styles applied to the root element if `variant="outlined"` and `color="secondary"`.
| contained | Styles applied to the root element if `variant="[contained \| fab]"`.
| containedPrimary | Styles applied to the root element if `variant="[contained \| fab]"` and `color="primary"`.
| containedSecondary | Styles applied to the root element if `variant="[contained \| fab]"` and `color="secondary"`.