Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7894e06
WIP
Janpot Oct 22, 2025
d28c145
Update postBuild.mts
Janpot Oct 22, 2025
32483bc
WIP
Janpot Oct 22, 2025
ecfb24e
WIP
Janpot Oct 22, 2025
d3fa364
Update brokenLinksCrawler.mts
Janpot Oct 22, 2025
074e37b
Crawler
Janpot Oct 22, 2025
b3d8797
WIP
Janpot Oct 22, 2025
e91c61d
Update brokenLinksCrawler.mjs
Janpot Oct 22, 2025
e562621
fix crawler
Janpot Oct 23, 2025
1d09a6b
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 23, 2025
cfb4494
Update pnpm-lock.yaml
Janpot Oct 23, 2025
38b4d6d
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 27, 2025
8c941ff
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 27, 2025
b8daf45
Update pnpm-lock.yaml
Janpot Oct 27, 2025
4655981
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 27, 2025
a61a50b
update
Janpot Oct 27, 2025
872ec4e
Update reportBrokenLinks.mts
Janpot Oct 28, 2025
87294d6
fix concurrency
Janpot Oct 28, 2025
cf416bd
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 28, 2025
ddb9ee7
revert link check
Janpot Oct 28, 2025
ce5bb27
Update package.json
Janpot Oct 28, 2025
20b5b5a
Update package.json
Janpot Oct 28, 2025
679fb6c
Update reportBrokenLinks.mts
Janpot Oct 28, 2025
fc7ae7e
fix
Janpot Oct 28, 2025
f67d44f
Update reportBrokenLinks.mts
Janpot Oct 28, 2025
768cafe
Update package.json
Janpot Oct 28, 2025
17d3976
Update reportBrokenLinks.mts
Janpot Oct 28, 2025
7ec610b
build llms
Janpot Oct 28, 2025
f5185cd
Seed blog links
Janpot Oct 28, 2025
b257609
trailing slashes
Janpot Oct 28, 2025
dccad87
Update reportBrokenLinks.mts
Janpot Oct 28, 2025
e4af6cb
remove unused
Janpot Oct 29, 2025
3ba6040
fix version
Janpot Oct 29, 2025
bd18c2e
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 29, 2025
73b07e8
Update
Janpot Oct 29, 2025
c8ddbce
Merge remote-tracking branch 'upstream/master' into crawler
Janpot Oct 29, 2025
685558f
update
Janpot Oct 29, 2025
565841d
Update eslint.config.mjs
Janpot Oct 29, 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
5 changes: 0 additions & 5 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,6 @@ jobs:
command: |
pnpm extract-error-codes
git add -A && git diff --exit-code --staged
- run:
name: '`pnpm docs:link-check` changes committed?'
command: |
pnpm docs:link-check
git add -A && git diff --exit-code --staged
test_types:
<<: *default-job
resource_class: 'medium+'
Expand Down
2 changes: 0 additions & 2 deletions docs/.link-check-errors.txt

This file was deleted.

