import clsx from 'clsx'; import isElectron from 'is-electron'; import { useCallback, useState } from 'react'; import { RiCheckboxBlankLine, RiCloseLine, RiSubtractLine } from 'react-icons/ri'; import appIcon from '../../../assets/icons/32x32.png'; import macCloseHover from './assets/close-mac-hover.png'; import macClose from './assets/close-mac.png'; import macMaxHover from './assets/max-mac-hover.png'; import macMax from './assets/max-mac.png'; import macMinHover from './assets/min-mac-hover.png'; import macMin from './assets/min-mac.png'; import styles from './window-bar.module.css'; import { useWindowSettings } from '/@/renderer/store'; import { Text } from '/@/shared/components/text/text'; import { Platform } from '/@/shared/types/types'; const localSettings = isElectron() ? window.api.localSettings : null; const browser = isElectron() ? window.api.browser : null; const close = () => browser?.exit(); const minimize = () => browser?.minimize(); const maximize = () => browser?.maximize(); const unmaximize = () => browser?.unmaximize(); interface WindowBarControlsProps { controls: { handleClose: () => void; handleMaximize: () => void; handleMinimize: () => void; }; title: string; } const WindowsControls = ({ controls, title }: WindowBarControlsProps) => { const { handleClose, handleMaximize, handleMinimize } = controls; return (
{title}
); }; const MacOsControls = ({ controls, title }: WindowBarControlsProps) => { const { handleClose, handleMaximize, handleMinimize } = controls; const [hoverMin, setHoverMin] = useState(false); const [hoverMax, setHoverMax] = useState(false); const [hoverClose, setHoverClose] = useState(false); return (
setHoverMin(false)} onMouseOver={() => setHoverMin(true)} >
setHoverMax(false)} onMouseOver={() => setHoverMax(true)} >
setHoverClose(false)} onMouseOver={() => setHoverClose(true)} >
{title}
); }; interface WindowBarProps { title: string; } export const WindowBar = ({ title }: WindowBarProps) => { const { windowBarStyle } = useWindowSettings(); const handleMinimize = () => minimize(); const [max, setMax] = useState(localSettings?.env.START_MAXIMIZED || false); const handleMaximize = useCallback(() => { if (max) { unmaximize(); } else { maximize(); } setMax(!max); }, [max]); const handleClose = useCallback(() => close(), []); return ( <> {windowBarStyle === Platform.WINDOWS && ( )} {windowBarStyle === Platform.MACOS && ( )} ); };