UNPKG

@justa/mask-directive

Version:

![](https://img.shields.io/bundlephobia/minzip/@justa/mask-directive.svg?style=flat-square) ![](https://img.shields.io/bundlephobia/min/@justa/mask-directive.svg?style=flat-square)

930 lines (920 loc) 25.6 kB
import { __spread } from 'tslib'; import { Directive, ElementRef, Input, HostListener, Renderer2, forwardRef, NgModule } from '@angular/core'; import InputMask from 'inputmask'; import { NgControl, NG_VALUE_ACCESSOR } from '@angular/forms'; /** * @fileoverview added by tsickle * Generated from: lib/money-mask.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @deprecated Use `jstCurrencyMask` instead. */ var MoneyMaskDirective = /** @class */ (function () { function MoneyMaskDirective(elementRef) { this.elementRef = elementRef; // Ref to the element in the DOM this.hasDecimal = false; // Input to set decimals to inputmask obj // Input to set decimals to inputmask obj this.hasPrefix = false; // Prefix to insert to the inputmask obj // Prefix to insert to the inputmask obj this.prefixSymbol = 'R$ '; // prefix symbol to the inputmask // prefix symbol to the inputmask this.imObject = { alias: 'currency', autoGroup: true, groupSeparator: '.', radixPoint: ',', rightAlign: false, prefix: 'R$ ', }; // Attach the local variable to the element in the DOM this.el = this.elementRef.nativeElement; } /** * @return {?} */ MoneyMaskDirective.prototype.ngOnInit = /** * @return {?} */ function () { // verify if has prefix. Eg.: R$ if (this.hasPrefix && this.prefixSymbol) { this.imObject['prefix'] = this.prefixSymbol; } // Verify if has decimal numbers if (this.hasDecimal) { this.imObject['numericInput'] = true; } this.im = new InputMask(this.imObject); this.im.mask(this.el); }; /** * @param {?} event * @return {?} */ MoneyMaskDirective.prototype.onKeyPress = /** * @param {?} event * @return {?} */ function (event) { console.log(event); if (!this.restrictNumeric(event)) { event.preventDefault; } }; /** * @param {?} e * @return {?} */ MoneyMaskDirective.prototype.onPaste = /** * @param {?} e * @return {?} */ function (e) { this.onInputChange(e); }; /** * @param {?} e * @return {?} */ MoneyMaskDirective.prototype.onChange = /** * @param {?} e * @return {?} */ function (e) { this.onInputChange(e); }; /** * @param {?} e * @return {?} */ MoneyMaskDirective.prototype.onInput = /** * @param {?} e * @return {?} */ function (e) { this.onInputChange(e); }; /** * @param {?} event * @return {?} */ MoneyMaskDirective.prototype.onInputChange = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var eventValue = event; /** @type {?} */ var newVal = typeof event === 'string' && (eventValue.includes('R$') || eventValue.includes('.')) ? eventValue.replace(/\D/gi, '') : eventValue; }; /** * @param {?} e * @return {?} */ MoneyMaskDirective.prototype.restrictNumeric = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var input; if (e.metaKey || e.ctrlKey) { return true; } if (e.which === 32) { return false; } if (e.which === 0) { return true; } if (e.which < 33) { return true; } input = String.fromCharCode(e.which); return !!/[\d\s]/.test(input); }; MoneyMaskDirective.decorators = [ { type: Directive, args: [{ selector: '[jstMoneyMask]', },] } ]; /** @nocollapse */ MoneyMaskDirective.ctorParameters = function () { return [ { type: ElementRef } ]; }; MoneyMaskDirective.propDecorators = { hasDecimal: [{ type: Input }], hasPrefix: [{ type: Input }], prefixSymbol: [{ type: Input }], onKeyPress: [{ type: HostListener, args: ['keypress', ['$event'],] }], onPaste: [{ type: HostListener, args: ['paste', ['$event'],] }], onChange: [{ type: HostListener, args: ['change', ['$event'],] }], onInput: [{ type: HostListener, args: ['input', ['$event'],] }] }; return MoneyMaskDirective; }()); if (false) { /** * @type {?} * @private */ MoneyMaskDirective.prototype.im; /** * @type {?} * @private */ MoneyMaskDirective.prototype.el; /** @type {?} */ MoneyMaskDirective.prototype.hasDecimal; /** @type {?} */ MoneyMaskDirective.prototype.hasPrefix; /** @type {?} */ MoneyMaskDirective.prototype.prefixSymbol; /** * @type {?} * @private */ MoneyMaskDirective.prototype.imObject; /** * @type {?} * @private */ MoneyMaskDirective.prototype.elementRef; } /** * @fileoverview added by tsickle * Generated from: lib/utils/index.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var CPF_REGEX = new RegExp(/(?!(\d)\1{2}.\1{3}.\1{3}-\1{2})\d{3}\.\d{3}\.\d{3}\-\d{2}/gm); /** @type {?} */ var CNPJ_REGEX = new RegExp(/^\d{2}.\d{3}.\d{3}\/\d{4}-\d{2}$/g); // CPF Utils (length dot indexes and hyphen index) /** @type {?} */ var CPF_LENGTH = 11; /** @type {?} */ var CPF_DOT_INDEXES = [2, 5]; /** @type {?} */ var CPF_HYPHEN_INDEX = [8]; // CNPJ Utils /** @type {?} */ var CNPJ_LENGTH = 14; /** @type {?} */ var CNPJ_DOT_INDEXES = [1, 4]; /** @type {?} */ var CNPJ_SLASH_INDEXES = [7]; /** @type {?} */ var CNPJ_HYPHEN_INDEX = [11]; /** * \@description Returns a Brazilian CPF formated * @type {?} */ var formatCpf = (/** * @param {?} cpf * @return {?} */ function (cpf) { /** @type {?} */ var cpfFormated = removeAllSpecialChar(cpf); return cpfFormated .slice(0, CPF_LENGTH) .split('') .reduce((/** * @param {?} acc * @param {?} cpf * @param {?} index * @return {?} */ function (acc, cpf, index) { /** @type {?} */ var result = "" + acc + cpf; if (!isLastChar(index, cpfFormated)) { if (CPF_DOT_INDEXES.indexOf(index) >= 0) return result + "."; if (CPF_HYPHEN_INDEX.indexOf(index) >= 0) return result + "-"; } return result; }), ''); }) /** * @description Returns a Brazilian CNPJ formated */ ; /** * \@description Returns a Brazilian CNPJ formated * @type {?} */ var formatCnpj = (/** * @param {?} cnpj * @return {?} */ function (cnpj) { /** @type {?} */ var digits = removeAllSpecialChar(cnpj); return digits .slice(0, CNPJ_LENGTH) .split('') .reduce((/** * @param {?} acc * @param {?} digit * @param {?} index * @return {?} */ function (acc, digit, index) { /** @type {?} */ var result = "" + acc + digit; if (!isLastChar(index, digits)) { if (CNPJ_DOT_INDEXES.includes(index)) return result + "."; if (CNPJ_SLASH_INDEXES.includes(index)) return result + "/"; if (CNPJ_HYPHEN_INDEX.includes(index)) return result + "-"; } return result; }), ''); }); /** @type {?} */ var removeAllSpecialChar = (/** * @param {?} input * @return {?} */ function (input) { return String(input).replace(/[^\d]/g, ''); }); var ɵ0 = removeAllSpecialChar; /** @type {?} */ var isLastChar = (/** * @param {?} index * @param {?} input * @return {?} */ function (index, input) { return index === input.length - 1; }); var ɵ1 = isLastChar; /** * @fileoverview added by tsickle * Generated from: lib/legal-document-mask.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var LegalDocumentMaskDirective = /** @class */ (function () { function LegalDocumentMaskDirective(el, renderer, _control) { this.el = el; this.renderer = renderer; this._control = _control; this.onChange = (/** * @param {?} value * @return {?} */ function (value) { }); this.onTouched = (/** * @return {?} */ function () { }); } /** * @return {?} */ LegalDocumentMaskDirective.prototype.ngOnInit = /** * @return {?} */ function () { /** @type {?} */ var unformattedValue = this.el.nativeElement.value; if (unformattedValue && unformattedValue.length > 0) { /** @type {?} */ var value = this.returnValue(unformattedValue); this.writeValue(value); } }; /** * @return {?} */ LegalDocumentMaskDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { clearTimeout(this.writeTimeout); }; Object.defineProperty(LegalDocumentMaskDirective.prototype, "control", { get: /** * @return {?} */ function () { return this._control.control; }, enumerable: true, configurable: true }); /** * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.inputKeyup = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event.target.value); this.writeValue(value); event.target.value = value; }; /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. */ /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.inputOnblur = /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event.value); this.writeValue(value); event.value = value; console.warn('This directive won\'t work more in Ionic into next minor version!'); }; /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. */ /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.inputFocus = /** * @deprecated This method for Ionic inputs will be deprecated in the next * minor version. * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event.value); this.writeValue(value); event.value = value; console.warn('This directive won\'t work more in Ionic into next minor version!'); }; /** * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.focusInput = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event.target.value); this.writeValue(value); event.target.value = value; }; /** * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.blurInput = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event.target.value); this.writeValue(value); event.target.value = value; }; /** * @param {?} event * @return {?} */ LegalDocumentMaskDirective.prototype.ngModelChangeInput = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = this.returnValue(event); this.writeValue(value); }; /** * @param {?} value * @return {?} */ LegalDocumentMaskDirective.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { var _this = this; this.writeTimeout = setTimeout((/** * @return {?} */ function () { _this.renderer.setProperty(_this.el.nativeElement, 'value', value); }), 1); }; /** * @param {?} fn * @return {?} */ LegalDocumentMaskDirective.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @param {?} fn * @return {?} */ LegalDocumentMaskDirective.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @private * @param {?} value * @return {?} */ LegalDocumentMaskDirective.prototype.writeValuePerson = /** * @private * @param {?} value * @return {?} */ function (value) { if (value.length <= 11) { return formatCpf(value); } return formatCnpj(value); }; /** * @private * @param {?} value * @return {?} */ LegalDocumentMaskDirective.prototype.returnValue = /** * @private * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var newVal = value ? value.replace(/\D/gi, '') : ''; return this.writeValuePerson(newVal); }; LegalDocumentMaskDirective.decorators = [ { type: Directive, args: [{ selector: '[jstLegalDocumentMask]', },] } ]; /** @nocollapse */ LegalDocumentMaskDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 }, { type: NgControl } ]; }; LegalDocumentMaskDirective.propDecorators = { inputKeyup: [{ type: HostListener, args: ['keyup', ['$event'],] }], inputOnblur: [{ type: HostListener, args: ['ionBlur', ['$event'],] }], inputFocus: [{ type: HostListener, args: ['ionFocus', ['$event'],] }], focusInput: [{ type: HostListener, args: ['focus', ['$event'],] }], blurInput: [{ type: HostListener, args: ['blur', ['$event'],] }], ngModelChangeInput: [{ type: HostListener, args: ['ngModelChange', ['$event'],] }] }; return LegalDocumentMaskDirective; }()); if (false) { /** @type {?} */ LegalDocumentMaskDirective.prototype.onChange; /** @type {?} */ LegalDocumentMaskDirective.prototype.onTouched; /** @type {?} */ LegalDocumentMaskDirective.prototype.writeTimeout; /** * @type {?} * @private */ LegalDocumentMaskDirective.prototype.el; /** * @type {?} * @private */ LegalDocumentMaskDirective.prototype.renderer; /** * @type {?} * @private */ LegalDocumentMaskDirective.prototype._control; } /** * @fileoverview added by tsickle * Generated from: lib/currency-mask.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var CurrencyMaskDirective = /** @class */ (function () { function CurrencyMaskDirective(elementRef, renderer) { this.elementRef = elementRef; this.renderer = renderer; this.currencyMultiplier = 100; this.currencyPrefix = 'R$ '; this.masker = new InputMask({ alias: 'currency', autoGroup: true, autoUnmask: true, groupSeparator: '.', radixPoint: ',', rightAlign: false, placeholder: '0,00', numericInput: true, prefix: this.currencyPrefix, }); } /** * @return {?} */ CurrencyMaskDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.masker.mask(this.elementRef.nativeElement); }; /** * @return {?} */ CurrencyMaskDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { window.clearTimeout(this.rendererTimeout); }; /** * @param {?} rawValue * @return {?} */ CurrencyMaskDirective.prototype.writeValue = /** * @param {?} rawValue * @return {?} */ function (rawValue) { var _this = this; /** @type {?} */ var value = parseFloat(rawValue) / this.currencyMultiplier; this.rendererTimeout = window.setTimeout((/** * @return {?} */ function () { _this.renderer.setProperty(_this.elementRef.nativeElement, 'value', value); }), 0); }; /** * @param {?} onChange * @return {?} */ CurrencyMaskDirective.prototype.registerOnChange = /** * @param {?} onChange * @return {?} */ function (onChange) { this.onChange = onChange; }; /** * @param {?} onTouched * @return {?} */ CurrencyMaskDirective.prototype.registerOnTouched = /** * @param {?} onTouched * @return {?} */ function (onTouched) { this.onTouched = onTouched; }; /** * @param {?} isDisabled * @return {?} */ CurrencyMaskDirective.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled); }; /** * @param {?} event * @return {?} */ CurrencyMaskDirective.prototype.onInputBlur = /** * @param {?} event * @return {?} */ function (event) { // Inputmask não troca o separador de casas decimais /** @type {?} */ var value = parseFloat(event.target.value.replace(',', '.')) * this.currencyMultiplier; this.onChange(value); }; CurrencyMaskDirective.decorators = [ { type: Directive, args: [{ selector: '[jstCurrencyMask]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return CurrencyMaskDirective; })), multi: true, }, ], },] } ]; /** @nocollapse */ CurrencyMaskDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; CurrencyMaskDirective.propDecorators = { currencyMultiplier: [{ type: Input }], currencyPrefix: [{ type: Input }], onInputBlur: [{ type: HostListener, args: ['blur', ['$event'],] }] }; return CurrencyMaskDirective; }()); if (false) { /** @type {?} */ CurrencyMaskDirective.prototype.currencyMultiplier; /** @type {?} */ CurrencyMaskDirective.prototype.currencyPrefix; /** @type {?} */ CurrencyMaskDirective.prototype.onChange; /** @type {?} */ CurrencyMaskDirective.prototype.onTouched; /** * @type {?} * @private */ CurrencyMaskDirective.prototype.rendererTimeout; /** * @type {?} * @private */ CurrencyMaskDirective.prototype.masker; /** * @type {?} * @private */ CurrencyMaskDirective.prototype.elementRef; /** * @type {?} * @private */ CurrencyMaskDirective.prototype.renderer; } /** * @fileoverview added by tsickle * Generated from: lib/percentage-mask.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var PercentageMaskDirective = /** @class */ (function () { function PercentageMaskDirective(elementRef, renderer) { this.elementRef = elementRef; this.renderer = renderer; this.percentSuffix = ' %'; this.mask = new InputMask({ alias: 'percentage', autoGroup: false, autoUnmask: true, radixPoint: ',', rightAlign: false, placeHolder: '0,00', numericInput: true, digits: 2, suffix: this.percentSuffix, }); } /** * @return {?} */ PercentageMaskDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.mask.mask(this.elementRef.nativeElement); }; /** * @return {?} */ PercentageMaskDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { window.clearTimeout(this.rendererTimeout); }; /** * @param {?} rawValue * @return {?} */ PercentageMaskDirective.prototype.writeValue = /** * @param {?} rawValue * @return {?} */ function (rawValue) { var _this = this; /** @type {?} */ var value = parseFloat(rawValue) * 100; this.rendererTimeout = window.setTimeout((/** * @return {?} */ function () { _this.renderer.setProperty(_this.elementRef.nativeElement, 'value', value); }), 0); }; /** * @param {?} onChange * @return {?} */ PercentageMaskDirective.prototype.registerOnChange = /** * @param {?} onChange * @return {?} */ function (onChange) { this.onChange = onChange; }; /** * @param {?} onTouched * @return {?} */ PercentageMaskDirective.prototype.registerOnTouched = /** * @param {?} onTouched * @return {?} */ function (onTouched) { this.onTouched = onTouched; }; /** * @param {?} event * @return {?} */ PercentageMaskDirective.prototype.onInputBlur = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = parseFloat(event.target.value.replace(',', '.')) / 100; this.onChange(value); }; PercentageMaskDirective.decorators = [ { type: Directive, args: [{ selector: '[jstPercentageMask]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return PercentageMaskDirective; })), multi: true, }, ], },] } ]; /** @nocollapse */ PercentageMaskDirective.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; PercentageMaskDirective.propDecorators = { percentSuffix: [{ type: Input }], onInputBlur: [{ type: HostListener, args: ['blur', ['$event'],] }] }; return PercentageMaskDirective; }()); if (false) { /** @type {?} */ PercentageMaskDirective.prototype.percentSuffix; /** @type {?} */ PercentageMaskDirective.prototype.onChange; /** @type {?} */ PercentageMaskDirective.prototype.onTouched; /** * @type {?} * @private */ PercentageMaskDirective.prototype.mask; /** * @type {?} * @private */ PercentageMaskDirective.prototype.rendererTimeout; /** * @type {?} * @private */ PercentageMaskDirective.prototype.elementRef; /** * @type {?} * @private */ PercentageMaskDirective.prototype.renderer; } /** * @fileoverview added by tsickle * Generated from: lib/mask-directive.module.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var MASK_DIRECTIVES = [ MoneyMaskDirective, LegalDocumentMaskDirective, CurrencyMaskDirective, PercentageMaskDirective, ]; var MaskDirectiveModule = /** @class */ (function () { function MaskDirectiveModule() { } MaskDirectiveModule.decorators = [ { type: NgModule, args: [{ declarations: __spread(MASK_DIRECTIVES), imports: [], exports: __spread(MASK_DIRECTIVES), },] } ]; return MaskDirectiveModule; }()); /** * @fileoverview added by tsickle * Generated from: public_api.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * Generated from: justa-mask-directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { MaskDirectiveModule, MoneyMaskDirective as ɵa, LegalDocumentMaskDirective as ɵb, CurrencyMaskDirective as ɵc, PercentageMaskDirective as ɵd }; //# sourceMappingURL=justa-mask-directive.js.map