Skip to content

Commit ebce8cc

Browse files
committed
tap 5 times logo for dev panel
1 parent 588ae6e commit ebce8cc

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

src/components/Header.tsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,41 @@
11
"use client";
22

3+
import { useRef, useCallback } from "react";
34
import Link from "next/link";
45
import { NetworkSelector } from "./NetworkSelector";
56

7+
const TAP_COUNT = 5;
8+
const TAP_WINDOW_MS = 2000;
9+
610
export function Header() {
11+
const tapsRef = useRef<number[]>([]);
12+
13+
const handleLogoClick = useCallback(() => {
14+
const now = Date.now();
15+
const taps = tapsRef.current;
16+
taps.push(now);
17+
18+
// Keep only taps within the window
19+
while (taps.length > 0 && now - taps[0] > TAP_WINDOW_MS) {
20+
taps.shift();
21+
}
22+
23+
if (taps.length >= TAP_COUNT) {
24+
taps.length = 0;
25+
window.dispatchEvent(new CustomEvent("txfix:devtoggle"));
26+
}
27+
}, []);
28+
729
return (
830
<header className="sticky top-0 z-50 border-b border-card-border bg-background/80 backdrop-blur-md">
931
<div className="flex items-center justify-between px-4 sm:px-6 py-3 max-w-6xl mx-auto w-full">
10-
<Link href="/" aria-label="TxFix home" className="flex items-center gap-2 group hover:opacity-80 transition-opacity">
11-
<span className="text-xl sm:text-2xl font-bold tracking-tight text-foreground">
32+
<Link
33+
href="/"
34+
aria-label="TxFix home"
35+
className="flex items-center gap-2 group hover:opacity-80 transition-opacity"
36+
onClick={handleLogoClick}
37+
>
38+
<span className="text-xl sm:text-2xl font-bold tracking-tight text-foreground select-none">
1239
tx<span className="text-bitcoin">fix</span>
1340
</span>
1441
</Link>

src/hooks/useDevMode.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,17 @@ export function useDevMode() {
7676
}
7777

7878
document.addEventListener("keydown", handleKeyDown);
79-
return () => document.removeEventListener("keydown", handleKeyDown);
79+
80+
// 5-tap logo trigger (works on mobile)
81+
function handleDevToggle() {
82+
togglePanel();
83+
}
84+
window.addEventListener("txfix:devtoggle", handleDevToggle);
85+
86+
return () => {
87+
document.removeEventListener("keydown", handleKeyDown);
88+
window.removeEventListener("txfix:devtoggle", handleDevToggle);
89+
};
8090
}, [state.panelVisible, togglePanel, activate, deactivate]);
8191

8292
const mockDiagnosis: DevModeDiagnosis | null = state.activeScenario

0 commit comments

Comments
 (0)