"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 ( ); }