Docs
   Number Field 
 Number Field
A number input that allow users to input custom number entries with a keyboard.
import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/default/number-field";
 
const NumberFieldDemo = () => {
	const thisYear = () => new Date(Date.now()).getUTCFullYear();
	const age = () => thisYear() - 2001;
 
	return (
		<NumberField defaultValue={age()} minValue={0}>
			<NumberFieldLabel>Age</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
		</NumberField>
	);
};
 
export default NumberFieldDemo; import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/solid/number-field";
 
const NumberFieldDemo = () => {
	const thisYear = () => new Date(Date.now()).getUTCFullYear();
	const age = () => thisYear() - 2001;
 
	return (
		<NumberField defaultValue={age()} minValue={0}>
			<NumberFieldLabel>Age</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
		</NumberField>
	);
};
 
export default NumberFieldDemo; Installation
npx shadcn-solid@latest add number-field  Install the following dependencies:
npm install @kobalte/core  Copy and paste the following code into your project:
Install the following dependencies:
npm install @kobalte/core  Copy and paste the following code into your project:
Usage
import {
  NumberField,
  NumberFieldDecrementTrigger,
  NumberFieldDescription,
  NumberFieldGroup,
  NumberFieldIncrementTrigger,
  NumberFieldInput,
  NumberFieldLabel
} from "@components/ui/number-field"; <NumberField>
    <NumberFieldGroup>
        <NumberFieldDecrementTrigger aria-label="Decrement" />
        <NumberFieldInput />
        <NumberFieldIncrementTrigger aria-label="Increment" />
    </NumberFieldGroup>
</NumberField> Example
Disabled
import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/default/number-field";
 
const NumberFieldDemo = () => {
	const thisYear = () => new Date(Date.now()).getUTCFullYear();
	const age = () => thisYear() - 2001;
 
	return (
		<NumberField defaultValue={age()} minValue={0} disabled>
			<NumberFieldLabel>Age</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
		</NumberField>
	);
};
 
export default NumberFieldDemo; import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/solid/number-field";
 
const NumberFieldDemo = () => {
	const thisYear = () => new Date(Date.now()).getUTCFullYear();
	const age = () => thisYear() - 2001;
 
	return (
		<NumberField defaultValue={age()} minValue={0} disabled>
			<NumberFieldLabel>Age</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
		</NumberField>
	);
};
 
export default NumberFieldDemo; With Error
import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldErrorMessage,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/default/number-field";
import { createSignal } from "solid-js";
 
const NumberFieldDemo = () => {
	const [value, setValue] = createSignal(1000);
 
	return (
		<NumberField
			formatOptions={{
				style: "currency",
				currency: "VND",
			}}
			rawValue={value()}
			onRawValueChange={setValue}
			validationState={value() >= 1000 ? "valid" : "invalid"}
			minValue={0}
		>
			<NumberFieldLabel>Payment</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
			<NumberFieldErrorMessage>
				Min ₫1000 to send payment
			</NumberFieldErrorMessage>
		</NumberField>
	);
};
 
export default NumberFieldDemo; import {
	NumberField,
	NumberFieldDecrementTrigger,
	NumberFieldErrorMessage,
	NumberFieldGroup,
	NumberFieldIncrementTrigger,
	NumberFieldInput,
	NumberFieldLabel,
} from "@repo/tailwindcss/solid/number-field";
import { createSignal } from "solid-js";
 
const NumberFieldDemo = () => {
	const [value, setValue] = createSignal(1000);
 
	return (
		<NumberField
			formatOptions={{
				style: "currency",
				currency: "VND",
			}}
			rawValue={value()}
			onRawValueChange={setValue}
			validationState={value() >= 1000 ? "valid" : "invalid"}
			minValue={0}
		>
			<NumberFieldLabel>Payment</NumberFieldLabel>
			<NumberFieldGroup>
				<NumberFieldDecrementTrigger aria-label="Decrement" />
				<NumberFieldInput />
				<NumberFieldIncrementTrigger aria-label="Increment" />
			</NumberFieldGroup>
			<NumberFieldErrorMessage>
				Min ₫1000 to send payment
			</NumberFieldErrorMessage>
		</NumberField>
	);
};
 
export default NumberFieldDemo;