'use client'; import { useState, useCallback, useEffect, ReactNode } from 'react'; import RecipesSidebar from './RecipesSidebar'; import type { FacetCounts, FilterState } from '@/lib/types'; interface RecipeLayoutProps { children: ReactNode; categories: string[]; tags: string[]; facetCounts: FacetCounts; resultCount: number; filters: FilterState; onFilterChange: (filters: FilterState) => void; } export default function RecipeLayout({ children, categories, tags, facetCounts, resultCount, filters, onFilterChange, }: RecipeLayoutProps) { const [sidebarOpen, setSidebarOpen] = useState(false); const handleFilterChange = useCallback((newFilters: FilterState) => { onFilterChange(newFilters); }, [onFilterChange]); // Close the mobile drawer on Escape useEffect(() => { if (!sidebarOpen) return; const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') setSidebarOpen(false); }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [sidebarOpen]); const activeFilterCount = (filters.search ? 1 : 0) + (filters.category ? 1 : 0) + filters.selectedTags.length; return (