@seniorsistemas/angular-components 19.1.1 → 19.3.0

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.
Files changed (70) hide show
  1. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +58 -25
  2. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +8 -8
  3. package/dynamic-form/dynamic-form/dynamic-form.directive.d.ts +3 -0
  4. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +7 -0
  5. package/dynamic-form/public-api.d.ts +2 -3
  6. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +140 -99
  7. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +12 -12
  8. package/esm2022/dynamic-form/dynamic-form/dynamic-form.directive.mjs +17 -1
  9. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -1
  10. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  13. package/esm2022/dynamic-form/public-api.mjs +3 -4
  14. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  15. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +2 -3
  16. package/esm2022/lib/locale/fallback.mjs +10 -2
  17. package/esm2022/locale/lib/locale/apply-localized-mask.mjs +19 -0
  18. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
  19. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +5 -4
  20. package/esm2022/locale/public-api.mjs +2 -1
  21. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +12 -148
  22. package/esm2022/number-input/lib/number-input/number-input.module.mjs +5 -5
  23. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +32 -35
  24. package/esm2022/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.mjs +460 -0
  25. package/esm2022/spotlight/lib/spotlight/spotlight-step.directive.mjs +50 -0
  26. package/esm2022/spotlight/lib/spotlight/spotlight-tour.service.mjs +251 -0
  27. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +193 -0
  28. package/esm2022/spotlight/lib/spotlight/types/spotlight-position.mjs +2 -0
  29. package/esm2022/spotlight/lib/spotlight/types/spotlight-step.mjs +2 -0
  30. package/esm2022/spotlight/lib/spotlight/types/spotlight-stop-event.mjs +2 -0
  31. package/esm2022/spotlight/public-api.mjs +4 -0
  32. package/esm2022/spotlight/seniorsistemas-angular-components-spotlight.mjs +5 -0
  33. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +20 -4
  34. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +139 -98
  35. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +35 -19
  37. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -3
  39. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -4
  41. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +14 -151
  43. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +31 -34
  45. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +947 -0
  47. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -0
  48. package/fesm2022/seniorsistemas-angular-components-table.mjs +20 -5
  49. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components.mjs +9 -1
  51. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  52. package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -3
  53. package/locale/lib/locale/apply-localized-mask.d.ts +9 -0
  54. package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -3
  55. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +3 -2
  56. package/locale/public-api.d.ts +1 -0
  57. package/number-input/lib/number-input/number-input.directive.d.ts +7 -47
  58. package/number-input/lib/number-input/number-input.module.d.ts +2 -2
  59. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +8 -9
  60. package/package.json +13 -7
  61. package/spotlight/README.md +311 -0
  62. package/spotlight/index.d.ts +5 -0
  63. package/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.d.ts +70 -0
  64. package/spotlight/lib/spotlight/spotlight-step.directive.d.ts +28 -0
  65. package/spotlight/lib/spotlight/spotlight-tour.service.d.ts +146 -0
  66. package/spotlight/lib/spotlight/spotlight.component.d.ts +82 -0
  67. package/spotlight/lib/spotlight/types/spotlight-position.d.ts +1 -0
  68. package/spotlight/lib/spotlight/types/spotlight-step.d.ts +21 -0
  69. package/spotlight/lib/spotlight/types/spotlight-stop-event.d.ts +13 -0
  70. package/spotlight/public-api.d.ts +6 -0
