diff --git a/docs/data/about/teamMembers.json b/docs/data/about/teamMembers.json
index 607ed9b30eb68c..3adae23e7482f4 100644
--- a/docs/data/about/teamMembers.json
+++ b/docs/data/about/teamMembers.json
@@ -80,15 +80,6 @@
"github": "Janpot",
"twitter": null
},
- {
- "name": "José Freitas",
- "title": "Technical Product Manager",
- "about": "Art, fiction, and bar philosophy.",
- "location": "Augsburg, Germany",
- "locationCountry": "de",
- "github": "joserodolfofreitas",
- "twitter": "zehdefreitas"
- },
{
"name": "Andrew Cherniavskyi",
"title": "Tech Lead — xGrid",
@@ -125,15 +116,6 @@
"github": "MBilalShafi",
"twitter": "MBilalShafi"
},
- {
- "name": "Albert Yu",
- "title": "Software Engineer — Core",
- "about": "Minimalist, dog lover 🏔🐕.",
- "location": "Hong Kong",
- "locationCountry": "hk",
- "github": "mj12albert",
- "twitter": "mj12albert"
- },
{
"name": "Romain Grégoire",
"title": "Software Engineer — xGrid",
@@ -296,15 +278,6 @@
"github": "rita-codes",
"twitter": "rita_codes"
},
- {
- "name": "Connor Davis",
- "title": "Software Engineer — Core",
- "about": "Community gardener, non-profit organizer, and nature enthusiast.",
- "location": "New York City, US",
- "locationCountry": "us",
- "github": "dav-is",
- "twitter": "connordav_is"
- },
{
"name": "Luis Vasallo",
"title": "Account Executive — Sales",
diff --git a/docs/public/static/branding/about/albert-yu.png b/docs/public/static/branding/about/albert-yu.png
deleted file mode 100644
index 6f016dd96dcfc6..00000000000000
Binary files a/docs/public/static/branding/about/albert-yu.png and /dev/null differ
diff --git a/docs/public/static/branding/about/connor-davis.png b/docs/public/static/branding/about/connor-davis.png
deleted file mode 100644
index 600681cb4fbd27..00000000000000
Binary files a/docs/public/static/branding/about/connor-davis.png and /dev/null differ
diff --git "a/docs/public/static/branding/about/jos\303\251-freitas.png" "b/docs/public/static/branding/about/jos\303\251-freitas.png"
deleted file mode 100644
index 566bf84291d796..00000000000000
Binary files "a/docs/public/static/branding/about/jos\303\251-freitas.png" and /dev/null differ
diff --git a/packages/mui-material/src/ButtonGroup/ButtonGroup.js b/packages/mui-material/src/ButtonGroup/ButtonGroup.js
index 8a4d9cb753be97..d10893c9b8b3c5 100644
--- a/packages/mui-material/src/ButtonGroup/ButtonGroup.js
+++ b/packages/mui-material/src/ButtonGroup/ButtonGroup.js
@@ -270,8 +270,8 @@ const ButtonGroup = React.forwardRef(function ButtonGroup(inProps, ref) {
color,
disabled,
disableElevation,
- disableFocusRipple,
- disableRipple,
+ disableFocusRipple: props.disableFocusRipple,
+ disableRipple: props.disableRipple,
fullWidth,
size,
variant,
@@ -280,8 +280,8 @@ const ButtonGroup = React.forwardRef(function ButtonGroup(inProps, ref) {
color,
disabled,
disableElevation,
- disableFocusRipple,
- disableRipple,
+ props.disableFocusRipple,
+ props.disableRipple,
fullWidth,
size,
variant,
diff --git a/packages/mui-material/src/ButtonGroup/ButtonGroup.test.js b/packages/mui-material/src/ButtonGroup/ButtonGroup.test.js
index c7865974a097c2..f25d73d32acaa6 100644
--- a/packages/mui-material/src/ButtonGroup/ButtonGroup.test.js
+++ b/packages/mui-material/src/ButtonGroup/ButtonGroup.test.js
@@ -1,5 +1,5 @@
import { expect } from 'chai';
-import { createRenderer, screen } from '@mui/internal-test-utils';
+import { createRenderer, screen, simulateKeyboardDevice, isJsdom } from '@mui/internal-test-utils';
import ButtonGroup, { buttonGroupClasses as classes } from '@mui/material/ButtonGroup';
import { ThemeProvider, createTheme } from '@mui/material/styles';
import Button, { buttonClasses } from '@mui/material/Button';
@@ -156,6 +156,90 @@ describe('', () => {
expect(container.querySelector('.touchRipple')).to.equal(null);
});
+ it('applies a global disableRipple (MuiButtonBase.defaultProps) to grouped buttons', async () => {
+ const { container } = render(
+
+
+
+
+ ,
+ );
+ await ripple.startTouch(screen.getByRole('button'));
+ expect(container.querySelector('.touchRipple')).to.equal(null);
+ });
+
+ it('explicit disableRipple on ButtonGroup overrides the global default', async () => {
+ const { container } = render(
+
+
+
+
+ ,
+ );
+ await ripple.startTouch(screen.getByRole('button'));
+ expect(container.querySelector('.touchRipple')).not.to.equal(null);
+ });
+
+ // JSDOM doesn't support :focus-visible
+ it.skipIf(isJsdom())(
+ 'applies a global disableFocusRipple (MuiButton.defaultProps) to grouped buttons',
+ async function test() {
+ const { container } = render(
+
+
+
+
+ ,
+ );
+ const button = screen.getByRole('button');
+
+ simulateKeyboardDevice();
+ await ripple.startFocus(button);
+
+ expect(container.querySelector('.pulsate-focus-visible')).to.equal(null);
+ },
+ );
+
+ // JSDOM doesn't support :focus-visible
+ it.skipIf(isJsdom())(
+ 'explicit disableFocusRipple on ButtonGroup overrides the global default',
+ async function test() {
+ const { container } = render(
+
+
+
+
+ ,
+ );
+ const button = screen.getByRole('button');
+
+ simulateKeyboardDevice();
+ await ripple.startFocus(button);
+
+ expect(container.querySelector('.pulsate-focus-visible')).not.to.equal(null);
+ },
+ );
+
it('should not be fullWidth by default', () => {
const { container } = render(
@@ -204,8 +288,9 @@ describe('', () => {
expect(context.variant).to.equal('contained');
expect(context.size).to.equal('large');
expect(context.fullWidth).to.equal(false);
- expect(context.disableRipple).to.equal(false);
- expect(context.disableFocusRipple).to.equal(false);
+ // Unset ripple flags are not forwarded, so each child resolves its own default (#32970).
+ expect(context.disableRipple).to.equal(undefined);
+ expect(context.disableFocusRipple).to.equal(undefined);
expect(context.disableElevation).to.equal(false);
expect(context.disabled).to.equal(false);
expect(context.color).to.equal('primary');