// Left rail: filterable play list function PlayRail({ plays, selectedPlay, onSelect, activeGenres, eraRange, hoverGenre, onHoverGenre }) { return (
01剧 目
{plays.length} TITLES
{plays.map((p, i) => { const inGenre = activeGenres.has(p.genre); const inEra = p.era >= eraRange[0] && p.era <= eraRange[1]; const dim = !inGenre || !inEra || (hoverGenre && hoverGenre !== p.genre); const on = selectedPlay === p.id; return (
onSelect(p.id)} onMouseEnter={() => onHoverGenre && onHoverGenre(p.genre)} onMouseLeave={() => onHoverGenre && onHoverGenre(null)} >
{p.title}
{p.subtitle} · {p.era}
{String(i + 1).padStart(2, "0")}
); })}
※ source: 《戏考》《国剧大成》《京剧汇编》
   click any title to coordinate views
); } window.PlayRail = PlayRail;