From 939f59d99e73abfa5faa480bfd8af51eb06527b7 Mon Sep 17 00:00:00 2001 From: LukaDev <47296785+lukadev-0@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:05:50 +0100 Subject: [PATCH] feat(website): package documentation --- registry/src/endpoints/publish_version.rs | 2 +- website/bun.lockb | Bin 215280 -> 227536 bytes website/package.json | 36 ++-- website/src/app.css | 18 +- website/src/lib/components/Logomark.svelte | 9 + website/src/lib/components/Select.svelte | 74 ++++++++ website/src/lib/markdown.ts | 116 ++++++++++++ website/src/lib/registry-api.ts | 40 +++-- website/src/routes/(app)/+error.svelte | 8 + website/src/routes/(app)/+layout.svelte | 14 ++ website/src/routes/{ => (app)}/+page.svelte | 0 website/src/routes/{ => (app)}/+page.ts | 0 website/src/routes/{ => (app)}/Footer.svelte | 0 website/src/routes/(app)/Hamburger.svelte | 77 ++++++++ website/src/routes/(app)/Header.svelte | 81 +++++++++ website/src/routes/{ => (app)}/Hero.svelte | 0 website/src/routes/{ => (app)}/Search.svelte | 0 website/src/routes/(app)/[...404]/+page.ts | 6 + .../packages/[scope]/[name]/+layout.svelte | 11 +- .../packages/[scope]/[name]/+layout.ts | 0 .../packages/[scope]/[name]/Tab.svelte | 4 +- .../[scope]/[name]/TargetSelector.svelte | 52 ++++++ .../[[version]]/[[target]]/(docs)/+layout.ts | 67 +++++++ .../[[target]]/(docs)/+layout@.svelte | 167 ++++++++++++++++++ .../[[target]]/(docs)/Hamburger.svelte | 101 +++++++++++ .../[[target]]/(docs)/MobileNavbar.svelte | 48 +++++ .../[[target]]/(docs)/Sidebar.svelte | 36 ++++ .../[[target]]/(docs)/SidebarItem.svelte | 45 +++++ .../[[version]]/[[target]]/(docs)/Tab.svelte | 26 +++ .../[[target]]/(docs)/TargetSelector.svelte | 46 +++++ .../[[version]]/[[target]]/(docs)/Toc.svelte | 20 +++ .../[[target]]/(docs)/TocList.svelte | 45 +++++ .../[[target]]/(docs)/TocObserver.svelte | 80 +++++++++ .../[[target]]/(docs)/VersionSelector.svelte | 48 +++++ .../[[target]]/(docs)/docs/+error.svelte | 8 + .../[[target]]/(docs)/docs/+layout.ts | 33 ++++ .../[[target]]/(docs)/docs/+page.ts | 6 + .../(docs)/docs/[...doc]/+page.svelte | 8 + .../[[target]]/(docs)/docs/[...doc]/+page.ts | 62 +++++++ .../[[target]]/(docs)/reference/+layout.ts | 29 +++ .../[[target]]/(docs)/reference/+page.svelte | 10 ++ .../[[version]]/[[target]]/+layout.svelte | 2 +- .../[[version]]/[[target]]/+page.svelte | 0 .../[name]/[[version]]/[[target]]/+page.ts | 51 ++++++ .../[[version]]/[[target]]/Command.svelte | 0 .../[[target]]/dependencies/+page.svelte | 0 .../[[target]]/dependencies/+page.ts | 0 .../[scope]/[name]/versions/+page.svelte | 0 .../packages/[scope]/[name]/versions/+page.ts | 0 .../routes/{ => (app)}/search-state.svelte.ts | 0 .../routes/{ => (app)}/search/+page.svelte | 0 .../src/routes/{ => (app)}/search/+page.ts | 0 website/src/routes/+error.svelte | 2 +- website/src/routes/+layout.svelte | 58 ++++-- website/src/routes/Hamburger.svelte | 63 ------- website/src/routes/Header.svelte | 35 ---- .../[scope]/[name]/TargetSelector.svelte | 51 ------ .../[name]/[[version]]/[[target]]/+page.ts | 82 --------- website/tailwind.config.ts | 1 + 59 files changed, 1502 insertions(+), 276 deletions(-) create mode 100644 website/src/lib/components/Logomark.svelte create mode 100644 website/src/lib/components/Select.svelte create mode 100644 website/src/lib/markdown.ts create mode 100644 website/src/routes/(app)/+error.svelte create mode 100644 website/src/routes/(app)/+layout.svelte rename website/src/routes/{ => (app)}/+page.svelte (100%) rename website/src/routes/{ => (app)}/+page.ts (100%) rename website/src/routes/{ => (app)}/Footer.svelte (100%) create mode 100644 website/src/routes/(app)/Hamburger.svelte create mode 100644 website/src/routes/(app)/Header.svelte rename website/src/routes/{ => (app)}/Hero.svelte (100%) rename website/src/routes/{ => (app)}/Search.svelte (100%) create mode 100644 website/src/routes/(app)/[...404]/+page.ts rename website/src/routes/{ => (app)}/packages/[scope]/[name]/+layout.svelte (85%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/+layout.ts (100%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/Tab.svelte (70%) create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/TargetSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/+layout@.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Hamburger.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/MobileNavbar.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Sidebar.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/SidebarItem.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Tab.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TargetSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/Toc.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TocList.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/TocObserver.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/VersionSelector.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+error.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/[...doc]/+page.svelte create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/docs/[...doc]/+page.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/reference/+layout.ts create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/(docs)/reference/+page.svelte rename website/src/routes/{ => (app)}/packages/[scope]/[name]/[[version]]/[[target]]/+layout.svelte (98%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/[[version]]/[[target]]/+page.svelte (100%) create mode 100644 website/src/routes/(app)/packages/[scope]/[name]/[[version]]/[[target]]/+page.ts rename website/src/routes/{ => (app)}/packages/[scope]/[name]/[[version]]/[[target]]/Command.svelte (100%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/[[version]]/[[target]]/dependencies/+page.svelte (100%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/[[version]]/[[target]]/dependencies/+page.ts (100%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/versions/+page.svelte (100%) rename website/src/routes/{ => (app)}/packages/[scope]/[name]/versions/+page.ts (100%) rename website/src/routes/{ => (app)}/search-state.svelte.ts (100%) rename website/src/routes/{ => (app)}/search/+page.svelte (100%) rename website/src/routes/{ => (app)}/search/+page.ts (100%) delete mode 100644 website/src/routes/Hamburger.svelte delete mode 100644 website/src/routes/Header.svelte delete mode 100644 website/src/routes/packages/[scope]/[name]/TargetSelector.svelte delete mode 100644 website/src/routes/packages/[scope]/[name]/[[version]]/[[target]]/+page.ts diff --git a/registry/src/endpoints/publish_version.rs b/registry/src/endpoints/publish_version.rs index d6a38ab..043f5ff 100644 --- a/registry/src/endpoints/publish_version.rs +++ b/registry/src/endpoints/publish_version.rs @@ -61,7 +61,7 @@ const ADDITIONAL_FORBIDDEN_FILES: &[&str] = &["default.project.json"]; struct DocEntryInfo { #[serde(default)] label: Option, - #[serde(default)] + #[serde(default, alias = "position")] sidebar_position: Option, #[serde(default)] collapsed: bool, diff --git a/website/bun.lockb b/website/bun.lockb index 0d891c390ce0f7691a6fac515e9a57ff03954676..db992e70618c3b7645a1a731a8e709f21d8ed58e 100755 GIT binary patch delta 54991 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

UEj0 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 Hs>1&R8D}&O diff --git a/website/package.json b/website/package.json index 6f41d22..9a26eeb 100644 --- a/website/package.json +++ b/website/package.json @@ -12,47 +12,57 @@ "format": "prettier --write ." }, "devDependencies": { - "@sveltejs/adapter-vercel": "^5.4.5", - "@sveltejs/kit": "^2.7.0", - "@sveltejs/vite-plugin-svelte": "^4.0.0-next.8", + "@sveltejs/adapter-vercel": "^5.4.6", + "@sveltejs/kit": "^2.7.3", + "@sveltejs/vite-plugin-svelte": "^4.0.0", "@tailwindcss/typography": "^0.5.15", "@types/eslint": "^9.6.1", "@types/gunzip-maybe": "^1.4.2", "@types/tar-stream": "^3.1.3", "autoprefixer": "^10.4.20", - "eslint": "^9.12.0", + "eslint": "^9.13.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.44.1", + "eslint-plugin-svelte": "^2.46.0", "globals": "^15.11.0", "mdsvex": "^0.12.3", "prettier": "^3.3.3", "prettier-plugin-svelte": "^3.2.7", "prettier-plugin-tailwindcss": "^0.6.8", - "svelte": "^5.0.0-next.264", + "svelte": "^5.1.4", "svelte-check": "^4.0.5", - "tailwindcss": "^3.4.13", + "tailwindcss": "^3.4.14", "typescript": "^5.6.3", - "typescript-eslint": "^8.8.1", - "vite": "^5.4.8" + "typescript-eslint": "^8.12.2", + "vite": "^5.4.10" }, "type": "module", "dependencies": { "@fontsource-variable/nunito-sans": "^5.1.0", - "@shikijs/rehype": "^1.22.0", - "bits-ui": "^0.21.16", + "@shikijs/rehype": "^1.22.2", + "@types/hast": "^3.0.4", + "@types/unist": "^3.0.3", + "bits-ui": "next", "date-fns": "^4.1.0", "gunzip-maybe": "^1.4.2", + "hast-util-heading": "^3.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-text": "^4.0.2", "lucide-svelte": "^0.446.0", + "rehype-infer-description-meta": "^2.0.0", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", + "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.1", + "remark-frontmatter": "^5.0.0", "remark-gemoji": "^8.0.0", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", - "shiki": "^1.22.0", + "shiki": "^1.22.2", "tar-stream": "^3.1.7", - "unified": "^11.0.5" + "unified": "^11.0.5", + "unist-util-map": "^4.0.0", + "vfile": "^6.0.3" }, "patchedDependencies": { "@shikijs/rehype@1.22.0": "patches/@shikijs%2Frehype@1.22.0.patch" diff --git a/website/src/app.css b/website/src/app.css index 660b89e..0883f6a 100644 --- a/website/src/app.css +++ b/website/src/app.css @@ -7,6 +7,7 @@ --color-card: 245 230 210; --color-card-hover: 240 225 205; --color-border: 200 180 160; + --color-header: 250 234 215; --color-body: 84 70 50; --color-heading: 70 55 35; @@ -44,13 +45,14 @@ --color-card: 28 22 17; --color-card-hover: 40 32 25; --color-border: 28 22 17; + --color-header: 20 16 12; --color-body: 198 167 140; --color-heading: 227 213 200; --color-light: 255 255 255; - --color-input-bg: 22 15 8; - --color-input-border: 82 60 41; + --color-input-bg: 20 13 8; + --color-input-border: 78 60 40; --color-placeholder: 169 147 128; --color-primary: 241 157 30; @@ -61,7 +63,8 @@ } html { - scroll-padding-top: theme(spacing.16); + scroll-padding-top: theme(spacing.24); + color-scheme: light dark; } body { @@ -78,3 +81,12 @@ body { opacity: 0; } } + +.hide-scrollbar::-webkit-scrollbar { + display: none; +} + +.hide-scrollbar { + -ms-overflow-style: none; + scrollbar-width: none; +} diff --git a/website/src/lib/components/Logomark.svelte b/website/src/lib/components/Logomark.svelte new file mode 100644 index 0000000..21e8346 --- /dev/null +++ b/website/src/lib/components/Logomark.svelte @@ -0,0 +1,9 @@ + + pesde + + diff --git a/website/src/lib/components/Select.svelte b/website/src/lib/components/Select.svelte new file mode 100644 index 0000000..f593bff --- /dev/null +++ b/website/src/lib/components/Select.svelte @@ -0,0 +1,74 @@ + + + + + {#snippet child({ props })} + {#if trigger} + {@render trigger(props, triggerLabel)} + {:else} + + {/if} + {/snippet} + + + + {#each items as { value, label, disabled } (value)} + + {#snippet children({ selected })} + {label} + {#if selected} + + {/if} + {/snippet} + + {/each} + + + diff --git a/website/src/lib/markdown.ts b/website/src/lib/markdown.ts new file mode 100644 index 0000000..2cab9b2 --- /dev/null +++ b/website/src/lib/markdown.ts @@ -0,0 +1,116 @@ +import rehypeShikiFromHighlighter from "@shikijs/rehype/core" +import type { Nodes } from "hast" +import { heading } from "hast-util-heading" +import { headingRank } from "hast-util-heading-rank" +import { toText } from "hast-util-to-text" +import rehypeInferDescriptionMeta from "rehype-infer-description-meta" +import rehypeRaw from "rehype-raw" +import rehypeSanitize from "rehype-sanitize" +import rehypeSlug from "rehype-slug" +import rehypeStringify from "rehype-stringify" +import remarkFrontmatter from "remark-frontmatter" +import remarkGemoji from "remark-gemoji" +import remarkGfm from "remark-gfm" +import remarkParse from "remark-parse" +import remarkRehype from "remark-rehype" +import { createCssVariablesTheme, createHighlighter } from "shiki" +import { unified } from "unified" +import type { Node } from "unist" +import { map } from "unist-util-map" + +const highlighter = createHighlighter({ + themes: [], + langs: [], +}) + +export const markdown = (async () => { + return unified() + .use(remarkParse) + .use(remarkFrontmatter) + .use(remarkGfm) + .use(remarkGemoji) + .use(remarkRehype, { allowDangerousHtml: true }) + .use(rehypeRaw) + .use(rehypeSanitize) + .use(rehypeShikiFromHighlighter, await highlighter, { + lazy: true, + theme: createCssVariablesTheme({ + name: "css-variables", + variablePrefix: "--shiki-", + variableDefaults: {}, + fontStyle: true, + }), + fallbackLanguage: "text", + }) + .use(rehypeStringify) + .freeze() +})() + +export type TocItem = { + id: string + title: string + level: number +} + +export const docsMarkdown = (async () => { + return unified() + .use(remarkParse) + .use(remarkFrontmatter) + .use(remarkGfm) + .use(remarkGemoji) + .use(remarkRehype, { allowDangerousHtml: true, clobberPrefix: "" }) + .use(rehypeSlug) + .use(() => (node, file) => { + const toc: TocItem[] = [] + file.data.toc = toc + + return map(node as Nodes, (node) => { + if (node.type === "element" && node.tagName === "a") { + const fullUrl = new URL(node.properties.href as string, `file://${file.path}`) + + let href = node.properties.href as string + if (fullUrl.protocol === "file:") { + href = file.data.basePath + fullUrl.pathname.replace(/\.mdx?$/, "") + fullUrl.hash + } + + return { + ...node, + properties: { + ...node.properties, + href, + }, + } + } + + if (heading(node)) { + const rank = headingRank(node) + if (rank && typeof node.properties.id === "string" && rank >= 2 && rank <= 3) { + toc.push({ + id: node.properties.id, + title: toText(node), + level: rank, + }) + } + } + + return node + }) as Node + }) + .use(rehypeRaw) + .use(rehypeSanitize) + .use(rehypeShikiFromHighlighter, await highlighter, { + lazy: true, + theme: createCssVariablesTheme({ + name: "css-variables", + variablePrefix: "--shiki-", + variableDefaults: {}, + fontStyle: true, + }), + fallbackLanguage: "text", + }) + .use(rehypeInferDescriptionMeta, { + selector: "p", + }) + .use(rehypeStringify) + .freeze() +})() diff --git a/website/src/lib/registry-api.ts b/website/src/lib/registry-api.ts index 06a3c62..99900ae 100644 --- a/website/src/lib/registry-api.ts +++ b/website/src/lib/registry-api.ts @@ -19,6 +19,7 @@ export type PackageResponse = { authors?: string[] repository?: string dependencies: Record + docs?: DocEntry[] } export type TargetInfo = { @@ -31,19 +32,38 @@ export type TargetKind = "roblox" | "roblox_server" | "lune" | "luau" export type DependencyEntry = [DependencyInfo, DependencyKind] -export type DependencyInfo = { - index: string - name: string - target?: string - version: string -} | { - index: string, - wally: string, - version: string, -} +export type DependencyInfo = + | { + index: string + name: string + target?: string + version: string + } + | { + index: string + wally: string + version: string + } export type DependencyKind = "standard" | "peer" | "dev" +export type DocEntry = DocEntryCategory | DocEntryPage + +export type DocEntryBase = { + label: string + position: number +} + +export type DocEntryCategory = DocEntryBase & { + items?: DocEntry[] + collapsed?: boolean +} + +export type DocEntryPage = DocEntryBase & { + name: string + hash: string +} + export const TARGET_KIND_DISPLAY_NAMES: Record = { roblox: "Roblox", roblox_server: "Roblox (server)", diff --git a/website/src/routes/(app)/+error.svelte b/website/src/routes/(app)/+error.svelte new file mode 100644 index 0000000..99b3ae6 --- /dev/null +++ b/website/src/routes/(app)/+error.svelte @@ -0,0 +1,8 @@ + + +

+

{$page.status}

+

{$page.error?.message}

+
diff --git a/website/src/routes/(app)/+layout.svelte b/website/src/routes/(app)/+layout.svelte new file mode 100644 index 0000000..29c6736 --- /dev/null +++ b/website/src/routes/(app)/+layout.svelte @@ -0,0 +1,14 @@ + + +
+ +
+ {@render children()} +
+ +