refactor: 全面重构 JsonTools 页面,采用声明式响应架构并统一 shadcn 样式

This commit is contained in:
雨霖铃
2026-05-22 21:45:13 +08:00
parent 336b62256d
commit d2e5e6b45d
9 changed files with 797 additions and 601 deletions
+15 -7
View File
@@ -1,11 +1,16 @@
import React from 'react';
import TextInputArea from '@/components/TextInputArea';
import { cn } from '@/lib/utils';
interface JsonDiffInputProps {
// 💡 核心修复:使用 Omit<..., 'onChange'> 强行挖掉原生的 onChange 签名
// 这样我们自定义的 (value: string) => void 就能独占鳌头,彻底消灭 TS2430 接口冲突!
export interface JsonDiffInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
label: string;
placeholder: string;
value: string;
onChange: (value: string) => void;
error?: string | null;
minRows?: number;
}
export default function JsonDiffInput({
@@ -14,23 +19,26 @@ export default function JsonDiffInput({
value,
onChange,
error,
minRows = 10,
className,
...props
}: JsonDiffInputProps) {
return (
<div className="flex-1 min-w-0">
<span className="block mb-1.5 text-[11px] font-extrabold tracking-wider text-muted-foreground uppercase">
<div className={cn('flex-1 min-w-0 flex flex-col', className)} {...props}>
<span className="block mb-2 text-[10px] font-bold tracking-wide text-muted-foreground/80 uppercase select-none px-0.5">
{label}
</span>
<TextInputArea
value={value}
onChange={onChange}
placeholder={placeholder}
minRows={8}
minRows={minRows}
maxRows={16}
externalError={error ?? undefined}
showClear={true}
allowCopy={true}
/>
</div>
);
}
export { JsonDiffInput };
export type { JsonDiffInputProps };