From a76c02e58ec81621cf3c6ca38eb0d09eccee694f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 21 Oct 2026 12:27:06 +0900 Subject: [PATCH] refac --- src/lib/components/chat/FileNav.svelte | 45 +- .../chat/FileNav/FileEntryRow.svelte | 475 ++++++++++++------ .../chat/FileNav/FileHoverPreview.svelte | 134 +++++ .../chat/FileNav/FileNavToolbar.svelte | 39 +- src/lib/components/chat/FileNav/Icon.svelte | 28 +- src/lib/components/notes/Notes.svelte | 40 +- 6 files changed, 565 insertions(+), 196 deletions(-) create mode 100644 src/lib/components/chat/FileNav/FileHoverPreview.svelte diff --git a/src/lib/components/chat/FileNav.svelte b/src/lib/components/chat/FileNav.svelte index d4b06a1cf3..04bcee7a7f 100644 --- a/src/lib/components/chat/FileNav.svelte +++ b/src/lib/components/chat/FileNav.svelte @@ -17,8 +17,6 @@ import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'; import ArrowRight from '$lib/components/icons/ArrowRight.svelte'; import { toast } from 'svelte-sonner'; - import Plus from '$lib/components/icons/Plus.svelte'; - import Folder from '$lib/components/icons/Folder.svelte'; import { getContext, onMount, onDestroy, tick } from 'svelte'; import type { Readable } from 'svelte/store'; import type { i18n as I18n } from 'i18next'; @@ -344,6 +342,7 @@ let sortBy: SortMode = 'name'; let sortAsc = true; let showHidden = false; + let viewMode: 'grid' | 'list' = 'list'; let visibleEntries: BrowserRow[] = []; let expandedDirs: Set = new Set(); let treeCache: Map = new Map(); @@ -462,9 +461,23 @@ }); $: visibleEntries = withRowIndexes( - buildVisibleRows(entries, currentPath, expandedDirs, treeCache, showHidden, sortBy, sortAsc) + buildVisibleRows( + entries, + currentPath, + viewMode === 'list' ? expandedDirs : new Set(), + treeCache, + showHidden, + sortBy, + sortAsc + ) ); + const changeViewMode = (mode: 'grid' | 'list') => { + clearSelection(); + viewMode = mode; + localStorage.setItem('fileNav:viewMode', mode); + }; + // ── Navigation history ────────────────────────────────────────────── type NavEntry = { path: string; file: string | null }; let navHistory: NavEntry[] = []; @@ -1796,6 +1809,7 @@ // ── Lifecycle ──────────────────────────────────────────────────────── onMount(() => { showHidden = localStorage.getItem('fileNav:showHidden') === 'true'; + viewMode = localStorage.getItem('fileNav:viewMode') === 'grid' ? 'grid' : 'list'; const terminal = getTerminal(); let handledDisplayFile = false; @@ -2028,6 +2042,8 @@ {sortBy} {sortAsc} {showHidden} + viewMode={isSearching ? null : viewMode} + onViewModeChange={changeViewMode} onGoBack={goBack} onGoForward={goForward} onNavigate={loadDir} @@ -2527,18 +2543,25 @@ {/if} {#if visibleEntries.length > 0 || creatingFolder || creatingFile} -
    +
      {#each visibleEntries as entry (entry.fullPath)} - + {$i18n.t('Refresh')} diff --git a/src/lib/components/chat/FileNav/FileEntryRow.svelte b/src/lib/components/chat/FileNav/FileEntryRow.svelte index aa93e41cac..5156970e67 100644 --- a/src/lib/components/chat/FileNav/FileEntryRow.svelte +++ b/src/lib/components/chat/FileNav/FileEntryRow.svelte @@ -1,16 +1,24 @@ + + -
    • +
    • diff --git a/src/lib/components/chat/FileNav/Icon.svelte b/src/lib/components/chat/FileNav/Icon.svelte index 5fa7f4b5a6..a318afa118 100644 --- a/src/lib/components/chat/FileNav/Icon.svelte +++ b/src/lib/components/chat/FileNav/Icon.svelte @@ -22,7 +22,7 @@ stroke-width={strokeWidth} stroke-linecap="round" stroke-linejoin="round" - class={className} + class={`shrink-0 ${className}`} > {#if name === 'folder'} + {:else if name === 'grid'} + + + + {:else if name === 'list'} @@ -487,6 +492,27 @@ {:else if name === 'check'} + {:else if name === 'file-plus'} + + + {:else if name === 'folder-plus' || name === 'folder-upload'} + + {#if name === 'folder-plus'} + + {:else} + + {/if} + {:else if name === 'upload-tray' || name === 'download-tray'} + + {#if name === 'upload-tray'} + + {:else} + + {/if} + {:else if name === 'eye-off'} + {:else if name === 'upload'} diff --git a/src/lib/components/notes/Notes.svelte b/src/lib/components/notes/Notes.svelte index 192037b959..fb24f0880d 100644 --- a/src/lib/components/notes/Notes.svelte +++ b/src/lib/components/notes/Notes.svelte @@ -728,18 +728,18 @@ {:else if displayOption === 'grid'}