import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; import { Textarea } from '@/components/ui/textarea'; import { useMitt } from '@/plugins/MittContext'; import useVideoEditorStore from '@/stores/VideoEditorStore'; import { Bold, Italic, Minus, Plus, Type } from 'lucide-react'; import { useEffect, useState } from 'react'; // Font configuration - extensible for adding more fonts const AVAILABLE_FONTS = [ { name: 'Montserrat', value: 'Montserrat', fontFiles: { normal: '/fonts/Montserrat/static/Montserrat-Regular.ttf', bold: '/fonts/Montserrat/static/Montserrat-Bold.ttf', italic: '/fonts/Montserrat/static/Montserrat-Italic.ttf', boldItalic: '/fonts/Montserrat/static/Montserrat-BoldItalic.ttf', }, }, ]; export default function TextSidebar({ isOpen, onClose }) { const { selectedTextElement } = useVideoEditorStore(); const emitter = useMitt(); const [textValue, setTextValue] = useState(''); const [fontSize, setFontSize] = useState(24); const [isBold, setIsBold] = useState(true); const [isItalic, setIsItalic] = useState(false); const [fontFamily, setFontFamily] = useState('Montserrat'); // Font size constraints const MIN_FONT_SIZE = 8; const MAX_FONT_SIZE = 120; const FONT_SIZE_STEP = 2; // Update state when selected element changes useEffect(() => { if (selectedTextElement) { setTextValue(selectedTextElement.text || ''); setFontSize(selectedTextElement.fontSize || 24); setIsBold(selectedTextElement.fontWeight === 'bold' || selectedTextElement.fontWeight === 700 || true); setIsItalic(selectedTextElement.fontStyle === 'italic' || false); setFontFamily(selectedTextElement.fontFamily || 'Montserrat'); } }, [selectedTextElement]); // Handle text changes const handleTextChange = (e) => { const newText = e.target.value; setTextValue(newText); if (selectedTextElement) { emitter.emit('text-update', { elementId: selectedTextElement.id, updates: { text: newText }, }); } }; // Handle font size changes const handleFontSizeChange = (newSize) => { const clampedSize = Math.max(MIN_FONT_SIZE, Math.min(MAX_FONT_SIZE, newSize)); setFontSize(clampedSize); if (selectedTextElement) { emitter.emit('text-update', { elementId: selectedTextElement.id, updates: { fontSize: clampedSize }, }); } }; // Handle font family changes const handleFontFamilyChange = (newFontFamily) => { setFontFamily(newFontFamily); if (selectedTextElement) { emitter.emit('text-update', { elementId: selectedTextElement.id, updates: { fontFamily: newFontFamily }, }); } }; // Handle bold toggle const handleBoldToggle = () => { const newBoldState = !isBold; setIsBold(newBoldState); if (selectedTextElement) { emitter.emit('text-update', { elementId: selectedTextElement.id, updates: { fontWeight: newBoldState ? 'bold' : 'normal' }, }); } }; // Handle italic toggle const handleItalicToggle = () => { const newItalicState = !isItalic; setIsItalic(newItalicState); if (selectedTextElement) { emitter.emit('text-update', { elementId: selectedTextElement.id, updates: { fontStyle: newItalicState ? 'italic' : 'normal' }, }); } }; // Increase font size const increaseFontSize = () => { handleFontSizeChange(fontSize + FONT_SIZE_STEP); }; // Decrease font size const decreaseFontSize = () => { handleFontSizeChange(fontSize - FONT_SIZE_STEP); }; return ( !open && onClose()}> Edit Text
{selectedTextElement ? ( <> {/* Text Content */}