/** * Page-level explanation header: a 1–2 sentence subtitle under every page * title plus an expandable "About this page" panel (purpose / how to read / * actions / data flow). Open state persists per page in localStorage. * Content lives in src/content/pageHelp.ts. */ import { useState } from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Collapse from '@mui/material/Collapse'; import Typography from '@mui/material/Typography'; import { ChevronDown, ChevronUp, CircleHelp } from 'lucide-react'; import type { PageId } from '../../context/LabelEvalContext'; import { PAGE_HELP } from '../../content/pageHelp'; const STORAGE_PREFIX = 'sf-help-open:'; function readOpen(page: PageId): boolean { try { return localStorage.getItem(STORAGE_PREFIX + page) === '1'; } catch { return false; } } function writeOpen(page: PageId, open: boolean) { try { localStorage.setItem(STORAGE_PREFIX + page, open ? '1' : '0'); } catch { /* private mode etc. — persistence is a nice-to-have */ } } function HelpSection({ heading, body }: { heading: string; body: string }) { return ( {heading} {body} ); } export default function PageIntro({ page, dense = false }: { page: PageId; dense?: boolean }) { const help = PAGE_HELP[page]; const [open, setOpen] = useState(() => readOpen(page)); const toggle = () => { setOpen((prev) => { writeOpen(page, !prev); return !prev; }); }; if (!help) return null; return ( {help.subtitle} ); }