import { useRef } from "react"; import { AriaNumberFieldProps, useNumberField } from "@react-aria/numberfield"; import { useLocale } from "@react-aria/i18n"; import { useNumberFieldState } from "react-stately"; import { useRenderProps } from "@hooks/useRenderProps"; import { ButtonContext } from "@components/Buttons/Button/Button.context"; import { FieldProps } from "../Field"; import { AriaProps } from "../../../types"; import { StyledField } from "../Field.styles"; import { Provider } from "../../Internal/Provider"; import { FieldErrorContext, FieldInputContext, FieldLabelContext, FieldMessageContext, } from "../contexts"; import { IconButton, IconButtonProps } from "../../Buttons/IconButton"; import { ComboInputContext } from "../ComboInput"; export interface NumberFieldProps extends FieldProps, Omit, "placeholder"> { "data-float"?: boolean; } /** Provides the accessbility implementation for a number field and its associated label, error message, and description. */ export function NumberField(props: NumberFieldProps) { const { isDisabled, isRequired, isReadOnly, name, "data-float": dataFloat, } = props; const inputRef = useRef(null); const { locale } = useLocale(); const state = useNumberFieldState({ ...props, locale }); const { labelProps, inputProps, descriptionProps, errorMessageProps, isInvalid, incrementButtonProps, decrementButtonProps, } = useNumberField( { ...props, label: true, }, state, inputRef ); const renderProps = useRenderProps({ ...props, componentClassName: "aje-input__number", values: { isInvalid, isDisabled, isReadOnly, isRequired }, selectors: { "data-invalid": isInvalid, "data-disabled": isDisabled, "data-readonly": isReadOnly, "data-required": isRequired, }, }); return ( {renderProps.children} ); } function NumberFieldIncrementButton(props: IconButtonProps) { return ; } function NumberFieldDecrementButton(props: IconButtonProps) { return ; } NumberField.IncrementButton = NumberFieldIncrementButton; NumberFieldIncrementButton.displayName = "NumberField.IncrementButton"; NumberField.DecrementButton = NumberFieldDecrementButton; NumberFieldDecrementButton.displayName = "NumberField.DecrementButton"; NumberField.displayName = "NumberField";