@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.
@@ -1,48 +1,115 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { LoadingCircleComponent } from "../loading-circle/loading-circle.component";
4
- import { IconMdComponent } from "../icon-md/icon-md.component";
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.textButton = 'Label';
8
+ this.labelDefault = 'Label';
9
9
  this.disabled = false;
10
10
  this.loading = false;
11
- this.success = false;
12
- this.error = false;
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
- onClick() {
17
- if (!this.disabled && !this.loading) {
18
- this.buttonClicked.emit();
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
- get showSpinner() {
22
- return this.loading;
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
- get showSuccess() {
25
- return this.success && !this.loading;
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: { textButton: "textButton", disabled: "disabled", loading: "loading", success: "success", error: "error", autoResetDelay: "autoResetDelay" }, outputs: { buttonClicked: "buttonClicked" }, ngImport: i0, template: "<button \r\n [disabled]=\"disabled\"\r\n (click)=\"onClick()\"\r\n class=\"ius-btn\"\r\n [class.loading]=\"loading\"\r\n [class.success]=\"success\"\r\n [class.error]=\"error\"\r\n>\r\n@if (loading) {\r\n <ius-loading-circle></ius-loading-circle>\r\n }\r\n @else if (success && !loading) {\r\n <ius-icon-md iconName=\"icon-check-circle\"></ius-icon-md>\r\n {{ textButton }}\r\n }\r\n @else if (error && !loading) {\r\n <ius-icon-md iconName=\"icon-error\"></ius-icon-md>\r\n {{ textButton }}\r\n }\r\n @else {\r\n {{ textButton }}\r\n }\r\n</button>\r\n", 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;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}.ius-btn:hover:not(:disabled){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}button.loading{background-color:#0581bc}button.success{background-color:#7caf25}button.error{background-color:#db2e2a}\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"] }] }); }
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 \r\n [disabled]=\"disabled\"\r\n (click)=\"onClick()\"\r\n class=\"ius-btn\"\r\n [class.loading]=\"loading\"\r\n [class.success]=\"success\"\r\n [class.error]=\"error\"\r\n>\r\n@if (loading) {\r\n <ius-loading-circle></ius-loading-circle>\r\n }\r\n @else if (success && !loading) {\r\n <ius-icon-md iconName=\"icon-check-circle\"></ius-icon-md>\r\n {{ textButton }}\r\n }\r\n @else if (error && !loading) {\r\n <ius-icon-md iconName=\"icon-error\"></ius-icon-md>\r\n {{ textButton }}\r\n }\r\n @else {\r\n {{ textButton }}\r\n }\r\n</button>\r\n", 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;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}.ius-btn:hover:not(:disabled){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}button.loading{background-color:#0581bc}button.success{background-color:#7caf25}button.error{background-color:#db2e2a}\n"] }]
33
- }], propDecorators: { textButton: [{
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
- }], success: [{
106
+ }], result: [{
40
107
  type: Input
41
- }], error: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVMvRCxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBUVcsZUFBVSxHQUFXLE9BQU8sQ0FBQztRQUM3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixVQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzdCLGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7S0FlbEU7SUFiQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFHLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDOytHQXJCVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpUkNabkMsMGtCQXVCQSxxZ0VEZlksWUFBWSwrQkFBRSxzQkFBc0IsaUZBQUUsZUFBZTs7NEZBSXBELHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsQ0FBQzs4QkFLdkQsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvYWRpbmdDaXJjbGVDb21wb25lbnQgfSBmcm9tIFwiLi4vbG9hZGluZy1jaXJjbGUvbG9hZGluZy1jaXJjbGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEljb25NZENvbXBvbmVudCB9IGZyb20gXCIuLi9pY29uLW1kL2ljb24tbWQuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2l1cy1idXR0b24tZHluYW1pYycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMb2FkaW5nQ2lyY2xlQ29tcG9uZW50LCBJY29uTWRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tZHluYW1pYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2J1dHRvbi1keW5hbWljLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnV0dG9uRHluYW1pY0NvbXBvbmVudCAge1xyXG4gIEBJbnB1dCgpIHRleHRCdXR0b246IHN0cmluZyA9ICdMYWJlbCc7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2V0RGVsYXk6IG51bWJlciA9IDMwMDA7IFxyXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIG9uQ2xpY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubG9hZGluZyApIHtcclxuICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzaG93U3Bpbm5lcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd1N1Y2Nlc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdWNjZXNzICYmICF0aGlzLmxvYWRpbmc7XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b24gXHJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAoY2xpY2spPVwib25DbGljaygpXCJcclxuICBjbGFzcz1cIml1cy1idG5cIlxyXG4gIFtjbGFzcy5sb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gIFtjbGFzcy5zdWNjZXNzXT1cInN1Y2Nlc3NcIlxyXG4gIFtjbGFzcy5lcnJvcl09XCJlcnJvclwiXHJcbj5cclxuQGlmIChsb2FkaW5nKSB7XHJcbiAgICA8aXVzLWxvYWRpbmctY2lyY2xlPjwvaXVzLWxvYWRpbmctY2lyY2xlPlxyXG4gIH1cclxuICBAZWxzZSBpZiAoc3VjY2VzcyAmJiAhbG9hZGluZykge1xyXG4gICAgPGl1cy1pY29uLW1kIGljb25OYW1lPVwiaWNvbi1jaGVjay1jaXJjbGVcIj48L2l1cy1pY29uLW1kPlxyXG4gICAge3sgdGV4dEJ1dHRvbiB9fVxyXG4gIH1cclxuICBAZWxzZSBpZiAoZXJyb3IgJiYgIWxvYWRpbmcpIHtcclxuICAgIDxpdXMtaWNvbi1tZCBpY29uTmFtZT1cImljb24tZXJyb3JcIj48L2l1cy1pY29uLW1kPlxyXG4gICAge3sgdGV4dEJ1dHRvbiB9fVxyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICB7eyB0ZXh0QnV0dG9uIH19XHJcbiAgfVxyXG48L2J1dHRvbj5cclxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXVzLWRlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvYnV0dG9uLWR5bmFtaWMvYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0IsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBWXBGLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFTVyxpQkFBWSxHQUFHLE9BQU8sQ0FBQztRQUl2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUVyQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbkQsVUFBSyxHQUFnQixTQUFTLENBQUM7S0FrRmhDO0lBL0VDLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMs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QUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxDQUFDOzhCQU12RCxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSWNvbk1kQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi1tZC9pY29uLW1kLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvYWRpbmdDaXJjbGVDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLWNpcmNsZS9sb2FkaW5nLWNpcmNsZS5jb21wb25lbnQnO1xyXG5cclxudHlwZSBCdXR0b25SZXN1bHQgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgdW5kZWZpbmVkO1xyXG50eXBlIEJ1dHRvblN0YXRlID0gJ2RlZmF1bHQnIHwgJ2xvYWRpbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdkaXNhYmxlZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2l1cy1idXR0b24tZHluYW1pYycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMb2FkaW5nQ2lyY2xlQ29tcG9uZW50LCBJY29uTWRDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tZHluYW1pYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLWR5bmFtaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1dHRvbkR5bmFtaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsRGVmYXVsdCA9ICdMYWJlbCc7XHJcbiAgQElucHV0KCkgbGFiZWxTdWNjZXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsRXJyb3I/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJlc3VsdDogQnV0dG9uUmVzdWx0O1xyXG5cclxuICBASW5wdXQoKSBhdXRvUmVzZXQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNldERlbGF5ID0gMTUwMDtcclxuXHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHN0YXRlOiBCdXR0b25TdGF0ZSA9ICdkZWZhdWx0JztcclxuICBwcml2YXRlIHJlc2V0VGltZXI6IGFueTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMubGFiZWxTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMubGFiZWxTdWNjZXNzID0gdGhpcy5sYWJlbERlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMubGFiZWxFcnJvcikge1xyXG4gICAgICB0aGlzLmxhYmVsRXJyb3IgPSB0aGlzLmxhYmVsRGVmYXVsdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIDEpIGRpc2FibGVkIG1hbmRhIHRvZG8gYSAnZGlzYWJsZWQnXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMikgbG9hZGluZyBnb2JpZXJuYSBtaWVudHJhcyBlcyB0cnVlXHJcbiAgICBpZiAoY2hhbmdlc1snbG9hZGluZyddKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKCdsb2FkaW5nJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWRpbmcg4oaSIGZhbHNlOiBtaXJhciByZXN1bHRcclxuICAgICAgICB0aGlzLmFwcGx5UmVzdWx0U3RhdGUoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAzKSBTaSBjYW1iacOzICdyZXN1bHQnIHkgbm8gZXN0YW1vcyBjYXJnYW5kbywgYXBsaWNhclxyXG4gICAgaWYgKGNoYW5nZXNbJ3Jlc3VsdCddICYmICF0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5hcHBseVJlc3VsdFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gNCkgZmFsbGJhY2tcclxuICAgIGlmICghdGhpcy5sb2FkaW5nICYmICF0aGlzLnJlc3VsdCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdkZWZhdWx0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVJlc3VsdFN0YXRlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVzdWx0ID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnc3VjY2VzcycpO1xyXG4gICAgICB0aGlzLmFybUF1dG9SZXNldCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKCdlcnJvcicpO1xyXG4gICAgICB0aGlzLmFybUF1dG9SZXNldCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGVmYXVsdCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXJtQXV0b1Jlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclRpbWVyKCk7XHJcbiAgICBpZiAoIXRoaXMuYXV0b1Jlc2V0KSByZXR1cm47XHJcbiAgICB0aGlzLnJlc2V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSgnZGVmYXVsdCcpO1xyXG4gICAgfSwgdGhpcy5hdXRvUmVzZXREZWxheSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclRpbWVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVzZXRUaW1lcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNldFRpbWVyKTtcclxuICAgICAgdGhpcy5yZXNldFRpbWVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN0YXRlKHM6IEJ1dHRvblN0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gcztcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdkaXNhYmxlZCcpIHJldHVybjtcclxuICAgIHRoaXMuYnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJUaW1lcigpO1xyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIGNsYXNzPVwiaXVzLWJ0blwiIFthdHRyLmRhdGEtc3RhdGVdPVwic3RhdGVcIiBbZGlzYWJsZWRdPVwic3RhdGUgPT09ICdkaXNhYmxlZCcgfHwgc3RhdGUgPT09ICdsb2FkaW5nJ1wiXHJcbiAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxyXG4gIEBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgQGNhc2UgKCdsb2FkaW5nJykge1xyXG4gIDxpdXMtbG9hZGluZy1jaXJjbGU+PC9pdXMtbG9hZGluZy1jaXJjbGU+XHJcbiAgfVxyXG4gIEBjYXNlICgnc3VjY2VzcycpIHtcclxuICA8aXVzLWljb24tbWQgaWNvbk5hbWU9XCJpY29uLWNoZWNrLWNpcmNsZVwiPjwvaXVzLWljb24tbWQ+XHJcbiAgPHNwYW4+e3sgbGFiZWxTdWNjZXNzIH19PC9zcGFuPlxyXG4gIH1cclxuICBAY2FzZSAoJ2Vycm9yJykge1xyXG4gIDxpdXMtaWNvbi1tZCBpY29uTmFtZT1cImljb24tZXJyb3JcIj48L2l1cy1pY29uLW1kPlxyXG4gIDxzcGFuPnt7IGxhYmVsRXJyb3IgfX08L3NwYW4+XHJcbiAgfVxyXG4gIEBkZWZhdWx0IHtcclxuICA8c3Bhbj57eyBsYWJlbERlZmF1bHQgfX08L3NwYW4+XHJcbiAgfVxyXG4gIH1cclxuPC9idXR0b24+Il19