+
+
+ {t(`files.validation.${label}`)}
+
+ {current ? (
+
+ ) : null}
+
+
{children}
+
+ )
+}
diff --git a/frontend/src/components/file/inline-file-preview.test.tsx b/frontend/src/components/file/inline-file-preview.test.tsx
index 7c5ec6d611..5ea8f7e5e2 100644
--- a/frontend/src/components/file/inline-file-preview.test.tsx
+++ b/frontend/src/components/file/inline-file-preview.test.tsx
@@ -6,6 +6,12 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
const apiRequestMock = vi.hoisted(() => vi.fn())
const toastErrorMock = vi.hoisted(() => vi.fn())
+// Validation has its own server-boundary/integration suite; these tests isolate
+// the existing renderer and streaming contracts from that separate request.
+vi.mock('@/components/file/artifact-validation', () => ({
+ ArtifactValidation: ({ children }: { children: React.ReactNode }) => <>{children}>,
+}))
+
vi.mock('@/components/ui/sonner', () => ({
toast: { error: toastErrorMock },
}))
diff --git a/frontend/src/components/file/inline-file-preview.tsx b/frontend/src/components/file/inline-file-preview.tsx
index 3529a702cf..5799e6e57d 100644
--- a/frontend/src/components/file/inline-file-preview.tsx
+++ b/frontend/src/components/file/inline-file-preview.tsx
@@ -4,6 +4,7 @@ import { FileText, Loader2, Video, Volume2 } from 'lucide-react'
import { DocxPreviewRenderer } from '@/components/file/docx-preview-renderer'
import { ExcelPreviewRenderer } from '@/components/file/excel-preview-renderer'
import { PptxPreviewRenderer } from '@/components/file/pptx-preview-renderer'
+import { ArtifactValidation } from '@/components/file/artifact-validation'
import { toast } from '@/components/ui/sonner'
import { cn, getApiUrl } from '@/lib/utils'
import { useFileAccess, type FileAccessPolicy } from '@/contexts/file-access-context'
@@ -865,7 +866,19 @@ function ExternalPreviewPlaceholder({
)
}
-export function InlineFilePreview({
+export function InlineFilePreview(props: InlineFilePreviewProps) {
+ const fileAccess = useFileAccess()
+ const fileId = props.source.fileId && resolveInlineFileId(props.source.fileId)
+ const kind = getInlineFilePreviewKind(props.source)
+ const content =