{ if (entry.type !== 'directory') return; if (!e.dataTransfer?.types.includes('application/x-terminal-file-move')) return; e.preventDefault(); e.stopPropagation(); dragOverFolder = true; }} on:dragleave={(e) => { if (entry.type !== 'directory') return; e.stopPropagation(); dragOverFolder = false; }} on:drop={(e) => { if (entry.type !== 'directory') return; const raw = e.dataTransfer?.getData('application/x-terminal-file-move'); if (!raw) return; e.preventDefault(); e.stopPropagation(); dragOverFolder = false; try { const data = JSON.parse(raw); const paths = data.paths || (data.path ? [data.path] : []); const destFolder = `${currentPath}${entry.name}/`; for (const p of paths) { if (p + '/' === destFolder || p === destFolder) continue; onMove(p, destFolder); } } catch {} }} >
{ const filePath = `${currentPath}${entry.name}`; // If dragging a selected item, drag all selected if (selected && selectedPaths.size > 1) { e.dataTransfer?.setData( 'application/x-terminal-file-move', JSON.stringify({ paths: [...selectedPaths] }) ); // Custom drag ghost showing count const ghost = document.createElement('div'); ghost.style.cssText = 'position:fixed;top:-1000px;left:-1000px;display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:8px;background:#374151;color:#fff;font-size:12px;white-space:nowrap;pointer-events:none;'; ghost.textContent = `${selectedPaths.size} items`; document.body.appendChild(ghost); e.dataTransfer?.setDragImage(ghost, 0, 0); requestAnimationFrame(() => ghost.remove()); } else { e.dataTransfer?.setData( 'application/x-terminal-file-move', JSON.stringify({ path: filePath, name: entry.name }) ); } if (entry.type === 'file') { e.dataTransfer?.setData( 'application/x-terminal-file', JSON.stringify({ path: filePath, name: entry.name, url: terminalUrl, key: terminalKey }) ); } }} on:pointerdown={onPointerDown} on:pointerup={onPointerUp} on:pointercancel={onPointerCancel} on:click={handleClick} on:dblclick|preventDefault|stopPropagation={() => { startRename(); }} > {#if selectionMode || selected}
{#if selected}
{/if}
{/if} {#if entry.type === 'directory'}
{:else}
{/if} {#if renaming}
{ if (e.key === 'Enter') { e.preventDefault(); submitRename(); } if (e.key === 'Escape') { e.preventDefault(); cancelRename(); } }} on:blur={submitRename} on:click|stopPropagation /> {:else}
{entry.name}
{/if} {#if entry.type === 'file' && entry.size !== undefined && !renaming}
{formatFileSize(entry.size)}
{/if}
{#if entry.type !== 'directory'}
{ e.stopPropagation(); onDownload(`${currentPath}${entry.name}`); }} >
{$i18n.t('Download')}
{/if}
{ e.stopPropagation(); startRename(); }} >
{$i18n.t('Rename')}
{ e.stopPropagation(); onDelete(`${currentPath}${entry.name}`, entry.name); }} >
{$i18n.t('Delete')}