'use client'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet'; import { Spinner } from '@/components/ui/spinner'; import { cn } from '@/lib/utils'; import { useMitt } from '@/plugins/MittContext'; import CoinIcon from '@/reusables/coin-icon'; import useMediaStore from '@/stores/MediaStore'; import useUserStore from '@/stores/UserStore'; import { usePage } from '@inertiajs/react'; import { useEffect, useState } from 'react'; const EditorAISheet = () => { const [isOpen, setIsOpen] = useState(false); const [prompt, setPrompt] = useState(''); const emitter = useMitt(); const { generateMeme, isGeneratingMeme, keywords, isLoadingAIHints, fetchAIHints } = useMediaStore(); const { credits } = useUserStore(); const { auth } = usePage().props; useEffect(() => { const openSheetListener = () => { setIsOpen(true); fetchAIHints(); }; emitter.on('open-ai-editor-sheet', openSheetListener); return () => { emitter.off('open-ai-editor-sheet', openSheetListener); }; }, [emitter, fetchAIHints]); const handleOpenChange = (open) => { setIsOpen(open); }; const handleSend = () => { if (prompt.trim()) { generateMeme(prompt); } }; return ( button]:hidden')} onInteractOutside={(e) => isGeneratingMeme && e.preventDefault()} onEscapeKeyDown={(e) => isGeneratingMeme && e.preventDefault()} > {isGeneratingMeme ? 'Creating...' : 'What meme would you like to create?'}
setPrompt(e.target.value)} className="bg-muted/30 max-h-20 min-h-12 resize-none rounded-3xl border-0 p-4 text-center text-base" /> {/* AI Keywords */} {isLoadingAIHints &&
Loading AI hints...
} {keywords.length > 0 && !isLoadingAIHints && (
{keywords.map((keyword, index) => ( ))}
)}
{auth.user ? ( <>
A new meme costs 1 credit for AI captions & 1 credit for AI background.{' '}
You have {credits} credits remaining.
) : ( <>
Login / Signup to use AI features.
)}
); }; export default EditorAISheet;