"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}
);
})}
);
}