/** * 聊天 UI 消息模型 * * 原始 Dart: lib/ui/chat/models/message.dart(freezed + json_serializable 生成) * * 字段:content、isFromAI、date、imageUrl(可选)、voiceUrl(可选) */ import { z } from "zod"; export const UiMessageSchema = z.object({ content: z.string(), isFromAI: z.boolean(), /** 显示用时间戳(HH:mm) */ date: z.string(), /** 图片 URL(base64 data URL 或 http URL) */ imageUrl: z.string().optional(), /** 语音 URL */ voiceUrl: z.string().optional(), }); export type UiMessage = z.infer; /** 工厂函数(替代 Dart `UiMessage(content:..., isFromAI:...)` 构造)。 */ export const UiMessage = { create(input: Omit & { date?: string }): UiMessage { return UiMessageSchema.parse({ ...input, date: input.date ?? new Date().toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", }), }); }, };