import { type InputHTMLAttributes } from 'react';
import { type VariantProps } from 'class-variance-authority';
import { type NumberInputMode } from './use-locale-number';
/** Agent-readiness curated handle for NumberInput. */
export interface NumberInputHandle {
getValue: () => number | null;
setValue: (value: number | null) => void;
clear: () => void;
focus: () => void;
}
declare const numberInputVariants: (props?: ({
size?: "sm" | "md" | "lg" | null | undefined;
tone?: "default" | "error" | null | undefined;
inline?: "full" | "sm" | "md" | "lg" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export type { NumberInputMode };
export interface NumberInputProps extends Omit, 'type' | 'onChange' | 'value' | 'defaultValue' | 'size'>, VariantProps {
/** Current numeric value (controlled). */
value?: number | null;
/** Initial value (uncontrolled). */
defaultValue?: number;
/** Fires with the parsed number (not a string). `null` when the field is empty. */
onChange?: (value: number | null) => void;
/** Minimum allowed value. Maps to `aria-valuemin`. */
min?: number;
/** Maximum allowed value. Maps to `aria-valuemax`. */
max?: number;
/** Increment step. Defaults to `1`. */
step?: number;
/** Display/parse mode. Defaults to `'integer'`. */
mode?: NumberInputMode;
/** ISO 4217 currency code, required when `mode='currency'`. */
currency?: string;
/** BCP 47 locale. Defaults to the app language (`i18n.language`), then
* `navigator.language`, then `'en-US'`. */
locale?: string;
/** Size variant. */
size?: 'sm' | 'md' | 'lg';
/** 'stepper' (default) keeps the chevron buttons; 'plain' renders the bare
* field — keyboard arrows still step, and the wheel scrolls the page as it
* always has. */
variant?: 'stepper' | 'plain';
/** Unit shown inside the field at the inline end (e.g. "cm"), muted; joins
* the input's accessible description, never its value. A unit end-aligns
* the value so the two read as one measurement. */
unit?: string;
/** Intrinsic inline size: 'full' (default) fills the container; 'sm' ≈ 8
* characters, 'md' ≈ 12, 'lg' ≈ 16 — plus room for the unit and paddings.
* Any size but 'full' also end-aligns the value, so it sits against the
* unit rather than across the box from it. */
inline?: 'sm' | 'md' | 'lg' | 'full';
/** Additional class names on the wrapper. */
className?: string;
}
export declare const NumberInput: import("react").ForwardRefExoticComponent>;
//# sourceMappingURL=number-input.d.ts.map