@@ -608,6 +608,7 @@ export default function PublicNotePage() {
608608 const [ theme , setTheme ] = useState < Theme > ( getSystemTheme ) ;
609609 const [ showScrollTop , setShowScrollTop ] = useState ( false ) ;
610610 const [ processedContent , setProcessedContent ] = useState < string > ( '' ) ;
611+ const [ tocExpanded , setTocExpanded ] = useState ( false ) ;
611612 const contentRef = useRef < HTMLDivElement > ( null ) ;
612613
613614 // Get slug from URL
@@ -873,19 +874,29 @@ export default function PublicNotePage() {
873874 if ( toggleBtn ) {
874875 e . preventDefault ( ) ;
875876 e . stopPropagation ( ) ;
876-
877- const tocContainer = toggleBtn . closest ( '.toc-container' ) ;
878-
879- if ( tocContainer ) {
880- tocContainer . classList . toggle ( 'toc-collapsed' ) ;
881- }
877+ setTocExpanded ( prev => ! prev ) ;
882878 }
883879 } ;
884880
885881 container . addEventListener ( 'click' , handleClick ) ;
886882 return ( ) => container . removeEventListener ( 'click' , handleClick ) ;
887883 } , [ processedContent ] ) ;
888884
885+ // Apply TOC expanded/collapsed state to DOM
886+ useEffect ( ( ) => {
887+ const container = contentRef . current ;
888+ if ( ! container ) return ;
889+
890+ const tocContainer = container . querySelector ( '.toc-container' ) ;
891+ if ( tocContainer ) {
892+ tocContainer . classList . toggle ( 'toc-collapsed' , ! tocExpanded ) ;
893+ const toggleBtn = tocContainer . querySelector ( '.toc-toggle' ) ;
894+ if ( toggleBtn ) {
895+ toggleBtn . setAttribute ( 'aria-expanded' , String ( tocExpanded ) ) ;
896+ }
897+ }
898+ } , [ tocExpanded , processedContent ] ) ;
899+
889900 const toggleTheme = ( ) => {
890901 setTheme ( ( current ) => current === 'light' ? 'dark' : 'light' ) ;
891902 } ;
0 commit comments