From 00f057867760dff5fdd62654ea9cfbfd590311cf Mon Sep 17 00:00:00 2001 From: Jason Stirnaman Date: Fri, 6 Mar 2026 16:18:11 -0600 Subject: [PATCH] fix(api): add scroll highlighting to server-rendered TOC The server-rendered TOC path returned early without setting up the IntersectionObserver, so the is-active class was never applied to TOC links during scroll. Extract entry IDs from pre-rendered links and pass them to setupScrollHighlighting. --- assets/js/components/api-toc.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/assets/js/components/api-toc.ts b/assets/js/components/api-toc.ts index 8860df35e..cc75120af 100644 --- a/assets/js/components/api-toc.ts +++ b/assets/js/components/api-toc.ts @@ -377,9 +377,27 @@ export default function ApiToc({ component }: ComponentOptions): void { const hasServerRenderedToc = nav.querySelectorAll('.api-toc-link').length > 0; if (hasServerRenderedToc) { - // Server-side TOC exists - just show it and set up navigation + // Server-side TOC exists - show it, set up navigation and scroll highlighting component.classList.remove('is-hidden'); setupSmoothScroll(component); + + // Extract entries from pre-rendered links for scroll highlighting + const preRenderedLinks = + nav.querySelectorAll('.api-toc-link'); + const preRenderedEntries: TocEntry[] = []; + preRenderedLinks.forEach((link) => { + const href = link.getAttribute('href'); + if (href?.startsWith('#')) { + preRenderedEntries.push({ + id: href.slice(1), + text: link.textContent?.trim() || '', + level: 2, + }); + } + }); + if (preRenderedEntries.length > 0) { + setupScrollHighlighting(component, preRenderedEntries); + } return; }