Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Button] Custom variant #21648

Merged
merged 86 commits into from
Jul 27, 2020
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
97aac4e
wip
mnajdova Jun 29, 2020
dd57f8e
wip
mnajdova Jun 29, 2020
5c3d592
wip
mnajdova Jun 30, 2020
8ba964e
relaxed overrides
mnajdova Jul 1, 2020
6e0ab4d
added additions
mnajdova Jul 2, 2020
5c8364c
cleanup
mnajdova Jul 2, 2020
653c1e7
cleanup
mnajdova Jul 2, 2020
1755be6
prettier
mnajdova Jul 2, 2020
8c0ae69
wip
mnajdova Jul 4, 2020
036a172
another alternative
mnajdova Jul 5, 2020
1b94f50
Update packages/material-ui-styles/src/getStylesCreator/getStylesCrea…
mnajdova Jul 5, 2020
9370c1c
comb of props
mnajdova Jul 5, 2020
df60098
Update packages/material-ui-styles/src/getStylesCreator/getStylesCrea…
mnajdova Jul 5, 2020
f430770
cleanup
mnajdova Jul 6, 2020
2375c98
ts example updated
mnajdova Jul 6, 2020
7db6a98
Merge branch 'next' into feat/custom-variants
mnajdova Jul 6, 2020
c032672
Update packages/material-ui-styles/src/withStyles/withStyles.js
mnajdova Jul 6, 2020
22d5f4a
Update packages/material-ui-styles/src/withStyles/withStyles.js
mnajdova Jul 6, 2020
3fcb966
reverted changes
mnajdova Jul 6, 2020
212db32
Update packages/material-ui/src/styles/createMuiTheme.js
mnajdova Jul 6, 2020
f92dbaa
tests fixes
mnajdova Jul 6, 2020
ce2369f
prettier
mnajdova Jul 6, 2020
0e67339
addressing comments
mnajdova Jul 7, 2020
ccaf13f
prettier
mnajdova Jul 7, 2020
070ffe0
replace relaxed typings with ts declare module
mnajdova Jul 7, 2020
a86137e
improved description
mnajdova Jul 7, 2020
628e8fd
themeMerge
mnajdova Jul 8, 2020
132c930
prettier
mnajdova Jul 8, 2020
5036d2d
extract capitalize in utils
mnajdova Jul 10, 2020
5e79126
removed mergeThemes
mnajdova Jul 10, 2020
fa883ea
fix
mnajdova Jul 10, 2020
0ab15a6
fixes
mnajdova Jul 10, 2020
fed904b
break circular dependency
mnajdova Jul 10, 2020
9fcc431
restricted to variables
mnajdova Jul 10, 2020
313f8bf
reverted some changes
mnajdova Jul 10, 2020
60787ab
docs:api
mnajdova Jul 10, 2020
f04ccb4
removed new capitalize method
mnajdova Jul 10, 2020
1b81481
removed default exprot
mnajdova Jul 11, 2020
7f12e68
revert some changes, improved example
mnajdova Jul 11, 2020
e1c2d6d
prettier
mnajdova Jul 11, 2020
4f34120
example updated
mnajdova Jul 12, 2020
4f0a648
Update packages/material-ui-styles/src/getStylesCreator/getStylesCrea…
mnajdova Jul 18, 2020
beab317
updated demo
mnajdova Jul 18, 2020
0c00ea9
Merge branch 'feat/custom-variants' of https://github.com/mnajdova/ma…
mnajdova Jul 18, 2020
70b713d
Merge branch 'next' into feat/custom-variants
mnajdova Jul 18, 2020
bb687a4
prettier
mnajdova Jul 18, 2020
4efaf62
lint
mnajdova Jul 18, 2020
18de558
Update packages/material-ui-styles/src/getStylesCreator/getStylesCrea…
mnajdova Jul 19, 2020
4cb0b03
Update packages/material-ui-styles/src/getStylesCreator/getStylesCrea…
mnajdova Jul 19, 2020
e780712
Update docs/src/pages/customization/components/components.md
mnajdova Jul 19, 2020
eb02491
added test
mnajdova Jul 19, 2020
bb5baa1
prettier
mnajdova Jul 19, 2020
3e1ea72
Update docs/src/pages/customization/components/components.md
mnajdova Jul 19, 2020
90609ff
Update docs/src/pages/customization/components/components.md
mnajdova Jul 19, 2020
c4df879
added warning, renamed matcher to props
mnajdova Jul 20, 2020
7d4fa1d
tests
mnajdova Jul 21, 2020
7ae76f7
tests fixes
mnajdova Jul 21, 2020
c0a9d55
prettier
mnajdova Jul 21, 2020
f888036
prettier
mnajdova Jul 21, 2020
b26d20d
added logic for dynamic classkeys generation
mnajdova Jul 23, 2020
75cd3b6
Merge branch 'next' into feat/custom-variants
mnajdova Jul 23, 2020
5365b71
merge conflicts
mnajdova Jul 23, 2020
2916cd6
added tests for warnings, refactored tests
mnajdova Jul 23, 2020
e185968
prettier
mnajdova Jul 23, 2020
2b32fe8
improved test
mnajdova Jul 23, 2020
efe2e7d
Update packages/material-ui-styles/src/makeStyles/makeStyles.js
mnajdova Jul 23, 2020
4ce2381
Update packages/material-ui-styles/src/makeStyles/makeStyles.js
mnajdova Jul 23, 2020
048cd39
Update packages/material-ui/src/Button/Button.test.js
mnajdova Jul 23, 2020
57e4700
addressing comments
mnajdova Jul 23, 2020
4196182
added more description to the docs section
mnajdova Jul 23, 2020
515933e
prettier
mnajdova Jul 23, 2020
1d240c0
added test
mnajdova Jul 23, 2020
b9ac3ca
fixed name
mnajdova Jul 23, 2020
af088c9
polish
oliviertassinari Jul 23, 2020
4e8de25
added hook for variants
mnajdova Jul 24, 2020
20477c6
prettier
mnajdova Jul 24, 2020
0aa43ad
added test
mnajdova Jul 24, 2020
c71e4ba
prettier
mnajdova Jul 24, 2020
2bb3a29
Update packages/material-ui-styles/src/useThemeVariants/useThemeVaria…
mnajdova Jul 27, 2020
52d11c8
Update packages/material-ui/src/Button/Button.js
mnajdova Jul 27, 2020
55f0507
Update packages/material-ui-styles/src/useThemeVariants/useThemeVaria…
mnajdova Jul 27, 2020
44e2f1d
Update packages/material-ui/src/styles/createMuiTheme.js
mnajdova Jul 27, 2020
a55dfe4
Update packages/material-ui-styles/src/useThemeVariants/useThemeVaria…
mnajdova Jul 27, 2020
6b1742a
Update packages/material-ui/src/styles/createMuiTheme.js
mnajdova Jul 27, 2020
bcae6ef
fixed props destructuring order
mnajdova Jul 27, 2020
704e2f2
Merge branch 'next' into feat/custom-variants
mnajdova Jul 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions docs/src/pages/components/buttons/CustomizedButtons.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
import {
createMuiTheme,
withStyles,
Expand Down Expand Up @@ -66,6 +67,21 @@ const theme = createMuiTheme({
palette: {
primary: green,
},
additions: {
oliviertassinari marked this conversation as resolved.
Show resolved Hide resolved
MuiButton: {
dashed: {
padding: '5px 15px',
border: "5px dashed red",
'&$disabled': {
border: `5px dashed red`,
},
},
tertiery: {
backgroundColor: 'yellow',
padding: 20,
}
},
}
});

export default function CustomizedButtons() {
Expand All @@ -84,6 +100,9 @@ export default function CustomizedButtons() {
<Button variant="contained" color="primary" className={classes.margin}>
Theme Provider
</Button>
<Button variant="dashed" color="primary" className={classes.margin}>
Dashed Variant
</Button>
</ThemeProvider>
<BootstrapButton
variant="contained"
Expand Down
21 changes: 20 additions & 1 deletion docs/src/pages/components/buttons/CustomizedButtons.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
import {
createMuiTheme,
createStyles,
Expand All @@ -7,7 +8,7 @@ import {
Theme,
ThemeProvider,
} from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import Button, { ButtonProps } from '@material-ui/core/Button';
import { green, purple } from '@material-ui/core/colors';

const BootstrapButton = withStyles({
Expand Down Expand Up @@ -70,6 +71,21 @@ const theme = createMuiTheme({
palette: {
primary: green,
},
additions: {
MuiButton: {
dashed: {
padding: '5px 15px',
border: "5px dashed red",
'&$disabled': {
oliviertassinari marked this conversation as resolved.
Show resolved Hide resolved
border: `5px dashed red`,
},
},
tertiery: {
backgroundColor: 'yellow',
padding: 20,
}
},
},
});

export default function CustomizedButtons() {
Expand All @@ -88,6 +104,9 @@ export default function CustomizedButtons() {
<Button variant="contained" color="primary" className={classes.margin}>
Theme Provider
</Button>
<Button variant="dashed" color="primary" className={classes.margin}>
mnajdova marked this conversation as resolved.
Show resolved Hide resolved
Dashed Variant
</Button>
</ThemeProvider>
<BootstrapButton
variant="contained"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ export default function getStylesCreator(stylesOrCreator) {
throw err;
}

if (!name || !theme.overrides || !theme.overrides[name]) {
if (!name || ((!theme.overrides || !theme.overrides[name]) && (!theme.additions || !theme.additions[name]))) {
mnajdova marked this conversation as resolved.
Show resolved Hide resolved
return styles;
}

const overrides = theme.overrides[name];
const additions = theme.additions[name] || {};
const overrides = theme.overrides[name] || {};
const stylesWithOverrides = { ...styles };

Object.keys(overrides).forEach((key) => {
Expand All @@ -50,12 +51,17 @@ export default function getStylesCreator(stylesOrCreator) {
[
'Material-UI: You are trying to override a style that does not exist.',
`Fix the \`${key}\` key of \`theme.overrides.${name}\`.`,
'If you intentionally wanted to add new key, please use the theme.additions option',
oliviertassinari marked this conversation as resolved.
Show resolved Hide resolved
].join('\n'),
);
}
}

stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]);
stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key] || {}, overrides[key]);
});

Object.keys(additions).forEach((key) => {
stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key] || {}, additions[key]);
});

return stylesWithOverrides;
Expand Down
2 changes: 1 addition & 1 deletion packages/material-ui/src/Button/Button.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export type ButtonTypeMap<
/**
* The variant to use.
*/
variant?: 'text' | 'outlined' | 'contained';
variant?: 'text' | 'outlined' | 'contained' | string;
};
defaultComponent: D;
classKey: ButtonClassKey;
Expand Down
2 changes: 1 addition & 1 deletion packages/material-ui/src/Button/Button.js
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ Button.propTypes = {
/**
* The variant to use.
*/
variant: PropTypes.oneOf(['contained', 'outlined', 'text']),
variant: PropTypes.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string]),
mnajdova marked this conversation as resolved.
Show resolved Hide resolved
};

