Skip to content

Commit 27eff3f

Browse files
committed
fix:coerce numeric values, and handle nullable correctly
1 parent 253843d commit 27eff3f

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/lib/elements/forms/inputNumber.svelte

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@
1818
1919
let error: string;
2020
21+
function coerceToNumber(event: Event & { currentTarget: EventTarget & HTMLInputElement }) {
22+
const raw = event.currentTarget?.value ?? '';
23+
24+
if (raw === '') {
25+
value = nullable ? null : (undefined as unknown as number);
26+
return;
27+
}
28+
29+
const parsed = step === 'any' ? Number.parseFloat(raw) : Number.parseInt(raw, 10);
30+
value = Number.isNaN(parsed) ? null : parsed;
31+
}
32+
2133
const handleInvalid = (event: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
2234
event.preventDefault();
2335
@@ -39,7 +51,7 @@
3951
error = event.currentTarget.validationMessage;
4052
};
4153
42-
$: if (value) {
54+
$: if (value !== null && value !== undefined && !Number.isNaN(value)) {
4355
error = null;
4456
}
4557
</script>
@@ -61,7 +73,8 @@
6173
helper={error || helper}
6274
state={error ? 'error' : 'default'}
6375
on:invalid={handleInvalid}
64-
on:input>
76+
on:input={coerceToNumber}
77+
on:change={coerceToNumber}>
6578
<svelte:fragment slot="info">
6679
<slot name="info" slot="info" />
6780
</svelte:fragment>

0 commit comments

Comments
 (0)