export type InputMaskSize = 'mini' | 'small' | 'medium' | 'large'; export type InputMaskToken = string | RegExp; export type InputMaskPattern = string | readonly InputMaskToken[]; export interface InputMaskSelection { start: number; end: number; } export interface InputMaskState { value: string; selection: InputMaskSelection | null; } export type InputMaskBeforeChange = (nextState: InputMaskState, previousState: InputMaskState) => InputMaskState; export interface InputMaskPresetDefinition { placeholder: string; inputMode?: 'decimal' | 'email' | 'numeric' | 'search' | 'tel' | 'text' | 'url'; mask?: InputMaskPattern; formatChars?: Readonly>; normalize?: (value: string) => string; accepts?: (value: string) => boolean; } export interface InputMaskProps { modelValue?: string; defaultValue?: string; mask?: InputMaskPattern; preset?: InputMaskPresetName; maskChar?: string | null; formatChars?: Readonly>; alwaysShowMask?: boolean; beforeMaskedValueChange?: InputMaskBeforeChange; size?: InputMaskSize; allowClear?: boolean; disabled?: boolean; readonly?: boolean | string; error?: boolean; placeholder?: string; fitWidth?: boolean; maxWFull?: boolean; showWordLimit?: boolean; maxLength?: number | { length: number; errorOnly?: boolean; }; wordLength?: (value: string) => number; wordSlice?: (value: string, maxLength: number) => string; inputAttrs?: Record; prepend?: string; append?: string; } export type InputMaskPresetName = 'data-uri' | 'date' | 'datetime' | 'email' | 'fqdn' | 'hex-color' | 'hsl' | 'iban' | 'imei' | 'ip' | 'ip-range' | 'ipv4' | 'ipv6' | 'isrc' | 'iso6346' | 'issn' | 'jwt' | 'lat-long' | 'mac-address' | 'magnet-uri' | 'mailto-uri' | 'mime-type' | 'rgb-color' | 'rfc3339' | 'semver' | 'time' | 'url' | 'uuid';