export default withStyles(styles, { name: 'MuiButton' })(Button);
100 changes: 100 additions & 0 deletions packages/material-ui/src/styles/additions.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import { StyleRules } from './withStyles';

export interface Additions {
MuiAppBar?: StyleRules;
MuiAvatar?: StyleRules;
MuiBackdrop?: StyleRules;
MuiBadge?: StyleRules;
MuiBottomNavigation?: StyleRules;
MuiBottomNavigationAction?: StyleRules;
MuiBreadcrumbs?: StyleRules;
MuiButton?: StyleRules;
MuiButtonBase?: StyleRules;
MuiButtonGroup?: StyleRules;
MuiCard?: StyleRules;
MuiCardActionArea?: StyleRules;
MuiCardActions?: StyleRules;
MuiCardContent?: StyleRules;
MuiCardHeader?: StyleRules;
MuiCardMedia?: StyleRules;
MuiCheckbox?: StyleRules;
MuiChip?: StyleRules;
MuiCircularProgress?: StyleRules;
MuiCollapse?: StyleRules;
MuiContainer?: StyleRules;
MuiDialog?: StyleRules;
MuiDialogActions?: StyleRules;
MuiDialogContent?: StyleRules;
MuiDialogContentText?: StyleRules;
MuiDialogTitle?: StyleRules;
MuiDivider?: StyleRules;
MuiDrawer?: StyleRules;
MuiAccordion?: StyleRules;
MuiAccordionActions?: StyleRules;
MuiAccordionDetails?: StyleRules;
MuiAccordionSummary?: StyleRules;
MuiFab?: StyleRules;
MuiFilledInput?: StyleRules;
MuiFormControl?: StyleRules;
MuiFormControlLabel?: StyleRules;
MuiFormGroup?: StyleRules;
MuiFormHelperText?: StyleRules;
MuiFormLabel?: StyleRules;
MuiGrid?: StyleRules;
MuiGridList?: StyleRules;
MuiGridListTile?: StyleRules;
MuiGridListTileBar?: StyleRules;
MuiIcon?: StyleRules;
MuiIconButton?: StyleRules;
MuiInput?: StyleRules;
MuiInputAdornment?: StyleRules;
MuiInputBase?: StyleRules;
MuiInputLabel?: StyleRules;
MuiLinearProgress?: StyleRules;
MuiLink?: StyleRules;
MuiList?: StyleRules;
MuiListItem?: StyleRules;
MuiListItemAvatar?: StyleRules;
MuiListItemIcon?: StyleRules;
MuiListItemSecondaryAction?: StyleRules;
MuiListItemText?: StyleRules;
MuiListSubheader?: StyleRules;
MuiMenu?: StyleRules;
MuiMenuItem?: StyleRules;
MuiMobileStepper?: StyleRules;
MuiNativeSelect?: StyleRules;
MuiOutlinedInput?: StyleRules;
MuiPaper?: StyleRules;
MuiPopover?: StyleRules;
MuiRadio?: StyleRules;
MuiScopedCssBaseline?: StyleRules;
MuiSelect?: StyleRules;
MuiSlider?: StyleRules;
MuiSnackbar?: StyleRules;
MuiSnackbarContent?: StyleRules;
MuiStep?: StyleRules;
MuiStepButton?: StyleRules;
MuiStepConnector?: StyleRules;
MuiStepContent?: StyleRules;
MuiStepIcon?: StyleRules;
MuiStepLabel?: StyleRules;
MuiStepper?: StyleRules;
MuiSvgIcon?: StyleRules;
MuiSwitch?: StyleRules;
MuiTab?: StyleRules;
MuiTable?: StyleRules;
MuiTableBody?: StyleRules;
MuiTableCell?: StyleRules;
MuiTableContainer?: StyleRules;
MuiTableFooter?: StyleRules;
MuiTableHead?: StyleRules;
MuiTablePagination?: StyleRules;
MuiTableRow?: StyleRules;
MuiTableSortLabel?: StyleRules;
MuiTabs?: StyleRules;
MuiTextField?: StyleRules;
MuiToolbar?: StyleRules;
MuiTooltip?: StyleRules;
MuiTouchRipple?: StyleRules;
MuiTypography?: StyleRules;
}
3 changes: 3 additions & 0 deletions packages/material-ui/src/styles/createMuiTheme.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ import { Spacing, SpacingOptions } from './createSpacing';
import { Transitions, TransitionsOptions } from './transitions';
import { ZIndex, ZIndexOptions } from './zIndex';
import { Overrides } from './overrides';
import { Additions } from './additions';
import { ComponentsProps } from './props';

export type Direction = 'ltr' | 'rtl';

export interface ThemeOptions {
shape?: ShapeOptions;
additions?: Additions;
breakpoints?: BreakpointsOptions;
direction?: Direction;
mixins?: MixinsOptions;
Expand All @@ -30,6 +32,7 @@ export interface ThemeOptions {

export interface Theme {
shape: Shape;
additions?: Additions;
breakpoints: Breakpoints;
direction: Direction;
mixins: Mixins;
Expand Down
2 changes: 2 additions & 0 deletions packages/material-ui/src/styles/createMuiTheme.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ function createMuiTheme(options = {}, ...args) {

let muiTheme = deepmerge(
{
additions: {},
breakpoints,
direction: 'ltr',
mixins: createMixins(breakpoints, spacing, mixinsInput),
Expand Down Expand Up @@ -95,6 +96,7 @@ function createMuiTheme(options = {}, ...args) {
};

traverse(muiTheme.overrides);
traverse(muiTheme.additions);
mnajdova marked this conversation as resolved.
Show resolved Hide resolved
}

return muiTheme;
Expand Down