@libs-ui/components-scroll-overlay 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 +138 -0
- package/demo/scroll-overlay.demo.d.ts +44 -0
- package/esm2022/demo/scroll-overlay.demo.mjs +84 -0
- package/esm2022/index.mjs +4 -0
- package/esm2022/libs-ui-components-scroll-overlay.mjs +5 -0
- package/esm2022/scroll-overlay.directive.mjs +376 -0
- package/esm2022/scroll.interface.mjs +2 -0
- package/fesm2022/libs-ui-components-scroll-overlay.mjs +464 -0
- package/fesm2022/libs-ui-components-scroll-overlay.mjs.map +1 -0
- package/index.d.ts +3 -0
- package/package.json +26 -0
- package/scroll-overlay.directive.d.ts +48 -0
- package/scroll.interface.d.ts +14 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from '@angular/core';
|
|
3
|
+
import { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';
|
|
4
|
+
import { Subject, Subscription, fromEvent, interval, switchMap, takeUntil, tap } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class LibsUiComponentsScrollOverlayDirective {
|
|
7
|
+
// #region PROPERTY
|
|
8
|
+
styles = computed(() => `
|
|
9
|
+
.scrollbar-track{
|
|
10
|
+
background-color:${this.scrollbarColor()};
|
|
11
|
+
}
|
|
12
|
+
.scrollbar-track:hover{
|
|
13
|
+
background-color:${this.scrollbarHoverColor()};
|
|
14
|
+
}
|
|
15
|
+
.scrollbar-track-X {
|
|
16
|
+
width:100%;
|
|
17
|
+
position: absolute;
|
|
18
|
+
bottom: 0;
|
|
19
|
+
left: 0;
|
|
20
|
+
visibility: hidden;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
opacity: 0;
|
|
23
|
+
z-index: 1;
|
|
24
|
+
transition: opacity 0.3s ease, visibility 0.3s ease;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.scrollbar-track-Y {
|
|
28
|
+
height:100%;
|
|
29
|
+
position: absolute;
|
|
30
|
+
top: 0;
|
|
31
|
+
right: 0;
|
|
32
|
+
visibility: hidden;
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
opacity: 0;
|
|
35
|
+
z-index: 1;
|
|
36
|
+
transition: opacity 0.3s ease, visibility 0.3s ease;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.scrollbar-thumb{
|
|
40
|
+
background-color:${this.scrollThumbColor()};
|
|
41
|
+
}
|
|
42
|
+
.scrollbar-thumb:hover{
|
|
43
|
+
background-color:${this.scrollThumbHoverColor()};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.scrollbar-thumb-X {
|
|
47
|
+
height: calc(100% - ${this.scrollbarPadding() * 2}px);
|
|
48
|
+
bottom: ${this.scrollbarPadding()}px;
|
|
49
|
+
border-radius: 4px;
|
|
50
|
+
cursor: grabbing;
|
|
51
|
+
transition: background-color 0.3s;
|
|
52
|
+
position: absolute;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.scrollbar-thumb-Y {
|
|
56
|
+
width: calc(100% - ${this.scrollbarPadding() * 2}px);
|
|
57
|
+
right: ${this.scrollbarPadding()}px;
|
|
58
|
+
border-radius: 4px;
|
|
59
|
+
cursor: grabbing;
|
|
60
|
+
transition: background-color 0.3s;
|
|
61
|
+
position: absolute;
|
|
62
|
+
}
|
|
63
|
+
`, {});
|
|
64
|
+
isScrollThumb = signal(false);
|
|
65
|
+
keepDisplayThumb = signal(false);
|
|
66
|
+
subsX = new Subscription();
|
|
67
|
+
subsY = new Subscription();
|
|
68
|
+
scrollbarWidth = computed(() => this.options()?.scrollbarWidth ?? 10); // Chiều rộng thanh cuộn
|
|
69
|
+
scrollbarPadding = computed(() => this.options()?.scrollbarPadding ?? 2); // Chiều rộng thanh cuộn
|
|
70
|
+
scrollbarColor = computed(() => this.options()?.scrollbarColor ?? '');
|
|
71
|
+
scrollbarHoverColor = computed(() => this.options()?.scrollbarColor ?? '#CDD0D640');
|
|
72
|
+
scrollThumbColor = computed(() => this.options()?.scrollThumbColor ?? '#CDD0D6');
|
|
73
|
+
scrollThumbHoverColor = computed(() => this.options()?.scrollThumbHoverColor ?? '#9CA2AD');
|
|
74
|
+
divContainer = document.createElement('div');
|
|
75
|
+
trackX = document.createElement('div');
|
|
76
|
+
thumbX = document.createElement('div');
|
|
77
|
+
trackY = document.createElement('div');
|
|
78
|
+
thumbY = document.createElement('div');
|
|
79
|
+
onDestroy = new Subject();
|
|
80
|
+
// #region INPUT
|
|
81
|
+
debugMode = input(false);
|
|
82
|
+
ignoreInit = input(false);
|
|
83
|
+
classContainer = input('', { transform: (value) => value ?? '' });
|
|
84
|
+
options = input(Object.assign({}));
|
|
85
|
+
elementCheckScrollX = input();
|
|
86
|
+
elementCheckScrollY = input();
|
|
87
|
+
elementScroll = input();
|
|
88
|
+
// #region OUTPUT
|
|
89
|
+
outScroll = output();
|
|
90
|
+
outScrollX = output();
|
|
91
|
+
outScrollY = output();
|
|
92
|
+
outScrollTop = output();
|
|
93
|
+
outScrollBottom = output();
|
|
94
|
+
// #region INJECT
|
|
95
|
+
element = inject(ElementRef);
|
|
96
|
+
render2 = inject(Renderer2);
|
|
97
|
+
constructor() {
|
|
98
|
+
effect(() => {
|
|
99
|
+
if (this.ignoreInit()) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const options = this.options();
|
|
103
|
+
this.divContainer.className = '';
|
|
104
|
+
this.classContainer()
|
|
105
|
+
?.split(' ')
|
|
106
|
+
.forEach((className) => {
|
|
107
|
+
if (!className) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.divContainer.classList.add(className);
|
|
111
|
+
});
|
|
112
|
+
untracked(() => {
|
|
113
|
+
this.Element.classList.toggle('overflow-hidden', options?.scrollX === 'hidden' && options?.scrollY === 'hidden');
|
|
114
|
+
if (options?.scrollX !== 'hidden') {
|
|
115
|
+
this.subsX.unsubscribe();
|
|
116
|
+
this.trackX.className = '';
|
|
117
|
+
this.thumbX.className = '';
|
|
118
|
+
this.trackX.style.height = `${this.scrollbarWidth()}px`;
|
|
119
|
+
this.createScrollbar('X', this.trackX, this.thumbX);
|
|
120
|
+
this.bindEventsScrollBar('X', this.trackX);
|
|
121
|
+
this.handlerDragAndDropThumb('X');
|
|
122
|
+
this.handlerClickTrack('X');
|
|
123
|
+
}
|
|
124
|
+
if (options?.scrollY !== 'hidden') {
|
|
125
|
+
this.trackY.className = '';
|
|
126
|
+
this.thumbY.className = '';
|
|
127
|
+
this.trackY.style.width = `${this.scrollbarWidth()}px`;
|
|
128
|
+
this.subsY.unsubscribe();
|
|
129
|
+
this.createScrollbar('Y', this.trackY, this.thumbY);
|
|
130
|
+
this.bindEventsScrollBar('Y', this.trackY);
|
|
131
|
+
this.handlerDragAndDropThumb('Y');
|
|
132
|
+
this.handlerClickTrack('Y');
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// #region FUNCTIONS
|
|
138
|
+
get Element() {
|
|
139
|
+
return this.elementScroll() || this.element.nativeElement;
|
|
140
|
+
}
|
|
141
|
+
createScrollbar(scrollDirection, trackEl, thumbEl) {
|
|
142
|
+
const idStyleTag = '#id-style-tag-custom-scroll-overlay';
|
|
143
|
+
const styleElCustomScrollOverlay = document.getElementById(idStyleTag);
|
|
144
|
+
if (!styleElCustomScrollOverlay) {
|
|
145
|
+
const styleEl = document.createElement('style');
|
|
146
|
+
styleEl.setAttribute('id', idStyleTag);
|
|
147
|
+
styleEl.innerHTML = this.styles();
|
|
148
|
+
document.head.append(styleEl);
|
|
149
|
+
}
|
|
150
|
+
const stylesProperty = {
|
|
151
|
+
'box-sizing': 'border-box',
|
|
152
|
+
'scrollbar-width': 'none',
|
|
153
|
+
'scrollbar-color': 'transparent transparent',
|
|
154
|
+
overflow: 'hidden',
|
|
155
|
+
'overflow-x': `${this.options()?.scrollX || 'scroll'}`,
|
|
156
|
+
'overflow-y': `${this.options()?.scrollY || 'scroll'}`,
|
|
157
|
+
};
|
|
158
|
+
Object.keys(stylesProperty).forEach((key) => {
|
|
159
|
+
this.render2.setStyle(this.Element, key, stylesProperty[key], 1);
|
|
160
|
+
});
|
|
161
|
+
trackEl.classList.add(`scrollbar-track`);
|
|
162
|
+
trackEl.classList.add(`scrollbar-track-${scrollDirection}`);
|
|
163
|
+
thumbEl.classList.add(`scrollbar-thumb`);
|
|
164
|
+
thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);
|
|
165
|
+
trackEl.appendChild(thumbEl);
|
|
166
|
+
if (this.Element.className) {
|
|
167
|
+
this.Element.className.split(' ').forEach((className) => {
|
|
168
|
+
if (className &&
|
|
169
|
+
(['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\[[0-9]+px\]$/.test(className)) &&
|
|
170
|
+
!this.divContainer.classList.contains(className)) {
|
|
171
|
+
this.divContainer.classList.add(className);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
if (!this.Element.className.includes('min-h-')) {
|
|
175
|
+
this.divContainer.classList.add('min-h-0');
|
|
176
|
+
}
|
|
177
|
+
if (!this.Element.className.includes('min-w-')) {
|
|
178
|
+
this.divContainer.classList.add('min-w-0');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
this.divContainer.appendChild(trackEl);
|
|
182
|
+
if (!this.divContainer.style.position) {
|
|
183
|
+
this.Element.parentElement?.insertBefore(this.divContainer, this.Element);
|
|
184
|
+
this.divContainer.style.position = 'relative';
|
|
185
|
+
}
|
|
186
|
+
this.divContainer.append(this.Element);
|
|
187
|
+
this.updateScrollbarSize(scrollDirection);
|
|
188
|
+
}
|
|
189
|
+
bindEventsScrollBar(scrollDirection, trackEl) {
|
|
190
|
+
let scrollLeft = this.Element.scrollLeft;
|
|
191
|
+
let scrollTop = this.Element.scrollTop;
|
|
192
|
+
const subs = fromEvent(this.Element, 'scroll')
|
|
193
|
+
.pipe(tap((event) => {
|
|
194
|
+
const target = this.Element;
|
|
195
|
+
this.outScroll.emit(event);
|
|
196
|
+
if (scrollDirection === 'X') {
|
|
197
|
+
if (target.scrollLeft && target.scrollLeft + target.offsetWidth >= target.scrollWidth) {
|
|
198
|
+
target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);
|
|
199
|
+
}
|
|
200
|
+
if (target.scrollLeft !== scrollLeft) {
|
|
201
|
+
this.outScrollX.emit(event);
|
|
202
|
+
}
|
|
203
|
+
scrollLeft = target.scrollLeft;
|
|
204
|
+
this.updateScrollbarPosition(scrollDirection);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (target.scrollTop === scrollTop) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
this.updateScrollbarPosition(scrollDirection);
|
|
211
|
+
scrollTop = target.scrollTop;
|
|
212
|
+
this.outScrollY.emit(event);
|
|
213
|
+
if (target.scrollTop === 0) {
|
|
214
|
+
return this.outScrollTop.emit(event);
|
|
215
|
+
}
|
|
216
|
+
if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {
|
|
217
|
+
return this.outScrollBottom.emit(event);
|
|
218
|
+
}
|
|
219
|
+
}), takeUntil(this.onDestroy))
|
|
220
|
+
.subscribe();
|
|
221
|
+
subs.add(fromEvent(document, 'resize')
|
|
222
|
+
.pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy))
|
|
223
|
+
.subscribe());
|
|
224
|
+
const mouseLeave = fromEvent(this.divContainer, 'mouseleave');
|
|
225
|
+
const mouseenter = fromEvent(this.divContainer, 'mouseenter');
|
|
226
|
+
subs.add(mouseenter
|
|
227
|
+
.pipe(tap(() => {
|
|
228
|
+
if ((scrollDirection === 'X' && !this.options()?.scrollXOpacity0) || (scrollDirection === 'Y' && !this.options()?.scrollYOpacity0)) {
|
|
229
|
+
trackEl.style.visibility = 'visible';
|
|
230
|
+
trackEl.style.opacity = '1';
|
|
231
|
+
}
|
|
232
|
+
this.updateScrollbarSize(scrollDirection);
|
|
233
|
+
}), switchMap(() => interval(1000).pipe(takeUntil(mouseLeave))), tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy))
|
|
234
|
+
.subscribe());
|
|
235
|
+
subs.add(mouseLeave
|
|
236
|
+
.pipe(tap(() => {
|
|
237
|
+
if (this.keepDisplayThumb()) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
trackEl.style.visibility = 'hidden';
|
|
241
|
+
trackEl.style.opacity = '0';
|
|
242
|
+
}), takeUntil(this.onDestroy))
|
|
243
|
+
.subscribe());
|
|
244
|
+
if (scrollDirection === 'X') {
|
|
245
|
+
this.subsX = subs;
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (scrollDirection === 'Y') {
|
|
249
|
+
this.subsY = subs;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
handlerClickTrack(scrollDirection) {
|
|
254
|
+
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
255
|
+
const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;
|
|
256
|
+
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
257
|
+
subs.add(fromEvent(elementTrack, 'click').subscribe((e) => {
|
|
258
|
+
if (this.isScrollThumb()) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if ((scrollDirection === 'X' && e.clientX < elementThumb.getBoundingClientRect().left) || (scrollDirection === 'Y' && e.clientY < elementThumb.getBoundingClientRect().top)) {
|
|
262
|
+
this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', 0);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (scrollDirection === 'X') {
|
|
266
|
+
this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().width);
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().height);
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
handlerDragAndDropThumb(scrollDirection) {
|
|
273
|
+
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
274
|
+
const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;
|
|
275
|
+
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
276
|
+
let lengthThumbToPointClick = 0;
|
|
277
|
+
subs.add(getDragEventByElement({
|
|
278
|
+
elementMouseDown: elementThumb,
|
|
279
|
+
functionMouseDown: (mouseEvent) => {
|
|
280
|
+
this.isScrollThumb.set(true);
|
|
281
|
+
this.keepDisplayThumb.set(true);
|
|
282
|
+
if (scrollDirection === 'X') {
|
|
283
|
+
lengthThumbToPointClick = elementThumb.getBoundingClientRect().left - mouseEvent.clientX;
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
lengthThumbToPointClick = elementThumb.getBoundingClientRect().top - mouseEvent.clientY;
|
|
287
|
+
},
|
|
288
|
+
functionMouseUp: (mouseEvent) => {
|
|
289
|
+
this.keepDisplayThumb.set(false);
|
|
290
|
+
lengthThumbToPointClick = 0;
|
|
291
|
+
if (!checkMouseOverInContainer(mouseEvent, this.Element)) {
|
|
292
|
+
elementTrack.style.visibility = 'hidden';
|
|
293
|
+
elementTrack.style.opacity = '0';
|
|
294
|
+
}
|
|
295
|
+
setTimeout(() => {
|
|
296
|
+
this.isScrollThumb.set(false);
|
|
297
|
+
}, 250);
|
|
298
|
+
},
|
|
299
|
+
onDestroy: this.onDestroy,
|
|
300
|
+
}).subscribe((mouseEvent) => {
|
|
301
|
+
this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick);
|
|
302
|
+
}));
|
|
303
|
+
}
|
|
304
|
+
updateScrollPositionByUserAction(scrollDirection, e, behavior, lengthThumbToPointClick = 0) {
|
|
305
|
+
e.stopPropagation();
|
|
306
|
+
if (scrollDirection === 'X') {
|
|
307
|
+
const containerWidth = this.Element.offsetWidth;
|
|
308
|
+
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
309
|
+
const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left + lengthThumbToPointClick;
|
|
310
|
+
const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);
|
|
311
|
+
this.Element.scroll({ left: scrollLeft, behavior });
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const containerHeight = this.Element.offsetHeight;
|
|
315
|
+
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
316
|
+
const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top + lengthThumbToPointClick;
|
|
317
|
+
const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);
|
|
318
|
+
this.Element.scroll({ top: scrollTop, behavior });
|
|
319
|
+
}
|
|
320
|
+
updateScrollbarSize(scrollDirection) {
|
|
321
|
+
if (scrollDirection === 'X') {
|
|
322
|
+
const containerWidth = this.Element.offsetWidth;
|
|
323
|
+
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
324
|
+
const thumbWidth = (containerWidth / contentWidth) * containerWidth;
|
|
325
|
+
this.thumbX.style.width = `${Math.max(20, thumbWidth)}px`;
|
|
326
|
+
this.trackX.style.display = 'none';
|
|
327
|
+
if (contentWidth > containerWidth) {
|
|
328
|
+
this.trackX.style.display = 'block';
|
|
329
|
+
}
|
|
330
|
+
this.updateScrollbarPosition(scrollDirection);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const containerHeight = this.Element.offsetHeight;
|
|
334
|
+
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
335
|
+
const thumbHeight = (containerHeight / contentHeight) * containerHeight;
|
|
336
|
+
this.thumbY.style.height = `${Math.max(20, thumbHeight)}px`;
|
|
337
|
+
this.trackY.style.display = 'none';
|
|
338
|
+
if (contentHeight > containerHeight) {
|
|
339
|
+
this.trackY.style.display = 'block';
|
|
340
|
+
}
|
|
341
|
+
this.updateScrollbarPosition('Y');
|
|
342
|
+
}
|
|
343
|
+
updateScrollbarPosition(scrollDirection) {
|
|
344
|
+
if (scrollDirection === 'X') {
|
|
345
|
+
const containerWidth = this.Element.offsetWidth;
|
|
346
|
+
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
347
|
+
const scrollLeft = this.Element.scrollLeft;
|
|
348
|
+
const thumbPosition = (scrollLeft / (contentWidth - containerWidth)) * (containerWidth - this.thumbX.offsetWidth);
|
|
349
|
+
this.thumbX.style.left = `${thumbPosition}px`;
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const containerHeight = this.Element.offsetHeight;
|
|
353
|
+
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
354
|
+
const scrollTop = this.Element.scrollTop;
|
|
355
|
+
const thumbPosition = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - this.thumbY.offsetHeight);
|
|
356
|
+
this.thumbY.style.top = `${thumbPosition}px`;
|
|
357
|
+
}
|
|
358
|
+
ngOnDestroy() {
|
|
359
|
+
this.divContainer.remove();
|
|
360
|
+
this.subsX.unsubscribe();
|
|
361
|
+
this.subsY.unsubscribe();
|
|
362
|
+
this.onDestroy.next();
|
|
363
|
+
this.onDestroy.complete();
|
|
364
|
+
}
|
|
365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
366
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsScrollOverlayDirective, isStandalone: true, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: { debugMode: { classPropertyName: "debugMode", publicName: "debugMode", isSignal: true, isRequired: false, transformFunction: null }, ignoreInit: { classPropertyName: "ignoreInit", publicName: "ignoreInit", isSignal: true, isRequired: false, transformFunction: null }, classContainer: { classPropertyName: "classContainer", publicName: "classContainer", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollX: { classPropertyName: "elementCheckScrollX", publicName: "elementCheckScrollX", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollY: { classPropertyName: "elementCheckScrollY", publicName: "elementCheckScrollY", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outScroll: "outScroll", outScrollX: "outScrollX", outScrollY: "outScrollY", outScrollTop: "outScrollTop", outScrollBottom: "outScrollBottom" }, ngImport: i0 });
|
|
367
|
+
}
|
|
368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, decorators: [{
|
|
369
|
+
type: Directive,
|
|
370
|
+
args: [{
|
|
371
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
372
|
+
selector: '[LibsUiComponentsScrollOverlayDirective]',
|
|
373
|
+
standalone: true,
|
|
374
|
+
}]
|
|
375
|
+
}], ctorParameters: () => [] });
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPN0YsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxtQkFBbUI7SUFDRixNQUFNLEdBQUcsUUFBUSxDQUNoQyxHQUFHLEVBQUUsQ0FBQzs7NEJBRWtCLElBQUksQ0FBQyxjQUFjLEVBQUU7OzsyQkFHdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBMkIxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7OzsyQkFHdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFOzs7OzhCQUl6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO2tCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7Ozs7OzZCQVFaLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTs7Ozs7O0dBTXJDLEVBQ0MsRUFBRSxDQUNILENBQUM7SUFDTSxhQUFhLEdBQUcs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LENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztZQUU5QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FsYlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyLCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCwgaW50ZXJ2YWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTY3JvbGxPdmVybGF5T3B0aW9ucywgVFlQRV9TQ1JPTExfRElSRUNUSU9OIH0gZnJvbSAnLi9zY3JvbGwuaW50ZXJmYWNlJztcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSByZWFkb25seSBzdHlsZXMgPSBjb21wdXRlZChcbiAgICAoKSA9PiBgXG4gICAgICAuc2Nyb2xsYmFyLXRyYWNre1xuICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsYmFyQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxiYXJIb3ZlckNvbG9yKCl9O1xuICAgICAgfVxuICAgICAgLnNjcm9sbGJhci10cmFjay1YIHtcbiAgICAgICAgd2lkdGg6MTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdHJhY2stWSB7XG4gICAgICAgIGhlaWdodDoxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbFRodW1iQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRodW1iOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxUaHVtYkhvdmVyQ29sb3IoKX07XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWItWCB7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKSAqIDJ9cHgpO1xuICAgICAgICBib3R0b206ICR7dGhpcy5zY3JvbGxiYXJQYWRkaW5nKCl9cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgY3Vyc29yOiBncmFiYmluZztcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWItWSB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpICogMn1weCk7XG4gICAgICAgIHJpZ2h0OiAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpfXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuICBgLFxuICAgIHt9XG4gICk7XG4gIHByaXZhdGUgaXNTY3JvbGxUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUga2VlcERpc3BsYXlUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3Vic1kgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyV2lkdGggPz8gMTApOyAvLyBDaGnhu4F1IHLhu5luZyB0aGFuaCBjdeG7mW5cbiAgcHJpdmF0ZSBzY3JvbGxiYXJQYWRkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhclBhZGRpbmcgPz8gMik7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcnKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJIb3ZlckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcjQ0REMEQ2NDAnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbFRodW1iQ29sb3IgPz8gJyNDREQwRDYnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJIb3ZlckNvbG9yID8/ICcjOUNBMkFEJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2tYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRodW1iWDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1k6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJZOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBkZWJ1Z01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUluaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgb3B0aW9ucyA9IGlucHV0PElTY3JvbGxPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZD4oT2JqZWN0LmFzc2lnbih7fSkpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxYID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFkgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNjcm9sbCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWSA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsVG9wID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxCb3R0b20gPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaWdub3JlSW5pdCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgdGhpcy5jbGFzc0NvbnRhaW5lcigpXG4gICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ292ZXJmbG93LWhpZGRlbicsIG9wdGlvbnM/LnNjcm9sbFggPT09ICdoaWRkZW4nICYmIG9wdGlvbnM/LnNjcm9sbFkgPT09ICdoaWRkZW4nKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnNjcm9sbFggIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMudHJhY2tYLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudGh1bWJYLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmhlaWdodCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1gnLCB0aGlzLnRyYWNrWCwgdGhpcy50aHVtYlgpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWCcsIHRoaXMudHJhY2tYKTtcblxuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1gnKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdYJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnRyYWNrWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRodW1iWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRyYWNrWS5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgICAgICAgdGhpcy5zdWJzWS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlU2Nyb2xsYmFyKCdZJywgdGhpcy50cmFja1ksIHRoaXMudGh1bWJZKTtcbiAgICAgICAgICB0aGlzLmJpbmRFdmVudHNTY3JvbGxCYXIoJ1knLCB0aGlzLnRyYWNrWSk7XG5cbiAgICAgICAgICB0aGlzLmhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKCdZJyk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tUcmFjaygnWScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTY3JvbGwoKSB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2Nyb2xsYmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgdGh1bWJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBpZFN0eWxlVGFnID0gJyNpZC1zdHlsZS10YWctY3VzdG9tLXNjcm9sbC1vdmVybGF5JztcbiAgICBjb25zdCBzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU3R5bGVUYWcpO1xuXG4gICAgaWYgKCFzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSkge1xuICAgICAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsLnNldEF0dHJpYnV0ZSgnaWQnLCBpZFN0eWxlVGFnKTtcbiAgICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlRWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlc1Byb3BlcnR5ID0ge1xuICAgICAgJ2JveC1zaXppbmcnOiAnYm9yZGVyLWJveCcsXG4gICAgICAnc2Nyb2xsYmFyLXdpZHRoJzogJ25vbmUnLFxuICAgICAgJ3Njcm9sbGJhci1jb2xvcic6ICd0cmFuc3BhcmVudCB0cmFuc3BhcmVudCcsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAnb3ZlcmZsb3cteCc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxYIHx8ICdzY3JvbGwnfWAsXG4gICAgICAnb3ZlcmZsb3cteSc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxZIHx8ICdzY3JvbGwnfWAsXG4gICAgfSBhcyBhbnk7XG5cbiAgICBPYmplY3Qua2V5cyhzdHlsZXNQcm9wZXJ0eSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5FbGVtZW50LCBrZXksIHN0eWxlc1Byb3BlcnR5W2tleV0sIDEpO1xuICAgIH0pO1xuXG4gICAgdHJhY2tFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdHJhY2tgKTtcbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcblxuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRodW1iYCk7XG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjbGFzc05hbWUgJiZcbiAgICAgICAgICAoWyd3LWZ1bGwnLCAndy1zY3JlZW4nLCAnaC1mdWxsJywgJ2gtc2NyZWVuJywgJ3Nocmluay0wJ10uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykgfHwgL14oIT8pKGh8dyktXFxbWzAtOV0rcHhcXF0kLy50ZXN0KGNsYXNzTmFtZSkpICYmXG4gICAgICAgICAgIXRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLXctMCcpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRpdkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmFja0VsKTtcblxuICAgIGlmICghdGhpcy5kaXZDb250YWluZXIuc3R5bGUucG9zaXRpb24pIHtcbiAgICAgIHRoaXMuRWxlbWVudC5wYXJlbnRFbGVtZW50Py5pbnNlcnRCZWZvcmUodGhpcy5kaXZDb250YWluZXIsIHRoaXMuRWxlbWVudCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZCh0aGlzLkVsZW1lbnQpO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kRXZlbnRzU2Nyb2xsQmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCkge1xuICAgIGxldCBzY3JvbGxMZWZ0ID0gdGhpcy5FbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHNjcm9sbFRvcCA9IHRoaXMuRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3Qgc3ViczogU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLkVsZW1lbnQ7XG5cbiAgICAgICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAmJiB0YXJnZXQuc2Nyb2xsTGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCA+PSB0YXJnZXQuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsV2lkdGggLSB0YXJnZXQub2Zmc2V0V2lkdGggLSAodGFyZ2V0Lm9mZnNldFdpZHRoIC0gdGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgIHRoaXMub3V0U2Nyb2xsWC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHRhcmdldC5zY3JvbGxUb3A7XG4gICAgICAgICAgdGhpcy5vdXRTY3JvbGxZLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbFRvcC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIDMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbEJvdHRvbS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBzdWJzLmFkZChcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIGNvbnN0IG1vdXNlTGVhdmUgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWxlYXZlJyk7XG4gICAgY29uc3QgbW91c2VlbnRlciA9IGZyb21FdmVudCh0aGlzLmRpdkNvbnRhaW5lciwgJ21vdXNlZW50ZXInKTtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgbW91c2VlbnRlclxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFhPcGFjaXR5MCkgfHwgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knICYmICF0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWU9wYWNpdHkwKSkge1xuICAgICAgICAgICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2VVbnRpbChtb3VzZUxlYXZlKSkpLFxuICAgICAgICAgIHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgbW91c2VMZWF2ZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2VlcERpc3BsYXlUaHVtYigpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICB0aGlzLnN1YnNYID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJykge1xuICAgICAgdGhpcy5zdWJzWSA9IHN1YnM7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVHJhY2soc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuICAgIGNvbnN0IHN1YnMgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMuc3Vic1ggOiB0aGlzLnN1YnNZO1xuXG4gICAgc3Vicy5hZGQoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudFRyYWNrLCAnY2xpY2snKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxUaHVtYigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgZS5jbGllbnRYIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiBlLmNsaWVudFkgPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgLTEgKiBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJhZ0FuZERyb3BUaHVtYihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgY29uc3Qgc3VicyA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy5zdWJzWCA6IHRoaXMuc3Vic1k7XG4gICAgbGV0IGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHtcbiAgICAgICAgZWxlbWVudE1vdXNlRG93bjogZWxlbWVudFRodW1iLFxuICAgICAgICBmdW5jdGlvbk1vdXNlRG93bjogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMua2VlcERpc3BsYXlUaHVtYi5zZXQodHJ1ZSk7XG4gICAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbW91c2VFdmVudC5jbGllbnRYO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uTW91c2VVcDogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDA7XG4gICAgICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlRXZlbnQsIHRoaXMuRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkRlc3Ryb3k6IHRoaXMub25EZXN0cm95LFxuICAgICAgfSkuc3Vic2NyaWJlKChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50LCAnYXV0bycsIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGU6IE1vdXNlRXZlbnQsIGJlaGF2aW9yOiAnYXV0bycgfCAnc21vb3RoJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRYIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKSkgKiAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogc2Nyb2xsTGVmdCwgYmVoYXZpb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCkpICogKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvciB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogY29udGFpbmVyV2lkdGg7XG5cbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLndpZHRoID0gYCR7TWF0aC5tYXgoMjAsIHRodW1iV2lkdGgpfXB4YDtcbiAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBpZiAoY29udGVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0IC8gY29udGVudEhlaWdodCkgKiBjb250YWluZXJIZWlnaHQ7XG5cbiAgICB0aGlzLnRodW1iWS5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLm1heCgyMCwgdGh1bWJIZWlnaHQpfXB4YDtcbiAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChjb250ZW50SGVpZ2h0ID4gY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKCdZJyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IChzY3JvbGxMZWZ0IC8gKGNvbnRlbnRXaWR0aCAtIGNvbnRhaW5lcldpZHRoKSkgKiAoY29udGFpbmVyV2lkdGggLSB0aGlzLnRodW1iWC5vZmZzZXRXaWR0aCk7XG5cbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLmxlZnQgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHNjcm9sbFRvcCAvIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KSkgKiAoY29udGFpbmVySGVpZ2h0IC0gdGhpcy50aHVtYlkub2Zmc2V0SGVpZ2h0KTtcblxuICAgIHRoaXMudGh1bWJZLnN0eWxlLnRvcCA9IGAke3RodW1iUG9zaXRpb259cHhgO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXZDb250YWluZXIucmVtb3ZlKCk7XG4gICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9zY3JvbGwtb3ZlcmxheS9zcmMvc2Nyb2xsLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgVFlQRV9TQ1JPTExfRElSRUNUSU9OID0gJ1gnIHwgJ1knO1xuZXhwb3J0IHR5cGUgVFlQRV9TQ1JPTExfT1ZFUkZMT1cgPSAnaGlkZGVuJyB8ICdzY3JvbGwnO1xuZXhwb3J0IGludGVyZmFjZSBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMge1xuICBzY3JvbGxiYXJXaWR0aD86IG51bWJlcjtcbiAgc2Nyb2xsYmFyQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbGJhckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbFRodW1iQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbFRodW1iSG92ZXJDb2xvcj86IHN0cmluZztcbiAgc2Nyb2xsYmFyUGFkZGluZz86IG51bWJlcjtcbiAgc2Nyb2xsWD86IFRZUEVfU0NST0xMX09WRVJGTE9XO1xuICBzY3JvbGxYT3BhY2l0eTA/OiBib29sZWFuO1xuICBzY3JvbGxZPzogVFlQRV9TQ1JPTExfT1ZFUkZMT1c7XG4gIHNjcm9sbFlPcGFjaXR5MD86IGJvb2xlYW47XG59XG4iXX0=
|