diff --git a/docs/pages/experiments/docs/codeblock.md b/docs/pages/experiments/docs/codeblock.md
index 4ee6cefb023b9b..00c353d3de3a88 100644
--- a/docs/pages/experiments/docs/codeblock.md
+++ b/docs/pages/experiments/docs/codeblock.md
@@ -4,6 +4,8 @@
## Tabs
+### Codeblock version
+
```bash npm
@@ -23,22 +25,23 @@ pnpm add @mui/material @emotion/react @emotion/styled
-
-
-```bash MIT
-npm install @mui/data-grid
-```
+### Component version
-```bash Pro
-npm install @mui/data-grid-pro
-```
+{{"component": "modules/components/HighlightedCodeWithTabs", "tabs": [{"tab":"JS", "code":"Hello
", "language": "jsx"}, {"tab": "TS", "code": "type A = {}"}]}}
-```bash Premium
-npm install @mui/data-grid-premium
+## With header path
+
+```jsx title="PlainCssSliderDeep1.js"
+import * as React from 'react';
+import Slider from '@mui/material/Slider';
+import './PlainCssSliderDeep1.css';
+
+export default function PlainCssSliderDeep1() {
+ return (
+
+
+
+
+ );
+}
```
-
-
-
-## Component
-
-{{"component": "modules/components/HighlightedCodeWithTabs", "tabs": [{"tab":"JS", "code":"
Hello
", "language": "jsx"}, {"tab": "TS", "code": "type A = {}"}]}}
diff --git a/docs/src/modules/components/MarkdownElement.js b/docs/src/modules/components/MarkdownElement.js
index 24f18dd51a749b..5f6b77ba819c19 100644
--- a/docs/src/modules/components/MarkdownElement.js
+++ b/docs/src/modules/components/MarkdownElement.js
@@ -509,6 +509,14 @@ const Root = styled('div')(
position: 'relative',
// Font size reset to fix a bug with Safari 16.0 when letterSpacing is set
fontSize: 10,
+ '&:has(.MuiCode-title)': {
+ border: `1px solid var(--muidocs-palette-primaryDark-700, ${lightTheme.palette.primaryDark[700]})`,
+ borderRadius: theme.shape.borderRadius,
+ overflow: 'clip',
+ '& .MuiCode-copy': {
+ top: '56px',
+ },
+ },
},
'& .MuiCode-copy-container': {
// This container is only used in demo and highlight code
@@ -601,6 +609,28 @@ const Root = styled('div')(
marginBottom: theme.spacing(1),
},
},
+ '& .MuiCode-title': {
+ padding: theme.spacing(1.5),
+ display: 'flex',
+ alignItems: 'center',
+ gap: theme.spacing(1.5),
+ borderBottom: `1px solid var(--muidocs-palette-primaryDark-700, ${lightTheme.palette.primaryDark[700]})`,
+ backgroundColor: `var(--muidocs-palette-primaryDark-900, ${lightTheme.palette.primaryDark[900]})`,
+ fontFamily: theme.typography.fontFamilyCode,
+ fontSize: theme.typography.pxToRem(12),
+ fontWeight: theme.typography.fontWeightBold,
+ color: `var(--muidocs-palette-grey-200, ${lightTheme.palette.grey[200]})`,
+ '::before': {
+ content: `url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.3333 3.99996H8L7.06 3.05996C6.80667 2.80663 6.46667 2.66663 6.11334 2.66663H2.66667C1.93334 2.66663 1.34 3.26663 1.34 3.99996L1.33334 12C1.33334 12.7333 1.93334 13.3333 2.66667 13.3333H13.3333C14.0667 13.3333 14.6667 12.7333 14.6667 12V5.33329C14.6667 4.59996 14.0667 3.99996 13.3333 3.99996ZM12.6667 12H3.33334C2.96667 12 2.66667 11.7 2.66667 11.3333V5.99996C2.66667 5.63329 2.96667 5.33329 3.33334 5.33329H12.6667C13.0333 5.33329 13.3333 5.63329 13.3333 5.99996V11.3333C13.3333 11.7 13.0333 12 12.6667 12Z' fill='%2399CCF3'/%3E%3C/svg%3E%0A");`,
+ width: '16px',
+ height: '16px',
+ },
+ '& + pre': {
+ margin: 0,
+ border: 'none',
+ borderRadius: 0,
+ },
+ },
}),
({ theme }) => ({
[`:where(${theme.vars ? '[data-mui-color-scheme="dark"]' : '.mode-dark'}) &`]: {
diff --git a/packages/markdown/parseMarkdown.js b/packages/markdown/parseMarkdown.js
index 15feaa6c6372bc..87a2d78deff74e 100644
--- a/packages/markdown/parseMarkdown.js
+++ b/packages/markdown/parseMarkdown.js
@@ -395,6 +395,7 @@ function createRender(context) {
renderer.code = (code, infostring, escaped) => {
// /~https://github.com/markedjs/marked/blob/30e90e5175700890e6feb1836c57b9404c854466/src/Renderer.js#L15
const lang = (infostring || '').match(/\S*/)[0];
+ const title = (infostring || '').match(/title="([^"]*)"/)?.[1];
const out = prism(code, lang);
if (out != null && out !== code) {
escaped = true;
@@ -407,7 +408,7 @@ function createRender(context) {
return `${escaped ? code : escape(code, true)}
\n`;
}
- return `${
+ return `${title ? `
${title}
` : ''}
${
escaped ? code : escape(code, true)
}
${[
'