'use client'; import React, { useEffect, useState } from 'react'; import { cn } from '@/components/ui/utils'; import { useAnalytics } from '../analytics/useAnalytics'; import { AnalyticsEvents } from '../analytics/analytics-events'; interface TocItem { id: string; text: string; level: number; } interface TableOfContentsProps { headings: TocItem[]; locale: string; } export default function TableOfContents({ headings, locale }: TableOfContentsProps) { const [activeId, setActiveId] = useState(''); const { trackEvent } = useAnalytics(); useEffect(() => { const observerOptions = { rootMargin: '-10% 0% -70% 0%', threshold: 0, }; const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { setActiveId(entry.target.id); } }); }, observerOptions); // Use a small delay to ensure MDX content is rendered and IDs are present const timer = setTimeout(() => { const elements = headings.map((h) => document.getElementById(h.id)); elements.forEach((el) => { if (el) observer.observe(el); }); }, 500); return () => { clearTimeout(timer); observer.disconnect(); }; }, [headings]); if (headings.length === 0) return null; return ( ); }