@libs-ui/components-popover 0.1.1-1
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/README.md +3 -0
- package/defines/constants.define.d.ts +4 -0
- package/esm2022/defines/constants.define.mjs +15 -0
- package/esm2022/index.mjs +4 -0
- package/esm2022/interfaces/flag-mouse.interface.mjs +2 -0
- package/esm2022/interfaces/function-control.interface.mjs +2 -0
- package/esm2022/interfaces/index.mjs +6 -0
- package/esm2022/interfaces/overlay.interface.mjs +2 -0
- package/esm2022/interfaces/popover.interface.mjs +2 -0
- package/esm2022/interfaces/popover.type.mjs +2 -0
- package/esm2022/libs-ui-components-popover.mjs +5 -0
- package/esm2022/overlay/overlay.component.mjs +311 -0
- package/esm2022/popover.component.mjs +328 -0
- package/fesm2022/libs-ui-components-popover.mjs +653 -0
- package/fesm2022/libs-ui-components-popover.mjs.map +1 -0
- package/index.d.ts +3 -0
- package/interfaces/flag-mouse.interface.d.ts +5 -0
- package/interfaces/function-control.interface.d.ts +9 -0
- package/interfaces/index.d.ts +5 -0
- package/interfaces/overlay.interface.d.ts +42 -0
- package/interfaces/popover.interface.d.ts +15 -0
- package/interfaces/popover.type.d.ts +5 -0
- package/overlay/overlay.component.d.ts +32 -0
- package/package.json +31 -0
- package/popover.component.d.ts +62 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, effect, inject, input, output, signal, untracked } from '@angular/core';
|
|
3
|
+
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
4
|
+
import { checkMouseOverInContainer, get, getEventNameHandleClick, getViewport, isNil, set } from '@libs-ui/utils';
|
|
5
|
+
import { Subject, Subscription, fromEvent } from 'rxjs';
|
|
6
|
+
import { debounceTime, takeUntil, tap } from 'rxjs/operators';
|
|
7
|
+
import { getPopoverTimerDestroyInQueryUrl } from './defines/constants.define';
|
|
8
|
+
import { LibsUiComponentsPopoverOverlayComponent } from './overlay/overlay.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class LibsUiComponentsPopoverComponent {
|
|
11
|
+
// #region PROPERTY
|
|
12
|
+
mouseEnter;
|
|
13
|
+
mouseWheel;
|
|
14
|
+
mouseClick;
|
|
15
|
+
windowResize;
|
|
16
|
+
windowWheel;
|
|
17
|
+
windowMouseDown;
|
|
18
|
+
windowClick;
|
|
19
|
+
windowMouseUp;
|
|
20
|
+
windowMousemove;
|
|
21
|
+
popoverOverlayComponent;
|
|
22
|
+
subsEventPopup = new Subscription();
|
|
23
|
+
onDestroy = new Subject();
|
|
24
|
+
functionsControl;
|
|
25
|
+
firstClick = signal(false);
|
|
26
|
+
contentInnerHtml = signal('');
|
|
27
|
+
timer = signal(undefined);
|
|
28
|
+
directionPopover = signal(undefined);
|
|
29
|
+
frameId = signal('');
|
|
30
|
+
// #region INPUT
|
|
31
|
+
debugId = input();
|
|
32
|
+
flagMouse = input({ isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false }, {
|
|
33
|
+
transform: (value) => (value ? value : { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false }),
|
|
34
|
+
});
|
|
35
|
+
type = input('other');
|
|
36
|
+
mode = input('hover');
|
|
37
|
+
config = input({}, { transform: (value) => (value ? value : {}) });
|
|
38
|
+
ignoreShowPopover = input();
|
|
39
|
+
elementRefCustom = input();
|
|
40
|
+
initEventInElementRefCustom = input(false);
|
|
41
|
+
classInclude = input('', { transform: (value) => value ?? '' });
|
|
42
|
+
ignoreHiddenPopoverContentWhenMouseLeave = input();
|
|
43
|
+
ignoreStopPropagationEvent = input();
|
|
44
|
+
ignoreCursorPointerModeLikeClick = input();
|
|
45
|
+
isAddContentToParentDocument = input();
|
|
46
|
+
ignoreClickOutside = input();
|
|
47
|
+
// #region OUTPUT
|
|
48
|
+
outEvent = output();
|
|
49
|
+
outChangStageFlagMouse = output();
|
|
50
|
+
outEventPopoverContent = output();
|
|
51
|
+
outFunctionsControl = output();
|
|
52
|
+
// #region INJECT
|
|
53
|
+
elementRef = inject(ElementRef);
|
|
54
|
+
dynamicService = inject(LibsUiDynamicComponentService);
|
|
55
|
+
constructor() {
|
|
56
|
+
let classDefault = undefined;
|
|
57
|
+
effect(() => {
|
|
58
|
+
if (classDefault === undefined) {
|
|
59
|
+
classDefault = this.Element.className;
|
|
60
|
+
}
|
|
61
|
+
if (this.elementRefCustom() !== this.Element) {
|
|
62
|
+
this.Element.className = classDefault || '';
|
|
63
|
+
}
|
|
64
|
+
if (this.type() === 'text') {
|
|
65
|
+
this.Element.classList.add('popover-text-ellipsis');
|
|
66
|
+
}
|
|
67
|
+
if (this.mode().includes('click') && !this.ignoreCursorPointerModeLikeClick()) {
|
|
68
|
+
this.Element.classList.add('cursor-pointer');
|
|
69
|
+
}
|
|
70
|
+
if (this.classInclude()) {
|
|
71
|
+
this.classInclude()
|
|
72
|
+
?.split(' ')
|
|
73
|
+
.forEach((className) => {
|
|
74
|
+
if (!className) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.Element.classList.add(className);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
let first = true;
|
|
82
|
+
effect(() => {
|
|
83
|
+
this.config();
|
|
84
|
+
untracked(() => {
|
|
85
|
+
if (this.popoverOverlayComponent?.instance && !first) {
|
|
86
|
+
this.updatePopoverOverlayPosition();
|
|
87
|
+
}
|
|
88
|
+
first = false;
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
ngOnInit() {
|
|
93
|
+
this.outEventPopoverContent.subscribe((direction) => this.directionPopover.set(direction));
|
|
94
|
+
this.functionsControl = {
|
|
95
|
+
removePopoverOverlay: this.removePopoverOverlay.bind(this),
|
|
96
|
+
updatePopoverOverlayPosition: this.updatePopoverOverlayPosition.bind(this),
|
|
97
|
+
getRectContainer: async () => (this.elementRefCustom() || this.Element).getBoundingClientRect(),
|
|
98
|
+
getRectContent: async () => this.popoverOverlayComponent?.instance?.ContainerElement?.getBoundingClientRect(),
|
|
99
|
+
showPopover: this.addPopoverContent.bind(this),
|
|
100
|
+
updatePopoverOverlay: this.updatePopoverOverlay.bind(this),
|
|
101
|
+
};
|
|
102
|
+
this.outFunctionsControl.emit(this.FunctionsControl);
|
|
103
|
+
}
|
|
104
|
+
ngAfterContentInit() {
|
|
105
|
+
const nativeEl = this.Element;
|
|
106
|
+
this.mouseEnter = this.initObservable(nativeEl, 'mouseenter');
|
|
107
|
+
this.initObservable(nativeEl, 'click').subscribe();
|
|
108
|
+
this.mouseClick = this.initObservable(nativeEl, getEventNameHandleClick);
|
|
109
|
+
this.mouseWheel = this.initObservable(window, 'wheel');
|
|
110
|
+
this.windowResize = this.initObservable(window, 'resize');
|
|
111
|
+
this.windowWheel = this.initObservable(window, 'wheel');
|
|
112
|
+
this.windowMouseDown = this.initObservable(window, 'mousedown');
|
|
113
|
+
this.windowClick = this.initObservable(window, getEventNameHandleClick);
|
|
114
|
+
this.windowMouseUp = this.initObservable(window, 'mouseup');
|
|
115
|
+
this.windowMousemove = this.initObservable(window, 'mousemove');
|
|
116
|
+
this.mouseEnter.subscribe(() => {
|
|
117
|
+
if (!this.mode().includes('hover')) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (this.type() === 'text' && nativeEl?.clientWidth >= nativeEl.scrollWidth && !this.popoverOverlayComponent) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.addPopoverContent();
|
|
124
|
+
});
|
|
125
|
+
this.mouseClick.subscribe(() => {
|
|
126
|
+
this.firstClick.update((val) => (this.ignoreShowPopover() ? false : !val));
|
|
127
|
+
this.outEvent.emit('click');
|
|
128
|
+
if (!this.mode().startsWith('click')) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (this.mode() === 'click-toggle' && !this.firstClick()) {
|
|
132
|
+
this.removePopoverOverlay();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.addPopoverContent();
|
|
136
|
+
});
|
|
137
|
+
this.windowResize.pipe(debounceTime(500)).subscribe(this.updatePopoverOverlayPosition.bind(this));
|
|
138
|
+
}
|
|
139
|
+
// #region FUNCTIONS
|
|
140
|
+
get FunctionsControl() {
|
|
141
|
+
return this.functionsControl;
|
|
142
|
+
}
|
|
143
|
+
async updatePopoverOverlay() {
|
|
144
|
+
const timer = setTimeout(() => {
|
|
145
|
+
clearTimeout(timer);
|
|
146
|
+
if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config()) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const instance = this.popoverOverlayComponent.instance;
|
|
150
|
+
const nativeEl = this.elementRefCustom() || this.Element;
|
|
151
|
+
instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
async updatePopoverOverlayPosition() {
|
|
155
|
+
clearTimeout(this.timer());
|
|
156
|
+
this.timer.set(setTimeout(async () => {
|
|
157
|
+
if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config() || !this.functionsControl) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const viewPort = getViewport();
|
|
161
|
+
const rectListView = await this.functionsControl.getRectContent();
|
|
162
|
+
if (!rectListView) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const rectContainer = await this.functionsControl.getRectContainer();
|
|
166
|
+
const distanceListViewAndContainer = this.config()?.ignoreArrow === false ? 14 : 4;
|
|
167
|
+
switch (this.directionPopover()) {
|
|
168
|
+
case 'right':
|
|
169
|
+
case 'left':
|
|
170
|
+
case 'bottom':
|
|
171
|
+
if (rectListView.top + rectListView.height > viewPort.height ||
|
|
172
|
+
rectListView.top < rectContainer.top + rectContainer.height ||
|
|
173
|
+
rectListView.top - (rectContainer.top + rectContainer.height) > distanceListViewAndContainer ||
|
|
174
|
+
rectListView.left + rectListView.width > viewPort.width) {
|
|
175
|
+
this.updatePopoverOverlay();
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case 'top':
|
|
179
|
+
if (rectContainer.top - (rectListView.top + rectListView.height) > distanceListViewAndContainer ||
|
|
180
|
+
rectListView.top + rectListView.height + distanceListViewAndContainer > rectContainer.top + 2 ||
|
|
181
|
+
rectListView.left + rectListView.width > viewPort.width) {
|
|
182
|
+
this.updatePopoverOverlay();
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}, 250));
|
|
187
|
+
}
|
|
188
|
+
get Element() {
|
|
189
|
+
if (this.initEventInElementRefCustom() && this.elementRefCustom()) {
|
|
190
|
+
return this.elementRefCustom();
|
|
191
|
+
}
|
|
192
|
+
return this.elementRef.nativeElement.firstElementChild || this.elementRef.nativeElement;
|
|
193
|
+
}
|
|
194
|
+
initObservable(el, eventName) {
|
|
195
|
+
return fromEvent(el, eventName).pipe(tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()), takeUntil(this.onDestroy));
|
|
196
|
+
}
|
|
197
|
+
async addPopoverContent(nativeEl) {
|
|
198
|
+
if (this.popoverOverlayComponent || this.ignoreShowPopover() || !this.config()) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this.popoverOverlayComponent = this.dynamicService.resolveComponentFactory(LibsUiComponentsPopoverOverlayComponent);
|
|
202
|
+
this.frameId.set(this.dynamicService.addToBody(this.popoverOverlayComponent, this.isAddContentToParentDocument() || this.config().isAddContentToParentDocument));
|
|
203
|
+
this.outEvent.emit('show');
|
|
204
|
+
const instance = this.popoverOverlayComponent.instance;
|
|
205
|
+
nativeEl = nativeEl || this.elementRefCustom() || this.Element;
|
|
206
|
+
instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());
|
|
207
|
+
const flagsMouses = {
|
|
208
|
+
isMouseEnter: true,
|
|
209
|
+
isMouseEnterContent: false,
|
|
210
|
+
isContainerHasScroll: nativeEl.offsetHeight < nativeEl.scrollHeight,
|
|
211
|
+
};
|
|
212
|
+
const nativeElContainer = instance.ElementRef.nativeElement;
|
|
213
|
+
const mouseEnterContent = this.initObservable(nativeElContainer, 'mouseenter');
|
|
214
|
+
const mouseLeaveContent = this.initObservable(nativeElContainer, 'mouseleave');
|
|
215
|
+
this.subsEventPopup.add(instance.outEvent.subscribe((direction) => {
|
|
216
|
+
this.outEventPopoverContent.emit(direction);
|
|
217
|
+
}));
|
|
218
|
+
this.subsEventPopup.add(mouseEnterContent.subscribe(() => {
|
|
219
|
+
this.outEvent.emit('mouseenter-content');
|
|
220
|
+
flagsMouses.isMouseEnterContent = true;
|
|
221
|
+
this.outChangStageFlagMouse.emit(flagsMouses);
|
|
222
|
+
}));
|
|
223
|
+
this.subsEventPopup.add(this.mouseEnter.subscribe(() => {
|
|
224
|
+
this.outEvent.emit('mouseenter-element');
|
|
225
|
+
this.outChangStageFlagMouse.emit(flagsMouses);
|
|
226
|
+
}));
|
|
227
|
+
this.subsEventPopup.add(this.mouseWheel.subscribe(() => {
|
|
228
|
+
flagsMouses.isContainerHasScroll = false;
|
|
229
|
+
if (nativeEl.offsetHeight < nativeEl.scrollHeight) {
|
|
230
|
+
flagsMouses.isContainerHasScroll = true;
|
|
231
|
+
}
|
|
232
|
+
if ((flagsMouses.isMouseEnter && flagsMouses.isContainerHasScroll) || flagsMouses.isMouseEnterContent || this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
this.removePopoverOverlay();
|
|
236
|
+
}));
|
|
237
|
+
this.handlerMouseLeaveRemovePopoverOverlay(this.windowMousemove, flagsMouses, 'isMouseEnter', 'isMouseEnterContent', 'mouseleave-element');
|
|
238
|
+
this.handlerMouseLeaveRemovePopoverOverlay(mouseLeaveContent, flagsMouses, 'isMouseEnterContent', 'isMouseEnter', 'mouseleave-content');
|
|
239
|
+
if (this.mode() === 'click_open_and_click_panel_content_hidden') {
|
|
240
|
+
this.subsEventPopup.add(this.initObservable(nativeElContainer, 'click').subscribe(() => {
|
|
241
|
+
this.removePopoverOverlay();
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
this.handlerWindowEventRemovePopoverOverlay(this.windowClick, flagsMouses);
|
|
245
|
+
this.handlerWindowEventRemovePopoverOverlay(this.windowMouseDown, flagsMouses);
|
|
246
|
+
this.handlerWindowEventRemovePopoverOverlay(this.windowMouseUp, flagsMouses);
|
|
247
|
+
this.handlerWindowEventRemovePopoverOverlay(this.windowWheel, flagsMouses);
|
|
248
|
+
}
|
|
249
|
+
handlerWindowEventRemovePopoverOverlay(obs, flagsMouses) {
|
|
250
|
+
this.subsEventPopup.add(obs.pipe(debounceTime(10)).subscribe(() => {
|
|
251
|
+
if (flagsMouses.isMouseEnter || flagsMouses.isMouseEnterContent || this.ignoreClickOutside()) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
this.firstClick.set(false);
|
|
258
|
+
this.removePopoverOverlay();
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
261
|
+
handlerMouseLeaveRemovePopoverOverlay(obs, flagsMouses, flagKeyChangeValue, flagKeyCheck, outEvent) {
|
|
262
|
+
this.subsEventPopup.add(obs
|
|
263
|
+
.pipe(tap(() => this.outEvent.emit(outEvent)), debounceTime(getPopoverTimerDestroyInQueryUrl() || this.config()?.timerDestroy || 0))
|
|
264
|
+
.subscribe((e) => {
|
|
265
|
+
if (outEvent === 'mouseleave-element' &&
|
|
266
|
+
(checkMouseOverInContainer(e, this.Element) || checkMouseOverInContainer({ clientX: e.clientX + 2, clientY: e.clientY + 2 }, this.Element) || checkMouseOverInContainer({ clientX: e.clientX - 2, clientY: e.clientY - 2 }, this.Element))) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
set(flagsMouses, flagKeyChangeValue, false);
|
|
270
|
+
this.outChangStageFlagMouse.emit(flagsMouses);
|
|
271
|
+
if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (get(flagsMouses, flagKeyCheck) || this.ignoreHiddenPopoverContentWhenMouseLeave()) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
this.removePopoverOverlay();
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
getDefaultConfigs() {
|
|
281
|
+
const configValue = this.config() || {};
|
|
282
|
+
if (isNil(configValue.content) || (configValue.content === this.contentInnerHtml() && this.contentInnerHtml() !== this.Element.innerHTML)) {
|
|
283
|
+
configValue.content = this.Element.innerHTML;
|
|
284
|
+
}
|
|
285
|
+
this.contentInnerHtml.set(this.Element.innerHTML);
|
|
286
|
+
if (!configValue.maxWidth) {
|
|
287
|
+
configValue.maxWidth = 250;
|
|
288
|
+
}
|
|
289
|
+
if (configValue.maxHeight === undefined || configValue.maxHeight === 0) {
|
|
290
|
+
configValue.maxHeight = 140;
|
|
291
|
+
}
|
|
292
|
+
if (!configValue.direction) {
|
|
293
|
+
configValue.direction = 'bottom';
|
|
294
|
+
}
|
|
295
|
+
if (!configValue.position) {
|
|
296
|
+
configValue.position = {
|
|
297
|
+
mode: 'center',
|
|
298
|
+
distance: 0,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return configValue;
|
|
302
|
+
}
|
|
303
|
+
async removePopoverOverlay() {
|
|
304
|
+
if (this.popoverOverlayComponent) {
|
|
305
|
+
this.outEvent.emit('remove');
|
|
306
|
+
this.subsEventPopup.unsubscribe();
|
|
307
|
+
this.subsEventPopup = new Subscription();
|
|
308
|
+
}
|
|
309
|
+
this.dynamicService.remove(this.popoverOverlayComponent, this.frameId());
|
|
310
|
+
this.frameId.set('');
|
|
311
|
+
this.popoverOverlayComponent = undefined;
|
|
312
|
+
this.firstClick.set(false);
|
|
313
|
+
}
|
|
314
|
+
ngOnDestroy() {
|
|
315
|
+
clearTimeout(this.timer());
|
|
316
|
+
this.removePopoverOverlay();
|
|
317
|
+
this.onDestroy.next();
|
|
318
|
+
this.onDestroy.complete();
|
|
319
|
+
this.subsEventPopup.unsubscribe();
|
|
320
|
+
}
|
|
321
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
322
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsPopoverComponent, isStandalone: true, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: { debugId: { classPropertyName: "debugId", publicName: "debugId", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowPopover: { classPropertyName: "ignoreShowPopover", publicName: "ignoreShowPopover", isSignal: true, isRequired: false, transformFunction: null }, elementRefCustom: { classPropertyName: "elementRefCustom", publicName: "elementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, initEventInElementRefCustom: { classPropertyName: "initEventInElementRefCustom", publicName: "initEventInElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreHiddenPopoverContentWhenMouseLeave: { classPropertyName: "ignoreHiddenPopoverContentWhenMouseLeave", publicName: "ignoreHiddenPopoverContentWhenMouseLeave", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreCursorPointerModeLikeClick: { classPropertyName: "ignoreCursorPointerModeLikeClick", publicName: "ignoreCursorPointerModeLikeClick", isSignal: true, isRequired: false, transformFunction: null }, isAddContentToParentDocument: { classPropertyName: "isAddContentToParentDocument", publicName: "isAddContentToParentDocument", isSignal: true, isRequired: false, transformFunction: null }, ignoreClickOutside: { classPropertyName: "ignoreClickOutside", publicName: "ignoreClickOutside", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outEvent: "outEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outEventPopoverContent: "outEventPopoverContent", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "<ng-content />\n", styles: ["::ng-deep .popover-text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .cursor-pointer{cursor:pointer}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
323
|
+
}
|
|
324
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverComponent, decorators: [{
|
|
325
|
+
type: Component,
|
|
326
|
+
args: [{ selector: 'libs_ui-components-popover,[LibsUiComponentsPopoverDirective]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content />\n", styles: ["::ng-deep .popover-text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .cursor-pointer{cursor:pointer}\n"] }]
|
|
327
|
+
}], ctorParameters: () => [] });
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFVBQVUsRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEwsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xILE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUs5RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFXdEYsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxtQkFBbUI7SUFDWCxVQUFVLENBQTBCO0lBQ3BDLFVBQVUsQ0FBMEI7SUFDcEMsVUFBVSxDQUEwQjtJQUNwQyxZQUFZLENBQTBCO0lBQ3RDLFdBQVcsQ0FBMEI7SUFDckMsZUFBZSxDQUEwQjtJQUN6QyxXQUFXLENBQTBCO0lBQ3JDLGFBQWEsQ0FBMEI7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QUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7d0dBdlhVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLHc5RUN0QjdDLGtCQUNBOzs0RkRxQmEsZ0NBQWdDO2tCQVI1QyxTQUFTOytCQUVFLCtEQUErRCxjQUc3RCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciwgZ2V0LCBnZXRFdmVudE5hbWVIYW5kbGVDbGljaywgZ2V0Vmlld3BvcnQsIGlzTmlsLCBzZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldFBvcG92ZXJUaW1lckRlc3Ryb3lJblF1ZXJ5VXJsIH0gZnJvbSAnLi9kZWZpbmVzL2NvbnN0YW50cy5kZWZpbmUnO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9mbGFnLW1vdXNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQb3BvdmVyT3ZlcmxheSB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVybGF5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRVZFTlQsIFRZUEVfUE9QT1ZFUl9NT0RFLCBUWVBFX1BPUE9WRVJfVFlQRSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wb3BvdmVyLnR5cGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFBhdGhPZiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlcixbTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIG1vdXNlRW50ZXIhOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIG1vdXNlV2hlZWwhOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIG1vdXNlQ2xpY2shOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIHdpbmRvd1Jlc2l6ZSE6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG4gIHByaXZhdGUgd2luZG93V2hlZWwhOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIHdpbmRvd01vdXNlRG93biE6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG4gIHByaXZhdGUgd2luZG93Q2xpY2shOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIHdpbmRvd01vdXNlVXAhOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuICBwcml2YXRlIHdpbmRvd01vdXNlbW92ZSE6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG4gIHByaXZhdGUgcG9wb3Zlck92ZXJsYXlDb21wb25lbnQhOiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c1BvcG92ZXJPdmVybGF5Q29tcG9uZW50PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdWJzRXZlbnRQb3B1cCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGZ1bmN0aW9uc0NvbnRyb2w/OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50O1xuICBwcml2YXRlIGZpcnN0Q2xpY2sgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNvbnRlbnRJbm5lckh0bWwgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgdGltZXIgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGRpcmVjdGlvblBvcG92ZXIgPSBzaWduYWw8VFlQRV9QT1BPVkVSX0RJUkVDVElPTiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBmcmFtZUlkID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgZGVidWdJZCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gaW5wdXQ8SUZsYWdNb3VzZSwgSUZsYWdNb3VzZT4oXG4gICAgeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSwgaXNDb250YWluZXJIYXNTY3JvbGw6IGZhbHNlIH0sXG4gICAge1xuICAgICAgdHJhbnNmb3JtOiAodmFsdWU6IGFueSkgPT4gKHZhbHVlID8gdmFsdWUgOiB7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlLCBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2UgfSksXG4gICAgfVxuICApO1xuICByZWFkb25seSB0eXBlID0gaW5wdXQ8VFlQRV9QT1BPVkVSX1RZUEU+KCdvdGhlcicpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQ8VFlQRV9QT1BPVkVSX01PREU+KCdob3ZlcicpO1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dCh7fSwgeyB0cmFuc2Zvcm06ICh2YWx1ZTogSVBvcG92ZXJPdmVybGF5IHwgdW5kZWZpbmVkKSA9PiAodmFsdWUgPyB2YWx1ZSA6IHt9KSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd1BvcG92ZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBlbGVtZW50UmVmQ3VzdG9tID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGluaXRFdmVudEluRWxlbWVudFJlZkN1c3RvbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQ3Vyc29yUG9pbnRlck1vZGVMaWtlQ2xpY2sgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQ2xpY2tPdXRzaWRlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRFdmVudCA9IG91dHB1dDxUWVBFX1BPUE9WRVJfRVZFTlQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0RXZlbnRQb3BvdmVyQ29udGVudCA9IG91dHB1dDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIGR5bmFtaWNTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBsZXQgY2xhc3NEZWZhdWx0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChjbGFzc0RlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGFzc0RlZmF1bHQgPSB0aGlzLkVsZW1lbnQuY2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZkN1c3RvbSgpICE9PSB0aGlzLkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzRGVmYXVsdCB8fCAnJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnR5cGUoKSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwb3BvdmVyLXRleHQtZWxsaXBzaXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1vZGUoKS5pbmNsdWRlcygnY2xpY2snKSAmJiAhdGhpcy5pZ25vcmVDdXJzb3JQb2ludGVyTW9kZUxpa2VDbGljaygpKSB7XG4gICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjdXJzb3ItcG9pbnRlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2xhc3NJbmNsdWRlKCkpIHtcbiAgICAgICAgdGhpcy5jbGFzc0luY2x1ZGUoKVxuICAgICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAgIC5mb3JFYWNoKChjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgZmlyc3QgPSB0cnVlO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZygpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlDb21wb25lbnQ/Lmluc3RhbmNlICYmICFmaXJzdCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3V0RXZlbnRQb3BvdmVyQ29udGVudC5zdWJzY3JpYmUoKGRpcmVjdGlvbikgPT4gdGhpcy5kaXJlY3Rpb25Qb3BvdmVyLnNldChkaXJlY3Rpb24pKTtcbiAgICB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wgPSB7XG4gICAgICByZW1vdmVQb3BvdmVyT3ZlcmxheTogdGhpcy5yZW1vdmVQb3BvdmVyT3ZlcmxheS5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbjogdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheVBvc2l0aW9uLmJpbmQodGhpcyksXG4gICAgICBnZXRSZWN0Q29udGFpbmVyOiBhc3luYyAoKSA9PiAodGhpcy5lbGVtZW50UmVmQ3VzdG9tKCkgfHwgdGhpcy5FbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIGdldFJlY3RDb250ZW50OiBhc3luYyAoKSA9PiB0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50Py5pbnN0YW5jZT8uQ29udGFpbmVyRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBzaG93UG9wb3ZlcjogdGhpcy5hZGRQb3BvdmVyQ29udGVudC5iaW5kKHRoaXMpLFxuICAgICAgdXBkYXRlUG9wb3Zlck92ZXJsYXk6IHRoaXMudXBkYXRlUG9wb3Zlck92ZXJsYXkuYmluZCh0aGlzKSxcbiAgICB9O1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHRoaXMuRnVuY3Rpb25zQ29udHJvbCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLkVsZW1lbnQ7XG4gICAgdGhpcy5tb3VzZUVudGVyID0gdGhpcy5pbml0T2JzZXJ2YWJsZShuYXRpdmVFbCwgJ21vdXNlZW50ZXInKTtcbiAgICB0aGlzLmluaXRPYnNlcnZhYmxlKG5hdGl2ZUVsLCAnY2xpY2snKS5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1vdXNlQ2xpY2sgPSB0aGlzLmluaXRPYnNlcnZhYmxlKG5hdGl2ZUVsLCBnZXRFdmVudE5hbWVIYW5kbGVDbGljayk7XG4gICAgdGhpcy5tb3VzZVdoZWVsID0gdGhpcy5pbml0T2JzZXJ2YWJsZSh3aW5kb3csICd3aGVlbCcpO1xuICAgIHRoaXMud2luZG93UmVzaXplID0gdGhpcy5pbml0T2JzZXJ2YWJsZSh3aW5kb3csICdyZXNpemUnKTtcbiAgICB0aGlzLndpbmRvd1doZWVsID0gdGhpcy5pbml0T2JzZXJ2YWJsZSh3aW5kb3csICd3aGVlbCcpO1xuICAgIHRoaXMud2luZG93TW91c2VEb3duID0gdGhpcy5pbml0T2JzZXJ2YWJsZSh3aW5kb3csICdtb3VzZWRvd24nKTtcbiAgICB0aGlzLndpbmRvd0NsaWNrID0gdGhpcy5pbml0T2JzZXJ2YWJsZSh3aW5kb3csIGdldEV2ZW50TmFtZUhhbmRsZUNsaWNrKTtcbiAgICB0aGlzLndpbmRvd01vdXNlVXAgPSB0aGlzLmluaXRPYnNlcnZhYmxlKHdpbmRvdywgJ21vdXNldXAnKTtcbiAgICB0aGlzLndpbmRvd01vdXNlbW92ZSA9IHRoaXMuaW5pdE9ic2VydmFibGUod2luZG93LCAnbW91c2Vtb3ZlJyk7XG4gICAgdGhpcy5tb3VzZUVudGVyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMubW9kZSgpLmluY2x1ZGVzKCdob3ZlcicpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudHlwZSgpID09PSAndGV4dCcgJiYgbmF0aXZlRWw/LmNsaWVudFdpZHRoID49IG5hdGl2ZUVsLnNjcm9sbFdpZHRoICYmICF0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkUG9wb3ZlckNvbnRlbnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm1vdXNlQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmlyc3RDbGljay51cGRhdGUoKHZhbCkgPT4gKHRoaXMuaWdub3JlU2hvd1BvcG92ZXIoKSA/IGZhbHNlIDogIXZhbCkpO1xuICAgICAgdGhpcy5vdXRFdmVudC5lbWl0KCdjbGljaycpO1xuXG4gICAgICBpZiAoIXRoaXMubW9kZSgpLnN0YXJ0c1dpdGgoJ2NsaWNrJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tb2RlKCkgPT09ICdjbGljay10b2dnbGUnICYmICF0aGlzLmZpcnN0Q2xpY2soKSkge1xuICAgICAgICB0aGlzLnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRQb3BvdmVyQ29udGVudCgpO1xuICAgIH0pO1xuICAgIHRoaXMud2luZG93UmVzaXplLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24uYmluZCh0aGlzKSk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zQ29udHJvbCBhcyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50O1xuICB9XG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUG9wb3Zlck92ZXJsYXkoKSB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICBpZiAoIXRoaXMucG9wb3Zlck92ZXJsYXlDb21wb25lbnQgfHwgIXRoaXMucG9wb3Zlck92ZXJsYXlDb21wb25lbnQuaW5zdGFuY2UgfHwgIXRoaXMuY29uZmlnKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgY29uc3QgbmF0aXZlRWwgPSB0aGlzLmVsZW1lbnRSZWZDdXN0b20oKSB8fCB0aGlzLkVsZW1lbnQ7XG5cbiAgICAgIGluc3RhbmNlLnNldENvbmZpZyhuYXRpdmVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgeyAuLi4odGhpcy5jb25maWcoKSB8fCB7fSksIC4uLnRoaXMuZ2V0RGVmYXVsdENvbmZpZ3MoKSB9LCB0aGlzLmlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQoKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIoKSk7XG4gICAgdGhpcy50aW1lci5zZXQoXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50IHx8ICF0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50Lmluc3RhbmNlIHx8ICF0aGlzLmNvbmZpZygpIHx8ICF0aGlzLmZ1bmN0aW9uc0NvbnRyb2wpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgdmlld1BvcnQgPSBnZXRWaWV3cG9ydCgpO1xuICAgICAgICBjb25zdCByZWN0TGlzdFZpZXcgPSBhd2FpdCB0aGlzLmZ1bmN0aW9uc0NvbnRyb2wuZ2V0UmVjdENvbnRlbnQoKTtcblxuICAgICAgICBpZiAoIXJlY3RMaXN0Vmlldykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0Q29udGFpbmVyID0gYXdhaXQgdGhpcy5mdW5jdGlvbnNDb250cm9sLmdldFJlY3RDb250YWluZXIoKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VMaXN0Vmlld0FuZENvbnRhaW5lciA9IHRoaXMuY29uZmlnKCk/Lmlnbm9yZUFycm93ID09PSBmYWxzZSA/IDE0IDogNDtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpcmVjdGlvblBvcG92ZXIoKSkge1xuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZWN0TGlzdFZpZXcudG9wICsgcmVjdExpc3RWaWV3LmhlaWdodCA+IHZpZXdQb3J0LmhlaWdodCB8fFxuICAgICAgICAgICAgICByZWN0TGlzdFZpZXcudG9wIDwgcmVjdENvbnRhaW5lci50b3AgKyByZWN0Q29udGFpbmVyLmhlaWdodCB8fFxuICAgICAgICAgICAgICByZWN0TGlzdFZpZXcudG9wIC0gKHJlY3RDb250YWluZXIudG9wICsgcmVjdENvbnRhaW5lci5oZWlnaHQpID4gZGlzdGFuY2VMaXN0Vmlld0FuZENvbnRhaW5lciB8fFxuICAgICAgICAgICAgICByZWN0TGlzdFZpZXcubGVmdCArIHJlY3RMaXN0Vmlldy53aWR0aCA+IHZpZXdQb3J0LndpZHRoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZWN0Q29udGFpbmVyLnRvcCAtIChyZWN0TGlzdFZpZXcudG9wICsgcmVjdExpc3RWaWV3LmhlaWdodCkgPiBkaXN0YW5jZUxpc3RWaWV3QW5kQ29udGFpbmVyIHx8XG4gICAgICAgICAgICAgIHJlY3RMaXN0Vmlldy50b3AgKyByZWN0TGlzdFZpZXcuaGVpZ2h0ICsgZGlzdGFuY2VMaXN0Vmlld0FuZENvbnRhaW5lciA+IHJlY3RDb250YWluZXIudG9wICsgMiB8fFxuICAgICAgICAgICAgICByZWN0TGlzdFZpZXcubGVmdCArIHJlY3RMaXN0Vmlldy53aWR0aCA+IHZpZXdQb3J0LndpZHRoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sIDI1MClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAodGhpcy5pbml0RXZlbnRJbkVsZW1lbnRSZWZDdXN0b20oKSAmJiB0aGlzLmVsZW1lbnRSZWZDdXN0b20oKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZkN1c3RvbSgpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRPYnNlcnZhYmxlKGVsOiBhbnksIGV2ZW50TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiB7XG4gICAgcmV0dXJuIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbCwgZXZlbnROYW1lKS5waXBlKFxuICAgICAgdGFwKChlKSA9PiAhdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpICYmIGUuc3RvcFByb3BhZ2F0aW9uKCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFBvcG92ZXJDb250ZW50KG5hdGl2ZUVsPzogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5wb3BvdmVyT3ZlcmxheUNvbXBvbmVudCB8fCB0aGlzLmlnbm9yZVNob3dQb3BvdmVyKCkgfHwgIXRoaXMuY29uZmlnKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50ID0gdGhpcy5keW5hbWljU2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzUG9wb3Zlck92ZXJsYXlDb21wb25lbnQpO1xuICAgIHRoaXMuZnJhbWVJZC5zZXQodGhpcy5keW5hbWljU2VydmljZS5hZGRUb0JvZHkodGhpcy5wb3BvdmVyT3ZlcmxheUNvbXBvbmVudCwgdGhpcy5pc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50KCkgfHwgdGhpcy5jb25maWcoKS5pc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50KSk7XG4gICAgdGhpcy5vdXRFdmVudC5lbWl0KCdzaG93Jyk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50Lmluc3RhbmNlO1xuXG4gICAgbmF0aXZlRWwgPSBuYXRpdmVFbCB8fCB0aGlzLmVsZW1lbnRSZWZDdXN0b20oKSB8fCB0aGlzLkVsZW1lbnQ7XG4gICAgaW5zdGFuY2Uuc2V0Q29uZmlnKG5hdGl2ZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB7IC4uLih0aGlzLmNvbmZpZygpIHx8IHt9KSwgLi4udGhpcy5nZXREZWZhdWx0Q29uZmlncygpIH0sIHRoaXMuaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCgpKTtcbiAgICBjb25zdCBmbGFnc01vdXNlczogSUZsYWdNb3VzZSA9IHtcbiAgICAgIGlzTW91c2VFbnRlcjogdHJ1ZSxcbiAgICAgIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlLFxuICAgICAgaXNDb250YWluZXJIYXNTY3JvbGw6IG5hdGl2ZUVsLm9mZnNldEhlaWdodCA8IG5hdGl2ZUVsLnNjcm9sbEhlaWdodCxcbiAgICB9O1xuICAgIGNvbnN0IG5hdGl2ZUVsQ29udGFpbmVyID0gaW5zdGFuY2UuRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IG1vdXNlRW50ZXJDb250ZW50ID0gdGhpcy5pbml0T2JzZXJ2YWJsZShuYXRpdmVFbENvbnRhaW5lciwgJ21vdXNlZW50ZXInKTtcbiAgICBjb25zdCBtb3VzZUxlYXZlQ29udGVudCA9IHRoaXMuaW5pdE9ic2VydmFibGUobmF0aXZlRWxDb250YWluZXIsICdtb3VzZWxlYXZlJyk7XG4gICAgdGhpcy5zdWJzRXZlbnRQb3B1cC5hZGQoXG4gICAgICBpbnN0YW5jZS5vdXRFdmVudC5zdWJzY3JpYmUoKGRpcmVjdGlvbjogVFlQRV9QT1BPVkVSX0RJUkVDVElPTikgPT4ge1xuICAgICAgICB0aGlzLm91dEV2ZW50UG9wb3ZlckNvbnRlbnQuZW1pdChkaXJlY3Rpb24pO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzRXZlbnRQb3B1cC5hZGQoXG4gICAgICBtb3VzZUVudGVyQ29udGVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm91dEV2ZW50LmVtaXQoJ21vdXNlZW50ZXItY29udGVudCcpO1xuICAgICAgICBmbGFnc01vdXNlcy5pc01vdXNlRW50ZXJDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ3NNb3VzZXMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzRXZlbnRQb3B1cC5hZGQoXG4gICAgICB0aGlzLm1vdXNlRW50ZXIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRFdmVudC5lbWl0KCdtb3VzZWVudGVyLWVsZW1lbnQnKTtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ3NNb3VzZXMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzRXZlbnRQb3B1cC5hZGQoXG4gICAgICB0aGlzLm1vdXNlV2hlZWwuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgZmxhZ3NNb3VzZXMuaXNDb250YWluZXJIYXNTY3JvbGwgPSBmYWxzZTtcblxuICAgICAgICBpZiAobmF0aXZlRWwub2Zmc2V0SGVpZ2h0IDwgbmF0aXZlRWwuc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgICAgZmxhZ3NNb3VzZXMuaXNDb250YWluZXJIYXNTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoZmxhZ3NNb3VzZXMuaXNNb3VzZUVudGVyICYmIGZsYWdzTW91c2VzLmlzQ29udGFpbmVySGFzU2Nyb2xsKSB8fCBmbGFnc01vdXNlcy5pc01vdXNlRW50ZXJDb250ZW50IHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyQ29udGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5oYW5kbGVyTW91c2VMZWF2ZVJlbW92ZVBvcG92ZXJPdmVybGF5KHRoaXMud2luZG93TW91c2Vtb3ZlLCBmbGFnc01vdXNlcywgJ2lzTW91c2VFbnRlcicsICdpc01vdXNlRW50ZXJDb250ZW50JywgJ21vdXNlbGVhdmUtZWxlbWVudCcpO1xuICAgIHRoaXMuaGFuZGxlck1vdXNlTGVhdmVSZW1vdmVQb3BvdmVyT3ZlcmxheShtb3VzZUxlYXZlQ29udGVudCwgZmxhZ3NNb3VzZXMsICdpc01vdXNlRW50ZXJDb250ZW50JywgJ2lzTW91c2VFbnRlcicsICdtb3VzZWxlYXZlLWNvbnRlbnQnKTtcblxuICAgIGlmICh0aGlzLm1vZGUoKSA9PT0gJ2NsaWNrX29wZW5fYW5kX2NsaWNrX3BhbmVsX2NvbnRlbnRfaGlkZGVuJykge1xuICAgICAgdGhpcy5zdWJzRXZlbnRQb3B1cC5hZGQoXG4gICAgICAgIHRoaXMuaW5pdE9ic2VydmFibGUobmF0aXZlRWxDb250YWluZXIsICdjbGljaycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZXJXaW5kb3dFdmVudFJlbW92ZVBvcG92ZXJPdmVybGF5KHRoaXMud2luZG93Q2xpY2ssIGZsYWdzTW91c2VzKTtcbiAgICB0aGlzLmhhbmRsZXJXaW5kb3dFdmVudFJlbW92ZVBvcG92ZXJPdmVybGF5KHRoaXMud2luZG93TW91c2VEb3duLCBmbGFnc01vdXNlcyk7XG4gICAgdGhpcy5oYW5kbGVyV2luZG93RXZlbnRSZW1vdmVQb3BvdmVyT3ZlcmxheSh0aGlzLndpbmRvd01vdXNlVXAsIGZsYWdzTW91c2VzKTtcbiAgICB0aGlzLmhhbmRsZXJXaW5kb3dFdmVudFJlbW92ZVBvcG92ZXJPdmVybGF5KHRoaXMud2luZG93V2hlZWwsIGZsYWdzTW91c2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlcldpbmRvd0V2ZW50UmVtb3ZlUG9wb3Zlck92ZXJsYXkob2JzOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+LCBmbGFnc01vdXNlczogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuc3Vic0V2ZW50UG9wdXAuYWRkKFxuICAgICAgb2JzLnBpcGUoZGVib3VuY2VUaW1lKDEwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKGZsYWdzTW91c2VzLmlzTW91c2VFbnRlciB8fCBmbGFnc01vdXNlcy5pc01vdXNlRW50ZXJDb250ZW50IHx8IHRoaXMuaWdub3JlQ2xpY2tPdXRzaWRlKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmxhZ01vdXNlKCkgJiYgKHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyQ29udGVudCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJzdENsaWNrLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlck1vdXNlTGVhdmVSZW1vdmVQb3BvdmVyT3ZlcmxheShvYnM6IE9ic2VydmFibGU8TW91c2VFdmVudD4sIGZsYWdzTW91c2VzOiBJRmxhZ01vdXNlLCBmbGFnS2V5Q2hhbmdlVmFsdWU6IFBhdGhPZjxJRmxhZ01vdXNlPiwgZmxhZ0tleUNoZWNrOiBQYXRoT2Y8SUZsYWdNb3VzZT4sIG91dEV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICB0aGlzLnN1YnNFdmVudFBvcHVwLmFkZChcbiAgICAgIG9ic1xuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5vdXRFdmVudC5lbWl0KG91dEV2ZW50KSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKGdldFBvcG92ZXJUaW1lckRlc3Ryb3lJblF1ZXJ5VXJsKCkgfHwgdGhpcy5jb25maWcoKT8udGltZXJEZXN0cm95IHx8IDApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG91dEV2ZW50ID09PSAnbW91c2VsZWF2ZS1lbGVtZW50JyAmJlxuICAgICAgICAgICAgKGNoZWNrTW91c2VPdmVySW5Db250YWluZXIoZSwgdGhpcy5FbGVtZW50KSB8fCBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKHsgY2xpZW50WDogZS5jbGllbnRYICsgMiwgY2xpZW50WTogZS5jbGllbnRZICsgMiB9LCB0aGlzLkVsZW1lbnQpIHx8IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIoeyBjbGllbnRYOiBlLmNsaWVudFggLSAyLCBjbGllbnRZOiBlLmNsaWVudFkgLSAyIH0sIHRoaXMuRWxlbWVudCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldChmbGFnc01vdXNlcywgZmxhZ0tleUNoYW5nZVZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ3NNb3VzZXMpO1xuICAgICAgICAgIGlmICh0aGlzLmZsYWdNb3VzZSgpICYmICh0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlciB8fCB0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlckNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdldChmbGFnc01vdXNlcywgZmxhZ0tleUNoZWNrKSB8fCB0aGlzLmlnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENvbmZpZ3MoKTogSVBvcG92ZXJPdmVybGF5IHtcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IHRoaXMuY29uZmlnKCkgfHwge307XG4gICAgaWYgKGlzTmlsKGNvbmZpZ1ZhbHVlLmNvbnRlbnQpIHx8IChjb25maWdWYWx1ZS5jb250ZW50ID09PSB0aGlzLmNvbnRlbnRJbm5lckh0bWwoKSAmJiB0aGlzLmNvbnRlbnRJbm5lckh0bWwoKSAhPT0gdGhpcy5FbGVtZW50LmlubmVySFRNTCkpIHtcbiAgICAgIGNvbmZpZ1ZhbHVlLmNvbnRlbnQgPSB0aGlzLkVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRJbm5lckh0bWwuc2V0KHRoaXMuRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIGlmICghY29uZmlnVmFsdWUubWF4V2lkdGgpIHtcbiAgICAgIGNvbmZpZ1ZhbHVlLm1heFdpZHRoID0gMjUwO1xuICAgIH1cbiAgICBpZiAoY29uZmlnVmFsdWUubWF4SGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgY29uZmlnVmFsdWUubWF4SGVpZ2h0ID09PSAwKSB7XG4gICAgICBjb25maWdWYWx1ZS5tYXhIZWlnaHQgPSAxNDA7XG4gICAgfVxuICAgIGlmICghY29uZmlnVmFsdWUuZGlyZWN0aW9uKSB7XG4gICAgICBjb25maWdWYWx1ZS5kaXJlY3Rpb24gPSAnYm90dG9tJztcbiAgICB9XG4gICAgaWYgKCFjb25maWdWYWx1ZS5wb3NpdGlvbikge1xuICAgICAgY29uZmlnVmFsdWUucG9zaXRpb24gPSB7XG4gICAgICAgIG1vZGU6ICdjZW50ZXInLFxuICAgICAgICBkaXN0YW5jZTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVQb3BvdmVyT3ZlcmxheSgpIHtcbiAgICBpZiAodGhpcy5wb3BvdmVyT3ZlcmxheUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vdXRFdmVudC5lbWl0KCdyZW1vdmUnKTtcbiAgICAgIHRoaXMuc3Vic0V2ZW50UG9wdXAudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3Vic0V2ZW50UG9wdXAgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuZHluYW1pY1NlcnZpY2UucmVtb3ZlKHRoaXMucG9wb3Zlck92ZXJsYXlDb21wb25lbnQsIHRoaXMuZnJhbWVJZCgpKTtcbiAgICB0aGlzLmZyYW1lSWQuc2V0KCcnKTtcbiAgICB0aGlzLnBvcG92ZXJPdmVybGF5Q29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmlyc3RDbGljay5zZXQoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIoKSk7XG4gICAgdGhpcy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuc3Vic0V2ZW50UG9wdXAudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgLz5cbiJdfQ==
|