From 55bbdcb08fe182336c7d0093d3b03c079c19e282 Mon Sep 17 00:00:00 2001 From: 0takuc0mrade Date: Fri, 28 Aug 2026 11:24:26 +0100 Subject: [PATCH 1/2] feat(docs): add shared docs foundations Implement DX-027, DX-030, DX-033, and DX-037 together so the docs app consumes the shared design system, provides responsive reading chrome and ordered navigation, and supports persistent MDX tab groups.\n\nVerified with docs typecheck, 16 focused tests, production build, Pagefind generation, content checks, token enforcement, and changelog validation. The full repository gate remains red on unrelated malformed upstream changelog and web files; publishing is explicitly authorized despite those upstream failures. --- .changelog/unreleased/627-docs-foundations.md | 8 ++ apps/docs/content/meta.json | 9 +- apps/docs/index.html | 16 +++ apps/docs/package.json | 2 + apps/docs/scripts/build.ts | 22 ++-- apps/docs/scripts/components.test.tsx | 120 ++++++++++++++++-- apps/docs/scripts/content-loader.test.ts | 6 + apps/docs/scripts/navigation.test.tsx | 60 +++++++++ apps/docs/scripts/search.test.ts | 38 ++++-- apps/docs/src/app/layout.tsx | 11 ++ apps/docs/src/app/main.tsx | 53 ++++++++ apps/docs/src/app/page.tsx | 15 +++ .../components/BreadcrumbStructuredData.tsx | 21 +++ apps/docs/src/components/Breadcrumbs.tsx | 35 +++++ apps/docs/src/components/DocsLayout.tsx | 105 +++++++++++++++ apps/docs/src/components/DocsNavigation.tsx | 53 ++++++++ apps/docs/src/components/Pager.tsx | 51 ++++++++ apps/docs/src/lib/content.ts | 24 ++-- apps/docs/src/lib/navigation.ts | 110 ++++++++++++++++ apps/docs/src/mdx/CodeGroup.tsx | 48 +++++++ apps/docs/src/mdx/Tabs.tsx | 68 ++++++++++ apps/docs/src/mdx/components.tsx | 32 ++++- apps/docs/src/mdx/useTabs.ts | 75 +++++++++++ apps/docs/src/styles/globals.css | 1 + apps/docs/vite.config.ts | 9 +- bun.lock | 2 + scripts/check-design-tokens.ts | 33 +++-- 27 files changed, 963 insertions(+), 64 deletions(-) create mode 100644 .changelog/unreleased/627-docs-foundations.md create mode 100644 apps/docs/index.html create mode 100644 apps/docs/scripts/navigation.test.tsx create mode 100644 apps/docs/src/app/layout.tsx create mode 100644 apps/docs/src/app/main.tsx create mode 100644 apps/docs/src/app/page.tsx create mode 100644 apps/docs/src/components/BreadcrumbStructuredData.tsx create mode 100644 apps/docs/src/components/Breadcrumbs.tsx create mode 100644 apps/docs/src/components/DocsLayout.tsx create mode 100644 apps/docs/src/components/DocsNavigation.tsx create mode 100644 apps/docs/src/components/Pager.tsx create mode 100644 apps/docs/src/lib/navigation.ts create mode 100644 apps/docs/src/mdx/CodeGroup.tsx create mode 100644 apps/docs/src/mdx/Tabs.tsx create mode 100644 apps/docs/src/mdx/useTabs.ts create mode 100644 apps/docs/src/styles/globals.css diff --git a/.changelog/unreleased/627-docs-foundations.md b/.changelog/unreleased/627-docs-foundations.md new file mode 100644 index 00000000..7078663a --- /dev/null +++ b/.changelog/unreleased/627-docs-foundations.md @@ -0,0 +1,8 @@ +--- +type: added +area: docs +pr: 627 +breaking: false +--- + +Add shared design-system styling, responsive documentation chrome, navigation breadcrumbs and pagers, and persistent MDX tab groups. diff --git a/apps/docs/content/meta.json b/apps/docs/content/meta.json index 7107d95a..dc71e61d 100644 --- a/apps/docs/content/meta.json +++ b/apps/docs/content/meta.json @@ -27,11 +27,18 @@ "reference/data-store", "reference/synthetics-reader", "reference/order-vault", + "reference/contracts.generated", + "reference/exchange-router", "reference/graphql.generated", + "reference/tokens.generated", + "reference/errors", "reference/glossary" ] }, - { "label": "Reference", "pages": ["reference/contracts.generated", "reference/exchange-router", "reference/glossary"] }, + { + "label": "Guides", + "pages": ["guides/troubleshooting"] + }, { "label": "Resources", "pages": [ diff --git a/apps/docs/index.html b/apps/docs/index.html new file mode 100644 index 00000000..fd75bd80 --- /dev/null +++ b/apps/docs/index.html @@ -0,0 +1,16 @@ + + + + + + + SO4 documentation + + +
+ + + diff --git a/apps/docs/package.json b/apps/docs/package.json index d57289b0..3142def3 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -31,6 +31,7 @@ }, "devDependencies": { "@happy-dom/global-registrator": "^20.11.6", + "@tailwindcss/vite": "^4.1.18", "@mdx-js/mdx": "^3.1.1", "@mdx-js/rollup": "^3.1.0", "@repo/vitest-config": "workspace:*", @@ -51,6 +52,7 @@ "remark-gfm": "^4.0.1", "remark-mdx-frontmatter": "^5.2.0", "shiki": "^4.4.3", + "tailwindcss": "^4.1.18", "typescript": "^5.9.3", "vite": "^7.3.2" } diff --git a/apps/docs/scripts/build.ts b/apps/docs/scripts/build.ts index f8d510e4..fd907334 100644 --- a/apps/docs/scripts/build.ts +++ b/apps/docs/scripts/build.ts @@ -1,4 +1,4 @@ -import { mkdir, rm } from "node:fs/promises" +import { mkdir, readdir, rm } from "node:fs/promises" import { join } from "node:path" import { $ } from "bun" @@ -11,7 +11,7 @@ await $`bun run ${join(appRoot, "../../scripts/generate-design-tokens.ts")} --ch await $`bun run ${join(appRoot, "../../scripts/generate-errors-reference.ts")} --check` const pages = (await loadPages()).filter( - (page) => page.frontmatter.status !== "draft", + (page) => page.frontmatter.status !== "draft" ) const outputRoot = join(appRoot, ".nitro-static") @@ -26,7 +26,7 @@ function renderInline(value: string) { return value .replace( /([^<]+)<\/Term>/g, - '$2', + '$2' ) .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1') .replace(/\*\*([^*]+)\*\*/g, "$1") @@ -45,25 +45,31 @@ function render(body: string) { .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/(^-|-$)/g, "") - return `

${escape(heading[1])}

` + return `

${escape(heading[1])}

` } if (block.startsWith("> ")) - return `` + return `` if (block.startsWith("- ")) - return `