diff --git a/packages/core/src/dom/dom.ts b/packages/core/src/dom/dom.ts index d6d8f023..fdc0e1bf 100644 --- a/packages/core/src/dom/dom.ts +++ b/packages/core/src/dom/dom.ts @@ -171,8 +171,8 @@ export const getNextNativeValue = ({ } if (element.type === "number") { - if (typeof currentValue === "number") return Number(derivedValue); - return String(derivedValue); + if (typeof currentValue === "string") return String(derivedValue); + return Number(derivedValue); } return derivedValue; diff --git a/packages/react/src/test/input-types.test.tsx b/packages/react/src/test/input-types.test.tsx index a14a2d2a..25a99343 100644 --- a/packages/react/src/test/input-types.test.tsx +++ b/packages/react/src/test/input-types.test.tsx @@ -31,6 +31,32 @@ describe("number inputs", () => { expect(screen.getByTestId("age-value").textContent).toEqual("254"); }); + it("no default value", async () => { + const TestComp = () => { + const form = useForm({ + validator: successValidator, + }); + + return ( +
+ +
{JSON.stringify(form.value("age"))}
+
+ ); + }; + render(); + + expect(screen.getByTestId("age")).not.toHaveValue(); + expect(screen.getByTestId("age-value").textContent).toEqual(""); + + await userEvent.type(screen.getByTestId("age"), "4"); + expect(screen.getByTestId("age")).toHaveValue(4); + expect(screen.getByTestId("age-value").textContent).toEqual("4"); + }); + it("default values set as strings", async () => { const TestComp = () => { const form = useForm({