/** * TabContextMenu - 标签右键菜单 */ import { useRef, useEffect } from 'react' interface MenuItem { label: string action: () => void danger?: boolean separator?: boolean } interface TabContextMenuProps { isOpen: boolean position: { x: number; y: number } onClose: () => void onCloseTab: () => void onCloseOthers: () => void onCloseRight: () => void onCloseLeft: () => void onCloseAll: () => void onClone?: () => void } export function TabContextMenu({ isOpen, position, onClose, onCloseTab, onCloseOthers, onCloseRight, onCloseLeft, onCloseAll, onClone, }: TabContextMenuProps) { const menuRef = useRef(null) useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { onClose() } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, [onClose]) if (!isOpen) return null const items: MenuItem[] = [ { label: '关闭', action: onCloseTab }, { label: '关闭其他', action: onCloseOthers }, { label: '关闭右侧标签', action: onCloseRight }, { label: '关闭左侧标签', action: onCloseLeft }, { label: '关闭全部', action: onCloseAll, danger: true }, ] if (onClone) { items.unshift({ label: '克隆标签', action: onClone }) } return (
{items.map((item, index) => ( ))}
) }