Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
567f70a
Add docs, copied from davis/add-code-highlighter-loader
dav-is Aug 1, 2025
12d332f
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 1, 2025
781c7e3
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 1, 2025
6c573db
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 1, 2025
5a04b10
Add pipeline/ subdir
dav-is Aug 1, 2025
eb940a9
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 1, 2025
f87cd0e
pnpm dedupe
dav-is Aug 1, 2025
10d9f44
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 8, 2025
a9bcddd
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 11, 2025
685b394
Add type descriptions
dav-is Aug 11, 2025
6535b47
Select initial variant properly
dav-is Aug 12, 2025
ed5da8b
Debug build caching issue fixed in Next.js 15.4.7 or 15.5
dav-is Aug 12, 2025
b071ef6
Fix hot-reload state for precomputed code blocks
dav-is Aug 12, 2025
a9af1d2
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 12, 2025
f97dd93
Fix TS Types
dav-is Aug 12, 2025
3c90af5
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 13, 2025
8750123
dpnpm dedupe
dav-is Aug 13, 2025
8e48d1c
pnpm dedupe
dav-is Aug 13, 2025
a30c468
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 25, 2025
888deb3
pnpm dedupe
dav-is Aug 25, 2025
9ff6033
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 25, 2025
8a84205
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 27, 2025
f53bb1f
Move Externals Provider to a 'use client' based loader
dav-is Aug 28, 2025
208acde
Fix build
dav-is Aug 28, 2025
1519881
Remove outdated tests
dav-is Aug 28, 2025
57ecddc
Fix webpack build
dav-is Aug 28, 2025
b511e43
Fix docs build
dav-is Aug 28, 2025
0957795
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 28, 2025
32b34dd
pnpm dedupe
dav-is Aug 28, 2025
6a24e24
prettier
dav-is Aug 28, 2025
16609c7
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 28, 2025
540463f
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 29, 2025
776e015
Fix lint
dav-is Aug 29, 2025
3b9df66
Add turbopack build-exp command
dav-is Aug 29, 2025
a4ad21c
Add Next.js Plugin
dav-is Aug 29, 2025
903b04b
Use next.js plugin
dav-is Aug 29, 2025
0302494
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Aug 29, 2025
0a95ce7
Document transformMarkdownRelativePaths
dav-is Aug 29, 2025
3e3999f
Improve CodeControllerContext docs
dav-is Aug 29, 2025
bcac2a7
Add documentation for abstractCreateDemoClient and transformMarkdownB…
dav-is Aug 29, 2025
100a2d7
Add more docs
dav-is Aug 30, 2025
4b2fa08
Add patterns section
dav-is Aug 30, 2025
b51a4e5
Add links to demos
dav-is Aug 30, 2025
09b0c75
Improve useErrors
dav-is Aug 30, 2025
f0d606f
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 2, 2025
f07517a
Prettier
dav-is Sep 2, 2025
bced5e0
Lint
dav-is Sep 2, 2025
6013b8c
Fix Fallback Bugs
dav-is Sep 3, 2025
f7735cc
Add transform-markdown-demo-links
dav-is Sep 3, 2025
8e60f39
Improve Code Highlighter Demos
dav-is Sep 3, 2025
fdd298b
Prettier
dav-is Sep 3, 2025
7dd46d0
Fix unit tests
dav-is Sep 3, 2025
4c17fab
Improve CodeProvider docs
dav-is Sep 3, 2025
7e97fbb
Add Bundle Analyzer
dav-is Sep 3, 2025
3d01bc5
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 3, 2025
956e5b8
Move docs to top-level docs/
dav-is Sep 3, 2025
db6dcd2
Update tsconfig
dav-is Sep 3, 2025
6941b05
Lint fix
dav-is Sep 3, 2025
f88f2a1
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 3, 2025
eba6a1b
Improve built factories pattern docs
dav-is Sep 3, 2025
ba867d8
Improve Props Context Layering Pattern Docs
dav-is Sep 3, 2025
11282e2
Remove emojis
dav-is Sep 3, 2025
d51e7fd
Improve Shared Docs Layout
dav-is Sep 3, 2025
0d46866
Improve readme linking
dav-is Sep 3, 2025
ceab91b
Fix ```mdx
dav-is Sep 3, 2025
1d568f8
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
f444119
Add server-only to docs
dav-is Sep 4, 2025
6364372
Fix lint config
dav-is Sep 4, 2025
c91bcbb
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
66a8460
pnpm dedupe
dav-is Sep 4, 2025
29313a7
prettier
dav-is Sep 4, 2025
d7c1486
Update Props Context Layering Pattern Doc
dav-is Sep 4, 2025
0208cc4
Some code review changes
dav-is Sep 4, 2025
0f6a4a0
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
49a05a0
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
8bfd217
prettier
dav-is Sep 4, 2025
f6cb9b8
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
b689aba
Add more 'server-only'
dav-is Sep 4, 2025
e865d14
Add new exports
dav-is Sep 4, 2025
1471171
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
e836e2d
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 4, 2025
c252e5d
pnpm dedupe
dav-is Sep 4, 2025
0e7d538
Add fragment delimiters convention
dav-is Sep 4, 2025
5e0ee3b
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 5, 2025
82d6fdb
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 5, 2025
a0b9d8c
add peer dep
dav-is Sep 5, 2025
003de61
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 5, 2025
e5fcf06
prettier
dav-is Sep 5, 2025
c7700f8
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 5, 2025
5e426b2
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 8, 2025
dd5058d
Update useUrlHashState docs
dav-is Sep 8, 2025
2b3450d
Add withDocsInfra links
dav-is Sep 8, 2025
d273158
Remove legacy .gitignore entry
dav-is Sep 8, 2025
0176666
Run docs-infra build before eslint
dav-is Sep 8, 2025
5fdd012
Add back missing plugins
dav-is Sep 8, 2025
0655dd1
fix tests
dav-is Sep 8, 2025
4036245
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 8, 2025
32fc831
Update note on globals
dav-is Sep 10, 2025
66017c4
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 10, 2025
9742e96
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
4c790f5
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
9f929fd
Fix turbopack serialization issue
dav-is Sep 10, 2025
9dc605f
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
f8e41c1
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
8b1a74a
Add .next to .lintignore
dav-is Sep 10, 2025
aef8eb9
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
bf42cfe
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 10, 2025
87d9c9d
Use /types
dav-is Sep 10, 2025
22e2e2c
Update examples to use useCode's <pre>
dav-is Sep 15, 2025
ed2f936
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 16, 2025
81743c9
prettier
dav-is Sep 16, 2025
31003d0
Merge branch 'davis/add-code-highlighter-loader' into davis/add-docs-…
dav-is Sep 16, 2025
2fe345d
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 18, 2025
ed2be3a
Fix plain text code output
dav-is Sep 25, 2025
511d599
Fix double pre
dav-is Sep 25, 2025
8456070
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 26, 2025
4e94024
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 26, 2025
b12ab2f
Fix lint
dav-is Sep 26, 2025
c5b8565
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 26, 2025
f46700f
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 29, 2025
84f5136
Update start command
dav-is Sep 29, 2025
c399633
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 29, 2025
59262b9
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 29, 2025
e1fcab1
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 29, 2025
107453b
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 30, 2025
509b657
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Sep 30, 2025
795bdd5
Merge branch 'davis/add-docs-infra-performance-logging' into davis/ad…
dav-is Oct 1, 2025
63a070e
Use allFilesSlugs to add `id` elements to the page
dav-is Oct 1, 2025
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
6 changes: 6 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ jobs:
steps:
- checkout
- install_js
- run:
name: Docs Infra Build
command: pnpm -F './packages/docs-infra' run build
- run:
name: ESLint
command: pnpm eslint:ci
- run:
name: ESLint
command: pnpm eslint:ci
Expand Down
2 changes: 2 additions & 0 deletions .lintignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ apps/tools-public/toolpad/**/*.yml
build
node_modules
pnpm-lock.yaml
.next
docs/out

__fixtures__
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
Mono-repository for the MUI organization with code that can be public.
See https://github.com/mui/mui-private for code that needs to be private.

## Documentation

You can [read the Infra documentation here](./docs/README.md).

## Applications

### [tools-public.mui.com](https://tools-public.mui.com/)
Expand All @@ -27,6 +31,11 @@ Internal public Toolpad apps that run the operations of MUI, built using https:/
- Folder: `/packages/docs-infra/`
- [Docs](./packages/docs-infra/README.md)

### [code-infra](./packages/code-infra/)

- Folder: `/packages/code-infra/`
- [Docs](./packages/code-infra/README.md)

## Versioning

Steps:
Expand Down
41 changes: 41 additions & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
10 changes: 10 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# MUI Infra Docs

This package contains the documentation for the MUI Infra project, which is responsible for the infrastructure and tooling used in the various MUI documentation sites and libraries.

[Read in Markdown](<./app/(shared)/page.mdx>)
[Read in Browser](https://infra.mui.com)

For the most immersive experience, we recommend opening this documentation in VSCode, starting with this README and working deeper into the documentation by navigating through the links provided (ctrl + click). You should have [the MDX extension](https://marketplace.visualstudio.com/items?itemName=unifiedjs.vscode-mdx) installed to view the documentation properly.

To see demos live, run `pnpm run dev` and open <http://localhost:3000/>
20 changes: 20 additions & 0 deletions docs/app/(shared)/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import * as React from 'react';
import type { Metadata } from 'next';
import styles from '../layout.module.css';

export const metadata: Metadata = {
title: 'MUI Infra Documentation',
description: 'How to use the MUI Infra packages',
};

export default function Layout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<div className={styles.root}>
<div className={styles.container}>{children}</div>
</div>
);
}
9 changes: 9 additions & 0 deletions docs/app/(shared)/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# MUI Infra

## Docs Infra

Read more about `docs-infra` [here](../docs-infra/page.mdx).

## Code Infra

Read more about `code-infra` [here](../code-infra/page.mdx).
24 changes: 24 additions & 0 deletions docs/app/code-infra/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import * as React from 'react';
import type { Metadata } from 'next';
import Link from 'next/link';
import styles from '../layout.module.css';

export const metadata: Metadata = {
title: 'MUI Code Infra Documentation',
description: 'How to use the MUI Code-Infra package',
};

export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<div className={styles.root}>
<div className={styles.header}>
<Link href="/code-infra">MUI Code Infra</Link>
</div>
<div className={styles.container}>{children}</div>
</div>
);
}
21 changes: 21 additions & 0 deletions docs/app/code-infra/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Code Infra

This is the documentation for the MUI Internal Code Infra package.

You can install this package using:

```bash variant=pnpm
pnpm install @mui/internal-code-infra
```

```bash variant=yarn
yarn add @mui/internal-code-infra
```

```bash variant=npm
npm install @mui/internal-code-infra
```

## Usage

TODO
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'use client';

import * as React from 'react';
import { CodeControllerContext } from '@mui/internal-docs-infra/CodeControllerContext';
import type { ControlledCode } from '@mui/internal-docs-infra/CodeHighlighter/types';

export function CodeController({ children }: { children: React.ReactNode }) {
const [code, setCode] = React.useState<ControlledCode | undefined>(undefined);

const contextValue = React.useMemo(() => ({ code, setCode }), [code, setCode]);

return (
<CodeControllerContext.Provider value={contextValue}>{children}</CodeControllerContext.Provider>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import * as React from 'react';
import { CodeHighlighter } from '@mui/internal-docs-infra/CodeHighlighter';
import { createParseSource } from '@mui/internal-docs-infra/pipeline/parseSource';

import { CodeProvider } from '@mui/internal-docs-infra/CodeProvider';
import { CodeController } from './CodeController';
import { CodeEditorContent } from './CodeEditorContent';

const initialCode = {
Default: {
url: 'file://live-example.js',
fileName: 'live-example.js',
source: `// Welcome to the live code editor!
function greet(name) {
return \`Hello, \${name}!\`;
}
`,
},
};

