{/* Level slider */}
setLevel(Number(e.target.value))}
style={{ width: '100%' }}
/>
{/* Question (optional) */}
{/* Statement (required) */}
{/* Words input */}
setWordInput(e.target.value)}
onKeyDown={e => { if (e.key === 'Enter') addWord() }}
placeholder="titel_de…"
style={{
flex: 1, padding: '4px 8px', borderRadius: 'var(--r-sm)',
border: '1px solid var(--border)', background: 'var(--surface-2)',
color: 'var(--text-1)', fontFamily: 'var(--font)', fontSize: 12,
}}
/>
setWordLevel(Math.min(100, Math.max(1, Number(e.target.value))))}
style={{
width: 50, padding: '4px 4px', borderRadius: 'var(--r-sm)',
border: '1px solid var(--border)', background: 'var(--surface-2)',
color: 'var(--text-1)', fontFamily: 'var(--font)', fontSize: 12, textAlign: 'center',
}}
/>
{/* Word chips */}
{words.length > 0 && (
{words.map((w, i) => (
{w.titel_de} L{w.level}
))}
)}
{error &&
{error}
}
)
}
// ── PairsList ─────────────────────────────────────────────────────────────────
interface PairsListProps {
pairs: DbPair[]
loading: boolean
objectId: string | null
token: string
onRefresh: () => void
}
function PairsList({ pairs, loading, objectId, token, onRefresh }: PairsListProps) {
const [showForm, setShowForm] = useState(false)
const handleSaved = () => {
setShowForm(false)
onRefresh()
}
if (loading) return Kein Objekt gewählt.
return (
{pairs.length === 0 && !showForm && (
Noch keine Pairs.
)}
{pairs.map(pair => (
{/* Level badge */}
L{pair.level}
{pair.status}
{/* Statements */}
{pair.statements.map(s => (
Aussage:
{s.statement_de}
))}
{/* Questions */}
{pair.questions.map(q => (
Frage:
{q.question_de}
))}
))}
{!showForm && pairs.length > 0 && (
)}
{showForm && objectId && (
)}
)
}
// ── GenerateIt ────────────────────────────────────────────────────────────────
export default function GenerateIt() {
const { token } = useAuth()
const canvasRef = useRef