export as namespace IMask; export default IMask; declare function IMask( el: IMask.MaskElement | IMask.HTMLMaskingElement, opts: Opts ): IMask.InputMask; declare namespace IMask { export type HTMLMaskingElement = HTMLElement; export type ElementEvent = | 'selectionChange' | 'input' | 'drop' | 'click' | 'focus' | 'commit'; export class MaskElement { value: string; readonly selectionStart: number; readonly selectionEnd: number; readonly isActive: boolean; select(start: number, end: number): void; bindEvents(handlers: { [key in ElementEvent]: Function }): void; unbindEvents(): void; } export class HTMLMaskElement extends MaskElement { static EVENTS_MAP: { [key in ElementEvent]: string }; input: HTMLMaskingElement; constructor (el: HTMLMaskingElement); } export class HTMLContenteditableMaskElement extends HTMLMaskElement {} type AppendFlags = { input?: boolean; tail?: boolean; raw?: boolean; }; type ExtractFlags = { raw?: boolean; }; type Direction = 'NONE' | 'LEFT' | 'FORCE_LEFT' | 'RIGHT' | 'FORCE_RIGHT'; interface AppendTail { append(str: string, flags?: AppendFlags): ChangeDetails; } interface TailDetails { from: number; stop?: number; state: any; toString(): string; extend(value: string | TailDetails): void; appendTo(masked: AppendTail): ChangeDetails; shiftBefore(pos: number): string; } class ChangeDetails { inserted: string; skip: boolean; tailShift: number; rawInserted: string; readonly offset: number; constructor(details?: { inserted?: string; skip?: boolean; tailShift?: number; rawInserted?: string; }); aggregate(details: ChangeDetails): ChangeDetails; } type BaseMaskedOptions = { mask: MaskType; } & Partial< Pick< Masked, 'parent' | 'prepare' | 'validate' | 'commit' | 'overwrite' > >; type MaskedTypedValue = MaskType extends (typeof Number) ? number : MaskType extends (typeof Date) ? Date : string; export class Masked { mask: MaskType; state: any; value: string; unmaskedValue: string; typedValue: MaskedTypedValue; rawInputValue: string; readonly isComplete: boolean; parent?: AnyMasked; prepare: ( value: string, masked: Masked, flags: AppendFlags, ) => string; validate: ( value: string, masked: Masked, flags: AppendFlags, ) => boolean; commit: (value: string, masked: Masked) => void; overwrite?: boolean; isInitialized: boolean; constructor(opts: BaseMaskedOptions); updateOptions(opts: Partial>): void; reset(): void; resolve(value: string): string; nearestInputPos(cursorPos: number, direction?: Direction): number; extractTail(fromPos?: number, toPos?: number): TailDetails; appendTail(tail: string | TailDetails): ChangeDetails; append( str: string, flags?: AppendFlags, tail?: string | TailDetails ): ChangeDetails; remove(fromPos?: number, toPos?: number): ChangeDetails; doPrepare(str: string, flags: AppendFlags): string; doValidate(flags: AppendFlags): boolean; doCommit(): boolean; splice( start: number, deleteCount: number, inserted: string, removeDirection: Direction ): ChangeDetails; runIsolated(fn: (masked: Masked) => Result): Result; } interface AnyMasked extends Masked {} type MaskedPatternOptions = BaseMaskedOptions & Partial< Pick, 'blocks' | 'definitions' | 'placeholderChar' | 'lazy'> >; type MaskedPatternOptionsDefaults = Pick< MaskedPattern, 'lazy' | 'placeholderChar' >; export class MaskedPattern extends Masked { static DEFAULTS: MaskedPatternOptionsDefaults; static STOP_CHAR: string; static ESCAPE_CHAR: string; blocks: { [key: string]: AnyMaskedOptions; }; definitions: MaskedPattern.Definitions; placeholderChar: string; lazy: boolean; constructor(opts: MaskedPatternOptions); updateOptions(opts: Partial>): void; maskedBlock(name: string): MaskedPattern.PatternBlock | undefined; maskedBlocks(name: string): Array; } namespace MaskedPattern { interface PatternBlock { readonly value: string; readonly unmaskedValue: string; readonly isComplete: boolean; readonly _appendPlaceholder?: (value?: number) => ChangeDetails; state: any; reset(): void; remove(fromPos?: number, toPos?: number): ChangeDetails; extractInput( fromPos?: number, toPos?: number, flags?: ExtractFlags ): string; extractTail(fromPos?: number, toPos?: number): TailDetails; append( str: string, flags?: AppendFlags, tail?: TailDetails ): ChangeDetails; appendTail(tail: string | TailDetails): ChangeDetails; _appendChar(str: string, flags: AppendFlags): ChangeDetails; doCommit(): void; nearestInputPos(cursorPos: number, direction: Direction): number; } type Definitions = { [key: string]: AnyMask }; type PatternInputDefinitionOptions = { mask: AnyMask; } & Pick< InputDefinition, 'parent' | 'isOptional' | 'lazy' | 'placeholderChar' >; class InputDefinition implements PatternBlock { readonly masked: AnyMasked; readonly value: string; readonly unmaskedValue: string; readonly isComplete: boolean; state: any; parent: AnyMasked; isOptional: boolean; lazy: boolean; placeholderChar: string; constructor(opts: PatternInputDefinitionOptions); reset(): void; remove(fromPos?: number, toPos?: number): ChangeDetails; append( str: string, flags?: AppendFlags, tail?: string | TailDetails ): ChangeDetails; extractInput( fromPos?: number, toPos?: number, flags?: ExtractFlags ): string; nearestInputPos(cursorPos: number, direction?: Direction): number; extractTail(fromPos?: number, toPos?: number): TailDetails; appendTail(tail: string | TailDetails): ChangeDetails; _appendChar(str: string, flags: AppendFlags): ChangeDetails; doValidate(flags: AppendFlags): boolean; doCommit(): void; } type PatternFixedDefinitionOptions = Pick< FixedDefinition, 'char' | 'isUnmasking' >; class FixedDefinition implements PatternBlock { readonly value: string; readonly unmaskedValue: string; readonly isComplete: boolean; state: any; char: string; isUnmasking?: boolean; constructor(opts: PatternFixedDefinitionOptions); reset(): void; remove(fromPos?: number, toPos?: number): ChangeDetails; append( str: string, flags?: AppendFlags, tail?: string | TailDetails ): ChangeDetails; extractInput( fromPos?: number, toPos?: number, flags?: ExtractFlags ): string; nearestInputPos(cursorPos: number, direction?: Direction): number; extractTail(fromPos?: number, toPos?: number): TailDetails; appendTail(tail: string | TailDetails): ChangeDetails; _appendChar(str: string, flags: AppendFlags): ChangeDetails; doCommit(): void; } } type MaskedEnumOptions = MaskedPatternOptions & Partial>; export class MaskedEnum extends MaskedPattern { readonly enum: Array; constructor(opts: MaskedEnumOptions); updateOptions(opts: Partial): void; } type MaskedRangeOptions = MaskedPatternOptions & Partial>; export class MaskedRange extends MaskedPattern { readonly maxLength: number; readonly from: number; readonly to: number; readonly autofix?: boolean; constructor(opts: MaskedRangeOptions); updateOptions(opts: Partial): void; } type MaskedNumberOptions = BaseMaskedOptions & Partial< Pick< MaskedNumber, | 'radix' | 'thousandsSeparator' | 'mapToRadix' | 'min' | 'max' | 'scale' | 'signed' | 'normalizeZeros' | 'padFractionalZeros' > >; export class MaskedNumber extends Masked { static DEFAULTS: Pick< MaskedNumber, | 'radix' | 'thousandsSeparator' | 'mapToRadix' | 'scale' | 'signed' | 'normalizeZeros' | 'padFractionalZeros' >; readonly radix: string; readonly thousandsSeparator: string; readonly mapToRadix: Array; readonly min: number; readonly max: number; readonly scale: number; readonly signed: boolean; readonly normalizeZeros: boolean; readonly padFractionalZeros: boolean; readonly allowNegative: boolean; number: number; constructor(opts: MaskedNumberOptions); updateOptions(opts: Partial): void; } type MaskedDateOptions = MaskedPatternOptions & Partial< Pick< MaskedDate, 'parse' | 'format' | 'pattern' | 'min' | 'max' | 'autofix' > >; export class MaskedDate extends MaskedPattern { static GET_DEFAULT_BLOCKS: () => { d: { mask: typeof MaskedRange; from: number; to: number; maxLength: number; }; m: { mask: typeof MaskedRange; from: number; to: number; maxLength: number; }; Y: { mask: typeof MaskedRange; from: number; to: number; }; }; static DEFAULTS: MaskedPatternOptionsDefaults & Pick; readonly parse: (value: string) => Date; readonly format: (value: Date) => string; readonly pattern: string; readonly min?: Date; readonly max?: Date; readonly autofix?: boolean; date: Date; constructor(opts: MaskedDateOptions); updateOptions(opts: Partial): void; isDateExist(str: string): boolean; } export class MaskedRegExp extends Masked {} export class MaskedFunction extends Masked {} type MaskedDynamicOptions = BaseMaskedOptions & Partial< Pick< MaskedDynamic, | 'dispatch' > >; export class MaskedDynamic extends Masked { static DEFAULTS: Pick; readonly currentMask?: AnyMasked; readonly compiledMasks: Array; dispatch: ( value: string, masked: AnyMasked, flags: AppendFlags ) => AnyMasked; constructor(opts: MaskedDynamicOptions); updateOptions(opts: Partial): void; } export type AnyMaskedOptions = | MaskedDateOptions | MaskedNumberOptions | MaskedPatternOptions | MaskedRangeOptions | MaskedDynamicOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions | BaseMaskedOptions; export type AllMaskedOptions = & MaskedDateOptions & MaskedNumberOptions & MaskedPatternOptions & MaskedDynamicOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions & BaseMaskedOptions; interface AnyMaskedOptionsArray extends Array {} interface AnyMaskedOptionsMasked extends Masked {} type DeduceMasked = Opts extends AnyMasked ? Opts : Opts extends AnyMaskedOptions ? Opts extends MaskedPatternOptions ? MaskedPattern : Opts extends MaskedDateOptions ? MaskedDate : Opts extends MaskedNumberOptions ? MaskedNumber : Opts extends BaseMaskedOptions ? MaskedRegExp : Opts extends BaseMaskedOptions ? MaskedFunction : Opts extends BaseMaskedOptions ? MaskedDynamic : Masked : never; export function createMask( opts: Opts ): DeduceMasked; export function createMask(masked: T): T; export type AnyMask = AnyMaskedOptions['mask']; export class InputMask { el: MaskElement; masked: DeduceMasked; mask: Opts['mask']; value: string; unmaskedValue: string; typedValue: MaskedTypedValue; cursorPos: number; readonly selectionStart: number; constructor(el: MaskElement | HTMLMaskingElement, opts: Opts); alignCursor(): void; alignCursorFriendly(): void; updateValue(): void; updateControl(): void; updateOptions(opts: Partial): void; updateCursor(cursorPos: number): void; on(ev: string, handler: Function): this; off(ev: string, handler?: Function): this; destroy(): void; } export const PIPE_TYPE: { MASKED: 'value', UNMASKED: 'unmaskedValue', TYPED: 'typedValue', }; type PIPE_TYPE_VALUES = typeof PIPE_TYPE[keyof typeof PIPE_TYPE]; export function createPipe(masked: AnyMasked | AnyMaskedOptions, from?: PIPE_TYPE_VALUES, to?: PIPE_TYPE_VALUES): any; export function pipe(value: any, masked: AnyMasked | AnyMaskedOptions, from?: PIPE_TYPE_VALUES, to?: PIPE_TYPE_VALUES): any; } export import InputMask = IMask.InputMask; export import Masked = IMask.Masked; export import MaskedPattern = IMask.MaskedPattern; export import MaskedEnum = IMask.MaskedEnum; export import MaskedRange = IMask.MaskedRange; export import MaskedNumber = IMask.MaskedNumber; export import MaskedDate = IMask.MaskedDate; export import MaskedRegExp = IMask.MaskedRegExp; export import MaskedFunction = IMask.MaskedFunction; export import MaskedDynamic = IMask.MaskedDynamic; export import createMask = IMask.createMask; export import MaskElement = IMask.MaskElement; export import HTMLMaskElement = IMask.HTMLMaskElement; export import HTMLContenteditableMaskElement = IMask.HTMLContenteditableMaskElement; export import pipe = IMask.pipe; export import createPipe = IMask.createPipe; export import PIPE_TYPE = IMask.PIPE_TYPE; export import AnyMaskedOptions = IMask.AnyMaskedOptions;