Number Input
A field that allows user input of numeric values.
A field that allows user input of numeric values.
To set up the number input correctly, you’ll need to understand its anatomy and how we name its parts.
Each part includes a
data-part
attribute to help identify them in the DOM.
Learn how to use the NumberInput
component in your project. Let’s take a look
at the most basic example:
import { NumberInput } from '@ark-ui/react'
export const Basic = () => (
<NumberInput.Root>
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
import { NumberInput } from '@ark-ui/solid'
export const Basic = () => (
<NumberInput.Root>
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
<script setup lang="ts">
import { NumberInput } from '@ark-ui/vue'
</script>
<template>
<NumberInput.Root>
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
</template>
Pass the min
prop or max
prop to set an upper and lower limit for the input.
By default, the input will restrict the value to stay within the specified
range.
Story not found
Story not found
Story not found
In some cases, you might need the value to be rounded to specific decimal
points. Set the formatOptions
and provide Intl.NumberFormatOptions
such as
maximumFractionDigits
or minimumFractionDigits
.
Story not found
Story not found
Story not found
The NumberInput supports the scrubber interaction pattern. To use this pattern,
render the NumberInput.Scrubber
component. It uses the Pointer lock API and
tracks the pointer movement. It also renders a virtual cursor which mimics the
real cursor’s pointer.
import { NumberInput } from '@ark-ui/react'
export const Scrubber = () => (
<NumberInput.Root>
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
import { NumberInput } from '@ark-ui/solid'
export const Scrubber = () => (
<NumberInput.Root>
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
<script setup lang="ts">
import { NumberInput } from '@ark-ui/vue'
</script>
<template>
<NumberInput.Root>
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
</template>
The NumberInput exposes a way to increment/decrement the value using the mouse
wheel event. To activate this, set the allowMouseWheel
prop to true
.
Story not found
Story not found
Story not found
In most cases, users can type custom values in the input field. If the typed value is greater than the max, the value is reset to max when the user blur out of the input.
To disable this behavior, pass clampValueOnBlur
and set to false
.
Story not found
Story not found
Story not found
To use the number input within forms, set the name
prop.
Story not found
Story not found
Story not found
To apply custom formatting to the input’s value, set the formatOptions
and
provide Intl.NumberFormatOptions
such as style
and currency
.
import { NumberInput } from '@ark-ui/react'
export const Formatted = () => (
<NumberInput.Root
formatOptions={{
style: 'currency',
currency: 'USD',
}}
>
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
import { NumberInput } from '@ark-ui/solid'
export const Formatted = () => (
<NumberInput.Root
formatOptions={{
style: 'currency',
currency: 'USD',
}}
>
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
)
<script setup lang="ts">
import { NumberInput } from '@ark-ui/vue'
</script>
<template>
<NumberInput.Root :formatOptions="{ style: 'currency', currency: 'USD' }">
<NumberInput.Scrubber />
<NumberInput.Label>Label</NumberInput.Label>
<NumberInput.Input />
<NumberInput.Control>
<NumberInput.DecrementTrigger>-1</NumberInput.DecrementTrigger>
<NumberInput.IncrementTrigger>+1</NumberInput.IncrementTrigger>
</NumberInput.Control>
</NumberInput.Root>
</template>
Prop | Type | Default |
---|---|---|
allowMouseWheel Whether to allow mouse wheel to change the value | boolean | |
allowOverflow Whether to allow the value overflow the min/max range | boolean | true |
asChild Render as a different element type. | boolean | |
clampValueOnBlur Whether to clamp the value when the input loses focus (blur) | boolean | true |
defaultValue The initial value of the number input when it is first rendered.
Use when you do not need to control the state of the number input. | string | |
disabled Whether the number input is disabled. | boolean | |
focusInputOnChange Whether to focus input when the value changes | boolean | true |
form The associate form of the input element. | string | |
formatOptions The options to pass to the `Intl.NumberFormat` constructor | NumberFormatOptions | |
id The unique identifier of the machine. | string | |
ids The ids of the elements in the number input. Useful for composition. | Partial<{
root: string
label: string
input: string
incrementTrigger: string
decrementTrigger: string
scrubber: string
}> | |
inputMode Hints at the type of data that might be entered by the user. It also determines
the type of keyboard shown to the user on mobile devices | InputMode | "decimal" |
invalid Whether the number input value is invalid. | boolean | |
locale The current locale. Based on the BCP 47 definition. | string | "en-US" |
max The maximum value of the number input | number | |
min The minimum value of the number input | number | |
name The name attribute of the number input. Useful for form submission. | string | |
onFocusChange Function invoked when the number input is focused | (details: FocusChangeDetails) => void | |
onValueChange Function invoked when the value changes | (details: ValueChangeDetails) => void | |
onValueInvalid Function invoked when the value overflows or underflows the min/max range | (details: ValueInvalidDetails) => void | |
pattern The pattern used to check the <input> element's value against | string | "[0-9]*(.[0-9]+)?" |
readOnly Whether the number input is readonly | boolean | |
spinOnPress Whether to spin the value when the increment/decrement button is pressed | boolean | |
step The amount to increment or decrement the value by | number | |
translations Specifies the localized strings that identifies the accessibility elements and their states | IntlTranslations | |
value The value of the input | string |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Prop | Type | Default |
---|---|---|
asChild Render as a different element type. | boolean |
Previous
MenuNext
Pagination