diff --git a/packages/ui/src/context/marked-parser.test.ts b/packages/ui/src/context/marked-parser.test.ts
index 3c79e0afa712..f1e9597065ae 100644
--- a/packages/ui/src/context/marked-parser.test.ts
+++ b/packages/ui/src/context/marked-parser.test.ts
@@ -9,6 +9,18 @@ test("renders links with application attributes", async () => {
)
})
+test("keeps in-document links in the current document", async () => {
+ expect(await parser.parse("[Install](#install)")).toBe(
+ '
Install
\n',
+ )
+})
+
+test("adds unique ids to headings", async () => {
+ expect(await parser.parse("# Install\n\n## Install\n\n## API & Usage\n\n## Install")).toBe(
+ 'Install
\nInstall
\nAPI & Usage
\nInstall
\n',
+ )
+})
+
test("renders inline and block math", async () => {
expect(await parser.parse("\\(x^2\\)")).toContain('')
expect(await parser.parse("$$\nx^2\n$$\n")).toContain('')
diff --git a/packages/ui/src/context/marked-parser.tsx b/packages/ui/src/context/marked-parser.tsx
index 71e48351ca53..d4702edcc6db 100644
--- a/packages/ui/src/context/marked-parser.tsx
+++ b/packages/ui/src/context/marked-parser.tsx
@@ -3,12 +3,25 @@ import { Marked, type MarkedExtension, type Tokens } from "marked"
import markedShiki from "marked-shiki"
export function createMarkdownParser(highlight: (code: string, language: string) => string | Promise) {
+ const headingCounts = new WeakMap