// The page itself: chapter heading, translation notice, and verses set in a // serif face. Tap a verse to open the verse sheet; select text to highlight. import { formatCrossRef } from '../../utils/wordStudy.js'; export default function ReaderText({ title, translation, notice, verses, loading, error, layout, fontSize, wide, bookmarks, bookKey, chapter, selectedVerse, onSelectVerse, renderVerseText, searchLower, crossRefs, showCrossRefs, onSelectionEnd, footer, }) { const handleTap = (n) => { const sel = window.getSelection(); if (sel && !sel.isCollapsed && sel.toString().trim()) return; // user is selecting text, not tapping onSelectVerse(selectedVerse === n ? null : n); }; const verseProps = (v) => { const bm = bookmarks[`${bookKey}-${chapter}-${v.number}`]; const selected = selectedVerse === v.number; return { id: `reader-verse-${v.number}`, 'data-verse-num': v.number, onClick: () => handleTap(v.number), className: 'cursor-pointer rounded-sm transition-colors', style: selected ? { backgroundColor: 'var(--r-hl)' } : bm ? { backgroundColor: `${bm}66`, boxShadow: `0 0 0 2px ${bm}66` } : undefined, }; }; const chips = (v) => showCrossRefs && crossRefs?.[v.number]?.length > 0 && ( {crossRefs[v.number].slice(0, 4).map((ref, i) => ( {formatCrossRef(ref)} ))} ); const num = (n) => {n}; return (

{title}

{translation}

{loading &&

Loading…

} {error &&

{error}

} {!loading && !error && (
{layout === 'flow' ? (

{verses.map((v) => ( {num(v.number)}{renderVerseText(v.number, v.text, searchLower)}{chips(v)}{' '} ))}

) : ( verses.map((v) => (

{num(v.number)}{renderVerseText(v.number, v.text, searchLower)}{chips(v)}

)) )}
)} {!loading && !error && footer} {notice && !loading &&

{notice}

}
); }