import type { Action, Store } from 'redux'; import type { InputState } from '@krutoo/input-mask/core'; import type { InputProps } from '../input'; import type { ChangeEvent, FocusEvent, FormEvent, FormEventHandler, RefObject } from 'react'; export interface InputMaskReactOptions { /** Строковое представление маски. */ mask: string; /** Символ, который в маске используется как обозначение вводимого места. */ placeholder: string; /** Строковое представление регулярного выражения только доступных для ввода символов. */ pattern: string; } export interface MaskedInputProps extends Omit, Pick, Partial> { /** Сработает при фокусе. Вторым аргументом получит данные поля с маской. */ onFocus?: (event: FocusEvent, data: MaskData) => void; /** Сработает при вводе. Вторым аргументом получит данные поля с маской. */ onChange?: (event: ChangeEvent, data: MaskData) => void; /** Сработает при вводе. Вторым аргументом получит данные поля с маской. */ onInput?: (event: FormEvent, data: MaskData) => void; /** Сработает при "blur". Вторым аргументом получит данные поля с маской. */ onBlur?: (event: FocusEvent, data: MaskData) => void; /** Минимальное допустимое количество символов для расчета заполненности маски. */ filledMaskMinLength?: number; } export interface MaskData { /** Значение в поле. */ value: string; /** Значение, очищенное от маски. */ cleanValue: string; /** Заполнено ли значение по маске полностью. */ completed: boolean; } export interface UseInputMaskOptions { value: string; maskOptions: InputMaskReactOptions; } export interface UseInputMaskResult { /** Хранилище состояния поля. */ store: Store; /** Свойства, которые необходимо применить к элементу поля. */ bind: { ref: RefObject; value: string; onInput: FormEventHandler; }; } export interface ActionCreator

{ (payload: P): Action & { payload: P; }; is(action: Action): action is Action & { payload: P; }; }