@ethlete/core 0.2.0-next.2 → 0.2.0-next.21

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 (146) hide show
  1. package/esm2020/lib/components/public-api.mjs +2 -0
  2. package/esm2020/lib/components/structured-data/public-api.mjs +2 -0
  3. package/esm2020/lib/components/structured-data/structured-data.component.mjs +37 -0
  4. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +37 -0
  5. package/esm2020/lib/directives/click-outside/public-api.mjs +2 -0
  6. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +3 -0
  7. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +147 -0
  8. package/esm2020/lib/directives/cursor-drag-scroll/public-api.mjs +2 -0
  9. package/esm2020/lib/directives/let/let.directive.mjs +8 -8
  10. package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +11 -11
  11. package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +11 -12
  12. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +3 -0
  13. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +171 -0
  14. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +2 -0
  15. package/esm2020/lib/directives/observe-scroll-state/public-api.mjs +3 -0
  16. package/esm2020/lib/directives/public-api.mjs +10 -3
  17. package/esm2020/lib/directives/repeat/repeat.directive.mjs +10 -11
  18. package/esm2020/lib/directives/scroll-observer-first-element/index.mjs +2 -0
  19. package/esm2020/lib/directives/scroll-observer-first-element/public-api.mjs +2 -0
  20. package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +31 -0
  21. package/esm2020/lib/directives/scroll-observer-ignore-target/index.mjs +2 -0
  22. package/esm2020/lib/directives/scroll-observer-ignore-target/public-api.mjs +2 -0
  23. package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +18 -0
  24. package/esm2020/lib/directives/scroll-observer-last-element/index.mjs +2 -0
  25. package/esm2020/lib/directives/scroll-observer-last-element/public-api.mjs +2 -0
  26. package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +34 -0
  27. package/esm2020/lib/directives/seo/public-api.mjs +5 -0
  28. package/esm2020/lib/directives/seo/seo.directive.constants.mjs +3 -0
  29. package/esm2020/lib/directives/seo/seo.directive.mjs +166 -0
  30. package/esm2020/lib/directives/seo/seo.directive.types.mjs +2 -0
  31. package/esm2020/lib/directives/seo/seo.directive.utils.mjs +7 -0
  32. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +15 -0
  33. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.mjs +2 -0
  34. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.mjs +34 -0
  35. package/esm2020/lib/pipes/normalize-game-result-type/public-api.mjs +4 -0
  36. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +15 -0
  37. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.types.mjs +2 -0
  38. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.util.mjs +47 -0
  39. package/esm2020/lib/pipes/normalize-match-participants/public-api.mjs +4 -0
  40. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +15 -0
  41. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.types.mjs +2 -0
  42. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.util.mjs +126 -0
  43. package/esm2020/lib/pipes/normalize-match-score/public-api.mjs +4 -0
  44. package/esm2020/lib/pipes/normalize-match-state/index.mjs +2 -0
  45. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.constants.mjs +2 -0
  46. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +15 -0
  47. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.util.mjs +19 -0
  48. package/esm2020/lib/pipes/normalize-match-state/public-api.mjs +4 -0
  49. package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +15 -0
  50. package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.util.mjs +38 -0
  51. package/esm2020/lib/pipes/normalize-match-type/public-api.mjs +3 -0
  52. package/esm2020/lib/pipes/public-api.mjs +6 -1
  53. package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  54. package/esm2020/lib/public-api.mjs +2 -1
  55. package/esm2020/lib/services/click-observer.service.mjs +73 -0
  56. package/esm2020/lib/services/content-observer.service.mjs +6 -6
  57. package/esm2020/lib/services/destroy.service.mjs +19 -0
  58. package/esm2020/lib/services/focus-visible.service.mjs +7 -7
  59. package/esm2020/lib/services/public-api.mjs +7 -4
  60. package/esm2020/lib/services/resize-observer.service.mjs +6 -6
  61. package/esm2020/lib/services/router-state.service.mjs +115 -0
  62. package/esm2020/lib/services/viewport.service.mjs +16 -16
  63. package/esm2020/lib/types/angular.types.mjs +36 -2
  64. package/esm2020/lib/types/i18n.types.mjs +2 -0
  65. package/esm2020/lib/types/public-api.mjs +3 -2
  66. package/esm2020/lib/utils/clone.util.mjs +78 -0
  67. package/esm2020/lib/utils/cookie.util.mjs +48 -0
  68. package/esm2020/lib/utils/equal.util.mjs +118 -0
  69. package/esm2020/lib/utils/index.mjs +2 -0
  70. package/esm2020/lib/utils/public-api.mjs +7 -2
  71. package/esm2020/lib/utils/reactive-binding.util.mjs +111 -0
  72. package/esm2020/lib/utils/scrollable.utils.mjs +5 -0
  73. package/fesm2015/ethlete-core.mjs +1821 -289
  74. package/fesm2015/ethlete-core.mjs.map +1 -1
  75. package/fesm2020/ethlete-core.mjs +1818 -289
  76. package/fesm2020/ethlete-core.mjs.map +1 -1
  77. package/lib/components/public-api.d.ts +1 -0
  78. package/lib/components/structured-data/public-api.d.ts +1 -0
  79. package/lib/components/structured-data/structured-data.component.d.ts +11 -0
  80. package/lib/directives/click-outside/click-outside.directive.d.ts +12 -0
  81. package/lib/directives/click-outside/public-api.d.ts +1 -0
  82. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.d.ts +2 -0
  83. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +27 -0
  84. package/lib/directives/cursor-drag-scroll/public-api.d.ts +1 -0
  85. package/lib/directives/let/let.directive.d.ts +1 -1
  86. package/lib/directives/observe-content/observe-content.directive.d.ts +2 -4
  87. package/lib/directives/observe-resize/observe-resize.directive.d.ts +3 -5
  88. package/lib/directives/observe-scroll-state/observe-scroll-state.constants.d.ts +3 -0
  89. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +31 -0
  90. package/lib/directives/observe-scroll-state/observe-scroll-state.types.d.ts +6 -0
  91. package/lib/directives/observe-scroll-state/public-api.d.ts +3 -0
  92. package/lib/directives/public-api.d.ts +9 -2
  93. package/lib/directives/repeat/repeat.directive.d.ts +3 -4
  94. package/lib/directives/scroll-observer-first-element/index.d.ts +1 -0
  95. package/lib/directives/scroll-observer-first-element/public-api.d.ts +1 -0
  96. package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +10 -0
  97. package/lib/directives/scroll-observer-ignore-target/index.d.ts +1 -0
  98. package/lib/directives/scroll-observer-ignore-target/public-api.d.ts +1 -0
  99. package/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.d.ts +6 -0
  100. package/lib/directives/scroll-observer-last-element/index.d.ts +1 -0
  101. package/lib/directives/scroll-observer-last-element/public-api.d.ts +1 -0
  102. package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +10 -0
  103. package/lib/directives/seo/public-api.d.ts +4 -0
  104. package/lib/directives/seo/seo.directive.constants.d.ts +3 -0
  105. package/lib/directives/seo/seo.directive.d.ts +21 -0
  106. package/lib/directives/seo/seo.directive.types.d.ts +51 -0
  107. package/lib/directives/seo/seo.directive.utils.d.ts +2 -0
  108. package/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.d.ts +7 -0
  109. package/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.d.ts +4 -0
  110. package/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.d.ts +2 -0
  111. package/lib/pipes/normalize-game-result-type/public-api.d.ts +3 -0
  112. package/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.d.ts +7 -0
  113. package/lib/pipes/normalize-match-participants/normalize-match-participants.types.d.ts +21 -0
  114. package/lib/pipes/normalize-match-participants/normalize-match-participants.util.d.ts +4 -0
  115. package/lib/pipes/normalize-match-participants/public-api.d.ts +3 -0
  116. package/lib/pipes/normalize-match-score/normalize-match-score.pipe.d.ts +7 -0
  117. package/lib/pipes/normalize-match-score/normalize-match-score.types.d.ts +12 -0
  118. package/lib/pipes/normalize-match-score/normalize-match-score.util.d.ts +27 -0
  119. package/lib/pipes/normalize-match-score/public-api.d.ts +3 -0
  120. package/lib/pipes/normalize-match-state/index.d.ts +1 -0
  121. package/lib/pipes/normalize-match-state/normalize-match-state.constants.d.ts +7 -0
  122. package/lib/pipes/normalize-match-state/normalize-match-state.pipe.d.ts +7 -0
  123. package/lib/pipes/normalize-match-state/normalize-match-state.util.d.ts +3 -0
  124. package/lib/pipes/normalize-match-state/public-api.d.ts +3 -0
  125. package/lib/pipes/normalize-match-type/normalize-match-type.pipe.d.ts +7 -0
  126. package/lib/pipes/normalize-match-type/normalize-match-type.util.d.ts +3 -0
  127. package/lib/pipes/normalize-match-type/public-api.d.ts +2 -0
  128. package/lib/pipes/public-api.d.ts +5 -0
  129. package/lib/public-api.d.ts +1 -0
  130. package/lib/services/click-observer.service.d.ts +21 -0
  131. package/lib/services/destroy.service.d.ts +9 -0
  132. package/lib/services/public-api.d.ts +6 -3
  133. package/lib/services/router-state.service.d.ts +40 -0
  134. package/lib/services/viewport.types.d.ts +1 -1
  135. package/lib/types/angular.types.d.ts +14 -1
  136. package/lib/types/i18n.types.d.ts +4 -0
  137. package/lib/types/public-api.d.ts +2 -1
  138. package/lib/types/viewport.types.d.ts +2 -2
  139. package/lib/utils/clone.util.d.ts +15 -0
  140. package/lib/utils/cookie.util.d.ts +5 -0
  141. package/lib/utils/equal.util.d.ts +27 -0
  142. package/lib/utils/index.d.ts +1 -0
  143. package/lib/utils/public-api.d.ts +6 -1
  144. package/lib/utils/reactive-binding.util.d.ts +19 -0
  145. package/lib/utils/scrollable.utils.d.ts +1 -0
  146. package/package.json +9 -5