@@ -0,0 +1,460 @@
1
+ import { NgStyle } from '@angular/common';
2
+ import { Component, computed, DestroyRef, EnvironmentInjector, inject, NgZone, signal, } from '@angular/core';
3
+ import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
+ import { FocusTrapFactory } from '@angular/cdk/a11y';
5
+ import { Overlay } from '@angular/cdk/overlay';
6
+ import { ComponentPortal } from '@angular/cdk/portal';
7
+ import { combineLatest, debounceTime, fromEvent } from 'rxjs';
8
+ import { SpotlightComponent } from '../spotlight.component';
9
+ import { SpotlightTourService } from '../spotlight-tour.service';
10
+ import * as i0 from "@angular/core";
11
+ const POPOVER_WIDTH = 342;
12
+ const SPOTLIGHT_PADDING = 8;
13
+ const ARROW_HALF_SIZE = 8;
14
+ const ARROW_OFFSET_MIN = 4;
15
+ const ARROW_OFFSET_MAX = POPOVER_WIDTH - 4 - 16;
16
+ const MASK_BG = 'rgba(0,0,0,0.5)';
17
+ const MASK_TRANSITION = 'all 0.2s ease';
18
+ const OVERLAY_Z = '10000';
19
+ const POPOVER_Z = '10001';
20
+ function toConnectedPositions(position) {
21
+ const [direction, alignment] = position.split('-');
22
+ const p = SPOTLIGHT_PADDING + 2;
23
+ const hAlign = alignment;
24
+ const vAlignMap = { start: 'top', center: 'center', end: 'bottom' };
25
+ const vAlign = vAlignMap[alignment] ?? 'center';
26
+ let primary;
27
+ let opposite;
28
+ switch (direction) {
29
+ case 'top':
30
+ primary = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };
31
+ opposite = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };
32
+ break;
33
+ case 'right':
34
+ primary = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };
35
+ opposite = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };
36
+ break;
37
+ case 'left':
38
+ primary = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };
39
+ opposite = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };
40
+ break;
41
+ default: // 'bottom'
42
+ primary = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };
43
+ opposite = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };
44
+ }
45
+ return [
46
+ primary,
47
+ opposite,
48
+ { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: p },
49
+ { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -p },
50
+ { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: p },
51
+ { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -p },
52
+ ];
53
+ }
54
+ export class SpotlightOverlayComponent {
55
+ tourService = inject(SpotlightTourService);
56
+ destroyRef = inject(DestroyRef);
57
+ zone = inject(NgZone);
58
+ cdkOverlay = inject(Overlay);
59
+ environmentInjector = inject(EnvironmentInjector);
60
+ focusTrapFactory = inject(FocusTrapFactory);
61
+ /** @internal */
62
+ isActive = this.tourService.isActive;
63
+ /** @internal */
64
+ currentStep = this.tourService.currentStep;
65
+ /** @internal */
66
+ currentIndex = this.tourService.currentIndex;
67
+ /** @internal */
68
+ totalSteps = this.tourService.totalSteps;
69
+ /** @internal*/
70
+ targetRect = signal(null);
71
+ /** @internal */
72
+ topMaskStyle = computed(() => {
73
+ const rect = this.targetRect();
74
+ const base = {
75
+ position: 'fixed',
76
+ 'z-index': OVERLAY_Z,
77
+ background: MASK_BG,
78
+ transition: MASK_TRANSITION,
79
+ cursor: 'default',
80
+ };
81
+ if (!rect) {
82
+ return { ...base, top: '0', left: '0', right: '0', bottom: '0' };
83
+ }
84
+ const top = Math.max(0, rect.top - SPOTLIGHT_PADDING);
85
+ return { ...base, top: '0', left: '0', right: '0', height: `${top}px` };
86
+ });
87
+ /** @internal */
88
+ leftMaskStyle = computed(() => {
89
+ const rect = this.targetRect();
90
+ if (!rect) {
91
+ return {};
92
+ }
93
+ const p = SPOTLIGHT_PADDING;
94
+ const top = Math.max(0, rect.top - p);
95
+ const bottom = Math.min(window.innerHeight, rect.bottom + p);
96
+ const left = Math.max(0, rect.left - p);
97
+ return {
98
+ position: 'fixed',
99
+ 'z-index': OVERLAY_Z,
100
+ background: MASK_BG,
101
+ transition: MASK_TRANSITION,
102
+ cursor: 'default',
103
+ top: `${top}px`,
104
+ left: '0',
105
+ width: `${left}px`,
106
+ height: `${bottom - top}px`,
107
+ };
108
+ });
109
+ /** @internal */
110
+ rightMaskStyle = computed(() => {
111
+ const rect = this.targetRect();
112
+ if (!rect) {
113
+ return {};
114
+ }
115
+ const p = SPOTLIGHT_PADDING;
116
+ const top = Math.max(0, rect.top - p);
117
+ const bottom = Math.min(window.innerHeight, rect.bottom + p);
118
+ const right = Math.min(window.innerWidth, rect.right + p);
119
+ return {
120
+ position: 'fixed',
121
+ 'z-index': OVERLAY_Z,
122
+ background: MASK_BG,
123
+ transition: MASK_TRANSITION,
124
+ cursor: 'default',
125
+ top: `${top}px`,
126
+ left: `${right}px`,
127
+ right: '0',
128
+ height: `${bottom - top}px`,
129
+ };
130
+ });
131
+ /** @internal */
132
+ bottomMaskStyle = computed(() => {
133
+ const rect = this.targetRect();
134
+ if (!rect) {
135
+ return {};
136
+ }
137
+ const p = SPOTLIGHT_PADDING;
138
+ const bottom = Math.min(window.innerHeight, rect.bottom + p);
139
+ return {
140
+ position: 'fixed',
141
+ 'z-index': OVERLAY_Z,
142
+ background: MASK_BG,
143
+ transition: MASK_TRANSITION,
144
+ cursor: 'default',
145
+ top: `${bottom}px`,
146
+ left: '0',
147
+ right: '0',
148
+ bottom: '0',
149
+ };
150
+ });
151
+ /** @internal */
152
+ transparentBlockerStyle = computed(() => ({
153
+ position: 'fixed',
154
+ top: '0',
155
+ left: '0',
156
+ right: '0',
157
+ bottom: '0',
158
+ 'z-index': OVERLAY_Z,
159
+ cursor: 'default',
160
+ }));
161
+ resizeObserver = null;
162
+ popoverOverlayRef = null;
163
+ popoverComponentRef = null;
164
+ popoverSubs = [];
165
+ focusTrap = null;
166
+ previouslyFocusedElement = null;
167
+ constructor() {
168
+ combineLatest([
169
+ toObservable(this.currentStep),
170
+ toObservable(this.isActive),
171
+ toObservable(this.tourService.registrationVersion),
172
+ ])
173
+ .pipe(takeUntilDestroyed(this.destroyRef))
174
+ .subscribe(([step, active]) => {
175
+ this.disconnectResizeObserver();
176
+ if (!step || !active) {
177
+ this.targetRect.set(null);
178
+ this.destroyPopoverOverlay();
179
+ return;
180
+ }
181
+ const el = this.tourService.getElement(step.stepId);
182
+ if (el?.nativeElement) {
183
+ el.nativeElement.scrollIntoView({ block: 'nearest' });
184
+ const target = el.nativeElement;
185
+ this.zone.runOutsideAngular(() => {
186
+ requestAnimationFrame(() => {
187
+ this.zone.run(() => {
188
+ if (!this.isActive()) {
189
+ return;
190
+ }
191
+ this.updateTargetRect(target);
192
+ this.observeElement(target);
193
+ this.updatePopoverOverlay(target, step);
194
+ });
195
+ });
196
+ });
197
+ }
198
+ else {
199
+ this.targetRect.set(null);
200
+ this.updatePopoverOverlay(null, step);
201
+ }
202
+ });
203
+ }
204
+ ngOnInit() {
205
+ this.zone.runOutsideAngular(() => {
206
+ const scrollOpts = { capture: true, passive: true };
207
+ fromEvent(document, 'scroll', scrollOpts)
208
+ .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))
209
+ .subscribe(() => this.zone.run(() => {
210
+ this.refreshRect();
211
+ this.popoverOverlayRef?.updatePosition();
212
+ this.scheduleSync();
213
+ }));
214
+ fromEvent(window, 'resize', { passive: true })
215
+ .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))
216
+ .subscribe(() => this.zone.run(() => {
217
+ this.refreshRect();
218
+ this.popoverOverlayRef?.updatePosition();
219
+ this.scheduleSync();
220
+ }));
221
+ fromEvent(document, 'keydown')
222
+ .pipe(takeUntilDestroyed(this.destroyRef))
223
+ .subscribe((event) => {
224
+ if (event.key === 'Escape') {
225
+ this.zone.run(() => this.onDismiss());
226
+ }
227
+ });
228
+ });
229
+ }
230
+ ngOnDestroy() {
231
+ this.destroyPopoverOverlay();
232
+ }
233
+ /** @internal */
234
+ onNext() {
235
+ this.tourService.next();
236
+ }
237
+ /** @internal */
238
+ onPrevious() {
239
+ this.tourService.previous();
240
+ }
241
+ /** @internal */
242
+ onClose() {
243
+ this.tourService.stop();
244
+ }
245
+ /** @internal */
246
+ onDismiss() {
247
+ const step = this.currentStep();
248
+ if (!step || step.dismissible === false) {
249
+ return;
250
+ }
251
+ this.tourService.stop({
252
+ reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',
253
+ doNotShowAgain: false,
254
+ });
255
+ }
256
+ updatePopoverOverlay(targetEl, step) {
257
+ const strategy = targetEl
258
+ ? this.cdkOverlay
259
+ .position()
260
+ .flexibleConnectedTo(targetEl)
261
+ .withPositions(toConnectedPositions(step.position ?? 'bottom-center'))
262
+ .withFlexibleDimensions(false)
263
+ .withPush(true)
264
+ .withViewportMargin(8)
265
+ : this.cdkOverlay.position().global().centerHorizontally().centerVertically();
266
+ if (!this.popoverOverlayRef) {
267
+ this.popoverOverlayRef = this.cdkOverlay.create({
268
+ hasBackdrop: false,
269
+ scrollStrategy: targetEl
270
+ ? this.cdkOverlay.scrollStrategies.reposition()
271
+ : this.cdkOverlay.scrollStrategies.noop(),
272
+ positionStrategy: strategy,
273
+ width: POPOVER_WIDTH,
274
+ });
275
+ this.setPopoverZIndex();
276
+ this.attachPopoverPortal(step);
277
+ }
278
+ else {
279
+ this.popoverOverlayRef.updatePositionStrategy(strategy);
280
+ this.popoverOverlayRef.updatePosition();
281
+ this.updatePopoverInputs(step);
282
+ if (targetEl) {
283
+ this.scheduleSync();
284
+ }
285
+ this.scheduleFocusTrapRefocus();
286
+ }
287
+ }
288
+ setPopoverZIndex() {
289
+ if (!this.popoverOverlayRef) {
290
+ return;
291
+ }
292
+ this.popoverOverlayRef.overlayElement.style.zIndex = POPOVER_Z;
293
+ const host = this.popoverOverlayRef.hostElement;
294
+ if (host !== this.popoverOverlayRef.overlayElement) {
295
+ host.style.zIndex = POPOVER_Z;
296
+ }
297
+ }
298
+ attachPopoverPortal(step) {
299
+ this.previouslyFocusedElement = document.activeElement;
300
+ const portal = new ComponentPortal(SpotlightComponent, null, this.environmentInjector);
301
+ this.popoverComponentRef = this.popoverOverlayRef.attach(portal);
302
+ this.updatePopoverInputs(step);
303
+ this.scheduleSync();
304
+ if (this.totalSteps() > 1) {
305
+ this.activateTourMode();
306
+ }
307
+ this.popoverSubs.push(this.popoverComponentRef.instance.next.subscribe(() => {
308
+ const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;
309
+ this.tourService.next(doNotShowAgain);
310
+ }), this.popoverComponentRef.instance.previous.subscribe(() => this.tourService.previous()), this.popoverComponentRef.instance.closed.subscribe(() => this.tourService.stop({
311
+ reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',
312
+ doNotShowAgain: false,
313
+ })), this.popoverComponentRef.instance.understand.subscribe(() => {
314
+ const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;
315
+ this.tourService.stop({ reason: 'completed', doNotShowAgain });
316
+ }));
317
+ }
318
+ updatePopoverInputs(step) {
319
+ const ref = this.popoverComponentRef;
320
+ if (!ref) {
321
+ return;
322
+ }
323
+ ref.setInput('title', step.title);
324
+ ref.setInput('message', step.message);
325
+ ref.setInput('position', step.position ?? 'bottom-center');
326
+ ref.setInput('currentStep', this.currentIndex() + 1);
327
+ ref.setInput('totalSteps', this.totalSteps());
328
+ ref.setInput('content', step.content ?? null);
329
+ ref.setInput('actions', step.actions ?? []);
330
+ ref.setInput('showDoNotShowAgain', step.showDoNotShowAgain ?? true);
331
+ ref.setInput('arrowOffsetPx', null);
332
+ }
333
+ scheduleSync() {
334
+ this.zone.runOutsideAngular(() => {
335
+ requestAnimationFrame(() => this.zone.run(() => this.syncDirectionAndArrow()));
336
+ });
337
+ }
338
+ activateTourMode() {
339
+ document.body.style.overflow = 'hidden';
340
+ this.zone.runOutsideAngular(() => {
341
+ requestAnimationFrame(() => {
342
+ this.zone.run(() => {
343
+ const paneEl = this.popoverOverlayRef?.overlayElement;
344
+ if (paneEl) {
345
+ this.focusTrap = this.focusTrapFactory.create(paneEl);
346
+ this.focusTrap.focusInitialElementWhenReady();
347
+ }
348
+ });
349
+ });
350
+ });
351
+ }
352
+ /**
353
+ * After a step change, moves focus back to the first tabbable element inside the
354
+ * popover so the user does not lose keyboard position.
355
+ * No-op when there is no active focus trap (simple spotlight mode).
356
+ */
357
+ scheduleFocusTrapRefocus() {
358
+ if (!this.focusTrap)
359
+ return;
360
+ this.zone.runOutsideAngular(() => {
361
+ requestAnimationFrame(() => {
362
+ this.zone.run(() => this.focusTrap?.focusFirstTabbableElement());
363
+ });
364
+ });
365
+ }
366
+ syncDirectionAndArrow() {
367
+ const ref = this.popoverComponentRef;
368
+ const paneEl = this.popoverOverlayRef?.overlayElement;
369
+ const rect = this.targetRect();
370
+ if (!ref || !paneEl || !rect) {
371
+ ref?.setInput('arrowOffsetPx', null);
372
+ return;
373
+ }
374
+ const pane = paneEl.getBoundingClientRect();
375
+ const tol = SPOTLIGHT_PADDING + 4;
376
+ let dir;
377
+ if (pane.top >= rect.bottom - tol) {
378
+ dir = 'bottom';
379
+ }
380
+ else if (pane.bottom <= rect.top + tol) {
381
+ dir = 'top';
382
+ }
383
+ else if (pane.left >= rect.right - tol) {
384
+ dir = 'right';
385
+ }
386
+ else if (pane.right <= rect.left + tol) {
387
+ dir = 'left';
388
+ }
389
+ else {
390
+ const dy = Math.abs(pane.top + pane.height / 2 - (rect.top + rect.height / 2));
391
+ const dx = Math.abs(pane.left + pane.width / 2 - (rect.left + rect.width / 2));
392
+ dir =
393
+ dy >= dx
394
+ ? pane.top + pane.height / 2 < rect.top + rect.height / 2
395
+ ? 'top'
396
+ : 'bottom'
397
+ : pane.left + pane.width / 2 < rect.left + rect.width / 2
398
+ ? 'left'
399
+ : 'right';
400
+ }
401
+ ref.setInput('position', `${dir}-center`);
402
+ const tgtCX = rect.left + rect.width / 2;
403
+ const tgtCY = rect.top + rect.height / 2;
404
+ const offset = dir === 'top' || dir === 'bottom'
405
+ ? tgtCX - pane.left - ARROW_HALF_SIZE
406
+ : tgtCY - pane.top - ARROW_HALF_SIZE;
407
+ ref.setInput('arrowOffsetPx', Math.max(ARROW_OFFSET_MIN, Math.min(ARROW_OFFSET_MAX, offset)));
408
+ }
409
+ destroyPopoverOverlay() {
410
+ this.popoverSubs.forEach((s) => s.unsubscribe());
411
+ this.popoverSubs = [];
412
+ this.popoverComponentRef = null;
413
+ if (this.focusTrap) {
414
+ this.focusTrap.destroy();
415
+ this.focusTrap = null;
416
+ }
417
+ document.body.style.overflow = '';
418
+ if (this.previouslyFocusedElement) {
419
+ this.previouslyFocusedElement.focus();
420
+ this.previouslyFocusedElement = null;
421
+ }
422
+ if (this.popoverOverlayRef) {
423
+ this.popoverOverlayRef.detach();
424
+ this.popoverOverlayRef.dispose();
425
+ this.popoverOverlayRef = null;
426
+ }
427
+ }
428
+ updateTargetRect(el) {
429
+ this.targetRect.set(el.getBoundingClientRect());
430
+ }
431
+ refreshRect() {
432
+ const step = this.currentStep();
433
+ if (!step || !this.isActive()) {
434
+ return;
435
+ }
436
+ const el = this.tourService.getElement(step.stepId);
437
+ if (el?.nativeElement) {
438
+ this.updateTargetRect(el.nativeElement);
439
+ }
440
+ }
441
+ observeElement(el) {
442
+ this.resizeObserver = new ResizeObserver(() => {
443
+ this.zone.run(() => this.updateTargetRect(el));
444
+ });
445
+ this.resizeObserver.observe(el);
446
+ }
447
+ disconnectResizeObserver() {
448
+ if (this.resizeObserver) {
449
+ this.resizeObserver.disconnect();
450
+ this.resizeObserver = null;
451
+ }
452
+ }
453
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
454
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SpotlightOverlayComponent, isStandalone: true, selector: "s-spotlight-overlay", ngImport: i0, template: "@if (isActive() && currentStep(); as step) {\n @if (step.showBackdrop !== false) {\n <div\n [ngStyle]=\"topMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n\n @if (targetRect()) {\n <div\n [ngStyle]=\"leftMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"rightMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"bottomMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n\n @if (step.showBackdrop === false) {\n @if (step.dismissible === false) {\n <div [ngStyle]=\"transparentBlockerStyle()\"></div>\n } @else {\n <div\n [ngStyle]=\"transparentBlockerStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n}\n\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
455
+ }
456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightOverlayComponent, decorators: [{
457
+ type: Component,
458
+ args: [{ selector: 's-spotlight-overlay', standalone: true, imports: [NgStyle], template: "@if (isActive() && currentStep(); as step) {\n @if (step.showBackdrop !== false) {\n <div\n [ngStyle]=\"topMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n\n @if (targetRect()) {\n <div\n [ngStyle]=\"leftMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"rightMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"bottomMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n\n @if (step.showBackdrop === false) {\n @if (step.dismissible === false) {\n <div [ngStyle]=\"transparentBlockerStyle()\"></div>\n } @else {\n <div\n [ngStyle]=\"transparentBlockerStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n}\n\n" }]
459
+ }], ctorParameters: () => [] });
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Nwb3RsaWdodC9zcmMvbGliL3Nwb3RsaWdodC9zcG90bGlnaHQtb3ZlcmxheS9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3BvdGxpZ2h0L3NyYy9saWIvc3BvdGxpZ2h0L3Nwb3RsaWdodC1vdmVybGF5L3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0gsU0FBUyxFQUVULFFBQVEsRUFDUixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixNQUFNLEVBR04sTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBSWpFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUMxQixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztBQUNsQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUUxQixTQUFTLG9CQUFvQixDQUFDLFFBQTJCO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsU0FBdUMsQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBZ0QsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2pILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUM7SUFFaEQsSUFBSSxPQUEwQixDQUFDO0lBQy9CLElBQUksUUFBMkIsQ0FBQztJQUVoQyxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssS0FBSztZQUNOLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssT0FBTztZQUNSLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQy9GLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTTtRQUNWLEtBQUssTUFBTTtZQUNQLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEcsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEcsTUFBTTtRQUNWLFNBQVMsV0FBVztZQUNoQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRyxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFHLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTztRQUNQ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LENBQUMsRUFBZTtRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQzt3R0F2ZFEseUJBQXlCOzRGQUF6Qix5QkFBeUIsK0VDOUV0QyxvOEJBbUNBLDRDRHlDYyxPQUFPOzs0RkFFUix5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0kscUJBQXFCLGNBRW5CLElBQUksV0FDUCxDQUFDLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBpbmplY3QsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9jdXNUcmFwLCBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNwb3RsaWdodENvbXBvbmVudCB9IGZyb20gJy4uL3Nwb3RsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BvdGxpZ2h0VG91clNlcnZpY2UgfSBmcm9tICcuLi9zcG90bGlnaHQtdG91ci5zZXJ2aWNlJztcbmltcG9ydCB7IFNwb3RsaWdodFBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMvc3BvdGxpZ2h0LXBvc2l0aW9uJztcbmltcG9ydCB7IFNwb3RsaWdodFN0ZXAgfSBmcm9tICcuLi90eXBlcy9zcG90bGlnaHQtc3RlcCc7XG5cbmNvbnN0IFBPUE9WRVJfV0lEVEggPSAzNDI7XG5jb25zdCBTUE9UTElHSFRfUEFERElORyA9IDg7XG5jb25zdCBBUlJPV19IQUxGX1NJWkUgPSA4O1xuY29uc3QgQVJST1dfT0ZGU0VUX01JTiA9IDQ7XG5jb25zdCBBUlJPV19PRkZTRVRfTUFYID0gUE9QT1ZFUl9XSURUSCAtIDQgLSAxNjtcbmNvbnN0IE1BU0tfQkcgPSAncmdiYSgwLDAsMCwwLjUpJztcbmNvbnN0IE1BU0tfVFJBTlNJVElPTiA9ICdhbGwgMC4ycyBlYXNlJztcbmNvbnN0IE9WRVJMQVlfWiA9ICcxMDAwMCc7XG5jb25zdCBQT1BPVkVSX1ogPSAnMTAwMDEnO1xuXG5mdW5jdGlvbiB0b0Nvbm5lY3RlZFBvc2l0aW9ucyhwb3NpdGlvbjogU3BvdGxpZ2h0UG9zaXRpb24pOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcbiAgICBjb25zdCBbZGlyZWN0aW9uLCBhbGlnbm1lbnRdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkcgKyAyO1xuICAgIGNvbnN0IGhBbGlnbiA9IGFsaWdubWVudCBhcyAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgICBjb25zdCB2QWxpZ25NYXA6IFJlY29yZDxzdHJpbmcsICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJz4gPSB7IHN0YXJ0OiAndG9wJywgY2VudGVyOiAnY2VudGVyJywgZW5kOiAnYm90dG9tJyB9O1xuICAgIGNvbnN0IHZBbGlnbiA9IHZBbGlnbk1hcFthbGlnbm1lbnRdID8/ICdjZW50ZXInO1xuXG4gICAgbGV0IHByaW1hcnk6IENvbm5lY3RlZFBvc2l0aW9uO1xuICAgIGxldCBvcHBvc2l0ZTogQ29ubmVjdGVkUG9zaXRpb247XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgcHJpbWFyeSA9IHsgb3JpZ2luWDogaEFsaWduLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6IGhBbGlnbiwgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAtcCB9O1xuICAgICAgICAgICAgb3Bwb3NpdGUgPSB7IG9yaWdpblg6IGhBbGlnbiwgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiBoQWxpZ24sIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHByaW1hcnkgPSB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogdkFsaWduLCBvZmZzZXRYOiBwIH07XG4gICAgICAgICAgICBvcHBvc2l0ZSA9IHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiB2QWxpZ24sIG9mZnNldFg6IC1wIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiB2QWxpZ24sIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogLXAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogdkFsaWduLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6IHZBbGlnbiwgb2Zmc2V0WDogcCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vICdib3R0b20nXG4gICAgICAgICAgICBwcmltYXJ5ID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IHAgfTtcbiAgICAgICAgICAgIG9wcG9zaXRlID0geyBvcmlnaW5YOiBoQWxpZ24sIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogaEFsaWduLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJpbWFyeSxcbiAgICAgICAgb3Bwb3NpdGUsXG4gICAgICAgIHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJywgb2Zmc2V0WTogcCB9LFxuICAgICAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiBwIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtcCB9LFxuICAgIF07XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zcG90bGlnaHQtb3ZlcmxheScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ1N0eWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0T3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KFNwb3RsaWdodFRvdXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZGtPdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgaXNBY3RpdmUgPSB0aGlzLnRvdXJTZXJ2aWNlLmlzQWN0aXZlO1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBjdXJyZW50U3RlcCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudFN0ZXA7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGN1cnJlbnRJbmRleCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudEluZGV4O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSB0b3RhbFN0ZXBzID0gdGhpcy50b3VyU2VydmljZS50b3RhbFN0ZXBzO1xuXG4gICAgLyoqIEBpbnRlcm5hbCovXG4gICAgcmVhZG9ubHkgdGFyZ2V0UmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdG9wTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGJvdHRvbTogJzAnIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgLSBTUE9UTElHSFRfUEFERElORyk7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGhlaWdodDogYCR7dG9wfXB4YCB9O1xuICAgIH0pO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlYWRvbmx5IGxlZnRNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCgwLCByZWN0LnRvcCAtIHApO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCgwLCByZWN0LmxlZnQgLSBwKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IE1BU0tfQkcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBNQVNLX1RSQU5TSVRJT04sXG4gICAgICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgICAgIHdpZHRoOiBgJHtsZWZ0fXB4YCxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSByaWdodE1hc2tTdHlsZSA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuXG4gICAgICAgIGlmICghcmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwID0gU1BPVExJR0hUX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHJlY3QudG9wIC0gcCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBwKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgcmVjdC5yaWdodCArIHApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgICAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgICAgbGVmdDogYCR7cmlnaHR9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICByZWFkb25seSBib3R0b21NYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IFNQT1RMSUdIVF9QQURESU5HO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgcCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgICAgJ3otaW5kZXgnOiBPVkVSTEFZX1osXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogTUFTS19UUkFOU0lUSU9OLFxuICAgICAgICAgICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0b3A6IGAke2JvdHRvbX1weGAsXG4gICAgICAgICAgICBsZWZ0OiAnMCcsXG4gICAgICAgICAgICByaWdodDogJzAnLFxuICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcmVhZG9ubHkgdHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe1xuICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgIGxlZnQ6ICcwJyxcbiAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICB9KSk7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcG9wb3Zlck92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxTcG90bGlnaHRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBwb3BvdmVyU3ViczogQXJyYXk8eyB1bnN1YnNjcmliZSgpOiB2b2lkIH0+ID0gW107XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA6IEZvY3VzVHJhcCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFN0ZXApLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNBY3RpdmUpLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudG91clNlcnZpY2UucmVnaXN0cmF0aW9uVmVyc2lvbiksXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtzdGVwLCBhY3RpdmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3RlcCB8fCAhYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVBvcG92ZXJPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMudG91clNlcnZpY2UuZ2V0RWxlbWVudChzdGVwLnN0ZXBJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGVsLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlRWxlbWVudCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJPdmVybGF5KHRhcmdldCwgc3RlcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRSZWN0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheShudWxsLCBzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbE9wdHMgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucztcblxuICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgc2Nyb2xsT3B0cylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnLCB7IHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucylcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoUmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25EaXNtaXNzKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbk5leHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvblByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnByZXZpb3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbkRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwKCk7XG5cbiAgICAgICAgaWYgKCFzdGVwIHx8IHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnN0b3Aoe1xuICAgICAgICAgICAgcmVhc29uOiB0aGlzLnRvdGFsU3RlcHMoKSA9PT0gMSA/ICdkaXNtaXNzZWQnIDogJ2ludGVycnVwdGVkJyxcbiAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVyT3ZlcmxheSh0YXJnZXRFbDogSFRNTEVsZW1lbnQgfCBudWxsLCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGFyZ2V0RWxcbiAgICAgICAgICAgID8gdGhpcy5jZGtPdmVybGF5XG4gICAgICAgICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0RWwpXG4gICAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0b0Nvbm5lY3RlZFBvc2l0aW9ucyhzdGVwLnBvc2l0aW9uID8/ICdib3R0b20tY2VudGVyJykpXG4gICAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC53aXRoUHVzaCh0cnVlKVxuICAgICAgICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KVxuICAgICAgICAgICAgOiB0aGlzLmNka092ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmID0gdGhpcy5jZGtPdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0YXJnZXRFbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICAgICAgICAgICAgICB3aWR0aDogUE9QT1ZFUl9XSURUSCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldFBvcG92ZXJaSW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoUG9wb3ZlclBvcnRhbChzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShzdHJhdGVneSk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlU3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvY3VzVHJhcFJlZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UG9wb3ZlclpJbmRleCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLnpJbmRleCA9IFBPUE9WRVJfWjtcblxuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5ob3N0RWxlbWVudDtcblxuICAgICAgICBpZiAoaG9zdCAhPT0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudCkge1xuICAgICAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSBQT1BPVkVSX1o7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGF0dGFjaFBvcG92ZXJQb3J0YWwoc3RlcDogU3BvdGxpZ2h0U3RlcCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChTcG90bGlnaHRDb21wb25lbnQsIG51bGwsIHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWYhLmF0dGFjaChwb3J0YWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJJbnB1dHMoc3RlcCk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudG90YWxTdGVwcygpID4gMSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVRvdXJNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLm5leHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb05vdFNob3dBZ2FpbiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaXNEb05vdFNob3dBZ2FpbkNoZWNrZWQoKSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoZG9Ob3RTaG93QWdhaW4pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UucHJldmlvdXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKSksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7XG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICAgICAgICAgICAgICAgIGRvTm90U2hvd0FnYWluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UudW5kZXJzdGFuZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvTm90U2hvd0FnYWluID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc0RvTm90U2hvd0FnYWluQ2hlY2tlZCgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7IHJlYXNvbjogJ2NvbXBsZXRlZCcsIGRvTm90U2hvd0FnYWluIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXA6IFNwb3RsaWdodFN0ZXAgJiB7IHNob3dEb05vdFNob3dBZ2Fpbj86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZi5zZXRJbnB1dCgndGl0bGUnLCBzdGVwLnRpdGxlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdtZXNzYWdlJywgc3RlcC5tZXNzYWdlKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdwb3NpdGlvbicsIHN0ZXAucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKTtcbiAgICAgICAgcmVmLnNldElucHV0KCdjdXJyZW50U3RlcCcsIHRoaXMuY3VycmVudEluZGV4KCkgKyAxKTtcbiAgICAgICAgcmVmLnNldElucHV0KCd0b3RhbFN0ZXBzJywgdGhpcy50b3RhbFN0ZXBzKCkpO1xuICAgICAgICByZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBzdGVwLmNvbnRlbnQgPz8gbnVsbCk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYWN0aW9ucycsIHN0ZXAuYWN0aW9ucyA/PyBbXSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnc2hvd0RvTm90U2hvd0FnYWluJywgc3RlcC5zaG93RG9Ob3RTaG93QWdhaW4gPz8gdHJ1ZSk7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NoZWR1bGVTeW5jKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zeW5jRGlyZWN0aW9uQW5kQXJyb3coKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlVG91ck1vZGUoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVFbCA9IHRoaXMucG9wb3Zlck92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFuZUVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUocGFuZUVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGEgc3RlcCBjaGFuZ2UsIG1vdmVzIGZvY3VzIGJhY2sgdG8gdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgaW5zaWRlIHRoZVxuICAgICAqIHBvcG92ZXIgc28gdGhlIHVzZXIgZG9lcyBub3QgbG9zZSBrZXlib2FyZCBwb3NpdGlvbi5cbiAgICAgKiBOby1vcCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBmb2N1cyB0cmFwIChzaW1wbGUgc3BvdGxpZ2h0IG1vZGUpLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2NoZWR1bGVGb2N1c1RyYXBSZWZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSByZXR1cm47XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c1RyYXA/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jRGlyZWN0aW9uQW5kQXJyb3coKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZjtcbiAgICAgICAgY29uc3QgcGFuZUVsID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgICAgICBpZiAoIXJlZiB8fCAhcGFuZUVsIHx8ICFyZWN0KSB7XG4gICAgICAgICAgICByZWY/LnNldElucHV0KCdhcnJvd09mZnNldFB4JywgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYW5lID0gcGFuZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0b2wgPSBTUE9UTElHSFRfUEFERElORyArIDQ7XG5cbiAgICAgICAgbGV0IGRpcjogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5cbiAgICAgICAgaWYgKHBhbmUudG9wID49IHJlY3QuYm90dG9tIC0gdG9sKSB7XG4gICAgICAgICAgICBkaXIgPSAnYm90dG9tJztcbiAgICAgICAgfSBlbHNlIGlmIChwYW5lLmJvdHRvbSA8PSByZWN0LnRvcCArIHRvbCkge1xuICAgICAgICAgICAgZGlyID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5sZWZ0ID49IHJlY3QucmlnaHQgLSB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZS5yaWdodCA8PSByZWN0LmxlZnQgKyB0b2wpIHtcbiAgICAgICAgICAgIGRpciA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMocGFuZS50b3AgKyBwYW5lLmhlaWdodCAvIDIgLSAocmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIpKTtcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnMocGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgLSAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIpKTtcbiAgICAgICAgICAgIGRpciA9XG4gICAgICAgICAgICAgICAgZHkgPj0gZHhcbiAgICAgICAgICAgICAgICAgICAgPyBwYW5lLnRvcCArIHBhbmUuaGVpZ2h0IC8gMiA8IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3AnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20nXG4gICAgICAgICAgICAgICAgICAgIDogcGFuZS5sZWZ0ICsgcGFuZS53aWR0aCAvIDIgPCByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMlxuICAgICAgICAgICAgICAgICAgICAgID8gJ2xlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAncmlnaHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmLnNldElucHV0KCdwb3NpdGlvbicsIGAke2Rpcn0tY2VudGVyYCBhcyBTcG90bGlnaHRQb3NpdGlvbik7XG5cbiAgICAgICAgY29uc3QgdGd0Q1ggPSByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdGd0Q1kgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgICAgICAgIGRpciA9PT0gJ3RvcCcgfHwgZGlyID09PSAnYm90dG9tJ1xuICAgICAgICAgICAgICAgID8gdGd0Q1ggLSBwYW5lLmxlZnQgLSBBUlJPV19IQUxGX1NJWkVcbiAgICAgICAgICAgICAgICA6IHRndENZIC0gcGFuZS50b3AgLSBBUlJPV19IQUxGX1NJWkU7XG4gICAgICAgIHJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIE1hdGgubWF4KEFSUk9XX09GRlNFVF9NSU4sIE1hdGgubWluKEFSUk9XX09GRlNFVF9NQVgsIG9mZnNldCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyU3Vicy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnBvcG92ZXJTdWJzID0gW107XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUYXJnZXRSZWN0KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhcmdldFJlY3Quc2V0KGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hSZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuXG4gICAgICAgIGlmICghc3RlcCB8fCAhdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuXG4gICAgICAgIGlmIChlbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUYXJnZXRSZWN0KGVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlRWxlbWVudChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudXBkYXRlVGFyZ2V0UmVjdChlbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiIsIkBpZiAoaXNBY3RpdmUoKSAmJiBjdXJyZW50U3RlcCgpOyBhcyBzdGVwKSB7XG4gICAgQGlmIChzdGVwLnNob3dCYWNrZHJvcCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nU3R5bGVdPVwidG9wTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgIEBpZiAodGFyZ2V0UmVjdCgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwibGVmdE1hc2tTdHlsZSgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EaXNtaXNzKClcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJpZ2h0TWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiYm90dG9tTWFza1N0eWxlKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHN0ZXAuc2hvd0JhY2tkcm9wID09PSBmYWxzZSkge1xuICAgICAgICBAaWYgKHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInRyYW5zcGFyZW50QmxvY2tlclN0eWxlKClcIj48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
@@ -0,0 +1,50 @@
1
+ import { Directive, effect, ElementRef, inject, input } from '@angular/core';
2
+ import { SpotlightTourService } from './spotlight-tour.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Diretiva que registra um elemento do DOM como alvo de um passo do Spotlight Tour.
6
+ *
7
+ * Aplique a diretiva em qualquer elemento e forneça um ID único que corresponda
8
+ * ao `stepId` configurado no `SpotlightTourService`. O elemento será automaticamente
9
+ * registrado ao ser criado e atualizado caso o ID mude dinamicamente.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <button [sSpotlightStep]="'meu-botao'">Clique aqui</button>
14
+ * ```
15
+ */
16
+ export class SpotlightStepDirective {
17
+ /**
18
+ * ID único do passo do tour ao qual este elemento está associado.
19
+ * Deve corresponder ao `stepId` definido em `SpotlightStep`.
20
+ */
21
+ sSpotlightStep = input.required();
22
+ el = inject(ElementRef);
23
+ tourService = inject(SpotlightTourService);
24
+ currentId = null;
25
+ constructor() {
26
+ effect(() => {
27
+ const newId = this.sSpotlightStep();
28
+ if (this.currentId !== null && this.currentId !== newId) {
29
+ this.tourService.unregisterElement(this.currentId);
30
+ }
31
+ this.currentId = newId;
32
+ this.tourService.registerElement(newId, this.el);
33
+ }, { allowSignalWrites: true });
34
+ }
35
+ ngOnDestroy() {
36
+ if (this.currentId !== null) {
37
+ this.tourService.unregisterElement(this.currentId);
38
+ }
39
+ }
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightStepDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
41
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: SpotlightStepDirective, isStandalone: true, selector: "[sSpotlightStep]", inputs: { sSpotlightStep: { classPropertyName: "sSpotlightStep", publicName: "sSpotlightStep", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpotlightStepDirective, decorators: [{
44
+ type: Directive,
45
+ args: [{
46
+ selector: '[sSpotlightStep]',
47
+ standalone: true,
48
+ }]
49
+ }], ctorParameters: () => [] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LXN0ZXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Nwb3RsaWdodC9zcmMvbGliL3Nwb3RsaWdodC9zcG90bGlnaHQtc3RlcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWhFOzs7Ozs7Ozs7OztHQVdHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQjs7O09BR0c7SUFDSCxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBRXpCLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXBELFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRXhDO1FBQ0ksTUFBTSxDQUNGLEdBQUcsRUFBRTtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM5QixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7d0dBOUJRLHNCQUFzQjs0RkFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3BvdGxpZ2h0VG91clNlcnZpY2UgfSBmcm9tICcuL3Nwb3RsaWdodC10b3VyLnNlcnZpY2UnO1xuXG4vKipcbiAqIERpcmV0aXZhIHF1ZSByZWdpc3RyYSB1bSBlbGVtZW50byBkbyBET00gY29tbyBhbHZvIGRlIHVtIHBhc3NvIGRvIFNwb3RsaWdodCBUb3VyLlxuICpcbiAqIEFwbGlxdWUgYSBkaXJldGl2YSBlbSBxdWFscXVlciBlbGVtZW50byBlIGZvcm5lw6dhIHVtIElEIMO6bmljbyBxdWUgY29ycmVzcG9uZGFcbiAqIGFvIGBzdGVwSWRgIGNvbmZpZ3VyYWRvIG5vIGBTcG90bGlnaHRUb3VyU2VydmljZWAuIE8gZWxlbWVudG8gc2Vyw6EgYXV0b21hdGljYW1lbnRlXG4gKiByZWdpc3RyYWRvIGFvIHNlciBjcmlhZG8gZSBhdHVhbGl6YWRvIGNhc28gbyBJRCBtdWRlIGRpbmFtaWNhbWVudGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gW3NTcG90bGlnaHRTdGVwXT1cIidtZXUtYm90YW8nXCI+Q2xpcXVlIGFxdWk8L2J1dHRvbj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tzU3BvdGxpZ2h0U3RlcF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNwb3RsaWdodFN0ZXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIElEIMO6bmljbyBkbyBwYXNzbyBkbyB0b3VyIGFvIHF1YWwgZXN0ZSBlbGVtZW50byBlc3TDoSBhc3NvY2lhZG8uXG4gICAgICogRGV2ZSBjb3JyZXNwb25kZXIgYW8gYHN0ZXBJZGAgZGVmaW5pZG8gZW0gYFNwb3RsaWdodFN0ZXBgLlxuICAgICAqL1xuICAgIHNTcG90bGlnaHRTdGVwID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvdXJTZXJ2aWNlID0gaW5qZWN0KFNwb3RsaWdodFRvdXJTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgY3VycmVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SWQgPSB0aGlzLnNTcG90bGlnaHRTdGVwKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudElkICE9PSBudWxsICYmIHRoaXMuY3VycmVudElkICE9PSBuZXdJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnVucmVnaXN0ZXJFbGVtZW50KHRoaXMuY3VycmVudElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBuZXdJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnJlZ2lzdGVyRWxlbWVudChuZXdJZCwgdGhpcy5lbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudG91clNlcnZpY2UudW5yZWdpc3RlckVsZW1lbnQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iXX0=