import React from 'react'; // DisplayMenu — display preferences popover. // Mirrors AnnotatorPanel chrome: ap-pop-backdrop + ap-settings panel. // Controls four settings exposed to the user: // 1. Palette (three swatch chips) // 2. Body size (range slider) // 3. Justify (checkbox) // 4. Notes side (two chips: left / right) // // All other tweak fields (dropCaps, showScores) are preserved in the parent // tweaks object but not exposed here. export const PALETTES = [ { label: 'Parchment', value: ['#f6f1e6', '#2b2418', '#9a3b20'] }, { label: 'Ivory', value: ['#fbf8f1', '#231f17', '#8a5a18'] }, { label: 'Chalk', value: ['#f3f2ee', '#22241f', '#3f5a96'] }, ]; export default function DisplayMenu({ tweaks, onChange, onClose }) { const set = (patch) => onChange({ ...tweaks, ...patch }); React.useEffect(() => { const onKey = (e) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [onClose]); // Determine which palette is active by matching all three colour values. const activePalIdx = PALETTES.findIndex( (p) => p.value[0] === tweaks.paperPalette[0] && p.value[1] === tweaks.paperPalette[1] && p.value[2] === tweaks.paperPalette[2], ); return (
Display
paper, type, and margin layout
{/* Palette */}
{PALETTES.map((pal, i) => ( ))}
{/* Body size */}
set({ bodySize: Number(e.target.value) })} style={{ width: '100%', marginTop: '6px' }} />
{/* Retrieved works */}
set({ litCount: Number(e.target.value) })} style={{ width: '100%', marginTop: '6px' }} />
{/* Justify */}
{/* Notes side */}
{['right', 'left'].map((side) => ( ))}
); }