import React, { useEffect, useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { XIcon, InfoIcon } from '@phosphor-icons/react'; import { useSidePanel } from '../context/SidePanelContext'; import LuxeArt from './LuxeArt'; const LuxeSidePanel = () => { const { isOpen, closeSidePanel, panelTitle, panelContent, panelWidth, setPanelWidth, } = useSidePanel(); const [isResizing, setIsResizing] = useState(false); // Close on escape key useEffect(() => { const handleKeyDown = (event) => { if (event.key === 'Escape' && isOpen) { closeSidePanel(); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [isOpen, closeSidePanel]); // Handle resizing useEffect(() => { const handleMouseMove = (e) => { if (!isResizing) return; const newWidth = window.innerWidth - e.clientX; if (newWidth > 350 && newWidth < window.innerWidth * 0.85) { setPanelWidth(newWidth); } }; const handleMouseUp = () => { setIsResizing(false); }; if (isResizing) { window.addEventListener('mousemove', handleMouseMove); window.addEventListener('mouseup', handleMouseUp); document.body.style.cursor = 'ew-resize'; document.body.style.userSelect = 'none'; } else { document.body.style.cursor = 'default'; document.body.style.userSelect = 'auto'; } return () => { window.removeEventListener('mousemove', handleMouseMove); window.removeEventListener('mouseup', handleMouseUp); document.body.style.cursor = 'default'; document.body.style.userSelect = 'auto'; }; }, [isResizing, setPanelWidth]); const variants = { open: { x: 0, opacity: 1 }, closed: { x: '100%', opacity: 1 }, }; return ( {isOpen && ( <> {/* Backdrop with Luxe blur */} {/* Background Texture */}
{/* Resize Handle */}
{ setIsResizing(true); e.preventDefault(); }} className="absolute left-0 top-0 bottom-0 w-1.5 cursor-ew-resize hover:bg-[#8D4004]/20 transition-all z-[120]" /> {/* Header */}
Reference Panel

{panelTitle}

{/* Content Area */}
{panelContent}
{/* Panel Footer */}
Structural Node // {Math.round(panelWidth)}PX
)} ); }; export default LuxeSidePanel;