34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import type { PropType } from 'vue';
|
|
export interface MaskProps {
|
|
mask: string | MaskOptions | undefined;
|
|
}
|
|
export interface MaskOptions {
|
|
mask: string;
|
|
tokens: Record<string, MaskItem>;
|
|
}
|
|
export declare const makeMaskProps: <Defaults extends {
|
|
mask?: unknown;
|
|
} = {}>(defaults?: Defaults | undefined) => {
|
|
mask: unknown extends Defaults["mask"] ? PropType<string | MaskOptions> : {
|
|
type: PropType<unknown extends Defaults["mask"] ? string | MaskOptions : string | MaskOptions | Defaults["mask"]>;
|
|
default: unknown extends Defaults["mask"] ? string | MaskOptions : Defaults["mask"] | NonNullable<string | MaskOptions>;
|
|
};
|
|
};
|
|
export type MaskItem = {
|
|
convert?: (char: string) => string;
|
|
} & ({
|
|
pattern?: never;
|
|
test: (char: string) => boolean;
|
|
} | {
|
|
pattern: RegExp;
|
|
test?: never;
|
|
});
|
|
export declare const defaultDelimiters: RegExp;
|
|
export declare function useMask(props: MaskProps): {
|
|
isDelimiter: (text: string, index: number) => boolean;
|
|
isValid: (text: string) => boolean;
|
|
isComplete: (text: string) => boolean;
|
|
mask: (text: string | null | undefined) => string;
|
|
unmask: (text: string | null) => string | null;
|
|
};
|