@litigiovirtual/ius-design-components 1.0.70 → 1.0.71
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 +80 -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 +84 -18
- package/fesm2022/litigiovirtual-ius-design-components.mjs.map +1 -1
- package/lib/button-dynamic/button-dynamic.component.d.ts +19 -8
- package/package.json +1 -1
|
@@ -1,48 +1,109 @@
|
|
|
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 = 'Guardar';
|
|
9
|
+
this.labelSuccess = 'Guardado';
|
|
10
|
+
this.labelError = 'Error';
|
|
9
11
|
this.disabled = false;
|
|
10
12
|
this.loading = false;
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.autoResetDelay = 3000;
|
|
13
|
+
this.autoReset = true;
|
|
14
|
+
this.autoResetDelay = 1500;
|
|
14
15
|
this.buttonClicked = new EventEmitter();
|
|
16
|
+
this.state = 'default';
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
ngOnChanges(changes) {
|
|
19
|
+
// 1) disabled manda todo a 'disabled'
|
|
20
|
+
if (this.disabled) {
|
|
21
|
+
this.setState('disabled');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// 2) loading gobierna mientras es true
|
|
25
|
+
if (changes['loading']) {
|
|
26
|
+
if (this.loading) {
|
|
27
|
+
this.clearTimer();
|
|
28
|
+
this.setState('loading');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// loading → false: mirar result
|
|
33
|
+
this.applyResultState();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// 3) Si cambió 'result' y no estamos cargando, aplicar
|
|
38
|
+
if (changes['result'] && !this.loading) {
|
|
39
|
+
this.applyResultState();
|
|
40
|
+
}
|
|
41
|
+
// 4) fallback
|
|
42
|
+
if (!this.loading && !this.result) {
|
|
43
|
+
this.setState('default');
|
|
19
44
|
}
|
|
20
45
|
}
|
|
21
|
-
|
|
22
|
-
|
|
46
|
+
applyResultState() {
|
|
47
|
+
if (this.result === 'success') {
|
|
48
|
+
this.setState('success');
|
|
49
|
+
this.armAutoReset();
|
|
50
|
+
}
|
|
51
|
+
else if (this.result === 'error') {
|
|
52
|
+
this.setState('error');
|
|
53
|
+
this.armAutoReset();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.setState('default');
|
|
57
|
+
}
|
|
23
58
|
}
|
|
24
|
-
|
|
25
|
-
|
|
59
|
+
armAutoReset() {
|
|
60
|
+
this.clearTimer();
|
|
61
|
+
if (!this.autoReset)
|
|
62
|
+
return;
|
|
63
|
+
this.resetTimer = setTimeout(() => {
|
|
64
|
+
this.setState('default');
|
|
65
|
+
}, this.autoResetDelay);
|
|
66
|
+
}
|
|
67
|
+
clearTimer() {
|
|
68
|
+
if (this.resetTimer) {
|
|
69
|
+
clearTimeout(this.resetTimer);
|
|
70
|
+
this.resetTimer = null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
setState(s) {
|
|
74
|
+
this.state = s;
|
|
75
|
+
}
|
|
76
|
+
onClick() {
|
|
77
|
+
if (this.state === 'loading' || this.state === 'disabled')
|
|
78
|
+
return;
|
|
79
|
+
this.buttonClicked.emit();
|
|
80
|
+
}
|
|
81
|
+
ngOnDestroy() {
|
|
82
|
+
this.clearTimer();
|
|
26
83
|
}
|
|
27
84
|
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: {
|
|
85
|
+
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
86
|
}
|
|
30
87
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonDynamicComponent, decorators: [{
|
|
31
88
|
type: Component,
|
|
32
|
-
args: [{ selector: 'ius-button-dynamic', standalone: true, imports: [CommonModule, LoadingCircleComponent, IconMdComponent], template: "<button \
|
|
33
|
-
}], propDecorators: {
|
|
89
|
+
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"] }]
|
|
90
|
+
}], propDecorators: { labelDefault: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], labelSuccess: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], labelError: [{
|
|
34
95
|
type: Input
|
|
35
96
|
}], disabled: [{
|
|
36
97
|
type: Input
|
|
37
98
|
}], loading: [{
|
|
38
99
|
type: Input
|
|
39
|
-
}],
|
|
100
|
+
}], result: [{
|
|
40
101
|
type: Input
|
|
41
|
-
}],
|
|
102
|
+
}], autoReset: [{
|
|
42
103
|
type: Input
|
|
43
104
|
}], autoResetDelay: [{
|
|
44
105
|
type: Input
|
|
45
106
|
}], buttonClicked: [{
|
|
46
107
|
type: Output
|
|
47
108
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBWXBGLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFTVyxpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QixpQkFBWSxHQUFHLFVBQVUsQ0FBQztRQUMxQixlQUFVLEdBQUcsT0FBTyxDQUFDO1FBRXJCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdoQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXJCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVuRCxVQUFLLEdBQWdCLFNBQVMsQ0FBQztLQXlFaEM7SUF0RUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFD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Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEljb25NZENvbXBvbmVudCB9IGZyb20gJy4uL2ljb24tbWQvaWNvbi1tZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkaW5nQ2lyY2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy1jaXJjbGUvbG9hZGluZy1jaXJjbGUuY29tcG9uZW50JztcclxuXHJcbnR5cGUgQnV0dG9uUmVzdWx0ID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8IHVuZGVmaW5lZDtcclxudHlwZSBCdXR0b25TdGF0ZSA9ICdkZWZhdWx0JyB8ICdsb2FkaW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnZGlzYWJsZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpdXMtYnV0dG9uLWR5bmFtaWMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTG9hZGluZ0NpcmNsZUNvbXBvbmVudCwgSWNvbk1kQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi1keW5hbWljLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25EeW5hbWljQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBsYWJlbERlZmF1bHQgPSAnR3VhcmRhcic7XHJcbiAgQElucHV0KCkgbGFiZWxTdWNjZXNzID0gJ0d1YXJkYWRvJztcclxuICBASW5wdXQoKSBsYWJlbEVycm9yID0gJ0Vycm9yJztcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcmVzdWx0OiBCdXR0b25SZXN1bHQ7XHJcblxyXG4gIEBJbnB1dCgpIGF1dG9SZXNldCA9IHRydWU7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2V0RGVsYXkgPSAxNTAwO1xyXG5cclxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgc3RhdGU6IEJ1dHRvblN0YXRlID0gJ2RlZmF1bHQnO1xyXG4gIHByaXZhdGUgcmVzZXRUaW1lcjogYW55O1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvLyAxKSBkaXNhYmxlZCBtYW5kYSB0b2RvIGEgJ2Rpc2FibGVkJ1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIpIGxvYWRpbmcgZ29iaWVybmEgbWllbnRyYXMgZXMgdHJ1ZVxyXG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgnbG9hZGluZycpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsb2FkaW5nIOKGkiBmYWxzZTogbWlyYXIgcmVzdWx0XHJcbiAgICAgICAgdGhpcy5hcHBseVJlc3VsdFN0YXRlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMykgU2kgY2FtYmnDsyAncmVzdWx0JyB5IG5vIGVzdGFtb3MgY2FyZ2FuZG8sIGFwbGljYXJcclxuICAgIGlmIChjaGFuZ2VzWydyZXN1bHQnXSAmJiAhdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlSZXN1bHRTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQpIGZhbGxiYWNrXHJcbiAgICBpZiAoIXRoaXMubG9hZGluZyAmJiAhdGhpcy5yZXN1bHQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGVmYXVsdCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlSZXN1bHRTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoJ3N1Y2Nlc3MnKTtcclxuICAgICAgdGhpcy5hcm1BdXRvUmVzZXQoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZXN1bHQgPT09ICdlcnJvcicpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZXJyb3InKTtcclxuICAgICAgdGhpcy5hcm1BdXRvUmVzZXQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoJ2RlZmF1bHQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFybUF1dG9SZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJUaW1lcigpO1xyXG4gICAgaWYgKCF0aGlzLmF1dG9SZXNldCkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZXNldFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoJ2RlZmF1bHQnKTtcclxuICAgIH0sIHRoaXMuYXV0b1Jlc2V0RGVsYXkpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJUaW1lcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlc2V0VGltZXIpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzZXRUaW1lcik7XHJcbiAgICAgIHRoaXMucmVzZXRUaW1lciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTdGF0ZShzOiBCdXR0b25TdGF0ZSkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IHM7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrKCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdsb2FkaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnZGlzYWJsZWQnKSByZXR1cm47XHJcbiAgICB0aGlzLmJ1dHRvbkNsaWNrZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGltZXIoKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvbiBjbGFzcz1cIml1cy1idG5cIiBbYXR0ci5kYXRhLXN0YXRlXT1cInN0YXRlXCIgW2Rpc2FibGVkXT1cInN0YXRlID09PSAnZGlzYWJsZWQnIHx8IHN0YXRlID09PSAnbG9hZGluZydcIlxyXG4gIChjbGljayk9XCJvbkNsaWNrKClcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cclxuICBAc3dpdGNoIChzdGF0ZSkge1xyXG4gIEBjYXNlICgnbG9hZGluZycpIHtcclxuICA8aXVzLWxvYWRpbmctY2lyY2xlPjwvaXVzLWxvYWRpbmctY2lyY2xlPlxyXG4gIH1cclxuICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XHJcbiAgPGl1cy1pY29uLW1kIGljb25OYW1lPVwiaWNvbi1jaGVjay1jaXJjbGVcIj48L2l1cy1pY29uLW1kPlxyXG4gIDxzcGFuPnt7IGxhYmVsU3VjY2VzcyB9fTwvc3Bhbj5cclxuICB9XHJcbiAgQGNhc2UgKCdlcnJvcicpIHtcclxuICA8aXVzLWljb24tbWQgaWNvbk5hbWU9XCJpY29uLWVycm9yXCI+PC9pdXMtaWNvbi1tZD5cclxuICA8c3Bhbj57eyBsYWJlbEVycm9yIH19PC9zcGFuPlxyXG4gIH1cclxuICBAZGVmYXVsdCB7XHJcbiAgPHNwYW4+e3sgbGFiZWxEZWZhdWx0IH19PC9zcGFuPlxyXG4gIH1cclxuICB9XHJcbjwvYnV0dG9uPiJdfQ==
|