{"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';\n\nexport type KeyFilterPattern = 'pint' | 'int' | 'pnum' | 'money' | 'num' | 'hex' | 'email' | 'alpha' | 'alphanum';\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 && _pattern in DEFAULT_MASKS) {\n            this.regex = DEFAULT_MASKS[_pattern as keyof typeof DEFAULT_MASKS];\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        let clipboardData = e.clipboardData;\n\n        // Fallback for older browsers\n        if (!clipboardData && this.document.defaultView) {\n            const windowClipboard = (<any>this.document.defaultView).clipboardData;\n            if (windowClipboard) {\n                clipboardData = {\n                    getData: (_format: string) => windowClipboard.getData('text')\n                } as DataTransfer;\n            }\n        }\n\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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"}