"use client"; import { ArrowUp, ChevronRight, Eye, EyeOff, Globe, HardDrive, LayoutGrid, List, Loader2, Search, SortAsc, SortDesc, Upload, Trash2, } from "@/components/icons/platform-icons"; import { cn } from "@/lib/utils"; import { FILES_PANEL_SHELL } from "@/modules/files/components/file-manager-surface"; import type { RefObject } from "react"; type ToolbarProps = { canNavigateUp: boolean; currentEntriesCount: number; currentPath: string[]; currentPathForDisplay: string[]; emptyTrashPending: boolean; globalSearch: boolean; globalSearchIsFetching: boolean; includeHidden: boolean; isEmptyingTrash: boolean; isStarredView: boolean; isTrashView: boolean; rootLabel: string; searchQuery: string; sortBy: "name" | "modified" | "size"; sortDir: "asc" | "desc"; uploadFilesPending: boolean; uploadInputRef: RefObject; viewMode: "grid" | "list"; onCycleSortBy: () => void; onEmptyTrash: () => void; onNavigateToPath: (path: string[]) => void; onNavigateUp: () => void; onSearchQueryChange: (value: string) => void; onSetViewMode: (mode: "grid" | "list") => void; onToggleGlobalSearch: () => void; onToggleIncludeHidden: () => void; onToggleSortDir: () => void; onUploadInputChange: (files: File[]) => void; }; const iconBtn = "inline-flex size-7 items-center justify-center rounded-lg transition-colors"; const iconBtnIdle = "text-muted-foreground hover:bg-background/50 hover:text-foreground"; export function FileManagerToolbar({ canNavigateUp, currentEntriesCount, currentPath, currentPathForDisplay, emptyTrashPending, globalSearch, globalSearchIsFetching, includeHidden, isEmptyingTrash, isStarredView, isTrashView, rootLabel, searchQuery, sortBy, sortDir, uploadFilesPending, uploadInputRef, viewMode, onCycleSortBy, onEmptyTrash, onNavigateToPath, onNavigateUp, onSearchQueryChange, onSetViewMode, onToggleGlobalSearch, onToggleIncludeHidden, onToggleSortDir, onUploadInputChange, }: ToolbarProps) { return (
{/* Back / up */} {/* Breadcrumb */} {/* Upload */} {!isTrashView && !isStarredView && (
{ onUploadInputChange(Array.from(e.target.files ?? [])); e.target.value = ""; }} />
)} {/* Search */}
{globalSearchIsFetching ? ( ) : ( )} onSearchQueryChange(e.target.value)} placeholder={globalSearch ? "Search everywhere…" : "Search…"} className={cn( "h-7 w-full rounded-lg border pl-7 pr-2 text-xs text-foreground placeholder:text-muted-foreground/50 outline-none transition-all", globalSearch ? "border-primary/40 bg-background/60 focus:border-primary/60" : "border-glass-border bg-background/55 focus:border-primary/40", )} />
{/* Sort + visibility */}
{isTrashView && ( )}
{/* View mode toggle */}
); }