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

[Joy][button] Replace start/endIcon prop with start/endDecorator #34288

Merged
merged 9 commits into from Sep 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/ButtonIcons.js
Expand Up @@ -8,11 +8,11 @@ import ThumbUp from '@mui/icons-material/ThumbUp';
export default function ButtonIcons() {
return (
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
<Button startIcon={<Add />}>Add to cart</Button>
<Button startDecorator={<Add />}>Add to cart</Button>
<Button aria-label="Like" variant="outlined" color="neutral">
<ThumbUp />
</Button>
<Button variant="soft" endIcon={<KeyboardArrowRight />} color="success">
<Button variant="soft" endDecorator={<KeyboardArrowRight />} color="success">
Checkout
</Button>
</Box>
Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/ButtonIcons.tsx
Expand Up @@ -8,11 +8,11 @@ import ThumbUp from '@mui/icons-material/ThumbUp';
export default function ButtonIcons() {
return (
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
<Button startIcon={<Add />}>Add to cart</Button>
<Button startDecorator={<Add />}>Add to cart</Button>
<Button aria-label="Like" variant="outlined" color="neutral">
<ThumbUp />
</Button>
<Button variant="soft" endIcon={<KeyboardArrowRight />} color="success">
<Button variant="soft" endDecorator={<KeyboardArrowRight />} color="success">
Checkout
</Button>
</Box>
Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/ButtonIcons.tsx.preview
@@ -1,7 +1,7 @@
<Button startIcon={<Add />}>Add to cart</Button>
<Button startDecorator={<Add />}>Add to cart</Button>
<Button aria-label="Like" variant="outlined" color="neutral">
<ThumbUp />
</Button>
<Button variant="soft" endIcon={<KeyboardArrowRight />} color="success">
<Button variant="soft" endDecorator={<KeyboardArrowRight />} color="success">
Checkout
</Button>
2 changes: 1 addition & 1 deletion docs/data/joy/components/button/ButtonLink.js
Expand Up @@ -7,7 +7,7 @@ import OpenInNew from '@mui/icons-material/OpenInNew';
export default function IconButtons() {
return (
<Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>
<Button component="a" href="#as-link" startIcon={<OpenInNew />}>
<Button component="a" href="#as-link" startDecorator={<OpenInNew />}>
Open in new tab
</Button>
<IconButton aria-label="Open in new tab" component="a" href="#as-link">
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/button/ButtonLink.tsx
Expand Up @@ -7,7 +7,7 @@ import OpenInNew from '@mui/icons-material/OpenInNew';
export default function IconButtons() {
return (
<Box sx={{ display: 'flex', gap: 2, alignItems: 'center' }}>
<Button component="a" href="#as-link" startIcon={<OpenInNew />}>
<Button component="a" href="#as-link" startDecorator={<OpenInNew />}>
Open in new tab
</Button>
<IconButton aria-label="Open in new tab" component="a" href="#as-link">
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/button/ButtonLink.tsx.preview
@@ -1,4 +1,4 @@
<Button component="a" href="#as-link" startIcon={<OpenInNew />}>
<Button component="a" href="#as-link" startDecorator={<OpenInNew />}>
Open in new tab
</Button>
<IconButton aria-label="Open in new tab" component="a" href="#as-link">
Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/ButtonVariables.js
Expand Up @@ -8,15 +8,15 @@ export default function ButtonVariables() {
<JoyVariablesDemo
componentName="Button"
renderCode={(formattedSx) => `<Button
startIcon={<FavoriteBorder />}${formattedSx ? `${formattedSx}>` : '\n>'}`}
startDecorator={<FavoriteBorder />}${formattedSx ? `${formattedSx}>` : '\n>'}`}
data={[
{
var: '--Button-gap',
defaultValue: '8px',
},
]}
renderDemo={(sx) => (
<Button sx={sx} startIcon={<FavoriteBorder />}>
<Button sx={sx} startDecorator={<FavoriteBorder />}>
Favorite
</Button>
)}
Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/button-pt.md
Expand Up @@ -54,9 +54,9 @@ Use the `disabled` prop to disable interaction and focus.

{{"demo": "ButtonDisabled.js"}}

### With icons
### With decorators

Use the `startIcon` and/or `endIcon` props to add supporting icons to the button.
Use the `startDecorator` and/or `endDecorator` props to add supporting decorators to the button.

{{"demo": "ButtonIcons.js"}}

Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/button-zh.md
Expand Up @@ -54,9 +54,9 @@ Use the `disabled` prop to disable interaction and focus.

{{"demo": "ButtonDisabled.js"}}

### With icons
### With decorators

Use the `startIcon` and/or `endIcon` props to add supporting icons to the button.
Use the `startDecorator` and/or `endDecorator` props to add supporting decorators to the button.

{{"demo": "ButtonIcons.js"}}

Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/components/button/button.md
Expand Up @@ -64,9 +64,9 @@ Use the `disabled` prop to disable interaction and focus.

{{"demo": "ButtonDisabled.js"}}

### With icons
### With decorators

Use the `startIcon` and/or `endIcon` props to add supporting icons to the button.
Use the `startDecorator` and/or `endDecorator` props to add supporting decorators to the button.

{{"demo": "ButtonIcons.js"}}

Expand Down
Expand Up @@ -8,7 +8,7 @@ import CircularProgress from '@mui/joy/CircularProgress';
export default function CircularProgressSizes() {
return (
<Box sx={{ display: 'flex', gap: 2, alignItems: 'center', flexWrap: 'wrap' }}>
<Button startIcon={<CircularProgress variant="solid" thickness={2} />}>
<Button startDecorator={<CircularProgress variant="solid" thickness={2} />}>
Loading…
</Button>
<IconButton>
Expand Down
Expand Up @@ -8,7 +8,7 @@ import CircularProgress from '@mui/joy/CircularProgress';
export default function CircularProgressSizes() {
return (
<Box sx={{ display: 'flex', gap: 2, alignItems: 'center', flexWrap: 'wrap' }}>
<Button startIcon={<CircularProgress variant="solid" thickness={2} />}>
<Button startDecorator={<CircularProgress variant="solid" thickness={2} />}>
Loading…
</Button>
<IconButton>
Expand Down
@@ -1,4 +1,4 @@
<Button startIcon={<CircularProgress variant="solid" thickness={2} />}>
<Button startDecorator={<CircularProgress variant="solid" thickness={2} />}>
Loading…
</Button>
<IconButton>
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/menu/GroupMenu.js
Expand Up @@ -31,7 +31,7 @@ export default function BasicMenu() {
variant="outlined"
color="neutral"
onClick={handleClick}
endIcon={<ArrowDropDown />}
endDecorator={<ArrowDropDown />}
>
Size
</Button>
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/menu/SelectedMenu.js
Expand Up @@ -28,7 +28,7 @@ export default function SelectedMenu() {
variant="outlined"
color="neutral"
onClick={handleClick}
startIcon={<Apps />}
startDecorator={<Apps />}
>
Apps
</Button>
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/modal/AlertDialogModal.js
Expand Up @@ -14,7 +14,7 @@ export default function AlertDialogModal() {
<Button
variant="outlined"
color="danger"
endIcon={<DeleteForever />}
endDecorator={<DeleteForever />}
onClick={() => setOpen(true)}
>
Discard
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/components/modal/BasicModalDialog.js
Expand Up @@ -14,7 +14,7 @@ export default function BasicModalDialog() {
<Button
variant="outlined"
color="neutral"
startIcon={<Add />}
startDecorator={<Add />}
onClick={() => setOpen(true)}
>
New project
Expand Down
4 changes: 2 additions & 2 deletions docs/data/joy/getting-started/templates/TemplateCollection.js
Expand Up @@ -97,7 +97,7 @@ export default function TemplateCollection() {
data-ga-event-category="joy-template"
data-ga-event-label={name}
data-ga-event-action="preview"
startIcon={<Visibility />}
startDecorator={<Visibility />}
sx={{ ml: 'auto' }}
>
Live demo
Expand Down Expand Up @@ -137,7 +137,7 @@ export default function TemplateCollection() {
form.submit();
document.body.removeChild(form);
}}
startIcon={
startDecorator={
<SvgIcon viewBox="0 0 1080 1080">
<path d="M755 140.3l0.5-0.3h0.3L512 0 268.3 140h-0.3l0.8 0.4L68.6 256v512L512 1024l443.4-256V256L755 140.3z m-30 506.4v171.2L548 920.1V534.7L883.4 341v215.7l-158.4 90z m-584.4-90.6V340.8L476 534.4v385.7L300 818.5V646.7l-159.4-90.6zM511.7 280l171.1-98.3 166.3 96-336.9 194.5-337-194.6 165.7-95.7L511.7 280z" />
</SvgIcon>
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/getting-started/templates/files/App.tsx
Expand Up @@ -679,7 +679,7 @@ export default function FilesExample() {
</Box>
<ListDivider component="hr" />
<Box sx={{ py: 2, px: 1 }}>
<Button variant="plain" size="sm" endIcon={<EditOutlinedIcon />}>
<Button variant="plain" size="sm" endDecorator={<EditOutlinedIcon />}>
Add a description
</Button>
</Box>
Expand Down
2 changes: 1 addition & 1 deletion docs/data/joy/getting-started/templates/team/App.tsx
Expand Up @@ -486,7 +486,7 @@ export default function TeamExample() {
<Button
size="sm"
variant="plain"
endIcon={<KeyboardArrowRightRoundedIcon fontSize="small" />}
endDecorator={<KeyboardArrowRightRoundedIcon fontSize="small" />}
sx={{ px: 1, mt: 1 }}
>
Expand
Expand Down
6 changes: 3 additions & 3 deletions packages/mui-joy/src/Button/Button.spec.tsx
Expand Up @@ -73,14 +73,14 @@ function Icon() {
<Button
variant="solid"
color="success"
endIcon={<Icon />}
endDecorator={<Icon />}
sx={{ width: 'var(--Button-minHeight)' }}
>
<Icon />
</Button>;
<Button variant="solid" startIcon={<Icon />} size="sm">
<Button variant="solid" startDecorator={<Icon />} size="sm">
Add to cart
</Button>;
<Button variant="outlined" endIcon={<Icon />} color="success">
<Button variant="outlined" endDecorator={<Icon />} color="success">
Checkout
</Button>;
20 changes: 10 additions & 10 deletions packages/mui-joy/src/Button/Button.test.js
Expand Up @@ -7,13 +7,13 @@ import { ThemeProvider } from '@mui/joy/styles';
describe('Joy <Button />', () => {
const { render } = createRenderer();

describeConformance(<Button startIcon="icon">Conformance?</Button>, () => ({
describeConformance(<Button startDecorator="icon">Conformance?</Button>, () => ({
render,
classes,
ThemeProvider,
refInstanceof: window.HTMLButtonElement,
muiName: 'JoyButton',
testDeepOverrides: { slotName: 'startIcon', slotClassName: classes.startIcon },
testDeepOverrides: { slotName: 'startDecorator', slotClassName: classes.startDecorator },
testVariantProps: { variant: 'solid', fullWidth: true },
testCustomVariant: true,
skip: ['propsSpread', 'componentsProp', 'classesRoot'],
Expand Down Expand Up @@ -76,21 +76,21 @@ describe('Joy <Button />', () => {
expect(button).to.have.class(classes.fullWidth);
});

it('should render a button with startIcon', () => {
const { getByRole } = render(<Button startIcon={<span>icon</span>}>Hello World</Button>);
it('should render a button with startDecorator', () => {
const { getByRole } = render(<Button startDecorator={<span>icon</span>}>Hello World</Button>);
const button = getByRole('button');
const startIcon = button.querySelector(`.${classes.startIcon}`);
const startDecorator = button.querySelector(`.${classes.startDecorator}`);

expect(button).to.have.class(classes.root);
expect(startIcon).not.to.have.class(classes.endIcon);
expect(startDecorator).not.to.have.class(classes.endDecorator);
});

it('should render a button with endIcon', () => {
const { getByRole } = render(<Button endIcon={<span>icon</span>}>Hello World</Button>);
it('should render a button with endDecorator', () => {
const { getByRole } = render(<Button endDecorator={<span>icon</span>}>Hello World</Button>);
const button = getByRole('button');
const endIcon = button.querySelector(`.${classes.endIcon}`);
const endDecorator = button.querySelector(`.${classes.endDecorator}`);

expect(button).to.have.class(classes.root);
expect(endIcon).not.to.have.class(classes.startIcon);
expect(endDecorator).not.to.have.class(classes.startDecorator);
});
});