'use client' import { useState, useEffect } from 'react' import { Box, Paper, Typography, Button, Slider, FormControl, InputLabel, Select, MenuItem, useMediaQuery, useTheme, IconButton } from '@mui/material' import { Close } from '@mui/icons-material' import { ReadingPreference } from '@/types' import { getPreset, loadPreferences, savePreferences } from '@/lib/reading-preferences' const FONTS = [ { value: 'georgia', label: 'Georgia (Serif)' }, { value: 'merriweather', label: 'Merriweather (Serif)' }, { value: 'inter', label: 'Inter (Sans)' }, { value: 'atkinson', label: 'Atkinson (Dyslexia-friendly)' }, ] interface ReadingSettingsProps { onClose: () => void } export function ReadingSettings({ onClose }: ReadingSettingsProps) { const theme = useTheme() const isMobile = useMediaQuery(theme.breakpoints.down('sm')) const [preferences, setPreferences] = useState(loadPreferences()) // Reload preferences on mount useEffect(() => { setPreferences(loadPreferences()) }, []) const applyPreset = (presetName: string) => { const preset = getPreset(presetName as any) setPreferences(preset) savePreferences(preset) // Trigger a storage event to notify other components window.dispatchEvent(new Event('storage')) } const handleChange = (key: keyof ReadingPreference, value: any) => { const updated: ReadingPreference = { ...preferences, [key]: value, preset: 'custom' as const } setPreferences(updated) savePreferences(updated) // Trigger a storage event to notify other components window.dispatchEvent(new Event('storage')) } const content = ( Reading Settings {/* Presets */} Presets {['default', 'dyslexia', 'highContrast', 'minimal'].map((preset) => ( ))} {/* Font */} Font {/* Font Size */} Size: {preferences.fontSize}px handleChange('fontSize', value)} min={12} max={32} step={1} marks={[ { value: 12, label: '12' }, { value: 22, label: '22' }, { value: 32, label: '32' }, ]} /> {/* Line Height */} Line Height: {preferences.lineHeight.toFixed(1)}x handleChange('lineHeight', value)} min={1.4} max={2.2} step={0.1} marks={[ { value: 1.4, label: '1.4' }, { value: 1.8, label: '1.8' }, { value: 2.2, label: '2.2' }, ]} /> {/* Background Color */} Background ) if (isMobile) { return ( {content} ) } return ( {content} ) }