diff --git a/src/lib/components/chat/FileNav/FileEntryRow.svelte b/src/lib/components/chat/FileNav/FileEntryRow.svelte index 06f13f7116..eaacad0793 100644 --- a/src/lib/components/chat/FileNav/FileEntryRow.svelte +++ b/src/lib/components/chat/FileNav/FileEntryRow.svelte @@ -109,9 +109,9 @@ expandTimer = null; }; - let folderHasContents: boolean | null = null; + let folderItemCount: number | null = null; const observeFolderContents = (node: Element) => { - folderHasContents = null; + folderItemCount = null; if (!terminalUrl) return; let disposed = false; const url = terminalUrl; @@ -123,7 +123,7 @@ observer.disconnect(); // Only inspect visible folders; failed reads leave their contents unknown. void listFiles(url, key, path, session).then((result) => { - if (!disposed && result) folderHasContents = result.entries.length > 0; + if (!disposed && result) folderItemCount = result.entries.length; }); }); observer.observe(node); @@ -302,7 +302,7 @@ d="M1 19V8Q1 1 9 1H54Q58 1 61 4L65 7Q67 9 71 9H191Q199 9 199 15V19" vector-effect="non-scaling-stroke" /> - {#if folderHasContents} + {#if folderItemCount !== null && folderItemCount > 0} {/if} - {#if !writable && !renaming && variant !== 'workspace'} + {#if !writable && !renaming && variant !== 'workspace' && viewMode !== 'grid'} {$i18n.t('Read-only')} {/if} - {#if entry.type === 'file' && viewMode === 'grid' && !renaming} + {#if viewMode === 'grid' && !renaming} - {entry.name.includes('.') - ? entry.name.split('.').pop() || $i18n.t('File') - : $i18n.t('File')} + {#if entry.type === 'directory'} + + {folderItemCount === null + ? '—' + : folderItemCount === 1 + ? $i18n.t('1 item') + : $i18n.t('{{count}} items', { count: folderItemCount })} + + {:else} + + {entry.name.includes('.') + ? entry.name.split('.').pop() || $i18n.t('File') + : $i18n.t('File')} + + {#if entry.size !== undefined} + {formatFileSize(entry.size)} + {/if} + {/if} + {#if !writable && variant !== 'workspace'} + + {/if} {:else if entry.type === 'file' && entry.size !== undefined && !renaming} {#if showDate && entry.modified}