appproject-components 0.0.31 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/{esm2020 → esm2022}/appproject-components.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/appproject-components.component.mjs +15 -15
  3. package/{esm2020 → esm2022}/lib/appproject-components.module.mjs +96 -96
  4. package/{esm2020 → esm2022}/lib/appproject-components.service.mjs +14 -14
  5. package/esm2022/lib/baseInputComponent.mjs +66 -0
  6. package/esm2022/lib/input-area/input-area.component.mjs +53 -0
  7. package/esm2022/lib/input-arquivo/input-arquivo.component.mjs +115 -0
  8. package/esm2022/lib/input-cep/input-cep.component.mjs +180 -0
  9. package/esm2022/lib/input-format/input-format.component.mjs +138 -0
  10. package/esm2022/lib/input-pesquisa/input-pesquisa.component.mjs +548 -0
  11. package/esm2022/lib/input-select/input-select.component.mjs +88 -0
  12. package/esm2022/lib/input-text/input-text.component.mjs +76 -0
  13. package/esm2022/lib/input-valor/input-valor.component.mjs +158 -0
  14. package/{esm2020 → esm2022}/lib/model-treeview/model-treeview.component.mjs +14 -14
  15. package/{esm2020 → esm2022}/public-api.mjs +18 -18
  16. package/fesm2022/appproject-components.mjs +1511 -0
  17. package/fesm2022/appproject-components.mjs.map +1 -0
  18. package/index.d.ts +5 -5
  19. package/lib/appproject-components.component.d.ts +8 -8
  20. package/lib/appproject-components.module.d.ts +26 -26
  21. package/lib/appproject-components.service.d.ts +6 -6
  22. package/lib/baseInputComponent.d.ts +27 -27
  23. package/lib/input-area/input-area.component.d.ts +21 -21
  24. package/lib/input-arquivo/input-arquivo.component.d.ts +34 -34
  25. package/lib/input-cep/input-cep.component.d.ts +29 -29
  26. package/lib/input-format/input-format.component.d.ts +27 -25
  27. package/lib/input-pesquisa/input-pesquisa.component.d.ts +68 -68
  28. package/lib/input-select/input-select.component.d.ts +29 -28
  29. package/lib/input-text/input-text.component.d.ts +29 -25
  30. package/lib/input-valor/input-valor.component.d.ts +28 -25
  31. package/lib/model-treeview/model-treeview.component.d.ts +8 -8
  32. package/package.json +8 -14
  33. package/public-api.d.ts +13 -13
  34. package/esm2020/lib/baseInputComponent.mjs +0 -65
  35. package/esm2020/lib/input-area/input-area.component.mjs +0 -53
  36. package/esm2020/lib/input-arquivo/input-arquivo.component.mjs +0 -114
  37. package/esm2020/lib/input-cep/input-cep.component.mjs +0 -180
  38. package/esm2020/lib/input-format/input-format.component.mjs +0 -129
  39. package/esm2020/lib/input-pesquisa/input-pesquisa.component.mjs +0 -540
  40. package/esm2020/lib/input-select/input-select.component.mjs +0 -80
  41. package/esm2020/lib/input-text/input-text.component.mjs +0 -65
  42. package/esm2020/lib/input-valor/input-valor.component.mjs +0 -125
  43. package/fesm2015/appproject-components.mjs +0 -1456
  44. package/fesm2015/appproject-components.mjs.map +0 -1
  45. package/fesm2020/appproject-components.mjs +0 -1441
  46. package/fesm2020/appproject-components.mjs.map +0 -1
@@ -0,0 +1,180 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { Observable } from 'rxjs';
4
+ import { BaseInputComponent } from '../baseInputComponent';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@ionic/angular";
8
+ export class InputCepComponent extends BaseInputComponent {
9
+ constructor() {
10
+ super();
11
+ this.formato = '00000-000';
12
+ this.keyEnter = null;
13
+ this.getResultados = null;
14
+ //control value acessor
15
+ this.data = null;
16
+ this.onChange = (data) => { };
17
+ this.onTouch = () => { };
18
+ this.disabled = false;
19
+ }
20
+ writeValue(value) {
21
+ //console.log('write value', value);
22
+ this.onChange(value);
23
+ this.data = value;
24
+ }
25
+ registerOnChange(fn) {
26
+ this.onChange = fn;
27
+ }
28
+ registerOnTouched(fn) {
29
+ this.onTouch = fn;
30
+ }
31
+ setDisabledState(isDisabled) {
32
+ this.disabled = this.disabled;
33
+ }
34
+ ngOnInit() {
35
+ }
36
+ digitarFormatado(event) {
37
+ console.log(event);
38
+ if ((event.keyCode >= 48 && event.keyCode <= 57)
39
+ || (event.keyCode >= 96 && event.keyCode <= 105)
40
+ || (event.keyCode == 8)
41
+ || (event.keyCode == 9)
42
+ || (event.keyCode == 39)
43
+ || (event.keyCode == 37)
44
+ || (event.keyCode == 46)) {
45
+ //console.log(this.formControlName, this.form.get(this.formControlName).value);
46
+ setTimeout(() => {
47
+ if (this.form) {
48
+ this.form.patchValue({
49
+ [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)
50
+ });
51
+ }
52
+ else {
53
+ this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);
54
+ this.writeValue(this.data);
55
+ }
56
+ }, 100);
57
+ return true;
58
+ }
59
+ else {
60
+ return false;
61
+ }
62
+ }
63
+ onKeyEnter() {
64
+ if (this.keyEnter != null) {
65
+ this.keyEnter();
66
+ }
67
+ else {
68
+ if (this.getResultados != null) {
69
+ this.pesquisarClick();
70
+ }
71
+ }
72
+ }
73
+ onBlur() {
74
+ if (this.form) {
75
+ this.form.get(this.formControlName)?.markAsTouched();
76
+ }
77
+ if (this.blur) {
78
+ this.blur.emit(this.blurArgs);
79
+ }
80
+ }
81
+ formataCampoValor(valor, Mascara, evento) {
82
+ console.log(valor);
83
+ if (!valor)
84
+ return null;
85
+ //console.log(evento);
86
+ //if (!this.keypressInteiro(evento))
87
+ // return;
88
+ var boleanoMascara;
89
+ var Digitato = evento != null ? evento.keyCode : 0;
90
+ let exp = /\-|\.|\/|\(|\)| /g;
91
+ let campoSoNumeros = valor.replace(exp, "");
92
+ var posicaoCampo = 0;
93
+ var NovoValorCampo = "";
94
+ var TamanhoMascara = campoSoNumeros.length;
95
+ ;
96
+ if (Digitato != 8) { // backspace
97
+ for (let i = 0; i <= TamanhoMascara; i++) {
98
+ boleanoMascara = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
99
+ || (Mascara.charAt(i) == "/"));
100
+ boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == "(")
101
+ || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "));
102
+ if (boleanoMascara) {
103
+ NovoValorCampo += Mascara.charAt(i);
104
+ TamanhoMascara++;
105
+ }
106
+ else {
107
+ NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
108
+ posicaoCampo++;
109
+ }
110
+ }
111
+ return NovoValorCampo;
112
+ }
113
+ else {
114
+ return valor;
115
+ }
116
+ }
117
+ pesquisarClick() {
118
+ const cep = this.data;
119
+ //se não estiver informado o cep, não fazer a pesquisa
120
+ if (cep == null || cep == "") {
121
+ return;
122
+ }
123
+ this.getEnderecoPeloCep(cep).subscribe({
124
+ next: (result) => {
125
+ console.log('result CEP', result);
126
+ let cidadePesquisa = result.localidade;
127
+ cidadePesquisa = this.converteCaracteresEspeciais(cidadePesquisa.toUpperCase());
128
+ if (this.getResultados) {
129
+ this.getResultados(result);
130
+ }
131
+ }, error: (error) => {
132
+ }
133
+ });
134
+ }
135
+ //substituição de caracteres
136
+ converteCaracteresEspeciais(nome) {
137
+ var res = nome.replace(/Ã/g, "A");
138
+ res = res.replace(/Á/g, "A");
139
+ res = res.replace(/Ç/g, "C");
140
+ res = res.replace(/É/g, "E");
141
+ res = res.replace(/Â/g, "A");
142
+ res = res.replace(/Ô/g, "O");
143
+ res = res.replace(/Ó/g, "O");
144
+ res = res.replace(/Ú/g, "U");
145
+ res = res.replace(/Í/g, "I");
146
+ return res;
147
+ }
148
+ getEnderecoPeloCep(cep) {
149
+ return new Observable((x) => {
150
+ var request = new XMLHttpRequest();
151
+ request.open('get', `https://viacep.com.br/ws/${cep}/json/`, true);
152
+ request.send();
153
+ request.onload = function () {
154
+ var data = JSON.parse(this.response);
155
+ x.next(data);
156
+ };
157
+ });
158
+ }
159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
160
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputCepComponent, selector: "kb-input-cep", inputs: { formato: "formato", keyEnter: "keyEnter", getResultados: "getResultados" }, providers: [{
161
+ provide: NG_VALUE_ACCESSOR,
162
+ useExisting: InputCepComponent,
163
+ multi: true
164
+ }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
165
+ }
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCepComponent, decorators: [{
167
+ type: Component,
168
+ args: [{ selector: 'kb-input-cep', providers: [{
169
+ provide: NG_VALUE_ACCESSOR,
170
+ useExisting: InputCepComponent,
171
+ multi: true
172
+ }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputCep\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputCep.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n style=\"margin-top: 25px; margin-inline-start: 4px !important; --padding-start:2px; --padding-end: 2px;\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: ["@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
173
+ }], ctorParameters: () => [], propDecorators: { formato: [{
174
+ type: Input
175
+ }], keyEnter: [{
176
+ type: Input
177
+ }], getResultados: [{
178
+ type: Input
179
+ }] } });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcHByb2plY3QtY29tcG9uZW50cy9zcmMvbGliL2lucHV0LWNlcC9pbnB1dC1jZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtY2VwL2lucHV0LWNlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVkzRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQWtCO0lBV3ZEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFWRCxZQUFPLEdBQWtCLFdBQVcsQ0FBQztRQUNyQyxhQUFRLEdBQW9CLElBQUksQ0FBQztRQUNqQyxrQkFBYSxHQUFvQixJQUFJLENBQUM7UUFFL0MsdUJBQXVCO1FBQ2hCLFNBQUksR0FBaUIsSUFBSSxDQUFDO1FBQ3pCLGFBQVEsR0FBYSxDQUFDLElBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLFlBQU8sR0FBYSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUdsQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxn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QUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsaURDYkosNnVEQXFDUTs7MkZEdEJLLGlCQUFpQjtrQkFWN0IsU0FBUzsrQkFDRSxjQUFjLGFBR2IsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLG1CQUFtQjs0QkFDOUIsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQzt3REFJTyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlSW5wdXRDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1jZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtY2VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtY2VwLmNvbXBvbmVudC5zY3NzJywgJy4vLi4vYmFzZUNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDZXBDb21wb25lbnQsXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKSBmb3JtYXRvOiBzdHJpbmcgfCBudWxsID0gJzAwMDAwLTAwMCc7XG4gIEBJbnB1dCgpIGtleUVudGVyOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBnZXRSZXN1bHRhZG9zOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8vY29udHJvbCB2YWx1ZSBhY2Vzc29yXG4gIHB1YmxpYyBkYXRhOiBzdHJpbmcgfCBhbnkgPSBudWxsO1xuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChkYXRhOiBzdHJpbmcpID0+IHsgfTtcbiAgcHJpdmF0ZSBvblRvdWNoOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcbiAgcHJpdmF0ZSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgYW55KTogdm9pZCB7XG4gICAgLy9jb25zb2xlLmxvZygnd3JpdGUgdmFsdWUnLCB2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIGRpZ2l0YXJGb3JtYXRhZG8oZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICBpZiAoKGV2ZW50LmtleUNvZGUgPj0gNDggJiYgZXZlbnQua2V5Q29kZSA8PSA1NylcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID49IDk2ICYmIGV2ZW50LmtleUNvZGUgPD0gMTA1KVxuICAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gOClcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID09IDkpXG4gICAgICB8fCAoZXZlbnQua2V5Q29kZSA9PSAzOSlcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID09IDM3KVxuICAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gNDYpKSB7XG5cbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5mb3JtQ29udHJvbE5hbWUsIHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpLnZhbHVlKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBbdGhpcy5mb3JtQ29udHJvbE5hbWVdOiB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy52YWx1ZSwgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZGF0YSA/PyAnJywgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudCk7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbktleUVudGVyKCkge1xuICAgIGlmICh0aGlzLmtleUVudGVyICE9IG51bGwpIHtcbiAgICAgIHRoaXMua2V5RW50ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZ2V0UmVzdWx0YWRvcyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucGVzcXVpc2FyQ2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmx1cikge1xuICAgICAgdGhpcy5ibHVyLmVtaXQodGhpcy5ibHVyQXJncyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0YUNhbXBvVmFsb3IodmFsb3I6IHN0cmluZywgTWFzY2FyYTogc3RyaW5nLCBldmVudG86IGFueSkge1xuICAgIGNvbnNvbGUubG9nKHZhbG9yKTtcbiAgICBpZiAoIXZhbG9yKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy9jb25zb2xlLmxvZyhldmVudG8pO1xuXG4gICAgLy9pZiAoIXRoaXMua2V5cHJlc3NJbnRlaXJvKGV2ZW50bykpXG4gICAgLy8gIHJldHVybjtcblxuICAgIHZhciBib2xlYW5vTWFzY2FyYTtcblxuICAgIHZhciBEaWdpdGF0byA9IGV2ZW50byAhPSBudWxsID8gZXZlbnRvLmtleUNvZGUgOiAwO1xuICAgIGxldCBleHAgPSAvXFwtfFxcLnxcXC98XFwofFxcKXwgL2dcbiAgICBsZXQgY2FtcG9Tb051bWVyb3MgPSB2YWxvci5yZXBsYWNlKGV4cCwgXCJcIik7XG5cbiAgICB2YXIgcG9zaWNhb0NhbXBvID0gMDtcbiAgICB2YXIgTm92b1ZhbG9yQ2FtcG8gPSBcIlwiO1xuICAgIHZhciBUYW1hbmhvTWFzY2FyYSA9IGNhbXBvU29OdW1lcm9zLmxlbmd0aDs7XG5cbiAgICBpZiAoRGlnaXRhdG8gIT0gOCkgeyAvLyBiYWNrc3BhY2UgXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBUYW1hbmhvTWFzY2FyYTsgaSsrKSB7XG4gICAgICAgIGJvbGVhbm9NYXNjYXJhID0gKChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIi1cIikgfHwgKE1hc2NhcmEuY2hhckF0KGkpID09IFwiLlwiKVxuICAgICAgICAgIHx8IChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIi9cIikpXG4gICAgICAgIGJvbGVhbm9NYXNjYXJhID0gYm9sZWFub01hc2NhcmEgfHwgKChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIihcIilcbiAgICAgICAgICB8fCAoTWFzY2FyYS5jaGFyQXQoaSkgPT0gXCIpXCIpIHx8IChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIiBcIikpXG4gICAgICAgIGlmIChib2xlYW5vTWFzY2FyYSkge1xuICAgICAgICAgIE5vdm9WYWxvckNhbXBvICs9IE1hc2NhcmEuY2hhckF0KGkpO1xuICAgICAgICAgIFRhbWFuaG9NYXNjYXJhKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTm92b1ZhbG9yQ2FtcG8gKz0gY2FtcG9Tb051bWVyb3MuY2hhckF0KHBvc2ljYW9DYW1wbyk7XG4gICAgICAgICAgcG9zaWNhb0NhbXBvKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBOb3ZvVmFsb3JDYW1wbztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbG9yO1xuICAgIH1cbiAgfVxuXG4gIHBlc3F1aXNhckNsaWNrKCkge1xuICAgIGNvbnN0IGNlcCA9IHRoaXMuZGF0YTtcbiAgICAvL3NlIG7Do28gZXN0aXZlciBpbmZvcm1hZG8gbyBjZXAsIG7Do28gZmF6ZXIgYSBwZXNxdWlzYVxuICAgIGlmIChjZXAgPT0gbnVsbCB8fCBjZXAgPT0gXCJcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0RW5kZXJlY29QZWxvQ2VwKGNlcCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3Jlc3VsdCBDRVAnLCByZXN1bHQpO1xuXG4gICAgICAgIGxldCBjaWRhZGVQZXNxdWlzYTogc3RyaW5nID0gcmVzdWx0LmxvY2FsaWRhZGU7XG4gICAgICAgIGNpZGFkZVBlc3F1aXNhID0gdGhpcy5jb252ZXJ0ZUNhcmFjdGVyZXNFc3BlY2lhaXMoY2lkYWRlUGVzcXVpc2EudG9VcHBlckNhc2UoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0UmVzdWx0YWRvcykge1xuICAgICAgICAgIHRoaXMuZ2V0UmVzdWx0YWRvcyhyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy9zdWJzdGl0dWnDp8OjbyBkZSBjYXJhY3RlcmVzXG4gIGNvbnZlcnRlQ2FyYWN0ZXJlc0VzcGVjaWFpcyhub21lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBub21lLnJlcGxhY2UoL8ODL2csIFwiQVwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw4EvZywgXCJBXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/Dhy9nLCBcIkNcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoL8OJL2csIFwiRVwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw4IvZywgXCJBXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/DlC9nLCBcIk9cIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoL8OTL2csIFwiT1wiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw5ovZywgXCJVXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/DjS9nLCBcIklcIik7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGdldEVuZGVyZWNvUGVsb0NlcChjZXA6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKCh4KSA9PiB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgcmVxdWVzdC5vcGVuKCdnZXQnLCBgaHR0cHM6Ly92aWFjZXAuY29tLmJyL3dzLyR7Y2VwfS9qc29uL2AsIHRydWUpO1xuICAgICAgcmVxdWVzdC5zZW5kKCk7XG4gICAgICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICB4Lm5leHQoZGF0YSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCI8IS0tXHJcbjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbi0tPlxyXG48IS0tY29tYW5kbyAtLWlubmVyLXBhZGRpbmctZW5kOiB1dGlsaXphZG8gcHJhIHJlbW92ZXIgcGFkZGluZyBkZXNuZWNlc3PDoXJpb3MtLT5cclxuPGRpdj5cclxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBzdHlsZT1cIi0tYmFja2dyb3VuZDogaW5oZXJpdGVkOy0tYmFja2dyb3VuZC1mb2N1c2VkOiB0cmFuc3BhcmVudDstLWlubmVyLXBhZGRpbmctZW5kOiAwcHg7XCIgW2NsYXNzXT1cIml0ZW1DbGFzc1wiXHJcbiAgICBbbmdDbGFzc109XCJmb3JtPy5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZXJyb3JzICYmIChmb3JtPy5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZGlydHkgfHwgZm9ybT8uZ2V0KGZvcm1Db250cm9sTmFtZSk/LnRvdWNoZWQpID8gJ2Vycm9yLXNoYWtlJyA6ICcnIFwiXHJcbiAgICA+XHJcbiAgICAgIDxpb24tbGFiZWwgW3Bvc2l0aW9uXT1cImxhYmVsUG9zaXRpb25cIj57eyBsYWJlbCB9fTwvaW9uLWxhYmVsPlxyXG4gICAgICA8IS0tIGZvcm1Db250cm9sTmFtZT17e2Zvcm1Db250cm9sTmFtZX19IC0tPlxyXG4gICAgICA8aW9uLWlucHV0ICNpbnB1dENlcFxyXG4gICAgICB0eXBlPVwidGVsXCIgXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgIG1heGxlbmd0aD1cInt7IG1heCB9fVwiIFxyXG4gICAgICAoa2V5ZG93bik9XCJkaWdpdGFyRm9ybWF0YWRvKCRldmVudClcIiBcclxuICAgICAgKGtleXVwLmVudGVyKT1cIm9uS2V5RW50ZXIoKVwiXHJcbiAgICAgIChpb25CbHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgW3ZhbHVlXT1cImRhdGFcIlxyXG4gICAgICAoaW5wdXQpPVwid3JpdGVWYWx1ZShpbnB1dENlcC52YWx1ZSlcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIj48L2lvbi1pbnB1dD5cclxuXHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJwZXNxdWlzYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgXHJcbiAgICA8L2lvbi1pdGVtPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybSAmJiBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5oYXNFcnJvcih2YWxpZGF0aW9uLnR5cGUpICYmIChmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5kaXJ0eSB8fCBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgJiM4MjI2OyB7eyB2YWxpZGF0aW9uLm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4iXX0=
@@ -0,0 +1,138 @@
1
+ import { Component, ElementRef, EventEmitter, Input, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { BaseInputComponent } from '../baseInputComponent';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@ionic/angular";
7
+ export class InputFormatComponent extends BaseInputComponent {
8
+ writeValue(value) {
9
+ //console.log('write value', value);
10
+ this.onChange(value);
11
+ this.data = value;
12
+ }
13
+ registerOnChange(fn) {
14
+ this.onChange = fn;
15
+ }
16
+ registerOnTouched(fn) {
17
+ this.onTouch = fn;
18
+ }
19
+ setDisabledState(isDisabled) {
20
+ this.disabled = this.disabled;
21
+ }
22
+ constructor() {
23
+ super();
24
+ this.formato = null;
25
+ this.keyEnter = new EventEmitter();
26
+ //control value acessor
27
+ this.data = null;
28
+ this.onChange = (data) => { };
29
+ this.onTouch = () => { };
30
+ this.disabled = false;
31
+ this.console = console;
32
+ }
33
+ ngOnInit() { }
34
+ digitarFormatado(event) {
35
+ //console.log(event);
36
+ const index = event.target.selectionStart >= 1 ? (event.target.selectionStart - 1) : 0;
37
+ const keyAt = event.target.value.charCodeAt(index);
38
+ if ((event.keyCode >= 48 && event.keyCode <= 57)
39
+ || (keyAt >= 48 && keyAt <= 57)
40
+ || (event.keyCode >= 96 && event.keyCode <= 105)
41
+ || (event.keyCode == 8)
42
+ || (event.keyCode == 9)
43
+ || (event.keyCode == 39)
44
+ || (event.keyCode == 37)
45
+ || (event.keyCode == 46)) {
46
+ //console.log(this.formControlName, this.form.get(this.formControlName).value);
47
+ setTimeout(() => {
48
+ if (this.form) {
49
+ this.form.patchValue({
50
+ [this.formControlName]: this.formataCampoValor(this.form.get(this.formControlName)?.value, this.formato ?? '', event)
51
+ });
52
+ }
53
+ else {
54
+ this.data = this.formataCampoValor(this.data ?? '', this.formato ?? '', event);
55
+ this.writeValue(this.data);
56
+ }
57
+ }, 100);
58
+ return true;
59
+ }
60
+ else {
61
+ return false;
62
+ }
63
+ }
64
+ onKeyEnter() {
65
+ if (this.keyEnter != null) {
66
+ this.keyEnter.emit();
67
+ }
68
+ }
69
+ onBlur() {
70
+ if (this.form) {
71
+ this.form.get(this.formControlName)?.markAsTouched();
72
+ }
73
+ if (this.blur) {
74
+ this.blur.emit(this.blurArgs);
75
+ }
76
+ }
77
+ setFocus() {
78
+ this.inputFormatEdit.nativeElement.setFocus();
79
+ }
80
+ formataCampoValor(valor, Mascara, evento) {
81
+ console.log(valor);
82
+ if (!valor)
83
+ return null;
84
+ //console.log(evento);
85
+ //if (!this.keypressInteiro(evento))
86
+ // return;
87
+ var boleanoMascara;
88
+ var Digitato = evento != null ? evento.keyCode : 0;
89
+ let exp = /\-|\.|\/|\(|\)| /g;
90
+ let campoSoNumeros = valor.replace(exp, "");
91
+ var posicaoCampo = 0;
92
+ var NovoValorCampo = "";
93
+ var TamanhoMascara = campoSoNumeros.length;
94
+ ;
95
+ if (Digitato != 8) { // backspace
96
+ for (let i = 0; i <= TamanhoMascara; i++) {
97
+ boleanoMascara = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
98
+ || (Mascara.charAt(i) == "/"));
99
+ boleanoMascara = boleanoMascara || ((Mascara.charAt(i) == "(")
100
+ || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "));
101
+ if (boleanoMascara) {
102
+ NovoValorCampo += Mascara.charAt(i);
103
+ TamanhoMascara++;
104
+ }
105
+ else {
106
+ NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
107
+ posicaoCampo++;
108
+ }
109
+ }
110
+ return NovoValorCampo;
111
+ }
112
+ else {
113
+ return valor;
114
+ }
115
+ }
116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputFormatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
117
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputFormatComponent, selector: "kb-input-format", inputs: { formato: "formato", keyEnter: "keyEnter" }, providers: [{
118
+ provide: NG_VALUE_ACCESSOR,
119
+ useExisting: InputFormatComponent,
120
+ multi: true
121
+ }], viewQueries: [{ propertyName: "inputFormatEdit", first: true, predicate: ["inputFormat"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputFormatComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'kb-input-format', providers: [{
126
+ provide: NG_VALUE_ACCESSOR,
127
+ useExisting: InputFormatComponent,
128
+ multi: true
129
+ }], template: "<!--\r\n<div [formGroup]=\"form\">\r\n-->\r\n<!--comando --inner-padding-end: utilizado pra remover padding desnecess\u00E1rios-->\r\n<div>\r\n <ion-item lines=\"none\" style=\"--background: inherited;--background-focused: transparent;--inner-padding-end: 0px;\" [class]=\"itemClass\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \"\r\n >\r\n <ion-label [position]=\"labelPosition\">{{ label }}</ion-label>\r\n <!-- formControlName={{formControlName}} -->\r\n <ion-input #inputFormat\r\n type=\"tel\" \r\n [placeholder]=\"placeholder\"\r\n maxlength=\"{{ max }}\" \r\n (keydown)=\"digitarFormatado($event)\" \r\n (keyup.enter)=\"onKeyEnter()\"\r\n (ionBlur)=\"onBlur()\"\r\n [value]=\"data\"\r\n (input)=\"writeValue(inputFormat.value)\"\r\n [disabled]=\"readonly\"></ion-input>\r\n \r\n </ion-item>\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form && form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>", styles: [".item-inner{padding-right:0!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: blue !important}input:disabled{opacity:.9!important}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
130
+ }], ctorParameters: () => [], propDecorators: { formato: [{
131
+ type: Input
132
+ }], keyEnter: [{
133
+ type: Input
134
+ }], inputFormatEdit: [{
135
+ type: ViewChild,
136
+ args: ['inputFormat', { read: ElementRef, static: true }]
137
+ }] } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZm9ybWF0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcHByb2plY3QtY29tcG9uZW50cy9zcmMvbGliL2lucHV0LWZvcm1hdC9pbnB1dC1mb3JtYXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtZm9ybWF0L2lucHV0LWZvcm1hdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFZM0QsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGtCQUFrQjtJQWExRCxVQUFVLENBQUMsS0FBbUI7UUFDNUIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTNCRCxZQUFPLEdBQWtCLElBQUksQ0FBQztRQUM5Qixh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RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUlucHV0Q29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna2ItaW5wdXQtZm9ybWF0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtZm9ybWF0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1mb3JtYXQuY29tcG9uZW50LnNjc3MnLCAnLi8uLi9iYXNlQ29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIHVzZUV4aXN0aW5nOiBJbnB1dEZvcm1hdENvbXBvbmVudCxcclxuICAgIG11bHRpOiB0cnVlXHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0Rm9ybWF0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm1hdG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGtleUVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Rm9ybWF0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWV9KSBpbnB1dEZvcm1hdEVkaXQ7XHJcbiAgXHJcbiAgLy9jb250cm9sIHZhbHVlIGFjZXNzb3JcclxuICBwdWJsaWMgZGF0YTogc3RyaW5nIHwgYW55ID0gbnVsbDtcclxuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChkYXRhOiBzdHJpbmcpID0+IHt9O1xyXG4gIHByaXZhdGUgb25Ub3VjaDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNvbnNvbGUgPSBjb25zb2xlO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBhbnkpOiB2b2lkIHtcclxuICAgIC8vY29uc29sZS5sb2coJ3dyaXRlIHZhbHVlJywgdmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyBcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICBkaWdpdGFyRm9ybWF0YWRvKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgY29uc3QgaW5kZXggPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPj0gMSA/IChldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxKSA6IDA7XHJcbiAgICBjb25zdCBrZXlBdCA9IGV2ZW50LnRhcmdldC52YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSA0OCAmJiBldmVudC5rZXlDb2RlIDw9IDU3KVxyXG4gICAgIHx8IChrZXlBdCA+PSA0OCAmJiBrZXlBdCA8PSA1NylcclxuICAgICB8fCAoZXZlbnQua2V5Q29kZSA+PSA5NiAmJiBldmVudC5rZXlDb2RlIDw9IDEwNSlcclxuICAgICB8fCAoZXZlbnQua2V5Q29kZSA9PSA4KVxyXG4gICAgIHx8IChldmVudC5rZXlDb2RlID09IDkpXHJcbiAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gMzkpXHJcbiAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gMzcpIFxyXG4gICAgIHx8IChldmVudC5rZXlDb2RlID09IDQ2KSkge1xyXG5cclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmZvcm1Db250cm9sTmFtZSwgdGhpcy5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkudmFsdWUpO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBbdGhpcy5mb3JtQ29udHJvbE5hbWVdOiB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy52YWx1ZSwgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZGF0YSA/PyAnJywgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudCk7XHJcbiAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5kYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9ICAgICAgICBcclxuICB9XHJcblxyXG4gIG9uS2V5RW50ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5rZXlFbnRlciAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMua2V5RW50ZXIuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKT8ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYmx1cikge1xyXG4gICAgICB0aGlzLmJsdXIuZW1pdCh0aGlzLmJsdXJBcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZvY3VzKCkge1xyXG4gICAgdGhpcy5pbnB1dEZvcm1hdEVkaXQubmF0aXZlRWxlbWVudC5zZXRGb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0YUNhbXBvVmFsb3IodmFsb3I6IHN0cmluZywgTWFzY2FyYTogc3RyaW5nLCBldmVudG86IGFueSkge1xyXG4gICAgY29uc29sZS5sb2codmFsb3IpO1xyXG4gICAgaWYgKCF2YWxvcilcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvL2NvbnNvbGUubG9nKGV2ZW50byk7XHJcblxyXG4gICAgLy9pZiAoIXRoaXMua2V5cHJlc3NJbnRlaXJvKGV2ZW50bykpXHJcbiAgICAvLyAgcmV0dXJuO1xyXG5cclxuICAgIHZhciBib2xlYW5vTWFzY2FyYTtcclxuXHJcbiAgICB2YXIgRGlnaXRhdG8gPSBldmVudG8gIT0gbnVsbCA/IGV2ZW50by5rZXlDb2RlIDogMDtcclxuICAgIGxldCBleHAgPSAvXFwtfFxcLnxcXC98XFwofFxcKXwgL2dcclxuICAgIGxldCBjYW1wb1NvTnVtZXJvcyA9IHZhbG9yLnJlcGxhY2UoZXhwLCBcIlwiKTtcclxuXHJcbiAgICB2YXIgcG9zaWNhb0NhbXBvID0gMDtcclxuICAgIHZhciBOb3ZvVmFsb3JDYW1wbyA9IFwiXCI7XHJcbiAgICB2YXIgVGFtYW5ob01hc2NhcmEgPSBjYW1wb1NvTnVtZXJvcy5sZW5ndGg7O1xyXG5cclxuICAgIGlmIChEaWdpdGF0byAhPSA4KSB7IC8vIGJhY2tzcGFjZSBcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gVGFtYW5ob01hc2NhcmE7IGkrKykge1xyXG4gICAgICAgIGJvbGVhbm9NYXNjYXJhID0gKChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIi1cIikgfHwgKE1hc2NhcmEuY2hhckF0KGkpID09IFwiLlwiKVxyXG4gICAgICAgICAgfHwgKE1hc2NhcmEuY2hhckF0KGkpID09IFwiL1wiKSlcclxuICAgICAgICBib2xlYW5vTWFzY2FyYSA9IGJvbGVhbm9NYXNjYXJhIHx8ICgoTWFzY2FyYS5jaGFyQXQoaSkgPT0gXCIoXCIpXHJcbiAgICAgICAgICB8fCAoTWFzY2FyYS5jaGFyQXQoaSkgPT0gXCIpXCIpIHx8IChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIiBcIikpXHJcbiAgICAgICAgaWYgKGJvbGVhbm9NYXNjYXJhKSB7XHJcbiAgICAgICAgICBOb3ZvVmFsb3JDYW1wbyArPSBNYXNjYXJhLmNoYXJBdChpKTtcclxuICAgICAgICAgIFRhbWFuaG9NYXNjYXJhKys7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE5vdm9WYWxvckNhbXBvICs9IGNhbXBvU29OdW1lcm9zLmNoYXJBdChwb3NpY2FvQ2FtcG8pO1xyXG4gICAgICAgICAgcG9zaWNhb0NhbXBvKys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBOb3ZvVmFsb3JDYW1wbztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB2YWxvcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4tLT5cclxuPCEtLWNvbWFuZG8gLS1pbm5lci1wYWRkaW5nLWVuZDogdXRpbGl6YWRvIHByYSByZW1vdmVyIHBhZGRpbmcgZGVzbmVjZXNzw6FyaW9zLS0+XHJcbjxkaXY+XHJcbiAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgc3R5bGU9XCItLWJhY2tncm91bmQ6IGluaGVyaXRlZDstLWJhY2tncm91bmQtZm9jdXNlZDogdHJhbnNwYXJlbnQ7LS1pbm5lci1wYWRkaW5nLWVuZDogMHB4O1wiIFtjbGFzc109XCJpdGVtQ2xhc3NcIlxyXG4gICAgW25nQ2xhc3NdPVwiZm9ybT8uZ2V0KGZvcm1Db250cm9sTmFtZSk/LmVycm9ycyAmJiAoZm9ybT8uZ2V0KGZvcm1Db250cm9sTmFtZSk/LmRpcnR5IHx8IGZvcm0/LmdldChmb3JtQ29udHJvbE5hbWUpPy50b3VjaGVkKSA/ICdlcnJvci1zaGFrZScgOiAnJyBcIlxyXG4gICAgPlxyXG4gICAgICA8aW9uLWxhYmVsIFtwb3NpdGlvbl09XCJsYWJlbFBvc2l0aW9uXCI+e3sgbGFiZWwgfX08L2lvbi1sYWJlbD5cclxuICAgICAgPCEtLSBmb3JtQ29udHJvbE5hbWU9e3tmb3JtQ29udHJvbE5hbWV9fSAtLT5cclxuICAgICAgPGlvbi1pbnB1dCAjaW5wdXRGb3JtYXRcclxuICAgICAgdHlwZT1cInRlbFwiIFxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICBtYXhsZW5ndGg9XCJ7eyBtYXggfX1cIiBcclxuICAgICAgKGtleWRvd24pPVwiZGlnaXRhckZvcm1hdGFkbygkZXZlbnQpXCIgXHJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJvbktleUVudGVyKClcIlxyXG4gICAgICAoaW9uQmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgIFt2YWx1ZV09XCJkYXRhXCJcclxuICAgICAgKGlucHV0KT1cIndyaXRlVmFsdWUoaW5wdXRGb3JtYXQudmFsdWUpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCI+PC9pb24taW5wdXQ+XHJcbiAgXHJcbiAgICA8L2lvbi1pdGVtPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybSAmJiBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5oYXNFcnJvcih2YWxpZGF0aW9uLnR5cGUpICYmIChmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5kaXJ0eSB8fCBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgJiM4MjI2OyB7eyB2YWxpZGF0aW9uLm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4iXX0=