@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.
@@ -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, ContentChildren, EventEmitter, Input, Output, } from '@angular/core';
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 true */
29
- destroyOnHide = true;
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
- this.headerTemplate = this.templateDirectives?.find((template) => template.type === 'header')?.template;
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 = !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=\"bg-grayscale-0 border border-grayscale-20 rounded-xbig mb-[10px] min-h-[4.5em] px-2 py-1.5 w-full min-w-0\"\r\n>\r\n <legend\r\n class=\"flex items-center text-grayscale-90 font-open-sans text-sm font-bold px-1 gap-1 ml-4 select-none\"\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-plus\"></i>\r\n } @else {\r\n <i class=\"fas fa-minus\"></i>\r\n }\r\n }\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 [@toggleAnimation]=\"destroyOnHide ? null : active ? 'open' : 'closed'\">\r\n <ng-content></ng-content>\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: [
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=\"bg-grayscale-0 border border-grayscale-20 rounded-xbig mb-[10px] min-h-[4.5em] px-2 py-1.5 w-full min-w-0\"\r\n>\r\n <legend\r\n class=\"flex items-center text-grayscale-90 font-open-sans text-sm font-bold px-1 gap-1 ml-4 select-none\"\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-plus\"></i>\r\n } @else {\r\n <i class=\"fas fa-minus\"></i>\r\n }\r\n }\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 [@toggleAnimation]=\"destroyOnHide ? null : active ? 'open' : 'closed'\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</fieldset>\r\n", styles: [":host{display:block}\n"] }]
82
- }], propDecorators: { legend: [{
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==