fix(ui): polish demo-flow overlays
🔍 Lint / 🪄 Check lint (push) Has been cancelled
🔍 Lint / 🎨 Check format (push) Has been cancelled
🔍 Lint / 🔎 Typecheck (push) Has been cancelled
📊 Quality / 🔒 Security Audit (push) Has been cancelled
📊 Quality / 📋 Dependency Freshness (push) Has been cancelled
📊 Quality / 📦 Bundle Size (push) Has been cancelled
🔍 Lint / 🏗 Build (push) Has been cancelled
🔍 Lint / 🪄 Check lint (push) Has been cancelled
🔍 Lint / 🎨 Check format (push) Has been cancelled
🔍 Lint / 🔎 Typecheck (push) Has been cancelled
📊 Quality / 🔒 Security Audit (push) Has been cancelled
📊 Quality / 📋 Dependency Freshness (push) Has been cancelled
📊 Quality / 📦 Bundle Size (push) Has been cancelled
🔍 Lint / 🏗 Build (push) Has been cancelled
- OutroVideoOverlay: stagger reveal so 'Next step :' appears immediately and 'La ferme' fades in 500ms later, instead of both showing at once. - MissionNotification: enforce 589/211 aspect-ratio + objectFit cover on the <video> branch so webm assets (square 2000x2000) render at the same place as the legacy PNG notifications instead of shifting the layout. - HandTrackingTutorial: add a 5000ms fallback timeout that auto-dismisses the overlay if MediaPipe never reports a hand (camera blocked, mouse-only player), so the screen never stays stuck.
This commit is contained in:
@@ -14,6 +14,11 @@ const HAND_TUTORIAL_STEPS: ReadonlySet<MissionStep> = new Set([
|
||||
"inspected",
|
||||
]);
|
||||
|
||||
// Fallback: if hand detection never fires (camera blocked, MediaPipe failure,
|
||||
// player using mouse), the tutorial auto-dismisses after this delay so it
|
||||
// never blocks the screen indefinitely.
|
||||
const HAND_TUTORIAL_FALLBACK_TIMEOUT_MS = 5000;
|
||||
|
||||
/**
|
||||
* First-time hand-tracking tutorial. Visible during the early ebike repair
|
||||
* steps until MediaPipe actually detects a hand on screen. Once dismissed it
|
||||
@@ -39,6 +44,17 @@ export function HandTrackingTutorial(): React.JSX.Element | null {
|
||||
}
|
||||
}, [handsDetected, dismissed]);
|
||||
|
||||
// Fallback timeout: dismiss the tutorial even if no hand is ever detected,
|
||||
// so the overlay never gets stuck on screen.
|
||||
useEffect(() => {
|
||||
if (!isInShowWindow || dismissed) return undefined;
|
||||
const timer = window.setTimeout(
|
||||
() => setDismissed(true),
|
||||
HAND_TUTORIAL_FALLBACK_TIMEOUT_MS,
|
||||
);
|
||||
return () => window.clearTimeout(timer);
|
||||
}, [isInShowWindow, dismissed]);
|
||||
|
||||
if (!isInShowWindow || dismissed) return null;
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user