Skip to main content

QuantityStepper


QuantityStepper

QuantityStepper lets users increase or decrease a numeric value while respecting optional minimum and maximum limits.

Live Editor
function QuantityStepperExample() {
  const [quantity, setQuantity] = React.useState(1);

  return (
    <div className="grid gap-3">
      <QuantityStepper value={quantity} onChange={setQuantity} />

      <p>Quantity: {quantity}</p>
    </div>
  );
}
Result
Loading...
import { QuantityStepper } from "niom-parts";

<QuantityStepper value={quantity} onChange={setQuantity} min={1} max={10} />;

Common use cases​

QuantityStepper is useful for product quantities, ticket counts, item amounts, or any controlled numeric value that users should adjust incrementally.

Live Editor
function QuantityStepperUseCases() {
  const [small, setSmall] = React.useState(1);
  const [medium, setMedium] = React.useState(3);
  const [large, setLarge] = React.useState(5);

  return (
    <div className="grid gap-4">
      <QuantityStepper
        value={small}
        onChange={setSmall}
        min={1}
        max={5}
        size="sm"
      />

      <QuantityStepper
        value={medium}
        onChange={setMedium}
        min={1}
        max={10}
        size="md"
      />

      <QuantityStepper value={large} onChange={setLarge} min={1} size="lg" />

      <QuantityStepper value={2} onChange={() => {}} disabled />
    </div>
  );
}
Result
Loading...

Minimum and maximum values​

Use min and max to restrict the allowed quantity range. The decrease button is automatically disabled when the value reaches min, and the increase button is disabled when it reaches max.

Live Editor
function QuantityStepperLimits() {
  const [quantity, setQuantity] = React.useState(2);

  return (
    <QuantityStepper value={quantity} onChange={setQuantity} min={1} max={3} />
  );
}
Result
Loading...

Sizes​

QuantityStepper supports three predefined sizes.

Live Editor
function QuantityStepperSizes() {
  const [quantity, setQuantity] = React.useState(1);

  return (
    <div className="flex items-center gap-4">
      <QuantityStepper value={quantity} onChange={setQuantity} size="sm" />

      <QuantityStepper value={quantity} onChange={setQuantity} size="md" />

      <QuantityStepper value={quantity} onChange={setQuantity} size="lg" />
    </div>
  );
}
Result
Loading...

Properties​

PropertyTypeDefault value
valuenumber-
onChange(value: number) => void-
minnumber1
maxnumber-
disabledbooleanfalse
size"sm" | "md" | "lg""sm"
classNamestring-
iconClassNamestring-