// ============================================================ // controls/index.ts — Widget 注册表 // // 职责: // 1. 定义 WidgetProps 统一接口 // 2. 维护 Qt 控件名 → React 组件的 WIDGET_MAP 映射 // 3. 导出 WidgetType 联合类型供外部使用 // // 新增控件类型只需两步: // ① 在 controls/ 下创建组件文件 // ② 在 WIDGET_MAP 中加一行 // ============================================================ import type { ComponentType } from 'react'; import type { WidgetProps } from './types'; import { TextInput } from './TextInput'; import { LineInput } from './LineInput'; import { ComboBox } from './ComboBox'; import { Checkbox } from './Checkbox'; import { SpinBox } from './SpinBox'; import { DoubleSpinBox } from './DoubleSpinBox'; import { ImageInput } from './ImageInput'; import { ImageListInput } from './ImageListInput'; import { AudioListInput } from './AudioListInput'; import { VideoInput } from './VideoInput'; import { SeedanceContent } from './SeedanceContent'; export type { WidgetProps } from './types'; // ---------- 注册表 ---------- /** * Qt 控件名 → React 组件的映射表。 * * 键来自 API param_schema[].ui.widget 字段(原 Python Qt 客户端的组件类名), * 值为 useUI/ 下的对应 React 组件。 */ export const WIDGET_MAP: Record> = { textEdit: TextInput, lineEdit: LineInput, comboBox: ComboBox, checkbox: Checkbox, spinBox: SpinBox, doubleSpinBox: DoubleSpinBox, imageInput: ImageInput, imageList: ImageListInput, audioList: AudioListInput, videoInput: VideoInput, seedance2Content: SeedanceContent, }; /** 已知的 widget 类型字面量联合 */ export type WidgetType = keyof typeof WIDGET_MAP; /** 未知控件类型的兜底组件(渲染为普通 Input) */ export const FALLBACK_WIDGET: ComponentType = LineInput;