From 68932a92db2b675db377e12edca86704095951b0 Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Sat, 29 Aug 2026 16:37:01 +0200 Subject: [PATCH] Improve website number example --- website/index.html | 23 +++++++++-------------- website/src/demos.tsx | 6 +++--- website/src/formatters.test.ts | 7 +------ website/src/formatters.ts | 5 ----- 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/website/index.html b/website/index.html index df2bd0c..a00f1ad 100644 --- a/website/index.html +++ b/website/index.html @@ -126,7 +126,7 @@

Format anything

02 / GET STARTED -

Configure for your needs.

+

Try it live.

@@ -149,27 +149,22 @@

Number formatting

const formatNumber = (value: string) =>
-  value
-    .replace(/\D/g, '')
-    .replace(/\B(?=(\d{3})+(?!\d))/g, ',')
+              >import { createNumberFormatter } from 'rifm/number'
+
+const number = createNumberFormatter({
+  allowNegative: true,
+  maximumFractionDigits: 0,
+})
 
 export function PriceInput() {
   const [value, setValue] = useState('240000')
   const rifm = useRifm({
     value,
     onChange: setValue,
-    format: formatNumber,
-    accept: /\d/g,
+    ...number,
   })
 
-  return (
-    <label>
-      Invoice total
-      <span>$</span>
-      <input {...rifm} inputMode="numeric" />
-    </label>
-  )
+  return <input {...rifm} inputMode="numeric" />
 }
diff --git a/website/src/demos.tsx b/website/src/demos.tsx index 9d68fb2..c7fb109 100644 --- a/website/src/demos.tsx +++ b/website/src/demos.tsx @@ -1,7 +1,8 @@ import * as React from "react"; import { createRoot } from "react-dom/client"; import { useRifm } from "rifm"; -import { formatDate, formatInteger, formatPhone, formatUppercase } from "./formatters"; +import { createNumberFormatter } from "rifm/number"; +import { formatDate, formatPhone, formatUppercase } from "./formatters"; type DemoKind = "number" | "phone" | "date" | "uppercase"; @@ -11,9 +12,8 @@ const demoConfig = { prefix: "$", initialValue: "240000", placeholder: "0", - format: formatInteger, - accept: /\d/g, inputMode: "numeric" as const, + ...createNumberFormatter({ allowNegative: true, maximumFractionDigits: 0 }), }, phone: { label: "US phone", diff --git a/website/src/formatters.test.ts b/website/src/formatters.test.ts index ba00943..8c7d09c 100644 --- a/website/src/formatters.test.ts +++ b/website/src/formatters.test.ts @@ -1,12 +1,7 @@ import { describe, expect, test } from "vitest"; -import { formatDate, formatInteger, formatPhone, formatUppercase } from "./formatters"; +import { formatDate, formatPhone, formatUppercase } from "./formatters"; describe("example formatters", () => { - test("groups integer digits without losing an empty value", () => { - expect(formatInteger("1234567")).toBe("1,234,567"); - expect(formatInteger("")).toBe(""); - }); - test("formats a US phone number with libphonenumber as the user types", () => { expect(formatPhone("4155552671")).toBe("(415) 555-2671"); expect(formatPhone("41555")).toBe("(415) 55"); diff --git a/website/src/formatters.ts b/website/src/formatters.ts index 6de1035..53b28ef 100644 --- a/website/src/formatters.ts +++ b/website/src/formatters.ts @@ -2,11 +2,6 @@ import { AsYouType } from "libphonenumber-js/min"; const digitsOnly = (value: string) => value.replace(/\D/g, ""); -export const formatInteger = (value: string) => { - const digits = digitsOnly(value); - return digits.replace(/\B(?=(\d{3})+(?!\d))/g, ","); -}; - export const formatPhone = (value: string) => { const digits = digitsOnly(value).slice(0, 10); return new AsYouType("US").input(digits);