This commit is contained in:
Timothy Jaeryang Baek
2026-08-10 01:14:53 -06:00
parent 8dd23f74c9
commit ff7467b4c5
7 changed files with 377 additions and 20 deletions
+5 -6
View File
@@ -184,6 +184,7 @@
let fileAudioUrl: string | null = null;
let filePdfData: ArrayBuffer | null = null;
let fileSqliteData: ArrayBuffer | null = null;
let fileDocxData: ArrayBuffer | null = null;
let fileLoading = false;
let filePreviewRef: FilePreview;
@@ -247,8 +248,7 @@
const chatScoped = !!systemTerminal && chatConfig?.context_id === 'chat_id';
terminalChatContextHidden =
!!systemTerminal && (chatConfig === false || (chatScoped && isTemporaryChatId(chatId)));
terminalChatContextPending =
chatScoped && !terminalChatContextHidden && !isSavedChatId(chatId);
terminalChatContextPending = chatScoped && !terminalChatContextHidden && !isSavedChatId(chatId);
if (terminalChatContextHidden || terminalChatContextPending) return null;
const userTerminal = ($settings?.terminalServers ?? []).find(
@@ -395,6 +395,7 @@
}
filePdfData = null;
fileSqliteData = null;
fileDocxData = null;
fileOfficeHtml = null;
fileOfficeSlides = null;
currentSlide = 0;
@@ -505,10 +506,7 @@
const arrayBuffer = await result.blob.arrayBuffer();
try {
if (ext === 'docx') {
const mammoth = await import('mammoth');
const res = await mammoth.convertToHtml({ arrayBuffer });
const DOMPurify = (await import('dompurify')).default;
fileOfficeHtml = DOMPurify.sanitize(res.value);
fileDocxData = arrayBuffer;
} else if (ext === 'xlsx') {
const XLSX = await import('xlsx');
const wb = XLSX.read(new Uint8Array(arrayBuffer), { type: 'array' });
@@ -1396,6 +1394,7 @@
{fileAudioUrl}
{filePdfData}
{fileSqliteData}
{fileDocxData}
{fileContent}
{fileOfficeHtml}
{fileOfficeSlides}
@@ -9,6 +9,7 @@
import Spinner from '../../common/Spinner.svelte';
import PDFViewer from '../../common/PDFViewer.svelte';
import PanzoomContainer from '../../common/PanzoomContainer.svelte';
import DocxPreview from '../../common/DocxPreview.svelte';
import JsonTreeView from './JsonTreeView.svelte';
import NotebookView from './NotebookView.svelte';
import SqliteView from './SqliteView.svelte';
@@ -26,6 +27,7 @@
export let fileAudioUrl: string | null = null;
export let filePdfData: ArrayBuffer | null = null;
export let fileSqliteData: ArrayBuffer | null = null;
export let fileDocxData: ArrayBuffer | null = null;
export let fileContent: string | null = null;
// Terminal connection for notebook execution
@@ -271,7 +273,9 @@
</script>
<div
class="flex-1 {fileImageUrl !== null || (fileOfficeSlides !== null && fileOfficeSlides.length > 0)
class="flex-1 {fileImageUrl !== null ||
fileDocxData !== null ||
(fileOfficeSlides !== null && fileOfficeSlides.length > 0)
? 'overflow-hidden'
: 'overflow-y-auto'} min-h-0 min-w-0 relative h-full"
>
@@ -308,6 +312,8 @@
<PDFViewer bind:this={pdfViewerRef} data={filePdfData} className="w-full h-full" />
{:else if fileSqliteData !== null}
<SqliteView data={fileSqliteData} />
{:else if fileDocxData !== null}
<DocxPreview data={fileDocxData} className="w-full h-full" />
{:else if fileOfficeHtml !== null}
<div class="flex flex-col h-full">
<div class="office-preview overflow-auto flex-1 min-h-0">