'use client';
import { useState, useEffect } from 'react';
import { createPortal } from 'react-dom';
import { FiList, FiChevronRight } from 'react-icons/fi';
import { PostToc } from './post-toc';
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
export function PostLayout({ children, hasToc = true, contentKey }: { children: React.ReactNode; hasToc?: boolean; contentKey?: string }) {
const [isTocOpen, setIsTocOpen] = useState(hasToc);
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
const tocButton = hasToc && mounted ? (
) : null;
return (
{/* Main Content Area */}
{/* Desktop Sidebar (TOC) */}
{/* Mobile TOC Overlay */}
{isTocOpen && hasToc && (
)}
{/* Toggle Button - Rendered via Portal */}
{tocButton && createPortal(tocButton, document.body)}
);
}