/**
* 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}
}
endIcon={open ? : }
sx={{ color: open ? '#4fc3f7' : '#8a949e', flexShrink: 0, textTransform: 'none', fontSize: 12 }}
>
About this page
);
}