imask
Version:
vanilla javascript input mask
103 lines • 4.21 kB
TypeScript
import ChangeDetails from '../core/change-details';
import { type TailDetails } from '../core/tail-details';
import { type Direction } from '../core/utils';
import Masked, { type AppendFlags, type ExtractFlags, type MaskedOptions, type MaskedState } from './base';
import { type FactoryArg, type ExtendFactoryArgOptions } from './factory';
import type PatternBlock from './pattern/block';
import PatternFixedDefinition from './pattern/fixed-definition';
import PatternInputDefinition from './pattern/input-definition';
import './regexp';
export type MaskedPatternOptions<Value = string, M extends MaskedPattern<Value> = MaskedPattern<Value>, Props extends keyof M = never> = MaskedOptions<M, 'definitions' | 'blocks' | 'placeholderChar' | 'displayChar' | 'lazy' | Props>;
export type Definitions = {
[k: string]: FactoryArg;
};
export type MaskedPatternState = MaskedState & {
_blocks: Array<MaskedState>;
};
export type BlockPosData = {
index: number;
offset: number;
};
export type BlockExtraOptions = {
expose?: boolean;
repeat?: number | [number, number];
};
/** Pattern mask */
export default class MaskedPattern<Value = string> extends Masked<Value> {
static DEFAULTS: {
lazy: boolean;
placeholderChar: string;
skipInvalid?: boolean | undefined;
};
static STOP_CHAR: string;
static ESCAPE_CHAR: string;
static InputDefinition: typeof PatternInputDefinition;
static FixedDefinition: typeof PatternFixedDefinition;
mask: string;
/** */
blocks: {
[key: string]: ExtendFactoryArgOptions<BlockExtraOptions>;
};
/** */
definitions: Definitions;
/** Single char for empty input */
placeholderChar: string;
/** Single char for filled input */
displayChar: string;
/** Show placeholder only when needed */
lazy: boolean;
/** Enable characters overwriting */
overwrite?: boolean | 'shift' | undefined;
/** */
eager?: boolean | 'remove' | 'append' | undefined;
/** */
skipInvalid?: boolean | undefined;
/** */
autofix?: boolean | 'pad' | undefined;
_blocks: Array<PatternBlock>;
_maskedBlocks: {
[key: string]: Array<number>;
};
_stops: Array<number>;
exposeBlock?: Masked;
constructor(opts: MaskedPatternOptions<Value>);
updateOptions(opts: Partial<MaskedPatternOptions<Value>>): void;
_update(opts: Partial<MaskedPatternOptions<Value>>): void;
_rebuildMask(): void;
get state(): MaskedPatternState;
set state(state: MaskedPatternState);
reset(): void;
get isComplete(): boolean;
get isFilled(): boolean;
get isFixed(): boolean;
get isOptional(): boolean;
doCommit(): void;
get unmaskedValue(): string;
set unmaskedValue(unmaskedValue: string);
get value(): string;
set value(value: string);
get typedValue(): Value;
set typedValue(value: Value);
get displayValue(): string;
appendTail(tail: string | String | TailDetails): ChangeDetails;
_appendEager(): ChangeDetails;
_appendCharRaw(ch: string, flags?: AppendFlags<MaskedPatternState>): ChangeDetails;
extractTail(fromPos?: number, toPos?: number): TailDetails;
extractInput(fromPos?: number, toPos?: number, flags?: ExtractFlags): string;
_findStopBefore(blockIndex: number): number | undefined;
/** Appends placeholder depending on laziness */
_appendPlaceholder(toBlockIndex?: number): ChangeDetails;
/** Finds block in pos */
_mapPosToBlock(pos: number): BlockPosData | undefined;
_blockStartPos(blockIndex: number): number;
_forEachBlocksInRange(fromPos: number, toPos: number | undefined, fn: (block: PatternBlock, blockIndex: number, fromPos: number, toPos: number) => void): void;
remove(fromPos?: number, toPos?: number): ChangeDetails;
nearestInputPos(cursorPos: number, direction?: Direction): number;
totalInputPositions(fromPos?: number, toPos?: number): number;
/** Get block by name */
maskedBlock(name: string): PatternBlock | undefined;
/** Get all blocks by name */
maskedBlocks(name: string): Array<PatternBlock>;
pad(flags?: AppendFlags): ChangeDetails;
}
//# sourceMappingURL=pattern.d.ts.map