From 53d6e18e815be96a50270c4998175e9c10032330 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Mon, 04 Aug 2025 05:44:35 +0000
Subject: [PATCH] fix(a11y): aria-controls and role fixes

---
 quartz/components/TableOfContents.tsx |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/quartz/components/TableOfContents.tsx b/quartz/components/TableOfContents.tsx
index f3dc905..bbccf82 100644
--- a/quartz/components/TableOfContents.tsx
+++ b/quartz/components/TableOfContents.tsx
@@ -17,6 +17,7 @@
   layout: "modern",
 }
 
+let numTocs = 0
 export default ((opts?: Partial<Options>) => {
   const layout = opts?.layout ?? defaultOptions.layout
   const { OverflowList, overflowListAfterDOMLoaded } = OverflowListFactory()
@@ -29,12 +30,13 @@
       return null
     }
 
+    const id = `toc-${numTocs++}`
     return (
       <div class={classNames(displayClass, "toc")}>
         <button
           type="button"
           class={fileData.collapseToc ? "collapsed toc-header" : "toc-header"}
-          aria-controls="toc-content"
+          aria-controls={id}
           aria-expanded={!fileData.collapseToc}
         >
           <h3>{i18n(cfg.locale).components.tableOfContents.title}</h3>
@@ -53,7 +55,10 @@
             <polyline points="6 9 12 15 18 9"></polyline>
           </svg>
         </button>
-        <OverflowList class={fileData.collapseToc ? "collapsed toc-content" : "toc-content"}>
+        <OverflowList
+          id={id}
+          class={fileData.collapseToc ? "collapsed toc-content" : "toc-content"}
+        >
           {fileData.toc.map((tocEntry) => (
             <li key={tocEntry.slug} class={`depth-${tocEntry.depth}`}>
               <a href={`#${tocEntry.slug}`} data-for={tocEntry.slug}>

--
Gitblit v1.10.0