From 3d4120029bc096523dd855a3c5ceb8daa1767f6a Mon Sep 17 00:00:00 2001 From: Sniphs <56806984+Sniphs98@users.noreply.github.com> Date: Wed, 2 Sep 2026 18:56:17 +0200 Subject: [PATCH] feat(sftp): add drag and drop file transfers --- .../ui/src/lib/screens/SftpPane.svelte | 28 ++++++++- .../ui/src/lib/screens/SftpView.svelte | 62 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/crates/omnyssh-gui/ui/src/lib/screens/SftpPane.svelte b/crates/omnyssh-gui/ui/src/lib/screens/SftpPane.svelte index 0a74a3cd..5182d3b3 100644 --- a/crates/omnyssh-gui/ui/src/lib/screens/SftpPane.svelte +++ b/crates/omnyssh-gui/ui/src/lib/screens/SftpPane.svelte @@ -14,6 +14,8 @@ onNavigate, onToggleMark, onPreview, + onDragStart, + onDrop, toolbar }: { title: string; @@ -21,9 +23,13 @@ onNavigate: (entry: FileEntryDto) => void; onToggleMark: (path: string) => void; onPreview: (entry: FileEntryDto) => void; + onDragStart: (entry: FileEntryDto) => void; + onDrop: () => void; toolbar?: Snippet; } = $props(); + let dragActive = $state(false); + const rowBase = 'flex w-full min-w-0 items-center gap-2 rounded px-2 py-1.5 text-left text-sm transition ' + 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus'; @@ -47,7 +53,23 @@ -
{pane.error}
{:else if pane.loading && pane.entries.length === 0} @@ -80,6 +102,10 @@ type="button" class="{rowBase} text-muted hover:bg-surface-inset hover:text-fg" title={entry.name} + draggable={!isParent && !entry.isDir} + ondragstart={() => { + if (!isParent && !entry.isDir) onDragStart(entry); + }} onclick={() => (entry.isDir ? onNavigate(entry) : onPreview(entry))} >