"use client"; import { useState } from "react"; import { useForm } from "@tanstack/react-form"; import { z } from "zod"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Loader2, Terminal, AlertTriangle, CheckCircle } from "lucide-react"; interface ShellCommandFormProps { onExecute: (command: string) => Promise<{ success: boolean; output: string }>; } export function ShellCommandForm({ onExecute }: ShellCommandFormProps) { const [isLoading, setIsLoading] = useState(false); // init form const form = useForm({ defaultValues: { command: "", }, onSubmit: async ({ value }) => { setIsLoading(true); try { const res = await onExecute(value.command); if (res.success) { form.reset(); } } finally { setIsLoading(false); } }, }); return (