@litigiovirtual/ius-design-components 1.0.70 → 1.0.72
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/esm2022/lib/button-dynamic/button-dynamic.component.mjs +86 -19
- package/esm2022/lib/icons/icons-map.mjs +6 -1
- package/esm2022/lib/loading-circle/loading-circle.component.mjs +2 -2
- package/fesm2022/litigiovirtual-ius-design-components.mjs +90 -18
- package/fesm2022/litigiovirtual-ius-design-components.mjs.map +1 -1
- package/lib/button-dynamic/button-dynamic.component.d.ts +20 -8
- package/package.json +1 -1
|
@@ -1,48 +1,115 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { IconMdComponent } from '../icon-md/icon-md.component';
|
|
4
|
+
import { LoadingCircleComponent } from '../loading-circle/loading-circle.component';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class ButtonDynamicComponent {
|
|
7
7
|
constructor() {
|
|
8
|
-
this.
|
|
8
|
+
this.labelDefault = 'Label';
|
|
9
9
|
this.disabled = false;
|
|
10
10
|
this.loading = false;
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.autoResetDelay = 3000;
|
|
11
|
+
this.autoReset = true;
|
|
12
|
+
this.autoResetDelay = 1500;
|
|
14
13
|
this.buttonClicked = new EventEmitter();
|
|
14
|
+
this.state = 'default';
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
if (!this.
|
|
18
|
-
this.
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
if (!this.labelSuccess) {
|
|
18
|
+
this.labelSuccess = this.labelDefault;
|
|
19
|
+
}
|
|
20
|
+
if (!this.labelError) {
|
|
21
|
+
this.labelError = this.labelDefault;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ngOnChanges(changes) {
|
|
25
|
+
// 1) disabled manda todo a 'disabled'
|
|
26
|
+
if (this.disabled) {
|
|
27
|
+
this.setState('disabled');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// 2) loading gobierna mientras es true
|
|
31
|
+
if (changes['loading']) {
|
|
32
|
+
if (this.loading) {
|
|
33
|
+
this.clearTimer();
|
|
34
|
+
this.setState('loading');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// loading → false: mirar result
|
|
39
|
+
this.applyResultState();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 3) Si cambió 'result' y no estamos cargando, aplicar
|
|
44
|
+
if (changes['result'] && !this.loading) {
|
|
45
|
+
this.applyResultState();
|
|
46
|
+
}
|
|
47
|
+
// 4) fallback
|
|
48
|
+
if (!this.loading && !this.result) {
|
|
49
|
+
this.setState('default');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
applyResultState() {
|
|
53
|
+
if (this.result === 'success') {
|
|
54
|
+
this.setState('success');
|
|
55
|
+
this.armAutoReset();
|
|
56
|
+
}
|
|
57
|
+
else if (this.result === 'error') {
|
|
58
|
+
this.setState('error');
|
|
59
|
+
this.armAutoReset();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.setState('default');
|
|
19
63
|
}
|
|
20
64
|
}
|
|
21
|
-
|
|
22
|
-
|
|
65
|
+
armAutoReset() {
|
|
66
|
+
this.clearTimer();
|
|
67
|
+
if (!this.autoReset)
|
|
68
|
+
return;
|
|
69
|
+
this.resetTimer = setTimeout(() => {
|
|
70
|
+
this.setState('default');
|
|
71
|
+
}, this.autoResetDelay);
|
|
23
72
|
}
|
|
24
|
-
|
|
25
|
-
|
|
73
|
+
clearTimer() {
|
|
74
|
+
if (this.resetTimer) {
|
|
75
|
+
clearTimeout(this.resetTimer);
|
|
76
|
+
this.resetTimer = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
setState(s) {
|
|
80
|
+
this.state = s;
|
|
81
|
+
}
|
|
82
|
+
onClick() {
|
|
83
|
+
if (this.state === 'loading' || this.state === 'disabled')
|
|
84
|
+
return;
|
|
85
|
+
this.buttonClicked.emit();
|
|
86
|
+
}
|
|
87
|
+
ngOnDestroy() {
|
|
88
|
+
this.clearTimer();
|
|
26
89
|
}
|
|
27
90
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonDynamicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ButtonDynamicComponent, isStandalone: true, selector: "ius-button-dynamic", inputs: {
|
|
91
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ButtonDynamicComponent, isStandalone: true, selector: "ius-button-dynamic", inputs: { labelDefault: "labelDefault", labelSuccess: "labelSuccess", labelError: "labelError", disabled: "disabled", loading: "loading", result: "result", autoReset: "autoReset", autoResetDelay: "autoResetDelay" }, outputs: { buttonClicked: "buttonClicked" }, usesOnChanges: true, ngImport: i0, template: "<button class=\"ius-btn\" [attr.data-state]=\"state\" [disabled]=\"state === 'disabled' || state === 'loading'\"\r\n (click)=\"onClick()\" aria-live=\"polite\">\r\n @switch (state) {\r\n @case ('loading') {\r\n <ius-loading-circle></ius-loading-circle>\r\n }\r\n @case ('success') {\r\n <ius-icon-md iconName=\"icon-check-circle\"></ius-icon-md>\r\n <span>{{ labelSuccess }}</span>\r\n }\r\n @case ('error') {\r\n <ius-icon-md iconName=\"icon-error\"></ius-icon-md>\r\n <span>{{ labelError }}</span>\r\n }\r\n @default {\r\n <span>{{ labelDefault }}</span>\r\n }\r\n }\r\n</button>", styles: [".h1{font-family:Roboto,sans-serif;font-size:2.375rem;font-weight:500;line-height:46px}.h2{font-family:Roboto,sans-serif;font-size:1.875rem;font-weight:700;line-height:38px}.h3{font-family:Roboto,sans-serif;font-size:1.5rem;font-weight:500;line-height:32px}.h4{font-family:Roboto,sans-serif;font-size:1.25rem;font-weight:700;line-height:26px}.h5{font-family:Roboto,sans-serif;font-size:1.125rem;font-weight:500;line-height:24px;letter-spacing:.18px}.label-large{font-family:Roboto,sans-serif;font-size:1rem;font-weight:500;line-height:22px}.body-large{font-family:Rubik,sans-serif;font-size:1rem;font-weight:400;line-height:22px}.label-base{font-family:Rubik,sans-serif;font-size:.875rem;font-weight:500;line-height:20px;letter-spacing:.28px}.body-base{font-family:Rubik,sans-serif;font-size:.875rem;font-weight:400;line-height:20px;font-style:italic;letter-spacing:.28px}.body-sm{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:400;line-height:16px;letter-spacing:.28px}.body-sm-italic{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:400;line-height:16px;font-style:italic;letter-spacing:.28px}.caption-sm{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:500;line-height:16px;letter-spacing:.28px}.caption-sm-italic{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:500;line-height:16px;font-style:italic;letter-spacing:.28px}.ius-btn{display:flex;position:relative;align-items:center;justify-content:center;gap:8px;width:100%;height:40px;padding:12px 24px;border:none;border-radius:14px;background-color:#013169;color:#fff;font-family:Rubik,sans-serif;font-size:.875rem;font-weight:500;line-height:20px;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease,transform .02s ease}.ius-btn:hover:not(:disabled):not([data-state=loading]):not([data-state=success]):not([data-state=error]){background-color:#08a6db;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.ius-btn:active:not(:disabled){background-color:#0581bc}.ius-btn:disabled{background-color:#f5f5f5;color:#bfbfbf;cursor:not-allowed}.ius-btn[data-state=loading]{background-color:#0581bc}.ius-btn[data-state=success]{background-color:#7caf25}.ius-btn[data-state=error]{background-color:#db2e2a}.ius-btn[data-state=disabled]{background-color:#f5f5f5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: LoadingCircleComponent, selector: "ius-loading-circle", inputs: ["show"] }, { kind: "component", type: IconMdComponent, selector: "ius-icon-md", inputs: ["iconName", "color"] }] }); }
|
|
29
92
|
}
|
|
30
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonDynamicComponent, decorators: [{
|
|
31
94
|
type: Component,
|
|
32
|
-
args: [{ selector: 'ius-button-dynamic', standalone: true, imports: [CommonModule, LoadingCircleComponent, IconMdComponent], template: "<button \
|
|
33
|
-
}], propDecorators: {
|
|
95
|
+
args: [{ selector: 'ius-button-dynamic', standalone: true, imports: [CommonModule, LoadingCircleComponent, IconMdComponent], template: "<button class=\"ius-btn\" [attr.data-state]=\"state\" [disabled]=\"state === 'disabled' || state === 'loading'\"\r\n (click)=\"onClick()\" aria-live=\"polite\">\r\n @switch (state) {\r\n @case ('loading') {\r\n <ius-loading-circle></ius-loading-circle>\r\n }\r\n @case ('success') {\r\n <ius-icon-md iconName=\"icon-check-circle\"></ius-icon-md>\r\n <span>{{ labelSuccess }}</span>\r\n }\r\n @case ('error') {\r\n <ius-icon-md iconName=\"icon-error\"></ius-icon-md>\r\n <span>{{ labelError }}</span>\r\n }\r\n @default {\r\n <span>{{ labelDefault }}</span>\r\n }\r\n }\r\n</button>", styles: [".h1{font-family:Roboto,sans-serif;font-size:2.375rem;font-weight:500;line-height:46px}.h2{font-family:Roboto,sans-serif;font-size:1.875rem;font-weight:700;line-height:38px}.h3{font-family:Roboto,sans-serif;font-size:1.5rem;font-weight:500;line-height:32px}.h4{font-family:Roboto,sans-serif;font-size:1.25rem;font-weight:700;line-height:26px}.h5{font-family:Roboto,sans-serif;font-size:1.125rem;font-weight:500;line-height:24px;letter-spacing:.18px}.label-large{font-family:Roboto,sans-serif;font-size:1rem;font-weight:500;line-height:22px}.body-large{font-family:Rubik,sans-serif;font-size:1rem;font-weight:400;line-height:22px}.label-base{font-family:Rubik,sans-serif;font-size:.875rem;font-weight:500;line-height:20px;letter-spacing:.28px}.body-base{font-family:Rubik,sans-serif;font-size:.875rem;font-weight:400;line-height:20px;font-style:italic;letter-spacing:.28px}.body-sm{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:400;line-height:16px;letter-spacing:.28px}.body-sm-italic{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:400;line-height:16px;font-style:italic;letter-spacing:.28px}.caption-sm{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:500;line-height:16px;letter-spacing:.28px}.caption-sm-italic{font-family:Rubik,sans-serif;font-size:.75rem;font-weight:500;line-height:16px;font-style:italic;letter-spacing:.28px}.ius-btn{display:flex;position:relative;align-items:center;justify-content:center;gap:8px;width:100%;height:40px;padding:12px 24px;border:none;border-radius:14px;background-color:#013169;color:#fff;font-family:Rubik,sans-serif;font-size:.875rem;font-weight:500;line-height:20px;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease,transform .02s ease}.ius-btn:hover:not(:disabled):not([data-state=loading]):not([data-state=success]):not([data-state=error]){background-color:#08a6db;box-shadow:0 1px 3px #0000001f,0 1px 2px #00000014}.ius-btn:active:not(:disabled){background-color:#0581bc}.ius-btn:disabled{background-color:#f5f5f5;color:#bfbfbf;cursor:not-allowed}.ius-btn[data-state=loading]{background-color:#0581bc}.ius-btn[data-state=success]{background-color:#7caf25}.ius-btn[data-state=error]{background-color:#db2e2a}.ius-btn[data-state=disabled]{background-color:#f5f5f5}\n"] }]
|
|
96
|
+
}], propDecorators: { labelDefault: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], labelSuccess: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], labelError: [{
|
|
34
101
|
type: Input
|
|
35
102
|
}], disabled: [{
|
|
36
103
|
type: Input
|
|
37
104
|
}], loading: [{
|
|
38
105
|
type: Input
|
|
39
|
-
}],
|
|
106
|
+
}], result: [{
|
|
40
107
|
type: Input
|
|
41
|
-
}],
|
|
108
|
+
}], autoReset: [{
|
|
42
109
|
type: Input
|
|
43
110
|
}], autoResetDelay: [{
|
|
44
111
|
type: Input
|
|
45
112
|
}], buttonClicked: [{
|
|
46
113
|
type: Output
|
|
47
114
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBWXBGLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFTVyxpQkFBWSxHQUFHLE9BQU8sQ0FBQztRQUl2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUVyQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbkQsVUFBSyxHQUFnQixTQUFTLENBQUM7S0FrRmhDO0lBL0VDLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMs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QUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxDQUFDOzhCQU12RCxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSWNvbk1kQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi1tZC9pY29uLW1kLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvYWRpbmdDaXJjbGVDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWNpcmNsZS9sb2FkaW5nLWNpcmNsZS5jb21wb25lbnQnO1xyXG5cclxudHlwZSBCdXR0b25SZXN1bHQgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgdW5kZWZpbmVkO1xyXG50eXBlIEJ1dHRvblN0YXRlID0gJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdkaXNhYmxlZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2l1cy1idXR0b24tZHluYW1pYycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMb2FkaW5nQ2lyY2xlQ29tcG9uZW50LCBJY29uTWRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tZHluYW1pYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1dHRvbkR5bmFtaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsRGVmYXVsdCA9ICdMYWJlbCc7XHJcbiAgQElucHV0KCkgbGFiZWxTdWNjZXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsRXJyb3I/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJlc3VsdDogQnV0dG9uUmVzdWx0O1xyXG5cclxuICBASW5wdXQoKSBhdXRvUmVzZXQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNldERlbGF5ID0gMTUwMDtcclxuXHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHN0YXRlOiBCdXR0b25TdGF0ZSA9ICdkZWZhdWx0JztcclxuICBwcml2YXRlIHJlc2V0VGltZXI6IGFueTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMubGFiZWxTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMubGFiZWxTdWNjZXNzID0gdGhpcy5sYWJlbERlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMubGFiZWxFcnJvcikge1xyXG4gICAgICB0aGlzLmxhYmVsRXJyb3IgPSB0aGlzLmxhYmVsRGVmYXVsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIDEpIGRpc2FibGVkIG1hbmRhIHRvZG8gYSAnZGlzYWJsZWQnXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMikgbG9hZGluZyBnb2JpZXJuYSBtaWVudHJhcyBlcyB0cnVlXHJcbiAgICBpZiAoY2hhbmdlc1snbG9hZGluZyddKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKCdsb2FkaW5nJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWRpbmcg4oaSIGZhbHNlOiBtaXJhciByZXN1bHRcclxuICAgICAgICB0aGlzLmFwcGx5UmVzdWx0U3RhdGUoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAzKSBTaSBjYW1iacOzICdyZXN1bHQnIHkgbm8gZXN0YW1vcyBjYXJnYW5kbywgYXBsaWNhclxyXG4gICAgaWYgKGNoYW5nZXNbJ3Jlc3VsdCddICYmICF0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5hcHBseVJlc3VsdFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gNCkgZmFsbGJhY2tcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmICF0aGlzLnJlc3VsdCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdkZWZhdWx0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVJlc3VsdFN0YXRlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVzdWx0ID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnc3VjY2VzcycpO1xyXG4gICAgICB0aGlzLmFybUF1dG9SZXNldCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdlcnJvcicpO1xyXG4gICAgICB0aGlzLmFybUF1dG9SZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGVmYXVsdCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJtQXV0b1Jlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclRpbWVyKCk7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1Jlc2V0KSByZXR1cm47XHJcbiAgICB0aGlzLnJlc2V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGVmYXVsdCcpO1xyXG4gICAgfSwgdGhpcy5hdXRvUmVzZXREZWxheSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclRpbWVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVzZXRUaW1lcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNldFRpbWVyKTtcclxuICAgICAgdGhpcy5yZXNldFRpbWVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN0YXRlKHM6IEJ1dHRvblN0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gcztcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdkaXNhYmxlZCcpIHJldHVybjtcclxuICAgIHRoaXMuYnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJUaW1lcigpO1xyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIGNsYXNzPVwiaXVzLWJ0blwiIFthdHRyLmRhdGEtc3RhdGVdPVwic3RhdGVcIiBbZGlzYWJsZWRdPVwic3RhdGUgPT09ICdkaXNhYmxlZCcgfHwgc3RhdGUgPT09ICdsb2FkaW5nJ1wiXHJcbiAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxyXG4gIEBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgQGNhc2UgKCdsb2FkaW5nJykge1xyXG4gIDxpdXMtbG9hZGluZy1jaXJjbGU+PC9pdXMtbG9hZGluZy1jaXJjbGU+XHJcbiAgfVxyXG4gIEBjYXNlICgnc3VjY2VzcycpIHtcclxuICA8aXVzLWljb24tbWQgaWNvbk5hbWU9XCJpY29uLWNoZWNrLWNpcmNsZVwiPjwvaXVzLWljb24tbWQ+XHJcbiAgPHNwYW4+e3sgbGFiZWxTdWNjZXNzIH19PC9zcGFuPlxyXG4gIH1cclxuICBAY2FzZSAoJ2Vycm9yJykge1xyXG4gIDxpdXMtaWNvbi1tZCBpY29uTmFtZT1cImljb24tZXJyb3JcIj48L2l1cy1pY29uLW1kPlxyXG4gIDxzcGFuPnt7IGxhYmVsRXJyb3IgfX08L3NwYW4+XHJcbiAgfVxyXG4gIEBkZWZhdWx0IHtcclxuICA8c3Bhbj57eyBsYWJlbERlZmF1bHQgfX08L3NwYW4+XHJcbiAgfVxyXG4gIH1cclxuPC9idXR0b24+Il19
|