// Cross-references for the chunk: typed, suggested from the Open Cross Ref // dataset, and a preview of each reference's verse text. import { useState } from 'react'; function RefChip({ label, onRemove, loadVerseText }) { const [text, setText] = useState(null); const [open, setOpen] = useState(false); const toggle = () => { setOpen((o) => !o); if (text == null) loadVerseText(label).then((t) => setText(t || 'Verse text unavailable.')).catch(() => setText('Verse text unavailable.')); }; return (
{open &&

{text ?? 'Loading…'}

}
); } export default function CrossRefsTab({ crossRefs, chunk }) { const { crossRefInput, setCrossRefInput, suggestingCrossRefs, crossRefSuggestions, addCrossRef, removeCrossRef, suggestCrossRefsForChunk, addSuggestedCrossRef, loadVerseText } = crossRefs; const refs = chunk.crossReferences ?? []; return (
setCrossRefInput(e.target.value)} placeholder="e.g. John 1:1 or Rom 3:23" onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); addCrossRef(chunk.id); } }} className="min-w-0 flex-1 rounded-lg border border-[var(--r-line)] bg-[var(--r-bg)] px-3 py-1.5 text-sm text-[var(--r-text)] focus:outline-none focus:ring-2 focus:ring-[var(--r-line)]" />
{crossRefSuggestions.length > 0 && (
{crossRefSuggestions.map((ref) => ( ))}
)}
{refs.map((ref) => removeCrossRef(chunk.id, ref)} loadVerseText={loadVerseText} />)} {refs.length === 0 &&

No cross-references yet.

}
); }