diff --git a/web/package-lock.json b/web/package-lock.json index e86a70c..5c9cf6d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -10,6 +10,7 @@ "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/vite": "^4.3.1", "cpc": "file:../pkg", + "runed": "^0.37.1", "svelte": "^5.56.3", "svelte-check": "^4.6.0", "tailwindcss": "^4.1.8", @@ -22,7 +23,7 @@ }, "../pkg": { "name": "cpc", - "version": "3.0.0", + "version": "3.1.0", "dev": true, "license": "MIT" }, @@ -5062,6 +5063,16 @@ "node": ">= 0.6" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -6335,6 +6346,16 @@ "node": ">=12" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -7180,6 +7201,35 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/runed": { + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.37.1.tgz", + "integrity": "sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "esm-env": "^1.0.0", + "lz-string": "^1.5.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.21.0", + "svelte": "^5.7.0", + "zod": "^4.1.0" + }, + "peerDependenciesMeta": { + "@sveltejs/kit": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", diff --git a/web/package.json b/web/package.json index b93d10b..b14dad6 100644 --- a/web/package.json +++ b/web/package.json @@ -16,6 +16,7 @@ "@sveltejs/vite-plugin-svelte": "^6.2.4", "@tailwindcss/vite": "^4.3.1", "cpc": "file:../pkg", + "runed": "^0.37.1", "svelte": "^5.56.3", "svelte-check": "^4.6.0", "tailwindcss": "^4.1.8", diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 00b597e..c5a46d5 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -2,6 +2,8 @@ import { check_shortcut } from "$lib/helpers"; import { flip } from "svelte/animate"; import { fly } from "svelte/transition"; + import { PersistedState } from "runed"; + // Has to be dynamically imported for prerendering to work // https://github.com/sveltejs/svelte/issues/13155 const cpc_promise = import("cpc"); @@ -23,7 +25,9 @@ let input = $state(""); let output = $derived(wasm_eval(input)); - let saved_queries: { id: number; in: string; out: string }[] = $state([]); + let calc_history = new PersistedState< + { id: number; in: string; out: string }[] + >("calc_history", []); @@ -71,8 +75,8 @@ if (check_shortcut(e, "Enter")) { const out = wasm_eval(input); console.log(out); - saved_queries.unshift({ - id: saved_queries.length, + calc_history.current.push({ + id: Date.now(), in: input, out, }); @@ -87,7 +91,8 @@
{output}
- {#each saved_queries as query (query.id)} + {#each calc_history.current as _, i (calc_history.current.length - 1 - i)} + {let query = calc_history.current[calc_history.current.length - 1 - i]}