diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..2c3e25d --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,5 @@ +import { defineConfig } from "astro/config"; + +export default defineConfig({ + trailingSlash: "always", +}); diff --git a/deno.json b/deno.json index 0647e37..95f71d1 100644 --- a/deno.json +++ b/deno.json @@ -1,11 +1,12 @@ { "imports": { - "@web-applets/sdk": "npm:@web-applets/sdk@0.2.0-alpha.8", - "astro": "npm:astro@^5.4.1" + "@web-applets/sdk": "npm:@web-applets/sdk@0.2.0-alpha.12", + "astro": "npm:astro@^5.4.1", + "spellcaster": "npm:spellcaster@^5.0.2" }, "tasks": { "build": "astro build", - "dev": "astro preview" + "dev": "astro dev" }, "compilerOptions": { "lib": ["dom", "dom.iterable", "dom.asynciterable", "deno.ns"] diff --git a/deno.lock b/deno.lock index 96dcf1b..7d48497 100644 --- a/deno.lock +++ b/deno.lock @@ -1,12 +1,13 @@ { "version": "4", "specifiers": { - "npm:@web-applets/sdk@0.2.0-alpha.8": "0.2.0-alpha.8", + "npm:@web-applets/sdk@0.2.0-alpha.12": "0.2.0-alpha.12", "npm:asto@*": "0.1.0", "npm:asto@0.1.0": "0.1.0", "npm:astro@5.4.2": "5.4.2_vite@6.2.1_zod@3.24.2", "npm:astro@^5.4.1": "5.4.2_vite@6.2.1_zod@3.24.2", - "npm:create-astro@latest": "4.11.1" + "npm:create-astro@latest": "4.11.1", + "npm:spellcaster@^5.0.2": "5.0.2" }, "npm": { "@astrojs/cli-kit@0.4.1": { @@ -484,8 +485,8 @@ "@ungap/structured-clone@1.3.0": { "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" }, - "@web-applets/sdk@0.2.0-alpha.8": { - "integrity": "sha512-rEAAUlWy9IN8lNh7SGbnOPVGEOhtC7rfsCHK8Sc/sNhqTWY1Vwwiq6tsb+O2xHjibfWq3aJAQ7G8roR1Rcmzlg==" + "@web-applets/sdk@0.2.0-alpha.12": { + "integrity": "sha512-LCGHB/7q3h5EZReZAK9zrrODBDsFbJaNXhEhGFF8ga2JKXKnBCkeF3fYg7tTVsIOLY52dG7JkUo2911hEABfhw==" }, "acorn@8.14.1": { "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" @@ -1979,6 +1980,9 @@ "signal-exit@3.0.7": { "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "signal-polyfill@0.1.2": { + "integrity": "sha512-HT9d+L9NMiTzMxb/tU2Baym6129ROyRETSjvchvSkQa7wN0+SrG/IUlsaBLqKn2c+4mlze6CgQBEvgBjxOpiaQ==" + }, "simple-swizzle@0.2.2": { "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": [ @@ -2004,6 +2008,12 @@ "space-separated-tokens@2.0.2": { "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" }, + "spellcaster@5.0.2": { + "integrity": "sha512-suCHnQlCyXAV1OCrL0jEjE8lCK+f2bfmnvBfIqkG6Q3fNiQ7mAaeXtSyEKCI5p2ifSieC5bS/59EcIfDh5PWMA==", + "dependencies": [ + "signal-polyfill" + ] + }, "sprintf-js@1.0.3": { "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, @@ -2308,8 +2318,9 @@ }, "workspace": { "dependencies": [ - "npm:@web-applets/sdk@0.2.0-alpha.8", - "npm:astro@^5.4.1" + "npm:@web-applets/sdk@0.2.0-alpha.12", + "npm:astro@^5.4.1", + "npm:spellcaster@^5.0.2" ] } } diff --git a/src/pages/engines/audio/index.astro b/src/pages/engines/audio/index.astro index fee6178..96deb7e 100644 --- a/src/pages/engines/audio/index.astro +++ b/src/pages/engines/audio/index.astro @@ -12,17 +12,38 @@ import Applet from "../../../layouts/applet.astro"; diff --git a/src/pages/interface/audio/index.astro b/src/pages/interface/audio/index.astro index 65d99a4..2b595e9 100644 --- a/src/pages/interface/audio/index.astro +++ b/src/pages/interface/audio/index.astro @@ -19,20 +19,37 @@ import Applet from "../../../layouts/applet.astro"; const context = applets.register(); + //////////////////////////////////////////// + // Initial state + //////////////////////////////////////////// + context.data = { + isPlaying: false, + }; + + //////////////////////////////////////////// + // Actions + //////////////////////////////////////////// context.setActionHandler("set_is_playing", (isPlaying: boolean) => { - context.data = { ...context.data, isPlaying }; + context.data.isPlaying = isPlaying; + render(); }); context.setActionHandler("set_progress", (progress: number) => { document.body.querySelector("progress").value = Math.round(progress * 100); + render(); }); - context.ondata = () => { - document.body.querySelector("button").innerText = context.data.isPlaying ? "⏸️" : "▶️"; - }; - + //////////////////////////////////////////// + // DOM + //////////////////////////////////////////// document.body.querySelector("button").onclick = () => { context.data = { isPlaying: !(context.data?.isPlaying ?? false) }; }; + + function render() { + document.body.querySelector("button").innerText = context.data.isPlaying ? "⏸️" : "▶️"; + } + + render();