From 174f47f8c201c09ec71cdd307d7d1cd2b06c83c1 Mon Sep 17 00:00:00 2001 From: AdoLovesChicken Date: Fri, 26 Jun 2026 20:59:33 +1000 Subject: [PATCH] feat(GradeRangeSlider): add typeable min/max inputs - Add inputs alongside the slider so values can be typed directly, not just dragged - Clamp typed/dragged values to [min, max] - Animate the slider with a sine ease when a value is typed, keeping the drag unanimated - Meet min/max values instead of letting fields swap mid-keystroke - Combine min/max handlers into one `onInput` function --- .../gradeAnalytics/GradeRangeSlider.svelte | 163 +++++++++++++++--- .../built-in/gradeAnalytics/styles.css | 68 +++++++- 2 files changed, 198 insertions(+), 33 deletions(-) diff --git a/src/plugins/built-in/gradeAnalytics/GradeRangeSlider.svelte b/src/plugins/built-in/gradeAnalytics/GradeRangeSlider.svelte index 687e4c26..18042b3e 100644 --- a/src/plugins/built-in/gradeAnalytics/GradeRangeSlider.svelte +++ b/src/plugins/built-in/gradeAnalytics/GradeRangeSlider.svelte @@ -1,4 +1,6 @@
@@ -59,8 +113,8 @@ {min} {max} {step} - value={value[0]} - oninput={onMinInput} + value={visual[0]} + oninput={(e) => onInput(e, "min", false)} onpointerdown={() => (dragging = "min")} onpointerup={() => (dragging = null)} onpointercancel={() => (dragging = null)} @@ -79,8 +133,8 @@ {min} {max} {step} - value={value[1]} - oninput={onMaxInput} + value={visual[1]} + oninput={(e) => onInput(e, "max", false)} onpointerdown={() => (dragging = "max")} onpointerup={() => (dragging = null)} onpointercancel={() => (dragging = null)} @@ -94,15 +148,42 @@ aria-valuenow={value[1]} />
- - {value[0]}% – {value[1]}% - + +
+ + onInput(e, "min", true)} + placeholder={min} + min={min} + max={max} + step={step} + /> + % + + + + onInput(e, "max", true)} + placeholder={max} + min={min} + max={max} + step={step} + /> + % + +