From 6acce72fb8c416cc7f6eec99c2ae94d6529e960c Mon Sep 17 00:00:00 2001 From: Max Richter Date: Fri, 6 Feb 2026 15:25:18 +0100 Subject: [PATCH] fix(ui): correctly initialize InputNumber When the value is outside min/max the value should not be clamped. --- packages/ui/src/lib/inputs/InputNumber.svelte | 3 +-- packages/ui/src/lib/inputs/InputNumber.svelte.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/lib/inputs/InputNumber.svelte b/packages/ui/src/lib/inputs/InputNumber.svelte index a2e7cc3..1118f96 100644 --- a/packages/ui/src/lib/inputs/InputNumber.svelte +++ b/packages/ui/src/lib/inputs/InputNumber.svelte @@ -19,7 +19,6 @@ // normalize bounds if (min > max) [min, max] = [max, min]; - if (value > max) max = value; let inputEl: HTMLInputElement | undefined = $state(); @@ -105,7 +104,7 @@ } onMount(() => { - value = snap(clamp(value)); + value = snap(value); }); diff --git a/packages/ui/src/lib/inputs/InputNumber.svelte.ts b/packages/ui/src/lib/inputs/InputNumber.svelte.ts index 1ed2d17..78cbae6 100644 --- a/packages/ui/src/lib/inputs/InputNumber.svelte.ts +++ b/packages/ui/src/lib/inputs/InputNumber.svelte.ts @@ -42,4 +42,18 @@ describe('InputNumber', () => { await expect.element(input).toHaveAttribute('min', '0'); await expect.element(input).toHaveAttribute('max', '10'); }); + + it('should not clamp value on init when value exceeds min/max', async () => { + render(InputNumber, { value: 100, min: 0, max: 10 }); + + const input = page.getByRole('spinbutton'); + await expect.element(input).toHaveValue(100); + }); + + it('should not clamp value on init when value is below min', async () => { + render(InputNumber, { value: -50, min: 0, max: 10 }); + + const input = page.getByRole('spinbutton'); + await expect.element(input).toHaveValue(-50); + }); });