"use client";
import type { FileEntry } from "@/modules/files/components/file-manager-presenters";
import { FILES_MENU_SHELL } from "@/modules/files/components/file-manager-surface";
import { cn } from "@/lib/utils";
import {
ArrowUp,
ClipboardPaste,
Copy,
Download,
FileArchive,
FileText,
FolderOpen,
Info,
Link2,
Scissors,
Star,
Trash2,
Users,
} from "@/components/icons/platform-icons";
import type { ReactNode } from "react";
export function FileManagerContextMenu({
contextShareActive,
entry,
isTrashView,
onClose,
onCopy,
onCopyPath,
onCut,
onDeletePermanently,
onDownload,
onGetInfo,
onMoveToTrash,
onOpen,
onPaste,
onRename,
onRestore,
onToggleShare,
onToggleStar,
onUnzip,
pasteDisabled,
x,
y,
}: {
contextShareActive: boolean;
entry: FileEntry;
isTrashView: boolean;
pasteDisabled: boolean;
x: number;
y: number;
onClose: () => void;
onCopy: () => void;
onCopyPath: () => void;
onCut: () => void;
onDeletePermanently: () => void;
onDownload: () => void;
onGetInfo: () => void;
onMoveToTrash: () => void;
onOpen: () => void;
onPaste: () => void;
onRename: () => void;
onRestore: () => void;
onToggleShare: () => void;
onToggleStar: () => void;
onUnzip: () => void;
}) {
return (
e.stopPropagation()}
>
} label="Open" onClick={() => { onOpen(); onClose(); }} />
} label="Get Info" onClick={() => { onGetInfo(); onClose(); }} />
} label="Copy Path" onClick={() => { onCopyPath(); onClose(); }} />
{!isTrashView && (
} label="Rename" onClick={() => { onRename(); onClose(); }} />
)}
} label="Copy" onClick={() => { onCopy(); onClose(); }} />
} label="Cut" onClick={() => { onCut(); onClose(); }} />
} label="Paste" disabled={pasteDisabled} onClick={() => { onPaste(); onClose(); }} />
} label="Toggle Star" onClick={() => { onToggleStar(); onClose(); }} />
}
label={entry.type === "folder" ? "Download as Zip" : "Download"}
onClick={() => { onDownload(); onClose(); }}
/>
{entry.type === "file" && entry.ext === "zip" && !isTrashView && (
}
label="Unzip Here"
onClick={() => { onUnzip(); onClose(); }}
/>
)}
{entry.type === "folder" && !isTrashView && (
<>
}
label={contextShareActive ? "Unshare Folder" : "Share Folder"}
onClick={() => { onToggleShare(); onClose(); }}
/>
>
)}
{isTrashView ? (
<>
} label="Restore" onClick={() => { onRestore(); onClose(); }} />
} label="Delete Permanently" danger onClick={() => { onDeletePermanently(); onClose(); }} />
>
) : (
} label="Move to Trash" danger onClick={() => { onMoveToTrash(); onClose(); }} />
)}
);
}
export function FileManagerBackgroundContextMenu({
pasteDisabled,
x,
y,
onClose,
onNewFolder,
onNewFile,
onPaste,
}: {
pasteDisabled: boolean;
x: number;
y: number;
onClose: () => void;
onNewFolder: () => void;
onNewFile: () => void;
onPaste: () => void;
}) {
return (
e.stopPropagation()}
>
} label="Paste" disabled={pasteDisabled} onClick={() => { onPaste(); onClose(); }} />
} label="New Folder" onClick={() => { onNewFolder(); onClose(); }} />
} label="New File" onClick={() => { onNewFile(); onClose(); }} />
);
}
function Divider() {
return ;
}
function MenuItem({
danger,
disabled,
icon,
label,
onClick,
}: {
danger?: boolean;
disabled?: boolean;
icon: ReactNode;
label: string;
onClick: () => void;
}) {
return (
);
}