From 75bb75853ec1d966c22636f987a9f1275682fb06 Mon Sep 17 00:00:00 2001
From: admin
Date: Thu, 28 May 2026 13:23:42 +0200
Subject: [PATCH] PairWordCard: two-step select then confirm flow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Tapping an option now highlights it (warm gold border); a
"Bestätigen" button activates once something is selected.
Answer is only evaluated on confirmation, not on tap.
Co-Authored-By: Claude Sonnet 4.6
---
src/components/PairCards.css | 5 +++--
src/components/PairWordCard.jsx | 32 ++++++++++++++++++++++++++------
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/src/components/PairCards.css b/src/components/PairCards.css
index 265f636..66593de 100644
--- a/src/components/PairCards.css
+++ b/src/components/PairCards.css
@@ -337,8 +337,9 @@
border-color: #C8956A;
}
.pair-option-btn:active:not(:disabled) { transform: scale(0.95); }
-.pair-option-btn.correct { background: #3D7055; color: #fff; border-color: #3D7055; }
-.pair-option-btn.wrong { background: #A84040; color: #fff; border-color: #A84040; }
+.pair-option-btn.selected { background: #FFF0DC; border-color: #C4A85A; color: #5C3D22; }
+.pair-option-btn.correct { background: #3D7055; color: #fff; border-color: #3D7055; }
+.pair-option-btn.wrong { background: #A84040; color: #fff; border-color: #A84040; }
.pair-option-btn:disabled { cursor: default; }
/* ── Feedback ── */
diff --git a/src/components/PairWordCard.jsx b/src/components/PairWordCard.jsx
index 67ef6f9..fb72510 100644
--- a/src/components/PairWordCard.jsx
+++ b/src/components/PairWordCard.jsx
@@ -84,7 +84,8 @@ function shuffle(arr) {
}
export default function PairWordCard({ card, onComplete }) {
- const [picked, setPicked] = useState(null)
+ const [selected, setSelected] = useState(null) // chosen but not yet confirmed
+ const [picked, setPicked] = useState(null) // confirmed answer
const [activeChip, setActiveChip] = useState(null)
const lang = card.lang || 'de'
@@ -111,12 +112,17 @@ export default function PairWordCard({ card, onComplete }) {
setActiveChip(prev => prev?.id === id ? null : { id, ...entry })
}
- function handlePick(opt) {
+ function handleSelect(opt) {
if (picked) return
+ setSelected(prev => prev?.id === opt.id ? null : opt)
+ }
+
+ function handleConfirm() {
+ if (!selected || picked) return
setActiveChip(null)
- setPicked(opt)
- const r = opt.correct ? 'correct' : 'wrong'
- if (opt.correct) triggerConfetti()
+ setPicked(selected)
+ const r = selected.correct ? 'correct' : 'wrong'
+ if (selected.correct) triggerConfetti()
setTimeout(() => onComplete(r), 900)
}
@@ -159,9 +165,11 @@ export default function PairWordCard({ card, onComplete }) {
if (picked) {
if (opt.id === picked.id) cls += opt.correct ? ' correct' : ' wrong'
else if (opt.correct) cls += ' correct'
+ } else if (selected?.id === opt.id) {
+ cls += ' selected'
}
return (
-
)}
+
+ {!picked && (
+
+
+ Bestätigen
+
+
+ )}
)