diff --git a/package-lock.json b/package-lock.json index 375c73a..ea398cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,11 @@ "": { "name": "baby-tracker", "version": "0.0.1", + "dependencies": { + "milligram": "^1.4.1", + "pocketbase": "^0.20.3", + "svelte-calendar": "^3.1.6" + }, "devDependencies": { "@playwright/test": "^1.28.1", "@sveltejs/adapter-auto": "^3.0.0", @@ -1615,6 +1620,11 @@ "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", @@ -2494,6 +2504,11 @@ "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", @@ -2650,6 +2665,14 @@ "node": ">=8.6" } }, + "node_modules/milligram": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/milligram/-/milligram-1.4.1.tgz", + "integrity": "sha512-RCgh/boHhcXWOUfKJWm3RJRoUeaEguoipDg0mJ31G0tFfvcpWMUlO1Zlqqr12K4kAXfDlllaidu0x7PaL2PTFg==", + "dependencies": { + "normalize.css": "~8.0.1" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -2776,6 +2799,11 @@ "node": ">=0.10.0" } }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, "node_modules/npm-run-path": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", @@ -3007,6 +3035,11 @@ "node": ">=16" } }, + "node_modules/pocketbase": { + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.20.3.tgz", + "integrity": "sha512-qembHhE7HumDBZpxWgFIbhJPeaCoUIdwhW59xF/VlMR79pDTYz/LaQ4q89y7GczKo4X9actFgFN8hs4dTl0spQ==" + }, "node_modules/postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", @@ -3567,6 +3600,15 @@ "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", diff --git a/package.json b/package.json index 909e1ab..ba535c7 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,10 @@ "vite": "^5.0.3", "vitest": "^1.2.0" }, - "type": "module" + "type": "module", + "dependencies": { + "milligram": "^1.4.1", + "pocketbase": "^0.20.3", + "svelte-calendar": "^3.1.6" + } } diff --git a/src/lib/pocketbase.ts b/src/lib/pocketbase.ts new file mode 100644 index 0000000..bc1c6db --- /dev/null +++ b/src/lib/pocketbase.ts @@ -0,0 +1,18 @@ +// import PocketBase from 'pocketbase'; + +// const client = new PocketBase('https://pb.altweb.me'); //:8090 +// export default client; + +import PocketBase from 'pocketbase'; + +import { writable } from 'svelte/store'; + +export const pb = new PocketBase('https://pb.altweb.me'); // remote +// const pb = new PocketBase('http://127.0.0.1:8090'); // local + +export const currentUser = writable(pb.authStore.model); + +pb.authStore.onChange((auth) => { + console.log('authStore changed', auth); + currentUser.set(pb.authStore.model); +}); \ No newline at end of file diff --git a/src/lib/userStore.ts b/src/lib/userStore.ts new file mode 100644 index 0000000..63566e4 --- /dev/null +++ b/src/lib/userStore.ts @@ -0,0 +1,13 @@ +import { writable } from 'svelte/store'; + +interface UserRecord { + username: string; + email: string; + password: string; +} + +interface User { + record: UserRecord; +} + +export const user = writable(); \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..9d5d704 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + + + Coover Tracker + + + + + + +
+
+

Coover Tracker

+ +
+ + +
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5982b0a..77fb1a9 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,56 @@ -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+ + +{#if $currentUser} +
+ + + + + + +

Today

+ +
+{/if} \ No newline at end of file diff --git a/src/routes/calendar/+page.svelte b/src/routes/calendar/+page.svelte new file mode 100644 index 0000000..62bc777 --- /dev/null +++ b/src/routes/calendar/+page.svelte @@ -0,0 +1,79 @@ + + + + +
+ + {#each daysOfWeek as day} +
{day}
+ {/each} + + + {#each hours as hour} + {#each daysOfWeek as _, dayIndex} +
+ {#each actions as action} + {#if getDayOfWeek(action.created) === dayIndex && getHourOfDay(action.created) === hour} +
{action.type}
+ {/if} + {/each} +
+ {/each} + {/each} +
+ \ No newline at end of file diff --git a/src/routes/signin/+page.svelte b/src/routes/signin/+page.svelte new file mode 100644 index 0000000..c170d51 --- /dev/null +++ b/src/routes/signin/+page.svelte @@ -0,0 +1,91 @@ + + +{#if $currentUser} +

+ Signed in as {$currentUser.username} + +

+{:else} +
+

Sign Up

+ + + + + +
+ +
+

Sign In

+ + + +
+{/if} \ No newline at end of file diff --git a/src/routes/stats/+page.svelte b/src/routes/stats/+page.svelte new file mode 100644 index 0000000..62210f9 --- /dev/null +++ b/src/routes/stats/+page.svelte @@ -0,0 +1,187 @@ + + +
+

Stats

+ +
diff --git a/src/styles/app.css b/src/styles/app.css new file mode 100644 index 0000000..7f1b5f4 --- /dev/null +++ b/src/styles/app.css @@ -0,0 +1,18 @@ +:root { + --c-primary: darkorange; /* Replace #yourColor with your desired color */ +} + +a, +input[type="text"]:focus, +input[type="email"]:focus, +input[type="password"]:focus, +select:focus, +textarea:focus { + color: var(--c-primary); +} + +button, +input[type="submit"] { + background-color: var(--c-primary); + border-color: var(--c-primary); +} \ No newline at end of file