UNPKG

@crediblefinance/credible-ui

Version:

Credible's standard UI library

113 lines 12.3 kB
import { Directive, HostListener, Input } from '@angular/core'; import * as i0 from "@angular/core"; export class PrecisionDirective { el; precision = 0; type = 'text'; precisionType = ''; allowedKeys = new Set(); constructor(el) { this.el = el; const allowedKeys = [ 'Backspace', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown', '.', 'Meta', 'v' ]; this.allowedKeys = new Set(allowedKeys); } onPaste(event) { const clipboardData = event.clipboardData; const pastedText = clipboardData?.getData('text'); if (this.type === 'number' && pastedText?.length > 0) { if (Number(pastedText)) return true; else { this.el.nativeElement.value = ''; return false; } } return true; } onKeyDown(event) { const value = this.el.nativeElement.value; const regex = new RegExp(/[0-9]/); if (this.type === 'number') { const allowed = this.allowedKeys.has(event.key); if (!allowed) return false; if (event.code === 'Space') event.preventDefault(); if (event.key === '.' && value.toString().indexOf('.') !== -1) return false; if (this.precisionType === 'decimal') { if (regex.test(event.key)) { if (value.toString().includes('.')) { const str = value.toString().split('.'); if (str[1].length >= this.precision) return false; } } } else if (this.precisionType === 'input') { if (event.code === 'Period') event.preventDefault(); if (event.code === 'Space') event.preventDefault(); if (!this.optionalKeys(event)) { if (value.length >= this.precision) return false; } } } return true; } optionalKeys(event) { if (event.code === 'Backspace') return true; if (event.code === 'ArrowLeft') return true; if (event.code === 'ArrowRight') return true; if (event.code === 'ArrowUp') return true; if (event.code === 'ArrowDown') return true; return false; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PrecisionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: PrecisionDirective, selector: "[PrecisionDirective]", inputs: { precision: "precision", type: "type", precisionType: "precisionType" }, host: { listeners: { "paste": "onPaste($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PrecisionDirective, decorators: [{ type: Directive, args: [{ selector: '[PrecisionDirective]' }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { precision: [{ type: Input }], type: [{ type: Input }], precisionType: [{ type: Input }], onPaste: [{ type: HostListener, args: ['paste', ['$event']] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlY2lzaW9uLWRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWRpYmxlLXVpL3NyYy9saWIvZGlyZWN0aXZlcy9wcmVjaXNpb24tZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFDN0MsTUFBTSxlQUFlLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxrQkFBa0I7SUFNUDtJQUxYLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUN0QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBRXBDLFdBQVcsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNyQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUM5QixNQUFNLFdBQVcsR0FBRztZQUNoQixXQUFXO1lBQ1gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILFlBQVk7WUFDWixXQUFXO1lBQ1gsU0FBUztZQUNULFdBQVc7WUFDWCxHQUFHO1lBQ0gsTUFBTTtZQUNOLEdBQUc7U0FDTixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBR0QsT0FBTyxDQUFDLEtBQXFCO1FBQ3pCLE1BQU0sYUFBYSxHQUF3QixLQUFLLENBQUMsYUFBYSxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFXLENBQUM7UUFFNUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxVQUFVLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRCxJQUFJ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QVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQTZCTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUUsUUFBUSxDQUFFO2dCQW1CbkMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFFLFFBQVEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tQcmVjaXNpb25EaXJlY3RpdmVdJ1xufSlcbmV4cG9ydCBjbGFzcyBQcmVjaXNpb25EaXJlY3RpdmUge1xuICAgIEBJbnB1dCgpIHByZWNpc2lvbjogbnVtYmVyID0gMDtcbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gICAgQElucHV0KCkgcHJlY2lzaW9uVHlwZTogc3RyaW5nID0gJyc7XG5cbiAgICBhbGxvd2VkS2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IFtcbiAgICAgICAgICAgICdCYWNrc3BhY2UnLCAvLyBiYWNrc3BhY2VcbiAgICAgICAgICAgICcwJywgLy8gemVyb1xuICAgICAgICAgICAgJzEnLCAvLyBvbmVcbiAgICAgICAgICAgICcyJywgLy8gdHdvXG4gICAgICAgICAgICAnMycsIC8vIHRocmVlXG4gICAgICAgICAgICAnNCcsIC8vIGZvdXJcbiAgICAgICAgICAgICc1JywgLy8gZml2ZVxuICAgICAgICAgICAgJzYnLCAvLyBzaXhcbiAgICAgICAgICAgICc3JywgLy8gc2V2ZW5cbiAgICAgICAgICAgICc4JywgLy8gZWlnaHRcbiAgICAgICAgICAgICc5JywgLy8gbmluZSxcbiAgICAgICAgICAgICdBcnJvd1JpZ2h0JyxcbiAgICAgICAgICAgICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgJ0Fycm93VXAnLFxuICAgICAgICAgICAgJ0Fycm93RG93bicsXG4gICAgICAgICAgICAnLicsXG4gICAgICAgICAgICAnTWV0YScsXG4gICAgICAgICAgICAndidcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmFsbG93ZWRLZXlzID0gbmV3IFNldChhbGxvd2VkS2V5cyk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbICckZXZlbnQnIF0pXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCA9IGV2ZW50LmNsaXBib2FyZERhdGE7XG4gICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInICYmIHBhc3RlZFRleHQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIocGFzdGVkVGV4dCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbICckZXZlbnQnIF0pXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCgvWzAtOV0vKTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgYWxsb3dlZCA9IHRoaXMuYWxsb3dlZEtleXMuaGFzKGV2ZW50LmtleSk7XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5jb2RlID09PSAnU3BhY2UnKVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICcuJyAmJiB2YWx1ZS50b1N0cmluZygpLmluZGV4T2YoJy4nKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVjaXNpb25UeXBlID09PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVnZXgudGVzdChldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ciA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0clsxXS5sZW5ndGggPj0gdGhpcy5wcmVjaXNpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5wcmVjaXNpb25UeXBlID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdQZXJpb2QnKVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScpXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9uYWxLZXlzKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID49IHRoaXMucHJlY2lzaW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9wdGlvbmFsS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0JhY2tzcGFjZScpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93TGVmdCcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93UmlnaHQnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd1VwJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnQXJyb3dEb3duJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59Il19