Activity map: click stat to lock track color mode, hover still previews

This commit is contained in:
Davide Scaini
2026-05-17 09:01:59 +02:00
parent 14a4a0b994
commit db9b4ce32c
+22 -4
View File
@@ -179,6 +179,18 @@
type ColorMode = 'default' | 'speed' | 'hr' | 'power' | 'elevation' | 'cadence';
let colorMode: ColorMode = 'default';
let stickyMode: ColorMode | null = null;
function handleStatClick(cm: ColorMode | null) {
if (!cm) return;
if (stickyMode === cm) {
stickyMode = null;
colorMode = 'default';
} else {
stickyMode = cm;
colorMode = cm;
}
}
// Per-metric: is there data AND a GPS track to colour?
$: hasSpeedTrack = !!trackUrl && !!timeseries?.speed_kmh?.some(v => v != null);
@@ -427,12 +439,18 @@
s.key === 'elevation' && hasElevTrack ? 'elevation' :
s.key === 'cadence' && hasCadenceTrack ? 'cadence' : null}
<div
class="bg-zinc-900 px-4 py-3 transition-colors"
class="bg-zinc-900 px-4 py-3 transition-colors relative"
class:hover:bg-zinc-800={cm !== null}
class:cursor-default={cm !== null}
role="none"
class:cursor-pointer={cm !== null}
class:ring-1={cm !== null && stickyMode === cm}
class:ring-inset={cm !== null && stickyMode === cm}
class:ring-white/25={cm !== null && stickyMode === cm}
role={cm ? 'button' : 'none'}
tabindex={cm ? 0 : -1}
on:mouseenter={() => { if (cm) colorMode = cm; }}
on:mouseleave={() => colorMode = 'default'}
on:mouseleave={() => { colorMode = stickyMode ?? 'default'; }}
on:click={() => handleStatClick(cm)}
on:keydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleStatClick(cm); } }}
>
<p class="text-2xl font-bold text-white">{s.value}</p>
<p class="text-xs text-zinc-500">{s.label}</p>