'use client'; import { AnimatePresence, motion } from 'framer-motion'; import { useEffect } from 'react'; import { Message } from './ChatBlock'; import { useWindowSize } from 'usehooks-ts'; interface SidebarProps { messages: Message[]; input: string; setInput: (value: string) => void; handleSubmit: (e: React.FormEvent) => void; isOpen: boolean; onToggle: () => void; } export default function Sidebar({ messages, input, setInput, handleSubmit, isOpen, onToggle, }: SidebarProps) { const { width } = useWindowSize(); const isMobile = width ? width < 768 : false; useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { // Handle CMD+K shortcut on desktop if (!isMobile && (e.metaKey || e.ctrlKey) && e.key === 'k') { e.preventDefault(); onToggle(); } // Handle Escape on mobile when sidebar is open if (isMobile && isOpen && e.key === 'Escape') { e.preventDefault(); onToggle(); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [onToggle, isMobile, isOpen]); const springConfig = { type: 'spring', stiffness: 350, damping: 30, }; return ( {isOpen && (

Chat History

{!isMobile && ( ⌘K )}
{messages.map((message) => ( {message.content} ))}
setInput(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-[#FF3B00] focus:border-transparent font-ppsupply" placeholder="Type a message..." /> {!isMobile && (
+
)}
)}
); }