From 03394c800550eb3ddbadcd6df9599950e2e205ee Mon Sep 17 00:00:00 2001 From: DEls Date: Thu, 15 Oct 2026 08:14:53 +0200 Subject: [PATCH] feat(site-map): tablet touch navigation One finger slides the map, pinch zooms smoothly towards the fingers, two-finger drag turns and tilts, double-tap zooms in, tap selects (10 px tolerance for fingers). On touch screens the arrow pad is hidden and the hint shows the gestures. Co-Authored-By: Claude Opus 5.5 --- src/components/site-map/overlay/nav-hint.tsx | 11 ++- src/components/site-map/overlay/nav-pad.tsx | 2 +- src/components/site-map/scene/engine.ts | 3 +- src/components/site-map/scene/navigation.ts | 77 ++++++++++++++++--- .../site-map/scene/touch-gestures.test.ts | 26 +++++++ .../site-map/scene/touch-gestures.ts | 13 ++++ 6 files changed, 116 insertions(+), 16 deletions(-) create mode 100644 src/components/site-map/scene/touch-gestures.test.ts create mode 100644 src/components/site-map/scene/touch-gestures.ts diff --git a/src/components/site-map/overlay/nav-hint.tsx b/src/components/site-map/overlay/nav-hint.tsx index d24056a..48478fe 100644 --- a/src/components/site-map/overlay/nav-hint.tsx +++ b/src/components/site-map/overlay/nav-hint.tsx @@ -4,8 +4,13 @@ const K = ({ children }: { children: React.ReactNode }) => ( export function NavHint() { return ( -
- Move: ←↑↓→ or WASD (hold Shift = faster) · Zoom: +− or scroll · Rotate: QE or drag -
+ <> +
+ Move: ←↑↓→ or WASD (hold Shift = faster) · Zoom: +− or scroll · Rotate: QE or drag +
+
+ Drag to move · pinch to zoom · two fingers to turn and tilt · tap to select · double-tap to zoom in +
+ ); } diff --git a/src/components/site-map/overlay/nav-pad.tsx b/src/components/site-map/overlay/nav-pad.tsx index b537ce0..8259e03 100644 --- a/src/components/site-map/overlay/nav-pad.tsx +++ b/src/components/site-map/overlay/nav-pad.tsx @@ -12,7 +12,7 @@ const isDir = (a: string): a is NavDir => DIRS.includes(a); export function NavPad({ handle }: { handle: SiteMapHandle | null }) { return ( -
+
{PAD.map(([glyph, title, action]) => (