import { Minus, Plus } from 'lucide-react'; import { useRef } from 'react'; import { type AriaNumberFieldProps, useId, useLocale, useNumberField, } from 'react-aria'; import { useNumberFieldState } from 'react-stately'; import IconButton from '~/components/IconButton'; import cn from '~/utils/cn'; export interface InputProps extends AriaNumberFieldProps { isRequired?: boolean; name?: string; } export default function NumberInput(props: InputProps) { const { label, name } = props; const { locale } = useLocale(); const state = useNumberFieldState({ ...props, locale }); const ref = useRef(null); const id = useId(props.id); const { labelProps, inputProps, groupProps, incrementButtonProps, decrementButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, } = useNumberField(props, state, ref); return (
{props.description && (
{props.description}
)} {isInvalid && (
{validationErrors.join(' ')}
)}
); }