@crediblefinance/credible-ui
Version:
Credible's standard UI library
113 lines • 12.3 kB
JavaScript
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