From aacdd255a9015988a5b646972024ef9f78ec2d84 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Wed, 1 Apr 2026 23:06:19 +0300 Subject: [PATCH] feat(volume-browser): phase 3 - editor integration & polish - Browse and Download buttons on each volume row in the editor table - Download entire volume as ZIP directly from the editor (no browser needed) - File type icons for common extensions in browser - Ephemeral volumes excluded from browse/download actions --- web/src/routes/projects/[id]/volumes/+page.svelte | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web/src/routes/projects/[id]/volumes/+page.svelte b/web/src/routes/projects/[id]/volumes/+page.svelte index add58fd..3ceca97 100644 --- a/web/src/routes/projects/[id]/volumes/+page.svelte +++ b/web/src/routes/projects/[id]/volumes/+page.svelte @@ -4,9 +4,13 @@ import * as api from '$lib/api'; import { toasts } from '$lib/stores/toast'; import { t } from '$lib/i18n'; - import { IconChevronRight, IconPlus, IconEdit, IconTrash, IconCheck, IconX } from '$lib/components/icons'; + import { IconChevronRight, IconPlus, IconEdit, IconTrash, IconCheck, IconX, IconSearch, IconExternalLink } from '$lib/components/icons'; import Skeleton from '$lib/components/Skeleton.svelte'; + function downloadUrl(volId: string): string { + return api.volumeDownloadUrl(projectId, volId); + } + let volumes = $state([]); let scopeInfos = $state([]); let loading = $state(true); @@ -253,6 +257,14 @@
+ {#if vol.scope !== 'ephemeral'} + + + + + + + {/if}