@ethlete/core 1.10.0 → 2.0.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 (171) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +38 -0
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +114 -0
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +113 -0
  4. package/esm2022/lib/directives/animated-lifecycle/index.mjs +2 -0
  5. package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +181 -0
  6. package/esm2022/lib/directives/animated-overlay/public-api.mjs +2 -0
  7. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +38 -0
  8. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +147 -0
  9. package/esm2022/lib/directives/delayable/delayable.directive.mjs +56 -0
  10. package/esm2022/lib/directives/let/let.directive.mjs +41 -0
  11. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +69 -0
  12. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +69 -0
  13. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +175 -0
  14. package/esm2022/lib/directives/public-api.mjs +16 -0
  15. package/esm2022/lib/directives/repeat/repeat.directive.mjs +37 -0
  16. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +32 -0
  17. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +19 -0
  18. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +35 -0
  19. package/esm2022/lib/directives/seo/seo.directive.mjs +167 -0
  20. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +16 -0
  21. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +16 -0
  22. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +16 -0
  23. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +16 -0
  24. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +16 -0
  25. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +16 -0
  26. package/esm2022/lib/services/click-observer.service.mjs +75 -0
  27. package/esm2022/lib/services/content-observer.service.mjs +81 -0
  28. package/esm2022/lib/services/focus-visible.service.mjs +35 -0
  29. package/esm2022/lib/services/public-api.mjs +8 -0
  30. package/esm2022/lib/services/resize-observer.service.mjs +77 -0
  31. package/esm2022/lib/services/router-state.service.mjs +116 -0
  32. package/esm2022/lib/services/viewport.service.mjs +169 -0
  33. package/esm2022/lib/types/angular.types.mjs +15 -0
  34. package/esm2022/lib/utils/destroy.utils.mjs +13 -0
  35. package/esm2022/lib/utils/public-api.mjs +13 -0
  36. package/esm2022/lib/utils/reactive-binding.util.mjs +112 -0
  37. package/esm2022/lib/utils/scrollable.utils.mjs +85 -0
  38. package/{fesm2020 → fesm2022}/ethlete-core.mjs +745 -605
  39. package/fesm2022/ethlete-core.mjs.map +1 -0
  40. package/lib/components/structured-data/structured-data.component.d.ts +1 -1
  41. package/lib/directives/animatable/animatable.directive.d.ts +1 -1
  42. package/lib/directives/animated-lifecycle/index.d.ts +1 -0
  43. package/lib/directives/animated-overlay/animated-overlay.directive.d.ts +62 -0
  44. package/lib/directives/animated-overlay/public-api.d.ts +1 -0
  45. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +1 -1
  46. package/lib/directives/let/let.directive.d.ts +1 -1
  47. package/lib/directives/observe-content/observe-content.directive.d.ts +1 -1
  48. package/lib/directives/observe-resize/observe-resize.directive.d.ts +1 -1
  49. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +1 -1
  50. package/lib/directives/public-api.d.ts +1 -0
  51. package/lib/directives/repeat/repeat.directive.d.ts +1 -1
  52. package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +1 -1
  53. package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +1 -1
  54. package/lib/services/public-api.d.ts +0 -1
  55. package/lib/types/angular.types.d.ts +0 -7
  56. package/lib/utils/destroy.utils.d.ts +1 -0
  57. package/lib/utils/public-api.d.ts +1 -0
  58. package/package.json +14 -19
  59. package/esm2020/lib/components/structured-data/structured-data.component.mjs +0 -37
  60. package/esm2020/lib/directives/animatable/animatable.directive.mjs +0 -115
  61. package/esm2020/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +0 -115
  62. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +0 -37
  63. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +0 -147
  64. package/esm2020/lib/directives/delayable/delayable.directive.mjs +0 -55
  65. package/esm2020/lib/directives/let/let.directive.mjs +0 -40
  66. package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +0 -68
  67. package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +0 -68
  68. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +0 -176
  69. package/esm2020/lib/directives/public-api.mjs +0 -15
  70. package/esm2020/lib/directives/repeat/repeat.directive.mjs +0 -36
  71. package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +0 -31
  72. package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +0 -18
  73. package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +0 -34
  74. package/esm2020/lib/directives/seo/seo.directive.mjs +0 -166
  75. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +0 -15
  76. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +0 -15
  77. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +0 -15
  78. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +0 -15
  79. package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +0 -15
  80. package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +0 -15
  81. package/esm2020/lib/services/click-observer.service.mjs +0 -73
  82. package/esm2020/lib/services/content-observer.service.mjs +0 -79
  83. package/esm2020/lib/services/destroy.service.mjs +0 -23
  84. package/esm2020/lib/services/focus-visible.service.mjs +0 -34
  85. package/esm2020/lib/services/public-api.mjs +0 -9
  86. package/esm2020/lib/services/resize-observer.service.mjs +0 -75
  87. package/esm2020/lib/services/router-state.service.mjs +0 -115
  88. package/esm2020/lib/services/viewport.service.mjs +0 -168
  89. package/esm2020/lib/types/angular.types.mjs +0 -36
  90. package/esm2020/lib/utils/public-api.mjs +0 -12
  91. package/esm2020/lib/utils/reactive-binding.util.mjs +0 -111
  92. package/esm2020/lib/utils/scrollable.utils.mjs +0 -85
  93. package/fesm2015/ethlete-core.mjs +0 -2787
  94. package/fesm2015/ethlete-core.mjs.map +0 -1
  95. package/fesm2020/ethlete-core.mjs.map +0 -1
  96. package/lib/services/destroy.service.d.ts +0 -12
  97. /package/{esm2020 → esm2022}/ethlete-core.mjs +0 -0
  98. /package/{esm2020 → esm2022}/index.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/components/structured-data/public-api.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/constants/public-api.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/constants/viewport.constants.mjs +0 -0
  104. /package/{esm2020 → esm2022}/lib/decorators/index.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/decorators/memo/memo.decorator.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/decorators/memo/public-api.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/decorators/public-api.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/directives/animatable/index.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/directives/animatable/public-api.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/directives/animated-lifecycle/public-api.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/directives/click-outside/public-api.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/public-api.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/directives/delayable/public-api.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/directives/let/let.types.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/directives/let/public-api.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/directives/observe-content/public-api.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/directives/observe-resize/public-api.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/public-api.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/directives/repeat/public-api.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/index.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/public-api.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/public-api.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/index.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/public-api.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/directives/seo/public-api.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.constants.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.types.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.utils.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/public-api.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.types.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.util.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/public-api.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.types.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.util.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/public-api.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/index.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.constants.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.util.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/public-api.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/normalize-match-type.util.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/public-api.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/pipes/public-api.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/pipes/to-array/public-api.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/pipes/to-array/to-array.util.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/services/viewport.types.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/types/i18n.types.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/types/public-api.mjs +0 -0
  157. /package/{esm2020 → esm2022}/lib/types/viewport.types.mjs +0 -0
  158. /package/{esm2020 → esm2022}/lib/utils/animation.utils.mjs +0 -0
  159. /package/{esm2020 → esm2022}/lib/utils/clamp.util.mjs +0 -0
  160. /package/{esm2020 → esm2022}/lib/utils/clone.util.mjs +0 -0
  161. /package/{esm2020 → esm2022}/lib/utils/cookie.util.mjs +0 -0
  162. /package/{esm2020 → esm2022}/lib/utils/equal.util.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/utils/media-query-observable.util.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/utils/rxjs.utils.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/utils/smart-block-scroll-strategy.utils.mjs +0 -0
  167. /package/{esm2020 → esm2022}/lib/utils/viewport.util.mjs +0 -0
  168. /package/{esm2020 → esm2022}/lib/validators/is-array-not-empty.validator.mjs +0 -0
  169. /package/{esm2020 → esm2022}/lib/validators/is-email.validator.mjs +0 -0
  170. /package/{esm2020 → esm2022}/lib/validators/must-match.validator.mjs +0 -0
  171. /package/{esm2020 → esm2022}/lib/validators/public-api.mjs +0 -0
