import * as React from 'react'; import { CustomRender, CustomEventHandler } from '../../commonTypes'; import { COMPONENTS_NAMESPACES } from '../../constants'; import { PartialGlobalDefaultTheme } from '../../utils/useTheme'; import { DivRefCurrent } from '../Div'; import { ValidationProps } from '../Validation/types'; interface InputChangeEvent extends React.ChangeEvent { component: { formattedValue: string; name?: string; value: number | null; }; } interface KeyArrowChangeEvent extends React.KeyboardEvent { component: { formattedValue: string; name?: string; value: number | null; }; } interface MouseArrowChangeEvent extends React.MouseEvent { component: { formattedValue: string; name?: string; value: number | null; }; } interface PasteChangeEvent extends React.ClipboardEvent { component: { formattedValue: string; name?: string; value: number | null; }; } interface BlurChangeEvent extends React.FocusEvent { component: { formattedValue: string; name?: string; value: number | null; }; } interface ResetChangeEvent { component: { formattedValue: string; name?: string; value: number | null; }; } export declare type ChangeEvent = KeyArrowChangeEvent | PasteChangeEvent | MouseArrowChangeEvent | BlurChangeEvent | InputChangeEvent | ResetChangeEvent; export interface BlurEvent extends React.FocusEvent { component: { formattedValue: string; isValid?: boolean; name?: string; value: number | null; }; } export interface EnterPressEvent extends React.KeyboardEvent { component: { name?: string; value: number | null; }; } export interface FocusEvent extends React.FocusEvent { component: { formattedValue: string; name?: string; value: number | null; }; } export interface NumericTextBoxProps extends ValidationProps { /** Классы переданные через _ */ [x: string]: unknown; /** Кастомный рендер для стрелочек */ arrowButtonsRender?: CustomRender; /** Значение по-умолчанию */ defaultValue?: number | null; /** Формат. подробнее: formatting.md, по умолчанию - "#" */ format?: string; /** Кастомный рендер для инпута */ inputRender?: CustomRender | null; /** Выключенное состояние компонента */ isDisabled?: boolean; /** Минимальное значение */ max?: number; /** Максимальное значение */ min?: number; /** Имя инпута */ name?: string; /** Обработчик потери фокусировки */ onBlur?: (event: BlurEvent) => void; /** Обработчик изменения состояния */ onChange?: (event: ChangeEvent) => void; /** Обработчик изменения состояния */ onClick?: (event: React.MouseEvent) => void; /** Обработчик нажатия Enter */ onEnterPress?: (event: EnterPressEvent) => void; /** Обработчик фокуса на поле */ onFocus?: (event: FocusEvent) => void; /** Реф */ ref?: React.Ref; /** Condition for displaying arrows to increase or decrease input value by amount step */ shouldShowArrowButton?: boolean; /** Условие обрезки нулей в форматированной строке */ shouldTrimTrailingZeros?: boolean; /** Шаговое значение */ step?: number; /** Тема компонента */ theme?: PartialGlobalDefaultTheme[typeof COMPONENTS_NAMESPACES.numericTextBox]; /** Разделитель разрядов - по умолчанию пробел */ thousandsSeparator?: string; /** Значение компонента */ value?: number | null; /** Кастомный рендер враппера */ wrapperRender?: CustomRender; } export interface NumericTextBoxState { /** Состояние фокуса */ isFocused: boolean; /** Значение компонента */ value: number | null; } export interface NumericRefCurrent { input: HTMLInputElement | null; wrapper: HTMLDivElement | null; } export interface NumericHandlers { handleArrowButtonClick: (type: 'increase' | 'decrease') => CustomEventHandler>; handleBlur: CustomEventHandler>; handleChange: CustomEventHandler>; handleClick: CustomEventHandler>; handleFocus: CustomEventHandler>; handleKeyDown: CustomEventHandler>; handlePaste: CustomEventHandler>; } export interface WrapperProps extends React.HTMLAttributes { ref?: React.Ref; } export declare type ArrowButtonsProps = React.HTMLAttributes; export interface InputProps extends React.HTMLAttributes { disabled?: boolean; form?: string; name?: string; ref?: React.Ref; value?: string; } export interface CustomElements { ArrowButtons: React.FC; Input: React.FC; Wrapper: React.FC; } export declare type NormalizeParameters = { format?: string; max?: number; min?: number; sign?: number; step?: number; value: number | null; }; export declare type FormatValueProps = { format: string; shouldTrimTrailingZeros?: boolean; thousandsSeparator: string; value?: number | null; }; export declare type GetValueProps = { format: string; inputValue: string; isFocused: boolean; shouldTrimTrailingZeros?: boolean; thousandsSeparator: string; value: number | null; }; export {};