diff --git a/src/components/analysis-tab.tsx b/src/components/analysis-tab.tsx new file mode 100644 index 0000000..0b624f8 --- /dev/null +++ b/src/components/analysis-tab.tsx @@ -0,0 +1,327 @@ +"use client"; + +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Card, CardContent } from "@/components/ui/card"; +import { + Edit, + Check, + ImageOff, + ShieldCheck, + ShieldX, + Link as LinkIcon, +} from "lucide-react"; +import { LengthIndicator } from "./length-indicator"; +import { CopyButton } from "./copy-button"; +import { SerpPreview } from "./serp-preview"; +import { KeywordHighlighter } from "./keyword-highlighter"; +import { Badge } from "./ui/badge"; +import type { MetaData } from "@/lib/types"; + +interface AnalysisTabProps { + metaData: MetaData; + url: string; + editableTitle: string; + setEditableTitle: (title: string) => void; + isEditingTitle: boolean; + setIsEditingTitle: (isEditing: boolean) => void; + editableDescription: string; + setEditableDescription: (description: string) => void; + isEditingDescription: boolean; + setIsEditingDescription: (isEditing: boolean) => void; + imageError: boolean; + setImageError: (hasError: boolean) => void; +} + +export function AnalysisTab({ + metaData, + url, + editableTitle, + setEditableTitle, + isEditingTitle, + setIsEditingTitle, + editableDescription, + setEditableDescription, + isEditingDescription, + setIsEditingDescription, + imageError, + setImageError, +}: AnalysisTabProps) { + return ( + + +
+
+
+

+ 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 ? ( +