Activity map: click stat to lock track color mode, hover still previews
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user