@@ -1,176 +0,0 @@
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 = [0.99999, 0.9999, 0.999, 0.99, 1];
23
- this._intersectionObserver = null;
24
- this.valueChange = 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
- if (Array.isArray(value)) {
53
- this._threshold = value;
54
- return;
55
- }
56
- this._threshold = coerceNumberProperty(value);
57
- }
58
- ngOnInit() {
59
- this._contentObserverService
60
- .observe(this._elementRef.nativeElement)
61
- .pipe(debounceTime(25), tap(() => this._checkChildren()), takeUntil(this._destroy$))
62
- .subscribe();
63
- this._resizeObserverService
64
- .observe(this._elementRef.nativeElement)
65
- .pipe(debounceTime(25), tap(() => {
66
- const canScroll = elementCanScroll(this._elementRef.nativeElement);
67
- if ((!this._intersectionObserver && canScroll) || (this._intersectionObserver && !canScroll)) {
68
- this._checkChildren();
69
- }
70
- }), takeUntil(this._destroy$))
71
- .subscribe();
72
- this._checkChildren();
73
- }
74
- ngOnDestroy() {
75
- this._clearIntersectionObserver();
76
- }
77
- _checkChildren() {
78
- this._clearIntersectionObserver();
79
- if (this._firstCurrentChild === this._lastCurrentChild ||
80
- !this._firstCurrentChild ||
81
- !this._lastCurrentChild ||
82
- !elementCanScroll(this._elementRef.nativeElement)) {
83
- this._unobserveChild('first');
84
- this._unobserveChild('last');
85
- this.valueChange.emit({
86
- isAtStart: true,
87
- isAtEnd: true,
88
- canScroll: false,
89
- });
90
- }
91
- else {
92
- this._intersectionObserver = this._initiateIntersectionObserver();
93
- this._observeChild('first', this._firstCurrentChild);
94
- this._observeChild('last', this._lastCurrentChild);
95
- }
96
- }
97
- _initiateIntersectionObserver() {
98
- const observer = new IntersectionObserver((entries) => {
99
- const { first, last } = this._observedChildren;
100
- const isAtStart = entries.find((entry) => entry.target === first)?.isIntersecting ?? false;
101
- const isAtEnd = entries.find((entry) => entry.target === last)?.isIntersecting ?? false;
102
- this.valueChange.emit({
103
- isAtStart,
104
- isAtEnd,
105
- canScroll: !isAtStart || !isAtEnd,
106
- });
107
- }, {
108
- root: this._elementRef.nativeElement,
109
- rootMargin: this._rootMargin ? `${this._rootMargin}px` : undefined,
110
- threshold: this._threshold,
111
- });
112
- return observer;
113
- }
114
- _observeChild(child, element) {
115
- this._intersectionObserver?.observe(element);
116
- this._observedChildren[child] = element;
117
- element.classList.add(`et-scroll-observer-observing-${child}-element`);
118
- }
119
- _unobserveChild(child) {
120
- const observedChild = this._observedChildren[child];
121
- if (!observedChild) {
122
- return;
123
- }
124
- observedChild.classList.remove('et-scroll-observer-observing-first-element', 'et-scroll-observer-observing-last-element');
125
- this._intersectionObserver?.unobserve(observedChild);
126
- this._observedChildren[child] = null;
127
- }
128
- _clearIntersectionObserver() {
129
- this._intersectionObserver?.disconnect();
130
- this._intersectionObserver = null;
131
- }
132
- _getNonIgnoredChild(element, direction) {
133
- if (!element) {
134
- return null;
135
- }
136
- if (element?.classList.contains(SCROLL_OBSERVER_IGNORE_TARGET_CLASS)) {
137
- const nextElement = element[`${direction}ElementSibling`];
138
- if (!nextElement) {
139
- return null;
140
- }
141
- return this._getNonIgnoredChild(nextElement, direction);
142
- }
143
- return element;
144
- }
145
- }
146
- ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
147
- ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: ObserveScrollStateDirective, isStandalone: true, selector: "[etObserveScrollState]", inputs: { observerRootMargin: "observerRootMargin", observerThreshold: "observerThreshold" }, outputs: { valueChange: "etObserveScrollState" }, providers: [
148
- {
149
- provide: OBSERVE_SCROLL_STATE,
150
- useExisting: ObserveScrollStateDirective,
151
- },
152
- DestroyService,
153
- ], exportAs: ["etObserveScrollState"], ngImport: i0 });
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{
155
- type: Directive,
156
- args: [{
157
- selector: '[etObserveScrollState]',
158
- exportAs: 'etObserveScrollState',
159
- standalone: true,
160
- providers: [
161
- {
162
- provide: OBSERVE_SCROLL_STATE,
163
- useExisting: ObserveScrollStateDirective,
164
- },
165
- DestroyService,
166
- ],
167
- }]
168
- }], propDecorators: { observerRootMargin: [{
169
- type: Input
170
- }], observerThreshold: [{
171
- type: Input
172
- }], valueChange: [{
173
- type: Output,
174
- args: ['etObserveScrollState']
175
- }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1zY3JvbGwtc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXNjcm9sbC1zdGF0ZS9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFleEUsTUFBTSxPQUFPLDJCQUEyQjtJQVp4QztRQWFtQixjQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUU1RCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7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MkI7U0FDekM7UUFDRCxjQUFjO0tBQ2Y7MkZBRVUsMkJBQTJCO2tCQVp2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLG9CQUFvQjs0QkFDN0IsV0FBVyw2QkFBNkI7eUJBQ3pDO3dCQUNELGNBQWM7cUJBQ2Y7aUJBQ0Y7OEJBNENLLGtCQUFrQjtzQkFEckIsS0FBSztnQkFVRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBaUJOLFdBQVc7c0JBRFYsTUFBTTt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRPYnNlcnZlclNlcnZpY2UsIERlc3Ryb3lTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU0NST0xMX09CU0VSVkVSX0ZJUlNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudCc7XG5pbXBvcnQgeyBTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUyB9IGZyb20gJy4uL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0JztcbmltcG9ydCB7IFNDUk9MTF9PQlNFUlZFUl9MQVNUX0VMRU1FTlRfQ0xBU1MgfSBmcm9tICcuLi9zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50JztcbmltcG9ydCB7IE9CU0VSVkVfU0NST0xMX1NUQVRFIH0gZnJvbSAnLi9vYnNlcnZlLXNjcm9sbC1zdGF0ZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgT2JzZXJ2ZWRTY3JvbGxhYmxlQ2hpbGQsIFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGUgfSBmcm9tICcuL29ic2VydmUtc2Nyb2xsLXN0YXRlLnR5cGVzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0T2JzZXJ2ZVNjcm9sbFN0YXRlXScsXG4gIGV4cG9ydEFzOiAnZXRPYnNlcnZlU2Nyb2xsU3RhdGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBPQlNFUlZFX1NDUk9MTF9TVEFURSxcbiAgICAgIHVzZUV4aXN0aW5nOiBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUsXG4gICAgfSxcbiAgICBEZXN0cm95U2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGluamVjdChEZXN0cm95U2VydmljZSwgeyBob3N0OiB0cnVlIH0pLmRlc3Ryb3kkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vYnNlcnZlZENoaWxkcmVuID0ge1xuICAgIGZpcnN0OiB0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCxcbiAgICBsYXN0OiB0aGlzLl9sYXN0Q3VycmVudENoaWxkLFxuICB9O1xuXG4gIHByaXZhdGUgZ2V0IF9maXJzdEN1cnJlbnRDaGlsZCgpIHtcbiAgICBjb25zdCBleHBsaWNpdEZpcnN0RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYC4ke1NDUk9MTF9PQlNFUlZFUl9GSVJTVF9FTEVNRU5UX0NMQVNTfWAsXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoZXhwbGljaXRGaXJzdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBleHBsaWNpdEZpcnN0RWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIHJldHVybiB0aGlzLl9nZXROb25JZ25vcmVkQ2hpbGQoZWxlbWVudCwgJ25leHQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9sYXN0Q3VycmVudENoaWxkKCkge1xuICAgIGNvbnN0IGV4cGxpY2l0TGFzdEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAuJHtTQ1JPTExfT0JTRVJWRVJfTEFTVF9FTEVNRU5UX0NMQVNTfWAsXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoZXhwbGljaXRMYXN0RWxlbWVudCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0TGFzdEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbltcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgXSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0Tm9uSWdub3JlZENoaWxkKGVsZW1lbnQsICdwcmV2aW91cycpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9ic2VydmVyUm9vdE1hcmdpbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb290TWFyZ2luO1xuICB9XG4gIHNldCBvYnNlcnZlclJvb3RNYXJnaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fcm9vdE1hcmdpbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yb290TWFyZ2luID0gMDtcblxuICBASW5wdXQoKVxuICBnZXQgb2JzZXJ2ZXJUaHJlc2hvbGQoKTogbnVtYmVyIHwgbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cbiAgc2V0IG9ic2VydmVyVGhyZXNob2xkKHZhbHVlOiBOdW1iZXJJbnB1dCB8IG51bWJlcltdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQgPSB2YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90aHJlc2hvbGQgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBudW1iZXIgfCBudW1iZXJbXSA9IFswLjk5OTk5LCAwLjk5OTksIDAuOTk5LCAwLjk5LCAxXTtcblxuICBwcml2YXRlIF9pbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCdldE9ic2VydmVTY3JvbGxTdGF0ZScpXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxPYnNlcnZlclNjcm9sbFN0YXRlPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbnRlbnRPYnNlcnZlclNlcnZpY2VcbiAgICAgIC5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fY2hlY2tDaGlsZHJlbigpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyU2VydmljZVxuICAgICAgLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyNSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FuU2Nyb2xsID0gZWxlbWVudENhblNjcm9sbCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIGlmICgoIXRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyICYmIGNhblNjcm9sbCkgfHwgKHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyICYmICFjYW5TY3JvbGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja0NoaWxkcmVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX2NoZWNrQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFySW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fZmlyc3RDdXJyZW50Q2hpbGQgPT09IHRoaXMuX2xhc3RDdXJyZW50Q2hpbGQgfHxcbiAgICAgICF0aGlzLl9maXJzdEN1cnJlbnRDaGlsZCB8fFxuICAgICAgIXRoaXMuX2xhc3RDdXJyZW50Q2hpbGQgfHxcbiAgICAgICFlbGVtZW50Q2FuU2Nyb2xsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMuX3Vub2JzZXJ2ZUNoaWxkKCdmaXJzdCcpO1xuICAgICAgdGhpcy5fdW5vYnNlcnZlQ2hpbGQoJ2xhc3QnKTtcblxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgaXNBdFN0YXJ0OiB0cnVlLFxuICAgICAgICBpc0F0RW5kOiB0cnVlLFxuICAgICAgICBjYW5TY3JvbGw6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyID0gdGhpcy5faW5pdGlhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuXG4gICAgICB0aGlzLl9vYnNlcnZlQ2hpbGQoJ2ZpcnN0JywgdGhpcy5fZmlyc3RDdXJyZW50Q2hpbGQpO1xuICAgICAgdGhpcy5fb2JzZXJ2ZUNoaWxkKCdsYXN0JywgdGhpcy5fbGFzdEN1cnJlbnRDaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIGxhc3QgfSA9IHRoaXMuX29ic2VydmVkQ2hpbGRyZW47XG5cbiAgICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSBmaXJzdCk/LmlzSW50ZXJzZWN0aW5nID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBpc0F0RW5kID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFyZ2V0ID09PSBsYXN0KT8uaXNJbnRlcnNlY3RpbmcgPz8gZmFsc2U7XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBpc0F0U3RhcnQsXG4gICAgICAgICAgaXNBdEVuZCxcbiAgICAgICAgICBjYW5TY3JvbGw6ICFpc0F0U3RhcnQgfHwgIWlzQXRFbmQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICByb290TWFyZ2luOiB0aGlzLl9yb290TWFyZ2luID8gYCR7dGhpcy5fcm9vdE1hcmdpbn1weGAgOiB1bmRlZmluZWQsXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy5fdGhyZXNob2xkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIG9ic2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUNoaWxkKGNoaWxkOiBPYnNlcnZlZFNjcm9sbGFibGVDaGlsZCwgZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcj8ub2JzZXJ2ZShlbGVtZW50KTtcbiAgICB0aGlzLl9vYnNlcnZlZENoaWxkcmVuW2NoaWxkXSA9IGVsZW1lbnQ7XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYGV0LXNjcm9sbC1vYnNlcnZlci1vYnNlcnZpbmctJHtjaGlsZH0tZWxlbWVudGApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5vYnNlcnZlQ2hpbGQoY2hpbGQ6IE9ic2VydmVkU2Nyb2xsYWJsZUNoaWxkKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZWRDaGlsZCA9IHRoaXMuX29ic2VydmVkQ2hpbGRyZW5bY2hpbGRdO1xuXG4gICAgaWYgKCFvYnNlcnZlZENoaWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb2JzZXJ2ZWRDaGlsZC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgJ2V0LXNjcm9sbC1vYnNlcnZlci1vYnNlcnZpbmctZmlyc3QtZWxlbWVudCcsXG4gICAgICAnZXQtc2Nyb2xsLW9ic2VydmVyLW9ic2VydmluZy1sYXN0LWVsZW1lbnQnLFxuICAgICk7XG5cbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcj8udW5vYnNlcnZlKG9ic2VydmVkQ2hpbGQpO1xuICAgIHRoaXMuX29ic2VydmVkQ2hpbGRyZW5bY2hpbGRdID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFySW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb25JZ25vcmVkQ2hpbGQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLCBkaXJlY3Rpb246ICdwcmV2aW91cycgfCAnbmV4dCcpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucyhTQ1JPTExfT0JTRVJWRVJfSUdOT1JFX1RBUkdFVF9DTEFTUykpIHtcbiAgICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudFtgJHtkaXJlY3Rpb259RWxlbWVudFNpYmxpbmdgXSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghbmV4dEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9nZXROb25JZ25vcmVkQ2hpbGQobmV4dEVsZW1lbnQsIGRpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,15 +0,0 @@
1
- export * from './animatable/public-api';
2
- export * from './animated-lifecycle/public-api';
3
- export * from './click-outside/public-api';
4
- export * from './cursor-drag-scroll/public-api';
5
- export * from './delayable/public-api';
6
- export * from './let/public-api';
7
- export * from './observe-content/public-api';
8
- export * from './observe-resize/public-api';
9
- export * from './observe-scroll-state/public-api';
10
- export * from './repeat/public-api';
11
- export * from './scroll-observer-first-element/public-api';
12
- export * from './scroll-observer-ignore-target/public-api';
13
- export * from './scroll-observer-last-element/public-api';
14
- export * from './seo/public-api';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGFibGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2FuaW1hdGVkLWxpZmVjeWNsZS9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpY2stb3V0c2lkZS9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vY3Vyc29yLWRyYWctc2Nyb2xsL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxheWFibGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2xldC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2ZS1jb250ZW50L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9vYnNlcnZlLXJlc2l6ZS9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2ZS1zY3JvbGwtc3RhdGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3JlcGVhdC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsLW9ic2VydmVyLWZpcnN0LWVsZW1lbnQvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3Njcm9sbC1vYnNlcnZlci1pZ25vcmUtdGFyZ2V0L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zZW8vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,36 +0,0 @@
1
- import { coerceNumberProperty } from '@angular/cdk/coercion';
2
- import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class RepeatDirective {
5
- get repeatCount() {
6
- return this._repeatCount;
7
- }
8
- set repeatCount(value) {
9
- this._repeatCount = coerceNumberProperty(value);
10
- this._render();
11
- }
12
- constructor(_mainTemplateRef, _viewContainerRef) {
13
- this._mainTemplateRef = _mainTemplateRef;
14
- this._viewContainerRef = _viewContainerRef;
15
- this._repeatCount = 2;
16
- }
17
- _render() {
18
- this._viewContainerRef.clear();
19
- for (let i = 0; i < this.repeatCount; i++) {
20
- this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);
21
- }
22
- }
23
- }
24
- RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", 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.2.7", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: RepeatDirective, decorators: [{
27
- type: Directive,
28
- args: [{
29
- selector: '[etRepeat]',
30
- standalone: true,
31
- }]
32
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { repeatCount: [{
33
- type: Input,
34
- args: ['etRepeat']
35
- }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0L3JlcGVhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1oRixNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWtCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHRCxZQUFvQixnQkFBc0MsRUFBVSxpQkFBbUM7UUFBbkYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFGL0YsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFFaUYsQ0FBQztJQUVuRyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7OzRHQW5CVSxlQUFlO2dHQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2lJQUdLLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldFJlcGVhdF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBlYXREaXJlY3RpdmUge1xuICBASW5wdXQoJ2V0UmVwZWF0JylcbiAgZ2V0IHJlcGVhdENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGVhdENvdW50O1xuICB9XG4gIHNldCByZXBlYXRDb3VudCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl9yZXBlYXRDb3VudCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIF9yZXBlYXRDb3VudCA9IDI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbWFpblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlcGVhdENvdW50OyBpKyspIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX21haW5UZW1wbGF0ZVJlZik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,31 +0,0 @@
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.2.7", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
- ScrollObserverFirstElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", 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.2.7", 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==
@@ -1,18 +0,0 @@
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.2.7", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
- ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: ScrollObserverIgnoreTargetDirective, isStandalone: true, selector: "[etScrollObserverIgnoreTarget]", host: { classAttribute: "et-scroll-observer-ignore-target" }, ngImport: i0 });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", 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
@@ -1,34 +0,0 @@
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.2.7", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
- ScrollObserverLastElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", 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.2.7", 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=
@@ -1,166 +0,0 @@
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.2.7", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
158
- SeoDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: SeoDirective, isStandalone: true, providers: [{ provide: SEO_DIRECTIVE_TOKEN, useExisting: SeoDirective }], ngImport: i0 });
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", 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==
@@ -1,15 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { normalizeGameResultType } from './normalize-game-result-type.util';
3
- import * as i0 from "@angular/core";
4
- export class NormalizeGameResultTypePipe {
5
- constructor() {
6
- this.transform = normalizeGameResultType;
7
- }
8
- }
9
- NormalizeGameResultTypePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeGameResultTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- NormalizeGameResultTypePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NormalizeGameResultTypePipe, isStandalone: true, name: "etNormalizeGameResultType" });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeGameResultTypePipe, decorators: [{
12
- type: Pipe,
13
- args: [{ name: 'etNormalizeGameResultType', standalone: true }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWdhbWUtcmVzdWx0LXR5cGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGVzL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlL25vcm1hbGl6ZS1nYW1lLXJlc3VsdC10eXBlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBRzVFLE1BQU0sT0FBTywyQkFBMkI7SUFEeEM7UUFFRSxjQUFTLEdBQUcsdUJBQXVCLENBQUM7S0FDckM7O3dIQUZZLDJCQUEyQjtzSEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZUdhbWVSZXN1bHRUeXBlIH0gZnJvbSAnLi9ub3JtYWxpemUtZ2FtZS1yZXN1bHQtdHlwZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVHYW1lUmVzdWx0VHlwZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVHYW1lUmVzdWx0VHlwZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gbm9ybWFsaXplR2FtZVJlc3VsdFR5cGU7XG59XG4iXX0=
@@ -1,15 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { normalizeMatchParticipants } from './normalize-match-participants.util';
3
- import * as i0 from "@angular/core";
4
- export class NormalizeMatchParticipantsPipe {
5
- constructor() {
6
- this.transform = normalizeMatchParticipants;
7
- }
8
- }
9
- NormalizeMatchParticipantsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchParticipantsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- NormalizeMatchParticipantsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchParticipantsPipe, isStandalone: true, name: "etNormalizeMatchParticipants" });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchParticipantsPipe, decorators: [{
12
- type: Pipe,
13
- args: [{ name: 'etNormalizeMatchParticipants', standalone: true }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvbm9ybWFsaXplLW1hdGNoLXBhcnRpY2lwYW50cy9ub3JtYWxpemUtbWF0Y2gtcGFydGljaXBhbnRzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBR2pGLE1BQU0sT0FBTyw4QkFBOEI7SUFEM0M7UUFFRSxjQUFTLEdBQUcsMEJBQTBCLENBQUM7S0FDeEM7OzJIQUZZLDhCQUE4Qjt5SEFBOUIsOEJBQThCOzJGQUE5Qiw4QkFBOEI7a0JBRDFDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzIH0gZnJvbSAnLi9ub3JtYWxpemUtbWF0Y2gtcGFydGljaXBhbnRzLnV0aWwnO1xuXG5AUGlwZSh7IG5hbWU6ICdldE5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoUGFydGljaXBhbnRzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0gPSBub3JtYWxpemVNYXRjaFBhcnRpY2lwYW50cztcbn1cbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { normalizeMatchScore } from './normalize-match-score.util';
3
- import * as i0 from "@angular/core";
4
- export class NormalizeMatchScorePipe {
5
- constructor() {
6
- this.transform = normalizeMatchScore;
7
- }
8
- }
9
- NormalizeMatchScorePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchScorePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- NormalizeMatchScorePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchScorePipe, isStandalone: true, name: "etNormalizeMatchScore" });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchScorePipe, decorators: [{
12
- type: Pipe,
13
- args: [{ name: 'etNormalizeMatchScore', standalone: true }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXNjb3JlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc2NvcmUvbm9ybWFsaXplLW1hdGNoLXNjb3JlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR25FLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFRSxjQUFTLEdBQUcsbUJBQW1CLENBQUM7S0FDakM7O29IQUZZLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoU2NvcmUgfSBmcm9tICcuL25vcm1hbGl6ZS1tYXRjaC1zY29yZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVNYXRjaFNjb3JlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoU2NvcmVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSA9IG5vcm1hbGl6ZU1hdGNoU2NvcmU7XG59XG4iXX0=
@@ -1,15 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { normalizeMatchState } from './normalize-match-state.util';
3
- import * as i0 from "@angular/core";
4
- export class NormalizeMatchStatePipe {
5
- constructor() {
6
- this.transform = normalizeMatchState;
7
- }
8
- }
9
- NormalizeMatchStatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- NormalizeMatchStatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchStatePipe, isStandalone: true, name: "etNormalizeMatchState" });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NormalizeMatchStatePipe, decorators: [{
12
- type: Pipe,
13
- args: [{ name: 'etNormalizeMatchState', standalone: true }]
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW1hdGNoLXN0YXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9waXBlcy9ub3JtYWxpemUtbWF0Y2gtc3RhdGUvbm9ybWFsaXplLW1hdGNoLXN0YXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR25FLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFRSxjQUFTLEdBQUcsbUJBQW1CLENBQUM7S0FDakM7O29IQUZZLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZU1hdGNoU3RhdGUgfSBmcm9tICcuL25vcm1hbGl6ZS1tYXRjaC1zdGF0ZS51dGlsJztcblxuQFBpcGUoeyBuYW1lOiAnZXROb3JtYWxpemVNYXRjaFN0YXRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZU1hdGNoU3RhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSA9IG5vcm1hbGl6ZU1hdGNoU3RhdGU7XG59XG4iXX0=