{#each TABS as tab} {@const active = activeTab === tab.key} {@const has = hasRecords(tab.key)} {/each}
{#if activeTab === 'running' || activeTab === 'cycling' || activeTab === 'swimming'} {@const rows = distanceRecords(activeTab)} {#if rows.length}
{#each rows as { distKm, rec }, i} {/each}
Distance Time {activeTab === 'running' ? 'Pace' : 'Speed'} Date Activity
{distLabel(distKm)} {fmtTime(rec.time_s)} {activeTab === 'running' ? fmtPace(distKm, rec.time_s) : fmtSpeed(distKm, rec.time_s)} {formatDate(rec.started_at)} {rec.title}
{#if activeTab === 'cycling' && (athlete as any).best_climbs?.length} {@const climbs = (athlete as any).best_climbs}

⛰️ Best climb in one go

{#each climbs as bc, i} {/each}
# Elevation Date Activity
{i + 1} {Math.round(bc.climb_m)} m {formatDate(bc.started_at)} {bc.title}
{/if} {:else}

No {activeTab} records yet. Records are computed from activities with GPS speed data.

{/if} {:else} {@const longest = valueRecord(activeTab, 'longest_m')} {@const mostElev = valueRecord(activeTab, 'most_elevation_m')} {#if longest || mostElev}
{#if longest}

Longest {activeTab}

{(longest.value / 1000).toFixed(1)} km

{longest.title} · {formatDate(longest.started_at)}
{/if} {#if mostElev}

Most elevation

{Math.round(mostElev.value)} m

{mostElev.title} · {formatDate(mostElev.started_at)}
{/if}
{:else}

No {activeTab} records yet.

{/if} {/if}