import clsx from 'clsx'; import React, { useEffect } from 'react'; import { useState } from 'react'; import { BiMoon, BiSun } from 'react-icons/bi'; import { MdZoomOut, MdZoomIn, MdCheck } from 'react-icons/md'; import { useReaderStore } from '@/store/readerStore'; interface ViewMenuProps { bookKey: string; toggleDropdown?: () => void; onSetSettingsDialogOpen: (open: boolean) => void; } const ViewMenu: React.FC = ({ bookKey, toggleDropdown, onSetSettingsDialogOpen, }) => { const { books, setConfig, getFoliateView } = useReaderStore(); const bookState = books[bookKey]!; const config = bookState.config!; const [isDarkMode, setDarkMode] = useState(config.viewSettings!.theme === 'dark'); const [isScrolledMode, setScrolledMode] = useState(config.viewSettings!.scrolled); const [isInvertedColors, setInvertedColors] = useState(config.viewSettings!.invert); const [zoomLevel, setZoomLevel] = useState(config.viewSettings!.zoomLevel!); const zoomIn = () => setZoomLevel((prev) => Math.min(prev + 10, 200)); const zoomOut = () => setZoomLevel((prev) => Math.max(prev - 10, 50)); const resetZoom = () => setZoomLevel(100); const toggleScrolledMode = () => setScrolledMode(!isScrolledMode); const toggleDarkMode = () => setDarkMode(!isDarkMode); const toggleInvertedColors = () => setInvertedColors(!isInvertedColors); const openFontLayoutMenu = () => { toggleDropdown?.(); onSetSettingsDialogOpen(true); }; useEffect(() => { const view = getFoliateView(bookKey); view?.renderer.setAttribute('flow', isScrolledMode ? 'scrolled' : 'paginated'); config.viewSettings!.scrolled = isScrolledMode; setConfig(bookKey, config); }, [isScrolledMode]); useEffect(() => { document.body.classList.toggle('invert', isInvertedColors); }, [isInvertedColors]); useEffect(() => { const view = getFoliateView(bookKey); if (!view) return; if ('setStyles' in view.renderer) { // FIXME: zoom level is not working in paginated mode if (!config.viewSettings?.scrolled) return; view.renderer.setStyles(`body { zoom: ${zoomLevel}%; }`); config.viewSettings!.zoomLevel = zoomLevel; setConfig(bookKey, config); } }, [zoomLevel]); return (


); }; export default ViewMenu;