From 80ed37298b5dd29403c0e904830c7cc221613dc9 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sun, 17 May 2026 14:12:01 +0100 Subject: [PATCH] not sure --- e2e/app.spec.ts | 14 + index.html | 17 +- src/audio/garden-audio-config.ts | 190 ++++++ src/audio/garden-audio-gesture-state.test.ts | 100 ++- src/audio/garden-audio-gesture-state.ts | 91 ++- src/audio/garden-audio-graph.test.ts | 92 +++ src/audio/garden-audio-graph.ts | 98 ++- src/audio/garden-audio-input.test.ts | 52 ++ src/audio/garden-audio-input.ts | 34 +- src/audio/garden-audio-music.ts | 18 +- src/audio/garden-audio-types.ts | 10 + src/audio/garden-audio.test.ts | 44 +- src/audio/garden-audio.ts | 25 +- src/audio/generative-piano.test.ts | 59 ++ src/audio/generative-piano.ts | 588 +++++++++++++----- src/audio/noise-burst-player.ts | 9 +- src/audio/piano-sampler.test.ts | 1 + src/audio/piano-sampler.ts | 6 +- src/audio/piano-samples.ts | 11 +- src/config.ts | 280 ++++++++- src/config/default-settings.ts | 47 ++ src/config/runtime-controls.ts | 264 ++++++++ src/config/types.ts | 73 +++ src/config/vibe-presets.ts | 13 +- src/game-loop/agent-population.ts | 81 ++- src/game-loop/export-4k-renderer.ts | 11 +- src/game-loop/export-4k.ts | 31 +- src/game-loop/frame-performance.ts | 10 +- src/game-loop/game-loop-ping-pong.test.ts | 4 +- src/game-loop/game-loop-resources.ts | 14 +- src/game-loop/game-loop.ts | 55 +- src/game-loop/intro-prompt.test.ts | 58 ++ src/game-loop/intro-prompt.ts | 38 +- src/game-loop/intro-title-agents.test.ts | 97 +++ src/game-loop/intro-title-agents.ts | 113 +++- src/game-loop/pointer-input.test.ts | 25 + src/game-loop/pointer-input.ts | 31 +- src/game-loop/simulation-frame.ts | 15 +- src/game-loop/simulation-textures.ts | 44 +- src/game-loop/toolbar-contrast-monitor.ts | 69 +- src/index.ts | 89 ++- .../agent-generation/agent-compaction.wgsl | 35 +- .../agent-generation-pipeline.test.ts | 9 +- .../agent-generation-pipeline.ts | 150 +++-- .../agents/agent-generation/agent-resize.wgsl | 10 +- .../agent-generation/agent-schema.test.ts | 9 +- src/pipelines/agents/agent-pipeline.ts | 91 ++- src/pipelines/agents/agent-settings.ts | 15 + src/pipelines/agents/agent.wgsl | 154 +++-- src/pipelines/brush/brush-pipeline.ts | 123 +--- src/pipelines/brush/brush-settings.ts | 10 + src/pipelines/brush/brush.wgsl | 98 ++- src/pipelines/common-state/common-state.ts | 6 +- src/pipelines/copy/copy-pipeline.ts | 189 ------ src/pipelines/copy/copy.wgsl | 19 - src/pipelines/diffusion/diffuse.wgsl | 98 ++- .../diffusion/diffusion-pipeline.test.ts | 12 +- src/pipelines/diffusion/diffusion-pipeline.ts | 125 ++-- src/pipelines/diffusion/diffusion-settings.ts | 3 + src/pipelines/eraser/eraser-agent-pipeline.ts | 30 +- src/pipelines/eraser/eraser-agent.wgsl | 13 +- .../eraser/eraser-texture-pipeline.ts | 189 +++--- src/pipelines/eraser/eraser-texture.wgsl | 92 ++- src/pipelines/render/render-pipeline.ts | 34 +- src/pipelines/render/render-settings.ts | 4 + src/pipelines/render/render.wgsl | 53 +- src/pipelines/wgsl-uniform-layout.test.ts | 64 +- src/style/_toolbar.scss | 156 ++++- src/utils/delta-time-calculator.ts | 16 +- src/utils/graphics/full-screen-quad.ts | 84 +-- src/utils/graphics/noise.ts | 37 +- src/utils/graphics/resizable-texture.ts | 27 +- src/vibes.test.ts | 42 ++ 73 files changed, 3621 insertions(+), 1297 deletions(-) create mode 100644 src/audio/garden-audio-graph.test.ts create mode 100644 src/audio/garden-audio-input.test.ts create mode 100644 src/game-loop/intro-prompt.test.ts create mode 100644 src/game-loop/intro-title-agents.test.ts delete mode 100644 src/pipelines/copy/copy-pipeline.ts delete mode 100644 src/pipelines/copy/copy.wgsl diff --git a/e2e/app.spec.ts b/e2e/app.spec.ts index c641649..8a9b30f 100644 --- a/e2e/app.spec.ts +++ b/e2e/app.spec.ts @@ -86,6 +86,15 @@ test('keeps fallback controls interactive and accessible', async ({ page }) => { await expect(settingsButton).toHaveAttribute('aria-expanded', 'false'); const soundButton = page.locator('button.sound'); + const volumeSlider = page.getByLabel('Master volume'); + await expect(volumeSlider).toHaveValue('0.42'); + await volumeSlider.evaluate((input) => { + const slider = input as HTMLInputElement; + slider.value = '0.25'; + slider.dispatchEvent(new Event('input', { bubbles: true })); + }); + await expect(volumeSlider).toHaveValue('0.25'); + await expect(volumeSlider).toHaveAttribute('aria-valuetext', '25%'); await expect(soundButton).toHaveAttribute('aria-pressed', 'false'); await soundButton.click(); await expect(soundButton).toHaveAttribute('aria-pressed', 'true'); @@ -93,6 +102,11 @@ test('keeps fallback controls interactive and accessible', async ({ page }) => { await page.reload(); await expect(page.locator('body')).not.toHaveClass(/is-loading/); await expect(page.locator('button.sound')).toHaveAttribute('aria-pressed', 'true'); + await expect(page.getByLabel('Master volume')).toHaveValue('0.25'); + await expect(page.getByLabel('Master volume')).toHaveAttribute( + 'aria-valuetext', + 'Muted, 25%' + ); const initialSwatchColor = await getFirstSwatchColor(page); const initialBackground = await getGardenBackground(page); diff --git a/index.html b/index.html index 0a66ab3..884b053 100644 --- a/index.html +++ b/index.html @@ -167,12 +167,17 @@ aria-expanded="false" title="Show config overlay" > - +
+ + +