{"version":3,"file":"primeng-keyfilter.mjs","sources":["../../src/keyfilter/keyfilter.ts","../../src/keyfilter/primeng-keyfilter.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { booleanAttribute, Directive, ElementRef, EventEmitter, forwardRef, HostListener, Inject, Input, NgModule, Output, PLATFORM_ID, Provider } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { getBrowser, isAndroid } from '@primeuix/utils';\nimport { KeyFilterPattern } from './keyfilter.interface';\n\nexport const KEYFILTER_VALIDATOR: Provider = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => KeyFilter),\n    multi: true\n};\n\ntype SafariKeys = {\n    63234: number;\n    63235: number;\n    63232: number;\n    63233: number;\n    63276: number;\n    63277: number;\n    63272: number;\n    63273: number;\n    63275: number;\n};\n\ntype Keys = {\n    TAB: number;\n    RETURN: number;\n    ESC: number;\n    BACKSPACE: number;\n    DELETE: number;\n};\n\nconst DEFAULT_MASKS: Record<KeyFilterPattern, RegExp> = {\n    pint: /^[\\d]*$/,\n    int: /^[-]?[\\d]*$/,\n    pnum: /^[\\d\\.]*$/,\n    money: /^[\\d\\.\\s,]*$/,\n    num: /^[-]?[\\d\\.]*$/,\n    hex: /^[0-9a-f]*$/i,\n    email: /^[a-z0-9_\\.\\-@]*$/i,\n    alpha: /^[a-z_]*$/i,\n    alphanum: /^[a-z0-9_]*$/i\n};\n\nconst KEYS: Keys = {\n    TAB: 9,\n    RETURN: 13,\n    ESC: 27,\n    BACKSPACE: 8,\n    DELETE: 46\n};\n\nconst SAFARI_KEYS: SafariKeys = {\n    63234: 37, // left\n    63235: 39, // right\n    63232: 38, // up\n    63233: 40, // down\n    63276: 33, // page up\n    63277: 34, // page down\n    63272: 46, // delete\n    63273: 36, // home\n    63275: 35 // end\n};\n/**\n * KeyFilter Directive is a built-in feature of InputText to restrict user input based on a regular expression.\n * @group Components\n */\n@Directive({\n    selector: '[pKeyFilter]',\n    standalone: true,\n    providers: [KEYFILTER_VALIDATOR]\n})\nexport class KeyFilter implements Validator {\n    /**\n     * When enabled, instead of blocking keys, input is validated internally to test against the regular expression.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) pValidateOnly: boolean | undefined;\n    /**\n     * Sets the pattern for key filtering.\n     * @group Props\n     */\n\n    @Input('pKeyFilter') set pattern(_pattern: RegExp | KeyFilterPattern | null | undefined) {\n        this._pattern = _pattern;\n\n        if (_pattern instanceof RegExp) {\n            this.regex = _pattern;\n        } else if (_pattern in DEFAULT_MASKS) {\n            this.regex = DEFAULT_MASKS[_pattern];\n        } else {\n            this.regex = /./;\n        }\n    }\n    get pattern(): RegExp | KeyFilterPattern | null | undefined {\n        return this._pattern;\n    }\n\n    /**\n     * Emits a value whenever the ngModel of the component changes.\n     * @param {(string | number)} modelValue - Custom model change event.\n     * @group Emits\n     */\n    @Output() ngModelChange: EventEmitter<string | number> = new EventEmitter<string | number>();\n\n    regex: RegExp = /./;\n\n    _pattern: RegExp | KeyFilterPattern | null | undefined;\n\n    isAndroid: boolean;\n\n    lastValue: any;\n\n    constructor(\n        @Inject(DOCUMENT) private document: Document,\n        @Inject(PLATFORM_ID) private platformId: any,\n        public el: ElementRef\n    ) {\n        if (isPlatformBrowser(this.platformId)) {\n            this.isAndroid = isAndroid();\n        } else {\n            this.isAndroid = false;\n        }\n    }\n\n    isNavKeyPress(e: KeyboardEvent) {\n        let k = e.keyCode;\n        k = getBrowser().safari ? (SAFARI_KEYS as any)[k] || k : k;\n\n        return (k >= 33 && k <= 40) || k == KEYS.RETURN || k == KEYS.TAB || k == KEYS.ESC;\n    }\n\n    isSpecialKey(e: KeyboardEvent) {\n        let k = e.keyCode || e.charCode;\n\n        return k == 9 || k == 13 || k == 27 || k == 16 || k == 17 || (k >= 18 && k <= 20) || (getBrowser().opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45)));\n    }\n\n    getKey(e: KeyboardEvent) {\n        let k = e.keyCode || e.charCode;\n        return getBrowser().safari ? (SAFARI_KEYS as any)[k] || k : k;\n    }\n\n    getCharCode(e: KeyboardEvent) {\n        return e.charCode || e.keyCode || e.which;\n    }\n\n    findDelta(value: string, prevValue: string) {\n        let delta = '';\n\n        for (let i = 0; i < value.length; i++) {\n            let str = value.substr(0, i) + value.substr(i + value.length - prevValue.length);\n\n            if (str === prevValue) delta = value.substr(i, value.length - prevValue.length);\n        }\n\n        return delta;\n    }\n\n    isValidChar(c: string) {\n        return (<RegExp>this.regex).test(c);\n    }\n\n    isValidString(str: string) {\n        for (let i = 0; i < str.length; i++) {\n            if (!this.isValidChar(str.substr(i, 1))) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(e: KeyboardEvent) {\n        if (this.isAndroid && !this.pValidateOnly) {\n            let val = this.el.nativeElement.value;\n            let lastVal = this.lastValue || '';\n\n            let inserted = this.findDelta(val, lastVal);\n            let removed = this.findDelta(lastVal, val);\n            let pasted = inserted.length > 1 || (!inserted && !removed);\n\n            if (pasted) {\n                if (!this.isValidString(val)) {\n                    this.el.nativeElement.value = lastVal;\n                    this.ngModelChange.emit(lastVal);\n                }\n            } else if (!removed) {\n                if (!this.isValidChar(inserted)) {\n                    this.el.nativeElement.value = lastVal;\n                    this.ngModelChange.emit(lastVal);\n                }\n            }\n\n            val = this.el.nativeElement.value;\n            if (this.isValidString(val)) {\n                this.lastValue = val;\n            }\n        }\n    }\n\n    @HostListener('keypress', ['$event'])\n    onKeyPress(e: KeyboardEvent) {\n        if (this.isAndroid || this.pValidateOnly) {\n            return;\n        }\n\n        let browser = getBrowser();\n        let k = this.getKey(e);\n\n        if (browser.mozilla && (e.ctrlKey || e.altKey)) {\n            return;\n        } else if (k == 17 || k == 18) {\n            return;\n        }\n\n        // Enter key\n        if (k == 13) {\n            return;\n        }\n\n        let c = this.getCharCode(e);\n        let cc = String.fromCharCode(c);\n        let ok = true;\n\n        if (!browser.mozilla && (this.isSpecialKey(e) || !cc)) {\n            return;\n        }\n\n        let existingValue = this.el.nativeElement.value || '';\n        let combinedValue = existingValue + cc;\n\n        ok = (<RegExp>this.regex).test(combinedValue);\n\n        if (!ok) {\n            e.preventDefault();\n        }\n    }\n\n    @HostListener('paste', ['$event'])\n    onPaste(e: ClipboardEvent) {\n        const clipboardData = e.clipboardData || (<any>this.document.defaultView).clipboardData.getData('text');\n        if (clipboardData) {\n            let pattern = /\\{[0-9]+\\}/;\n            const pastedText = clipboardData.getData('text');\n            if (pattern.test(this.regex.toString())) {\n                if (!this.regex.test(pastedText)) {\n                    e.preventDefault();\n                    return;\n                }\n            } else {\n                for (let char of pastedText.toString()) {\n                    if (!this.regex.test(char)) {\n                        e.preventDefault();\n                        return;\n                    }\n                }\n            }\n        }\n    }\n\n    validate(c: AbstractControl): { [key: string]: any } | any {\n        if (this.pValidateOnly) {\n            let value = this.el.nativeElement.value;\n            if (value && !this.regex.test(value)) {\n                return {\n                    validatePattern: false\n                };\n            }\n        }\n    }\n}\n\n@NgModule({\n    imports: [KeyFilter],\n    exports: [KeyFilter]\n})\nexport class KeyFilterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}