2 import type { ChatAttachmentDisplayItem } from '$lib/types';
3 import { Image, Music, FileText, FileIcon } from '@lucide/svelte';
4 import ChatAttachmentsPreviewCurrentItemPdf from './ChatAttachmentsPreviewCurrentItemPdf.svelte';
5 import ChatAttachmentsPreviewCurrentItemImage from './ChatAttachmentsPreviewCurrentItemImage.svelte';
6 import ChatAttachmentsPreviewCurrentItemAudio from './ChatAttachmentsPreviewCurrentItemAudio.svelte';
7 import ChatAttachmentsPreviewCurrentItemText from './ChatAttachmentsPreviewCurrentItemText.svelte';
8 import ChatAttachmentsPreviewCurrentItemUnavailable from './ChatAttachmentsPreviewCurrentItemUnavailable.svelte';
11 currentItem: ChatAttachmentDisplayItem | null;
16 displayPreview: string | undefined;
17 displayTextContent: string | undefined;
18 audioSrc: string | null;
20 hasVisionModality: boolean;
21 activeModelId?: string;
38 let IconComponent = $derived(
39 isImage ? Image : isText || isPdf ? FileText : isAudio ? Music : FileIcon
42 let isUnavailable = $derived(!isPdf && !isImage && !(isText && displayTextContent) && !isAudio);
48 <ChatAttachmentsPreviewCurrentItemPdf
50 displayName={currentItem.name}
56 <ChatAttachmentsPreviewCurrentItemImage {currentItem} {displayPreview} />
57 {:else if isText && displayTextContent}
58 <ChatAttachmentsPreviewCurrentItemText {displayTextContent} {language} />
60 <ChatAttachmentsPreviewCurrentItemAudio {currentItem} {audioSrc} />
61 {:else if isUnavailable}
62 <ChatAttachmentsPreviewCurrentItemUnavailable {IconComponent} />