import type { MessageRecord } from "../../../shared/api/client"; interface MessageMetadata { stickers?: Array<{ name?: string; url?: string }>; attachments?: Array<{ name: string; url: string; contentType?: string }>; embeds?: Array<{ title?: string; image?: string; thumbnail?: string }>; } interface ImageItem { url: string; title: string; kind: "attachment" | "embed" | "sticker"; message: MessageRecord; } function parseMetadata(value: string | null): MessageMetadata { if (!value) return {}; try { return JSON.parse(value) as MessageMetadata; } catch { return {}; } } export function ImageGrid({ messages }: { messages: MessageRecord[] }) { const images: ImageItem[] = []; for (const message of messages) { const metadata = parseMetadata(message.metadata); // Stickers for (const sticker of metadata.stickers ?? []) { if (sticker.url) { images.push({ url: sticker.url, title: sticker.name || "sticker", kind: "sticker", message, }); } } // Attachments for (const attachment of metadata.attachments ?? []) { if ( attachment.url && (attachment.contentType?.startsWith("image/") || /\.(png|jpe?g|gif|webp)$/i.test(attachment.name)) ) { images.push({ url: attachment.url, title: attachment.name, kind: "attachment", message, }); } } // Embed images for (const embed of metadata.embeds ?? []) { for (const imgUrl of [embed.image, embed.thumbnail].filter(Boolean)) { images.push({ url: imgUrl as string, title: embed.title || "embed image", kind: "embed", message, }); } } } if (images.length === 0) { return (