"use client" import { useMemo, useRef, useState } from "react" import { Minus, Plus, X } from "lucide-react" import { useTranslations } from "next-intl" import { useActiveFolder } from "@/contexts/active-folder-context" import { useAppWorkspace } from "@/contexts/app-workspace-context" import { useTerminalContext } from "@/contexts/terminal-context" import { useShortcutSettings } from "@/hooks/use-shortcut-settings" import { useIsMac } from "@/hooks/use-is-mac" import { formatShortcutLabel } from "@/lib/keyboard-shortcuts" import { Button } from "@/components/ui/button" import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from "@/components/ui/context-menu" import { FolderBadge } from "@/components/ui/folder-badge" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" export function TerminalTabBar() { const t = useTranslations("Folder.terminal") const { shortcuts } = useShortcutSettings() const isMac = useIsMac() const { tabs, activeTabId, switchTerminal, closeTerminal, closeOtherTerminals, closeAllTerminals, renameTerminal, createTerminal, toggle, } = useTerminalContext() const { activeFolderId } = useActiveFolder() const { folders } = useAppWorkspace() const folderIndex = useMemo(() => { const map = new Map() for (const f of folders) map.set(f.id, f.name) return map }, [folders]) const canCreateTerminal = activeFolderId != null const [editingId, setEditingId] = useState(null) const [editValue, setEditValue] = useState("") const inputRef = useRef(null) const startRename = (id: string, title: string) => { setEditingId(id) setEditValue(title) setTimeout(() => inputRef.current?.select(), 0) } const commitRename = () => { if (editingId && editValue.trim()) { renameTerminal(editingId, editValue.trim()) } setEditingId(null) } return (
{tabs.map((tab) => (
switchTerminal(tab.id)} > {editingId === tab.id ? ( setEditValue(e.target.value)} onBlur={commitRename} onKeyDown={(e) => { if (e.key === "Enter") commitRename() if (e.key === "Escape") setEditingId(null) }} /> ) : ( {tab.title} )}
startRename(tab.id, tab.title)}> {t("rename")} closeTerminal(tab.id)}> {t("close")} closeOtherTerminals(tab.id)} disabled={tabs.length <= 1} > {t("closeOthers")} closeAllTerminals()}> {t("closeAll")}
))} {!canCreateTerminal && ( {t("openFolderFirst")} )}
) }