Input Number

Component

Interactive examples and API documentation

Basic
Basic usage with spinner controls.
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :basic_amount,
      value: 10,
      placeholder: "Basic usage",
      id: "input-number-basic-input",
      wrapper_id: "input-number-basic"
    ) %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :basic_labeled,
      label: "Quantity",
      caption: "Use arrow keys to adjust",
      value: 2
    ) %>
  <% end %>
<% end %>
Sizes
Small, middle, and large sizes.
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :size_small, size: :small, placeholder: "Small") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :size_middle, size: :middle, placeholder: "Middle") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :size_large, size: :large, placeholder: "Large") %>
  <% end %>
<% end %>
Variants
Default, filled, and borderless styles.
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :variant_default, placeholder: "Default") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :variant_filled, variant: :filled, placeholder: "Filled") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :variant_borderless, variant: :borderless, placeholder: "Borderless") %>
  <% end %>
<% end %>
Prefix & Suffix
Add prefix/suffix content.
$
kg
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :price, prefix: "$", placeholder: "Amount") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :weight, suffix: "kg", placeholder: "Weight") %>
  <% end %>
<% end %>
Precision & Formatter
High precision decimals with formatted display.
$
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :precision,
      value: 0.05,
      step: 0.01,
      precision: 2,
      caption: "Step by 0.01"
    ) %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :formatted,
      value: 1999.99,
      prefix: "$",
      formatter: {
        style: "currency",
        currency: "USD",
        minimumFractionDigits: 2,
        maximumFractionDigits: 2
      }
    ) %>
  <% end %>
<% end %>
Status
Semantic status styles.
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :status_success, status: :success, placeholder: "Success") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :status_warning, status: :warning, placeholder: "Warning") %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(name: :status_error, status: :error, placeholder: "Error") %>
  <% end %>
<% end %>
Disabled & Range
Disabled state and range validation.
Code
<%= render Hakumi::Space::Component.new(direction: :vertical, size: :middle, block: true) do |space| %>
  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :range_disabled,
      value: 5,
      disabled: true
    ) %>
  <% end %>

  <% space.with_item do %>
    <%= render Hakumi::InputNumber::Component.new(
      name: :range_limited,
      label: "Range",
      caption: "Try typing 12 to see out-of-range state",
      min: 0,
      max: 10,
      value: 6
    ) %>
  <% end %>
<% end %>

InputNumber Props

Prop Type Default Description
name String or Symbol required Field name/id.
label String - Optional label above the control.
caption String - Helper text displayed below.
value String or Numeric - Initial value.
placeholder String - Placeholder text.
min String or Numeric - Minimum value allowed.
max String or Numeric - Maximum value allowed.
step String or Numeric 1 Step increment/decrement.
precision Integer - Decimal precision to enforce.
size :small | :middle | :large :middle Control size.
variant :default | :filled | :borderless :default Visual style.
status :default | :success | :warning | :error :default Status style.
disabled Boolean false Disable interactions.
readonly Boolean false Read-only input.
required Boolean false Adds required attribute.
prefix String or ViewComponent - Prefix content.
suffix String or ViewComponent - Suffix content.
controls Boolean true Show spinner controls.
keyboard Boolean true Allow arrow key stepping.
wheel Boolean false Allow mouse wheel stepping when focused.
formatter Hash - Intl.NumberFormat options for display.
rules Array of Hashes - Client-side validation rules.
errors Array[String] or String [] Error messages shown below.
**html_attrs Keyword args - `class`, `id`, `data`, `wrapper_id`, `wrapper_class`, etc.

JavaScript API (element.hakumiComponent.api)

Prop Type Default Description
getValue() String - Get current numeric string.
setValue(value) void - Set value programmatically.
clear() void - Clear the input.
focus() void - Focus the input.
blur() void - Blur the input.