4 changes: 2 additions & 2 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"private": true,
"license": "MIT",
"scripts": {
"build": "rimraf ./export && cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 next build && pnpm build-sw",
"build": "rimraf ./export && cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 next build && pnpm build-sw && pnpm link-check",
"build:clean": "rimraf .next && pnpm build",
"build-sw": "node ./scripts/buildServiceWorker.js",
"dev": "next dev",
Expand All @@ -14,7 +14,7 @@
"typescript": "tsc -p tsconfig.json && tsc -p scripts/tsconfig.json",
"typescript:transpile": "echo 'Use `pnpm docs:typescript:formatted'` instead && exit 1",
"typescript:transpile:dev": "echo 'Use `pnpm docs:typescript'` instead && exit 1",
"link-check": "tsx ./scripts/reportBrokenLinks.ts"
"link-check": "tsx ./scripts/reportBrokenLinks.mts"
},
"dependencies": {
"@babel/core": "^7.28.4",
Expand Down
6 changes: 3 additions & 3 deletions docs/pages/blog/2020-q3-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@

<img src="/static/blog/2020-q3-update/react-testing-library.png" alt="" style="width: 640px; margin-bottom: 40px; margin-top: 24px;" />

- 💅 We have completed the first iteration of the unstyled components for v5.<br />You can find a [new version](/material-ui/react-slider/#unstyled) of the slider in the lab without any styles.
- 💅 We have completed the first iteration of the unstyled components for v5.<br />You can find a [new version](https://v5.mui.com/material-ui/react-slider/#unstyled) of the slider in the lab without any styles.
The unstyled component weighs in at [5.2 kB gzipped](https://bundlephobia.com/package/@mui/lab@5.0.0-alpha.12), compared with 26 kB for the styled version (when used standalone). The component is best suited for use when you want to fully customize the look, without reimplementing the JavaScript and accessibility logic.<br />
We're also pushing in this direction to address a concern we hear from large enterprises
that want to be able to go one layer down in the abstraction, in order to gain more control.
Expand All @@ -101,10 +101,10 @@
import SliderUnstyled from '@mui/lab/SliderUnstyled';
```

Note that we have experimented with headless components (hooks only) in the past. For instance, you can leverage the [useAutocomplete](/material-ui/react-autocomplete/#useautocomplete), and [usePagination](/material-ui/react-pagination/#usepagination) hooks. However, we are pushing with unstyled first as a required step for the next item: ⬇️.
Note that we have experimented with headless components (hooks only) in the past. For instance, you can leverage the [useAutocomplete](https://v5.mui.com/material-ui/react-autocomplete/#useautocomplete), and [usePagination](https://v5.mui.com/material-ui/react-pagination/#usepagination) hooks. However, we are pushing with unstyled first as a required step for the next item: ⬇️.

Check warning on line 104 in docs/pages/blog/2020-q3-update.md

View workflow job for this annotation

GitHub Actions / runner / vale

[vale] reported by reviewdog 🐶 [Google.We] Try to avoid using first-person plural like 'we'. Raw Output: {"message": "[Google.We] Try to avoid using first-person plural like 'we'.", "location": {"path": "docs/pages/blog/2020-q3-update.md", "range": {"start": {"line": 104, "column": 307}}}, "severity": "WARNING"}

Check warning on line 104 in docs/pages/blog/2020-q3-update.md

View workflow job for this annotation

GitHub Actions / runner / vale

[vale] reported by reviewdog 🐶 [Google.We] Try to avoid using first-person plural like 'we'. Raw Output: {"message": "[Google.We] Try to avoid using first-person plural like 'we'.", "location": {"path": "docs/pages/blog/2020-q3-update.md", "range": {"start": {"line": 104, "column": 13}}}, "severity": "WARNING"}

- 👩‍🎨 We have completed the first iteration of the new styling solution of v5.<br />
You can find a [new version](/material-ui/react-slider/) of the slider in the lab powered by [Emotion](https://emotion.sh/docs/introduction).<br />
You can find a [new version](https://v5.mui.com/material-ui/react-slider/) of the slider in the lab powered by [Emotion](https://emotion.sh/docs/introduction).<br />
If you are already using styled-components in your application, you can swap Emotion for styled-components 💅. Check this [CodeSandbox](https://codesandbox.io/p/sandbox/sliderstyled-with-styled-components-forked-olc27?file=/package.json) or [CRA](https://github.com/mui/material-ui/tree/HEAD/examples/material-ui-cra-styled-components/) for a demo. It relies on aliases to prevent any bundle size overhead.<br />
The new styling solution saves 2kB+ gzipped in the bundle compared to JSS, and about 14 kB gzipped if you were already using styled-components or Emotion.<br />
Last but not least, this change allows us to take advantage of dynamic style props. We will use them for dynamic color props, variant props, and new style props available in the core components.
Expand Down
14 changes: 7 additions & 7 deletions docs/pages/blog/2021-q3-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,43 +44,43 @@

<p class="blog-description">After</p>

- [Masonry](/material-ui/react-masonry/). We introduced a new component for use when the `Grid` component leads to wasted space. It's frequently used in dashboards.
- [Masonry](https://v5.mui.com/material-ui/react-masonry/). We introduced a new component for use when the `Grid` component leads to wasted space. It's frequently used in dashboards.

Check warning on line 47 in docs/pages/blog/2021-q3-update.md

View workflow job for this annotation

GitHub Actions / runner / vale

[vale] reported by reviewdog 🐶 [Google.We] Try to avoid using first-person plural like 'We'. Raw Output: {"message": "[Google.We] Try to avoid using first-person plural like 'We'.", "location": {"path": "docs/pages/blog/2021-q3-update.md", "range": {"start": {"line": 47, "column": 61}}}, "severity": "WARNING"}

<a href="/material-ui/react-masonry/"><img loading="lazy" src="/static/blog/2021-q3-update/masonry.png" style="width: 700px;" width="1400" height="906" alt="react-masonry" /></a>

- We introduced a new [package of components without styles](https://www.npmjs.com/package/@mui/base), laying the foundations for supporting multiple design systems with headless components.
While it was tough to balance the time between working on v5 stable and developing the unstyled components, we still managed to introduce the first few:
- [Autocomplete](/material-ui/react-autocomplete/#useautocomplete)
- [Autocomplete](https://v5.mui.com/material-ui/react-autocomplete/#useautocomplete)

```jsx
import { useAutocomplete } from '@mui/base/AutocompleteUnstyled';
```

- [Button](/material-ui/react-button/#unstyled)
- [Button](https://v5.mui.com/material-ui/react-button/#unstyled)

```jsx
import { useButton } from '@mui/base/ButtonUnstyled';
```

- [Modal](/material-ui/react-modal/#unstyled)
- [Modal](https://v5.mui.com/material-ui/react-modal/#unstyled)

```jsx
import { ModalUnstyled } from '@mui/base/ModalUnstyled';
```

- [Slider](/material-ui/react-slider/#unstyled)
- [Slider](https://v5.mui.com/material-ui/react-slider/#unstyled)

```jsx
import { SliderUnstyled } from '@mui/base/SliderUnstyled';
```

- [Switch](/material-ui/react-switch/#unstyled)
- [Switch](https://v5.mui.com/material-ui/react-switch/#unstyled)

```jsx
import { useSwitch } from '@mui/base/SwitchUnstyled';
```

- [Portal](/material-ui/react-portal/#unstyled)
- [Portal](https://v5.mui.com/material-ui/react-portal/#unstyled)

```jsx
import { Portal } from '@mui/base/Portal';
Expand Down
2 changes: 1 addition & 1 deletion docs/pages/blog/2022-tenerife-retreat.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@

MUI is on track to grow from roughly 20 people to 40 or more by the time we get to our next company retreat in late Q1 2023.

We are constantly interviewing React developers from all around the world, and we are also increasingly looking to hire for non-technical roles such as [People Operations Manager](/careers/people-operations-manager/) in which you could have a huge impact steering the direction of the company's nascent HR department.
We are constantly interviewing React developers from all around the world, and we are also increasingly looking to hire for non-technical roles such as People Operations Manager in which you could have a huge impact steering the direction of the company's nascent HR department.

Check warning on line 175 in docs/pages/blog/2022-tenerife-retreat.md

View workflow job for this annotation

GitHub Actions / runner / vale

[vale] reported by reviewdog 🐶 [Google.We] Try to avoid using first-person plural like 'we'. Raw Output: {"message": "[Google.We] Try to avoid using first-person plural like 'we'.", "location": {"path": "docs/pages/blog/2022-tenerife-retreat.md", "range": {"start": {"line": 175, "column": 80}}}, "severity": "WARNING"}

Check warning on line 175 in docs/pages/blog/2022-tenerife-retreat.md

View workflow job for this annotation

GitHub Actions / runner / vale

[vale] reported by reviewdog 🐶 [Google.We] Try to avoid using first-person plural like 'We'. Raw Output: {"message": "[Google.We] Try to avoid using first-person plural like 'We'.", "location": {"path": "docs/pages/blog/2022-tenerife-retreat.md", "range": {"start": {"line": 175, "column": 1}}}, "severity": "WARNING"}

Check out [our open roles](/careers/) so you can join us before the next retreat!

Expand Down
41 changes: 41 additions & 0 deletions docs/scripts/reportBrokenLinks.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as path from 'path';
import { crawl } from '@mui/internal-code-infra/brokenLinksChecker';
import { globby } from 'globby';

async function main() {
// The /blog/ page has pagination that's not persisted in the url.
const blogPages = await globby('blog/**/*.js', {
cwd: path.resolve(import.meta.dirname, '../pages'),
});
const blogSeedUrls = blogPages.map((page) => {
const pathname = page.replace(/(?:\/index)?\.js$/, '');
return `/${pathname}`;
});

const { issues } = await crawl({
startCommand: 'pnpm start --no-request-logging -p 3001',
host: 'http://localhost:3001/',
seedUrls: ['/', ...blogSeedUrls],
outPath: path.resolve(import.meta.dirname, '../export/material-ui/link-structure.json'),
// Target paths to ignore during link checking
ignoredPaths: [
// Internal links not on this server
// TODO: Seed crawler with stored links from e.g. mui.com/x/link-structure.json
/^\/(x|base-ui|joy-ui|store|toolpad)(\/|$)/,
],
// CSS selectors for content to ignore during link checking
ignoredContent: [
// Links used in demos under MemoryRouter
// TODO: Create an easier way to identify content under MemoryRouter
// (e.g. a class or an option on the demo)
'[id^="demo-"] a[href^="/inbox"]',
'[id^="demo-"] a[href^="/trash"]',
'[id^="demo-"] a[href^="/spam"]',
'[id^="demo-"] a[href^="/drafts"]',
],
});

process.exit(issues.length);
}

main();
78 changes: 0 additions & 78 deletions docs/scripts/reportBrokenLinks.ts

This file was deleted.

Loading
Loading