import { useMemo, useState } from "react"; import TextField from "@mui/material/TextField"; import { Button } from "@/shared/ui/Button.jsx"; import styles from "@/shared/ui/JsonEditorField.module.css"; export function JsonEditorField({ className = "", disabled = false, formatter, label, minRows = 6, onChange, required = false, value, }) { const [validated, setValidated] = useState(false); const validation = useMemo(() => validateJsonObject(value), [value]); const showError = validated && !validation.valid; const helperText = showError ? validation.message : validated ? "JSON 格式正确" : "支持格式化和校验,内容必须是 JSON 对象"; const lineCount = Math.max(1, String(value || "").split("\n").length); const formatJson = () => { const result = parseJsonObject(value); setValidated(true); if (!result.valid) { return; } // 厂商适配器可提供保留 int64 token 的格式化器;默认路径仍沿用普通 JSON 格式化。 onChange(formatter ? formatter(value) : JSON.stringify(result.value, null, 2)); }; return (