2026, next try
This commit is contained in:
parent
516feae195
commit
8328354ac5
10 changed files with 547 additions and 579 deletions
|
|
@ -1,384 +1,112 @@
|
||||||
const cardio = [
|
|
||||||
{
|
|
||||||
run_for: [4, 3],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-05",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [5, 4],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-07",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [6, 5],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-10",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [7, 6],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-12",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [12],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-02-14",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [7, 6],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-17",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [8, 7],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-19",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [14],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-02-21",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [8, 7],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-24",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [9, 8],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-02-26",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [16],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-02-28",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [9, 8],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-03",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [10, 9],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-05",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [20],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-03-07",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [10, 9],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-10",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [11, 10],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-12",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [23],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-03-14",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [11, 10],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-17",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [12, 11],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-19",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [26],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-03-21",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [12, 11],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-24",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [13, 12],
|
|
||||||
pause_for: 2,
|
|
||||||
planned_at: "2025-03-26",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
run_for: [30],
|
|
||||||
pause_for: 5,
|
|
||||||
planned_at: "2025-03-28",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const gym = [
|
const gym = [
|
||||||
{
|
{
|
||||||
name: "rehab 1/3",
|
name: "rehab 1/2",
|
||||||
planned_at: "2025-02-02",
|
planned_at: "2025-12-31",
|
||||||
completed: true,
|
|
||||||
completed_at: "2025-02-02",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "rehab 2/3",
|
|
||||||
planned_at: "2025-02-04",
|
|
||||||
completed: false,
|
completed: false,
|
||||||
completed_at: null,
|
completed_at: null,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "rehab 3/3",
|
name: "rehab 2/2",
|
||||||
planned_at: "2025-02-06",
|
planned_at: "2026-01-02",
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 1:1",
|
|
||||||
planned_at: "2025-02-09",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 1:2",
|
|
||||||
planned_at: "2025-02-11",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 1:3",
|
|
||||||
planned_at: "2025-02-13",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 2:1",
|
|
||||||
planned_at: "2025-02-16",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 2:2",
|
|
||||||
planned_at: "2025-02-18",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 2:3",
|
|
||||||
planned_at: "2025-02-20",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 3:1",
|
|
||||||
planned_at: "2025-02-23",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 3:2",
|
|
||||||
planned_at: "2025-02-25",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 3:3",
|
|
||||||
planned_at: "2025-02-27",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 4:1",
|
|
||||||
planned_at: "2025-03-02",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 4:2",
|
|
||||||
planned_at: "2025-03-04",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "A 4:3",
|
|
||||||
planned_at: "2025-03-06",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 1:1",
|
|
||||||
planned_at: "2025-03-09",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 1:2",
|
|
||||||
planned_at: "2025-03-11",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 1:3",
|
|
||||||
planned_at: "2025-03-13",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 2:1",
|
|
||||||
planned_at: "2025-03-16",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 2:2",
|
|
||||||
planned_at: "2025-03-18",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 2:3",
|
|
||||||
planned_at: "2025-03-20",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 3:1",
|
|
||||||
planned_at: "2025-03-23",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 3:2",
|
|
||||||
planned_at: "2025-03-25",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 3:3",
|
|
||||||
planned_at: "2025-03-27",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 4:1",
|
|
||||||
planned_at: "2025-03-30",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 4:2",
|
|
||||||
planned_at: "2025-04-01",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "B 4:3",
|
|
||||||
planned_at: "2025-04-03",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 1:1",
|
|
||||||
planned_at: "2025-04-06",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 1:2",
|
|
||||||
planned_at: "2025-04-08",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 1:3",
|
|
||||||
planned_at: "2025-04-10",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 2:1",
|
|
||||||
planned_at: "2025-04-13",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 2:2",
|
|
||||||
planned_at: "2025-04-15",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 2:3",
|
|
||||||
planned_at: "2025-04-17",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 3:1",
|
|
||||||
planned_at: "2025-04-20",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 3:2",
|
|
||||||
planned_at: "2025-04-22",
|
|
||||||
completed: false,
|
|
||||||
completed_at: null,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "C 3:3",
|
|
||||||
planned_at: "2025-04-24",
|
|
||||||
completed: false,
|
completed: false,
|
||||||
completed_at: null,
|
completed_at: null,
|
||||||
},
|
},
|
||||||
|
{ name: "PLL 1:1", planned_at: "2026-01-05", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:2", planned_at: "2026-01-06", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:3", planned_at: "2026-01-07", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:4", planned_at: "2026-01-09", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:1", planned_at: "2026-01-12", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:2", planned_at: "2026-01-13", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:3", planned_at: "2026-01-14", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:4", planned_at: "2026-01-16", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:1", planned_at: "2026-01-19", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:2", planned_at: "2026-01-20", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:3", planned_at: "2026-01-21", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:4", planned_at: "2026-01-23", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:1", planned_at: "2026-01-26", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:2", planned_at: "2026-01-27", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:3", planned_at: "2026-01-28", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:4", planned_at: "2026-01-30", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:1", planned_at: "2026-02-02", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:2", planned_at: "2026-02-03", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:3", planned_at: "2026-02-04", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:4", planned_at: "2026-02-06", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:1", planned_at: "2026-02-09", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:2", planned_at: "2026-02-10", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:3", planned_at: "2026-02-11", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:4", planned_at: "2026-02-13", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:1", planned_at: "2026-02-16", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:2", planned_at: "2026-02-17", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:3", planned_at: "2026-02-18", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:4", planned_at: "2026-02-20", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:1", planned_at: "2026-02-23", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:2", planned_at: "2026-02-24", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:3", planned_at: "2026-02-25", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:4", planned_at: "2026-02-27", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:1", planned_at: "2026-03-02", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:2", planned_at: "2026-03-03", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:3", planned_at: "2026-03-04", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:4", planned_at: "2026-03-06", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:1", planned_at: "2026-03-09", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:2", planned_at: "2026-03-10", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:3", planned_at: "2026-03-11", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:4", planned_at: "2026-03-13", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:1", planned_at: "2026-03-16", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:2", planned_at: "2026-03-17", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:3", planned_at: "2026-03-18", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:4", planned_at: "2026-03-20", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:1", planned_at: "2026-03-23", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:2", planned_at: "2026-03-24", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:3", planned_at: "2026-03-25", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:4", planned_at: "2026-03-27", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:1", planned_at: "2026-03-30", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:2", planned_at: "2026-03-31", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:3", planned_at: "2026-04-01", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:4", planned_at: "2026-04-03", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:1", planned_at: "2026-04-06", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:2", planned_at: "2026-04-07", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:3", planned_at: "2026-04-08", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:4", planned_at: "2026-04-10", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:1", planned_at: "2026-04-13", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:2", planned_at: "2026-04-14", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:3", planned_at: "2026-04-15", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:4", planned_at: "2026-04-17", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:1", planned_at: "2026-04-20", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:2", planned_at: "2026-04-21", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:3", planned_at: "2026-04-22", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:4", planned_at: "2026-04-24", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:1", planned_at: "2026-04-27", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:2", planned_at: "2026-04-28", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:3", planned_at: "2026-04-29", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:4", planned_at: "2026-05-01", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:1", planned_at: "2026-05-04", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:2", planned_at: "2026-05-05", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:3", planned_at: "2026-05-06", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:4", planned_at: "2026-05-08", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:1", planned_at: "2026-05-11", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:2", planned_at: "2026-05-12", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:3", planned_at: "2026-05-13", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 1:4", planned_at: "2026-05-15", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:1", planned_at: "2026-05-18", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:2", planned_at: "2026-05-19", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:3", planned_at: "2026-05-20", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 2:4", planned_at: "2026-05-22", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:1", planned_at: "2026-05-25", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:2", planned_at: "2026-05-26", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:3", planned_at: "2026-05-27", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 3:4", planned_at: "2026-05-29", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:1", planned_at: "2026-06-01", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:2", planned_at: "2026-06-02", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:3", planned_at: "2026-06-03", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 4:4", planned_at: "2026-06-05", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:1", planned_at: "2026-06-08", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:2", planned_at: "2026-06-09", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:3", planned_at: "2026-06-10", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 5:4", planned_at: "2026-06-12", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:1", planned_at: "2026-06-15", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:2", planned_at: "2026-06-16", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:3", planned_at: "2026-06-18", completed: false, completed_at: null },
|
||||||
|
{ name: "PLL 6:4", planned_at: "2026-06-20", completed: false, completed_at: null },
|
||||||
];
|
];
|
||||||
|
|
||||||
const fast = [
|
const fast = [
|
||||||
|
|
@ -399,120 +127,349 @@ const fast = [
|
||||||
];
|
];
|
||||||
|
|
||||||
const diet = [
|
const diet = [
|
||||||
{ date: "2025-02-10", completed: false },
|
{ date: "2026-01-05", completed: false },
|
||||||
{ date: "2025-02-11", completed: false },
|
{ date: "2026-01-06", completed: false },
|
||||||
{ date: "2025-02-12", completed: false },
|
{ date: "2026-01-07", completed: false },
|
||||||
{ date: "2025-02-13", completed: false },
|
{ date: "2026-01-08", completed: false },
|
||||||
{ date: "2025-02-14", completed: false },
|
{ date: "2026-01-09", completed: false },
|
||||||
{ date: "2025-02-15", completed: false },
|
{ date: "2026-01-10", completed: false },
|
||||||
{ date: "2025-02-16", completed: false },
|
{ date: "2026-01-11", completed: false },
|
||||||
{ date: "2025-02-17", completed: false },
|
{ date: "2026-01-12", completed: false },
|
||||||
{ date: "2025-02-18", completed: false },
|
{ date: "2026-01-13", completed: false },
|
||||||
{ date: "2025-02-19", completed: false },
|
{ date: "2026-01-14", completed: false },
|
||||||
{ date: "2025-02-10", completed: false },
|
{ date: "2026-01-15", completed: false },
|
||||||
{ date: "2025-02-21", completed: false },
|
{ date: "2026-01-16", completed: false },
|
||||||
{ date: "2025-02-22", completed: false },
|
{ date: "2026-01-17", completed: false },
|
||||||
{ date: "2025-02-23", completed: false },
|
{ date: "2026-01-18", completed: false },
|
||||||
{ date: "2025-02-24", completed: false },
|
{ date: "2026-01-19", completed: false },
|
||||||
{ date: "2025-02-25", completed: false },
|
{ date: "2026-01-20", completed: false },
|
||||||
{ date: "2025-02-26", completed: false },
|
{ date: "2026-01-21", completed: false },
|
||||||
{ date: "2025-02-27", completed: false },
|
{ date: "2026-01-22", completed: false },
|
||||||
{ date: "2025-02-28", completed: false },
|
{ date: "2026-01-23", completed: false },
|
||||||
{ date: "2025-03-01", completed: false },
|
{ date: "2026-01-24", completed: false },
|
||||||
{ date: "2025-03-02", completed: false },
|
{ date: "2026-01-25", completed: false },
|
||||||
{ date: "2025-03-03", completed: false },
|
{ date: "2026-01-26", completed: false },
|
||||||
{ date: "2025-03-04", excluded: true, because: "Semmeldagen" },
|
{ date: "2026-01-27", completed: false },
|
||||||
{ date: "2025-03-05", completed: false },
|
{ date: "2026-01-28", completed: false },
|
||||||
{ date: "2025-03-06", completed: false },
|
{ date: "2026-01-29", completed: false },
|
||||||
{ date: "2025-03-07", completed: false },
|
{ date: "2026-01-30", completed: false },
|
||||||
{ date: "2025-03-08", completed: false },
|
{ date: "2026-01-31", completed: false },
|
||||||
{ date: "2025-03-09", completed: false },
|
{ date: "2026-02-10", completed: false },
|
||||||
{ date: "2025-03-10", completed: false },
|
{ date: "2026-02-11", completed: false },
|
||||||
{ date: "2025-03-11", completed: false },
|
{ date: "2026-02-12", completed: false },
|
||||||
{ date: "2025-03-12", completed: false },
|
{ date: "2026-02-13", completed: false },
|
||||||
{ date: "2025-03-13", completed: false },
|
{ date: "2026-02-14", completed: false },
|
||||||
{ date: "2025-03-14", completed: false },
|
{ date: "2026-02-15", completed: false },
|
||||||
{ date: "2025-03-15", completed: false },
|
{ date: "2026-02-16", completed: false },
|
||||||
{ date: "2025-03-16", completed: false },
|
{ date: "2026-02-17", completed: false },
|
||||||
{ date: "2025-03-17", completed: false },
|
{ date: "2026-02-18", completed: false },
|
||||||
{ date: "2025-03-18", completed: false },
|
{ date: "2026-02-19", completed: false },
|
||||||
{ date: "2025-03-19", completed: false },
|
{ date: "2026-02-20", completed: false },
|
||||||
{ date: "2025-03-20", completed: false },
|
{ date: "2026-02-21", completed: false },
|
||||||
{ date: "2025-03-21", completed: false },
|
{ date: "2026-02-22", completed: false },
|
||||||
{ date: "2025-03-22", completed: false },
|
{ date: "2026-02-23", completed: false },
|
||||||
{ date: "2025-03-23", completed: false },
|
{ date: "2026-02-24", completed: false },
|
||||||
{ date: "2025-03-24", completed: false },
|
{ date: "2026-02-25", completed: false },
|
||||||
{ date: "2025-03-25", completed: false },
|
{ date: "2026-02-26", completed: false },
|
||||||
{ date: "2025-03-26", completed: false },
|
{ date: "2026-02-27", completed: false },
|
||||||
{ date: "2025-03-27", completed: false },
|
{ date: "2026-02-28", completed: false },
|
||||||
{ date: "2025-03-28", completed: false },
|
{ date: "2026-03-01", completed: false },
|
||||||
{ date: "2025-03-29", excluded: true, because: "Födelsedag" },
|
{ date: "2026-03-02", completed: false },
|
||||||
{ date: "2025-03-30", completed: false },
|
{ date: "2026-03-03", completed: false },
|
||||||
{ date: "2025-03-31", completed: false },
|
{ date: "2026-03-04", completed: false },
|
||||||
{ date: "2025-04-01", completed: false },
|
{ date: "2026-03-05", completed: false },
|
||||||
{ date: "2025-04-02", completed: false },
|
{ date: "2026-03-06", completed: false },
|
||||||
{ date: "2025-04-03", completed: false },
|
{ date: "2026-03-07", completed: false },
|
||||||
{ date: "2025-04-04", completed: false },
|
{ date: "2026-03-08", completed: false },
|
||||||
{ date: "2025-04-05", completed: false },
|
{ date: "2026-03-09", completed: false },
|
||||||
{ date: "2025-04-06", completed: false },
|
{ date: "2026-03-10", completed: false },
|
||||||
{ date: "2025-04-07", completed: false },
|
{ date: "2026-03-11", completed: false },
|
||||||
{ date: "2025-04-08", completed: false },
|
{ date: "2026-03-12", completed: false },
|
||||||
{ date: "2025-04-09", completed: false },
|
{ date: "2026-03-13", completed: false },
|
||||||
{ date: "2025-04-10", completed: false },
|
{ date: "2026-03-14", completed: false },
|
||||||
{ date: "2025-04-11", completed: false },
|
{ date: "2026-03-15", completed: false },
|
||||||
{ date: "2025-04-12", completed: false },
|
{ date: "2026-03-16", completed: false },
|
||||||
{ date: "2025-04-13", completed: false },
|
{ date: "2026-03-17", completed: false },
|
||||||
{ date: "2025-04-14", completed: false },
|
{ date: "2026-03-18", completed: false },
|
||||||
{ date: "2025-04-15", completed: false },
|
{ date: "2026-03-19", completed: false },
|
||||||
{ date: "2025-04-16", completed: false },
|
{ date: "2026-03-20", completed: false },
|
||||||
{ date: "2025-04-17", excluded: true, because: "Påsk" },
|
{ date: "2026-03-21", completed: false },
|
||||||
{ date: "2025-04-18", completed: false },
|
{ date: "2026-03-22", completed: false },
|
||||||
{ date: "2025-04-19", completed: false },
|
{ date: "2026-03-23", completed: false },
|
||||||
{ date: "2025-04-10", completed: false },
|
{ date: "2026-03-24", completed: false },
|
||||||
{ date: "2025-04-21", completed: false },
|
{ date: "2026-03-25", completed: false },
|
||||||
{ date: "2025-04-22", completed: false },
|
{ date: "2026-03-26", completed: false },
|
||||||
{ date: "2025-04-23", completed: false },
|
{ date: "2026-03-27", completed: false },
|
||||||
{ date: "2025-04-24", completed: false },
|
{ date: "2026-03-28", completed: false },
|
||||||
{ date: "2025-04-25", completed: false },
|
{ date: "2026-03-29", completed: false },
|
||||||
{ date: "2025-04-26", completed: false },
|
{ date: "2026-03-30", completed: false },
|
||||||
{ date: "2025-04-27", completed: false },
|
{ date: "2026-03-31", completed: false },
|
||||||
{ date: "2025-04-28", completed: false },
|
{ date: "2026-04-01", completed: false },
|
||||||
{ date: "2025-04-29", completed: false },
|
{ date: "2026-04-02", completed: false },
|
||||||
{ date: "2025-04-30", completed: false },
|
{ date: "2026-04-03", completed: false },
|
||||||
{ date: "2025-05-01", completed: false },
|
{ date: "2026-04-04", completed: false },
|
||||||
{ date: "2025-05-02", completed: false },
|
{ date: "2026-04-05", completed: false },
|
||||||
{ date: "2025-05-03", completed: false },
|
{ date: "2026-04-06", completed: false },
|
||||||
{ date: "2025-05-04", completed: false },
|
{ date: "2026-04-07", completed: false },
|
||||||
{ date: "2025-05-05", completed: false },
|
{ date: "2026-04-08", completed: false },
|
||||||
{ date: "2025-05-06", completed: false },
|
{ date: "2026-04-09", completed: false },
|
||||||
{ date: "2025-05-07", completed: false },
|
{ date: "2026-04-10", completed: false },
|
||||||
{ date: "2025-05-08", completed: false },
|
{ date: "2026-04-11", completed: false },
|
||||||
{ date: "2025-05-09", completed: false },
|
{ date: "2026-04-12", completed: false },
|
||||||
{ date: "2025-05-10", completed: false },
|
{ date: "2026-04-13", completed: false },
|
||||||
{ date: "2025-05-11", completed: false },
|
{ date: "2026-04-14", completed: false },
|
||||||
{ date: "2025-05-12", completed: false },
|
{ date: "2026-04-15", completed: false },
|
||||||
{ date: "2025-05-13", completed: false },
|
{ date: "2026-04-16", completed: false },
|
||||||
{ date: "2025-05-14", completed: false },
|
{ date: "2026-04-17", completed: false },
|
||||||
{ date: "2025-05-15", completed: false },
|
{ date: "2026-04-18", completed: false },
|
||||||
{ date: "2025-05-16", completed: false },
|
{ date: "2026-04-19", completed: false },
|
||||||
{ date: "2025-05-17", completed: false },
|
{ date: "2026-04-20", completed: false },
|
||||||
{ date: "2025-05-18", completed: false },
|
{ date: "2026-04-21", completed: false },
|
||||||
{ date: "2025-05-19", completed: false },
|
{ date: "2026-04-22", completed: false },
|
||||||
{ date: "2025-05-10", completed: false },
|
{ date: "2026-04-23", completed: false },
|
||||||
{ date: "2025-05-21", completed: false },
|
{ date: "2026-04-24", completed: false },
|
||||||
{ date: "2025-05-22", completed: false },
|
{ date: "2026-04-25", completed: false },
|
||||||
{ date: "2025-05-23", completed: false },
|
{ date: "2026-04-26", completed: false },
|
||||||
{ date: "2025-05-24", completed: false },
|
{ date: "2026-04-27", completed: false },
|
||||||
{ date: "2025-05-25", completed: false },
|
{ date: "2026-04-28", completed: false },
|
||||||
{ date: "2025-05-26", completed: false },
|
{ date: "2026-04-29", completed: false },
|
||||||
{ date: "2025-05-27", completed: false },
|
{ date: "2026-04-30", completed: false },
|
||||||
{ date: "2025-05-28", completed: false },
|
{ date: "2026-05-01", completed: false },
|
||||||
{ date: "2025-05-29", completed: false },
|
{ date: "2026-05-02", completed: false },
|
||||||
{ date: "2025-05-30", completed: false },
|
{ date: "2026-05-03", completed: false },
|
||||||
{ date: "2025-05-31", completed: false },
|
{ date: "2026-05-04", completed: false },
|
||||||
|
{ date: "2026-05-05", completed: false },
|
||||||
|
{ date: "2026-05-06", completed: false },
|
||||||
|
{ date: "2026-05-07", completed: false },
|
||||||
|
{ date: "2026-05-08", completed: false },
|
||||||
|
{ date: "2026-05-09", completed: false },
|
||||||
|
{ date: "2026-05-10", completed: false },
|
||||||
|
{ date: "2026-05-11", completed: false },
|
||||||
|
{ date: "2026-05-12", completed: false },
|
||||||
|
{ date: "2026-05-13", completed: false },
|
||||||
|
{ date: "2026-05-14", completed: false },
|
||||||
|
{ date: "2026-05-15", completed: false },
|
||||||
|
{ date: "2026-05-16", completed: false },
|
||||||
|
{ date: "2026-05-17", completed: false },
|
||||||
|
{ date: "2026-05-18", completed: false },
|
||||||
|
{ date: "2026-05-19", completed: false },
|
||||||
|
{ date: "2026-05-20", completed: false },
|
||||||
|
{ date: "2026-05-21", completed: false },
|
||||||
|
{ date: "2026-05-22", completed: false },
|
||||||
|
{ date: "2026-05-23", completed: false },
|
||||||
|
{ date: "2026-05-24", completed: false },
|
||||||
|
{ date: "2026-05-25", completed: false },
|
||||||
|
{ date: "2026-05-26", completed: false },
|
||||||
|
{ date: "2026-05-27", completed: false },
|
||||||
|
{ date: "2026-05-28", completed: false },
|
||||||
|
{ date: "2026-05-29", completed: false },
|
||||||
|
{ date: "2026-05-30", completed: false },
|
||||||
|
{ date: "2026-05-31", completed: false },
|
||||||
|
{ date: "2026-06-01", completed: false },
|
||||||
|
{ date: "2026-06-02", completed: false },
|
||||||
|
{ date: "2026-06-03", completed: false },
|
||||||
|
{ date: "2026-06-04", completed: false },
|
||||||
|
{ date: "2026-06-05", completed: false },
|
||||||
|
{ date: "2026-06-06", completed: false },
|
||||||
|
{ date: "2026-06-07", completed: false },
|
||||||
|
{ date: "2026-06-08", completed: false },
|
||||||
|
{ date: "2026-06-09", completed: false },
|
||||||
|
{ date: "2026-06-10", completed: false },
|
||||||
|
{ date: "2026-06-11", completed: false },
|
||||||
|
{ date: "2026-06-12", completed: false },
|
||||||
|
{ date: "2026-06-13", completed: false },
|
||||||
|
{ date: "2026-06-14", completed: false },
|
||||||
|
{ date: "2026-06-15", completed: false },
|
||||||
|
{ date: "2026-06-16", completed: false },
|
||||||
|
{ date: "2026-06-17", completed: false },
|
||||||
|
{ date: "2026-06-18", completed: false },
|
||||||
|
{ date: "2026-06-19", completed: false },
|
||||||
|
{ date: "2026-06-20", completed: false },
|
||||||
|
{ date: "2026-06-21", completed: false },
|
||||||
|
{ date: "2026-06-22", completed: false },
|
||||||
|
{ date: "2026-06-23", completed: false },
|
||||||
|
{ date: "2026-06-24", completed: false },
|
||||||
|
{ date: "2026-06-25", completed: false },
|
||||||
|
{ date: "2026-06-26", completed: false },
|
||||||
|
{ date: "2026-06-27", completed: false },
|
||||||
|
{ date: "2026-06-28", completed: false },
|
||||||
|
{ date: "2026-06-29", completed: false },
|
||||||
|
{ date: "2026-06-30", completed: false },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const walks = [
|
||||||
|
{ date: "2026-01-05", completed: false },
|
||||||
|
{ date: "2026-01-06", completed: false },
|
||||||
|
{ date: "2026-01-07", completed: false },
|
||||||
|
{ date: "2026-01-08", completed: false },
|
||||||
|
{ date: "2026-01-09", completed: false },
|
||||||
|
{ date: "2026-01-10", completed: false },
|
||||||
|
{ date: "2026-01-11", completed: false },
|
||||||
|
{ date: "2026-01-12", completed: false },
|
||||||
|
{ date: "2026-01-13", completed: false },
|
||||||
|
{ date: "2026-01-14", completed: false },
|
||||||
|
{ date: "2026-01-15", completed: false },
|
||||||
|
{ date: "2026-01-16", completed: false },
|
||||||
|
{ date: "2026-01-17", completed: false },
|
||||||
|
{ date: "2026-01-18", completed: false },
|
||||||
|
{ date: "2026-01-19", completed: false },
|
||||||
|
{ date: "2026-01-20", completed: false },
|
||||||
|
{ date: "2026-01-21", completed: false },
|
||||||
|
{ date: "2026-01-22", completed: false },
|
||||||
|
{ date: "2026-01-23", completed: false },
|
||||||
|
{ date: "2026-01-24", completed: false },
|
||||||
|
{ date: "2026-01-25", completed: false },
|
||||||
|
{ date: "2026-01-26", completed: false },
|
||||||
|
{ date: "2026-01-27", completed: false },
|
||||||
|
{ date: "2026-01-28", completed: false },
|
||||||
|
{ date: "2026-01-29", completed: false },
|
||||||
|
{ date: "2026-01-30", completed: false },
|
||||||
|
{ date: "2026-01-31", completed: false },
|
||||||
|
{ date: "2026-02-10", completed: false },
|
||||||
|
{ date: "2026-02-11", completed: false },
|
||||||
|
{ date: "2026-02-12", completed: false },
|
||||||
|
{ date: "2026-02-13", completed: false },
|
||||||
|
{ date: "2026-02-14", completed: false },
|
||||||
|
{ date: "2026-02-15", completed: false },
|
||||||
|
{ date: "2026-02-16", completed: false },
|
||||||
|
{ date: "2026-02-17", completed: false },
|
||||||
|
{ date: "2026-02-18", completed: false },
|
||||||
|
{ date: "2026-02-19", completed: false },
|
||||||
|
{ date: "2026-02-20", completed: false },
|
||||||
|
{ date: "2026-02-21", completed: false },
|
||||||
|
{ date: "2026-02-22", completed: false },
|
||||||
|
{ date: "2026-02-23", completed: false },
|
||||||
|
{ date: "2026-02-24", completed: false },
|
||||||
|
{ date: "2026-02-25", completed: false },
|
||||||
|
{ date: "2026-02-26", completed: false },
|
||||||
|
{ date: "2026-02-27", completed: false },
|
||||||
|
{ date: "2026-02-28", completed: false },
|
||||||
|
{ date: "2026-03-01", completed: false },
|
||||||
|
{ date: "2026-03-02", completed: false },
|
||||||
|
{ date: "2026-03-03", completed: false },
|
||||||
|
{ date: "2026-03-04", completed: false },
|
||||||
|
{ date: "2026-03-05", completed: false },
|
||||||
|
{ date: "2026-03-06", completed: false },
|
||||||
|
{ date: "2026-03-07", completed: false },
|
||||||
|
{ date: "2026-03-08", completed: false },
|
||||||
|
{ date: "2026-03-09", completed: false },
|
||||||
|
{ date: "2026-03-10", completed: false },
|
||||||
|
{ date: "2026-03-11", completed: false },
|
||||||
|
{ date: "2026-03-12", completed: false },
|
||||||
|
{ date: "2026-03-13", completed: false },
|
||||||
|
{ date: "2026-03-14", completed: false },
|
||||||
|
{ date: "2026-03-15", completed: false },
|
||||||
|
{ date: "2026-03-16", completed: false },
|
||||||
|
{ date: "2026-03-17", completed: false },
|
||||||
|
{ date: "2026-03-18", completed: false },
|
||||||
|
{ date: "2026-03-19", completed: false },
|
||||||
|
{ date: "2026-03-20", completed: false },
|
||||||
|
{ date: "2026-03-21", completed: false },
|
||||||
|
{ date: "2026-03-22", completed: false },
|
||||||
|
{ date: "2026-03-23", completed: false },
|
||||||
|
{ date: "2026-03-24", completed: false },
|
||||||
|
{ date: "2026-03-25", completed: false },
|
||||||
|
{ date: "2026-03-26", completed: false },
|
||||||
|
{ date: "2026-03-27", completed: false },
|
||||||
|
{ date: "2026-03-28", completed: false },
|
||||||
|
{ date: "2026-03-29", completed: false },
|
||||||
|
{ date: "2026-03-30", completed: false },
|
||||||
|
{ date: "2026-03-31", completed: false },
|
||||||
|
{ date: "2026-04-01", completed: false },
|
||||||
|
{ date: "2026-04-02", completed: false },
|
||||||
|
{ date: "2026-04-03", completed: false },
|
||||||
|
{ date: "2026-04-04", completed: false },
|
||||||
|
{ date: "2026-04-05", completed: false },
|
||||||
|
{ date: "2026-04-06", completed: false },
|
||||||
|
{ date: "2026-04-07", completed: false },
|
||||||
|
{ date: "2026-04-08", completed: false },
|
||||||
|
{ date: "2026-04-09", completed: false },
|
||||||
|
{ date: "2026-04-10", completed: false },
|
||||||
|
{ date: "2026-04-11", completed: false },
|
||||||
|
{ date: "2026-04-12", completed: false },
|
||||||
|
{ date: "2026-04-13", completed: false },
|
||||||
|
{ date: "2026-04-14", completed: false },
|
||||||
|
{ date: "2026-04-15", completed: false },
|
||||||
|
{ date: "2026-04-16", completed: false },
|
||||||
|
{ date: "2026-04-17", completed: false },
|
||||||
|
{ date: "2026-04-18", completed: false },
|
||||||
|
{ date: "2026-04-19", completed: false },
|
||||||
|
{ date: "2026-04-20", completed: false },
|
||||||
|
{ date: "2026-04-21", completed: false },
|
||||||
|
{ date: "2026-04-22", completed: false },
|
||||||
|
{ date: "2026-04-23", completed: false },
|
||||||
|
{ date: "2026-04-24", completed: false },
|
||||||
|
{ date: "2026-04-25", completed: false },
|
||||||
|
{ date: "2026-04-26", completed: false },
|
||||||
|
{ date: "2026-04-27", completed: false },
|
||||||
|
{ date: "2026-04-28", completed: false },
|
||||||
|
{ date: "2026-04-29", completed: false },
|
||||||
|
{ date: "2026-04-30", completed: false },
|
||||||
|
{ date: "2026-05-01", completed: false },
|
||||||
|
{ date: "2026-05-02", completed: false },
|
||||||
|
{ date: "2026-05-03", completed: false },
|
||||||
|
{ date: "2026-05-04", completed: false },
|
||||||
|
{ date: "2026-05-05", completed: false },
|
||||||
|
{ date: "2026-05-06", completed: false },
|
||||||
|
{ date: "2026-05-07", completed: false },
|
||||||
|
{ date: "2026-05-08", completed: false },
|
||||||
|
{ date: "2026-05-09", completed: false },
|
||||||
|
{ date: "2026-05-10", completed: false },
|
||||||
|
{ date: "2026-05-11", completed: false },
|
||||||
|
{ date: "2026-05-12", completed: false },
|
||||||
|
{ date: "2026-05-13", completed: false },
|
||||||
|
{ date: "2026-05-14", completed: false },
|
||||||
|
{ date: "2026-05-15", completed: false },
|
||||||
|
{ date: "2026-05-16", completed: false },
|
||||||
|
{ date: "2026-05-17", completed: false },
|
||||||
|
{ date: "2026-05-18", completed: false },
|
||||||
|
{ date: "2026-05-19", completed: false },
|
||||||
|
{ date: "2026-05-20", completed: false },
|
||||||
|
{ date: "2026-05-21", completed: false },
|
||||||
|
{ date: "2026-05-22", completed: false },
|
||||||
|
{ date: "2026-05-23", completed: false },
|
||||||
|
{ date: "2026-05-24", completed: false },
|
||||||
|
{ date: "2026-05-25", completed: false },
|
||||||
|
{ date: "2026-05-26", completed: false },
|
||||||
|
{ date: "2026-05-27", completed: false },
|
||||||
|
{ date: "2026-05-28", completed: false },
|
||||||
|
{ date: "2026-05-29", completed: false },
|
||||||
|
{ date: "2026-05-30", completed: false },
|
||||||
|
{ date: "2026-05-31", completed: false },
|
||||||
|
{ date: "2026-06-01", completed: false },
|
||||||
|
{ date: "2026-06-02", completed: false },
|
||||||
|
{ date: "2026-06-03", completed: false },
|
||||||
|
{ date: "2026-06-04", completed: false },
|
||||||
|
{ date: "2026-06-05", completed: false },
|
||||||
|
{ date: "2026-06-06", completed: false },
|
||||||
|
{ date: "2026-06-07", completed: false },
|
||||||
|
{ date: "2026-06-08", completed: false },
|
||||||
|
{ date: "2026-06-09", completed: false },
|
||||||
|
{ date: "2026-06-10", completed: false },
|
||||||
|
{ date: "2026-06-11", completed: false },
|
||||||
|
{ date: "2026-06-12", completed: false },
|
||||||
|
{ date: "2026-06-13", completed: false },
|
||||||
|
{ date: "2026-06-14", completed: false },
|
||||||
|
{ date: "2026-06-15", completed: false },
|
||||||
|
{ date: "2026-06-16", completed: false },
|
||||||
|
{ date: "2026-06-17", completed: false },
|
||||||
|
{ date: "2026-06-18", completed: false },
|
||||||
|
{ date: "2026-06-19", completed: false },
|
||||||
|
{ date: "2026-06-20", completed: false },
|
||||||
|
{ date: "2026-06-21", completed: false },
|
||||||
|
{ date: "2026-06-22", completed: false },
|
||||||
|
{ date: "2026-06-23", completed: false },
|
||||||
|
{ date: "2026-06-24", completed: false },
|
||||||
|
{ date: "2026-06-25", completed: false },
|
||||||
|
{ date: "2026-06-26", completed: false },
|
||||||
|
{ date: "2026-06-27", completed: false },
|
||||||
|
{ date: "2026-06-28", completed: false },
|
||||||
|
{ date: "2026-06-29", completed: false },
|
||||||
|
{ date: "2026-06-30", completed: false },
|
||||||
|
];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
cardio,
|
walks,
|
||||||
gym,
|
gym,
|
||||||
diet,
|
diet,
|
||||||
fast,
|
fast,
|
||||||
|
|
|
||||||
12
package-lock.json
generated
12
package-lock.json
generated
|
|
@ -84,6 +84,7 @@
|
||||||
"integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==",
|
"integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.2.0",
|
"@ampproject/remapping": "^2.2.0",
|
||||||
"@babel/code-frame": "^7.26.2",
|
"@babel/code-frame": "^7.26.2",
|
||||||
|
|
@ -2401,6 +2402,7 @@
|
||||||
"integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==",
|
"integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
|
"@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
|
||||||
"debug": "^4.4.0",
|
"debug": "^4.4.0",
|
||||||
|
|
@ -2474,6 +2476,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
||||||
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
|
|
@ -2496,6 +2499,7 @@
|
||||||
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
|
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
"fast-uri": "^3.0.1",
|
"fast-uri": "^3.0.1",
|
||||||
|
|
@ -2703,6 +2707,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001688",
|
"caniuse-lite": "^1.0.30001688",
|
||||||
"electron-to-chromium": "^1.5.73",
|
"electron-to-chromium": "^1.5.73",
|
||||||
|
|
@ -4459,6 +4464,7 @@
|
||||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
|
|
@ -4511,6 +4517,7 @@
|
||||||
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin/prettier.cjs"
|
"prettier": "bin/prettier.cjs"
|
||||||
},
|
},
|
||||||
|
|
@ -5217,6 +5224,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.6.tgz",
|
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.6.tgz",
|
||||||
"integrity": "sha512-6ydekB3qyqUal+UhfMjmVOjRGtxysR8vuiMhi2nwuBtPJWnctVlsGspjVFB05qmR+TXI1emuqtZt81c0XiFleA==",
|
"integrity": "sha512-6ydekB3qyqUal+UhfMjmVOjRGtxysR8vuiMhi2nwuBtPJWnctVlsGspjVFB05qmR+TXI1emuqtZt81c0XiFleA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.3.0",
|
"@ampproject/remapping": "^2.3.0",
|
||||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||||
|
|
@ -5308,6 +5316,7 @@
|
||||||
"integrity": "sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==",
|
"integrity": "sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/source-map": "^0.3.3",
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
"acorn": "^8.8.2",
|
"acorn": "^8.8.2",
|
||||||
|
|
@ -5442,6 +5451,7 @@
|
||||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
|
|
@ -5584,6 +5594,7 @@
|
||||||
"integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==",
|
"integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.24.2",
|
"esbuild": "^0.24.2",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
|
|
@ -5989,6 +6000,7 @@
|
||||||
"integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
|
"integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"rollup": "dist/bin/rollup"
|
"rollup": "dist/bin/rollup"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
import { currentView } from "./lib/store";
|
import { currentView } from "./lib/store";
|
||||||
import Summary from "./lib/Summary.svelte";
|
import Summary from "./lib/Summary.svelte";
|
||||||
import GymProgress from "./lib/GymProgress.svelte";
|
import GymProgress from "./lib/GymProgress.svelte";
|
||||||
import CardioProgress from "./lib/CardioProgress.svelte";
|
import WalksProgress from "./lib/WalksProgress.svelte";
|
||||||
import DietProgress from "./lib/DietProgress.svelte";
|
import DietProgress from "./lib/DietProgress.svelte";
|
||||||
import FastProgress from "./lib/FastProgress.svelte";
|
import FastProgress from "./lib/FastProgress.svelte";
|
||||||
import Info from "./lib/Info.svelte";
|
import Info from "./lib/Info.svelte";
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
<GymProgress />
|
<GymProgress />
|
||||||
{/if}
|
{/if}
|
||||||
{#if $currentView === 2}
|
{#if $currentView === 2}
|
||||||
<CardioProgress />
|
<WalksProgress />
|
||||||
{/if}
|
{/if}
|
||||||
{#if $currentView === 3}
|
{#if $currentView === 3}
|
||||||
<DietProgress />
|
<DietProgress />
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import DietProgress from "./DietProgress.svelte";
|
import DietProgress from "./DietProgress.svelte";
|
||||||
import P from "./svg-path";
|
import P from "./svg-path";
|
||||||
import { gym, cardio, diet, fast } from "./store";
|
import { gym, walks, diet } from "./store";
|
||||||
|
|
||||||
export const DEG_TO_RAD = Math.PI / 180;
|
export const DEG_TO_RAD = Math.PI / 180;
|
||||||
export const RAD_TO_DEG = 180 / Math.PI;
|
export const RAD_TO_DEG = 180 / Math.PI;
|
||||||
export const FULL_CIRCLE_IN_RADIANS = 2 * Math.PI;
|
export const FULL_CIRCLE_IN_RADIANS = 2 * Math.PI;
|
||||||
|
|
||||||
const size = 400;
|
const size = 400;
|
||||||
const segmentHeight = 16;
|
const segmentHeight = 32;
|
||||||
const span = 0.8 * FULL_CIRCLE_IN_RADIANS;
|
const span = 0.8 * FULL_CIRCLE_IN_RADIANS;
|
||||||
const startAngle = 0.25 * FULL_CIRCLE_IN_RADIANS + span / 2;
|
const startAngle = 0.25 * FULL_CIRCLE_IN_RADIANS + span / 2;
|
||||||
|
|
||||||
|
|
@ -26,18 +26,20 @@
|
||||||
const borderRadius = thickness / 2;
|
const borderRadius = thickness / 2;
|
||||||
const outerRadius = radius;
|
const outerRadius = radius;
|
||||||
const innerRadius = outerRadius - thickness;
|
const innerRadius = outerRadius - thickness;
|
||||||
const radEndAngle = startAngle - radLength;
|
|
||||||
const borderRadiusAngle =
|
const borderRadiusAngle =
|
||||||
(borderRadius / (outerRadius * FULL_CIRCLE_IN_RADIANS)) *
|
(borderRadius / (outerRadius * FULL_CIRCLE_IN_RADIANS)) *
|
||||||
FULL_CIRCLE_IN_RADIANS;
|
FULL_CIRCLE_IN_RADIANS;
|
||||||
|
const radEndAngle = startAngle - Math.max(radLength, 3 * borderRadiusAngle);
|
||||||
const isLongTrack = radLength - 2 * borderRadiusAngle > Math.PI;
|
const isLongTrack = radLength - 2 * borderRadiusAngle > Math.PI;
|
||||||
const start = startAngle + (offset ?? 0);
|
const start = startAngle + (offset ?? 0);
|
||||||
|
|
||||||
return P()
|
return P()
|
||||||
|
// mitt mellan startkortsidan (ca kl 8)
|
||||||
.moveTo(
|
.moveTo(
|
||||||
-Math.sin(start) * (outerRadius - borderRadius),
|
-Math.sin(start) * (outerRadius - borderRadius),
|
||||||
Math.cos(start) * (outerRadius - borderRadius),
|
Math.cos(start) * (outerRadius - borderRadius),
|
||||||
)
|
)
|
||||||
|
// kantavrundningen till yttre långsidan
|
||||||
.arcTo(
|
.arcTo(
|
||||||
borderRadius,
|
borderRadius,
|
||||||
borderRadius,
|
borderRadius,
|
||||||
|
|
@ -46,6 +48,7 @@
|
||||||
-Math.sin(start - borderRadiusAngle) * outerRadius,
|
-Math.sin(start - borderRadiusAngle) * outerRadius,
|
||||||
Math.cos(start - borderRadiusAngle) * outerRadius,
|
Math.cos(start - borderRadiusAngle) * outerRadius,
|
||||||
)
|
)
|
||||||
|
// yttre långsidan, start till slut
|
||||||
.arcTo(
|
.arcTo(
|
||||||
outerRadius,
|
outerRadius,
|
||||||
outerRadius,
|
outerRadius,
|
||||||
|
|
@ -54,6 +57,7 @@
|
||||||
-Math.sin(radEndAngle + borderRadiusAngle) * outerRadius,
|
-Math.sin(radEndAngle + borderRadiusAngle) * outerRadius,
|
||||||
Math.cos(radEndAngle + borderRadiusAngle) * outerRadius,
|
Math.cos(radEndAngle + borderRadiusAngle) * outerRadius,
|
||||||
)
|
)
|
||||||
|
// kantutjämningen från yttre långsidan till slutkortsidan
|
||||||
.arcTo(
|
.arcTo(
|
||||||
borderRadius,
|
borderRadius,
|
||||||
borderRadius,
|
borderRadius,
|
||||||
|
|
@ -62,10 +66,12 @@
|
||||||
-Math.sin(radEndAngle) * (outerRadius - borderRadius),
|
-Math.sin(radEndAngle) * (outerRadius - borderRadius),
|
||||||
Math.cos(radEndAngle) * (outerRadius - borderRadius),
|
Math.cos(radEndAngle) * (outerRadius - borderRadius),
|
||||||
)
|
)
|
||||||
|
// linje slutkortsidan, från yttersidan till innersidan
|
||||||
.lineTo(
|
.lineTo(
|
||||||
-Math.sin(radEndAngle) * (innerRadius + borderRadius),
|
-Math.sin(radEndAngle) * (innerRadius + borderRadius),
|
||||||
Math.cos(radEndAngle) * (innerRadius + borderRadius),
|
Math.cos(radEndAngle) * (innerRadius + borderRadius),
|
||||||
)
|
)
|
||||||
|
// kantutjämning till innersidan
|
||||||
.arcTo(
|
.arcTo(
|
||||||
borderRadius,
|
borderRadius,
|
||||||
borderRadius,
|
borderRadius,
|
||||||
|
|
@ -74,6 +80,7 @@
|
||||||
-Math.sin(radEndAngle + borderRadiusAngle) * innerRadius,
|
-Math.sin(radEndAngle + borderRadiusAngle) * innerRadius,
|
||||||
Math.cos(radEndAngle + borderRadiusAngle) * innerRadius,
|
Math.cos(radEndAngle + borderRadiusAngle) * innerRadius,
|
||||||
)
|
)
|
||||||
|
// innersidan, slut till start
|
||||||
.arcTo(
|
.arcTo(
|
||||||
innerRadius,
|
innerRadius,
|
||||||
innerRadius,
|
innerRadius,
|
||||||
|
|
@ -82,6 +89,7 @@
|
||||||
-Math.sin(start - borderRadiusAngle) * innerRadius,
|
-Math.sin(start - borderRadiusAngle) * innerRadius,
|
||||||
Math.cos(start - borderRadiusAngle) * innerRadius,
|
Math.cos(start - borderRadiusAngle) * innerRadius,
|
||||||
)
|
)
|
||||||
|
// kantutjämning från innersidan till start
|
||||||
.arcTo(
|
.arcTo(
|
||||||
borderRadius,
|
borderRadius,
|
||||||
borderRadius,
|
borderRadius,
|
||||||
|
|
@ -90,6 +98,7 @@
|
||||||
-Math.sin(start) * (innerRadius + borderRadius),
|
-Math.sin(start) * (innerRadius + borderRadius),
|
||||||
Math.cos(start) * (innerRadius + borderRadius),
|
Math.cos(start) * (innerRadius + borderRadius),
|
||||||
)
|
)
|
||||||
|
// stäng, blir en rak linje till den redan existerande kantutjämningen
|
||||||
.close()
|
.close()
|
||||||
.stringify();
|
.stringify();
|
||||||
};
|
};
|
||||||
|
|
@ -102,7 +111,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
c: "cardio",
|
c: "cardio",
|
||||||
progress: $cardio.filter((c) => c.completed).length / $cardio.length,
|
progress: $walks.filter((c) => c.completed).length / $walks.length,
|
||||||
level: 1,
|
level: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -112,11 +121,6 @@
|
||||||
$diet.filter((c) => !c.excluded).length,
|
$diet.filter((c) => !c.excluded).length,
|
||||||
level: 2,
|
level: 2,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
c: "fast",
|
|
||||||
progress: $fast.filter((c) => c.completed).length / $fast.length,
|
|
||||||
level: 3,
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -129,7 +133,7 @@
|
||||||
fill="#fff"
|
fill="#fff"
|
||||||
opacity="0.066"
|
opacity="0.066"
|
||||||
d={points(
|
d={points(
|
||||||
size / 2 - level * (segmentHeight + 4),
|
size / 2 - level * (segmentHeight + 6),
|
||||||
span,
|
span,
|
||||||
segmentHeight,
|
segmentHeight,
|
||||||
)}
|
)}
|
||||||
|
|
@ -138,18 +142,18 @@
|
||||||
class={c}
|
class={c}
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
d={points(
|
d={points(
|
||||||
size / 2 - level * (segmentHeight + 4),
|
size / 2 - level * (segmentHeight + 6),
|
||||||
progress * span,
|
progress * span,
|
||||||
segmentHeight,
|
segmentHeight,
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
fill="#fff"
|
fill="#fff"
|
||||||
opacity="0.4"
|
opacity="0"
|
||||||
d={points(
|
d={points(
|
||||||
size / 2 - level * (segmentHeight + 4) - 4,
|
size / 2 - level * (segmentHeight + 4) - 6,
|
||||||
progress * span * 0.98,
|
progress * span * 0.98,
|
||||||
4,
|
6,
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
{/each}
|
{/each}
|
||||||
|
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
import { cardio } from "./store";
|
|
||||||
import {dm, back } from "./common";
|
|
||||||
const remaining = $cardio.length;
|
|
||||||
const days = ["ons", "fre", "mån"];
|
|
||||||
let done = $derived($cardio.filter((c) => c.completed).length);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
<button class="clickable back" onclick={() => back()}>←</button>
|
|
||||||
<h1>
|
|
||||||
Konditionsträning: {done} av {remaining}
|
|
||||||
</h1>
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
<progress hidden max={remaining} value={done}></progress>
|
|
||||||
<div class="calendar">
|
|
||||||
{#each $cardio as col, i}
|
|
||||||
<article class="clickable">
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" bind:checked={col.completed} />
|
|
||||||
<strong
|
|
||||||
>{(col.run_for as number[])
|
|
||||||
.map((m) => `${m} min`)
|
|
||||||
.join(" + ")}, {col.pause_for} vila</strong
|
|
||||||
>
|
|
||||||
<small>{days[i % 3]} {dm(col.planned_at)}</small>
|
|
||||||
</label>
|
|
||||||
</article>
|
|
||||||
{/each}
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
main {
|
|
||||||
background-color: #5dc5f8;
|
|
||||||
border-top: 4px solid rgba(0, 0, 0, 0.2)
|
|
||||||
}
|
|
||||||
|
|
||||||
article:nth-child(1) {
|
|
||||||
grid-column: 2;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
import { gym } from "./store";
|
import { gym } from "./store";
|
||||||
import {dm, back } from "./common";
|
import {dm, back } from "./common";
|
||||||
const remaining = $gym.length;
|
const remaining = $gym.length;
|
||||||
const days = ["sön", "tis", "tor"];
|
const days = ["mån", "tis", "ons", "fre"];
|
||||||
let done = $derived($gym.filter((c) => c.completed).length);
|
let done = $derived($gym.filter((c) => c.completed).length);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -33,6 +33,10 @@
|
||||||
border-top: 4px solid rgba(0, 0, 0, 0.2)
|
border-top: 4px solid rgba(0, 0, 0, 0.2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.calendar {
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
article:nth-child(1) {
|
article:nth-child(1) {
|
||||||
grid-column: 3;
|
grid-column: 3;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,25 +12,19 @@
|
||||||
<main>
|
<main>
|
||||||
<div class="infobox">
|
<div class="infobox">
|
||||||
<h2>Hej, Anders har en 40-årskris xD</h2>
|
<h2>Hej, Anders har en 40-årskris xD</h2>
|
||||||
<p><em>Dessutom hägrar en vecka på Sweden rock festival.</em>
|
|
||||||
Ryggen och benen behöver vara i form.</p>
|
|
||||||
<p>
|
<p>
|
||||||
För att göra träningen litet mer belönande skapades denna app för att ge honom
|
För att göra träningen litet mer belönande skapades denna app för att ge honom
|
||||||
möjlighet att bocka i allt han gör.
|
möjlighet att bocka i allt han gör.
|
||||||
</p>
|
</p>
|
||||||
<h2>Börja löpträna</h2>
|
<h2>Daglig stegräkning</h2>
|
||||||
<p>Anders har tidigare löptränat, men inte gjort det kontinuerligt sedan 2017.</p>
|
<p>Anders jobbar på kontor och behöver se till att röra sig.</p>
|
||||||
<p><b>Metod:</b> löpträning 3 gånger per vecka: 2 pass med 2 intervaller, ett långpass. Linjär
|
<strong>Minst 10 000 steg varje dag.</strong>
|
||||||
progression med 60–120 sekunders ökning per pass.</p>
|
<h2>Återuppta styrketräning</h2>
|
||||||
<strong>Mål: 5km löpning efter 7 veckor.</strong>
|
<p>Anders föredrar baslyft med frivikter. Hans PB slogs senast januari 2023. Han behöver prioritera att bygga litet muskler.</p>
|
||||||
<h2>Återuppta styrkelyft</h2>
|
|
||||||
<p>Anders föredrar baslyft med frivikter. Hans PB slogs senast januari 2023.</p>
|
|
||||||
<p>
|
<p>
|
||||||
<b>Metod</b>: styrketräning 3 gånger per vecka. 4 veckor grundträning (A-blocket),
|
<b>Metod</b>: Powerbuilding, 4ggr/vecka.
|
||||||
4 veckor specialiserad träning (B-blocket), 3 veckor toppning (C-blocket).
|
|
||||||
</p>
|
</p>
|
||||||
<strong>Mål: 11 veckors träning, med avslutande toppning och
|
<strong>Mål: 24 veckors träning.</strong>
|
||||||
styrkelyftstotal.</strong>
|
|
||||||
<h2>Inleda diet</h2>
|
<h2>Inleda diet</h2>
|
||||||
<p>
|
<p>
|
||||||
Anders har ett uppskattat BMI på 28-32 vid start av denna utmaning.
|
Anders har ett uppskattat BMI på 28-32 vid start av denna utmaning.
|
||||||
|
|
@ -38,7 +32,7 @@
|
||||||
<p>
|
<p>
|
||||||
<b>Metod</b>: Följa
|
<b>Metod</b>: Följa
|
||||||
<a href="https://www.youtube.com/watch?v=fB_ESE2XwOU">Alan Thralls tips</a>, som listas nedan.
|
<a href="https://www.youtube.com/watch?v=fB_ESE2XwOU">Alan Thralls tips</a>, som listas nedan.
|
||||||
Anders cheat meals: Semla på semmeldagen, fika på födelsedagen, liten godispåse på lördagar.
|
Anders cheat meals: Semla på semmeldagen, fika på födelsedagen.
|
||||||
</p>
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -59,7 +53,7 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p><strong>Mål: Följa ovan kostråd 16 veckor, med fördefinierade cheat meals.</strong></p>
|
<p><strong>Mål: Följa ovan kostråd jan–juni, med fördefinierade cheat meals.</strong></p>
|
||||||
<h2>Vem?</h2>
|
<h2>Vem?</h2>
|
||||||
<p>
|
<p>
|
||||||
Anders skapade denna PWA. Han är en webbutvecklare som är pappa, älskar hårdrock och föredrar att
|
Anders skapade denna PWA. Han är en webbutvecklare som är pappa, älskar hårdrock och föredrar att
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,8 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { gym, fast, cardio, diet, currentView } from "./store";
|
import { gym, fast, walks, diet, currentView } from "./store";
|
||||||
import Arc from "./Arc.svelte";
|
import Arc from "./Arc.svelte";
|
||||||
let gymProgress = $derived($gym.filter((c) => c.completed).length);
|
let gymProgress = $derived($gym.filter((c) => c.completed).length);
|
||||||
let cardioProgress = $derived($cardio.filter((c) => c.completed).length);
|
let walksProgress = $derived($walks.filter((c) => c.completed).length);
|
||||||
let fastProgress = $derived($fast.filter((c) => c.completed).length);
|
|
||||||
let dietProgress = $derived($diet.filter((c) => c.completed).length);
|
let dietProgress = $derived($diet.filter((c) => c.completed).length);
|
||||||
let dietTotal = $derived($diet.filter((c) => !c.excluded).length);
|
let dietTotal = $derived($diet.filter((c) => !c.excluded).length);
|
||||||
|
|
||||||
|
|
@ -14,34 +13,28 @@
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<h1>Dags att komma i form!</h1>
|
<h1>Dags att komma i form!</h1>
|
||||||
<Arc />
|
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<h2>Styrketräning, 3d/v under 11 veckor</h2>
|
<h2>Powerbuilding Lite</h2>
|
||||||
<div class="progress-row">
|
<div class="progress-row">
|
||||||
<progress class="gym" value={gymProgress} max={$gym.length}></progress>
|
<progress class="gym" value={gymProgress} max={$gym.length}></progress>
|
||||||
<i>{gymProgress} / {$gym.length}</i>
|
<i>{gymProgress} / {$gym.length}</i>
|
||||||
<button class="clickable gym" onclick={() => navigate(1)}>+</button>
|
<button class="clickable gym" onclick={() => navigate(1)}>+</button>
|
||||||
</div>
|
</div>
|
||||||
<h2>Konditionsträning, 3d/v under 7 veckor</h2>
|
<h2>10 000–15 000 steg/dag</h2>
|
||||||
<div class="progress-row">
|
<div class="progress-row">
|
||||||
<progress class="cardio" value={cardioProgress} max={$cardio.length}
|
<progress class="walks" value={walksProgress} max={$walks.length}
|
||||||
></progress>
|
></progress>
|
||||||
<i>{cardioProgress} / {$cardio.length}</i>
|
<i>{walksProgress} / {$walks.length}</i>
|
||||||
<button class="clickable cardio" onclick={() => navigate(2)}>+</button>
|
<button class="clickable walks" onclick={() => navigate(2)}>+</button>
|
||||||
</div>
|
</div>
|
||||||
<h2>Diet, feb–maj</h2>
|
<h2>Diet, jan–maj</h2>
|
||||||
<div class="progress-row">
|
<div class="progress-row">
|
||||||
<progress class="diet" value={dietProgress} max={dietTotal}></progress>
|
<progress class="diet" value={dietProgress} max={dietTotal}></progress>
|
||||||
<i>{dietProgress} / {dietTotal}</i>
|
<i>{dietProgress} / {dietTotal}</i>
|
||||||
<button class="clickable diet" onclick={() => navigate(3)}>+</button>
|
<button class="clickable diet" onclick={() => navigate(3)}>+</button>
|
||||||
</div>
|
</div>
|
||||||
<h2>Fasta, 3d/v under maj</h2>
|
|
||||||
<div class="progress-row">
|
|
||||||
<progress class="fast" value={fastProgress} max={$fast.length}></progress>
|
|
||||||
<i>{fastProgress} / {$fast.length}</i>
|
|
||||||
<button class="clickable fast" onclick={() => navigate(5)}>+</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<Arc />
|
||||||
<div class="top-button">
|
<div class="top-button">
|
||||||
<button class="clickable info" onclick={() => navigate(4)}> Va? </button>
|
<button class="clickable info" onclick={() => navigate(4)}> Va? </button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -60,7 +53,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
progress {
|
progress {
|
||||||
&.cardio {
|
&.walks {
|
||||||
--pcolor: #5dc5f8;
|
--pcolor: #5dc5f8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,7 +178,7 @@
|
||||||
background-color: var(--btn-bg);
|
background-color: var(--btn-bg);
|
||||||
padding: 0.25em 0.66em;
|
padding: 0.25em 0.66em;
|
||||||
|
|
||||||
&.cardio {
|
&.walks {
|
||||||
--btn-bg: #5dc5f8;
|
--btn-bg: #5dc5f8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
48
src/lib/WalksProgress.svelte
Normal file
48
src/lib/WalksProgress.svelte
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { walks } from "./store";
|
||||||
|
import {dm, back } from "./common";
|
||||||
|
const remaining = $walks.length;
|
||||||
|
const days = ["ons", "fre", "mån"];
|
||||||
|
let done = $derived($walks.filter((c) => c.completed).length);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<button class="clickable back" onclick={() => back()}>←</button>
|
||||||
|
<h1>
|
||||||
|
Stegutmaning: {done} av {remaining}
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<progress hidden max={remaining} value={done}></progress>
|
||||||
|
<div class="calendar">
|
||||||
|
{#each $walks as day, i}
|
||||||
|
<article class="clickable">
|
||||||
|
{#if day.excluded}
|
||||||
|
<div class="red">
|
||||||
|
{day.because}
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" bind:checked={day.completed} />
|
||||||
|
{dm(day.date)}
|
||||||
|
</label>
|
||||||
|
{/if}
|
||||||
|
</article>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
main {
|
||||||
|
background-color: #5dc5f8;
|
||||||
|
border-top: 4px solid rgba(0, 0, 0, 0.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar {
|
||||||
|
grid-template-columns: repeat(7, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
article:nth-child(1) {
|
||||||
|
grid-column: 1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -3,8 +3,7 @@ import { persisted } from "svelte-persisted-store";
|
||||||
import defaultState from "../../data/default-state";
|
import defaultState from "../../data/default-state";
|
||||||
|
|
||||||
export const currentView = writable(0);
|
export const currentView = writable(0);
|
||||||
|
export const walks = persisted("walks", defaultState.walks);
|
||||||
export const cardio = persisted("cardio", defaultState.cardio);
|
|
||||||
export const gym = persisted("gym", defaultState.gym);
|
export const gym = persisted("gym", defaultState.gym);
|
||||||
export const diet = persisted("diet", defaultState.diet);
|
export const diet = persisted("diet", defaultState.diet);
|
||||||
export const fast = persisted("fast", defaultState.fast);
|
export const fast = persisted("fast", defaultState.fast);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue