appproject-components 1.0.45 → 1.0.47
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.
- package/karma.conf.js +44 -0
- package/ng-package.json +7 -0
- package/package.json +15 -26
- package/src/lib/appproject-components.component.spec.ts +23 -0
- package/src/lib/appproject-components.component.ts +20 -0
- package/src/lib/appproject-components.module.ts +106 -0
- package/src/lib/appproject-components.service.spec.ts +16 -0
- package/src/lib/appproject-components.service.ts +9 -0
- package/src/lib/baseComponent.scss +162 -0
- package/src/lib/baseInputComponent.ts +35 -0
- package/src/lib/buttons/baseBtnComponent.ts +38 -0
- package/src/lib/buttons/btn-action/btn-action.component.html +11 -0
- package/src/lib/buttons/btn-action/btn-action.component.scss +7 -0
- package/src/lib/buttons/btn-action/btn-action.component.spec.ts +24 -0
- package/src/lib/buttons/btn-action/btn-action.component.ts +31 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.html +14 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.scss +5 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.spec.ts +24 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.ts +19 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.html +6 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.scss +5 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.spec.ts +24 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.ts +18 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.html +14 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.scss +8 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.spec.ts +24 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.ts +20 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.html +8 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.scss +5 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.spec.ts +24 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.ts +16 -0
- package/src/lib/entity-edit/entity-edit.component.html +143 -0
- package/src/lib/entity-edit/entity-edit.component.scss +4 -0
- package/src/lib/entity-edit/entity-edit.component.spec.ts +23 -0
- package/src/lib/entity-edit/entity-edit.component.ts +43 -0
- package/src/lib/grid-view/grid-view.component.html +116 -0
- package/src/lib/grid-view/grid-view.component.scss +47 -0
- package/src/lib/grid-view/grid-view.component.spec.ts +23 -0
- package/src/lib/grid-view/grid-view.component.ts +292 -0
- package/src/lib/input-area/input-area.component.html +30 -0
- package/src/lib/input-area/input-area.component.scss +68 -0
- package/src/lib/input-area/input-area.component.spec.ts +23 -0
- package/src/lib/input-area/input-area.component.ts +69 -0
- package/src/lib/input-arquivo/input-arquivo.component.html +11 -0
- package/src/lib/input-arquivo/input-arquivo.component.scss +0 -0
- package/src/lib/input-arquivo/input-arquivo.component.spec.ts +23 -0
- package/src/lib/input-arquivo/input-arquivo.component.ts +140 -0
- package/src/lib/input-cep/input-cep.component.html +38 -0
- package/src/lib/input-cep/input-cep.component.scss +0 -0
- package/src/lib/input-cep/input-cep.component.spec.ts +23 -0
- package/src/lib/input-cep/input-cep.component.ts +186 -0
- package/src/lib/input-checkbox/input-checkbox.component.html +12 -0
- package/src/lib/input-checkbox/input-checkbox.component.scss +11 -0
- package/src/lib/input-checkbox/input-checkbox.component.spec.ts +23 -0
- package/src/lib/input-checkbox/input-checkbox.component.ts +48 -0
- package/src/lib/input-format/input-format.component.html +32 -0
- package/src/lib/input-format/input-format.component.scss +47 -0
- package/src/lib/input-format/input-format.component.spec.ts +23 -0
- package/src/lib/input-format/input-format.component.ts +139 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.html +77 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.scss +127 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.spec.ts +23 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.ts +558 -0
- package/src/lib/input-radio/input-radio.component.html +21 -0
- package/src/lib/input-radio/input-radio.component.scss +3 -0
- package/src/lib/input-radio/input-radio.component.spec.ts +23 -0
- package/src/lib/input-radio/input-radio.component.ts +49 -0
- package/src/lib/input-select/input-select.component.html +29 -0
- package/src/lib/input-select/input-select.component.scss +62 -0
- package/src/lib/input-select/input-select.component.spec.ts +23 -0
- package/src/lib/input-select/input-select.component.ts +96 -0
- package/src/lib/input-text/input-text.component.html +48 -0
- package/src/lib/input-text/input-text.component.scss +63 -0
- package/src/lib/input-text/input-text.component.spec.ts +23 -0
- package/src/lib/input-text/input-text.component.ts +78 -0
- package/src/lib/input-valor/input-valor.component.html +32 -0
- package/src/lib/input-valor/input-valor.component.scss +47 -0
- package/src/lib/input-valor/input-valor.component.spec.ts +23 -0
- package/src/lib/input-valor/input-valor.component.ts +164 -0
- package/{lib/lib-config.d.ts → src/lib/lib-config.ts} +4 -3
- package/src/lib/model-treeview/model-treeview.component.html +20 -0
- package/src/lib/model-treeview/model-treeview.component.scss +0 -0
- package/src/lib/model-treeview/model-treeview.component.spec.ts +23 -0
- package/src/lib/model-treeview/model-treeview.component.ts +152 -0
- package/src/lib/tree-view/tree-view.component.html +96 -0
- package/src/lib/tree-view/tree-view.component.scss +50 -0
- package/src/lib/tree-view/tree-view.component.spec.ts +23 -0
- package/src/lib/tree-view/tree-view.component.ts +92 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.html +17 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.scss +8 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.spec.ts +23 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.ts +43 -0
- package/{public-api.d.ts → src/public-api.ts} +30 -24
- package/src/test.ts +15 -0
- package/tsconfig.lib.json +15 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +17 -0
- package/esm2022/appproject-components.mjs +0 -5
- package/esm2022/lib/appproject-components.component.mjs +0 -22
- package/esm2022/lib/appproject-components.module.mjs +0 -159
- package/esm2022/lib/appproject-components.service.mjs +0 -14
- package/esm2022/lib/baseInputComponent.mjs +0 -69
- package/esm2022/lib/buttons/baseBtnComponent.mjs +0 -63
- package/esm2022/lib/buttons/btn-action/btn-action.component.mjs +0 -55
- package/esm2022/lib/buttons/btn-cancelar/btn-cancelar.component.mjs +0 -25
- package/esm2022/lib/buttons/btn-excluir/btn-excluir.component.mjs +0 -29
- package/esm2022/lib/buttons/btn-novo/btn-novo.component.mjs +0 -33
- package/esm2022/lib/buttons/btn-salvar/btn-salvar.component.mjs +0 -19
- package/esm2022/lib/entity-edit/entity-edit.component.mjs +0 -53
- package/esm2022/lib/grid-view/grid-view.component.mjs +0 -275
- package/esm2022/lib/input-area/input-area.component.mjs +0 -72
- package/esm2022/lib/input-arquivo/input-arquivo.component.mjs +0 -154
- package/esm2022/lib/input-cep/input-cep.component.mjs +0 -180
- package/esm2022/lib/input-checkbox/input-checkbox.component.mjs +0 -51
- package/esm2022/lib/input-format/input-format.component.mjs +0 -138
- package/esm2022/lib/input-pesquisa/input-pesquisa.component.mjs +0 -557
- package/esm2022/lib/input-radio/input-radio.component.mjs +0 -58
- package/esm2022/lib/input-select/input-select.component.mjs +0 -110
- package/esm2022/lib/input-text/input-text.component.mjs +0 -88
- package/esm2022/lib/input-valor/input-valor.component.mjs +0 -161
- package/esm2022/lib/lib-config.mjs +0 -2
- package/esm2022/lib/model-treeview/model-treeview.component.mjs +0 -126
- package/esm2022/lib/tree-view/tree-view.component.mjs +0 -104
- package/esm2022/lib/tree-view-nivel/tree-view-nivel.component.mjs +0 -50
- package/esm2022/public-api.mjs +0 -30
- package/fesm2022/appproject-components.mjs +0 -2531
- package/fesm2022/appproject-components.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/appproject-components.component.d.ts +0 -8
- package/lib/appproject-components.module.d.ts +0 -36
- package/lib/appproject-components.service.d.ts +0 -6
- package/lib/baseInputComponent.d.ts +0 -28
- package/lib/buttons/baseBtnComponent.d.ts +0 -19
- package/lib/buttons/btn-action/btn-action.component.d.ts +0 -21
- package/lib/buttons/btn-cancelar/btn-cancelar.component.d.ts +0 -10
- package/lib/buttons/btn-excluir/btn-excluir.component.d.ts +0 -12
- package/lib/buttons/btn-novo/btn-novo.component.d.ts +0 -13
- package/lib/buttons/btn-salvar/btn-salvar.component.d.ts +0 -9
- package/lib/entity-edit/entity-edit.component.d.ts +0 -22
- package/lib/grid-view/grid-view.component.d.ts +0 -52
- package/lib/input-area/input-area.component.d.ts +0 -24
- package/lib/input-arquivo/input-arquivo.component.d.ts +0 -43
- package/lib/input-cep/input-cep.component.d.ts +0 -29
- package/lib/input-checkbox/input-checkbox.component.d.ts +0 -21
- package/lib/input-format/input-format.component.d.ts +0 -27
- package/lib/input-pesquisa/input-pesquisa.component.d.ts +0 -69
- package/lib/input-radio/input-radio.component.d.ts +0 -23
- package/lib/input-select/input-select.component.d.ts +0 -32
- package/lib/input-text/input-text.component.d.ts +0 -33
- package/lib/input-valor/input-valor.component.d.ts +0 -29
- package/lib/model-treeview/model-treeview.component.d.ts +0 -39
- package/lib/tree-view/tree-view.component.d.ts +0 -23
- package/lib/tree-view-nivel/tree-view-nivel.component.d.ts +0 -17
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ElementRef, EventEmitter, Output } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@ionic/angular";
|
|
7
|
-
export class InputArquivoComponent {
|
|
8
|
-
showImageBrowser() {
|
|
9
|
-
this.myInput.nativeElement.click();
|
|
10
|
-
}
|
|
11
|
-
writeValue(value) {
|
|
12
|
-
this.onChange(value);
|
|
13
|
-
this.data = value;
|
|
14
|
-
if (this.callback)
|
|
15
|
-
this.callback.emit(this.filename);
|
|
16
|
-
}
|
|
17
|
-
registerOnChange(fn) {
|
|
18
|
-
this.onChange = fn;
|
|
19
|
-
}
|
|
20
|
-
registerOnTouched(fn) {
|
|
21
|
-
this.onTouch = fn;
|
|
22
|
-
}
|
|
23
|
-
setDisabledState(isDisabled) {
|
|
24
|
-
this.disabled = this.disabled;
|
|
25
|
-
}
|
|
26
|
-
constructor() {
|
|
27
|
-
this.subir = false;
|
|
28
|
-
this.callback = new EventEmitter();
|
|
29
|
-
this.tipoArquivo = "image/*";
|
|
30
|
-
this.fileSelected = new EventEmitter();
|
|
31
|
-
this.form = false;
|
|
32
|
-
this.showIcon = false;
|
|
33
|
-
this.btnExpand = "block";
|
|
34
|
-
this.btnColor = "primary";
|
|
35
|
-
this.btnFill = "outline";
|
|
36
|
-
this.iconSlot = "start";
|
|
37
|
-
this.arquivoTipos = "image/*";
|
|
38
|
-
this.readOnly = false;
|
|
39
|
-
this.sucessoEvent = new Subject();
|
|
40
|
-
this.onChange = (selectedColor) => { };
|
|
41
|
-
this.onTouch = () => { };
|
|
42
|
-
this.disabled = false;
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
}
|
|
46
|
-
loadImagem() {
|
|
47
|
-
//console.log(this.myInput);
|
|
48
|
-
this.formFile = this.myInput.nativeElement.files[0];
|
|
49
|
-
if (this.fileSelected) {
|
|
50
|
-
this.fileSelected.emit({ content: this.formFile, name: this.myInput.nativeElement.files[0].name });
|
|
51
|
-
}
|
|
52
|
-
if (this.form) {
|
|
53
|
-
//this.formFile = this.myInput.nativeElement.files[0];
|
|
54
|
-
this.sucessoEvent.next(true);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
//this.formFile = this.myInput.nativeElement.files[0];
|
|
58
|
-
this.getBase64FromFile(this.myInput.nativeElement.files[0])
|
|
59
|
-
.then(result => {
|
|
60
|
-
//console.log('file: ', result.toString());
|
|
61
|
-
//console.log('nome do arquivo: ', this.nomeArquivo.toLowerCase());
|
|
62
|
-
let searchstr = result.toString().substring(0, result.toString().indexOf('base64,')) + 'base64,';
|
|
63
|
-
console.log('searchstring', searchstr);
|
|
64
|
-
if (this.subir) {
|
|
65
|
-
this.captureDataUrl = result.toString().replace(searchstr, '');
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
this.captureDataUrl = result.toString();
|
|
69
|
-
}
|
|
70
|
-
//this.utils.showToast('Imagem carregada em memória.');
|
|
71
|
-
this.sucessoEvent.next(true);
|
|
72
|
-
console.log('file', this.myInput.nativeElement.files[0]);
|
|
73
|
-
this.filename = this.myInput.nativeElement.files[0].name;
|
|
74
|
-
this.writeValue(this.captureDataUrl);
|
|
75
|
-
// if (this.nomeArquivo && this.subir) {
|
|
76
|
-
// this.arquivoService.setImagem({ Nome: this.nomeArquivo, Conteudo: this.captureDataUrl, Status: 0, Pasta: this.pasta })
|
|
77
|
-
// .subscribe(result => {
|
|
78
|
-
// console.log('result set imagem', result);
|
|
79
|
-
// if (result.Status == 200) {
|
|
80
|
-
// this.utils.showToast('Sucesso!');
|
|
81
|
-
// } else {
|
|
82
|
-
// this.utils.showAlert('Erro. Tente mais tarde.' + result.Conteudo);
|
|
83
|
-
// }
|
|
84
|
-
// }, error => {
|
|
85
|
-
// this.utils.showAlert('Erro. Tente mais tarde.');
|
|
86
|
-
// })
|
|
87
|
-
// }
|
|
88
|
-
}).catch(error => {
|
|
89
|
-
this.sucessoEvent.next(false);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//util
|
|
94
|
-
getBase64FromFile(file) {
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
const reader = new FileReader();
|
|
97
|
-
reader.readAsDataURL(file);
|
|
98
|
-
reader.onload = () => resolve(reader.result);
|
|
99
|
-
reader.onerror = error => reject(error);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputArquivoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputArquivoComponent, selector: "kb-input-arquivo", inputs: { nomeArquivo: "nomeArquivo", caption: "caption", pasta: "pasta", subir: "subir", callback: "callback", tipoArquivo: "tipoArquivo", form: "form", showIcon: "showIcon", icon: "icon", iconSrc: "iconSrc", btnExpand: "btnExpand", btnColor: "btnColor", btnFill: "btnFill", iconSlot: "iconSlot", arquivoTipos: "arquivoTipos", readOnly: "readOnly" }, outputs: { fileSelected: "fileSelected" }, providers: [{
|
|
104
|
-
provide: NG_VALUE_ACCESSOR,
|
|
105
|
-
useExisting: InputArquivoComponent,
|
|
106
|
-
multi: true
|
|
107
|
-
}], viewQueries: [{ propertyName: "myInput", first: true, predicate: ["inputNome"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!-- style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\" -->\r\n<div style=\"text-align:center;\">\r\n <ion-button [fill]=\"btnFill\" size=\"normal\" [color]=\"btnColor\" \r\n (click)=\"showImageBrowser()\" [expand]=\"btnExpand\" [disabled]=\"readOnly\">\r\n <ion-icon *ngIf=\"showIcon\" class=\"ion-padding-end\" [slot]=\"iconSlot\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\r\n {{ caption }}\r\n </ion-button>\r\n <input type=\"file\" id=\"upimgfile\" name=\"uploadfile\" #inputNome [accept]=\"arquivoTipos\" (change)=\"loadImagem()\"\r\n style=\"display: none;\" />\r\n </div>\r\n ", styles: [""], dependencies: [{ 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"] }] }); }
|
|
108
|
-
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputArquivoComponent, decorators: [{
|
|
110
|
-
type: Component,
|
|
111
|
-
args: [{ selector: 'kb-input-arquivo', providers: [{
|
|
112
|
-
provide: NG_VALUE_ACCESSOR,
|
|
113
|
-
useExisting: InputArquivoComponent,
|
|
114
|
-
multi: true
|
|
115
|
-
}], template: "<!-- style=\"box-shadow: #4c8dff 0px 3px 3px 0.05px\" -->\r\n<div style=\"text-align:center;\">\r\n <ion-button [fill]=\"btnFill\" size=\"normal\" [color]=\"btnColor\" \r\n (click)=\"showImageBrowser()\" [expand]=\"btnExpand\" [disabled]=\"readOnly\">\r\n <ion-icon *ngIf=\"showIcon\" class=\"ion-padding-end\" [slot]=\"iconSlot\" [src]=\"iconSrc\" [name]=\"icon\"></ion-icon>\r\n {{ caption }}\r\n </ion-button>\r\n <input type=\"file\" id=\"upimgfile\" name=\"uploadfile\" #inputNome [accept]=\"arquivoTipos\" (change)=\"loadImagem()\"\r\n style=\"display: none;\" />\r\n </div>\r\n " }]
|
|
116
|
-
}], ctorParameters: () => [], propDecorators: { nomeArquivo: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], caption: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], pasta: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], subir: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], callback: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], tipoArquivo: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], fileSelected: [{
|
|
129
|
-
type: Output
|
|
130
|
-
}], form: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], showIcon: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], icon: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], iconSrc: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], btnExpand: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], btnColor: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], btnFill: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], iconSlot: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], arquivoTipos: [{
|
|
147
|
-
type: Input
|
|
148
|
-
}], readOnly: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], myInput: [{
|
|
151
|
-
type: ViewChild,
|
|
152
|
-
args: ['inputNome', { read: ElementRef, static: true }]
|
|
153
|
-
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYXJxdWl2by5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcHBwcm9qZWN0LWNvbXBvbmVudHMvc3JjL2xpYi9pbnB1dC1hcnF1aXZvL2lucHV0LWFycXVpdm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtYXJxdWl2by9pbnB1dC1hcnF1aXZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQVkvQixNQUFNLE9BQU8scUJBQXFCO0lBbUNoQyxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BC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QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHVCQUF1Qjs0QkFDbEMsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQzt3REFHTyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHc0QsT0FBTztzQkFBbEUsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2tiLWlucHV0LWFycXVpdm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1hcnF1aXZvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1hcnF1aXZvLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbe1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogSW5wdXRBcnF1aXZvQ29tcG9uZW50LFxyXG4gICAgbXVsdGk6IHRydWVcclxuICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRBcnF1aXZvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbm9tZUFycXVpdm86IHN0cmluZztcclxuXHJcbiAgLy9ASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFzdGE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdWJpcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhbGxiYWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHRpcG9BcnF1aXZvOiBzdHJpbmcgPSBcImltYWdlLypcIjtcclxuICBAT3V0cHV0KCkgZmlsZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIGZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcclxuICBASW5wdXQoKSBpY29uU3JjOiBzdHJpbmc7IC8vL2Fzc2V0cy9pY29uL2ltYWdlX3ByaW1hcnlfMjRkcC5zdmdcclxuICBASW5wdXQoKSBidG5FeHBhbmQ6IHN0cmluZyA9IFwiYmxvY2tcIjtcclxuICBASW5wdXQoKSBidG5Db2xvcjogc3RyaW5nID0gXCJwcmltYXJ5XCI7XHJcbiAgQElucHV0KCkgYnRuRmlsbDogc3RyaW5nID0gXCJvdXRsaW5lXCI7XHJcbiAgQElucHV0KCkgaWNvblNsb3Q6IHN0cmluZyA9IFwic3RhcnRcIjtcclxuICBASW5wdXQoKSBhcnF1aXZvVGlwb3M6IHN0cmluZyA9IFwiaW1hZ2UvKlwiO1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vaW1hZ2VtXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXROb21lJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgbXlJbnB1dDtcclxuICBjYXB0dXJlRGF0YVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBmb3JtRmlsZTogYW55O1xyXG4gIHB1YmxpYyBzdWNlc3NvRXZlbnQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBkYXRhOiBzdHJpbmc7XHJcbiAgZmlsZW5hbWU6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZTogRnVuY3Rpb24gPSAoc2VsZWN0ZWRDb2xvcjogc3RyaW5nKSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBvblRvdWNoOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcclxuICBwcml2YXRlIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNob3dJbWFnZUJyb3dzZXIoKSB7XHJcbiAgICB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuY2FsbGJhY2spXHJcbiAgICAgIHRoaXMuY2FsbGJhY2suZW1pdCh0aGlzLmZpbGVuYW1lKTtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIGxvYWRJbWFnZW0oKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlJbnB1dCk7XHJcbiAgICB0aGlzLmZvcm1GaWxlID0gdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZmlsZXNbMF07XHJcbiAgICAgXHJcbiAgICBpZiAodGhpcy5maWxlU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdCh7IGNvbnRlbnQ6IHRoaXMuZm9ybUZpbGUsIG5hbWU6IHRoaXMubXlJbnB1dC5uYXRpdmVFbGVtZW50LmZpbGVzWzBdLm5hbWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAvL3RoaXMuZm9ybUZpbGUgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5maWxlc1swXTtcclxuICAgICAgdGhpcy5zdWNlc3NvRXZlbnQubmV4dCh0cnVlKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL3RoaXMuZm9ybUZpbGUgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5maWxlc1swXTtcclxuICAgICAgdGhpcy5nZXRCYXNlNjRGcm9tRmlsZSh0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5maWxlc1swXSlcclxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZmlsZTogJywgcmVzdWx0LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnbm9tZSBkbyBhcnF1aXZvOiAnLCB0aGlzLm5vbWVBcnF1aXZvLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgbGV0IHNlYXJjaHN0ciA9IHJlc3VsdC50b1N0cmluZygpLnN1YnN0cmluZygwLCByZXN1bHQudG9TdHJpbmcoKS5pbmRleE9mKCdiYXNlNjQsJykpICsgJ2Jhc2U2NCwnO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NlYXJjaHN0cmluZycsIHNlYXJjaHN0cik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zdWJpcikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHR1cmVEYXRhVXJsID0gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZShzZWFyY2hzdHIsICcnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZURhdGFVcmwgPSByZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vdGhpcy51dGlscy5zaG93VG9hc3QoJ0ltYWdlbSBjYXJyZWdhZGEgZW0gbWVtw7NyaWEuJyk7XHJcbiAgICAgICAgICB0aGlzLnN1Y2Vzc29FdmVudC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZpbGUnLCB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5maWxlc1swXSk7XHJcbiAgICAgICAgICB0aGlzLmZpbGVuYW1lID0gdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmNhcHR1cmVEYXRhVXJsKTtcclxuXHJcblxyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLm5vbWVBcnF1aXZvICYmIHRoaXMuc3ViaXIpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5hcnF1aXZvU2VydmljZS5zZXRJbWFnZW0oeyBOb21lOiB0aGlzLm5vbWVBcnF1aXZvLCBDb250ZXVkbzogdGhpcy5jYXB0dXJlRGF0YVVybCwgU3RhdHVzOiAwLCBQYXN0YTogdGhpcy5wYXN0YSB9KVxyXG4gICAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHQgc2V0IGltYWdlbScsIHJlc3VsdCk7XHJcbiAgICAgICAgICAvLyAgICAgICBpZiAocmVzdWx0LlN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy51dGlscy5zaG93VG9hc3QoJ1N1Y2Vzc28hJyk7XHJcbiAgICAgICAgICAvLyAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnV0aWxzLnNob3dBbGVydCgnRXJyby4gVGVudGUgbWFpcyB0YXJkZS4nICsgcmVzdWx0LkNvbnRldWRvKTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnV0aWxzLnNob3dBbGVydCgnRXJyby4gVGVudGUgbWFpcyB0YXJkZS4nKTtcclxuICAgICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1Y2Vzc29FdmVudC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy91dGlsXHJcbiAgZ2V0QmFzZTY0RnJvbUZpbGUoZmlsZTogRmlsZSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xyXG4gICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPCEtLSBzdHlsZT1cImJveC1zaGFkb3c6ICM0YzhkZmYgMHB4IDNweCAzcHggMC4wNXB4XCIgLS0+XHJcbjxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj5cclxuICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cImJ0bkZpbGxcIiBzaXplPVwibm9ybWFsXCIgW2NvbG9yXT1cImJ0bkNvbG9yXCIgXHJcbiAgICAgIChjbGljayk9XCJzaG93SW1hZ2VCcm93c2VyKClcIiBbZXhwYW5kXT1cImJ0bkV4cGFuZFwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiPlxyXG4gICAgICA8aW9uLWljb24gKm5nSWY9XCJzaG93SWNvblwiIGNsYXNzPVwiaW9uLXBhZGRpbmctZW5kXCIgW3Nsb3RdPVwiaWNvblNsb3RcIiBbc3JjXT1cImljb25TcmNcIiBbbmFtZV09XCJpY29uXCI+PC9pb24taWNvbj5cclxuICAgICAge3sgY2FwdGlvbiB9fVxyXG4gICAgPC9pb24tYnV0dG9uPlxyXG4gICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJ1cGltZ2ZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVwiICNpbnB1dE5vbWUgW2FjY2VwdF09XCJhcnF1aXZvVGlwb3NcIiAoY2hhbmdlKT1cImxvYWRJbWFnZW0oKVwiXHJcbiAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAvPlxyXG4gIDwvZGl2PlxyXG4gICJdfQ==
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } 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 = new EventEmitter();
|
|
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.emit(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" }, outputs: { 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 • {{ 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;--color: var(--ion-color-label, auto) !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{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.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-start{--padding-start: 0px !important}.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 • {{ 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;--color: var(--ion-color-label, auto) !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{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.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-start{--padding-start: 0px !important}.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: Output
|
|
179
|
-
}] } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcHByb2plY3QtY29tcG9uZW50cy9zcmMvbGliL2lucHV0LWNlcC9pbnB1dC1jZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtY2VwL2lucHV0LWNlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBWTNELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFXdkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQVZELFlBQU8sR0FBa0IsV0FBVyxDQUFDO1FBQ3JDLGFBQVEsR0FBb0IsSUFBSSxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3Qyx1QkFBdUI7UUFDaEIsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFhLENBQUMsSUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsWUFBTyxHQUFhLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QixhQUFRLEdBQVksS0FBSyxDQUFDO0lBR2xDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBbUI7UUFDNUIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FB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O2FBQ1osQ0FBQyxpRENiSiw2dURBcUNROzsyRkR0QkssaUJBQWlCO2tCQVY3QixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsbUJBQW1COzRCQUM5QixLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO3dEQUlPLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlSW5wdXRDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1jZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtY2VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtY2VwLmNvbXBvbmVudC5zY3NzJywgJy4vLi4vYmFzZUNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDZXBDb21wb25lbnQsXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKSBmb3JtYXRvOiBzdHJpbmcgfCBudWxsID0gJzAwMDAwLTAwMCc7XG4gIEBJbnB1dCgpIGtleUVudGVyOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgZ2V0UmVzdWx0YWRvcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL2NvbnRyb2wgdmFsdWUgYWNlc3NvclxuICBwdWJsaWMgZGF0YTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBvbkNoYW5nZTogRnVuY3Rpb24gPSAoZGF0YTogc3RyaW5nKSA9PiB7IH07XG4gIHByaXZhdGUgb25Ub3VjaDogRnVuY3Rpb24gPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IGFueSk6IHZvaWQge1xuICAgIC8vY29uc29sZS5sb2coJ3dyaXRlIHZhbHVlJywgdmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBkaWdpdGFyRm9ybWF0YWRvKGV2ZW50OiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKGV2ZW50KTtcbiAgICBpZiAoKGV2ZW50LmtleUNvZGUgPj0gNDggJiYgZXZlbnQua2V5Q29kZSA8PSA1NylcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID49IDk2ICYmIGV2ZW50LmtleUNvZGUgPD0gMTA1KVxuICAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gOClcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID09IDkpXG4gICAgICB8fCAoZXZlbnQua2V5Q29kZSA9PSAzOSlcbiAgICAgIHx8IChldmVudC5rZXlDb2RlID09IDM3KVxuICAgICAgfHwgKGV2ZW50LmtleUNvZGUgPT0gNDYpKSB7XG5cbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5mb3JtQ29udHJvbE5hbWUsIHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpLnZhbHVlKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBbdGhpcy5mb3JtQ29udHJvbE5hbWVdOiB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpPy52YWx1ZSwgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1hdGFDYW1wb1ZhbG9yKHRoaXMuZGF0YSA/PyAnJywgdGhpcy5mb3JtYXRvID8/ICcnLCBldmVudCk7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbktleUVudGVyKCkge1xuICAgIGlmICh0aGlzLmtleUVudGVyICE9IG51bGwpIHtcbiAgICAgIHRoaXMua2V5RW50ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZ2V0UmVzdWx0YWRvcyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucGVzcXVpc2FyQ2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmx1cikge1xuICAgICAgdGhpcy5ibHVyLmVtaXQodGhpcy5ibHVyQXJncyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0YUNhbXBvVmFsb3IodmFsb3I6IHN0cmluZywgTWFzY2FyYTogc3RyaW5nLCBldmVudG86IGFueSkge1xuICAgIC8vY29uc29sZS5sb2codmFsb3IpO1xuICAgIGlmICghdmFsb3IpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICAvL2NvbnNvbGUubG9nKGV2ZW50byk7XG5cbiAgICAvL2lmICghdGhpcy5rZXlwcmVzc0ludGVpcm8oZXZlbnRvKSlcbiAgICAvLyAgcmV0dXJuO1xuXG4gICAgdmFyIGJvbGVhbm9NYXNjYXJhO1xuXG4gICAgdmFyIERpZ2l0YXRvID0gZXZlbnRvICE9IG51bGwgPyBldmVudG8ua2V5Q29kZSA6IDA7XG4gICAgbGV0IGV4cCA9IC9cXC18XFwufFxcL3xcXCh8XFwpfCAvZ1xuICAgIGxldCBjYW1wb1NvTnVtZXJvcyA9IHZhbG9yLnJlcGxhY2UoZXhwLCBcIlwiKTtcblxuICAgIHZhciBwb3NpY2FvQ2FtcG8gPSAwO1xuICAgIHZhciBOb3ZvVmFsb3JDYW1wbyA9IFwiXCI7XG4gICAgdmFyIFRhbWFuaG9NYXNjYXJhID0gY2FtcG9Tb051bWVyb3MubGVuZ3RoOztcblxuICAgIGlmIChEaWdpdGF0byAhPSA4KSB7IC8vIGJhY2tzcGFjZSBcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IFRhbWFuaG9NYXNjYXJhOyBpKyspIHtcbiAgICAgICAgYm9sZWFub01hc2NhcmEgPSAoKE1hc2NhcmEuY2hhckF0KGkpID09IFwiLVwiKSB8fCAoTWFzY2FyYS5jaGFyQXQoaSkgPT0gXCIuXCIpXG4gICAgICAgICAgfHwgKE1hc2NhcmEuY2hhckF0KGkpID09IFwiL1wiKSlcbiAgICAgICAgYm9sZWFub01hc2NhcmEgPSBib2xlYW5vTWFzY2FyYSB8fCAoKE1hc2NhcmEuY2hhckF0KGkpID09IFwiKFwiKVxuICAgICAgICAgIHx8IChNYXNjYXJhLmNoYXJBdChpKSA9PSBcIilcIikgfHwgKE1hc2NhcmEuY2hhckF0KGkpID09IFwiIFwiKSlcbiAgICAgICAgaWYgKGJvbGVhbm9NYXNjYXJhKSB7XG4gICAgICAgICAgTm92b1ZhbG9yQ2FtcG8gKz0gTWFzY2FyYS5jaGFyQXQoaSk7XG4gICAgICAgICAgVGFtYW5ob01hc2NhcmErKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBOb3ZvVmFsb3JDYW1wbyArPSBjYW1wb1NvTnVtZXJvcy5jaGFyQXQocG9zaWNhb0NhbXBvKTtcbiAgICAgICAgICBwb3NpY2FvQ2FtcG8rKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE5vdm9WYWxvckNhbXBvO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsb3I7XG4gICAgfVxuICB9XG5cbiAgcGVzcXVpc2FyQ2xpY2soKSB7XG4gICAgY29uc3QgY2VwID0gdGhpcy5kYXRhO1xuICAgIC8vc2UgbsOjbyBlc3RpdmVyIGluZm9ybWFkbyBvIGNlcCwgbsOjbyBmYXplciBhIHBlc3F1aXNhXG4gICAgaWYgKGNlcCA9PSBudWxsIHx8IGNlcCA9PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nZXRFbmRlcmVjb1BlbG9DZXAoY2VwKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXN1bHQgQ0VQJywgcmVzdWx0KTtcblxuICAgICAgICBsZXQgY2lkYWRlUGVzcXVpc2E6IHN0cmluZyA9IHJlc3VsdC5sb2NhbGlkYWRlO1xuICAgICAgICBjaWRhZGVQZXNxdWlzYSA9IHRoaXMuY29udmVydGVDYXJhY3RlcmVzRXNwZWNpYWlzKGNpZGFkZVBlc3F1aXNhLnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmdldFJlc3VsdGFkb3MpIHtcbiAgICAgICAgICB0aGlzLmdldFJlc3VsdGFkb3MuZW1pdChyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy9zdWJzdGl0dWnDp8OjbyBkZSBjYXJhY3RlcmVzXG4gIGNvbnZlcnRlQ2FyYWN0ZXJlc0VzcGVjaWFpcyhub21lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBub21lLnJlcGxhY2UoL8ODL2csIFwiQVwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw4EvZywgXCJBXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/Dhy9nLCBcIkNcIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoL8OJL2csIFwiRVwiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw4IvZywgXCJBXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/DlC9nLCBcIk9cIik7XG4gICAgcmVzID0gcmVzLnJlcGxhY2UoL8OTL2csIFwiT1wiKTtcbiAgICByZXMgPSByZXMucmVwbGFjZSgvw5ovZywgXCJVXCIpO1xuICAgIHJlcyA9IHJlcy5yZXBsYWNlKC/DjS9nLCBcIklcIik7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGdldEVuZGVyZWNvUGVsb0NlcChjZXA6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKCh4KSA9PiB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgcmVxdWVzdC5vcGVuKCdnZXQnLCBgaHR0cHM6Ly92aWFjZXAuY29tLmJyL3dzLyR7Y2VwfS9qc29uL2AsIHRydWUpO1xuICAgICAgcmVxdWVzdC5zZW5kKCk7XG4gICAgICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICB4Lm5leHQoZGF0YSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCI8IS0tXHJcbjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbi0tPlxyXG48IS0tY29tYW5kbyAtLWlubmVyLXBhZGRpbmctZW5kOiB1dGlsaXphZG8gcHJhIHJlbW92ZXIgcGFkZGluZyBkZXNuZWNlc3PDoXJpb3MtLT5cclxuPGRpdj5cclxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBzdHlsZT1cIi0tYmFja2dyb3VuZDogaW5oZXJpdGVkOy0tYmFja2dyb3VuZC1mb2N1c2VkOiB0cmFuc3BhcmVudDstLWlubmVyLXBhZGRpbmctZW5kOiAwcHg7XCIgW2NsYXNzXT1cIml0ZW1DbGFzc1wiXHJcbiAgICBbbmdDbGFzc109XCJmb3JtPy5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZXJyb3JzICYmIChmb3JtPy5nZXQoZm9ybUNvbnRyb2xOYW1lKT8uZGlydHkgfHwgZm9ybT8uZ2V0KGZvcm1Db250cm9sTmFtZSk/LnRvdWNoZWQpID8gJ2Vycm9yLXNoYWtlJyA6ICcnIFwiXHJcbiAgICA+XHJcbiAgICAgIDxpb24tbGFiZWwgW3Bvc2l0aW9uXT1cImxhYmVsUG9zaXRpb25cIj57eyBsYWJlbCB9fTwvaW9uLWxhYmVsPlxyXG4gICAgICA8IS0tIGZvcm1Db250cm9sTmFtZT17e2Zvcm1Db250cm9sTmFtZX19IC0tPlxyXG4gICAgICA8aW9uLWlucHV0ICNpbnB1dENlcFxyXG4gICAgICB0eXBlPVwidGVsXCIgXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgIG1heGxlbmd0aD1cInt7IG1heCB9fVwiIFxyXG4gICAgICAoa2V5ZG93bik9XCJkaWdpdGFyRm9ybWF0YWRvKCRldmVudClcIiBcclxuICAgICAgKGtleXVwLmVudGVyKT1cIm9uS2V5RW50ZXIoKVwiXHJcbiAgICAgIChpb25CbHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgW3ZhbHVlXT1cImRhdGFcIlxyXG4gICAgICAoaW5wdXQpPVwid3JpdGVWYWx1ZShpbnB1dENlcC52YWx1ZSlcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIj48L2lvbi1pbnB1dD5cclxuXHJcbiAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIHNsb3Q9XCJlbmRcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDI1cHg7IG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDRweCAhaW1wb3J0YW50OyAtLXBhZGRpbmctc3RhcnQ6MnB4OyAtLXBhZGRpbmctZW5kOiAycHg7XCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJtZWRpdW1cIlxyXG4gICAgICAgIChjbGljayk9XCJwZXNxdWlzYXJDbGljaygpXCI+XHJcbiAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgXHJcbiAgICA8L2lvbi1pdGVtPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JzXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbl9tZXNzYWdlc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcclxuICAgICAgICAgICpuZ0lmPVwiZm9ybSAmJiBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5oYXNFcnJvcih2YWxpZGF0aW9uLnR5cGUpICYmIChmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5kaXJ0eSB8fCBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgJiM4MjI2OyB7eyB2YWxpZGF0aW9uLm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4iXX0=
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Component, Input } 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 "@ionic/angular";
|
|
6
|
-
export class InputCheckboxComponent extends BaseInputComponent {
|
|
7
|
-
writeValue(value) {
|
|
8
|
-
console.log('write value', value);
|
|
9
|
-
this.onChange(value);
|
|
10
|
-
this.data = value;
|
|
11
|
-
}
|
|
12
|
-
registerOnChange(fn) {
|
|
13
|
-
this.onChange = fn;
|
|
14
|
-
}
|
|
15
|
-
registerOnTouched(fn) {
|
|
16
|
-
this.onTouch = fn;
|
|
17
|
-
}
|
|
18
|
-
setDisabledState(isDisabled) {
|
|
19
|
-
this.disabled = this.disabled;
|
|
20
|
-
}
|
|
21
|
-
constructor() {
|
|
22
|
-
super();
|
|
23
|
-
this.justify = "start";
|
|
24
|
-
this.labelPlacement = "end";
|
|
25
|
-
this.onChange = (data) => { };
|
|
26
|
-
this.onTouch = () => { };
|
|
27
|
-
this.disabled = false;
|
|
28
|
-
this.console = console;
|
|
29
|
-
}
|
|
30
|
-
ngOnInit() {
|
|
31
|
-
}
|
|
32
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputCheckboxComponent, selector: "kb-input-checkbox", inputs: { justify: "justify", labelPlacement: "labelPlacement" }, providers: [{
|
|
34
|
-
provide: NG_VALUE_ACCESSOR,
|
|
35
|
-
useExisting: InputCheckboxComponent,
|
|
36
|
-
multi: true
|
|
37
|
-
}], usesInheritance: true, ngImport: i0, template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n [color]=\"labelColor ?? 'primary'\" \n (ionChange)=\"writeValue(inputCheck.checked)\">\n <span [style.color]=\"labelColor ?? 'auto'\">{{ label }}</span> \n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}ion-checkbox.checkbox-disabled{opacity:var(--item-disabled-opacity, .6)!important}span{color:var(--checkbox-text-color, \"inherit\")!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !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{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.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-start{--padding-start: 0px !important}.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: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }] }); }
|
|
38
|
-
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputCheckboxComponent, decorators: [{
|
|
40
|
-
type: Component,
|
|
41
|
-
args: [{ selector: 'kb-input-checkbox', providers: [{
|
|
42
|
-
provide: NG_VALUE_ACCESSOR,
|
|
43
|
-
useExisting: InputCheckboxComponent,
|
|
44
|
-
multi: true
|
|
45
|
-
}], template: "<div>\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; padding-right: 0px;\" [class]=\"itemClass\">\n <ion-checkbox #inputCheck\n [labelPlacement]=\"labelPlacement\" [justify]=\"justify\" \n [disabled]=\"readonly\"\n [checked]=\"data\"\n [color]=\"labelColor ?? 'primary'\" \n (ionChange)=\"writeValue(inputCheck.checked)\">\n <span [style.color]=\"labelColor ?? 'auto'\">{{ label }}</span> \n </ion-checkbox>\n </ion-item>\n</div>", styles: ["ion-item{--min-height: var(--checkbox-min-height, 48px) !important}ion-checkbox.checkbox-disabled{opacity:var(--item-disabled-opacity, .6)!important}span{color:var(--checkbox-text-color, \"inherit\")!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !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{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.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-start{--padding-start: 0px !important}.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"] }]
|
|
46
|
-
}], ctorParameters: () => [], propDecorators: { justify: [{
|
|
47
|
-
type: Input
|
|
48
|
-
}], labelPlacement: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}] } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtY2hlY2tib3gvaW5wdXQtY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtY2hlY2tib3gvaW5wdXQtY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFZM0QsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVc1RCxVQUFVLENBQUMsS0FBVztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUF4QkQsWUFBTyxHQUFXLE9BQU8sQ0FBQztRQUMxQixtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUdoQyxhQUFRLEdBQWEsQ0FBQyxJQUFZLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQyxZQUFPLEdBQWEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDM0IsWUFBTyxHQUFHLE9BQU8sQ0FBQztJQWtCekIsQ0FBQztJQUlRLFFBQVE7SUFDakIsQ0FBQzs4R0FoQ1Usc0JBQXNCO2tHQUF0QixzQkFBc0IsOEdBTnRCLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLGlEQ1pKLGdrQkFXTTs7MkZER08sc0JBQXNCO2tCQVZsQyxTQUFTOytCQUNFLG1CQUFtQixhQUdsQixDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsd0JBQXdCOzRCQUNuQyxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDO3dEQUlPLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlSW5wdXRDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LWNoZWNrYm94LmNvbXBvbmVudC5zY3NzJywgJy4vLi4vYmFzZUNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogSW5wdXRDaGVja2JveENvbXBvbmVudCxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgQElucHV0KCkganVzdGlmeTogc3RyaW5nID0gXCJzdGFydFwiO1xuICBASW5wdXQoKSBsYWJlbFBsYWNlbWVudDogc3RyaW5nID0gXCJlbmRcIjtcbiAgLy9jb250cm9sIHZhbHVlIGFjZXNzb3JcbiAgcHVibGljIGRhdGEhOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChkYXRhOiBzdHJpbmcpID0+IHsgfTtcbiAgcHJpdmF0ZSBvblRvdWNoOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcbiAgcHJpdmF0ZSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29uc29sZSA9IGNvbnNvbGU7XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCd3cml0ZSB2YWx1ZScsIHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgXG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXY+XG4gICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIHN0eWxlPVwiLS1iYWNrZ3JvdW5kOiBpbmhlcml0ZWQ7IC0tYmFja2dyb3VuZC1mb2N1c2VkOiB0cmFuc3BhcmVudDsgcGFkZGluZy1yaWdodDogMHB4O1wiIFtjbGFzc109XCJpdGVtQ2xhc3NcIj5cbiAgICAgICAgPGlvbi1jaGVja2JveCAjaW5wdXRDaGVja1xuICAgICAgICAgICAgW2xhYmVsUGxhY2VtZW50XT1cImxhYmVsUGxhY2VtZW50XCIgW2p1c3RpZnldPVwianVzdGlmeVwiIFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImRhdGFcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImxhYmVsQ29sb3IgPz8gJ3ByaW1hcnknXCIgICAgICAgICAgICBcbiAgICAgICAgICAgIChpb25DaGFuZ2UpPVwid3JpdGVWYWx1ZShpbnB1dENoZWNrLmNoZWNrZWQpXCI+XG4gICAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwibGFiZWxDb2xvciA/PyAnYXV0bydcIj57eyBsYWJlbCB9fTwvc3Bhbj4gXG4gICAgICAgIDwvaW9uLWNoZWNrYm94PlxuICAgIDwvaW9uLWl0ZW0+XG48L2Rpdj4iXX0=
|