From 6877c5ba9708e77fa9017bc0f52924ca1d659f3d Mon Sep 17 00:00:00 2001 From: Spencer Flagg Date: Sat, 27 Jan 2024 14:23:41 +0100 Subject: [PATCH] added editing; reversed list; fixed nap stat?; added repeater keys; styling; --- package-lock.json | 72 ++++++------ package.json | 4 +- src/lib/components/Action.svelte | 105 +++++++++++++++++ src/lib/components/counters.svelte | 2 +- src/routes/+page.svelte | 183 ++++++++++++++++++----------- src/routes/calendar/+page.svelte | 6 +- src/routes/stats/+page.svelte | 4 +- src/styles/app.css | 22 +++- 8 files changed, 285 insertions(+), 113 deletions(-) create mode 100644 src/lib/components/Action.svelte diff --git a/package-lock.json b/package-lock.json index df82746..68e17dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,7 @@ "dependencies": { "@sveltejs/adapter-node": "^4.0.1", "milligram": "^1.4.1", - "pocketbase": "^0.20.3", - "svelte-calendar": "^3.1.6" + "pocketbase": "^0.20.3" }, "devDependencies": { "@playwright/test": "^1.28.1", @@ -26,6 +25,7 @@ "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.1.2", + "sass": "^1.70.0", "svelte": "^4.2.7", "svelte-check": "^3.6.0", "tslib": "^2.4.1", @@ -1442,7 +1442,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, + "devOptional": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1500,7 +1500,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -1517,7 +1517,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1613,7 +1613,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "funding": [ { "type": "individual", @@ -1640,7 +1640,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1735,11 +1735,6 @@ "node": ">=4" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2222,7 +2217,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "devOptional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2462,6 +2457,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "devOptional": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2514,7 +2515,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2551,7 +2552,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -2560,7 +2561,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2577,7 +2578,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12.0" } @@ -2653,11 +2654,6 @@ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, - "node_modules/just-throttle": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/just-throttle/-/just-throttle-2.3.1.tgz", - "integrity": "sha512-0H4miIAWZYpnpg7oD/Y/PBb77ISSHAETif5xK9EnwIgYCO6oC8ErkJxDumMUTR44shSOwptRIArRuvNuvN/hOw==" - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2935,7 +2931,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -3392,7 +3388,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -3539,6 +3535,23 @@ "rimraf": "bin.js" } }, + "node_modules/sass": { + "version": "1.70.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", + "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -3762,15 +3775,6 @@ "node": ">=16" } }, - "node_modules/svelte-calendar": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/svelte-calendar/-/svelte-calendar-3.1.6.tgz", - "integrity": "sha512-jOHiPlxBAa1LGVFQZoczdAGnCSI2RKcuQQHj32TjLbXO/P2Povx4JphPEcP7XjKj/s/jimBC6xQyFhyjD0vxbg==", - "dependencies": { - "dayjs": "^1.10.6", - "just-throttle": "^2.3.1" - } - }, "node_modules/svelte-check": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.3.tgz", @@ -3937,7 +3941,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "dependencies": { "is-number": "^7.0.0" }, diff --git a/package.json b/package.json index a49903b..35b0f2f 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.1.2", + "sass": "^1.70.0", "svelte": "^4.2.7", "svelte-check": "^3.6.0", "tslib": "^2.4.1", @@ -38,7 +39,6 @@ "dependencies": { "@sveltejs/adapter-node": "^4.0.1", "milligram": "^1.4.1", - "pocketbase": "^0.20.3", - "svelte-calendar": "^3.1.6" + "pocketbase": "^0.20.3" } } diff --git a/src/lib/components/Action.svelte b/src/lib/components/Action.svelte new file mode 100644 index 0000000..1059469 --- /dev/null +++ b/src/lib/components/Action.svelte @@ -0,0 +1,105 @@ + + + + + + +{action.type} at {new Date( + action.timestamp +).toLocaleTimeString('en-NL', { hour: '2-digit', minute: '2-digit' })} + + +
+
+

+ {action.type} @{new Date(action.timestamp).toLocaleString('en-NL', { + hour: '2-digit', + minute: '2-digit' + })} +

+
+
+ + + + + +
+
+
+
\ No newline at end of file diff --git a/src/lib/components/counters.svelte b/src/lib/components/counters.svelte index cecb318..402c314 100644 --- a/src/lib/components/counters.svelte +++ b/src/lib/components/counters.svelte @@ -48,7 +48,7 @@ } onMount(() => { - const interval = setInterval(updateTimes, 1000); // Update every minute + const interval = setInterval(updateTimes, 2000); // Update every 2 minutes return () => { clearInterval(interval); // Cleanup on component destruction diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index a15b27d..a456628 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,75 +1,124 @@ -{#if $currentUser} - + + +{#if $currentUser} + + +
+

Today

+
+
    + {#each sortedActions as action (action.id)} +
  • + +
  • + {/each} +
+ +
+
+{/if} diff --git a/src/routes/calendar/+page.svelte b/src/routes/calendar/+page.svelte index ed087ca..0376513 100644 --- a/src/routes/calendar/+page.svelte +++ b/src/routes/calendar/+page.svelte @@ -122,16 +122,16 @@ import { onMount } from 'svelte';
- {#each daysOfWeek as day} + {#each daysOfWeek as day (day)}
{day}
{/each} - {#each hours as hour} + {#each hours as hour (hour)}
{formatHour(hour)}
{#each daysOfWeek as _, dayIndex}
- {#each actions as action} + {#each actions as action (action.id)} {#if getDayOfWeek(action.timestamp) === dayIndex && getHourOfDay(action.timestamp) === hour}
{action.type}{formatTime(action.timestamp)}
{/if} diff --git a/src/routes/stats/+page.svelte b/src/routes/stats/+page.svelte index 3d28d4b..c830d0d 100644 --- a/src/routes/stats/+page.svelte +++ b/src/routes/stats/+page.svelte @@ -175,10 +175,12 @@

Stats

+

(let me know how broken these are)

  • {stats.avgSleepPerNap} min / nap
  • {stats.avgNapsPerDay} naps / day
  • -
  • {stats.avgSleepPerDay} min of sleep / day
  • + +
  • {stats.avgSleepPerNap * stats.avgNapsPerDay} min of sleep / day
  • {stats.avgDiaperChanges} diapers / day
  • {stats.avgPoops} days between poops
  • {stats.avgEatingTimes} meals / day
  • diff --git a/src/styles/app.css b/src/styles/app.css index 075c243..4517a05 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -25,12 +25,14 @@ html[data-theme='light'] body { background-color: #f2f0ef; --c-border: #e9e9e9; --c-toggle: #00464b; + --c-zebra: #ececec; } html[data-theme='dark'] body { background-color: #181818; --c-border: #2b2b2b; --c-toggle: #ffe600; + --c-zebra: #ececec11; } @@ -43,6 +45,11 @@ textarea:focus { color: var(--c-primary); } +button, +input[type='submit'] { + --color: var(--c-primary); +} + button, input[type='submit'] { background-color: var(--color); @@ -72,10 +79,6 @@ nav ul li { list-style: none; } -.today__list ul { - list-style: none; -} - header { padding-top: 2rem; } @@ -140,5 +143,14 @@ section { margin-right: -2rem; border-radius: 2rem 0 0 2rem; } - +} + +@media screen and (max-width: 400px) { + .counters { + margin-right: -2rem; + border-radius: 2rem 0 0 2rem; + position: fixed; + bottom: 2rem; + top:auto; + } }