import type { CurrencyDisplay } from '@procore/globalization-toolkit';
import type { InputProps } from '../Input/Input.types';
export declare type Locale = string | string[];
export declare type FillDecimalScaleVariant = 'none' | 'onBlur' | 'always';
export interface NumberInputValueChange {
    /**
     * The displayed value in format of the locale
     * @example "1.000,990"
     * @since 10.19.0
     */
    value: string;
    /**
     * A Number data type of value
     * @example 1000.99
     * @since 10.19.0
     */
    parsedNumber: number | null;
}
export declare type InputValue = string | number | undefined | null;
interface QaTags {
    wrapper?: string;
    increment?: string;
    decrement?: string;
}
export interface NumberInputProps extends Omit<InputProps, 'value' | 'defaultValue' | 'onChange' | 'variant'> {
    /**
     * The maximum number of fraction digits to use. Possible values range from 0 to 14. Setting to true will result in the maximum size, setting to false will allow 0 decimals, whole numbers only.
     * @defaultValue true
     * @since 10.19.0
     */
    decimalScale?: boolean | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14;
    /**
     * Initial value of an uncontrolled component
     * @since 10.19.0
     */
    defaultValue?: InputValue;
    /**
     * `none` prevents from adding zeros to match given `decimalScale`.
     *
     * `always` automatically adds zeros to match given `decimalScale`.
     *
     * `onBlur` automatically adds zeros to match given `decimalScale` when input has lost focus.
     * @default 'none'
     * @since 10.19.0
     */
    fillDecimalScale?: FillDecimalScaleVariant;
    /**
     * `(value: ValueChange) => void`, where `ValueChange` is an object `{ value: string, parsedNumber: number | null }`.
     * @since 10.19.0
     */
    onChange?: (value: NumberInputValueChange) => void;
    /**
     * A string which is added to input as a prefix.
     * @since 10.19.0
     */
    prefix?: string;
    /**
     * A stepping interval which is used in incrementer. Zero value turns off incrementer.
     * @defaultValue 0
     * @since 10.19.0
     */
    step?: number;
    /**
     * A string which is added to input as a suffix
     * @since 10.19.0
     */
    suffix?: string;
    /**
     * Value of a controlled component. If value is a string, the string MUST be formatted with the decimal separator to the locale.
     * @since 10.19.0
     */
    value?: InputValue;
    /**
     * @since 10.19.0
     */
    qa?: QaTags;
}
export interface UseNumberFormatConfig extends Pick<NumberInputProps, 'decimalScale' | 'fillDecimalScale'> {
    /**
     * A string with a BCP 47 language tag or an array of such strings which specifies number formatting.
     * @defaultValue en-US
     * @since 10.19.0
     */
    locale?: Locale;
}
export interface Separators {
    /**
     * @since 10.19.0
     */
    decimal: string;
    /**
     * @since 10.19.0
     */
    group: string;
}
export interface ParsedInputValue {
    /**
     * @since 10.19.0
     */
    integer: string;
    /**
     * @since 10.19.0
     */
    decimal: string;
    /**
     * @since 10.19.0
     */
    fraction: string;
    /**
     * @since 10.19.0
     */
    parsedNumber: number;
}
export declare type PressedKey = string | undefined;
export interface CursorPosition {
    /**
     * @since 10.19.0
     */
    selectionStart: number;
    /**
     * @since 10.19.0
     */
    selectionEnd: number;
    /**
     * @since 10.19.0
     */
    selection: string;
}
export interface CurrencyInputProps extends NumberInputProps {
    /**
     * String which is added to the input as a suffix or prefix dependent on the locale
     * @since 11.10.0
     */
    currencyIsoCode?: string;
    /**
     * GTK option that determines how the currency symbol is displayed (narrowSymbol, symbol, name, code)
     * @since 11.10.0
     */
    currencyDisplay?: CurrencyDisplay;
    /**
     * A string with a BCP 47 language tag or an array of such strings which specifies number formatting.
     * @defaultValue en-US
     * @since 10.19.0
     */
    locale?: Locale;
}
interface CurrencyPropsBasic {
    decimalScale?: NumberInputProps['decimalScale'];
}
interface CurrencyPropsWithPrefix extends CurrencyPropsBasic {
    prefix: string;
    suffix?: never;
}
interface CurrencyPropsWithSuffix extends CurrencyPropsBasic {
    prefix?: never;
    suffix: string;
}
export declare type CurrencyProps = CurrencyPropsWithPrefix | CurrencyPropsWithSuffix;
export {};
