diff --git a/.vscode/settings.json b/.vscode/settings.json index 77fb0e24b..f53df0c19 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -249,6 +249,7 @@ "winrate", "wireframe", "Woah", + "wooorm", "WOTB", "wotblitz", "wotbreplay", diff --git a/bun.lock b/bun.lock index 2a1cc768e..1cda5c8ff 100644 --- a/bun.lock +++ b/bun.lock @@ -210,12 +210,14 @@ "@types/react-dom": "^19.2.2", "@types/three": "^0.180.0", "@vite-pwa/astro": "^1.1.0", + "@wooorm/starry-night": "^3.9.0", "astro": "^5.14.4", "astro-favicons": "^3.1.5", "autoprefixer": "^10.4.23", "cssnano": "^7.1.2", "fuzzysort": "^3.1.0", "googleapis": "^171.1.0", + "hast-util-to-jsx-runtime": "^2.3.6", "immer": "^10.1.3", "lodash-es": "^4.17.21", "postcss": "^8.5.6", @@ -1262,6 +1264,8 @@ "@webgpu/types": ["@webgpu/types@0.1.69", "", {}, "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ=="], + "@wooorm/starry-night": ["@wooorm/starry-night@3.9.0", "", { "dependencies": { "@types/hast": "^3.0.0", "import-meta-resolve": "^4.0.0", "vscode-oniguruma": "^2.0.0", "vscode-textmate": "^9.0.0" } }, "sha512-LXVGKfYhTuFhoRuPAHz2XolS/J45L4lI/lCSIBugDpklXYDUPrJyA8tk17u7G32fcFaGODJXH/YDwQDfUXdPRw=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], @@ -2932,6 +2936,10 @@ "vscode-nls": ["vscode-nls@5.2.0", "", {}, "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="], + "vscode-oniguruma": ["vscode-oniguruma@2.0.1", "", {}, "sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ=="], + + "vscode-textmate": ["vscode-textmate@9.3.2", "", {}, "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q=="], + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], diff --git a/packages/website-ue/package.json b/packages/website-ue/package.json index cf1c27fc8..db75b43dd 100644 --- a/packages/website-ue/package.json +++ b/packages/website-ue/package.json @@ -29,12 +29,14 @@ "@types/react-dom": "^19.2.2", "@types/three": "^0.180.0", "@vite-pwa/astro": "^1.1.0", + "@wooorm/starry-night": "^3.9.0", "astro": "^5.14.4", "astro-favicons": "^3.1.5", "autoprefixer": "^10.4.23", "cssnano": "^7.1.2", "fuzzysort": "^3.1.0", "googleapis": "^171.1.0", + "hast-util-to-jsx-runtime": "^2.3.6", "immer": "^10.1.3", "lodash-es": "^4.17.21", "postcss": "^8.5.6", diff --git a/packages/website-ue/src/components/ApiDescription.astro b/packages/website-ue/src/components/ApiDescription.astro index 3c9e70643..ad195bbde 100644 --- a/packages/website-ue/src/components/ApiDescription.astro +++ b/packages/website-ue/src/components/ApiDescription.astro @@ -1,5 +1,6 @@ --- import ApiMacroSee from "./ApiMacroSee.astro"; +import ApiMacroType from "./ApiMacroType.astro"; import { MarkdownCustom } from "./MarkdownCustom"; interface Props { @@ -54,6 +55,8 @@ for (const line of bodyOriginal.split("\n")) {
;
+ return ;
}
diff --git a/packages/website-ue/src/components/HighlightedCode.astro b/packages/website-ue/src/components/HighlightedCode.astro
new file mode 100644
index 000000000..d2f730566
--- /dev/null
+++ b/packages/website-ue/src/components/HighlightedCode.astro
@@ -0,0 +1,23 @@
+---
+import { all, createStarryNight } from "@wooorm/starry-night";
+import { HighlightedCodeContent } from "./HighlightedCodeContent";
+
+interface Props {
+ lang: string;
+ content: string;
+}
+
+const { lang, content } = Astro.props;
+
+const starryNight = await createStarryNight(all);
+const scope = starryNight.flagToScope(lang);
+
+if (scope === undefined && lang.length > 0) {
+ throw new Error(`Unsupported language: ${lang}`);
+}
+
+const tree =
+ lang.length === 0 ? content : starryNight.highlight(content, scope!);
+---
+
+
+ );
+}
diff --git a/packages/website-ue/src/components/SyntaxStyles.astro b/packages/website-ue/src/components/SyntaxStyles.astro
new file mode 100644
index 000000000..c97fb2507
--- /dev/null
+++ b/packages/website-ue/src/components/SyntaxStyles.astro
@@ -0,0 +1,3 @@
+
diff --git a/packages/website-ue/src/pages/[...locale]/api/index.astro b/packages/website-ue/src/pages/[...locale]/api/index.astro
index e3632d7df..2e1863940 100644
--- a/packages/website-ue/src/pages/[...locale]/api/index.astro
+++ b/packages/website-ue/src/pages/[...locale]/api/index.astro
@@ -4,6 +4,7 @@ import { getCollection } from "astro:content";
import ApiGroup from "../../../components/ApiGroup.astro";
import { Heading } from "../../../components/Heading";
import { Section } from "../../../components/Section";
+import SyntaxStyles from "../../../components/SyntaxStyles.astro";
import ToolBanner from "../../../components/ToolBanner.astro";
import { api } from "../../../core/api/dynamic";
import { tools } from "../../../core/tools/tools";
@@ -25,6 +26,7 @@ paths.sort((a, b) => a.path.localeCompare(b.path));