From bdaae6d7dc877888ce5cdd10e93c87a71e203bc3 Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Mon, 30 Mar 2026 08:59:59 +0200 Subject: [PATCH] fitness: use time-scale x-axis for weight chart to handle date gaps Weight chart now spaces data points proportionally to actual dates instead of evenly. Days without a weight log no longer compress adjacent points together. Uses Chart.js time scale with chartjs-adapter-date-fns. --- package.json | 2 ++ pnpm-lock.yaml | 22 ++++++++++++++++ .../components/fitness/FitnessChart.svelte | 26 ++++++++++++++----- .../api/fitness/stats/overview/+server.ts | 4 ++- .../fitness/[stats=fitnessStats]/+page.svelte | 1 + 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index fc5fe4d8..e5ad7372 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "@sveltejs/adapter-node": "^5.0.0", "@tauri-apps/plugin-geolocation": "^2.3.2", "chart.js": "^4.5.0", + "chartjs-adapter-date-fns": "^3.0.0", + "date-fns": "^4.1.0", "file-type": "^19.0.0", "ioredis": "^5.9.0", "leaflet": "^1.9.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db6e6a8c..01c7466d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,12 @@ importers: chart.js: specifier: ^4.5.0 version: 4.5.0 + chartjs-adapter-date-fns: + specifier: ^3.0.0 + version: 3.0.0(chart.js@4.5.0)(date-fns@4.1.0) + date-fns: + specifier: ^4.1.0 + version: 4.1.0 file-type: specifier: ^19.0.0 version: 19.6.0 @@ -1086,6 +1092,12 @@ packages: resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==} engines: {pnpm: '>=8'} + chartjs-adapter-date-fns@3.0.0: + resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==} + peerDependencies: + chart.js: '>=2.8.0' + date-fns: '>=2.0.0' + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1137,6 +1149,9 @@ packages: resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} engines: {node: '>=20'} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -2613,6 +2628,11 @@ snapshots: dependencies: '@kurkle/color': 0.3.4 + chartjs-adapter-date-fns@3.0.0(chart.js@4.5.0)(date-fns@4.1.0): + dependencies: + chart.js: 4.5.0 + date-fns: 4.1.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -2661,6 +2681,8 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 + date-fns@4.1.0: {} + debug@4.3.4: dependencies: ms: 2.1.2 diff --git a/src/lib/components/fitness/FitnessChart.svelte b/src/lib/components/fitness/FitnessChart.svelte index d7396476..e80e1fe9 100644 --- a/src/lib/components/fitness/FitnessChart.svelte +++ b/src/lib/components/fitness/FitnessChart.svelte @@ -1,11 +1,12 @@