import clsx from 'clsx'; import React, { useEffect, useRef } from 'react'; interface WindowButtonsProps { className?: string; headerRef?: React.RefObject; showMinimize?: boolean; showMaximize?: boolean; showClose?: boolean; onMinimize?: () => void; onToggleMaximize?: () => void; onClose?: () => void; } const WindowButtons: React.FC = ({ className, headerRef, showMinimize = true, showMaximize = true, showClose = true, onMinimize, onToggleMaximize, onClose, }) => { const parentRef = useRef(null); const handleMouseDown = async (e: MouseEvent) => { const target = e.target as HTMLElement; if (target.closest('#exclude-title-bar-mousedown')) { return; } const { getCurrentWindow } = await import('@tauri-apps/api/window'); if (e.buttons === 1) { if (e.detail === 2) { getCurrentWindow().toggleMaximize(); } else { getCurrentWindow().startDragging(); } } }; useEffect(() => { const headerElement = headerRef?.current; headerElement?.addEventListener('mousedown', handleMouseDown); return () => { headerElement?.removeEventListener('mousedown', handleMouseDown); }; }, []); const handleMinimize = async () => { if (onMinimize) { onMinimize(); } }; const handleMaximize = async () => { if (onToggleMaximize) { onToggleMaximize(); } }; const handleClose = async () => { if (onClose) { onClose(); } }; return (
{showMinimize && ( )} {showMaximize && ( )} {showClose && ( )}
); }; export default WindowButtons;