Skip to content

Commit

Permalink
fix: keep intermediate number value representations
Browse files Browse the repository at this point in the history
fixes #9959
  • Loading branch information
dummdidumm committed Jan 9, 2024
1 parent 14dbc1b commit d171a39
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
5 changes: 5 additions & 0 deletions .changeset/fast-weeks-clean.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'svelte': patch
---

fix: keep intermediate number value representations
36 changes: 27 additions & 9 deletions packages/svelte/src/internal/client/render.js
Original file line number Diff line number Diff line change
Expand Up @@ -926,32 +926,50 @@ export function selected(dom) {
}

/**
* @param {Element} dom
* @param {HTMLInputElement} dom
* @param {() => unknown} get_value
* @param {(value: unknown) => void} update
* @returns {void}
*/
export function bind_value(dom, get_value, update) {
dom.addEventListener('input', () => {
// @ts-ignore
/** @type {any} */
let value = dom.value;
// @ts-ignore
const type = dom.type;
if (type === 'number' || type === 'range') {
value = value === '' ? null : +value;
if (is_numberlike_input(dom)) {
value = to_number(value);
}
update(value);
});

render_effect(() => {
const value = get_value();
const coerced_value = value == null ? null : value + '';
// @ts-ignore
dom.value = coerced_value;
// @ts-ignore
dom.__value = value;

if (is_numberlike_input(dom) && value === to_number(dom.value)) {
// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)
return;
}

dom.value = stringify(value);
});
}

/**
* @param {HTMLInputElement} dom
*/
function is_numberlike_input(dom) {
const type = dom.type;
return type === 'number' || type === 'range';
}

/**
* @param {string} value
*/
function to_number(value) {
return value === '' ? null : +value;
}

/**
* @param {HTMLSelectElement} dom
* @param {() => unknown} get_value
Expand Down

1 comment on commit d171a39

@vercel
Copy link

@vercel vercel bot commented on d171a39 Jan 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

svelte-5-preview – ./sites/svelte-5-preview

svelte-5-preview-git-main-svelte.vercel.app
svelte-5-preview-svelte.vercel.app
svelte-5-preview.vercel.app
svelte-octane.vercel.app

Please sign in to comment.