@dev-tcloud/tcloud-ui 0.1.4 → 0.1.6
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/README.md +2 -0
- package/esm2020/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.mjs +2 -2
- package/esm2020/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.component.mjs +133 -0
- package/esm2020/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.module.mjs +31 -0
- package/esm2020/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.mjs +3 -3
- package/esm2020/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.mjs +3 -3
- package/esm2020/lib/tcloud-ui.module.mjs +8 -1
- package/esm2020/public-api.mjs +4 -1
- package/fesm2015/dev-tcloud-tcloud-ui.mjs +225 -65
- package/fesm2015/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/fesm2020/dev-tcloud-tcloud-ui.mjs +225 -65
- package/fesm2020/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.d.ts +0 -1
- package/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.component.d.ts +33 -0
- package/lib/_modules/tcloud-ui-input-password/tcloud-ui-input-password.module.d.ts +9 -0
- package/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.d.ts +1 -1
- package/lib/tcloud-ui.module.d.ts +4 -3
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
|
|
7
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8
|
+
useExisting: forwardRef(() => TCloudUiInputPasswordComponent),
|
|
9
|
+
multi: true
|
|
10
|
+
};
|
|
11
|
+
const noop = () => {
|
|
12
|
+
};
|
|
13
|
+
export class TCloudUiInputPasswordComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.numberOfCharacter = 14;
|
|
16
|
+
this.atLeastOneUppercaseLetter = true;
|
|
17
|
+
this.atLeastOneLowercaseLetter = true;
|
|
18
|
+
this.atLeastOneSpecialCharacter = true;
|
|
19
|
+
this.innerValue = '';
|
|
20
|
+
this.ngModelChange = new EventEmitter();
|
|
21
|
+
this.mode = 'password';
|
|
22
|
+
this.isCopy = false;
|
|
23
|
+
//Placeholders for the callbacks which are later providesd
|
|
24
|
+
//by the Control Value Accessor
|
|
25
|
+
this.onTouchedCallback = noop;
|
|
26
|
+
this.onChangeCallback = noop;
|
|
27
|
+
}
|
|
28
|
+
set ngModel(v) {
|
|
29
|
+
this.innerValue = v;
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
this.passwordRegex = this.getRegexValidation();
|
|
33
|
+
}
|
|
34
|
+
toggleMode() {
|
|
35
|
+
if (this.mode === 'password') {
|
|
36
|
+
this.mode = 'text';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.mode = 'password';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
copyText() {
|
|
43
|
+
this.isCopy = true;
|
|
44
|
+
navigator.clipboard.writeText(this.innerValue);
|
|
45
|
+
setTimeout(() => { this.isCopy = false; }, 3000);
|
|
46
|
+
}
|
|
47
|
+
generatePassword() {
|
|
48
|
+
this.innerValue = this.createNewPass();
|
|
49
|
+
}
|
|
50
|
+
createNewPass() {
|
|
51
|
+
const uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
52
|
+
const lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz';
|
|
53
|
+
const numbers = '0123456789';
|
|
54
|
+
const specialCharacters = '!@#$%^&*()_+{}[]:;<>,.?/~';
|
|
55
|
+
const allCharacters = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
|
|
56
|
+
const getRandomCharacter = (characters) => {
|
|
57
|
+
const randomIndex = Math.floor(Math.random() * characters.length);
|
|
58
|
+
return characters[randomIndex];
|
|
59
|
+
};
|
|
60
|
+
let password = '';
|
|
61
|
+
password += getRandomCharacter(uppercaseLetters);
|
|
62
|
+
password += getRandomCharacter(numbers);
|
|
63
|
+
password += getRandomCharacter(specialCharacters);
|
|
64
|
+
const remainingLength = this.numberOfCharacter - password.length;
|
|
65
|
+
for (let i = 0; i < remainingLength; i++) {
|
|
66
|
+
password += getRandomCharacter(allCharacters);
|
|
67
|
+
}
|
|
68
|
+
password = password.split('').sort(() => Math.random() - 0.5).join('');
|
|
69
|
+
return password;
|
|
70
|
+
}
|
|
71
|
+
getRegexValidation() {
|
|
72
|
+
/*
|
|
73
|
+
(?=.*[A-Z]): Pelo menos uma letra maiúscula.
|
|
74
|
+
(?=.*[0-9]): Pelo menos um número.
|
|
75
|
+
(?=.*[!@#$%^&*()_+{}[\]:;<>,.?\/~]): Pelo menos um caractere especial.
|
|
76
|
+
(?!.*\s): Não contém espaços em branco.
|
|
77
|
+
.{14,}: Pelo menos 14 caracteres no total.
|
|
78
|
+
*/
|
|
79
|
+
const maiusculas = (this.atLeastOneUppercaseLetter) ? `(?=.*[A-Z])` : '';
|
|
80
|
+
const minusculas = (this.atLeastOneLowercaseLetter) ? `(?=.*[a-z])` : '';
|
|
81
|
+
const especiais = (this.atLeastOneSpecialCharacter) ? `(?=.*[!@#$%^&*\\(\\)_+\\{\\}\\[\\]:;<>,.?\\/~])(?!.*\\s)` : '';
|
|
82
|
+
return `^${maiusculas}${minusculas}${especiais}.{${this.numberOfCharacter},}$`;
|
|
83
|
+
}
|
|
84
|
+
//get accessor
|
|
85
|
+
get value() {
|
|
86
|
+
return this.innerValue;
|
|
87
|
+
}
|
|
88
|
+
;
|
|
89
|
+
//set accessor including call the onchange callback
|
|
90
|
+
set value(v) {
|
|
91
|
+
if (v !== this.innerValue) {
|
|
92
|
+
this.innerValue = v;
|
|
93
|
+
this.onChangeCallback(v);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//Set touched on blur
|
|
97
|
+
onBlur() {
|
|
98
|
+
this.onTouchedCallback();
|
|
99
|
+
}
|
|
100
|
+
//From ControlValueAccessor interface
|
|
101
|
+
writeValue(value) {
|
|
102
|
+
if (value !== this.innerValue) {
|
|
103
|
+
this.innerValue = value;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//From ControlValueAccessor interface
|
|
107
|
+
registerOnChange(fn) {
|
|
108
|
+
this.onChangeCallback = fn;
|
|
109
|
+
}
|
|
110
|
+
//From ControlValueAccessor interface
|
|
111
|
+
registerOnTouched(fn) {
|
|
112
|
+
this.onTouchedCallback = fn;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
TCloudUiInputPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
+
TCloudUiInputPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiInputPasswordComponent, selector: "tcloud-ui-input-password", inputs: { numberOfCharacter: "numberOfCharacter", atLeastOneUppercaseLetter: "atLeastOneUppercaseLetter", atLeastOneLowercaseLetter: "atLeastOneLowercaseLetter", atLeastOneSpecialCharacter: "atLeastOneSpecialCharacter", ngModel: "ngModel" }, outputs: { ngModelChange: "ngModelChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<div class=\"tcloud-ui-input-password\">\r\n <table>\r\n <tr>\r\n <!-- input password -->\r\n <td>\r\n <form #_form=\"ngForm\">\r\n <ng-container *ngIf=\"passwordRegex\">\r\n <input *ngIf=\"mode == 'password'\" type=\"password\" name=\"tc_password\" [pattern]=\"passwordRegex\" autoComplete=\"new-password\" [(ngModel)]=\"innerValue\" required>\r\n <input *ngIf=\"mode == 'text'\" type=\"text\" name=\"tc_text\" [pattern]=\"passwordRegex\" [(ngModel)]=\"innerValue\" required>\r\n </ng-container>\r\n </form>\r\n </td>\r\n\r\n <!-- action show hide -->\r\n <td>\r\n <button type=\"button\" (click)=\"toggleMode()\" [title]=\"(mode == 'password') ? 'Visualizar Senha' : 'Esconder Senha'\">\r\n <i *ngIf=\"mode == 'password'\" class=\"far fa-eye-slash\"></i>\r\n <i *ngIf=\"mode == 'text'\" class=\"far fa-eye\"></i> \r\n </button>\r\n </td>\r\n\r\n <!-- action generate pass -->\r\n <td>\r\n <button type=\"button\" [title]=\"'Gerar Senha'\" (click)=\"generatePassword()\">\r\n <i class=\"fa-solid fa-key\"></i>\r\n </button>\r\n </td>\r\n\r\n <!-- action copy pass -->\r\n <td>\r\n <button type=\"button\" [title]=\"'Copiar Senha'\" (click)=\"copyText()\">\r\n <i *ngIf=\"!isCopy\" class=\"fa-regular fa-copy\"></i>\r\n <i *ngIf=\"isCopy\" class=\"fa-solid fa-check\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".tcloud-ui-input-password{border:1px solid var(--tc-gray-300);border-radius:3px}.tcloud-ui-input-password table{width:100%}.tcloud-ui-input-password table td:first-child{width:100%!important}.tcloud-ui-input-password table td:first-child input{width:100%;border:none;height:38px;padding-left:8px}.tcloud-ui-input-password table td{width:50px;height:40px}.tcloud-ui-input-password table td button{background:transparent;border:none;margin-right:3px;cursor:pointer;color:var(--tc-gray-500)}.tcloud-ui-input-password table td button:hover{color:var(--tc-primary2)}.tcloud-ui-input-password .ng-invalid.ng-touched{border:1px solid var(--red)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordComponent, decorators: [{
|
|
118
|
+
type: Component,
|
|
119
|
+
args: [{ selector: 'tcloud-ui-input-password', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], template: "<div class=\"tcloud-ui-input-password\">\r\n <table>\r\n <tr>\r\n <!-- input password -->\r\n <td>\r\n <form #_form=\"ngForm\">\r\n <ng-container *ngIf=\"passwordRegex\">\r\n <input *ngIf=\"mode == 'password'\" type=\"password\" name=\"tc_password\" [pattern]=\"passwordRegex\" autoComplete=\"new-password\" [(ngModel)]=\"innerValue\" required>\r\n <input *ngIf=\"mode == 'text'\" type=\"text\" name=\"tc_text\" [pattern]=\"passwordRegex\" [(ngModel)]=\"innerValue\" required>\r\n </ng-container>\r\n </form>\r\n </td>\r\n\r\n <!-- action show hide -->\r\n <td>\r\n <button type=\"button\" (click)=\"toggleMode()\" [title]=\"(mode == 'password') ? 'Visualizar Senha' : 'Esconder Senha'\">\r\n <i *ngIf=\"mode == 'password'\" class=\"far fa-eye-slash\"></i>\r\n <i *ngIf=\"mode == 'text'\" class=\"far fa-eye\"></i> \r\n </button>\r\n </td>\r\n\r\n <!-- action generate pass -->\r\n <td>\r\n <button type=\"button\" [title]=\"'Gerar Senha'\" (click)=\"generatePassword()\">\r\n <i class=\"fa-solid fa-key\"></i>\r\n </button>\r\n </td>\r\n\r\n <!-- action copy pass -->\r\n <td>\r\n <button type=\"button\" [title]=\"'Copiar Senha'\" (click)=\"copyText()\">\r\n <i *ngIf=\"!isCopy\" class=\"fa-regular fa-copy\"></i>\r\n <i *ngIf=\"isCopy\" class=\"fa-solid fa-check\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".tcloud-ui-input-password{border:1px solid var(--tc-gray-300);border-radius:3px}.tcloud-ui-input-password table{width:100%}.tcloud-ui-input-password table td:first-child{width:100%!important}.tcloud-ui-input-password table td:first-child input{width:100%;border:none;height:38px;padding-left:8px}.tcloud-ui-input-password table td{width:50px;height:40px}.tcloud-ui-input-password table td button{background:transparent;border:none;margin-right:3px;cursor:pointer;color:var(--tc-gray-500)}.tcloud-ui-input-password table td button:hover{color:var(--tc-primary2)}.tcloud-ui-input-password .ng-invalid.ng-touched{border:1px solid var(--red)!important}\n"] }]
|
|
120
|
+
}], ctorParameters: function () { return []; }, propDecorators: { numberOfCharacter: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], atLeastOneUppercaseLetter: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], atLeastOneLowercaseLetter: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], atLeastOneSpecialCharacter: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], ngModel: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], ngModelChange: [{
|
|
131
|
+
type: Output
|
|
132
|
+
}] } });
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWlucHV0LXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RjbG91ZC11aS9zcmMvbGliL19tb2R1bGVzL3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZC90Y2xvdWQtdWktaW5wdXQtcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWlucHV0LXBhc3N3b3JkL3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUVuRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBUTtJQUN0RCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsOEJBQThCLENBQUM7SUFDN0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ2xCLENBQUMsQ0FBQztBQVFGLE1BQU0sT0FBTyw4QkFBOEI7SUFxQnZDO1FBbkJTLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUUvQiw4QkFBeUIsR0FBWSxJQUFJLENBQUM7UUFDMUMsOEJBQXlCLEdBQVksSUFBSSxDQUFDO1FBQzFDLCtCQUEwQixHQUFZLElBQUksQ0FBQztRQUdwRCxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBTWQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWxELFNBQUksR0FBVyxVQUFVLENBQUM7UUFDMUIs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QUFTOytCQUNFLDBCQUEwQixhQUd6QixDQUFFLG1DQUFtQyxDQUFFOzBFQUl2QyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBTU8sT0FBTztzQkFBbkIsS0FBSztnQkFHSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBjb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpSW5wdXRQYXNzd29yZENvbXBvbmVudCksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGNsb3VkLXVpLWlucHV0LXBhc3N3b3JkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbIENVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUQ2xvdWRVaUlucHV0UGFzc3dvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBJbnB1dCgpIG51bWJlck9mQ2hhcmFjdGVyOiBudW1iZXIgPSAxNDtcclxuXHJcbiAgICBASW5wdXQoKSBhdExlYXN0T25lVXBwZXJjYXNlTGV0dGVyOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGF0TGVhc3RPbmVMb3dlcmNhc2VMZXR0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYXRMZWFzdE9uZVNwZWNpYWxDaGFyYWN0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBcclxuICAgIGlubmVyVmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHByaXZhdGUgX25nTW9kZWw6IGFueSB8IHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHNldCBuZ01vZGVsKHY6IGFueSl7XHJcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgICAgICBcclxuICAgIH1cclxuICAgIEBPdXRwdXQoKSBuZ01vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgbW9kZTogc3RyaW5nID0gJ3Bhc3N3b3JkJztcclxuICAgIGlzQ29weTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcGFzc3dvcmRSZWdleDogYW55IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZFJlZ2V4ID0gdGhpcy5nZXRSZWdleFZhbGlkYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVNb2RlKCl7XHJcbiAgICAgICAgaWYoIHRoaXMubW9kZSA9PT0gJ3Bhc3N3b3JkJyApe1xyXG4gICAgICAgICAgICB0aGlzLm1vZGUgPSAndGV4dCc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZSA9ICdwYXNzd29yZCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlUZXh0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNDb3B5ID0gdHJ1ZTtcclxuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmlubmVyVmFsdWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmlzQ29weSA9IGZhbHNlOyB9LCAzMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZVBhc3N3b3JkKCl7XHJcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdGhpcy5jcmVhdGVOZXdQYXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVOZXdQYXNzKCkge1xyXG4gICAgICAgIGNvbnN0IHVwcGVyY2FzZUxldHRlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xyXG4gICAgICAgIGNvbnN0IGxvd2VyY2FzZUxldHRlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xyXG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSAnMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgY29uc3Qgc3BlY2lhbENoYXJhY3RlcnMgPSAnIUAjJCVeJiooKV8re31bXTo7PD4sLj8vfic7XHJcbiAgICBcclxuICAgICAgICBjb25zdCBhbGxDaGFyYWN0ZXJzID0gdXBwZXJjYXNlTGV0dGVycyArIGxvd2VyY2FzZUxldHRlcnMgKyBudW1iZXJzICsgc3BlY2lhbENoYXJhY3RlcnM7XHJcbiAgICBcclxuICAgICAgICBjb25zdCBnZXRSYW5kb21DaGFyYWN0ZXIgPSAoY2hhcmFjdGVyczogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNbcmFuZG9tSW5kZXhdO1xyXG4gICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICBsZXQgcGFzc3dvcmQgPSAnJztcclxuICAgICAgICBwYXNzd29yZCArPSBnZXRSYW5kb21DaGFyYWN0ZXIodXBwZXJjYXNlTGV0dGVycyk7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gZ2V0UmFuZG9tQ2hhcmFjdGVyKG51bWJlcnMpO1xyXG4gICAgICAgIHBhc3N3b3JkICs9IGdldFJhbmRvbUNoYXJhY3RlcihzcGVjaWFsQ2hhcmFjdGVycyk7XHJcbiAgICBcclxuICAgICAgICBjb25zdCByZW1haW5pbmdMZW5ndGggPSB0aGlzLm51bWJlck9mQ2hhcmFjdGVyIC0gcGFzc3dvcmQubGVuZ3RoOyAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW1haW5pbmdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHBhc3N3b3JkICs9IGdldFJhbmRvbUNoYXJhY3RlcihhbGxDaGFyYWN0ZXJzKTtcclxuICAgICAgICB9ICBcclxuICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnNwbGl0KCcnKS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpLmpvaW4oJycpOyAgXHJcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gICAgfVxyXG4gIFxyXG5cclxuICAgIGdldFJlZ2V4VmFsaWRhdGlvbigpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICg/PS4qW0EtWl0pOiBQZWxvIG1lbm9zIHVtYSBsZXRyYSBtYWnDunNjdWxhLlxyXG4gICAgICAgICg/PS4qWzAtOV0pOiBQZWxvIG1lbm9zIHVtIG7Dum1lcm8uXHJcbiAgICAgICAgKD89LipbIUAjJCVeJiooKV8re31bXFxdOjs8PiwuP1xcL35dKTogUGVsbyBtZW5vcyB1bSBjYXJhY3RlcmUgZXNwZWNpYWwuXHJcbiAgICAgICAgKD8hLipcXHMpOiBOw6NvIGNvbnTDqW0gZXNwYcOnb3MgZW0gYnJhbmNvLlxyXG4gICAgICAgIC57MTQsfTogUGVsbyBtZW5vcyAxNCBjYXJhY3RlcmVzIG5vIHRvdGFsLlxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGNvbnN0IG1haXVzY3VsYXMgPSAodGhpcy5hdExlYXN0T25lVXBwZXJjYXNlTGV0dGVyKSA/IGAoPz0uKltBLVpdKWAgOiAnJztcclxuICAgICAgICBjb25zdCBtaW51c2N1bGFzID0gKHRoaXMuYXRMZWFzdE9uZUxvd2VyY2FzZUxldHRlcikgPyBgKD89LipbYS16XSlgIDogJyc7XHJcbiAgICAgICAgY29uc3QgZXNwZWNpYWlzICA9ICh0aGlzLmF0TGVhc3RPbmVTcGVjaWFsQ2hhcmFjdGVyKSA/IGAoPz0uKlshQCMkJV4mKlxcXFwoXFxcXClfK1xcXFx7XFxcXH1cXFxcW1xcXFxdOjs8PiwuP1xcXFwvfl0pKD8hLipcXFxccylgOiAnJztcclxuXHJcbiAgICAgICAgcmV0dXJuIGBeJHttYWl1c2N1bGFzfSR7bWludXNjdWxhc30ke2VzcGVjaWFpc30ueyR7dGhpcy5udW1iZXJPZkNoYXJhY3Rlcn0sfSRgO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgXHJcbiAgLy9QbGFjZWhvbGRlcnMgZm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggYXJlIGxhdGVyIHByb3ZpZGVzZFxyXG4gICAgLy9ieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxyXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xyXG5cclxuICAgIC8vZ2V0IGFjY2Vzc29yXHJcbiAgICBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL3NldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcclxuICAgIHNldCB2YWx1ZSh2OiBhbnkpIHtcclxuICAgICAgICBpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9TZXQgdG91Y2hlZCBvbiBibHVyXHJcbiAgICBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0Y2xvdWQtdWktaW5wdXQtcGFzc3dvcmRcIj5cclxuICAgIDx0YWJsZT5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDwhLS0gaW5wdXQgcGFzc3dvcmQgLS0+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxmb3JtICNfZm9ybT1cIm5nRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXNzd29yZFJlZ2V4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIm1vZGUgPT0gJ3Bhc3N3b3JkJ1wiIHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJ0Y19wYXNzd29yZFwiIFtwYXR0ZXJuXT1cInBhc3N3b3JkUmVnZXhcIiBhdXRvQ29tcGxldGU9XCJuZXctcGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cImlubmVyVmFsdWVcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwibW9kZSA9PSAndGV4dCdcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0Y190ZXh0XCIgW3BhdHRlcm5dPVwicGFzc3dvcmRSZWdleFwiIFsobmdNb2RlbCldPVwiaW5uZXJWYWx1ZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBhY3Rpb24gc2hvdyBoaWRlIC0tPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgpXCIgW3RpdGxlXT1cIihtb2RlID09ICdwYXNzd29yZCcpID8gJ1Zpc3VhbGl6YXIgU2VuaGEnIDogJ0VzY29uZGVyIFNlbmhhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibW9kZSA9PSAncGFzc3dvcmQnXCIgY2xhc3M9XCJmYXIgZmEtZXllLXNsYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibW9kZSA9PSAndGV4dCdcIiBjbGFzcz1cImZhciBmYS1leWVcIj48L2k+IFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGFjdGlvbiBnZW5lcmF0ZSBwYXNzIC0tPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbdGl0bGVdPVwiJ0dlcmFyIFNlbmhhJ1wiIChjbGljayk9XCJnZW5lcmF0ZVBhc3N3b3JkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWtleVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBhY3Rpb24gY29weSBwYXNzIC0tPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbdGl0bGVdPVwiJ0NvcGlhciBTZW5oYSdcIiAoY2xpY2spPVwiY29weVRleHQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWlzQ29weVwiIGNsYXNzPVwiZmEtcmVndWxhciBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXNDb3B5XCIgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { TCloudUiInputPasswordComponent } from './tcloud-ui-input-password.component';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class TCloudUiInputPasswordModule {
|
|
7
|
+
}
|
|
8
|
+
TCloudUiInputPasswordModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
TCloudUiInputPasswordModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordModule, declarations: [TCloudUiInputPasswordComponent], imports: [CommonModule,
|
|
10
|
+
FormsModule,
|
|
11
|
+
ReactiveFormsModule], exports: [TCloudUiInputPasswordComponent] });
|
|
12
|
+
TCloudUiInputPasswordModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordModule, imports: [CommonModule,
|
|
13
|
+
FormsModule,
|
|
14
|
+
ReactiveFormsModule] });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputPasswordModule, decorators: [{
|
|
16
|
+
type: NgModule,
|
|
17
|
+
args: [{
|
|
18
|
+
declarations: [
|
|
19
|
+
TCloudUiInputPasswordComponent
|
|
20
|
+
],
|
|
21
|
+
imports: [
|
|
22
|
+
CommonModule,
|
|
23
|
+
FormsModule,
|
|
24
|
+
ReactiveFormsModule
|
|
25
|
+
],
|
|
26
|
+
exports: [
|
|
27
|
+
TCloudUiInputPasswordComponent
|
|
28
|
+
]
|
|
29
|
+
}]
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWlucHV0LXBhc3N3b3JkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RjbG91ZC11aS9zcmMvbGliL19tb2R1bGVzL3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZC90Y2xvdWQtdWktaW5wdXQtcGFzc3dvcmQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFpQmxFLE1BQU0sT0FBTywyQkFBMkI7O3lIQUEzQiwyQkFBMkI7MEhBQTNCLDJCQUEyQixpQkFYcEMsOEJBQThCLGFBRzlCLFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1CLGFBR25CLDhCQUE4QjswSEFHckIsMkJBQTJCLFlBUnBDLFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1COzRGQU1WLDJCQUEyQjtrQkFidkMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osOEJBQThCO3FCQUMvQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjtxQkFDcEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDhCQUE4QjtxQkFDL0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUQ2xvdWRVaUlucHV0UGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuL3RjbG91ZC11aS1pbnB1dC1wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFRDbG91ZFVpSW5wdXRQYXNzd29yZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBUQ2xvdWRVaUlucHV0UGFzc3dvcmRDb21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUQ2xvdWRVaUlucHV0UGFzc3dvcmRNb2R1bGUgeyB9XHJcbiJdfQ==
|
|
@@ -50,10 +50,10 @@ export class TCloudUiInputSearchComponent {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
TCloudUiInputSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputSearchComponent, deps: [{ token: i1.TCloudUiSearchInObjectService }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
-
TCloudUiInputSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiInputSearchComponent, selector: "tcloud-ui-input-search", inputs: { placeholder: "placeholder", mirror: "mirror", base_object: "base_object" }, outputs: { found: "found" }, ngImport: i0, template: "<table class=\"tcloud-ui-input-search tc-group-input-table\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td><input class=\"tc-form-control box-ui-input-group\" [(ngModel)]=\"search_text\" type=\"text\" (keyup)=\"buscar(search_text)\" placeholder=\"{{ placeholder }}\" ></td>\n <td> \n <ng-container *ngIf=\"search_text === ''\"> \n <button type=\"button\" (click)=\"buscar(search_text)\"><i class=\"fas fa-search\"></i></button>\n </ng-container> \n\n <ng-container *ngIf=\"search_text !== ''\"> \n <button type=\"button\" (click)=\"clean()\"><i class=\"fas fa-times\"></i></button>\n </ng-container>\n </td>\n </tr>\n</table>", styles: [".tc-group-input-table{width:100%;border-collapse:collapse;border-spacing:0}.tc-group-input-table td{border:none;border-style:hidden;border-spacing:0;vertical-align:top}.tc-group-input-table td:first-child input{height:40px;width:100%;border:1px solid #ccc;border-radius:4px 0 0 4px!important}.tc-group-input-table td:last-child{width:40px}.tc-group-input-table td:last-child button{width:100%;height:40px;border:none;border-radius:0 10px 10px 0;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
53
|
+
TCloudUiInputSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiInputSearchComponent, selector: "tcloud-ui-input-search", inputs: { placeholder: "placeholder", mirror: "mirror", base_object: "base_object" }, outputs: { found: "found" }, ngImport: i0, template: "<table class=\"tcloud-ui-input-search tc-group-input-table\" cellspacing=\"0\" cellpadding=\"0\">\r\n <tr>\r\n <td><input class=\"tc-form-control box-ui-input-group\" [(ngModel)]=\"search_text\" type=\"text\" (keyup)=\"buscar(search_text)\" placeholder=\"{{ placeholder }}\" ></td>\r\n <td> \r\n <ng-container *ngIf=\"search_text === ''\"> \r\n <button type=\"button\" (click)=\"buscar(search_text)\"><i class=\"fas fa-search\"></i></button>\r\n </ng-container> \r\n\r\n <ng-container *ngIf=\"search_text !== ''\"> \r\n <button type=\"button\" (click)=\"clean()\"><i class=\"fas fa-times\"></i></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n</table>", styles: [".tc-group-input-table{width:100%;border-collapse:collapse;border-spacing:0}.tc-group-input-table td{border:none;border-style:hidden;border-spacing:0;vertical-align:top}.tc-group-input-table td:first-child input{height:40px;width:100%;border:1px solid #ccc;border-radius:4px 0 0 4px!important}.tc-group-input-table td:last-child{width:40px}.tc-group-input-table td:last-child button{width:100%;height:40px;border:none;border-radius:0 10px 10px 0;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
54
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiInputSearchComponent, decorators: [{
|
|
55
55
|
type: Component,
|
|
56
|
-
args: [{ selector: 'tcloud-ui-input-search', template: "<table class=\"tcloud-ui-input-search tc-group-input-table\" cellspacing=\"0\" cellpadding=\"0\">\n <tr>\n <td><input class=\"tc-form-control box-ui-input-group\" [(ngModel)]=\"search_text\" type=\"text\" (keyup)=\"buscar(search_text)\" placeholder=\"{{ placeholder }}\" ></td>\n <td> \n <ng-container *ngIf=\"search_text === ''\"> \n <button type=\"button\" (click)=\"buscar(search_text)\"><i class=\"fas fa-search\"></i></button>\n </ng-container> \n\n <ng-container *ngIf=\"search_text !== ''\"> \n <button type=\"button\" (click)=\"clean()\"><i class=\"fas fa-times\"></i></button>\n </ng-container>\n </td>\n </tr>\n</table>", styles: [".tc-group-input-table{width:100%;border-collapse:collapse;border-spacing:0}.tc-group-input-table td{border:none;border-style:hidden;border-spacing:0;vertical-align:top}.tc-group-input-table td:first-child input{height:40px;width:100%;border:1px solid #ccc;border-radius:4px 0 0 4px!important}.tc-group-input-table td:last-child{width:40px}.tc-group-input-table td:last-child button{width:100%;height:40px;border:none;border-radius:0 10px 10px 0;cursor:pointer}\n"] }]
|
|
56
|
+
args: [{ selector: 'tcloud-ui-input-search', template: "<table class=\"tcloud-ui-input-search tc-group-input-table\" cellspacing=\"0\" cellpadding=\"0\">\r\n <tr>\r\n <td><input class=\"tc-form-control box-ui-input-group\" [(ngModel)]=\"search_text\" type=\"text\" (keyup)=\"buscar(search_text)\" placeholder=\"{{ placeholder }}\" ></td>\r\n <td> \r\n <ng-container *ngIf=\"search_text === ''\"> \r\n <button type=\"button\" (click)=\"buscar(search_text)\"><i class=\"fas fa-search\"></i></button>\r\n </ng-container> \r\n\r\n <ng-container *ngIf=\"search_text !== ''\"> \r\n <button type=\"button\" (click)=\"clean()\"><i class=\"fas fa-times\"></i></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n</table>", styles: [".tc-group-input-table{width:100%;border-collapse:collapse;border-spacing:0}.tc-group-input-table td{border:none;border-style:hidden;border-spacing:0;vertical-align:top}.tc-group-input-table td:first-child input{height:40px;width:100%;border:1px solid #ccc;border-radius:4px 0 0 4px!important}.tc-group-input-table td:last-child{width:40px}.tc-group-input-table td:last-child button{width:100%;height:40px;border:none;border-radius:0 10px 10px 0;cursor:pointer}\n"] }]
|
|
57
57
|
}], ctorParameters: function () { return [{ type: i1.TCloudUiSearchInObjectService }]; }, propDecorators: { placeholder: [{
|
|
58
58
|
type: Input
|
|
59
59
|
}], mirror: [{
|
|
@@ -63,4 +63,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
63
63
|
}], found: [{
|
|
64
64
|
type: Output
|
|
65
65
|
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWlucHV0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktaW5wdXQtc2VhcmNoL3RjbG91ZC11aS1pbnB1dC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWlucHV0LXNlYXJjaC90Y2xvdWQtdWktaW5wdXQtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUS9FLE1BQU0sT0FBTyw0QkFBNEI7SUFpQ3ZDLFlBQ1UscUJBQW9EO1FBQXBELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBK0I7UUFoQzlEOzs7Ozs7V0FNRztRQUVNLGdCQUFXLEdBQVcsYUFBYSxDQUFDO1FBRXBDLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFFaEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFpQmYsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFJdEMsQ0FBQztJQWxCTCxJQUFhLFdBQVcsQ0FBQyxXQUFnQjtRQUN2QyxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1lBRWhDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2hCO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsSUFBSSxXQUFXLEtBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQVU5QyxRQUFRO0lBQ1IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pCO2FBQUk7WUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxhQUFhLENBQUUsQ0FBQztJQUN4QyxDQUFDOzswSEExRFUsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsaUxDUnpDLDR2QkFhUTs0RkRMSyw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0Usd0JBQXdCO29IQWN6QixXQUFXO3NCQUFuQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFLTyxXQUFXO3NCQUF2QixLQUFLO2dCQWNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRDbG91ZFVpU2VhcmNoSW5PYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3NlYXJjaC1pbi1vYmplY3Quc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RjbG91ZC11aS1pbnB1dC1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGNsb3VkLXVpLWlucHV0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1pbnB1dC1zZWFyY2guY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUQ2xvdWRVaUlucHV0U2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogdGNsb3VkLXVpLWlucHV0LXNlYXJjaCAtIFByb2N1cmEgcGVsbyB2YWxvciBpbmZvcm1hZG8gbm8gb2JqZXRvIGluZGljYWRvXG4gICAqIEBwYXJhbSBwbGFjZWhvbGRlciBzdHJpbmcgLSBwbGFjZWhvbGRlciBubyBpbnB1dFxuICAgKiBAcGFyYW0gbWlycm9yIGJvb2xlYW4gLSBFeGliaXIgb3MgdmFsb3JlcyBlc3BlbGhhZG9zIG91IHNvbWVudGUgb3MgdmFsb3JlcyBlbmNvbnRyYWRvc1xuICAgKiBAcGFyYW0gYmFzZV9vYmplY3Qgb2JqZWN0IC0gT2JqZXRvIG9uZGUgc2VyIHByb2N1cmFkbyBcbiAgICogQHBhcmFtIGZvdW5kIC0gRW1pdGUgbyB2YWxvciBlbmNvbnRyYWRvXG4gICAqL1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnUHJvY3VyYXIuLi4nO1xuXG4gIEBJbnB1dCgpIG1pcnJvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgc2VhcmNoX3RleHQ6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX2Jhc2Vfb2JqZWN0OiBhbnk7XG4gIEBJbnB1dCgpIHNldCBiYXNlX29iamVjdChiYXNlX29iamVjdDogYW55KXtcbiAgICBpZiggYmFzZV9vYmplY3QgKXtcbiAgICAgIHRoaXMuX2Jhc2Vfb2JqZWN0ID0gYmFzZV9vYmplY3Q7XG5cbiAgICAgIGlmKCB0aGlzLm1pcnJvciApe1xuICAgICAgICB0aGlzLnJlc3VsdF9vYmplY3QgPSBiYXNlX29iamVjdDtcbiAgICAgICAgdGhpcy50b0ZvdW5kKCk7XG4gICAgICB9XG4gICAgfSAgICBcbiAgfVxuICBnZXQgYmFzZV9vYmplY3QoKXsgcmV0dXJuIHRoaXMuX2Jhc2Vfb2JqZWN0OyB9XG5cbiAgcmVzdWx0X29iamVjdDogYW55IHwgdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKSBmb3VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VhcmNoSW5PYmplY3RTZXJ2aWNlOiBUQ2xvdWRVaVNlYXJjaEluT2JqZWN0U2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgYnVzY2FyKHZhbHVlOiBzdHJpbmcpe1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoSW5PYmplY3RTZXJ2aWNlLm1lZXQoYCR7dmFsdWV9YCwgdGhpcy5iYXNlX29iamVjdCk7XG4gICAgdGhpcy5yZXN1bHRfb2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQpKTtcbiAgICB0aGlzLnRvRm91bmQoKTtcbiAgfVxuXG4gIGNsZWFuKCl7XG4gICAgaWYoIHRoaXMubWlycm9yICl7XG4gICAgICB0aGlzLmJ1c2NhcignJyk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLnJlc3VsdF9vYmplY3QgPSBbXTsgXG4gICAgICB0aGlzLnRvRm91bmQoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hfdGV4dCA9ICcnO1xuICB9XG5cbiAgdG9Gb3VuZCgpe1xuICAgIHRoaXMuZm91bmQuZW1pdCggdGhpcy5yZXN1bHRfb2JqZWN0ICk7XG4gIH1cblxufVxuIiwiPHRhYmxlIGNsYXNzPVwidGNsb3VkLXVpLWlucHV0LXNlYXJjaCB0Yy1ncm91cC1pbnB1dC10YWJsZVwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiPlxyXG4gICAgPHRyPlxyXG4gICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9XCJ0Yy1mb3JtLWNvbnRyb2wgYm94LXVpLWlucHV0LWdyb3VwXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hfdGV4dFwiIHR5cGU9XCJ0ZXh0XCIgKGtleXVwKT1cImJ1c2NhcihzZWFyY2hfdGV4dClcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgPjwvdGQ+XHJcbiAgICAgICAgPHRkPiAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hfdGV4dCA9PT0gJydcIj4gIFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImJ1c2NhcihzZWFyY2hfdGV4dClcIj48aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiBcclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hfdGV4dCAhPT0gJydcIj4gIFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFuKClcIj48aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbjwvdGFibGU+Il19
|
|
@@ -146,10 +146,10 @@ export class TCloudUiMultiInputComponent {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
TCloudUiMultiInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiMultiInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
-
TCloudUiMultiInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiMultiInputComponent, selector: "tcloud-ui-multi-input", inputs: { tcList: "tcList", placeholder: "placeholder", disabled: "disabled", loading: "loading", required: "required" }, outputs: { tcChange: "tcChange", onChange: "onChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], ngImport: i0, template: "<div class=\"tcloud-ui-multi-input\">\n\n <table>\n <tr>\n <td>\n <input class=\"tc-form-control\" (blur)=\"onChangeTouched()\" [(ngModel)]=\"item_value\" [class.tc-parent-validation]=\"use_validation_required\" type=\"text\" [(ngModel)]=\"input_value\" [disabled]=\"disabled || loading\" name=\"input_value\">\n </td>\n <td>\n <button\n [disabled]=\"!item_value || disabled || loading\"\n title=\"Adicionar\"\n class=\"btn-plus-select\"\n (click)=\"addItem(input_value);onChangeTouched()\"\n type=\"button\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </td>\n </tr>\n </table>\n \n <div class=\"box-itens-selected\" *ngIf=\"(tcList && tcList.length > 0)\">\n <ng-container *ngFor=\"let item of tcList; let i = index\">\n \n <div class=\"box-label\" [ngStyle]=\"item_width(item.value)\">\n <div class=\"box-value\" [title]=\"item.value\" >\n {{ item.value }} \n </div>\n <div class=\"box-action\">\n <button\n [disabled]=\"tcList === undefined || (tcList && tcList.length === 0) || disabled || loading\"\n title=\"Remover\"\n type=\"button\"\n (click)=\"removeItem(item.value, i);onChangeTouched()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n </ng-container>\n </div>\n \n</div>\n ", styles: ["table{width:100%;border-collapse:collapse;border:none}table td{vertical-align:top}table td:first-child{width:100%}input{font-size:.8rem;height:40px;border:1px solid #999;border-radius:4px 0 0 4px;padding:6px 10px;white-space:nowrap;text-overflow:ellipsis;width:100%;background-color:#fff;color:#888}.btn-plus-select{width:30px;height:40px;border:none;color:#fff;background-color:var(--tc-primary);border-radius:0 4px 4px 0}.box-itens-selected{display:block;padding:9px;background-color:#ededed;border-radius:4px;width:100%}select:disabled{opacity:.8!important;cursor:not-allowed!important;background-color:#ededed}button:disabled{opacity:.5!important;cursor:not-allowed!important}.box-label{position:relative;display:inline-block;height:35px;min-width:60px;background-color:var(--white);color:var(--tc-primary);padding:8px 15px 10px;border:1px solid var(--tc-primary);border-radius:5px;margin:2px;width:100%}.box-label .box-value{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.box-label .box-action{position:absolute;right:4px;top:7px}.box-label .box-action button{color:var(--tc-primary);background-color:transparent;border:none;font-weight:700;cursor:pointer}.box-label .box-action button i{font-size:12px}.box-label .box-action button:hover{color:var(--red)}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
149
|
+
TCloudUiMultiInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiMultiInputComponent, selector: "tcloud-ui-multi-input", inputs: { tcList: "tcList", placeholder: "placeholder", disabled: "disabled", loading: "loading", required: "required" }, outputs: { tcChange: "tcChange", onChange: "onChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], ngImport: i0, template: "<div class=\"tcloud-ui-multi-input\">\r\n\r\n <table>\r\n <tr>\r\n <td>\r\n <input class=\"tc-form-control\" (blur)=\"onChangeTouched()\" [(ngModel)]=\"item_value\" [class.tc-parent-validation]=\"use_validation_required\" type=\"text\" [(ngModel)]=\"input_value\" [disabled]=\"disabled || loading\" name=\"input_value\">\r\n </td>\r\n <td>\r\n <button\r\n [disabled]=\"!item_value || disabled || loading\"\r\n title=\"Adicionar\"\r\n class=\"btn-plus-select\"\r\n (click)=\"addItem(input_value);onChangeTouched()\"\r\n type=\"button\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <div class=\"box-itens-selected\" *ngIf=\"(tcList && tcList.length > 0)\">\r\n <ng-container *ngFor=\"let item of tcList; let i = index\">\r\n \r\n <div class=\"box-label\" [ngStyle]=\"item_width(item.value)\">\r\n <div class=\"box-value\" [title]=\"item.value\" >\r\n {{ item.value }} \r\n </div>\r\n <div class=\"box-action\">\r\n <button\r\n [disabled]=\"tcList === undefined || (tcList && tcList.length === 0) || disabled || loading\"\r\n title=\"Remover\"\r\n type=\"button\"\r\n (click)=\"removeItem(item.value, i);onChangeTouched()\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n \r\n</div>\r\n ", styles: ["table{width:100%;border-collapse:collapse;border:none}table td{vertical-align:top}table td:first-child{width:100%}input{font-size:.8rem;height:40px;border:1px solid #999;border-radius:4px 0 0 4px;padding:6px 10px;white-space:nowrap;text-overflow:ellipsis;width:100%;background-color:#fff;color:#888}.btn-plus-select{width:30px;height:40px;border:none;color:#fff;background-color:var(--tc-primary);border-radius:0 4px 4px 0}.box-itens-selected{display:block;padding:9px;background-color:#ededed;border-radius:4px;width:100%}select:disabled{opacity:.8!important;cursor:not-allowed!important;background-color:#ededed}button:disabled{opacity:.5!important;cursor:not-allowed!important}.box-label{position:relative;display:inline-block;height:35px;min-width:60px;background-color:var(--white);color:var(--tc-primary);padding:8px 15px 10px;border:1px solid var(--tc-primary);border-radius:5px;margin:2px;width:100%}.box-label .box-value{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.box-label .box-action{position:absolute;right:4px;top:7px}.box-label .box-action button{color:var(--tc-primary);background-color:transparent;border:none;font-weight:700;cursor:pointer}.box-label .box-action button i{font-size:12px}.box-label .box-action button:hover{color:var(--red)}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
150
150
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiMultiInputComponent, decorators: [{
|
|
151
151
|
type: Component,
|
|
152
|
-
args: [{ selector: 'tcloud-ui-multi-input', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], template: "<div class=\"tcloud-ui-multi-input\">\n\n <table>\n <tr>\n <td>\n <input class=\"tc-form-control\" (blur)=\"onChangeTouched()\" [(ngModel)]=\"item_value\" [class.tc-parent-validation]=\"use_validation_required\" type=\"text\" [(ngModel)]=\"input_value\" [disabled]=\"disabled || loading\" name=\"input_value\">\n </td>\n <td>\n <button\n [disabled]=\"!item_value || disabled || loading\"\n title=\"Adicionar\"\n class=\"btn-plus-select\"\n (click)=\"addItem(input_value);onChangeTouched()\"\n type=\"button\">\n <i class=\"fas fa-plus\"></i>\n </button>\n </td>\n </tr>\n </table>\n \n <div class=\"box-itens-selected\" *ngIf=\"(tcList && tcList.length > 0)\">\n <ng-container *ngFor=\"let item of tcList; let i = index\">\n \n <div class=\"box-label\" [ngStyle]=\"item_width(item.value)\">\n <div class=\"box-value\" [title]=\"item.value\" >\n {{ item.value }} \n </div>\n <div class=\"box-action\">\n <button\n [disabled]=\"tcList === undefined || (tcList && tcList.length === 0) || disabled || loading\"\n title=\"Remover\"\n type=\"button\"\n (click)=\"removeItem(item.value, i);onChangeTouched()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n </ng-container>\n </div>\n \n</div>\n ", styles: ["table{width:100%;border-collapse:collapse;border:none}table td{vertical-align:top}table td:first-child{width:100%}input{font-size:.8rem;height:40px;border:1px solid #999;border-radius:4px 0 0 4px;padding:6px 10px;white-space:nowrap;text-overflow:ellipsis;width:100%;background-color:#fff;color:#888}.btn-plus-select{width:30px;height:40px;border:none;color:#fff;background-color:var(--tc-primary);border-radius:0 4px 4px 0}.box-itens-selected{display:block;padding:9px;background-color:#ededed;border-radius:4px;width:100%}select:disabled{opacity:.8!important;cursor:not-allowed!important;background-color:#ededed}button:disabled{opacity:.5!important;cursor:not-allowed!important}.box-label{position:relative;display:inline-block;height:35px;min-width:60px;background-color:var(--white);color:var(--tc-primary);padding:8px 15px 10px;border:1px solid var(--tc-primary);border-radius:5px;margin:2px;width:100%}.box-label .box-value{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.box-label .box-action{position:absolute;right:4px;top:7px}.box-label .box-action button{color:var(--tc-primary);background-color:transparent;border:none;font-weight:700;cursor:pointer}.box-label .box-action button i{font-size:12px}.box-label .box-action button:hover{color:var(--red)}\n"] }]
|
|
152
|
+
args: [{ selector: 'tcloud-ui-multi-input', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], template: "<div class=\"tcloud-ui-multi-input\">\r\n\r\n <table>\r\n <tr>\r\n <td>\r\n <input class=\"tc-form-control\" (blur)=\"onChangeTouched()\" [(ngModel)]=\"item_value\" [class.tc-parent-validation]=\"use_validation_required\" type=\"text\" [(ngModel)]=\"input_value\" [disabled]=\"disabled || loading\" name=\"input_value\">\r\n </td>\r\n <td>\r\n <button\r\n [disabled]=\"!item_value || disabled || loading\"\r\n title=\"Adicionar\"\r\n class=\"btn-plus-select\"\r\n (click)=\"addItem(input_value);onChangeTouched()\"\r\n type=\"button\">\r\n <i class=\"fas fa-plus\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <div class=\"box-itens-selected\" *ngIf=\"(tcList && tcList.length > 0)\">\r\n <ng-container *ngFor=\"let item of tcList; let i = index\">\r\n \r\n <div class=\"box-label\" [ngStyle]=\"item_width(item.value)\">\r\n <div class=\"box-value\" [title]=\"item.value\" >\r\n {{ item.value }} \r\n </div>\r\n <div class=\"box-action\">\r\n <button\r\n [disabled]=\"tcList === undefined || (tcList && tcList.length === 0) || disabled || loading\"\r\n title=\"Remover\"\r\n type=\"button\"\r\n (click)=\"removeItem(item.value, i);onChangeTouched()\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n \r\n</div>\r\n ", styles: ["table{width:100%;border-collapse:collapse;border:none}table td{vertical-align:top}table td:first-child{width:100%}input{font-size:.8rem;height:40px;border:1px solid #999;border-radius:4px 0 0 4px;padding:6px 10px;white-space:nowrap;text-overflow:ellipsis;width:100%;background-color:#fff;color:#888}.btn-plus-select{width:30px;height:40px;border:none;color:#fff;background-color:var(--tc-primary);border-radius:0 4px 4px 0}.box-itens-selected{display:block;padding:9px;background-color:#ededed;border-radius:4px;width:100%}select:disabled{opacity:.8!important;cursor:not-allowed!important;background-color:#ededed}button:disabled{opacity:.5!important;cursor:not-allowed!important}.box-label{position:relative;display:inline-block;height:35px;min-width:60px;background-color:var(--white);color:var(--tc-primary);padding:8px 15px 10px;border:1px solid var(--tc-primary);border-radius:5px;margin:2px;width:100%}.box-label .box-value{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.box-label .box-action{position:absolute;right:4px;top:7px}.box-label .box-action button{color:var(--tc-primary);background-color:transparent;border:none;font-weight:700;cursor:pointer}.box-label .box-action button i{font-size:12px}.box-label .box-action button:hover{color:var(--red)}\n"] }]
|
|
153
153
|
}], ctorParameters: function () { return []; }, propDecorators: { tcList: [{
|
|
154
154
|
type: Input
|
|
155
155
|
}], placeholder: [{
|
|
@@ -165,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
165
165
|
}], onChange: [{
|
|
166
166
|
type: Output
|
|
167
167
|
}] } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RjbG91ZC11aS9zcmMvbGliL19tb2R1bGVzL3RjbG91ZC11aS1tdWx0aS1pbnB1dC90Y2xvdWQtdWktbXVsdGktaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLW11bHRpLWlucHV0L3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQWUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFMUYsTUFBTyx1QkFBdUIsR0FBUTtJQUNwQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQTtBQUVELE1BQU0sbUNBQW1DLEdBQVE7SUFDL0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFRRixNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0QztRQWJTLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUlsQyxrQkFBYSxHQUFX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cG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25EZXN0cm95LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuY29uc3QgIENVU1RPTV9JTlBVVF9WQUxJREFUT1JTOiBhbnkgPSB7IFxuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLCBcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVENsb3VkVWlNdWx0aUlucHV0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn1cblxuY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpTXVsdGlJbnB1dENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGNsb3VkLXVpLW11bHRpLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiwgQ1VTVE9NX0lOUFVUX1ZBTElEQVRPUlNdXG59KVxuZXhwb3J0IGNsYXNzIFRDbG91ZFVpTXVsdGlJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBWYWxpZGF0b3Ige1xuXG4gIGlucHV0X3ZhbHVlOiBhbnk7XG5cbiAgQElucHV0KCkgdGNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB2YWx1ZXM6IGFueVtdIHwgdW5kZWZpbmVkO1xuICBjb3VudF9hY3RpdmVzOiBudW1iZXIgPSAwO1xuXG4gIHVzZV92YWxpZGF0aW9uX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1fdmFsdWU6IGFueSB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgdGNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRvQ2hhbmdlKCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRJdGVtKGl0ZW06IGFueSk6IHZvaWR7XG4gICAgaWYoIHRoaXMuZGlzYWJsZWQgKXsgcmV0dXJuOyB9XG4gICAgaWYoICF0aGlzLnRjTGlzdCApe1xuICAgICAgdGhpcy50Y0xpc3QgPSBbXTtcbiAgICB9XG4gICAgKHRoaXMudGNMaXN0KS5wdXNoKHt2YWx1ZTogaXRlbX0pOyAgICBcbiAgICB0aGlzLnRvQ2hhbmdlKCk7ICAgXG4gICAgdGhpcy5pbnB1dF92YWx1ZSA9ICcnO1xuICB9XG5cblxuICByZW1vdmVJdGVtKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWR7XG4gICAgaWYoIHRoaXMuZGlzYWJsZWQgKXsgcmV0dXJuOyB9XG4gICAgaWYoIHRoaXMudGNMaXN0ICl7XG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLnRjTGlzdCkubGVuZ3RoOyBpKysgKXtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50Y0xpc3RbaV07XG4gICAgICAgIGlmKCBpdGVtID09PSByb3cudmFsdWUgJiYgaSA9PT0gaW5kZXggKXtcbiAgICAgICAgICAodGhpcy50Y0xpc3QpLnNwbGljZShpbmRleCwxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b0NoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9DaGFuZ2UoKTogdm9pZHtcbiAgICBsZXQgY291bnRfYWN0aXZlcyA9IDA7XG4gICAgbGV0IGl0ZW5zOiBhbnlbXSA9IFtdO1xuICAgIGlmKCB0aGlzLnRjTGlzdCApe1xuICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCAodGhpcy50Y0xpc3QpLmxlbmd0aDsgaSsrICl7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMudGNMaXN0W2ldO1xuICAgICAgICAoaXRlbnMpLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pdGVtX3ZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmNvdW50X2FjdGl2ZXMgPSBjb3VudF9hY3RpdmVzO1xuICAgIHRoaXMudGNDaGFuZ2UuZW1pdChpdGVucyk7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMudGNMaXN0KTtcbiAgfVxuXG4gIGNoZWNrX2lzX3ZhbGlkKCk6IGJvb2xlYW57XG4gICAgaWYoIHRoaXMudGNMaXN0ICl7XG4gICAgICByZXR1cm4gKCh0aGlzLnRjTGlzdCkubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uQ2hhbmdlVG91Y2hlZCgpeyAgXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpOyAgICAgXG4gIH1cblxuXG5cblxuXG5cblxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gQE91dHB1dCgpIG5nTW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBpbm5lclZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XG4gIC8vUGxhY2Vob2xkZXJzIGZvciB0aGUgY2FsbGJhY2tzIHdoaWNoIGFyZSBsYXRlciBwcm92aWRlc2RcbiAgLy9ieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAvL2dldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gIH07XG5cbiAgLy9zZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2OyAgICAgIFxuICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuICAgIH1cbiAgfVxuXG4gIC8vU2V0IHRvdWNoZWQgb24gYmx1clxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnRvU2V0RGVmYXVsdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHRvU2V0RGVmYXVsdCh2YWx1ZTogYW55KXtcbiAgICB0aGlzLnRjTGlzdCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogYW55IHtcbiAgICBpZiggYyAmJiAoIHR5cGVvZiB0aGlzLnJlcXVpcmVkICE9PSAndW5kZWZpbmVkJyApICl7XG4gICAgICB0aGlzLnVzZV92YWxpZGF0aW9uX3JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAodGhpcy5jaGVja19pc192YWxpZCgpKSA/IG51bGwgOiAncmVxdWlyZWQnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGl0ZW1fd2lkdGgodGV4dDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBgJHt0ZXh0fWA7XG4gICAgY29uc3QgdmFsdWVfbGVuID0gKHZhbHVlKS5sZW5ndGg7XG4gICAgbGV0IG1heF93aWR0aCA9IDE1NTtcbiAgICBpZiggdmFsdWVfbGVuIDwgMTUgKXsgbWF4X3dpZHRoID0gMTM4OyB9XG4gICAgaWYoIHZhbHVlX2xlbiA8IDEwICl7IG1heF93aWR0aCA9IDEwNTsgfVxuICAgIGlmKCB2YWx1ZV9sZW4gPCA4ICl7IG1heF93aWR0aCA9IDg1OyB9XG4gICAgaWYoIHZhbHVlX2xlbiA8IDUgKXsgbWF4X3dpZHRoID0gNzA7IH1cbiAgICByZXR1cm4geyAnbWF4LXdpZHRoJzogbWF4X3dpZHRoICsgJ3B4J307XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRjbG91ZC11aS1tdWx0aS1pbnB1dFwiPlxuXG4gICAgPHRhYmxlPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwidGMtZm9ybS1jb250cm9sXCIgKGJsdXIpPVwib25DaGFuZ2VUb3VjaGVkKClcIiBbKG5nTW9kZWwpXT1cIml0ZW1fdmFsdWVcIiBbY2xhc3MudGMtcGFyZW50LXZhbGlkYXRpb25dPVwidXNlX3ZhbGlkYXRpb25fcmVxdWlyZWRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wdXRfdmFsdWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9hZGluZ1wiIG5hbWU9XCJpbnB1dF92YWx1ZVwiPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQ+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpdGVtX3ZhbHVlIHx8IGRpc2FibGVkIHx8IGxvYWRpbmdcIlxuICAgICAgICAgICAgdGl0bGU9XCJBZGljaW9uYXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tcGx1cy1zZWxlY3RcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oaW5wdXRfdmFsdWUpO29uQ2hhbmdlVG91Y2hlZCgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJib3gtaXRlbnMtc2VsZWN0ZWRcIiAqbmdJZj1cIih0Y0xpc3QgJiYgdGNMaXN0Lmxlbmd0aCA+IDApXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRjTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImJveC1sYWJlbFwiIFtuZ1N0eWxlXT1cIml0ZW1fd2lkdGgoaXRlbS52YWx1ZSlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXZhbHVlXCIgW3RpdGxlXT1cIml0ZW0udmFsdWVcIiAgPlxuICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fSAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWFjdGlvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGNMaXN0ID09PSB1bmRlZmluZWQgfHwgKHRjTGlzdCAmJiB0Y0xpc3QubGVuZ3RoID09PSAwKSB8fCBkaXNhYmxlZCB8fCBsb2FkaW5nXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0udmFsdWUsIGkpO29uQ2hhbmdlVG91Y2hlZCgpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiBcbjwvZGl2PlxuICAiXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RjbG91ZC11aS9zcmMvbGliL19tb2R1bGVzL3RjbG91ZC11aS1tdWx0aS1pbnB1dC90Y2xvdWQtdWktbXVsdGktaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLW11bHRpLWlucHV0L3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQWUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFMUYsTUFBTyx1QkFBdUIsR0FBUTtJQUNwQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQTtBQUVELE1BQU0sbUNBQW1DLEdBQVE7SUFDL0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFRRixNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0QztRQWJTLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUlsQyxrQkFBYSxHQUFX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cG9uZW50LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25EZXN0cm95LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuY29uc3QgIENVU1RPTV9JTlBVVF9WQUxJREFUT1JTOiBhbnkgPSB7IFxuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLCBcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVENsb3VkVWlNdWx0aUlucHV0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn1cblxuY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpTXVsdGlJbnB1dENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGNsb3VkLXVpLW11bHRpLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1tdWx0aS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiwgQ1VTVE9NX0lOUFVUX1ZBTElEQVRPUlNdXG59KVxuZXhwb3J0IGNsYXNzIFRDbG91ZFVpTXVsdGlJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBWYWxpZGF0b3Ige1xuXG4gIGlucHV0X3ZhbHVlOiBhbnk7XG5cbiAgQElucHV0KCkgdGNMaXN0OiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB2YWx1ZXM6IGFueVtdIHwgdW5kZWZpbmVkO1xuICBjb3VudF9hY3RpdmVzOiBudW1iZXIgPSAwO1xuXG4gIHVzZV92YWxpZGF0aW9uX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGl0ZW1fdmFsdWU6IGFueSB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KCkgdGNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRvQ2hhbmdlKCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRJdGVtKGl0ZW06IGFueSk6IHZvaWR7XG4gICAgaWYoIHRoaXMuZGlzYWJsZWQgKXsgcmV0dXJuOyB9XG4gICAgaWYoICF0aGlzLnRjTGlzdCApe1xuICAgICAgdGhpcy50Y0xpc3QgPSBbXTtcbiAgICB9XG4gICAgKHRoaXMudGNMaXN0KS5wdXNoKHt2YWx1ZTogaXRlbX0pOyAgICBcbiAgICB0aGlzLnRvQ2hhbmdlKCk7ICAgXG4gICAgdGhpcy5pbnB1dF92YWx1ZSA9ICcnO1xuICB9XG5cblxuICByZW1vdmVJdGVtKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWR7XG4gICAgaWYoIHRoaXMuZGlzYWJsZWQgKXsgcmV0dXJuOyB9XG4gICAgaWYoIHRoaXMudGNMaXN0ICl7XG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLnRjTGlzdCkubGVuZ3RoOyBpKysgKXtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50Y0xpc3RbaV07XG4gICAgICAgIGlmKCBpdGVtID09PSByb3cudmFsdWUgJiYgaSA9PT0gaW5kZXggKXtcbiAgICAgICAgICAodGhpcy50Y0xpc3QpLnNwbGljZShpbmRleCwxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b0NoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9DaGFuZ2UoKTogdm9pZHtcbiAgICBsZXQgY291bnRfYWN0aXZlcyA9IDA7XG4gICAgbGV0IGl0ZW5zOiBhbnlbXSA9IFtdO1xuICAgIGlmKCB0aGlzLnRjTGlzdCApe1xuICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCAodGhpcy50Y0xpc3QpLmxlbmd0aDsgaSsrICl7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMudGNMaXN0W2ldO1xuICAgICAgICAoaXRlbnMpLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pdGVtX3ZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmNvdW50X2FjdGl2ZXMgPSBjb3VudF9hY3RpdmVzO1xuICAgIHRoaXMudGNDaGFuZ2UuZW1pdChpdGVucyk7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMudGNMaXN0KTtcbiAgfVxuXG4gIGNoZWNrX2lzX3ZhbGlkKCk6IGJvb2xlYW57XG4gICAgaWYoIHRoaXMudGNMaXN0ICl7XG4gICAgICByZXR1cm4gKCh0aGlzLnRjTGlzdCkubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uQ2hhbmdlVG91Y2hlZCgpeyAgXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpOyAgICAgXG4gIH1cblxuXG5cblxuXG5cblxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gQE91dHB1dCgpIG5nTW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBpbm5lclZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XG4gIC8vUGxhY2Vob2xkZXJzIGZvciB0aGUgY2FsbGJhY2tzIHdoaWNoIGFyZSBsYXRlciBwcm92aWRlc2RcbiAgLy9ieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAvL2dldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gIH07XG5cbiAgLy9zZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2OyAgICAgIFxuICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuICAgIH1cbiAgfVxuXG4gIC8vU2V0IHRvdWNoZWQgb24gYmx1clxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnRvU2V0RGVmYXVsdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHRvU2V0RGVmYXVsdCh2YWx1ZTogYW55KXtcbiAgICB0aGlzLnRjTGlzdCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogYW55IHtcbiAgICBpZiggYyAmJiAoIHR5cGVvZiB0aGlzLnJlcXVpcmVkICE9PSAndW5kZWZpbmVkJyApICl7XG4gICAgICB0aGlzLnVzZV92YWxpZGF0aW9uX3JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAodGhpcy5jaGVja19pc192YWxpZCgpKSA/IG51bGwgOiAncmVxdWlyZWQnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGl0ZW1fd2lkdGgodGV4dDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBgJHt0ZXh0fWA7XG4gICAgY29uc3QgdmFsdWVfbGVuID0gKHZhbHVlKS5sZW5ndGg7XG4gICAgbGV0IG1heF93aWR0aCA9IDE1NTtcbiAgICBpZiggdmFsdWVfbGVuIDwgMTUgKXsgbWF4X3dpZHRoID0gMTM4OyB9XG4gICAgaWYoIHZhbHVlX2xlbiA8IDEwICl7IG1heF93aWR0aCA9IDEwNTsgfVxuICAgIGlmKCB2YWx1ZV9sZW4gPCA4ICl7IG1heF93aWR0aCA9IDg1OyB9XG4gICAgaWYoIHZhbHVlX2xlbiA8IDUgKXsgbWF4X3dpZHRoID0gNzA7IH1cbiAgICByZXR1cm4geyAnbWF4LXdpZHRoJzogbWF4X3dpZHRoICsgJ3B4J307XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRjbG91ZC11aS1tdWx0aS1pbnB1dFwiPlxyXG5cclxuICAgIDx0YWJsZT5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRjLWZvcm0tY29udHJvbFwiIChibHVyKT1cIm9uQ2hhbmdlVG91Y2hlZCgpXCIgWyhuZ01vZGVsKV09XCJpdGVtX3ZhbHVlXCIgW2NsYXNzLnRjLXBhcmVudC12YWxpZGF0aW9uXT1cInVzZV92YWxpZGF0aW9uX3JlcXVpcmVkXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucHV0X3ZhbHVlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvYWRpbmdcIiBuYW1lPVwiaW5wdXRfdmFsdWVcIj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpdGVtX3ZhbHVlIHx8IGRpc2FibGVkIHx8IGxvYWRpbmdcIlxyXG4gICAgICAgICAgICB0aXRsZT1cIkFkaWNpb25hclwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLXBsdXMtc2VsZWN0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oaW5wdXRfdmFsdWUpO29uQ2hhbmdlVG91Y2hlZCgpXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9pPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiYm94LWl0ZW5zLXNlbGVjdGVkXCIgKm5nSWY9XCIodGNMaXN0ICYmIHRjTGlzdC5sZW5ndGggPiAwKVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRjTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3gtbGFiZWxcIiBbbmdTdHlsZV09XCJpdGVtX3dpZHRoKGl0ZW0udmFsdWUpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXZhbHVlXCIgW3RpdGxlXT1cIml0ZW0udmFsdWVcIiAgPlxyXG4gICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19ICAgICAgICAgIFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWFjdGlvblwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRjTGlzdCA9PT0gdW5kZWZpbmVkIHx8ICh0Y0xpc3QgJiYgdGNMaXN0Lmxlbmd0aCA9PT0gMCkgfHwgZGlzYWJsZWQgfHwgbG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmVyXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtLnZhbHVlLCBpKTtvbkNoYW5nZVRvdWNoZWQoKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuIFxyXG48L2Rpdj5cclxuICAiXX0=
|