"use client" import * as React from "react" import { cn } from "@/lib/utils" export type JsonInputProps = Omit, "value" | "defaultValue"> & { value?: string defaultValue?: string onValueChange?: (value: string, parsed: unknown | null, valid: boolean) => void invalidText?: React.ReactNode } function parseJson(value: string) { if (!value.trim()) return { parsed: null, valid: true } try { return { parsed: JSON.parse(value), valid: true } } catch { return { parsed: null, valid: false } } } function JsonInput({ value: valueProp, defaultValue = "", onValueChange, invalidText = "Invalid JSON", className, onChange, ...props }: JsonInputProps) { const [internalValue, setInternalValue] = React.useState(defaultValue) const value = valueProp ?? internalValue const valid = parseJson(value).valid function handleChange(event: React.ChangeEvent) { const nextValue = event.target.value const result = parseJson(nextValue) if (valueProp === undefined) setInternalValue(nextValue) onValueChange?.(nextValue, result.parsed, result.valid) onChange?.(event) } return (