diff --git a/app/Http/Controllers/UserAIController.php b/app/Http/Controllers/UserAIController.php new file mode 100644 index 0000000..9058a71 --- /dev/null +++ b/app/Http/Controllers/UserAIController.php @@ -0,0 +1,13 @@ + { )} + > ); }; diff --git a/resources/js/modules/editor/partials/editor-ai-sheet.jsx b/resources/js/modules/editor/partials/editor-ai-sheet.jsx new file mode 100644 index 0000000..0ddee16 --- /dev/null +++ b/resources/js/modules/editor/partials/editor-ai-sheet.jsx @@ -0,0 +1,74 @@ +'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 { cn } from '@/lib/utils'; +import { useMitt } from '@/plugins/MittContext'; +import CoinIcon from '@/reusables/coin-icon'; +import { useEffect, useState } from 'react'; + +const EditorAISheet = () => { + const [isOpen, setIsOpen] = useState(false); + const [prompt, setPrompt] = useState(''); + const emitter = useMitt(); + + useEffect(() => { + const openSheetListener = () => { + setIsOpen(true); + }; + + emitter.on('open-ai-editor-sheet', openSheetListener); + + return () => { + emitter.off('open-ai-editor-sheet', openSheetListener); + }; + }, [emitter]); + + const handleOpenChange = (open) => { + setIsOpen(open); + }; + + const handleSend = () => { + if (prompt.trim()) { + console.log('Sending prompt:', prompt); + setPrompt(''); + } + }; + + return ( + + + + What can I help with? + + + + + + setPrompt(e.target.value)} + className="bg-muted/30 max-h-20 min-h-12 resize-none rounded-3xl border-0 p-4 text-base" + /> + + Generate Meme + + 1 + + + + + + + ); +}; + +export default EditorAISheet; diff --git a/resources/js/modules/editor/partials/editor-controls.jsx b/resources/js/modules/editor/partials/editor-controls.jsx index ed1dd14..59a4893 100644 --- a/resources/js/modules/editor/partials/editor-controls.jsx +++ b/resources/js/modules/editor/partials/editor-controls.jsx @@ -22,6 +22,10 @@ const EditorControls = ({ className = '', onEditClick = () => {}, isEditActive = emitter.emit('video-open-download-modal'); }; + const handleAIButton = () => { + emitter.emit('open-ai-editor-sheet'); + }; + const togglePlayPause = () => { if (videoIsPlaying) { handleReset(); @@ -62,7 +66,7 @@ const EditorControls = ({ className = '', onEditClick = () => {}, isEditActive = */} - + AI diff --git a/routes/api.php b/routes/api.php index ae2457e..c29f0ab 100644 --- a/routes/api.php +++ b/routes/api.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Auth\SanctumAuthController; use App\Http\Controllers\FrontMediaController; use App\Http\Controllers\UserAccountController; +use App\Http\Controllers\UserAIController; use App\Http\Controllers\UserExportController; use App\Http\Controllers\UserPurchaseController; use Illuminate\Support\Facades\Route; @@ -14,6 +15,8 @@ Route::post('/pricing', [UserPurchaseController::class, 'pricingPage'])->name('api.pricing_page'); +Route::post('/ai-hints', [UserAIController::class, 'aiHints'])->name('api.ai_hints'); + Route::middleware('auth:sanctum')->group(function () { Route::group(['prefix' => 'user'], function () {