trails/apps/journal/app/components
Ullrich Schäfer 0325d01bca
activity-stats: shared StatRow + canonical metrics across surfaces
Implements the activity-stats change (specs/activity-stats):

- gpx: `movingTime(tracks)` — moving seconds from trackpoint timestamps,
  excluding stationary spans + long gaps; null when no timestamps.
- stats.ts: pure formatters (distance/elevation/duration/speed/pace),
  sport-aware `deriveRate` (pace for foot sports, speed otherwise, speed
  default), and `activityStatItems` encoding the canonical order
  (distance · time · [moving] · pace/speed · ascent · descent; compact subset).
- StatRow: one shared presentational component (size sm/lg), adopted on the
  activity detail (full set; loader derives moving time), route detail
  (distance/ascent/descent), feed card + profile list (compact).
- i18n: journal.stats.* in en + de.

Tests: movingTime (stationary/gap exclusion, moving ≤ elapsed), deriveRate,
formatters, activityStatItems ordering + compact, StatRow render (jsdom).
typecheck + lint + unit (gpx 63, journal 311) green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 14:48:36 +02:00
..
AccountDropdown.tsx Redesign navbar with avatar dropdown and mobile drawer 2026-04-26 09:56:20 +02:00
AlphaBanner.tsx Add legal pages, ToS acceptance, and alpha banner 2026-04-18 00:08:48 +02:00
Avatar.tsx Redesign navbar with avatar dropdown and mobile drawer 2026-04-26 09:56:20 +02:00
ClientDate.tsx Implement notifications + supporting fixes 2026-04-26 01:28:55 +02:00
ClientMap.tsx Add ClientMap wrapper to avoid lazy() SSR resolution 2026-04-06 22:52:57 +02:00
CollectionPage.tsx fix(journal): show remote followers in follower/following lists 2026-06-07 09:13:44 +02:00
FollowButton.tsx Locked-account profiles: private = stub + Pending follow flow 2026-04-25 23:38:26 +02:00
Footer.tsx Stop Sentry on logout; fix E2E + Dockerfile for merged consolidation 2026-04-18 00:40:36 +02:00
LocaleContext.tsx Pass full locale from Accept-Language to ClientDate 2026-03-29 11:46:21 +02:00
MobileNavMenu.tsx Redesign navbar with avatar dropdown and mobile drawer 2026-04-26 09:56:20 +02:00
RouteMapThumbnail.client.tsx chore(ts): drop two more redundant casts 2026-05-26 01:02:49 +02:00
SportBadge.tsx activity-sport-type: schema, contract, write/read paths, federation 2026-06-12 14:11:41 +02:00
StatRow.test.tsx activity-stats: shared StatRow + canonical metrics across surfaces 2026-06-12 14:48:36 +02:00
StatRow.tsx activity-stats: shared StatRow + canonical metrics across surfaces 2026-06-12 14:48:36 +02:00