Réponse : {truth?.answer} @@ -131,6 +148,51 @@ export function QuizView({ snapshot }: { snapshot: RoomSnapshot }) { ) } +function ImageReveal({ + src, + startsAt, + endsAt, + revealed, +}: { + src: string + startsAt: number + endsAt: number + revealed: boolean +}) { + // Le flou décroît avec le temps (cadencé par les timestamps serveur) : tous + // les clients voient le même niveau de flou au même instant. + const [blur, setBlur] = useState(MAX_BLUR) + + useEffect(() => { + if (revealed) { + return + } + const id = setInterval(() => { + const now = Date.now() + const p = + now < startsAt ? 0 : Math.min(1, (now - startsAt) / (endsAt - startsAt)) + setBlur(MAX_BLUR * (1 - p)) + }, 200) + return () => clearInterval(id) + }, [revealed, startsAt, endsAt]) + + const displayBlur = revealed ? 0 : blur + + return ( +
{q.prompt}
{q.format} · {q.category ?? "—"} · diff. {q.difficulty} · {q.source}
- {q.format === "free" ? ( + {q.format === "free" || q.format === "image_reveal" ? (✔ {q.acceptedAnswers?.join(", ")}
@@ -186,6 +194,9 @@ function QuestionForm({ onCreated }: { onCreated: () => void }) { const [choices, setChoices] = useStateUpload…
+ )} + {uploadError && ( +{uploadError}
+ )} + {imageUrl && ( +