'use client' import { useState } from 'react' import AnalystSelector from './AnalystSelector' import { useRunSubmit } from '../hooks/useRunSubmit' import { DEFAULT_FORM } from '../types' import type { NewRunFormState } from '../types' function SectionCard({ step, title, subtitle, children, }: { step: number title: string subtitle?: string children: React.ReactNode }) { return ( {/* Section header */} {String(step).padStart(2, '0')} {title} {subtitle && ( {subtitle} )} {/* Section body */} {children} ) } function FieldLabel({ children }: { children: React.ReactNode }) { return ( {children} ) } export default function RunConfigForm() { const [form, setForm] = useState(DEFAULT_FORM) const { submit, loading, error } = useRunSubmit() const set = (k: keyof NewRunFormState, v: unknown) => setForm((f) => ({ ...f, [k]: v })) return ( { e.preventDefault(); submit(form) }} className="space-y-3" > {/* Error */} {error && ( {error} )} {/* ── Section 1: Target ─────────────────────────────────────── */} Ticker Symbol set('ticker', e.target.value.toUpperCase())} required style={{ letterSpacing: '0.12em' }} /> Trade Date set('date', e.target.value)} required /> {/* ── Section 2: Model ──────────────────────────────────────── */} LLM Provider set('llm_provider', e.target.value)} > Anthropic OpenAI Google Deep Think LLM set('deep_think_llm', e.target.value)} /> Quick Think LLM set('quick_think_llm', e.target.value)} /> Debate Rounds set('max_debate_rounds', Number(e.target.value))} /> Risk Discussion Rounds set('max_risk_discuss_rounds', Number(e.target.value))} /> {/* ── Section 3: Analysts ───────────────────────────────────── */} set('enabled_analysts', v)} /> {/* ── Submit ────────────────────────────────────────────────── */} 2–5 min · varies by model {loading ? ( <> Starting… > ) : ( <> Run Analysis > )} ) }