"use client"; import { Loader2, RotateCcw, Search } from "lucide-react"; import { FormEvent, useMemo, useState } from "react"; import type { AnalyzeRequest } from "@/types"; const EXAMPLE_SEQUENCE = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT"; const INITIAL_FORM = { variant_name: "", gene: "", sequence: "", notes: "" }; type VariantFormProps = { isLoading: boolean; onAnalyze: (input: AnalyzeRequest) => void; onClearResult: () => void; }; export function VariantForm({ isLoading, onAnalyze, onClearResult }: VariantFormProps) { const [form, setForm] = useState(INITIAL_FORM); const sequenceLength = useMemo(() => form.sequence.replace(/\s+/g, "").length, [form.sequence]); function updateField(field: keyof typeof form, value: string) { setForm((current) => ({ ...current, [field]: value })); } function handleSubmit(event: FormEvent) { event.preventDefault(); onAnalyze({ variant_name: form.variant_name.trim() || null, gene: form.gene.trim() || null, sequence: form.sequence, notes: form.notes.trim() || null }); } function handleClear() { setForm(INITIAL_FORM); onClearResult(); } return (

Sequence input

Analyze Variant Sequence

GRCh38