Default controls
Use standard decrement and increment buttons alongside a numeric input field.
<InputNumber
size="md"
name="default-quantity"
value="1"
min="0"
max="99"
/>
// Generated by scripts/generate-showcase.mjs. Do not edit directly.
page InputNumberDetail {
layout = "showcase"
state playground_size = ctx.url.searchParams.get("pg_size") ?? "md"
state playground_color = ctx.url.searchParams.get("pg_color") ?? "primary"
state playground_variant = ctx.url.searchParams.get("pg_variant") ?? "default"
state playground_class = ctx.url.searchParams.get("pg_class") ?? ""
state playground_id = ctx.url.searchParams.get("pg_id") ?? ""
state playground_name = ctx.url.searchParams.get("pg_name") ?? "default-quantity"
state playground_value = ctx.url.searchParams.get("pg_value") ?? "1"
state playground_min = ctx.url.searchParams.get("pg_min") ?? "0"
state playground_max = ctx.url.searchParams.get("pg_max") ?? "99"
state playground_step = ctx.url.searchParams.get("pg_step") ?? "1"
state playground_precision = ctx.url.searchParams.get("pg_precision") ?? "auto"
state playground_label = ctx.url.searchParams.get("pg_label") ?? ""
state playground_description = ctx.url.searchParams.get("pg_description") ?? ""
state playground_helpText = ctx.url.searchParams.get("pg_helpText") ?? ""
state playground_error = ctx.url.searchParams.get("pg_error") ?? ""
state playground_invalid = ctx.url.searchParams.get("pg_invalid") ?? "false"
state playground_prefix = ctx.url.searchParams.get("pg_prefix") ?? ""
state playground_suffix = ctx.url.searchParams.get("pg_suffix") ?? ""
state playground_placeholder = ctx.url.searchParams.get("pg_placeholder") ?? ""
state playground_autocomplete = ctx.url.searchParams.get("pg_autocomplete") ?? "off"
state playground_inputMode = ctx.url.searchParams.get("pg_inputMode") ?? "decimal"
state playground_ariaLabel = ctx.url.searchParams.get("pg_ariaLabel") ?? ""
state playground_required = ctx.url.searchParams.get("pg_required") ?? "false"
state playground_disabled = ctx.url.searchParams.get("pg_disabled") ?? "false"
state playground_inputDisabled = ctx.url.searchParams.get("pg_inputDisabled") ?? "false"
state playground_buttonsDisabled = ctx.url.searchParams.get("pg_buttonsDisabled") ?? "false"
state playground_readonly = ctx.url.searchParams.get("pg_readonly") ?? "false"
state playground_allowInput = ctx.url.searchParams.get("pg_allowInput") ?? "true"
state playground_keyboard = ctx.url.searchParams.get("pg_keyboard") ?? "true"
state playground_wheel = ctx.url.searchParams.get("pg_wheel") ?? "false"
state playground_clamp = ctx.url.searchParams.get("pg_clamp") ?? "true"
state playground_fullWidth = ctx.url.searchParams.get("pg_fullWidth") ?? "false"
state playground_showButtons = ctx.url.searchParams.get("pg_showButtons") ?? "true"
state playground_showValidationMessage = ctx.url.searchParams.get("pg_showValidationMessage") ?? "true"
state playground_decrementLabel = ctx.url.searchParams.get("pg_decrementLabel") ?? "Decrease value"
state playground_incrementLabel = ctx.url.searchParams.get("pg_incrementLabel") ?? "Increase value"
state playground_controlsLabel = ctx.url.searchParams.get("pg_controlsLabel") ?? "Quantity controls"
state playground_requiredMessage = ctx.url.searchParams.get("pg_requiredMessage") ?? "A value is required."
state playground_minMessage = ctx.url.searchParams.get("pg_minMessage") ?? "Value is below the minimum."
state playground_maxMessage = ctx.url.searchParams.get("pg_maxMessage") ?? "Value is above the maximum."
seo {
title = "Input Number"
description = "Theme-aware, responsive input number component."
}
view {
Theme-aware, responsive input number component. Change any prop and inspect the server-rendered component immediately.Input Number
Configure Input Number
<InputNumber
size="md"
name="default-quantity"
value="1"
min="0"
max="99"
/>
Compare configurations and resize the browser to check responsive behavior.
Use standard decrement and increment buttons alongside a numeric input field.
<InputNumber
size="md"
name="default-quantity"
value="1"
min="0"
max="99"
/>
Add supporting label text and rounded controls for a more form-like number input.
<InputNumber
size="md"
variant="labeled"
name="labeled-quantity"
value="1"
min="1"
max="25"
label="Select quantity"
/>
Stack the increment and decrement buttons vertically beside the field.
<InputNumber
size="md"
variant="vertical"
name="vertical-quantity"
value="1"
min="0"
max="20"
label="Select quantity"
/>
Place the increment and decrement buttons on opposite sides of the value.
<InputNumber
size="md"
variant="horizontal"
name="horizontal-quantity"
value="1"
min="0"
max="20"
/>
Use a smaller compact control when the available space is limited.
<InputNumber
size="sm"
variant="compact"
name="compact-quantity"
min="0"
max="10"
/>
Pair the control with pricing information for seat counts or plan add-ons.
<InputNumber
size="md"
variant="seat"
name="additional-seats"
min="0"
max="50"
label="Additional seats"
description="$39 monthly"
/>
Disable manual entry while keeping supported quantity controls available.
<InputNumber
size="md"
name="disabled-input"
value="10"
inputDisabled="true"
/>
Disable increment and decrement controls while leaving the current value visible.
<InputNumber
size="md"
name="disabled-buttons"
value="10"
buttonsDisabled="true"
/>
Set a custom step so every button press changes the value by two.
<InputNumber
size="md"
name="custom-step"
min="0"
max="20"
step="2"
/>
Use the min option to permit controlled negative values.
<InputNumber
size="md"
name="negative-values"
value="-10"
min="-100"
max="100"
/>
Set an upper limit and disable incrementing when that limit is reached.
<InputNumber
size="md"
name="maximum-limit"
value="10"
min="0"
max="10"
/>
Communicate whether the current numerical value is valid.
<InputNumber
size="md"
name="invalid-quantity"
value="10"
min="0"
max="5"
error="Out of limit"
/>
Public events declared by this component. Custom events bubble from the component root and expose state through event.detail.
@inputFires immediately as the component value changes.@changeFires when the component value or selection changes.@incrementFires when the component emits the increment event.@decrementFires when the component emits the decrement event.const component = document.querySelector('[data-wrn-events]')
component.addEventListener('input', (event) => {
console.log(event.detail)
})All content and behavior shown above is supplied through these props and slots.
| Prop | Type | Default | Required |
|---|---|---|---|
size | string | "default" | No |
color | string | "primary" | No |
variant | string | "default" | No |
class | string | "" | No |
id | string | "" | No |
name | string | "quantity" | No |
value | number | 0 | No |
min | string | "" | No |
max | string | "" | No |
step | number | 1 | No |
precision | string | "auto" | No |
label | string | "" | No |
description | string | "" | No |
helpText | string | "" | No |
error | string | "" | No |
invalid | boolean | false | No |
prefix | string | "" | No |
suffix | string | "" | No |
placeholder | string | "" | No |
autocomplete | string | "off" | No |
inputMode | string | "decimal" | No |
ariaLabel | string | "" | No |
required | boolean | false | No |
disabled | boolean | false | No |
inputDisabled | boolean | false | No |
buttonsDisabled | boolean | false | No |
readonly | boolean | false | No |
allowInput | boolean | true | No |
keyboard | boolean | true | No |
wheel | boolean | false | No |
clamp | boolean | true | No |
fullWidth | boolean | false | No |
showButtons | boolean | true | No |
showValidationMessage | boolean | true | No |
decrementLabel | string | "Decrease value" | No |
incrementLabel | string | "Increase value" | No |
controlsLabel | string | "Quantity controls" | No |
requiredMessage | string | "A value is required." | No |
minMessage | string | "Value is below the minimum." | No |
maxMessage | string | "Value is above the maximum." | No |