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(" ")}
)}
); }