@seniorsistemas/angular-components 19.9.1 → 19.9.2-fix-sds-586-cbad4edd
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/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs +1 -1
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +39 -31
- package/esm2022/spotlight/lib/spotlight/spotlight-overlay/rect-stability.mjs +61 -0
- package/esm2022/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.mjs +91 -21
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +38 -30
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +150 -20
- package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
- package/fieldset/lib/fieldset/fieldset.component.d.ts +15 -10
- package/package.json +1 -1
- package/spotlight/README.md +28 -0
- package/spotlight/lib/spotlight/spotlight-overlay/rect-stability.d.ts +32 -0
- package/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.d.ts +33 -0
package/esm2022/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs
CHANGED
|
@@ -9,7 +9,7 @@ export class FieldsetComponent {
|
|
|
9
9
|
group = input.required();
|
|
10
10
|
errorMessages = input();
|
|
11
11
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldsetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FieldsetComponent, isStandalone: true, selector: "ng-component", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, errorMessages: { classPropertyName: "errorMessages", publicName: "errorMessages", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let _config = config();\n<s-fieldset\n [toggleable]=\"true\"\n (onBeforeToggle)=\"_config.beforeToggle ? _config.beforeToggle($event) : null\"\n (onAfterToggle)=\"_config.afterToggle ? _config.afterToggle($event) : null\"\n [legend]=\"_config.header ? _config.header : ''\"\n>\n @for (conf of _config.configs; let i = $index; track i) {\n <ng-container\n *sDynamicForm=\"{ id: id(), config: conf, group: group(), errorMessages: errorMessages() }\"\n ></ng-container>\n }\n</s-fieldset>\n\n", dependencies: [{ kind: "directive", type: DynamicFormDirective, selector: "[sDynamicForm]", inputs: ["sDynamicForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "component", type: i1.FieldsetComponent, selector: "s-fieldset", inputs: ["legend", "toggleable", "icon", "destroyOnHide"], outputs: ["beforeToggle", "afterToggle"] }] });
|
|
12
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FieldsetComponent, isStandalone: true, selector: "ng-component", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, errorMessages: { classPropertyName: "errorMessages", publicName: "errorMessages", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@let _config = config();\n<s-fieldset\n [toggleable]=\"true\"\n (onBeforeToggle)=\"_config.beforeToggle ? _config.beforeToggle($event) : null\"\n (onAfterToggle)=\"_config.afterToggle ? _config.afterToggle($event) : null\"\n [legend]=\"_config.header ? _config.header : ''\"\n>\n @for (conf of _config.configs; let i = $index; track i) {\n <ng-container\n *sDynamicForm=\"{ id: id(), config: conf, group: group(), errorMessages: errorMessages() }\"\n ></ng-container>\n }\n</s-fieldset>\n\n", dependencies: [{ kind: "directive", type: DynamicFormDirective, selector: "[sDynamicForm]", inputs: ["sDynamicForm"] }, { kind: "ngmodule", type: FieldsetModule }, { kind: "component", type: i1.FieldsetComponent, selector: "s-fieldset", inputs: ["legend", "toggleable", "icon", "destroyOnHide", "active"], outputs: ["beforeToggle", "afterToggle", "activeChange"] }] });
|
|
13
13
|
}
|
|
14
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldsetComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
2
|
-
import { Component,
|
|
3
|
-
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
4
|
-
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
2
|
+
import { Component, computed, contentChildren, EventEmitter, input, model, Output } from '@angular/core';
|
|
5
3
|
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
5
|
+
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
/**
|
|
8
8
|
* @description Componente de fieldset com legenda, ícone configurável e suporte a
|
|
@@ -20,33 +20,52 @@ import * as i0 from "@angular/core";
|
|
|
20
20
|
*/
|
|
21
21
|
export class FieldsetComponent {
|
|
22
22
|
/** @description Texto exibido como título do fieldset. @default '' */
|
|
23
|
-
legend = '';
|
|
23
|
+
legend = input('');
|
|
24
24
|
/** @description Habilita o botão de toggle que permite recolher e expandir o conteúdo. @default false */
|
|
25
|
-
toggleable = false;
|
|
25
|
+
toggleable = input(false);
|
|
26
26
|
/** @description Classe de ícone exibida ao lado da legenda (ex.: `'fas fa-cog'`). @default '' */
|
|
27
|
-
icon = '';
|
|
28
|
-
/** @description Quando `true`, remove o conteúdo do DOM ao recolher o fieldset. @default
|
|
29
|
-
destroyOnHide =
|
|
30
|
-
templateDirectives;
|
|
31
|
-
headerTemplate
|
|
27
|
+
icon = input('');
|
|
28
|
+
/** @description Quando `true`, remove o conteúdo do DOM ao recolher o fieldset. @default false */
|
|
29
|
+
destroyOnHide = input(false);
|
|
30
|
+
templateDirectives = contentChildren(TemplateDirective);
|
|
31
|
+
headerTemplate = computed(() => {
|
|
32
|
+
return this.templateDirectives()?.find((template) => template.type === 'header')?.template;
|
|
33
|
+
});
|
|
34
|
+
bodyTemplate = computed(() => {
|
|
35
|
+
return this.templateDirectives()?.find((template) => template.type === 'body')?.template;
|
|
36
|
+
});
|
|
32
37
|
/** @description Emitido imediatamente antes da animação de toggle iniciar, com o estado atual. */
|
|
33
38
|
beforeToggle = new EventEmitter();
|
|
34
39
|
/** @description Emitido após a animação de toggle concluir, com o novo estado. */
|
|
35
40
|
afterToggle = new EventEmitter();
|
|
36
|
-
active = true;
|
|
41
|
+
active = model(true);
|
|
42
|
+
displayType = 'block';
|
|
37
43
|
ngAfterViewInit() {
|
|
38
|
-
|
|
44
|
+
const hasBodyTemplate = this.bodyTemplate();
|
|
45
|
+
if (!hasBodyTemplate && this.destroyOnHide()) {
|
|
46
|
+
console.warn('FieldsetComponent: O uso de destroyOnHide=true requer um template de corpo definido com sTemplate="body".');
|
|
47
|
+
}
|
|
39
48
|
}
|
|
40
49
|
toggleActive(originalEvent) {
|
|
41
|
-
if (!this.toggleable) {
|
|
50
|
+
if (!this.toggleable()) {
|
|
42
51
|
return;
|
|
43
52
|
}
|
|
44
|
-
this.beforeToggle.next({ collapsed: this.active, originalEvent });
|
|
45
|
-
this.active
|
|
46
|
-
this.afterToggle.next({ collapsed: this.active, originalEvent });
|
|
53
|
+
this.beforeToggle.next({ collapsed: this.active(), originalEvent });
|
|
54
|
+
this.active.set(!this.active());
|
|
55
|
+
this.afterToggle.next({ collapsed: this.active(), originalEvent });
|
|
56
|
+
}
|
|
57
|
+
handleAnimationStart(event) {
|
|
58
|
+
if (event.toState === 'open') {
|
|
59
|
+
this.displayType = 'block';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
handleAnimationDone(event) {
|
|
63
|
+
if (event.toState === 'closed') {
|
|
64
|
+
this.displayType = 'none';
|
|
65
|
+
}
|
|
47
66
|
}
|
|
48
67
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldsetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FieldsetComponent, isStandalone: true, selector: "s-fieldset", inputs: { legend: "legend", toggleable: "toggleable", icon: "icon", destroyOnHide: "destroyOnHide" }, outputs: { beforeToggle: "beforeToggle", afterToggle: "afterToggle" }, queries: [{ propertyName: "templateDirectives", predicate: TemplateDirective }], ngImport: i0, template: "<fieldset\r\n class=\"
|
|
68
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FieldsetComponent, isStandalone: true, selector: "s-fieldset", inputs: { legend: { classPropertyName: "legend", publicName: "legend", isSignal: true, isRequired: false, transformFunction: null }, toggleable: { classPropertyName: "toggleable", publicName: "toggleable", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, destroyOnHide: { classPropertyName: "destroyOnHide", publicName: "destroyOnHide", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { beforeToggle: "beforeToggle", afterToggle: "afterToggle", active: "activeChange" }, queries: [{ propertyName: "templateDirectives", predicate: TemplateDirective, isSignal: true }], ngImport: i0, template: "<fieldset\r\n class=\"mb-[10px] min-h-[4.5em] w-full min-w-0 rounded-xbig border border-grayscale-20 bg-grayscale-0 px-2 py-1.5\"\r\n>\r\n <legend\r\n class=\"ml-4 flex select-none items-center gap-1 px-1 font-open-sans text-sm font-bold text-grayscale-90\"\r\n [class.cursor-pointer]=\"toggleable()\"\r\n (sInteractiveContent)=\"toggleActive($event)\"\r\n >\r\n @if (toggleable()) {\r\n @if (active()) {\r\n <i class=\"fas fa-minus\"></i>\r\n } @else {\r\n <i class=\"fas fa-plus\"></i>\r\n }\r\n }\r\n @let _headerTemplate = headerTemplate();\r\n @if (_headerTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_headerTemplate\"></ng-container>\r\n } @else {\r\n @if (icon()) {\r\n <i [class]=\"icon()\"></i>\r\n }\r\n {{ legend() }}\r\n }\r\n </legend>\r\n @if (destroyOnHide() ? (toggleable() ? active() : true) : true) {\r\n <div\r\n [class.hidden]=\"displayType === 'none'\"\r\n [class.block]=\"displayType === 'block'\"\r\n [@toggleAnimation]=\"destroyOnHide() ? null : active() ? 'open' : 'closed'\"\r\n (@toggleAnimation.start)=\"handleAnimationStart($event)\"\r\n (@toggleAnimation.done)=\"handleAnimationDone($event)\"\r\n >\r\n @let _bodyTemplate = bodyTemplate();\r\n @if (_bodyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_bodyTemplate\"></ng-container>\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </div>\r\n }\r\n</fieldset>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
50
69
|
trigger('toggleAnimation', [
|
|
51
70
|
transition(':enter', [
|
|
52
71
|
style({ opacity: 0, height: 0 }),
|
|
@@ -78,21 +97,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
78
97
|
state('closed', style({ opacity: 0, height: 0 })),
|
|
79
98
|
transition('open <=> closed', animate('300ms ease')),
|
|
80
99
|
]),
|
|
81
|
-
], standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet], template: "<fieldset\r\n class=\"
|
|
82
|
-
}], propDecorators: {
|
|
83
|
-
type: Input
|
|
84
|
-
}], toggleable: [{
|
|
85
|
-
type: Input
|
|
86
|
-
}], icon: [{
|
|
87
|
-
type: Input
|
|
88
|
-
}], destroyOnHide: [{
|
|
89
|
-
type: Input
|
|
90
|
-
}], templateDirectives: [{
|
|
91
|
-
type: ContentChildren,
|
|
92
|
-
args: [TemplateDirective]
|
|
93
|
-
}], beforeToggle: [{
|
|
100
|
+
], standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet], template: "<fieldset\r\n class=\"mb-[10px] min-h-[4.5em] w-full min-w-0 rounded-xbig border border-grayscale-20 bg-grayscale-0 px-2 py-1.5\"\r\n>\r\n <legend\r\n class=\"ml-4 flex select-none items-center gap-1 px-1 font-open-sans text-sm font-bold text-grayscale-90\"\r\n [class.cursor-pointer]=\"toggleable()\"\r\n (sInteractiveContent)=\"toggleActive($event)\"\r\n >\r\n @if (toggleable()) {\r\n @if (active()) {\r\n <i class=\"fas fa-minus\"></i>\r\n } @else {\r\n <i class=\"fas fa-plus\"></i>\r\n }\r\n }\r\n @let _headerTemplate = headerTemplate();\r\n @if (_headerTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_headerTemplate\"></ng-container>\r\n } @else {\r\n @if (icon()) {\r\n <i [class]=\"icon()\"></i>\r\n }\r\n {{ legend() }}\r\n }\r\n </legend>\r\n @if (destroyOnHide() ? (toggleable() ? active() : true) : true) {\r\n <div\r\n [class.hidden]=\"displayType === 'none'\"\r\n [class.block]=\"displayType === 'block'\"\r\n [@toggleAnimation]=\"destroyOnHide() ? null : active() ? 'open' : 'closed'\"\r\n (@toggleAnimation.start)=\"handleAnimationStart($event)\"\r\n (@toggleAnimation.done)=\"handleAnimationDone($event)\"\r\n >\r\n @let _bodyTemplate = bodyTemplate();\r\n @if (_bodyTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_bodyTemplate\"></ng-container>\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </div>\r\n }\r\n</fieldset>\r\n", styles: [":host{display:block}\n"] }]
|
|
101
|
+
}], propDecorators: { beforeToggle: [{
|
|
94
102
|
type: Output
|
|
95
103
|
}], afterToggle: [{
|
|
96
104
|
type: Output
|
|
97
105
|
}] } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpZWxkc2V0L3NyYy9saWIvZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpZWxkc2V0L3NyYy9saWIvZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQXVCSCxNQUFNLE9BQU8saUJBQWlCO0lBQzFCLHNFQUFzRTtJQUM3RCxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLHlHQUF5RztJQUNoRyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLGlHQUFpRztJQUN4RixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25CLGlHQUFpRztJQUN4RixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ2Usa0JBQWtCLENBQTJDO0lBQzFHLGNBQWMsQ0FBK0I7SUFDN0Msa0dBQWtHO0lBQ3hGLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztJQUM1RCxrRkFBa0Y7SUFDeEUsV0FBVyxHQUFHLElB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TyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDakQsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNqRCxVQUFVLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUN2RCxDQUFDO3FCQUNMLGNBQ1csSUFBSSxXQUNQLENBQUMsMkJBQTJCLEVBQUUsZ0JBQWdCLENBQUM7OEJBSS9DLE1BQU07c0JBQWQsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUN1QyxrQkFBa0I7c0JBQTlELGVBQWU7dUJBQUMsaUJBQWlCO2dCQUd4QixZQUFZO3NCQUFyQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RlbXBsYXRlJztcclxuaW1wb3J0IHsgRmllbGRTZXRUb2dnbGUgfSBmcm9tICcuL2ZpZWxkc2V0Lm1vZGVscyc7XHJcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW50ZXJhY3RpdmUtY29udGVudCc7XHJcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGZpZWxkc2V0IGNvbSBsZWdlbmRhLCDDrWNvbmUgY29uZmlndXLDoXZlbCBlIHN1cG9ydGUgYVxyXG4gKiB0b2dnbGUgKHJlY29saGVyL2V4cGFuZGlyKSBjb20gYW5pbWHDp8Ojby4gU3Vwb3J0YSB0ZW1wbGF0ZSBwZXJzb25hbGl6YWRvIHBhcmEgb1xyXG4gKiBjYWJlw6dhbGhvIHZpYSBkaXJldGl2YSBgVGVtcGxhdGVEaXJlY3RpdmVgIGNvbSB0aXBvIGAnaGVhZGVyJ2AuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHMtZmllbGRzZXQgbGVnZW5kPVwiRGFkb3MgcGVzc29haXNcIiBbdG9nZ2xlYWJsZV09XCJ0cnVlXCI+XHJcbiAqICAgPHA+Q29udGXDumRvIGRvIGZpZWxkc2V0PC9wPlxyXG4gKiA8L3MtZmllbGRzZXQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1maWVsZHNldCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmllbGRzZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCd0b2dnbGVBbmltYXRpb24nLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgaGVpZ2h0OiAnKicgfSksXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBvcGFjaXR5OiAwLCBoZWlnaHQ6IDAgfSkpLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgc3RhdGUoJ29wZW4nLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonIH0pKSxcclxuICAgICAgICAgICAgc3RhdGUoJ2Nsb3NlZCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwIH0pKSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignb3BlbiA8PT4gY2xvc2VkJywgYW5pbWF0ZSgnMzAwbXMgZWFzZScpKSxcclxuICAgICAgICBdKSxcclxuICAgIF0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0ludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWVsZHNldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZXh0byBleGliaWRvIGNvbW8gdMOtdHVsbyBkbyBmaWVsZHNldC4gQGRlZmF1bHQgJycgKi9cclxuICAgIEBJbnB1dCgpIGxlZ2VuZCA9ICcnO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIGJvdMOjbyBkZSB0b2dnbGUgcXVlIHBlcm1pdGUgcmVjb2xoZXIgZSBleHBhbmRpciBvIGNvbnRlw7pkby4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIEBJbnB1dCgpIHRvZ2dsZWFibGUgPSBmYWxzZTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ2xhc3NlIGRlIMOtY29uZSBleGliaWRhIGFvIGxhZG8gZGEgbGVnZW5kYSAoZXguOiBgJ2ZhcyBmYS1jb2cnYCkuIEBkZWZhdWx0ICcnICovXHJcbiAgICBASW5wdXQoKSBpY29uID0gJyc7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFF1YW5kbyBgdHJ1ZWAsIHJlbW92ZSBvIGNvbnRlw7pkbyBkbyBET00gYW8gcmVjb2xoZXIgbyBmaWVsZHNldC4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gICAgQElucHV0KCkgZGVzdHJveU9uSGlkZSA9IHRydWU7XHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKSByZWFkb25seSB0ZW1wbGF0ZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT4gfCB1bmRlZmluZWQ7XHJcbiAgICBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBpbWVkaWF0YW1lbnRlIGFudGVzIGRhIGFuaW1hw6fDo28gZGUgdG9nZ2xlIGluaWNpYXIsIGNvbSBvIGVzdGFkbyBhdHVhbC4gKi9cclxuICAgIEBPdXRwdXQoKSBiZWZvcmVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPEZpZWxkU2V0VG9nZ2xlPigpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFww7NzIGEgYW5pbWHDp8OjbyBkZSB0b2dnbGUgY29uY2x1aXIsIGNvbSBvIG5vdm8gZXN0YWRvLiAqL1xyXG4gICAgQE91dHB1dCgpIGFmdGVyVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZFNldFRvZ2dsZT4oKTtcclxuICAgIGFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlRGlyZWN0aXZlcz8uZmluZCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLnR5cGUgPT09ICdoZWFkZXInKT8udGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQWN0aXZlKG9yaWdpbmFsRXZlbnQ6IFBvaW50ZXJFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMudG9nZ2xlYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYmVmb3JlVG9nZ2xlLm5leHQoeyBjb2xsYXBzZWQ6IHRoaXMuYWN0aXZlLCBvcmlnaW5hbEV2ZW50IH0pO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gIXRoaXMuYWN0aXZlO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJUb2dnbGUubmV4dCh7IGNvbGxhcHNlZDogdGhpcy5hY3RpdmUsIG9yaWdpbmFsRXZlbnQgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZpZWxkc2V0XHJcbiAgICBjbGFzcz1cImJnLWdyYXlzY2FsZS0wIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTIwIHJvdW5kZWQteGJpZyBtYi1bMTBweF0gbWluLWgtWzQuNWVtXSBweC0yIHB5LTEuNSB3LWZ1bGwgbWluLXctMFwiXHJcbj5cclxuICAgIDxsZWdlbmRcclxuICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtZ3JheXNjYWxlLTkwIGZvbnQtb3Blbi1zYW5zIHRleHQtc20gZm9udC1ib2xkIHB4LTEgZ2FwLTEgbWwtNCBzZWxlY3Qtbm9uZVwiXHJcbiAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cInRvZ2dsZWFibGVcIlxyXG4gICAgICAgIChzSW50ZXJhY3RpdmVDb250ZW50KT1cInRvZ2dsZUFjdGl2ZSgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgICBAaWYgKHRvZ2dsZWFibGUpIHtcclxuICAgICAgICAgICAgQGlmIChhY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXNcIj48L2k+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgQGlmIChpY29uKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB7eyBsZWdlbmQgfX1cclxuICAgICAgICB9XHJcbiAgICA8L2xlZ2VuZD5cclxuICAgIEBpZiAoZGVzdHJveU9uSGlkZSA/ICh0b2dnbGVhYmxlID8gYWN0aXZlIDogdHJ1ZSkgOiB0cnVlKSB7XHJcbiAgICAgICAgPGRpdiBbQHRvZ2dsZUFuaW1hdGlvbl09XCJkZXN0cm95T25IaWRlID8gbnVsbCA6IGFjdGl2ZSA/ICdvcGVuJyA6ICdjbG9zZWQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuPC9maWVsZHNldD5cclxuIl19
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpZWxkc2V0L3NyYy9saWIvZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2ZpZWxkc2V0L3NyYy9saWIvZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDckcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBR2hGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUF1QkgsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixzRUFBc0U7SUFDdEUsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQix5R0FBeUc7SUFDekcsVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixpR0FBaUc7SUFDakcsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixrR0FBa0c7SUFDbEcsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU3QixrQkFBa0IsR0FBRyxlQUFlLENBQUMsaUJBQWlC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QUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNqRCxVQUFVLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUN2RCxDQUFDO3FCQUNMLGNBQ1csSUFBSSxXQUNQLENBQUMsMkJBQTJCLEVBQUUsZ0JBQWdCLENBQUM7OEJBcUI5QyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25FdmVudCwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBpbnB1dCwgbW9kZWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW50ZXJhY3RpdmUtY29udGVudCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90ZW1wbGF0ZSc7XHJcbmltcG9ydCB7IEZpZWxkU2V0VG9nZ2xlIH0gZnJvbSAnLi9maWVsZHNldC5tb2RlbHMnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGZpZWxkc2V0IGNvbSBsZWdlbmRhLCDDrWNvbmUgY29uZmlndXLDoXZlbCBlIHN1cG9ydGUgYVxyXG4gKiB0b2dnbGUgKHJlY29saGVyL2V4cGFuZGlyKSBjb20gYW5pbWHDp8Ojby4gU3Vwb3J0YSB0ZW1wbGF0ZSBwZXJzb25hbGl6YWRvIHBhcmEgb1xyXG4gKiBjYWJlw6dhbGhvIHZpYSBkaXJldGl2YSBgVGVtcGxhdGVEaXJlY3RpdmVgIGNvbSB0aXBvIGAnaGVhZGVyJ2AuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHMtZmllbGRzZXQgbGVnZW5kPVwiRGFkb3MgcGVzc29haXNcIiBbdG9nZ2xlYWJsZV09XCJ0cnVlXCI+XHJcbiAqICAgPHA+Q29udGXDumRvIGRvIGZpZWxkc2V0PC9wPlxyXG4gKiA8L3MtZmllbGRzZXQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1maWVsZHNldCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmllbGRzZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0nXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCd0b2dnbGVBbmltYXRpb24nLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgaGVpZ2h0OiAnKicgfSksXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBvcGFjaXR5OiAwLCBoZWlnaHQ6IDAgfSkpLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgc3RhdGUoJ29wZW4nLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonIH0pKSxcclxuICAgICAgICAgICAgc3RhdGUoJ2Nsb3NlZCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwIH0pKSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignb3BlbiA8PT4gY2xvc2VkJywgYW5pbWF0ZSgnMzAwbXMgZWFzZScpKSxcclxuICAgICAgICBdKSxcclxuICAgIF0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0ludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWVsZHNldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZXh0byBleGliaWRvIGNvbW8gdMOtdHVsbyBkbyBmaWVsZHNldC4gQGRlZmF1bHQgJycgKi9cclxuICAgIGxlZ2VuZCA9IGlucHV0KCcnKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBib3TDo28gZGUgdG9nZ2xlIHF1ZSBwZXJtaXRlIHJlY29saGVyIGUgZXhwYW5kaXIgbyBjb250ZcO6ZG8uIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICB0b2dnbGVhYmxlID0gaW5wdXQoZmFsc2UpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDbGFzc2UgZGUgw61jb25lIGV4aWJpZGEgYW8gbGFkbyBkYSBsZWdlbmRhIChleC46IGAnZmFzIGZhLWNvZydgKS4gQGRlZmF1bHQgJycgKi9cclxuICAgIGljb24gPSBpbnB1dCgnJyk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFF1YW5kbyBgdHJ1ZWAsIHJlbW92ZSBvIGNvbnRlw7pkbyBkbyBET00gYW8gcmVjb2xoZXIgbyBmaWVsZHNldC4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIGRlc3Ryb3lPbkhpZGUgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gICAgdGVtcGxhdGVEaXJlY3RpdmVzID0gY29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICAgIGhlYWRlclRlbXBsYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlRGlyZWN0aXZlcygpPy5maW5kKCh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUudHlwZSA9PT0gJ2hlYWRlcicpPy50ZW1wbGF0ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGJvZHlUZW1wbGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZURpcmVjdGl2ZXMoKT8uZmluZCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLnR5cGUgPT09ICdib2R5Jyk/LnRlbXBsYXRlO1xyXG4gICAgfSk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gaW1lZGlhdGFtZW50ZSBhbnRlcyBkYSBhbmltYcOnw6NvIGRlIHRvZ2dsZSBpbmljaWFyLCBjb20gbyBlc3RhZG8gYXR1YWwuICovXHJcbiAgICBAT3V0cHV0KCkgYmVmb3JlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZFNldFRvZ2dsZT4oKTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBhcMOzcyBhIGFuaW1hw6fDo28gZGUgdG9nZ2xlIGNvbmNsdWlyLCBjb20gbyBub3ZvIGVzdGFkby4gKi9cclxuICAgIEBPdXRwdXQoKSBhZnRlclRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmllbGRTZXRUb2dnbGU+KCk7XHJcblxyXG4gICAgYWN0aXZlID0gbW9kZWwodHJ1ZSk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGRpc3BsYXlUeXBlID0gJ2Jsb2NrJztcclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgY29uc3QgaGFzQm9keVRlbXBsYXRlID0gdGhpcy5ib2R5VGVtcGxhdGUoKTtcclxuICAgICAgICBpZiAoIWhhc0JvZHlUZW1wbGF0ZSAmJiB0aGlzLmRlc3Ryb3lPbkhpZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICAgICAnRmllbGRzZXRDb21wb25lbnQ6IE8gdXNvIGRlIGRlc3Ryb3lPbkhpZGU9dHJ1ZSByZXF1ZXIgdW0gdGVtcGxhdGUgZGUgY29ycG8gZGVmaW5pZG8gY29tIHNUZW1wbGF0ZT1cImJvZHlcIi4nLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVBY3RpdmUob3JpZ2luYWxFdmVudDogUG9pbnRlckV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy50b2dnbGVhYmxlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJlZm9yZVRvZ2dsZS5uZXh0KHsgY29sbGFwc2VkOiB0aGlzLmFjdGl2ZSgpLCBvcmlnaW5hbEV2ZW50IH0pO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlLnNldCghdGhpcy5hY3RpdmUoKSk7XHJcbiAgICAgICAgdGhpcy5hZnRlclRvZ2dsZS5uZXh0KHsgY29sbGFwc2VkOiB0aGlzLmFjdGl2ZSgpLCBvcmlnaW5hbEV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC50b1N0YXRlID09PSAnb3BlbicpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9ICdibG9jayc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdjbG9zZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVR5cGUgPSAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxmaWVsZHNldFxyXG4gICAgY2xhc3M9XCJtYi1bMTBweF0gbWluLWgtWzQuNWVtXSB3LWZ1bGwgbWluLXctMCByb3VuZGVkLXhiaWcgYm9yZGVyIGJvcmRlci1ncmF5c2NhbGUtMjAgYmctZ3JheXNjYWxlLTAgcHgtMiBweS0xLjVcIlxyXG4+XHJcbiAgICA8bGVnZW5kXHJcbiAgICAgICAgY2xhc3M9XCJtbC00IGZsZXggc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEgZm9udC1vcGVuLXNhbnMgdGV4dC1zbSBmb250LWJvbGQgdGV4dC1ncmF5c2NhbGUtOTBcIlxyXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJ0b2dnbGVhYmxlKClcIlxyXG4gICAgICAgIChzSW50ZXJhY3RpdmVDb250ZW50KT1cInRvZ2dsZUFjdGl2ZSgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgICBAaWYgKHRvZ2dsZWFibGUoKSkge1xyXG4gICAgICAgICAgICBAaWYgKGFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9pPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBsZXQgX2hlYWRlclRlbXBsYXRlID0gaGVhZGVyVGVtcGxhdGUoKTtcclxuICAgICAgICBAaWYgKF9oZWFkZXJUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2hlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIEBpZiAoaWNvbigpKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbigpXCI+PC9pPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHt7IGxlZ2VuZCgpIH19XHJcbiAgICAgICAgfVxyXG4gICAgPC9sZWdlbmQ+XHJcbiAgICBAaWYgKGRlc3Ryb3lPbkhpZGUoKSA/ICh0b2dnbGVhYmxlKCkgPyBhY3RpdmUoKSA6IHRydWUpIDogdHJ1ZSkge1xyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJkaXNwbGF5VHlwZSA9PT0gJ25vbmUnXCJcclxuICAgICAgICAgICAgW2NsYXNzLmJsb2NrXT1cImRpc3BsYXlUeXBlID09PSAnYmxvY2snXCJcclxuICAgICAgICAgICAgW0B0b2dnbGVBbmltYXRpb25dPVwiZGVzdHJveU9uSGlkZSgpID8gbnVsbCA6IGFjdGl2ZSgpID8gJ29wZW4nIDogJ2Nsb3NlZCdcIlxyXG4gICAgICAgICAgICAoQHRvZ2dsZUFuaW1hdGlvbi5zdGFydCk9XCJoYW5kbGVBbmltYXRpb25TdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKEB0b2dnbGVBbmltYXRpb24uZG9uZSk9XCJoYW5kbGVBbmltYXRpb25Eb25lKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgQGxldCBfYm9keVRlbXBsYXRlID0gYm9keVRlbXBsYXRlKCk7XHJcbiAgICAgICAgICAgIEBpZiAoX2JvZHlUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9ib2R5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuPC9maWVsZHNldD5cclxuIl19
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilitário puro (sem dependência de Angular/NgZone) para aguardar até que a posição
|
|
3
|
+
* e o tamanho de um elemento parem de mudar — usado para medir corretamente elementos
|
|
4
|
+
* que podem estar em transição/animação (ex: um menu abrindo) no momento em que o
|
|
5
|
+
* Spotlight precisa apontar para eles.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_RECT_STABILITY_OPTIONS = {
|
|
8
|
+
requiredStableSamples: 3,
|
|
9
|
+
tolerancePx: 0.5,
|
|
10
|
+
maxWaitMs: 600,
|
|
11
|
+
};
|
|
12
|
+
function isRectStable(a, b, tolerancePx) {
|
|
13
|
+
return (Math.abs(a.top - b.top) <= tolerancePx &&
|
|
14
|
+
Math.abs(a.left - b.left) <= tolerancePx &&
|
|
15
|
+
Math.abs(a.width - b.width) <= tolerancePx &&
|
|
16
|
+
Math.abs(a.height - b.height) <= tolerancePx);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Faz polling de `el.getBoundingClientRect()` em frames sucessivos até que
|
|
20
|
+
* `requiredStableSamples` amostras consecutivas sejam iguais (dentro de `tolerancePx`),
|
|
21
|
+
* ou até que `maxWaitMs` seja atingido — o que ocorrer primeiro.
|
|
22
|
+
*
|
|
23
|
+
* `scheduleFrame`/`cancelFrame`/`now` são injetáveis para permitir testes determinísticos;
|
|
24
|
+
* por padrão usam as APIs nativas do navegador.
|
|
25
|
+
*/
|
|
26
|
+
export function waitForStableRect(el, options = DEFAULT_RECT_STABILITY_OPTIONS, scheduleFrame = requestAnimationFrame, cancelFrame = cancelAnimationFrame, now = () => performance.now()) {
|
|
27
|
+
let cancelled = false;
|
|
28
|
+
let frameHandle = 0;
|
|
29
|
+
let resolveFn;
|
|
30
|
+
const promise = new Promise((resolve) => {
|
|
31
|
+
resolveFn = resolve;
|
|
32
|
+
});
|
|
33
|
+
const startedAt = now();
|
|
34
|
+
let lastRect = el.getBoundingClientRect();
|
|
35
|
+
let stableCount = 1;
|
|
36
|
+
const tick = () => {
|
|
37
|
+
if (cancelled)
|
|
38
|
+
return;
|
|
39
|
+
const rect = el.getBoundingClientRect();
|
|
40
|
+
stableCount = isRectStable(rect, lastRect, options.tolerancePx) ? stableCount + 1 : 1;
|
|
41
|
+
lastRect = rect;
|
|
42
|
+
if (stableCount >= options.requiredStableSamples) {
|
|
43
|
+
resolveFn({ rect, timedOut: false });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (now() - startedAt >= options.maxWaitMs) {
|
|
47
|
+
resolveFn({ rect, timedOut: true });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
frameHandle = scheduleFrame(tick);
|
|
51
|
+
};
|
|
52
|
+
frameHandle = scheduleFrame(tick);
|
|
53
|
+
return {
|
|
54
|
+
promise,
|
|
55
|
+
cancel: () => {
|
|
56
|
+
cancelled = true;
|
|
57
|
+
cancelFrame(frameHandle);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC1zdGFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3BvdGxpZ2h0L3NyYy9saWIvc3BvdGxpZ2h0L3Nwb3RsaWdodC1vdmVybGF5L3JlY3Qtc3RhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBV0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQXlCO0lBQ2hFLHFCQUFxQixFQUFFLENBQUM7SUFDeEIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsU0FBUyxFQUFFLEdBQUc7Q0FDakIsQ0FBQztBQVlGLFNBQVMsWUFBWSxDQUFDLENBQVUsRUFBRSxDQUFVLEVBQUUsV0FBbUI7SUFDN0QsT0FBTyxDQUNILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVztRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVc7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUMvQyxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLEVBQWUsRUFDZixVQUFnQyw4QkFBOEIsRUFDOUQsZ0JBQXNELHFCQUFxQixFQUMzRSxjQUF3QyxvQkFBb0IsRUFDNUQsTUFBb0IsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtJQUUzQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksU0FBOEMsQ0FBQztJQUVuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN0RCxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDMUMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLE1BQU0sSUFBSSxHQUFHLEdBQVMsRUFBRTtRQUNwQixJQUFJLFNBQVM7WUFBRSxPQUFPO1FBRXRCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hDLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRWhCLElBQUksV0FBVyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9DLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksR0FBRyxFQUFFLEdBQUcsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsT0FBTztRQUNYLENBQUM7UUFDRCxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUVGLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsT0FBTztRQUNILE9BQU87UUFDUCxNQUFNLEVBQUUsR0FBUyxFQUFFO1lBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNqQixXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXTDoXJpbyBwdXJvIChzZW0gZGVwZW5kw6puY2lhIGRlIEFuZ3VsYXIvTmdab25lKSBwYXJhIGFndWFyZGFyIGF0w6kgcXVlIGEgcG9zacOnw6NvXG4gKiBlIG8gdGFtYW5obyBkZSB1bSBlbGVtZW50byBwYXJlbSBkZSBtdWRhciDigJQgdXNhZG8gcGFyYSBtZWRpciBjb3JyZXRhbWVudGUgZWxlbWVudG9zXG4gKiBxdWUgcG9kZW0gZXN0YXIgZW0gdHJhbnNpw6fDo28vYW5pbWHDp8OjbyAoZXg6IHVtIG1lbnUgYWJyaW5kbykgbm8gbW9tZW50byBlbSBxdWUgb1xuICogU3BvdGxpZ2h0IHByZWNpc2EgYXBvbnRhciBwYXJhIGVsZXMuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBSZWN0U3RhYmlsaXR5T3B0aW9ucyB7XG4gICAgLyoqIFF1YW50YXMgYW1vc3RyYXMgY29uc2VjdXRpdmFzIGRlbnRybyBkYSB0b2xlcsOibmNpYSBkZWZpbmVtIFwiZXN0w6F2ZWxcIi4gKi9cbiAgICByZXF1aXJlZFN0YWJsZVNhbXBsZXM6IG51bWJlcjtcbiAgICAvKiogRGlmZXJlbsOnYSBtw6F4aW1hIChweCkgZW50cmUgZHVhcyBhbW9zdHJhcyBwYXJhIHNlcmVtIGNvbnNpZGVyYWRhcyBpZ3VhaXMuICovXG4gICAgdG9sZXJhbmNlUHg6IG51bWJlcjtcbiAgICAvKiogVGV0byBkZSBzZWd1cmFuw6dhIChtcykg4oCUIG51bmNhIGVzcGVyYXIgYWzDqW0gZGlzc28uICovXG4gICAgbWF4V2FpdE1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ1RfU1RBQklMSVRZX09QVElPTlM6IFJlY3RTdGFiaWxpdHlPcHRpb25zID0ge1xuICAgIHJlcXVpcmVkU3RhYmxlU2FtcGxlczogMyxcbiAgICB0b2xlcmFuY2VQeDogMC41LFxuICAgIG1heFdhaXRNczogNjAwLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFibGVSZWN0UmVzdWx0IHtcbiAgICByZWN0OiBET01SZWN0O1xuICAgIHRpbWVkT3V0OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWJpbGl6ZUhhbmRsZSB7XG4gICAgcmVhZG9ubHkgcHJvbWlzZTogUHJvbWlzZTxTdGFibGVSZWN0UmVzdWx0PjtcbiAgICBjYW5jZWwoKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gaXNSZWN0U3RhYmxlKGE6IERPTVJlY3QsIGI6IERPTVJlY3QsIHRvbGVyYW5jZVB4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmFicyhhLnRvcCAtIGIudG9wKSA8PSB0b2xlcmFuY2VQeCAmJlxuICAgICAgICBNYXRoLmFicyhhLmxlZnQgLSBiLmxlZnQpIDw9IHRvbGVyYW5jZVB4ICYmXG4gICAgICAgIE1hdGguYWJzKGEud2lkdGggLSBiLndpZHRoKSA8PSB0b2xlcmFuY2VQeCAmJlxuICAgICAgICBNYXRoLmFicyhhLmhlaWdodCAtIGIuaGVpZ2h0KSA8PSB0b2xlcmFuY2VQeFxuICAgICk7XG59XG5cbi8qKlxuICogRmF6IHBvbGxpbmcgZGUgYGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYCBlbSBmcmFtZXMgc3VjZXNzaXZvcyBhdMOpIHF1ZVxuICogYHJlcXVpcmVkU3RhYmxlU2FtcGxlc2AgYW1vc3RyYXMgY29uc2VjdXRpdmFzIHNlamFtIGlndWFpcyAoZGVudHJvIGRlIGB0b2xlcmFuY2VQeGApLFxuICogb3UgYXTDqSBxdWUgYG1heFdhaXRNc2Agc2VqYSBhdGluZ2lkbyDigJQgbyBxdWUgb2NvcnJlciBwcmltZWlyby5cbiAqXG4gKiBgc2NoZWR1bGVGcmFtZWAvYGNhbmNlbEZyYW1lYC9gbm93YCBzw6NvIGluamV0w6F2ZWlzIHBhcmEgcGVybWl0aXIgdGVzdGVzIGRldGVybWluw61zdGljb3M7XG4gKiBwb3IgcGFkcsOjbyB1c2FtIGFzIEFQSXMgbmF0aXZhcyBkbyBuYXZlZ2Fkb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yU3RhYmxlUmVjdChcbiAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9uczogUmVjdFN0YWJpbGl0eU9wdGlvbnMgPSBERUZBVUxUX1JFQ1RfU1RBQklMSVRZX09QVElPTlMsXG4gICAgc2NoZWR1bGVGcmFtZTogKGNiOiBGcmFtZVJlcXVlc3RDYWxsYmFjaykgPT4gbnVtYmVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLFxuICAgIGNhbmNlbEZyYW1lOiAoaGFuZGxlOiBudW1iZXIpID0+IHZvaWQgPSBjYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICBub3c6ICgpID0+IG51bWJlciA9ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpLFxuKTogU3RhYmlsaXplSGFuZGxlIHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgbGV0IGZyYW1lSGFuZGxlID0gMDtcbiAgICBsZXQgcmVzb2x2ZUZuITogKHJlc3VsdDogU3RhYmxlUmVjdFJlc3VsdCkgPT4gdm9pZDtcblxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxTdGFibGVSZWN0UmVzdWx0PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICByZXNvbHZlRm4gPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gbm93KCk7XG4gICAgbGV0IGxhc3RSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IHN0YWJsZUNvdW50ID0gMTtcblxuICAgIGNvbnN0IHRpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHN0YWJsZUNvdW50ID0gaXNSZWN0U3RhYmxlKHJlY3QsIGxhc3RSZWN0LCBvcHRpb25zLnRvbGVyYW5jZVB4KSA/IHN0YWJsZUNvdW50ICsgMSA6IDE7XG4gICAgICAgIGxhc3RSZWN0ID0gcmVjdDtcblxuICAgICAgICBpZiAoc3RhYmxlQ291bnQgPj0gb3B0aW9ucy5yZXF1aXJlZFN0YWJsZVNhbXBsZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVGbih7IHJlY3QsIHRpbWVkT3V0OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm93KCkgLSBzdGFydGVkQXQgPj0gb3B0aW9ucy5tYXhXYWl0TXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVGbih7IHJlY3QsIHRpbWVkT3V0OiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZyYW1lSGFuZGxlID0gc2NoZWR1bGVGcmFtZSh0aWNrKTtcbiAgICB9O1xuXG4gICAgZnJhbWVIYW5kbGUgPSBzY2hlZHVsZUZyYW1lKHRpY2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvbWlzZSxcbiAgICAgICAgY2FuY2VsOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2FuY2VsRnJhbWUoZnJhbWVIYW5kbGUpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbiJdfQ==
|