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 @@
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);