"use client"; import { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Globe, Edit, Check, Loader2, X, ImageOff } from "lucide-react"; import { extractMetaData } from "@/app/actions"; import { LengthIndicator } from "./length-indicator"; import { CopyButton } from "./copy-button"; import { SerpPreview } from "./serp-preview"; import { ResultsSkeleton } from "./results-skeleton"; interface MetaData { title: string; description: string; image?: string | null; } export function MetaForm() { const [url, setUrl] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [metaData, setMetaData] = useState(null); const [isEditingTitle, setIsEditingTitle] = useState(false); const [isEditingDescription, setIsEditingDescription] = useState(false); const [editableTitle, setEditableTitle] = useState(""); const [editableDescription, setEditableDescription] = useState(""); const [imageError, setImageError] = useState(false); useEffect(() => { if (metaData) { setEditableTitle(metaData.title); setEditableDescription(metaData.description); setImageError(false); } }, [metaData]); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); setLoading(true); setError(null); setMetaData(null); setIsEditingTitle(false); setIsEditingDescription(false); setImageError(false); const result = await extractMetaData(url); if (result.error) { setError(result.error); } else if (result.data) { setMetaData(result.data); } setLoading(false); }; const handleClear = () => { setUrl(""); setLoading(false); setError(null); setMetaData(null); }; return (
setUrl(e.target.value)} />
{(url || metaData || error) && ( )}
{loading && } {!loading && error && (

{error}

)} {!loading && metaData && ( Extraction Results

SERP Preview

{metaData.image && (

Preview Image

{!imageError ? ( Meta preview image setImageError(true)} /> ) : (
Image not available
)}
)}

Meta Title

{editableTitle.length} Characters

The title of the page, ideally between 30 and 60 characters.

{isEditingTitle ? ( setEditableTitle(e.target.value)} className="w-full" placeholder="Meta Title" /> ) : (

{editableTitle || "Not found"}

)}

Meta Description

{editableDescription.length} Characters

A brief summary of the page's content, ideally between 120 and 158 characters.

{isEditingDescription ? (