import { useState } from 'react'; import { useScrapbook } from '../context/ScrapbookContext'; import { PaintBucket, X } from 'lucide-react'; interface BackgroundSelectorProps { pageId: string; } // Mock background data const PAPER_BACKGROUNDS = [ { id: 'vintage', url: 'https://img.freepik.com/free-photo/brown-concrete-wall-with-scratches_1339-4193.jpg' }, { id: 'craft', url: 'https://img.freepik.com/free-photo/brown-paper-texture_95678-75.jpg' }, { id: 'watercolor', url: 'https://img.freepik.com/free-photo/abstract-watercolor-paper-background_23-2149060409.jpg' }, { id: 'newspaper', url: 'https://img.freepik.com/free-photo/old-newspaper-background_1194-6309.jpg' }, { id: 'music', url: 'https://img.freepik.com/free-photo/sheet-music-notes_144627-16624.jpg' } ]; const PATTERN_BACKGROUNDS = [ { id: 'polkadot', url: 'https://img.freepik.com/free-vector/polka-dots-pattern-design_53876-90531.jpg' }, { id: 'gingham-red', url: 'https://img.freepik.com/free-vector/red-white-gingham-pattern-background_1409-1599.jpg' }, { id: 'floral', url: 'https://img.freepik.com/free-vector/vintage-floral-background_1284-38654.jpg' }, { id: 'stripes', url: 'https://img.freepik.com/free-vector/vintage-striped-seamless-pattern_1409-2938.jpg' }, { id: 'hearts', url: 'https://img.freepik.com/free-vector/hand-drawn-heart-pattern_1189-1510.jpg' } ]; const COLOR_BACKGROUNDS = [ { id: 'cream', color: '#FFF8E1' }, { id: 'pink', color: '#FCE4EC' }, { id: 'light-blue', color: '#E3F2FD' }, { id: 'mint', color: '#E8F5E9' }, { id: 'lavender', color: '#F3E5F5' }, { id: 'peach', color: '#FFF3E0' } ]; export default function BackgroundSelector({ pageId }: BackgroundSelectorProps) { const { updatePageBackground } = useScrapbook(); const [isOpen, setIsOpen] = useState(false); const [activeTab, setActiveTab] = useState<'paper' | 'pattern' | 'color'>('paper'); const handleSelectBackground = (type: 'paper' | 'pattern' | 'color', value: string) => { updatePageBackground(pageId, type, value); setIsOpen(false); }; return (
{isOpen && (

Select Background

{activeTab === 'paper' && (
{PAPER_BACKGROUNDS.map(bg => ( ))}
)} {activeTab === 'pattern' && (
{PATTERN_BACKGROUNDS.map(bg => ( ))}
)} {activeTab === 'color' && (
{COLOR_BACKGROUNDS.map(bg => (
)}
)}
); } import { useState } from 'react'; import { useScrapbook } from '../context/ScrapbookContext'; import { BookOpen, X } from 'lucide-react'; interface AddJournalEntryProps { pageId: string; } export default function AddJournalEntry({ pageId }: AddJournalEntryProps) { const { addJournalEntry } = useScrapbook(); const [isAdding, setIsAdding] = useState(false); const [title, setTitle] = useState(''); const [content, setContent] = useState(''); const handleAdd = () => { if (!content.trim()) return; const today = new Date(); const formattedDate = today.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' }); addJournalEntry(pageId, { title: title || undefined, content, date: formattedDate }); setTitle(''); setContent(''); setIsAdding(false); }; if (!isAdding) { return ( ); } return (

New Journal Entry

setTitle(e.target.value)} className="w-full px-3 py-2 border border-amber-300 rounded-lg" placeholder="Add a title..." />