react ~6 KB 0 deps v0.1.0 ↗ GitHub ↗

@mshafiqyajid/react-number-input

Headless number input hook and styled component. Decimal, currency, and percent modes via Intl.NumberFormat. Step, min, max, keyboard navigation.

Playground #

Props
TSX
import { NumberInputStyled } from "@mshafiqyajid/react-number-input/styled";
import "@mshafiqyajid/react-number-input/styles.css";

<NumberInputStyled
  value={value}
  onChange={setValue}
/>

Install #

npm install @mshafiqyajid/react-number-input

Quick start #

import { NumberInputStyled } from "@mshafiqyajid/react-number-input/styled";
import "@mshafiqyajid/react-number-input/styles.css";

const [price, setPrice] = useState<number | undefined>(0);
<NumberInputStyled
  value={price}
  onChange={setPrice}
  format="currency"
  currency="MYR"
  min={0}
  label="Price"
  tone="primary"
/>

// Prefix/suffix
<NumberInputStyled value={weight} onChange={setWeight} suffix="kg" />
<NumberInputStyled value={amount} onChange={setAmount} prefix="RM" />

API #

PropTypeDefaultDescription
valuenumber | undefinedControlled value
defaultValuenumberUncontrolled initial value
onChange(v) => voidCalled on change
minnumberMinimum value
maxnumberMaximum value
stepnumber1Increment step
format"decimal" | "currency" | "percent""decimal"Display format
currencystring"USD"ISO currency code (format="currency")
localestring"en-US"Intl locale for formatting
labelstringVisible label
hintstringHelper text below input
errorstringError message (overrides hint)
size"sm" | "md" | "lg""md"Input size
tone"neutral" | "primary" | "success" | "danger""neutral"Color tone
disabledbooleanfalseDisable interaction
showStepperbooleantrueShow +/− increment buttons
onBlurFocusEventHandlerBlur callback
onFocusFocusEventHandlerFocus callback
prefixstringText before value (e.g. "RM")
suffixstringText after value (e.g. "kg")
clampOnBlurbooleantrueSnap to min/max on blur
Edit this page on GitHub