From 3e658b2399c0204bd3721207a43ac53769613ae8 Mon Sep 17 00:00:00 2001 From: Janpot <2109932+Janpot@users.noreply.github.com> Date: Thu, 7 May 2026 11:25:51 +0200 Subject: [PATCH 1/4] [infra] Ship docs markdown inside @base-ui/react package --- .gitignore | 2 ++ docs/scripts/generateLlmTxt/index.mjs | 9 ++++++- package.json | 2 +- packages/react/package.json | 4 +-- packages/react/scripts/stagePublishedDocs.mjs | 26 +++++++++++++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 packages/react/scripts/stagePublishedDocs.mjs diff --git a/.gitignore b/.gitignore index 2caaecd4a02..74dbf44a7d2 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,9 @@ size-snapshot.json # Remove if you want to pregenerate the docs md files docs/public/llms.txt docs/public/llms-full.txt +docs/public/index.md docs/public/react +packages/react/published-docs/ .cursor/rules/nx-rules.mdc .github/instructions/nx.instructions.md diff --git a/docs/scripts/generateLlmTxt/index.mjs b/docs/scripts/generateLlmTxt/index.mjs index 6b41532c3a0..ff23a3a7392 100755 --- a/docs/scripts/generateLlmTxt/index.mjs +++ b/docs/scripts/generateLlmTxt/index.mjs @@ -218,6 +218,10 @@ async function generateLlmsTxt() { const resolvedUrl = resolveUrl(page.mdUrlPath, BASE_URL); return [`- [${page.title}](${resolvedUrl}): ${page.description}`]; }; + const renderPageAsRelativeLink = (page) => { + const relativeUrl = `.${page.mdUrlPath}`; + return [`- [${page.title}](${relativeUrl}): ${page.description}`]; + }; const renderPageAsInline = async (page) => { const content = await prepareForInlineMarkdown(page.fullMarkdown, 2, metadataByUrl); return [content]; @@ -300,9 +304,12 @@ async function generateLlmsTxt() { await Promise.all([ createFile('llms.txt', renderPageAsLink), createFile('llms-full.txt', renderPageAsInline), + createFile('index.md', renderPageAsRelativeLink), ]); - console.log(`Successfully generated ${totalFiles} markdown files, llms.txt, and llms-full.txt`); + console.log( + `Successfully generated ${totalFiles} markdown files, llms.txt, llms-full.txt, and index.md`, + ); } catch (error) { console.error('Error generating llms.txt:', error); process.exit(1); diff --git a/package.json b/package.json index c00618e681c..e2e7fd81f15 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "deduplicate": "pnpm dedupe", "build": "lerna run --no-private build", "release:version": "lerna version --no-changelog --no-push --no-git-tag-version --no-private", - "release:build": "lerna run --concurrency 8 --no-private build --skip-nx-cache", + "release:build": "pnpm docs:generate-llms && lerna run --concurrency 8 --no-private build --skip-nx-cache", "release:changelog": "code-infra generate-changelog", "release:changelog:docs": "FORMAT=docs code-infra generate-changelog", "release:publish": "code-infra publish --github-release", diff --git a/packages/react/package.json b/packages/react/package.json index e23815a0b5f..435a11b4dcc 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -113,8 +113,8 @@ }, "type": "commonjs", "scripts": { - "prebuild": "rimraf --glob build build-tests \"*.tsbuildinfo\"", - "build": "code-infra build --ignore \"**/*.template.js\" --copy .npmignore", + "prebuild": "rimraf --glob build build-tests published-docs \"*.tsbuildinfo\" && node ./scripts/stagePublishedDocs.mjs", + "build": "code-infra build --ignore \"**/*.template.js\" --copy .npmignore --copy \"published-docs/**:docs\"", "test:package": "publint --pack pnpm && attw --pack ./build --exclude-entrypoints package.json --exclude-entrypoints esm --exclude-entrypoints cjs", "release": "pnpm build && pnpm publish", "test": "cross-env VITEST_ENV=jsdom vitest", diff --git a/packages/react/scripts/stagePublishedDocs.mjs b/packages/react/scripts/stagePublishedDocs.mjs new file mode 100644 index 00000000000..fb38265f0fa --- /dev/null +++ b/packages/react/scripts/stagePublishedDocs.mjs @@ -0,0 +1,26 @@ +/* eslint-disable no-console */ +import fs from 'node:fs/promises'; +import path from 'node:path'; + +const PACKAGE_ROOT = path.resolve(import.meta.dirname, '..'); +const DOCS_PUBLIC = path.resolve(PACKAGE_ROOT, '../../docs/public'); +const STAGE_DIR = path.join(PACKAGE_ROOT, 'published-docs'); + +await fs.rm(STAGE_DIR, { recursive: true, force: true }); + +let count = 0; +for await (const entry of fs.glob('**/*.md', { cwd: DOCS_PUBLIC })) { + const src = path.join(DOCS_PUBLIC, entry); + const dst = path.join(STAGE_DIR, entry); + await fs.mkdir(path.dirname(dst), { recursive: true }); + await fs.copyFile(src, dst); + count += 1; +} + +if (count === 0) { + throw new Error( + 'No markdown files found in docs/public/. Run "pnpm docs:generate-llms" first.', + ); +} + +console.log(`[stage-docs] Staged ${count} markdown files into published-docs/.`); From c049702dee76654d8dd690ef744221e00105e756 Mon Sep 17 00:00:00 2001 From: Janpot <2109932+Janpot@users.noreply.github.com> Date: Thu, 7 May 2026 12:45:32 +0200 Subject: [PATCH 2/4] [docs] Wrap HTML tags in inline code in generated link descriptions --- docs/scripts/generateLlmTxt/index.mjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/scripts/generateLlmTxt/index.mjs b/docs/scripts/generateLlmTxt/index.mjs index ff23a3a7392..d0320ef924b 100755 --- a/docs/scripts/generateLlmTxt/index.mjs +++ b/docs/scripts/generateLlmTxt/index.mjs @@ -36,6 +36,10 @@ function incrementHeaders(increment = 1) { }; } +function inlineCodeHtmlTags(text) { + return text.replace(/<\/?[a-zA-Z][^>]*>/g, '`$&`'); +} + function githubSlugify(text) { return text .trim() @@ -216,11 +220,11 @@ async function generateLlmsTxt() { // Page rendering functions - focused only on their unique logic const renderPageAsLink = (page) => { const resolvedUrl = resolveUrl(page.mdUrlPath, BASE_URL); - return [`- [${page.title}](${resolvedUrl}): ${page.description}`]; + return [`- [${page.title}](${resolvedUrl}): ${inlineCodeHtmlTags(page.description)}`]; }; const renderPageAsRelativeLink = (page) => { const relativeUrl = `.${page.mdUrlPath}`; - return [`- [${page.title}](${relativeUrl}): ${page.description}`]; + return [`- [${page.title}](${relativeUrl}): ${inlineCodeHtmlTags(page.description)}`]; }; const renderPageAsInline = async (page) => { const content = await prepareForInlineMarkdown(page.fullMarkdown, 2, metadataByUrl); From 5fd7fa558482e0812ad37978a9f2532525408364 Mon Sep 17 00:00:00 2001 From: Janpot <2109932+Janpot@users.noreply.github.com> Date: Thu, 7 May 2026 16:25:58 +0200 Subject: [PATCH 3/4] [infra] Use release:build in CI compiler jobs --- .circleci/config.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f0a8ee5a198..3192b6a4070 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -53,7 +53,7 @@ commands: command: pnpm -F "./packages/*" add react-compiler-runtime - run: name: Build with compiler - command: pnpm -F "./packages/*" build --enableReactCompiler + command: pnpm release:build --enableReactCompiler environment: MUI_REACT_COMPILER_MODE: 'infer' diff --git a/package.json b/package.json index e2e7fd81f15..d6f5be2cd1a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "deduplicate": "pnpm dedupe", "build": "lerna run --no-private build", "release:version": "lerna version --no-changelog --no-push --no-git-tag-version --no-private", - "release:build": "pnpm docs:generate-llms && lerna run --concurrency 8 --no-private build --skip-nx-cache", + "release:build": "pnpm docs:generate-llms && lerna run --concurrency 8 --no-private build --skip-nx-cache --", "release:changelog": "code-infra generate-changelog", "release:changelog:docs": "FORMAT=docs code-infra generate-changelog", "release:publish": "code-infra publish --github-release", From c87d0c1395f981f3581cd036aaddc97e7bde11a5 Mon Sep 17 00:00:00 2001 From: Janpot <2109932+Janpot@users.noreply.github.com> Date: Thu, 7 May 2026 16:29:12 +0200 Subject: [PATCH 4/4] Update stagePublishedDocs.mjs --- packages/react/scripts/stagePublishedDocs.mjs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/react/scripts/stagePublishedDocs.mjs b/packages/react/scripts/stagePublishedDocs.mjs index fb38265f0fa..d9dfaf861de 100644 --- a/packages/react/scripts/stagePublishedDocs.mjs +++ b/packages/react/scripts/stagePublishedDocs.mjs @@ -18,9 +18,7 @@ for await (const entry of fs.glob('**/*.md', { cwd: DOCS_PUBLIC })) { } if (count === 0) { - throw new Error( - 'No markdown files found in docs/public/. Run "pnpm docs:generate-llms" first.', - ); + throw new Error('No markdown files found in docs/public/. Run "pnpm docs:generate-llms" first.'); } console.log(`[stage-docs] Staged ${count} markdown files into published-docs/.`);