diff --git a/.gitignore b/.gitignore index 56d6f6e384..0475df8a53 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,6 @@ package-lock.json /result .direnv/ -# Documentation -/assets/docs -/assets/docs.json +# Generated documentation +/assets +/docs.json diff --git a/.mise.toml b/.mise.toml index c2492a9368..73ea32917b 100644 --- a/.mise.toml +++ b/.mise.toml @@ -9,14 +9,11 @@ yes = true idiomatic_version_file_enable_tools = [] [tasks.generate-docs] -run = "cargo test --package typst-docs --lib -- tests::test_docs --exact --nocapture" +run = "cargo run --package typst-docs -- --assets-dir assets --out-file docs.json --base /docs/" [tasks.generate-web] depends = ["install-website"] -run = [ - "bun install --frozen-lockfile", - "bun run build", -] +run = ["bun run build"] dir = "./website" [tasks.generate] diff --git a/website/.gitignore b/website/.gitignore index d9fb9ffb5b..9a0861ef93 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -1,3 +1,4 @@ node_modules/ dist/ -public/assets/docs +public/assets +public/docs.json diff --git a/website/bun.lockb b/website/bun.lockb index ad301f4837..ccd850768f 100755 Binary files a/website/bun.lockb and b/website/bun.lockb differ diff --git a/website/package.json b/website/package.json index 424c1389d6..1b168e89c3 100644 --- a/website/package.json +++ b/website/package.json @@ -6,7 +6,7 @@ "dev": "vite dev", "build": "vite build && npm run update-search-index", "preview": "vite preview", - "update-search-index": "pagefind --site ./dist/ --glob \"docs/**/*.html\"", + "update-search-index": "pagefind --site ./dist/ --glob \"**/*.html\"", "check": "biome check .", "check:write": "biome check --write .", "test": "vitest" @@ -14,7 +14,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@hono/ssg-plugins-essential": "^0.1.0", - "@hono/vite-dev-server": "^0.19.0", + "@hono/vite-dev-server": "^0.20.1", "@hono/vite-ssg": "^0.2.0", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.5", @@ -23,7 +23,7 @@ "pagefind": "^1.3.0", "tailwind-merge": "^3.3.0", "tailwindcss": "^4.1.5", - "vite": "^6.2.5", + "vite": "^7.1.2", "vitest": "^3.1.4" } } diff --git a/website/public/assets/favicon.png b/website/public/favicon.png similarity index 100% rename from website/public/assets/favicon.png rename to website/public/favicon.png diff --git a/website/public/assets/fonts/cascadia-code/CascadiaMono-Bold.woff2 b/website/public/fonts/cascadia-code/CascadiaMono-Bold.woff2 similarity index 100% rename from website/public/assets/fonts/cascadia-code/CascadiaMono-Bold.woff2 rename to website/public/fonts/cascadia-code/CascadiaMono-Bold.woff2 diff --git a/website/public/assets/fonts/cascadia-code/CascadiaMono-Regular-Sub.woff2 b/website/public/fonts/cascadia-code/CascadiaMono-Regular-Sub.woff2 similarity index 100% rename from website/public/assets/fonts/cascadia-code/CascadiaMono-Regular-Sub.woff2 rename to website/public/fonts/cascadia-code/CascadiaMono-Regular-Sub.woff2 diff --git a/website/public/assets/fonts/cascadia-code/LICENSE b/website/public/fonts/cascadia-code/LICENSE similarity index 100% rename from website/public/assets/fonts/cascadia-code/LICENSE rename to website/public/fonts/cascadia-code/LICENSE diff --git a/website/public/assets/fonts/hanken-grotesk/HKGrotesk-Bold.woff2 b/website/public/fonts/hanken-grotesk/HKGrotesk-Bold.woff2 similarity index 100% rename from website/public/assets/fonts/hanken-grotesk/HKGrotesk-Bold.woff2 rename to website/public/fonts/hanken-grotesk/HKGrotesk-Bold.woff2 diff --git a/website/public/assets/fonts/hanken-grotesk/HKGrotesk-Regular.woff2 b/website/public/fonts/hanken-grotesk/HKGrotesk-Regular.woff2 similarity index 100% rename from website/public/assets/fonts/hanken-grotesk/HKGrotesk-Regular.woff2 rename to website/public/fonts/hanken-grotesk/HKGrotesk-Regular.woff2 diff --git a/website/public/assets/fonts/hanken-grotesk/HKGrotesk-SemiBold.woff2 b/website/public/fonts/hanken-grotesk/HKGrotesk-SemiBold.woff2 similarity index 100% rename from website/public/assets/fonts/hanken-grotesk/HKGrotesk-SemiBold.woff2 rename to website/public/fonts/hanken-grotesk/HKGrotesk-SemiBold.woff2 diff --git a/website/public/assets/fonts/hanken-grotesk/LICENSE b/website/public/fonts/hanken-grotesk/LICENSE similarity index 100% rename from website/public/assets/fonts/hanken-grotesk/LICENSE rename to website/public/fonts/hanken-grotesk/LICENSE diff --git a/website/public/index.html b/website/public/index.html deleted file mode 100644 index d5d20bc26f..0000000000 --- a/website/public/index.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/website/src/components/templates/BaseTemplate.tsx b/website/src/components/templates/BaseTemplate.tsx index d08188c816..c24a208eda 100644 --- a/website/src/components/templates/BaseTemplate.tsx +++ b/website/src/components/templates/BaseTemplate.tsx @@ -1,6 +1,8 @@ +import { html } from "hono/html"; import type { FC, PropsWithChildren } from "hono/jsx"; -import { baseUrl, typstOfficialUrl } from "../../metadata"; +import { basePath, originUrl, typstOfficialDocsUrl } from "../../metadata"; import type { Page } from "../../types/model"; +import { joinPath, removeBasePath } from "../../utils/path"; import { getTranslationStatus } from "../../utils/translationStatus"; import { CaretRightCircleIcon, @@ -42,9 +44,15 @@ export const BaseTemplate: FC = ({ const route = page.route; const outline = page.outline; const translationStatus = getTranslationStatus(route); - const absoluteRouteUrl = new URL(route, baseUrl).toString(); - const faviconUrl = new URL("/assets/favicon.png", baseUrl).toString(); - const typstOfficialRouteUrl = new URL(route, typstOfficialUrl).toString(); + const absoluteRouteUrl = new URL(route, originUrl).toString(); + const faviconUrl = new URL( + joinPath(basePath, "/favicon.png"), + originUrl, + ).toString(); + const typstOfficialRouteUrl = joinPath( + typstOfficialDocsUrl, + removeBasePath(basePath, route), + ); return ( @@ -68,7 +76,6 @@ export const BaseTemplate: FC = ({ - = ({ rel="icon" type="image/png" sizes="32x32" - href="/assets/favicon.png" + href={joinPath(basePath, "/favicon.png")} /> @@ -117,6 +138,13 @@ export const BaseTemplate: FC = ({ defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.14.8/dist/cdn.min.js" /> + {/* NOTE: @hono/vite-dev-server does not respect the base setting in the Vite configuration. */} + {import.meta.env.DEV && + html` + + `} = ({ )} - {route === "/docs/" ? ( + {route === basePath ? (
@@ -238,7 +266,7 @@ export const BaseTemplate: FC = ({
diff --git a/website/src/components/ui/FunctionDefinition.tsx b/website/src/components/ui/FunctionDefinition.tsx index 5a356d0666..7a2498924f 100644 --- a/website/src/components/ui/FunctionDefinition.tsx +++ b/website/src/components/ui/FunctionDefinition.tsx @@ -1,5 +1,7 @@ import type { FC } from "hono/jsx"; +import { basePath } from "../../metadata"; import type { Func } from "../../types/model"; +import { joinPath } from "../../utils/path"; import { TypeIcon } from "./TypeIcon"; import { genPath } from "./genPath"; import { buildParamId, type2href } from "./type2href"; @@ -48,7 +50,9 @@ export const FunctionDefinition: FC = ({ ); })} @@ -72,7 +76,9 @@ export const FunctionDefinition: FC = ({ {i < func.returns.length - 1 && ( , diff --git a/website/src/components/ui/FunctionParameters.tsx b/website/src/components/ui/FunctionParameters.tsx index cd9d20d455..6b6fdc64af 100644 --- a/website/src/components/ui/FunctionParameters.tsx +++ b/website/src/components/ui/FunctionParameters.tsx @@ -1,5 +1,7 @@ import type { FC } from "hono/jsx"; +import { basePath } from "../../metadata"; import type { Func } from "../../types/model"; +import { joinPath } from "../../utils/path"; import { ChevronRightIcon } from "../icons"; import { HtmlContent } from "./HtmlContent"; import { Tooltip } from "./Tooltip"; @@ -40,7 +42,9 @@ export const FunctionParameters: FC = ({ ); })} diff --git a/website/src/components/ui/common/Breadcrumbs.tsx b/website/src/components/ui/common/Breadcrumbs.tsx index d9156d4552..f78e8f4140 100644 --- a/website/src/components/ui/common/Breadcrumbs.tsx +++ b/website/src/components/ui/common/Breadcrumbs.tsx @@ -1,3 +1,4 @@ +import { basePath } from "../../../metadata"; import type { Page } from "../../../types/model"; import { ChevronRightIcon, HomeIcon } from "../../icons"; @@ -10,7 +11,7 @@ export const Breadcrumbs = ({ path }: BreadcrumbsProps) => {