Skip to content

Number Input

A numeric text field with increment (+) and decrement (−) spin-buttons. Enforces min/max bounds, supports configurable step sizes, and integrates with HTML forms.

Min / Max / Step

PreviewCode
RTL
html
<ore-number-input label="0–10, step 1" min="0" max="10" step="1" value="5"></ore-number-input>
<ore-number-input label="0–100, step 10" min="0" max="100" step="10" value="50"></ore-number-input>
<ore-number-input label="0.0–1.0, step 0.1" min="0" max="1" step="0.1" value="0.5"></ore-number-input>

Sizes

PreviewCode
RTL
html
<ore-number-input label="Small" size="sm" value="1"></ore-number-input>
<ore-number-input label="Medium" size="md" value="1"></ore-number-input>
<ore-number-input label="Large" size="lg" value="1"></ore-number-input>

Colors

PreviewCode
RTL
html
<ore-number-input color="primary" value="1"></ore-number-input>
<ore-number-input color="secondary" value="1"></ore-number-input>
<ore-number-input color="success" value="1"></ore-number-input>
<ore-number-input color="error" value="1"></ore-number-input>

Variants

PreviewCode
RTL
html
<ore-number-input value="5"></ore-number-input>
<ore-number-input variant="flat" value="5"></ore-number-input>
<ore-number-input variant="bordered" value="5" color="primary"></ore-number-input>
<ore-number-input variant="outline" value="5"></ore-number-input>
<ore-number-input variant="ghost" value="5"></ore-number-input>

Disabled & Readonly

PreviewCode
RTL
html
<ore-number-input label="Disabled" value="5" disabled></ore-number-input>
<ore-number-input label="Readonly" value="5" readonly></ore-number-input>

Outside Label

Set label-placement="outside" to render the label outside the control box, above the value.

PreviewCode
RTL
html
<ore-number-input label="Quantity" label-placement="outside" value="1" min="0" max="99"></ore-number-input>
<ore-number-input label="Quantity" label-placement="outside" variant="flat" value="1" min="0" max="99"></ore-number-input>
<ore-number-input
  label="Quantity"
  label-placement="outside"
  variant="bordered"
  color="primary"
  value="1"
  min="0"
  max="99"></ore-number-input>

Full Width

Add the fullwidth attribute to stretch the control to its container width.

PreviewCode
RTL
html
<ore-number-input label="Full Width" fullwidth value="1" min="0" max="99"></ore-number-input>
<ore-number-input
  label="Inset + Full Width"
  label-placement="inset"
  fullwidth
  value="1"
  min="0"
  max="99"></ore-number-input>

Handling Change Events

html
<ore-number-input id="qty" label="Quantity" value="1" min="1" max="99"></ore-number-input>

<script type="module">
  import '@vielzeug/refine';

  document.getElementById('qty').addEventListener('change', (e) => {
    console.log('Value changed to:', e.detail.value);
  });
</script>

API Reference

Attributes

AttributeTypeDefaultDescription
valuenumber | nullnullCurrent numeric value
minnumberMinimum allowed value
maxnumberMaximum allowed value
stepnumber1Increment / decrement step size
large-stepnumber10Step size for Page Up / Page Down keys
labelstringVisible label text
label-placement'outside' | 'inset''outside'Label above the control or inset inside it
namestringForm field name
placeholderstringPlaceholder text when empty
nullablebooleanfalseAllow an empty / null value
disabledbooleanfalseDisables the control
readonlybooleanfalsePrevents user edits
color'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'Focus ring and accent color
size'sm' | 'md' | 'lg''md'Component size
variant'solid' | 'flat' | 'bordered' | 'outline' | 'ghost''solid'Visual style variant
fullwidthbooleanfalseStretch to the full width of the container

Events

EventDetailDescription
change{ value: number | null }Fired when value is committed (blur / step)
input{ value: number | null }Fired on every keystroke

CSS Custom Properties

PropertyDescription
--number-input-heightControl height
--number-input-border-colorBorder color
--number-input-radiusBorder radius
--number-input-bgInput background
--number-input-btn-bgSpin-button background
--number-input-btn-hover-bgSpin-button hover background

Accessibility

The number input component follows WCAG 2.1 Level AA standards.

Keyboard navigation uses / to step the value by step, and Page Up / Page Down to step by large-step. Tab moves focus in and out of the control.

The label is linked via aria-labelledby, and helper or error text is linked via aria-describedby. Spin buttons carry aria-label values ("Increment" / "Decrement") and set aria-disabled when the value reaches min or max. The aria-invalid attribute reflects the error state, while aria-disabled and aria-readonly reflect the disabled and readonly states respectively.

  • Input — plain text / single-line input field
  • Slider — drag-based numeric value picker