--- title: NumberField description: >- The `NumberField` component captures numeric input with built-in validation. Use it to collect quantity, price, or other numeric information with proper validation. The component includes built-in number validation, optional min/max constraints, and step increments to ensure accurate numeric data entry. It supports various number formats including integers and decimals, with validation feedback to prevent entry errors during high-volume retail operations. api_version: 2024-07 api_name: pos-ui-extensions source_url: html: >- https://shopify.dev/docs/api/pos-ui-extensions/2024-07/ui-components/forms/numberfield md: >- https://shopify.dev/docs/api/pos-ui-extensions/2024-07/ui-components/forms/numberfield.md --- # Number​Field The `NumberField` component captures numeric input with built-in validation. Use it to collect quantity, price, or other numeric information with proper validation. The component includes built-in number validation, optional min/max constraints, and step increments to ensure accurate numeric data entry. It supports various number formats including integers and decimals, with validation feedback to prevent entry errors during high-volume retail operations. ## Properties Configure the following properties on the `NumberField` component. * label string required The content to use as the field label that describes the text information being requested. * action InputAction A button configuration object displayed under the text field to provide extra functionality. * disabled boolean Controls whether the field can be modified. When `true`, the field is disabled and users cannot edit its value. * error string An error message that indicates a problem to the user. The field is given specific stylistic treatment to communicate issues that must be resolved immediately. * helpText string The label text displayed under the field that provides guidance or instructions to assist users. * inputMode 'decimal' | 'numeric' The virtual keyboard layout to display: * `decimal`: A keyboard layout that includes decimal point support for entering fractional numbers, prices, or measurements with decimal precision. * `numeric`: A keyboard layout optimized for integer-only entry without decimal point support, ideal for quantities, counts, or whole number values. * max number The highest decimal or integer to be accepted for the field. Users can still input higher numbers by keyboard—you must add appropriate validation logic. * maxLength number The maximum number of characters allowed in the text field. * min number The lowest decimal or integer to be accepted for the field. Users can still input lower numbers by keyboard—you must add appropriate validation logic. * onBlur () => void A callback function executed when focus is removed from the field. * onChange (value: string) => void A callback function executed when the user has finished editing the field, receiving the new text value as a parameter. You should update the `value` property in response to this callback. * onFocus () => void A callback function executed when the field receives focus. * onInput (value: string) => void A callback function executed immediately when the user makes any change in the field. Use this for real-time feedback, such as clearing validation errors as soon as the user begins making corrections. Don't use this to update the `value` property—the `onChange` callback is the appropriate handler for updating the field's value. * placeholder string A short hint that describes the expected value of the field. * required boolean Whether the field needs a value for form submission or validation purposes. * value string The current text value for the field. If omitted, the field will be empty. You should update the `value` property in response to the `onChange` callback. ### InputAction Defines the configuration object for action buttons displayed below input fields to provide extra functionality. * disabled Whether the action button can be pressed. ```ts boolean ``` * label The text displayed on the action button. ```ts string ``` * onPress A callback function executed when the action button is pressed. ```ts () => void ``` ```ts export interface InputAction { /** * The text displayed on the action button. */ label: string; /** * A callback function executed when the action button is pressed. */ onPress: () => void; /** * Whether the action button can be pressed. */ disabled?: boolean; } ``` ### Examples * #### Capture numeric input with validation ##### Description Collect numeric data with built-in validation and constraints. This example shows how to implement a NumberField that supports integers and decimals, enforces min/max values, and provides step increments for quantity, price, or measurement inputs. ##### React ```tsx import React, {useState} from 'react'; import { NumberField, Screen, ScrollView, Navigator, Text, reactExtension, } from '@shopify/ui-extensions-react/point-of-sale'; const SmartGridModal = () => { const [number, setNumber] = useState(''); return ( setNumber(''), }} /> Entered Value: {number} ); }; export default reactExtension('pos.home.modal.render', () => ( )); ``` ##### TS ```ts import { Navigator, Screen, ScrollView, Text, NumberField, extension, } from '@shopify/ui-extensions/point-of-sale'; export default extension('pos.home.modal.render', (root, api) => { const clearHandler = () => { numberField.updateProps({value: ''}); textBox.replaceChildren(''); }; const numberField = root.createComponent(NumberField, { label: 'Number', placeholder: '1234', helpText: 'Enter a numeric value.', value: '', action: {label: 'Clear', onPress: clearHandler}, }); const textBox = root.createComponent(Text); const onChangeHandler = (newValue: string) => { numberField.updateProps({value: newValue}); const textContent = `Selected Date: ${newValue}`; textBox.replaceChildren(textContent); }; numberField.updateProps({onChange: onChangeHandler}); const scrollView = root.createComponent(ScrollView); scrollView.append(numberField); scrollView.append(textBox); const screen = root.createComponent(Screen, { name: 'NumberField', title: 'Number Field Example', }); screen.append(scrollView); const navigator = root.createComponent(Navigator); navigator.append(screen); root.append(navigator); }); ``` ## Preview ![](https://shopify.dev/images/templated-apis-screenshots/pos-ui-extensions/2024-07/number-field-default.png) ## Best practices * **Select the right input mode for your data type:** Use `'decimal'` input mode for prices, measurements, or any values requiring decimal precision. Use `'numeric'` for quantities, counts, or integer values where decimal points aren't needed. This optimizes the keyboard layout for the expected input. * **Provide helpful guidance with helpText:** Use the `helpText` property to explain numeric constraints, valid ranges, units, or formatting expectations. For example, "Enter a quantity between 1 and 999" or "Price in dollars with two decimal places." * **Implement proper validation logic:** While `min`/`max` properties provide guidance, they don't prevent invalid keyboard input. Implement validation in your `onChange` callback to check bounds, format, and other requirements, then display errors using the `error` property. * **Use action buttons for enhanced functionality:** Use the `action` property to provide helpful actions like "Clear Field," "Set to Minimum," or "Calculate Total." This enhances usability by providing quick access to common numeric operations. ## Limitations * `NumberField` provides numeric input but doesn't enforce `min`/`max` constraints for keyboard input—you must implement validation logic to enforce bounds and display appropriate errors. * The `required` property adds semantic meaning only—it doesn't trigger automatic error display or prevent form submission without additional validation logic. * Action buttons are limited to simple press callbacks—complex action workflows require custom implementation or additional components.