{
if (entry.type !== 'directory') return;
if (!writable) return;
if (!e.dataTransfer?.types.includes(dragType)) return;
e.preventDefault();
e.stopPropagation();
dragOverFolder = true;
if (viewMode === 'list' && !expanded && !expandTimer) {
expandTimer = setTimeout(() => {
onToggleExpand(directoryPath);
expandTimer = null;
}, 600);
}
}}
on:dragleave={(e) => {
if (entry.type !== 'directory') return;
e.stopPropagation();
dragOverFolder = false;
clearExpandTimer();
}}
on:drop={async (e) => {
if (entry.type !== 'directory') return;
if (!writable) return;
const raw = e.dataTransfer?.getData(dragType);
if (!raw) return;
e.preventDefault();
e.stopPropagation();
dragOverFolder = false;
clearExpandTimer();
try {
const data = JSON.parse(raw);
const paths = (data.paths || (data.path ? [data.path] : [])) as string[];
const destFolder = directoryPath;
await onMove(
paths.filter((p) => p + '/' !== destFolder && p !== destFolder),
destFolder
);
} catch {}
}}
>
{#if folderCard}
{/if}
{#if viewMode === 'list' && variant === 'workspace'}
{:else if viewMode === 'list' && entry.type === 'directory'}
{:else if viewMode === 'list'}
{/if}
{#if selectionMode || selected}
{/if}
{#snippet child({ props })}
{/snippet}
{#if openPreview}
{#key JSON.stringify( [terminalUrl, terminalKey, terminalSessionId, entryPath, entry.modified, entry.size] )}
{#await import('./FileHoverPreview.svelte') then { default: FileHoverPreview }}
{/await}
{/key}
{/if}
{#if entry.type === 'directory' && onNewFolder}
{/if}
{#if entry.type === 'directory' && onNewFile}
{/if}
{#if entry.type === 'directory' && (onNewFolder || onNewFile)}
{/if}
{#if variant !== 'workspace' || entry.type !== 'directory'}
{/if}
{#if entry.type === 'file' && onSelectForComparison}
{#if onCompareWithSelected}
{/if}
{/if}
{#if entry.type === 'directory'}
{#if viewMode === 'list'}
{/if}
{:else}
{/if}