@@ -0,0 +1,171 @@
1
+ import { coerceNumberProperty } from '@angular/cdk/coercion';
2
+ import { Directive, ElementRef, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { debounceTime, takeUntil, tap } from 'rxjs';
4
+ import { ContentObserverService, DestroyService, ResizeObserverService } from '../../services';
5
+ import { elementCanScroll } from '../../utils';
6
+ import { SCROLL_OBSERVER_FIRST_ELEMENT_CLASS } from '../scroll-observer-first-element';
7
+ import { SCROLL_OBSERVER_IGNORE_TARGET_CLASS } from '../scroll-observer-ignore-target';
8
+ import { SCROLL_OBSERVER_LAST_ELEMENT_CLASS } from '../scroll-observer-last-element';
9
+ import { OBSERVE_SCROLL_STATE } from './observe-scroll-state.constants';
10
+ import * as i0 from "@angular/core";
11
+ export class ObserveScrollStateDirective {
12
+ constructor() {
13
+ this._destroy$ = inject(DestroyService, { host: true }).destroy$;
14
+ this._elementRef = inject(ElementRef);
15
+ this._contentObserverService = inject(ContentObserverService);
16
+ this._resizeObserverService = inject(ResizeObserverService);
17
+ this._observedChildren = {
18
+ first: this._firstCurrentChild,
19
+ last: this._lastCurrentChild,
20
+ };
21
+ this._rootMargin = 0;
22
+ this._threshold = 1;
23
+ this._intersectionObserver = null;
24
+ this.etObserveScrollState = new EventEmitter();
25
+ }
26
+ get _firstCurrentChild() {
27
+ const explicitFirstElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`);
28
+ if (explicitFirstElement) {
29
+ return explicitFirstElement;
30
+ }
31
+ const element = this._elementRef.nativeElement.children[0];
32
+ return this._getNonIgnoredChild(element, 'next');
33
+ }
34
+ get _lastCurrentChild() {
35
+ const explicitLastElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`);
36
+ if (explicitLastElement) {
37
+ return explicitLastElement;
38
+ }
39
+ const element = this._elementRef.nativeElement.children[this._elementRef.nativeElement.children.length - 1];
40
+ return this._getNonIgnoredChild(element, 'previous');
41
+ }
42
+ get observerRootMargin() {
43
+ return this._rootMargin;
44
+ }
45
+ set observerRootMargin(value) {
46
+ this._rootMargin = coerceNumberProperty(value);
47
+ }
48
+ get observerThreshold() {
49
+ return this._threshold;
50
+ }
51
+ set observerThreshold(value) {
52
+ this._threshold = coerceNumberProperty(value);
53
+ }
54
+ ngOnInit() {
55
+ this._contentObserverService
56
+ .observe(this._elementRef.nativeElement)
57
+ .pipe(tap(() => this._checkChildren()), takeUntil(this._destroy$))
58
+ .subscribe();
59
+ this._resizeObserverService
60
+ .observe(this._elementRef.nativeElement)
61
+ .pipe(debounceTime(25), tap(() => {
62
+ const canScroll = elementCanScroll(this._elementRef.nativeElement);
63
+ if ((!this._intersectionObserver && canScroll) || (this._intersectionObserver && !canScroll)) {
64
+ this._checkChildren();
65
+ }
66
+ }), takeUntil(this._destroy$))
67
+ .subscribe();
68
+ this._checkChildren();
69
+ }
70
+ ngOnDestroy() {
71
+ this._clearIntersectionObserver();
72
+ }
73
+ _checkChildren() {
74
+ this._clearIntersectionObserver();
75
+ if (this._firstCurrentChild === this._lastCurrentChild ||
76
+ !this._firstCurrentChild ||
77
+ !this._lastCurrentChild ||
78
+ !elementCanScroll(this._elementRef.nativeElement)) {
79
+ this._unobserveChild('first');
80
+ this._unobserveChild('last');
81
+ this.etObserveScrollState.emit({
82
+ isAtStart: true,
83
+ isAtEnd: true,
84
+ canScroll: false,
85
+ });
86
+ }
87
+ else {
88
+ this._intersectionObserver = this._initiateIntersectionObserver();
89
+ this._observeChild('first', this._firstCurrentChild);
90
+ this._observeChild('last', this._lastCurrentChild);
91
+ }
92
+ }
93
+ _initiateIntersectionObserver() {
94
+ const observer = new IntersectionObserver((entries) => {
95
+ const { first, last } = this._observedChildren;
96
+ const isAtStart = entries.find((entry) => entry.target === first)?.isIntersecting ?? false;
97
+ const isAtEnd = entries.find((entry) => entry.target === last)?.isIntersecting ?? false;
98
+ this.etObserveScrollState.emit({
99
+ isAtStart,
100
+ isAtEnd,
101
+ canScroll: !isAtStart || !isAtEnd,
102
+ });
103
+ }, {
104
+ root: this._elementRef.nativeElement,
105
+ rootMargin: `${this._rootMargin}px`,
106
+ threshold: this._threshold,
107
+ });
108
+ return observer;
109
+ }
110
+ _observeChild(child, element) {
111
+ this._intersectionObserver?.observe(element);
112
+ this._observedChildren[child] = element;
113
+ element.classList.add(`et-scroll-observer-observing-${child}-element`);
114
+ }
115
+ _unobserveChild(child) {
116
+ const observedChild = this._observedChildren[child];
117
+ if (!observedChild) {
118
+ return;
119
+ }
120
+ observedChild.classList.remove('et-scroll-observer-observing-first-element', 'et-scroll-observer-observing-last-element');
121
+ this._intersectionObserver?.unobserve(observedChild);
122
+ this._observedChildren[child] = null;
123
+ }
124
+ _clearIntersectionObserver() {
125
+ this._intersectionObserver?.disconnect();
126
+ this._intersectionObserver = null;
127
+ }
128
+ _getNonIgnoredChild(element, direction) {
129
+ if (!element) {
130
+ return null;
131
+ }
132
+ if (element?.classList.contains(SCROLL_OBSERVER_IGNORE_TARGET_CLASS)) {
133
+ const nextElement = element[`${direction}ElementSibling`];
134
+ if (!nextElement) {
135
+ return null;
136
+ }
137
+ return this._getNonIgnoredChild(nextElement, direction);
138
+ }
139
+ return element;
140
+ }
141
+ }
142
+ ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
143
+ ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ObserveScrollStateDirective, isStandalone: true, selector: "[etObserveScrollState]", inputs: { observerRootMargin: "observerRootMargin", observerThreshold: "observerThreshold" }, outputs: { etObserveScrollState: "etObserveScrollState" }, providers: [
144
+ {
145
+ provide: OBSERVE_SCROLL_STATE,
146
+ useExisting: ObserveScrollStateDirective,
147
+ },
148
+ DestroyService,
149
+ ], exportAs: ["etObserveScrollState"], ngImport: i0 });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{
151
+ type: Directive,
152
+ args: [{
153
+ selector: '[etObserveScrollState]',
154
+ exportAs: 'etObserveScrollState',
155
+ standalone: true,
156
+ providers: [
157
+ {
158
+ provide: OBSERVE_SCROLL_STATE,
159
+ useExisting: ObserveScrollStateDirective,
160
+ },
161
+ DestroyService,
162
+ ],
163
+ }]
164
+ }], propDecorators: { observerRootMargin: [{
165
+ type: Input
166
+ }], observerThreshold: [{
167
+ type: Input
168
+ }], etObserveScrollState: [{
169
+ type: Output
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1zY3JvbGwtc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXNjcm9sbC1zdGF0ZS9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFleEUsTUFBTSxPQUFPLDJCQUEyQjtJQVp4QztRQWFtQixjQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUU1RCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdkQsc0JBQWlCLEdBQUc7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDN0IsQ0FBQztRQXVDTSxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQVNoQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRWYsMEJBQXFCLEdBQWdDLElBQUksQ0FBQztRQUdsRSx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztLQThIdEU7SUFqTEMsSUFBWSxrQkFBa0I7UUFDNUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQ3ZFLElBQUksbUNBQW1DLEVBQUUsQ0FDcEIsQ0FBQztRQUV4QixJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLE9BQU8sb0JBQW9CLENBQUM7U0FDN0I7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUF1QixDQUFDO1FBRWpGLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBWSxpQkFBaUI7UUFDM0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQ3RFLElBQUksa0NBQWtDLEVBQUUsQ0FDbkIsQ0FBQztRQUV4QixJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE9BQU8sbUJBQW1CLENBQUM7U0FDNUI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM3QixDQUFDO1FBRXhCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFDSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLGtCQUFrQixDQUFDLEtBQWtCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUdELElBQ0ksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFrQjtRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFRRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHVCQUF1QjthQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7YUFDdkMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxzQkFBc0I7YUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO2FBQ3ZDLElBQUksQ0FDSCxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM1RixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEMsSUFDRSxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxDQUFDLGlCQUFpQjtZQUNsRCxDQUFDLElBQUksQ0FBQyxrQkFBa0I7WUFDeEIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFDakQ7WUFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFDN0IsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztZQUVsRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FDdkMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBRS9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEVBQUUsY0FBYyxJQUFJLEtBQUssQ0FBQztZQUMzRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLGNBQWMsSUFBSSxLQUFLLENBQUM7WUFFeEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFDN0IsU0FBUztnQkFDVCxPQUFPO2dCQUNQLFNBQVMsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU87YUFDbEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUNEO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtZQUNwQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJO1lBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUMzQixDQUNGLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQThCLEVBQUUsT0FBb0I7UUFDeEUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBRXhDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBOEI7UUFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBRUQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQzVCLDRDQUE0QyxFQUM1QywyQ0FBMkMsQ0FDNUMsQ0FBQztRQUVGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUEyQixFQUFFLFNBQThCO1FBQ3JGLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFNBQVMsZ0JBQWdCLENBQXVCLENBQUM7WUFFaEYsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDaEIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN6RDtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O3dIQTVMVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiw4TkFSM0I7UUFDVDtZQUNFLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELGNBQWM7S0FDZjsyRkFFVSwyQkFBMkI7a0JBWnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLDZCQUE2Qjt5QkFDekM7d0JBQ0QsY0FBYztxQkFDZjtpQkFDRjs4QkE0Q0ssa0JBQWtCO3NCQURyQixLQUFLO2dCQVVGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFZTixvQkFBb0I7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRPYnNlcnZlclNlcnZpY2UsIERlc3Ryb3lTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudCc7XG5pbXBvcnQgeyBTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUyB9IGZyb20gJy4uL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0JztcbmltcG9ydCB7IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50JztcbmltcG9ydCB7IE9CU0VSVkVfU0NST0xMX1NUQVRFIH0gZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgT2JzZXJ2ZWRTY3JvbGxhYmxlQ2hpbGQsIFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGUgfSBmcm9tICcuL29ic2VydmUtc2Nyb2xsLXN0YXRlLnR5cGVzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0T2JzZXJ2ZVNjcm9sbFN0YXRlXScsXG4gIGV4cG9ydEFzOiAnZXRPYnNlcnZlU2Nyb2xsU3RhdGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBPQlNFUlZFX1NDUk9MTF9TVEFURSxcbiAgICAgIHVzZUV4aXN0aW5nOiBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUsXG4gICAgfSxcbiAgICBEZXN0cm95U2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGluamVjdChEZXN0cm95U2VydmljZSwgeyBob3N0OiB0cnVlIH0pLmRlc3Ryb3kkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vYnNlcnZlZENoaWxkcmVuID0ge1xuICAgIGZpcnN0OiB0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCxcbiAgICBsYXN0OiB0aGlzLl9sYXN0Q3VycmVudENoaWxkLFxuICB9O1xuXG4gIHByaXZhdGUgZ2V0IF9maXJzdEN1cnJlbnRDaGlsZCgpIHtcbiAgICBjb25zdCBleHBsaWNpdEZpcnN0RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYC4ke1NDUk9MTF9PQlNFUlZFUl9GSVJTVF9FTEVNRU5UX0NMQVNTfWAsXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoZXhwbGljaXRGaXJzdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBleHBsaWNpdEZpcnN0RWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9nZXROb25JZ25vcmVkQ2hpbGQoZWxlbWVudCwgJ25leHQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9sYXN0Q3VycmVudENoaWxkKCkge1xuICAgIGNvbnN0IGV4cGxpY2l0TGFzdEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHtTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTfWAsXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoZXhwbGljaXRMYXN0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0TGFzdEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbltcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgXSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0Tm9uSWdub3JlZENoaWxkKGVsZW1lbnQsICdwcmV2aW91cycpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9ic2VydmVyUm9vdE1hcmdpbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb290TWFyZ2luO1xuICB9XG4gIHNldCBvYnNlcnZlclJvb3RNYXJnaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fcm9vdE1hcmdpbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yb290TWFyZ2luID0gMDtcblxuICBASW5wdXQoKVxuICBnZXQgb2JzZXJ2ZXJUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG4gIHNldCBvYnNlcnZlclRocmVzaG9sZCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gMTtcblxuICBwcml2YXRlIF9pbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KClcbiAgZXRPYnNlcnZlU2Nyb2xsU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGU+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudE9ic2VydmVyU2VydmljZVxuICAgICAgLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9jaGVja0NoaWxkcmVuKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlXG4gICAgICAub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgaWYgKCghdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgJiYgY2FuU2Nyb2xsKSB8fCAodGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgJiYgIWNhblNjcm9sbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2hpbGRyZW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fY2hlY2tDaGlsZHJlbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tDaGlsZHJlbigpIHtcbiAgICB0aGlzLl9jbGVhckludGVyc2VjdGlvbk9ic2VydmVyKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCA9PT0gdGhpcy5fbGFzdEN1cnJlbnRDaGlsZCB8fFxuICAgICAgIXRoaXMuX2ZpcnN0Q3VycmVudENoaWxkIHx8XG4gICAgICAhdGhpcy5fbGFzdEN1cnJlbnRDaGlsZCB8fFxuICAgICAgIWVsZW1lbnRDYW5TY3JvbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgdGhpcy5fdW5vYnNlcnZlQ2hpbGQoJ2ZpcnN0Jyk7XG4gICAgICB0aGlzLl91bm9ic2VydmVDaGlsZCgnbGFzdCcpO1xuXG4gICAgICB0aGlzLmV0T2JzZXJ2ZVNjcm9sbFN0YXRlLmVtaXQoe1xuICAgICAgICBpc0F0U3RhcnQ6IHRydWUsXG4gICAgICAgIGlzQXRFbmQ6IHRydWUsXG4gICAgICAgIGNhblNjcm9sbDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLl9pbml0aWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKCk7XG5cbiAgICAgIHRoaXMuX29ic2VydmVDaGlsZCgnZmlyc3QnLCB0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCk7XG4gICAgICB0aGlzLl9vYnNlcnZlQ2hpbGQoJ2xhc3QnLCB0aGlzLl9sYXN0Q3VycmVudENoaWxkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgbGFzdCB9ID0gdGhpcy5fb2JzZXJ2ZWRDaGlsZHJlbjtcblxuICAgICAgICBjb25zdCBpc0F0U3RhcnQgPSBlbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS50YXJnZXQgPT09IGZpcnN0KT8uaXNJbnRlcnNlY3RpbmcgPz8gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQXRFbmQgPSBlbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS50YXJnZXQgPT09IGxhc3QpPy5pc0ludGVyc2VjdGluZyA/PyBmYWxzZTtcblxuICAgICAgICB0aGlzLmV0T2JzZXJ2ZVNjcm9sbFN0YXRlLmVtaXQoe1xuICAgICAgICAgIGlzQXRTdGFydCxcbiAgICAgICAgICBpc0F0RW5kLFxuICAgICAgICAgIGNhblNjcm9sbDogIWlzQXRTdGFydCB8fCAhaXNBdEVuZCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByb290OiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHJvb3RNYXJnaW46IGAke3RoaXMuX3Jvb3RNYXJnaW59cHhgLFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMuX3RocmVzaG9sZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVDaGlsZChjaGlsZDogT2JzZXJ2ZWRTY3JvbGxhYmxlQ2hpbGQsIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI/Lm9ic2VydmUoZWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZWRDaGlsZHJlbltjaGlsZF0gPSBlbGVtZW50O1xuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGBldC1zY3JvbGwtb2JzZXJ2ZXItb2JzZXJ2aW5nLSR7Y2hpbGR9LWVsZW1lbnRgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vub2JzZXJ2ZUNoaWxkKGNoaWxkOiBPYnNlcnZlZFNjcm9sbGFibGVDaGlsZCkge1xuICAgIGNvbnN0IG9ic2VydmVkQ2hpbGQgPSB0aGlzLl9vYnNlcnZlZENoaWxkcmVuW2NoaWxkXTtcblxuICAgIGlmICghb2JzZXJ2ZWRDaGlsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9ic2VydmVkQ2hpbGQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICdldC1zY3JvbGwtb2JzZXJ2ZXItb2JzZXJ2aW5nLWZpcnN0LWVsZW1lbnQnLFxuICAgICAgJ2V0LXNjcm9sbC1vYnNlcnZlci1vYnNlcnZpbmctbGFzdC1lbGVtZW50JyxcbiAgICApO1xuXG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LnVub2JzZXJ2ZShvYnNlcnZlZENoaWxkKTtcbiAgICB0aGlzLl9vYnNlcnZlZENoaWxkcmVuW2NoaWxkXSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhckludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9uSWdub3JlZENoaWxkKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCwgZGlyZWN0aW9uOiAncHJldmlvdXMnIHwgJ25leHQnKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoU0NST0xMX09CU0VSVkVSX0lHTk9SRV9UQVJHRVRfQ0xBU1MpKSB7XG4gICAgICBjb25zdCBuZXh0RWxlbWVudCA9IGVsZW1lbnRbYCR7ZGlyZWN0aW9ufUVsZW1lbnRTaWJsaW5nYF0gYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIW5leHRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Tm9uSWdub3JlZENoaWxkKG5leHRFbGVtZW50LCBkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1zY3JvbGwtc3RhdGUudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL29ic2VydmUtc2Nyb2xsLXN0YXRlL29ic2VydmUtc2Nyb2xsLXN0YXRlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGUge1xuICBpc0F0U3RhcnQ6IGJvb2xlYW47XG4gIGlzQXRFbmQ6IGJvb2xlYW47XG4gIGNhblNjcm9sbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgT2JzZXJ2ZWRTY3JvbGxhYmxlQ2hpbGQgPSAnZmlyc3QnIHwgJ2xhc3QnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './observe-scroll-state.directive';
2
+ export * from './observe-scroll-state.constants';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS1zY3JvbGwtc3RhdGUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29ic2VydmUtc2Nyb2xsLXN0YXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBTY3JvbGxPYnNlcnZlclNjcm9sbFN0YXRlIH0gZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL29ic2VydmUtc2Nyb2xsLXN0YXRlLmNvbnN0YW50cyc7XG4iXX0=
@@ -1,5 +1,12 @@
1
+ export * from './click-outside/public-api';
2
+ export * from './cursor-drag-scroll/public-api';
1
3
  export * from './let/public-api';
2
- export * from './repeat/public-api';
3
- export * from './observe-resize/public-api';
4
4
  export * from './observe-content/public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sZXQvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3JlcGVhdC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2ZS1yZXNpemUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL29ic2VydmUtY29udGVudC9wdWJsaWMtYXBpJztcbiJdfQ==
5
+ export * from './observe-resize/public-api';
6
+ export * from './observe-scroll-state/public-api';
7
+ export * from './repeat/public-api';
8
+ export * from './scroll-observer-first-element/public-api';
9
+ export * from './scroll-observer-ignore-target/public-api';
10
+ export * from './scroll-observer-last-element/public-api';
11
+ export * from './seo/public-api';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsaWNrLW91dHNpZGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2N1cnNvci1kcmFnLXNjcm9sbC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vbGV0L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9vYnNlcnZlLWNvbnRlbnQvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL29ic2VydmUtcmVzaXplL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwZWF0L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3Nlby9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -2,29 +2,28 @@ import { coerceNumberProperty } from '@angular/cdk/coercion';
2
2
  import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
4
  export class RepeatDirective {
5
- constructor(_mainTemplateRef, _viewContainerRef) {
6
- this._mainTemplateRef = _mainTemplateRef;
7
- this._viewContainerRef = _viewContainerRef;
8
- this._repeatCount = 2;
9
- }
10
5
  get repeatCount() {
11
6
  return this._repeatCount;
12
7
  }
13
8
  set repeatCount(value) {
14
9
  this._repeatCount = coerceNumberProperty(value);
15
- }
16
- ngOnInit() {
17
10
  this._render();
18
11
  }
12
+ constructor(_mainTemplateRef, _viewContainerRef) {
13
+ this._mainTemplateRef = _mainTemplateRef;
14
+ this._viewContainerRef = _viewContainerRef;
15
+ this._repeatCount = 2;
16
+ }
19
17
  _render() {
18
+ this._viewContainerRef.clear();
20
19
  for (let i = 0; i < this.repeatCount; i++) {
21
20
  this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);
22
21
  }
23
22
  }
24
23
  }
25
- RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RepeatDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
26
- RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.7", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: RepeatDirective, decorators: [{
24
+ RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RepeatDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
25
+ RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RepeatDirective, decorators: [{
28
27
  type: Directive,
29
28
  args: [{
30
29
  selector: '[etRepeat]',
@@ -34,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
34
33
  type: Input,
35
34
  args: ['etRepeat']
36
35
  }] } });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0L3JlcGVhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU14RixNQUFNLE9BQU8sZUFBZTtJQVUxQixZQUFvQixnQkFBc0MsRUFBVSxpQkFBbUM7UUFBbkYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFGL0YsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFFaUYsQ0FBQztJQVQzRyxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWtCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUtELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLE9BQU87UUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDOzs0R0FwQlUsZUFBZTtnR0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtpSUFHSyxXQUFXO3NCQURkLEtBQUs7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFJlcGVhdF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBlYXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2V0UmVwZWF0JylcbiAgZ2V0IHJlcGVhdENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGVhdENvdW50O1xuICB9XG4gIHNldCByZXBlYXRDb3VudCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl9yZXBlYXRDb3VudCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yZXBlYXRDb3VudCA9IDI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbWFpblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlcigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVwZWF0Q291bnQ7IGkrKykge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0L3JlcGVhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1oRixNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWtCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHRCxZQUFvQixnQkFBc0MsRUFBVSxpQkFBbUM7UUFBbkYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFGL0YsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFFaUYsQ0FBQztJQUVuRyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7OzRHQW5CVSxlQUFlO2dHQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2lJQUdLLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFJlcGVhdF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBlYXREaXJlY3RpdmUge1xuICBASW5wdXQoJ2V0UmVwZWF0JylcbiAgZ2V0IHJlcGVhdENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGVhdENvdW50O1xuICB9XG4gIHNldCByZXBlYXRDb3VudCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl9yZXBlYXRDb3VudCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIF9yZXBlYXRDb3VudCA9IDI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbWFpblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlcGVhdENvdW50OyBpKyspIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX21haW5UZW1wbGF0ZVJlZik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1maXJzdC1lbGVtZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './scroll-observer-first-element.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC5kaXJlY3RpdmUnO1xuIl19
@@ -0,0 +1,31 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Directive, HostBinding, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export const SCROLL_OBSERVER_FIRST_ELEMENT_CLASS = 'et-scroll-observer-first-element';
5
+ export class ScrollObserverFirstElementDirective {
6
+ constructor() {
7
+ this._isFirstElement = false;
8
+ }
9
+ get isFirstElement() {
10
+ return this._isFirstElement;
11
+ }
12
+ set isFirstElement(value) {
13
+ this._isFirstElement = coerceBooleanProperty(value);
14
+ }
15
+ }
16
+ ScrollObserverFirstElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
+ ScrollObserverFirstElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ScrollObserverFirstElementDirective, isStandalone: true, selector: "[etScrollObserverFirstElement]", inputs: { isFirstElement: ["etScrollObserverFirstElement", "isFirstElement"] }, host: { properties: { "class.et-scroll-observer-first-element": "this.isFirstElement" } }, ngImport: i0 });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverFirstElementDirective, decorators: [{
19
+ type: Directive,
20
+ args: [{
21
+ selector: '[etScrollObserverFirstElement]',
22
+ standalone: true,
23
+ }]
24
+ }], propDecorators: { isFirstElement: [{
25
+ type: Input,
26
+ args: ['etScrollObserverFirstElement']
27
+ }, {
28
+ type: HostBinding,
29
+ args: [`class.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`]
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUQsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsa0NBQWtDLENBQUM7QUFNdEYsTUFBTSxPQUFPLG1DQUFtQztJQUpoRDtRQWFVLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0tBQ2pDO0lBVEMsSUFFSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxjQUFjLENBQUMsS0FBbUI7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDOztnSUFSVSxtQ0FBbUM7b0hBQW5DLG1DQUFtQzsyRkFBbkMsbUNBQW1DO2tCQUovQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFJSyxjQUFjO3NCQUZqQixLQUFLO3VCQUFDLDhCQUE4Qjs7c0JBQ3BDLFdBQVc7dUJBQUMsU0FBUyxtQ0FBbUMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfT0JTRVJWRVJfRklSU1RfRUxFTUVOVF9DTEFTUyA9ICdldC1zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50RGlyZWN0aXZlIHtcbiAgQElucHV0KCdldFNjcm9sbE9ic2VydmVyRmlyc3RFbGVtZW50JylcbiAgQEhvc3RCaW5kaW5nKGBjbGFzcy4ke1NDUk9MTF9PQlNFUlZFUl9GSVJTVF9FTEVNRU5UX0NMQVNTfWApXG4gIGdldCBpc0ZpcnN0RWxlbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNGaXJzdEVsZW1lbnQ7XG4gIH1cbiAgc2V0IGlzRmlyc3RFbGVtZW50KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9pc0ZpcnN0RWxlbWVudCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfaXNGaXJzdEVsZW1lbnQgPSBmYWxzZTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './scroll-observer-ignore-target.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldC5kaXJlY3RpdmUnO1xuIl19
@@ -0,0 +1,18 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';
4
+ export class ScrollObserverIgnoreTargetDirective {
5
+ }
6
+ ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
+ ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ScrollObserverIgnoreTargetDirective, isStandalone: true, selector: "[etScrollObserverIgnoreTarget]", host: { classAttribute: "et-scroll-observer-ignore-target" }, ngImport: i0 });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, decorators: [{
9
+ type: Directive,
10
+ args: [{
11
+ selector: '[etScrollObserverIgnoreTarget]',
12
+ standalone: true,
13
+ host: {
14
+ class: SCROLL_OBSERVER_IGNORE_TARGET_CLASS,
15
+ },
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldC9zY3JvbGwtb2JzZXJ2ZXItaWdub3JlLXRhcmdldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsa0NBQWtDLENBQUM7QUFTdEYsTUFBTSxPQUFPLG1DQUFtQzs7Z0lBQW5DLG1DQUFtQztvSEFBbkMsbUNBQW1DOzJGQUFuQyxtQ0FBbUM7a0JBUC9DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsbUNBQW1DO3FCQUMzQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX0lHTk9SRV9UQVJHRVRfQ0xBU1MgPSAnZXQtc2Nyb2xsLW9ic2VydmVyLWlnbm9yZS10YXJnZXQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRTY3JvbGxPYnNlcnZlcklnbm9yZVRhcmdldF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgY2xhc3M6IFNDUk9MTF9PQlNFUlZFUl9JR05PUkVfVEFSR0VUX0NMQVNTLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxPYnNlcnZlcklnbm9yZVRhcmdldERpcmVjdGl2ZSB7fVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './scroll-observer-last-element.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMENBQTBDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQuZGlyZWN0aXZlJztcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Directive, HostBinding, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export const SCROLL_OBSERVER_LAST_ELEMENT_CLASS = 'et-scroll-observer-last-element';
5
+ export class ScrollObserverLastElementDirective {
6
+ constructor() {
7
+ this._isLastElement = false;
8
+ }
9
+ get isLastElement() {
10
+ return this._isLastElement;
11
+ }
12
+ set isLastElement(value) {
13
+ this._isLastElement = coerceBooleanProperty(value);
14
+ }
15
+ }
16
+ ScrollObserverLastElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
+ ScrollObserverLastElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ScrollObserverLastElementDirective, isStandalone: true, selector: "[etScrollObserverLastElement]", inputs: { isLastElement: ["etScrollObserverLastElement", "isLastElement"] }, host: { properties: { "class.et-scroll-observer-last-element": "this.isLastElement" }, classAttribute: "et-scroll-observer-last-element" }, ngImport: i0 });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverLastElementDirective, decorators: [{
19
+ type: Directive,
20
+ args: [{
21
+ selector: '[etScrollObserverLastElement]',
22
+ standalone: true,
23
+ host: {
24
+ class: SCROLL_OBSERVER_LAST_ELEMENT_CLASS,
25
+ },
26
+ }]
27
+ }], propDecorators: { isLastElement: [{
28
+ type: Input,
29
+ args: ['etScrollObserverLastElement']
30
+ }, {
31
+ type: HostBinding,
32
+ args: [`class.${SCROLL_OBSERVER_LAST_ELEMENT_CLASS}`]
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Njcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnQvc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsaUNBQWlDLENBQUM7QUFTcEYsTUFBTSxPQUFPLGtDQUFrQztJQVAvQztRQWdCVSxtQkFBYyxHQUFHLEtBQUssQ0FBQztLQUNoQztJQVRDLElBRUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsS0FBbUI7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDOzsrSEFSVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQzsyRkFBbEMsa0NBQWtDO2tCQVA5QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGtDQUFrQztxQkFDMUM7aUJBQ0Y7OEJBSUssYUFBYTtzQkFGaEIsS0FBSzt1QkFBQyw2QkFBNkI7O3NCQUNuQyxXQUFXO3VCQUFDLFNBQVMsa0NBQWtDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU0NST0xMX09CU0VSVkVSX0xBU1RfRUxFTUVOVF9DTEFTUyA9ICdldC1zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0U2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgY2xhc3M6IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbE9ic2VydmVyTGFzdEVsZW1lbnREaXJlY3RpdmUge1xuICBASW5wdXQoJ2V0U2Nyb2xsT2JzZXJ2ZXJMYXN0RWxlbWVudCcpXG4gIEBIb3N0QmluZGluZyhgY2xhc3MuJHtTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTfWApXG4gIGdldCBpc0xhc3RFbGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0xhc3RFbGVtZW50O1xuICB9XG4gIHNldCBpc0xhc3RFbGVtZW50KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9pc0xhc3RFbGVtZW50ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9pc0xhc3RFbGVtZW50ID0gZmFsc2U7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export * from './seo.directive';
2
+ export * from './seo.directive.constants';
3
+ export * from './seo.directive.types';
4
+ export * from './seo.directive.utils';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2VvL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2VvLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nlby5kaXJlY3RpdmUuY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VvLmRpcmVjdGl2ZS50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlby5kaXJlY3RpdmUudXRpbHMnO1xuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const SEO_DIRECTIVE_TOKEN = new InjectionToken('SEO_DIRECTIVE_TOKEN');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLmRpcmVjdGl2ZS5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL3Nlby9zZW8uZGlyZWN0aXZlLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFlLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VvRGlyZWN0aXZlIH0gZnJvbSAnLi9zZW8uZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IFNFT19ESVJFQ1RJVkVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48U2VvRGlyZWN0aXZlPignU0VPX0RJUkVDVElWRV9UT0tFTicpO1xuIl19
@@ -0,0 +1,166 @@
1
+ import { Directive, inject } from '@angular/core';
2
+ import { Meta, Title } from '@angular/platform-browser';
3
+ import { Observable, Subject, takeUntil } from 'rxjs';
4
+ import { SEO_DIRECTIVE_TOKEN } from './seo.directive.constants';
5
+ import { mergeSeoConfig } from './seo.directive.utils';
6
+ import * as i0 from "@angular/core";
7
+ export class SeoDirective {
8
+ constructor() {
9
+ this._metaService = inject(Meta);
10
+ this._titleService = inject(Title);
11
+ this._onDeactivate$ = new Subject();
12
+ this._isDeactivated = false;
13
+ this.parent = inject(SEO_DIRECTIVE_TOKEN, { optional: true, skipSelf: true });
14
+ this._config = {};
15
+ }
16
+ get config() {
17
+ return this._config;
18
+ }
19
+ ngOnInit() {
20
+ this.parent?._deactivate();
21
+ }
22
+ ngOnDestroy() {
23
+ this._deactivate();
24
+ this._cleanUp();
25
+ this.parent?._activate();
26
+ }
27
+ // TODO(TRB): This should get split up into multiple methods to make it more readable
28
+ // - updateTitle
29
+ // - updateMeta
30
+ // - updateLink
31
+ updateConfig(config) {
32
+ this._config = mergeSeoConfig(config, this.parent?.config || {});
33
+ if (this._isDeactivated) {
34
+ return;
35
+ }
36
+ this._deactivate();
37
+ this._activate();
38
+ }
39
+ _activate() {
40
+ this._onDeactivate$.next(false);
41
+ this._isDeactivated = false;
42
+ for (const [key, value] of Object.entries(this._config)) {
43
+ if (value instanceof Observable) {
44
+ value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));
45
+ }
46
+ else if (Array.isArray(value)) {
47
+ value.forEach((value) => {
48
+ if (value instanceof Observable) {
49
+ value.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(key, value));
50
+ }
51
+ else {
52
+ this._update(key, value);
53
+ }
54
+ });
55
+ }
56
+ else if (typeof value === 'object' && value !== null) {
57
+ for (const [subKey, subValue] of Object.entries(value)) {
58
+ if (subValue instanceof Observable) {
59
+ subValue.pipe(takeUntil(this._onDeactivate$)).subscribe((value) => this._update(`${key}:${subKey}`, value));
60
+ }
61
+ else {
62
+ this._update(`${key}:${subKey}`, subValue);
63
+ }
64
+ }
65
+ }
66
+ else {
67
+ this._update(key, value);
68
+ }
69
+ }
70
+ }
71
+ _deactivate() {
72
+ this._onDeactivate$.next(true);
73
+ this._isDeactivated = true;
74
+ }
75
+ _update(key, value) {
76
+ switch (key) {
77
+ case 'title':
78
+ if (value && typeof value === 'string') {
79
+ this._titleService.setTitle(value);
80
+ }
81
+ break;
82
+ case 'canonical':
83
+ {
84
+ const link = document.querySelector(`link[rel="${key}"]`);
85
+ if (link) {
86
+ link.setAttribute('href', value);
87
+ }
88
+ else {
89
+ const newLink = document.createElement('link');
90
+ newLink.setAttribute('rel', key);
91
+ newLink.setAttribute('href', value);
92
+ document.head.appendChild(newLink);
93
+ }
94
+ }
95
+ break;
96
+ case 'alternate':
97
+ {
98
+ const link = document.querySelector(`link[rel="${key}"][hreflang="${value.hreflang}"]`);
99
+ if (link) {
100
+ link.setAttribute('href', value.href);
101
+ }
102
+ else {
103
+ const newLink = document.createElement('link');
104
+ newLink.setAttribute('rel', key);
105
+ newLink.setAttribute('hreflang', value.hreflang);
106
+ newLink.setAttribute('href', value.href);
107
+ document.head.appendChild(newLink);
108
+ }
109
+ }
110
+ break;
111
+ default:
112
+ if (value !== undefined && value !== null) {
113
+ const val = Array.isArray(value) ? value.join(', ') : value;
114
+ this._metaService.updateTag({ name: key, content: val });
115
+ }
116
+ else {
117
+ this._metaService.removeTag(`name="${key}"`);
118
+ }
119
+ break;
120
+ }
121
+ }
122
+ _cleanUp() {
123
+ for (const key in this._config) {
124
+ if (key === 'alternate') {
125
+ const links = document.querySelectorAll(`link[rel="${key}"]`);
126
+ links.forEach((link) => {
127
+ link.remove();
128
+ });
129
+ continue;
130
+ }
131
+ if (key === 'canonical') {
132
+ const link = document.querySelector(`link[rel="${key}"]`);
133
+ if (link) {
134
+ link.remove();
135
+ }
136
+ continue;
137
+ }
138
+ if (typeof this._config[key] === 'object' &&
139
+ this._config[key] !== null &&
140
+ !(this._config[key] instanceof Observable)) {
141
+ for (const subKey in this._config[key]) {
142
+ const parentValue = this.parent?.config?.[key]?.[subKey];
143
+ if (parentValue === undefined) {
144
+ this._update(`${key}:${subKey}`, undefined);
145
+ }
146
+ }
147
+ }
148
+ else {
149
+ const parentValue = this.parent?.config?.[key];
150
+ if (parentValue === undefined) {
151
+ this._update(key, null);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ SeoDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
158
+ SeoDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: SeoDirective, isStandalone: true, providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }], ngImport: i0 });
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SeoDirective, decorators: [{
160
+ type: Directive,
161
+ args: [{
162
+ standalone: true,
163
+ providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }],
164
+ }]
165
+ }] });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvc2VvL3Nlby5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLFlBQVk7SUFKekI7UUFLbUIsaUJBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWpELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXRCLFdBQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBSzFFLFlBQU8sR0FBYyxFQUFFLENBQUM7S0E4SmpDO0lBaktDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU0VPX0RJUkVDVElWRV9UT0tFTiB9IGZyb20gJy4vc2VvLmRpcmVjdGl2ZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgQWx0ZXJuYXRlTGluaywgU2VvQ29uZmlnIH0gZnJvbSAnLi9zZW8uZGlyZWN0aXZlLnR5cGVzJztcbmltcG9ydCB7IG1lcmdlU2VvQ29uZmlnIH0gZnJvbSAnLi9zZW8uZGlyZWN0aXZlLnV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogU0VPX0RJUkVDVElWRV9UT0tFTiwgdXNlRXhpc3Rpbmc6IFNlb0RpcmVjdGl2ZSB9XSxcbn0pXG5leHBvcnQgY2xhc3MgU2VvRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRhU2VydmljZSA9IGluamVjdChNZXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZWFjdGl2YXRlJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfaXNEZWFjdGl2YXRlZCA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IHBhcmVudCA9IGluamVjdChTRU9fRElSRUNUSVZFX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KTtcblxuICBnZXQgY29uZmlnKCk6IFNlb0NvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuICBwcml2YXRlIF9jb25maWc6IFNlb0NvbmZpZyA9IHt9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50Py5fZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2NsZWFuVXAoKTtcbiAgICB0aGlzLnBhcmVudD8uX2FjdGl2YXRlKCk7XG4gIH1cblxuICAvLyBUT0RPKFRSQik6IFRoaXMgc2hvdWxkIGdldCBzcGxpdCB1cCBpbnRvIG11bHRpcGxlIG1ldGhvZHMgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlXG4gIC8vIC0gdXBkYXRlVGl0bGVcbiAgLy8gLSB1cGRhdGVNZXRhXG4gIC8vIC0gdXBkYXRlTGlua1xuICB1cGRhdGVDb25maWcoY29uZmlnOiBTZW9Db25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSBtZXJnZVNlb0NvbmZpZyhjb25maWcsIHRoaXMucGFyZW50Py5jb25maWcgfHwge30pO1xuXG4gICAgaWYgKHRoaXMuX2lzRGVhY3RpdmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fYWN0aXZhdGUoKTtcbiAgfVxuXG4gIF9hY3RpdmF0ZSgpIHtcbiAgICB0aGlzLl9vbkRlYWN0aXZhdGUkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuX2lzRGVhY3RpdmF0ZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgdmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZWFjdGl2YXRlJCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuX3VwZGF0ZShrZXksIHZhbHVlKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgdmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZWFjdGl2YXRlJCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuX3VwZGF0ZShrZXksIHZhbHVlKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc3ViVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChzdWJWYWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHN1YlZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVhY3RpdmF0ZSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl91cGRhdGUoYCR7a2V5fToke3N1YktleX1gLCB2YWx1ZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoYCR7a2V5fToke3N1YktleX1gLCBzdWJWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl91cGRhdGUoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2RlYWN0aXZhdGUoKSB7XG4gICAgdGhpcy5fb25EZWFjdGl2YXRlJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2lzRGVhY3RpdmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICd0aXRsZSc6XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5fdGl0bGVTZXJ2aWNlLnNldFRpdGxlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY2Fub25pY2FsJzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW3JlbD1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIG5ld0xpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCBrZXkpO1xuICAgICAgICAgICAgbmV3TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdMaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWx0ZXJuYXRlJzpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW3JlbD1cIiR7a2V5fVwiXVtocmVmbGFuZz1cIiR7KHZhbHVlIGFzIEFsdGVybmF0ZUxpbmspLmhyZWZsYW5nfVwiXWApO1xuXG4gICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgKHZhbHVlIGFzIEFsdGVybmF0ZUxpbmspLmhyZWYpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgbmV3TGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsIGtleSk7XG4gICAgICAgICAgICBuZXdMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZmxhbmcnLCAodmFsdWUgYXMgQWx0ZXJuYXRlTGluaykuaHJlZmxhbmcpO1xuICAgICAgICAgICAgbmV3TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAodmFsdWUgYXMgQWx0ZXJuYXRlTGluaykuaHJlZik7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5ld0xpbmspO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6ICh2YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgdGhpcy5fbWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZToga2V5LCBjb250ZW50OiB2YWwgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fbWV0YVNlcnZpY2UucmVtb3ZlVGFnKGBuYW1lPVwiJHtrZXl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbGVhblVwKCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2NvbmZpZykge1xuICAgICAgaWYgKGtleSA9PT0gJ2FsdGVybmF0ZScpIHtcbiAgICAgICAgY29uc3QgbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBsaW5rW3JlbD1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICBsaW5rLnJlbW92ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ2Nhbm9uaWNhbCcpIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpbmtbcmVsPVwiJHtrZXl9XCJdYCk7XG5cbiAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICBsaW5rLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRoaXMuX2NvbmZpZ1trZXldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0aGlzLl9jb25maWdba2V5XSAhPT0gbnVsbCAmJlxuICAgICAgICAhKHRoaXMuX2NvbmZpZ1trZXldIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHN1YktleSBpbiB0aGlzLl9jb25maWdba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID1cbiAgICAgICAgICAgIHRoaXMucGFyZW50Py5jb25maWc/LltrZXkgYXMga2V5b2YgU2VvQ29uZmlnXT8uW3N1YktleSBhcyBrZXlvZiBTZW9Db25maWdba2V5b2YgU2VvQ29uZmlnXV07XG5cbiAgICAgICAgICBpZiAocGFyZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKGAke2tleX06JHtzdWJLZXl9YCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy5wYXJlbnQ/LmNvbmZpZz8uW2tleSBhcyBrZXlvZiBTZW9Db25maWddO1xuXG4gICAgICAgIGlmIChwYXJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlKGtleSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==