"use client"; import { Sparkles, Trash2 } from "lucide-react"; export type UserMessageMeta = { items: Array<{ label: string }>; }; type UserMessageProps = { /** 元信息行(第几轮 / 场景 / 平台 / 时间等) */ meta: string[]; /** 用户提示词文本 */ prompt: string; /** 参考图缩略图(dataURL 或 URL) */ referenceThumbnails: string[]; /** 参考图放大用原图(缺省回退缩略图) */ referenceFullImages?: string[]; /** 是否显示操作按钮 */ showActions?: boolean; onReusePrompt?: () => void; onReuseConfig?: () => void; onDeletePrompt?: () => void; onOpenLightbox?: (images: { id: string; src: string }[], index: number) => void; }; /** * 用户消息(画图页 / 商品视觉页共用) * * 右对齐纯文本 + 元信息行 + 复用提示词/复用配置/删除 + 参考图(可点击放大)。 * 两页面结构完全一致,仅数据不同,通过 props 泛化。 */ export function UserMessage({ meta, prompt, referenceThumbnails, referenceFullImages, showActions = true, onReusePrompt, onReuseConfig, onDeletePrompt, onOpenLightbox, }: UserMessageProps) { return (
{meta.length > 0 && (
{meta.map((item, index) => ( {item} ))}
)}
{prompt}
{showActions && (onReusePrompt || onReuseConfig || onDeletePrompt) && (
{onReusePrompt && ( )} {onReuseConfig && ( )} {onDeletePrompt && ( )}
)}
); } /** * 本轮参考图(画图页 / 商品视觉页共用) * * 右侧缩略图列表,点击打开原图放大(Fancybox)。 */ export function ReferenceImages({ thumbnails, fullImages, taskPrefix, onOpenLightbox, onAddToEditor, }: { thumbnails: string[]; fullImages?: string[]; taskPrefix: string; onOpenLightbox: (images: { id: string; src: string }[], index: number) => void; onAddToEditor?: (src: string, index: number) => void | Promise; }) { if (thumbnails.length === 0) return null; return (
本轮参考图
{thumbnails.map((src, index) => { const fullSrc = fullImages?.[index] ?? src; return (
{onAddToEditor ? ( ) : null}
); })}
); }