diff --git a/docs/data/base/pages.ts b/docs/data/base/pages.ts
index 22ee40931f1923..584511c135d432 100644
--- a/docs/data/base/pages.ts
+++ b/docs/data/base/pages.ts
@@ -18,7 +18,7 @@ const pages = [
title: 'Components',
icon: standardNavIcons.ToggleOnIcon,
children: [
- { pathname: '/base-ui/react-components', title: 'All components' },
+ { pathname: '/base-ui/all-components', title: 'All components' },
{
pathname: '/base-ui/components/inputs',
subheader: 'inputs',
diff --git a/docs/pages/base-ui/all-components/index.js b/docs/pages/base-ui/all-components/index.js
new file mode 100644
index 00000000000000..2bb2c253929f6b
--- /dev/null
+++ b/docs/pages/base-ui/all-components/index.js
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import MarkdownDocs from 'docs/src/modules/components/MarkdownDocsV2';
+import AppFrame from 'docs/src/modules/components/AppFrame';
+import * as pageProps from 'docs/data/base/components/all-components/all-components.md?@mui/markdown';
+
+export default function Page(props) {
+ const { userLanguage, ...other } = props;
+ return ;
+}
+
+Page.getLayout = (page) => {
+ return {page};
+};
diff --git a/docs/pages/base-ui/react-components/index.js b/docs/pages/base-ui/react-components/index.js
deleted file mode 100644
index 88f83ec2f48d5e..00000000000000
--- a/docs/pages/base-ui/react-components/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import * as React from 'react';
-import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs';
-import * as pageProps from 'docs/data/base/components/all-components/all-components.md?@mui/markdown';
-
-export default function Page() {
- return ;
-}
diff --git a/docs/public/_redirects b/docs/public/_redirects
index 7086d3bdff3c38..f37becc92dd5b3 100644
--- a/docs/public/_redirects
+++ b/docs/public/_redirects
@@ -484,6 +484,7 @@ https://v4.material-ui.com/* https://v4.mui.com/:splat 301!
/material-ui/getting-started/overview/ /material-ui/getting-started/ 301
/joy-ui/getting-started/overview/ /joy-ui/getting-started/ 301
/base-ui/getting-started/overview/ /base-ui/getting-started/ 301
+/base-ui/react-components/ /base-ui/all-components/ 301
/system/getting-started/overview/ /system/getting-started/ 301
# Proxies
diff --git a/docs/translations/translations.json b/docs/translations/translations.json
index 19b4b35db9fd48..7940b5816da2f4 100644
--- a/docs/translations/translations.json
+++ b/docs/translations/translations.json
@@ -228,7 +228,7 @@
"/base-ui/getting-started/usage": "Usage",
"/base-ui/getting-started/customization": "Customization",
"/base-ui/react-": "Components",
- "/base-ui/react-components": "All components",
+ "/base-ui/all-components": "All components",
"inputs": "Inputs",
"/base-ui/react-autocomplete": "Autocomplete",
"/base-ui/react-button": "Button",
diff --git a/packages/api-docs-builder/buildApiUtils.ts b/packages/api-docs-builder/buildApiUtils.ts
index 708aa3b070a63e..0cd9813ed63e7a 100644
--- a/packages/api-docs-builder/buildApiUtils.ts
+++ b/packages/api-docs-builder/buildApiUtils.ts
@@ -689,13 +689,23 @@ export const getStaticPaths = () => {
${staticProps}
`;
- const componentPageDirectory = `docs/pages/${productName}-ui/react-${componentName}/`;
+ const componentPageDirectory = `docs/pages/${productName}-ui/${
+ componentName !== 'all-components' ? 'react-' : ''
+ }${componentName}/`;
if (!fs.existsSync(componentPageDirectory)) {
fs.mkdirSync(componentPageDirectory, { recursive: true });
}
const demosSourcePath = path.join(process.cwd(), `${componentPageDirectory}/index.js`);
writePrettifiedFile(demosSourcePath, demosSource);
+ if (
+ ((components ?? []).length === 0 && (hooks ?? []).length === 0) ||
+ markdown.filename.endsWith('all-components.md')
+ ) {
+ // Early return if it's a markdown file without components/hooks.
+ return;
+ }
+
const docsTabsPagesDirectory = `${componentPageDirectory}/[docsTab]`;
if (!fs.existsSync(docsTabsPagesDirectory)) {
fs.mkdirSync(docsTabsPagesDirectory, { recursive: true });