From ae7674fb851a5e4d4d4b4d73282fdf3543571fb4 Mon Sep 17 00:00:00 2001 From: shima004 Date: Tue, 26 May 2026 16:07:58 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E8=A4=87=E6=95=B0=E7=94=BB?= =?UTF-8?q?=E9=9D=A2=E3=81=A7=E3=81=AE=E5=90=8C=E6=99=82=E5=86=8D=E7=94=9F?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/ControlPanel.svelte | 423 ++---------- src/lib/stores/simulation/interpolation.ts | 92 +++ src/routes/+page.svelte | 751 ++++++++++++++++++++- 3 files changed, 883 insertions(+), 383 deletions(-) create mode 100644 src/lib/stores/simulation/interpolation.ts diff --git a/src/lib/components/ControlPanel.svelte b/src/lib/components/ControlPanel.svelte index cf0b506..21b96e7 100644 --- a/src/lib/components/ControlPanel.svelte +++ b/src/lib/components/ControlPanel.svelte @@ -1,19 +1,13 @@
- - - {#if !screenshotMode} - -
- + {#if showingPaneGrid} +
+
+ {#each paneSources as src, i} +
+
Simulation {i + 1}
+ +
+ {/each} +
+
+ + + + + + + {compareStep} / {compareMaxStep} + seekCompare(Number((e.target as HTMLInputElement).value))} + disabled={compareMaxStep <= 0} + /> +
+ {#each COMPARE_SPEEDS as speed} + + {/each} +
+ {#if compareLoopCountdown !== null} + {compareLoopCountdown}s + {/if} +
+ {:else if compareUrls.length > 1 && !embedMode && !paneMode} +
+
+ {#each compareUrls as url, i} +
+
{i + 1}. {url}
+ +
+ {/each} +
+
+ + + + + + {compareStep} / {compareMaxStep} + seekCompare(Number((e.target as HTMLInputElement).value))} + disabled={compareMaxStep <= 0} + /> +
+ {#each COMPARE_SPEEDS as speed} + + {/each} +
+ {#if compareLoopCountdown !== null} + {compareLoopCountdown}s + {/if} +
+
+ {:else} + + + {#if !screenshotMode && !embedMode} + {#if !paneMode} + + {/if} + + {#if !paneMode} + +
+ +
- - + + + {/if}
@@ -133,6 +618,55 @@
{/if} + {#if !screenshotMode && !embedMode && !paneMode && $mode === "file" && $maxStep > 0} +
+ + + + + + {$currentStep} / {$maxStep} + seekSingle(Number((e.target as HTMLInputElement).value))} + /> +
+ {#each COMPARE_SPEEDS as speed} + + {/each} +
+ {#if singleLoopCountdown !== null} + {singleLoopCountdown}s + {/if} +
+ {/if} + {/if}