export function CodeEditor() {
return (
<CodeProvider>
<CodeController>
<CodeHighlighter
url={initialCode.Default.url}
Content={CodeEditorContent}
code={initialCode}
controlled
sourceParser={createParseSource()}
/>
</CodeController>
</CodeProvider>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
.container {
border: 1px solid #d0cdd7;
border-radius: 8px;
}

.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 12px;
border-bottom: 1px solid #d0cdd7;
}

.name {
color: #65636d;
font-size: 13px;
font-family: var(--font-geist-mono);
}

.headerActions {
display: flex;
align-items: center;
gap: 8px;
}

.switchContainer {
display: flex;
}
.code {
padding: 6px;
}

.codeBlock {
margin: 0;
padding: 6px;
overflow-x: auto;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
'use client';

import * as React from 'react';
import { useEditable } from 'use-editable';
import type { ContentProps } from '@mui/internal-docs-infra/CodeHighlighter/types';
import { useCode } from '@mui/internal-docs-infra/useCode';
import { LabeledSwitch } from '@/components/LabeledSwitch';
import styles from './CodeEditorContent.module.css';

import '@wooorm/starry-night/style/light'; // load the light theme for syntax highlighting

export function CodeEditorContent(props: ContentProps<object>) {
const preRef = React.useRef<HTMLPreElement | null>(null);
const code = useCode(props, { preClassName: styles.codeBlock, preRef });

const hasJsTransform = code.availableTransforms.includes('js');
const isJsSelected = code.selectedTransform === 'js';
const labels = { false: 'TS', true: 'JS' };
const toggleJs = React.useCallback(
(checked: boolean) => {
code.selectTransform(checked ? 'js' : null);
},
[code],
);

const onInput = React.useCallback(
(text: string) => {
code.setSource?.(text);
},
[code],
);

useEditable(preRef, onInput, { indentation: 2 });

return (
<div className={styles.container}>
<div className={styles.header}>
<span className={styles.name}>{code.selectedFileName}</span>
<div className={styles.headerActions}>
{hasJsTransform && (
<div className={styles.switchContainer}>
<LabeledSwitch checked={isJsSelected} onCheckedChange={toggleJs} labels={labels} />
</div>
)}
</div>
</div>
<div className={styles.code}>{code.selectedFile}</div>
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { createDemo } from '@/functions/createDemo';
import { CodeEditor } from './CodeEditor';

export const DemoCodeControllerCodeEditor = createDemo(import.meta.url, CodeEditor, {
name: 'Live Code Editor',
slug: 'live-code-editor',
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
'use client';

import * as React from 'react';
import { useRunner } from 'react-runner';
import { CodeControllerContext } from '@mui/internal-docs-infra/CodeControllerContext';
import type { ControlledCode } from '@mui/internal-docs-infra/CodeHighlighter/types';
import { useCodeExternals } from '@mui/internal-docs-infra/CodeExternalsContext';

function Runner({ code }: { code: string }) {
const externalsContext = useCodeExternals();
const scope = React.useMemo(() => {
let externals = externalsContext?.externals;
if (!externals) {
externals = { imports: { react: React } };
}

return { import: { ...externals } };
}, [externalsContext]);

const { element, error } = useRunner({ code, scope });

if (error) {
return <div>{error}</div>;
}

return element;
}

export function DemoController({ children }: { children: React.ReactNode }) {
const [code, setCode] = React.useState<ControlledCode | undefined>(undefined);

const components = React.useMemo(
() =>
code
? Object.keys(code).reduce(
(acc, cur) => {
const source = code[cur]?.source;
if (!source) {
return acc;
}

acc[cur] = <Runner code={source} />;
return acc;
},
{} as Record<string, React.ReactNode>,
)
: undefined,
[code],
);

const contextValue = React.useMemo(
() => ({ code, setCode, components }),
[code, setCode, components],
);

return (
<CodeControllerContext.Provider value={contextValue}>{children}</CodeControllerContext.Provider>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import * as React from 'react';
import { CodeProvider } from '@mui/internal-docs-infra/CodeProvider';
import { DemoController } from './DemoController';
import { DemoCheckboxBasic } from './demo-basic';

export function DemoLive() {
return (
<CodeProvider>
<DemoController>
<DemoCheckboxBasic />
</DemoController>
</CodeProvider>
);
}
Loading
Loading