Number Input
A numeric input with increment and decrement buttons for precise value control.
Default
Basic number input with +/- buttons.
html
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border">
<button class="uc-px-3 uc-py-2 uc-text-fg-disabled uc-hover:text-fg-primary uc-transition-colors" onclick="decrement(this)">
<svg class="uc-w-4 uc-h-4"><!-- Minus --></svg>
</button>
<input type="number" value="1" min="0" max="99" class="uc-w-12 uc-text-center uc-text-sm uc-font-medium uc-border-0 uc-bg-transparent" />
<button class="uc-px-3 uc-py-2 uc-text-fg-disabled uc-hover:text-fg-primary uc-transition-colors" onclick="increment(this)">
<svg class="uc-w-4 uc-h-4"><!-- Plus --></svg>
</button>
</div>
With Label
Number input paired with a label and helper text.
html
Select between 1 and 99
<div>
<label class="uc-text-sm uc-font-medium uc-mb-2 uc-block">Quantity</label>
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border">...</div>
</div>
Sizes
Small, medium, and large number input variants.
html
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border uc-h-8 uc-text-xs">...</div>
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border uc-h-10">...</div>
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border uc-h-12 uc-text-base">...</div>
Min / Max
Number input with min and max constraints. Buttons disable at boundaries.
html
Min: 1, Max: 10
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border">
<button onclick="decrement(this)">-</button>
<input type="number" value="1" min="1" max="10" />
<button onclick="increment(this)">+</button>
</div>
<p class="uc-text-xs uc-text-fg-disabled">Min: 1, Max: 10</p>
Disabled
Disabled state for read-only display.
html
<div class="uc-inline-flex uc-items-center uc-rounded-lg uc-border uc-opacity-50 uc-pointer-events-none">
<button class="uc-px-3 uc-py-2" disabled>...</button>
<input type="number" value="5" disabled class="uc-w-12 uc-text-center" />
<button class="uc-px-3 uc-py-2" disabled>...</button>
</div>
Shopping Cart Example
Number input in a product card context.
🎧
Wireless Headphones
Premium noise cancelling
$299
API Reference
All data attributes and utility classes available for the Number Input component.
| Class | Type | Description |
|---|---|---|
[data-number-input] |
Container | Wrapper element that groups buttons and input together |
[data-action="decrement"] |
Decrement button — decreases value by 1 | |
[data-action="increment"] |
Increment button — increases value by 1 | |
[data-number-value] |
Input | The number input field itself |
uc-h-8 |
Size | Small size variant (height 32px) |
uc-h-10 |
Size | Default size variant (height 40px) |
uc-h-12 |
Size | Large size variant (height 48px) |
disabled |
State | Disabled state — reduced opacity, pointer events none |
Accessibility
Keyboard and screen reader support.
| Feature | Details |
|---|---|
| Keyboard | Arrow keys work in the input, buttons are keyboard accessible via Tab |
| Screen Reader | Input announces current value and constraints (min/max) |
| ARIA | Use aria-label on increment/decrement buttons for clarity |
| Min/Max | Buttons auto-disable at boundaries, preventing invalid values |
| Focus | Input receives focus ring, buttons show hover/focus states |