{
if (entry.type !== 'directory') return;
if (!writable) return;
if (!e.dataTransfer?.types.includes(dragType)) return;
e.preventDefault();
e.stopPropagation();
dragOverFolder = true;
if (!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 variant === 'workspace'}
{:else if entry.type === 'directory'}
{:else}
{/if}
{#if selectionMode || selected}
{/if}
{#if variant !== 'workspace' || entry.type !== 'directory'}
{/if}
{#if entry.type === 'file' && onSelectForComparison}
{#if onCompareWithSelected}
{/if}
{/if}
{#if entry.type === 'directory'}
{:else}
{/if}