@ethlete/core 0.2.0-next.9 → 1.1.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.
- package/esm2020/lib/components/public-api.mjs +2 -0
- package/esm2020/lib/components/structured-data/public-api.mjs +2 -0
- package/esm2020/lib/components/structured-data/structured-data.component.mjs +37 -0
- package/esm2020/lib/directives/animatable/animatable.directive.mjs +113 -0
- package/esm2020/lib/directives/animatable/public-api.mjs +2 -0
- package/esm2020/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +115 -0
- package/esm2020/lib/directives/animated-lifecycle/public-api.mjs +2 -0
- package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +3 -3
- package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +5 -5
- package/esm2020/lib/directives/let/let.directive.mjs +8 -8
- package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +7 -7
- package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +7 -7
- package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +11 -10
- package/esm2020/lib/directives/public-api.mjs +3 -2
- package/esm2020/lib/directives/repeat/repeat.directive.mjs +10 -11
- package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +3 -3
- package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
- package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +3 -3
- package/esm2020/lib/directives/seo/seo.directive.mjs +3 -3
- package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +3 -3
- package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +3 -3
- package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +3 -3
- package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +3 -3
- package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +3 -3
- package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +3 -3
- package/esm2020/lib/public-api.mjs +3 -1
- package/esm2020/lib/services/click-observer.service.mjs +6 -6
- package/esm2020/lib/services/content-observer.service.mjs +6 -6
- package/esm2020/lib/services/destroy.service.mjs +3 -3
- package/esm2020/lib/services/focus-visible.service.mjs +7 -7
- package/esm2020/lib/services/public-api.mjs +2 -1
- package/esm2020/lib/services/resize-observer.service.mjs +6 -6
- package/esm2020/lib/services/router-state.service.mjs +115 -0
- package/esm2020/lib/services/viewport.service.mjs +16 -16
- package/esm2020/lib/types/angular.types.mjs +36 -2
- package/esm2020/lib/utils/animation.utils.mjs +18 -0
- package/esm2020/lib/utils/clone.util.mjs +78 -0
- package/esm2020/lib/utils/cookie.util.mjs +48 -0
- package/esm2020/lib/utils/equal.util.mjs +118 -0
- package/esm2020/lib/utils/media-query-observable.util.mjs +18 -0
- package/esm2020/lib/utils/public-api.mjs +8 -2
- package/esm2020/lib/utils/reactive-binding.util.mjs +111 -0
- package/esm2020/lib/validators/is-array-not-empty.validator.mjs +9 -0
- package/esm2020/lib/validators/is-email.validator.mjs +10 -0
- package/esm2020/lib/validators/must-match.validator.mjs +19 -0
- package/esm2020/lib/validators/public-api.mjs +12 -0
- package/fesm2015/ethlete-core.mjs +963 -153
- package/fesm2015/ethlete-core.mjs.map +1 -1
- package/fesm2020/ethlete-core.mjs +961 -153
- package/fesm2020/ethlete-core.mjs.map +1 -1
- package/lib/components/public-api.d.ts +1 -0
- package/lib/components/structured-data/public-api.d.ts +1 -0
- package/lib/components/structured-data/structured-data.component.d.ts +11 -0
- package/lib/directives/animatable/animatable.directive.d.ts +22 -0
- package/lib/directives/animatable/public-api.d.ts +1 -0
- package/lib/directives/animated-lifecycle/animated-lifecycle.directive.d.ts +22 -0
- package/lib/directives/animated-lifecycle/public-api.d.ts +1 -0
- package/lib/directives/observe-content/observe-content.directive.d.ts +2 -2
- package/lib/directives/observe-resize/observe-resize.directive.d.ts +2 -2
- package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +2 -2
- package/lib/directives/observe-scroll-state/observe-scroll-state.types.d.ts +1 -1
- package/lib/directives/public-api.d.ts +2 -1
- package/lib/directives/repeat/repeat.directive.d.ts +2 -3
- package/lib/directives/seo/seo.directive.types.d.ts +1 -1
- package/lib/pipes/normalize-match-participants/normalize-match-participants.types.d.ts +2 -2
- package/lib/public-api.d.ts +2 -0
- package/lib/services/public-api.d.ts +1 -0
- package/lib/services/router-state.service.d.ts +40 -0
- package/lib/services/viewport.types.d.ts +1 -1
- package/lib/types/angular.types.d.ts +14 -1
- package/lib/types/viewport.types.d.ts +2 -2
- package/lib/utils/animation.utils.d.ts +4 -0
- package/lib/utils/clone.util.d.ts +15 -0
- package/lib/utils/cookie.util.d.ts +5 -0
- package/lib/utils/equal.util.d.ts +27 -0
- package/lib/utils/media-query-observable.util.d.ts +5 -0
- package/lib/utils/public-api.d.ts +7 -1
- package/lib/utils/reactive-binding.util.d.ts +19 -0
- package/lib/validators/is-array-not-empty.validator.d.ts +3 -0
- package/lib/validators/is-email.validator.d.ts +3 -0
- package/lib/validators/must-match.validator.d.ts +3 -0
- package/lib/validators/public-api.d.ts +8 -0
- package/package.json +8 -6
- package/esm2020/lib/directives/destroy/destroy.directive.mjs +0 -22
- package/esm2020/lib/directives/destroy/public-api.mjs +0 -2
- package/lib/directives/destroy/destroy.directive.d.ts +0 -9
- package/lib/directives/destroy/public-api.d.ts +0 -1
|
@@ -1,12 +1,47 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Injectable,
|
|
2
|
+
import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, Injectable, ElementRef, Inject, Optional, isDevMode, Directive, EventEmitter, Output, NgZone, Pipe, QueryList } from '@angular/core';
|
|
3
|
+
import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
|
|
4
|
+
import { fromEvent, Observable, Subject, startWith, map, takeUntil, distinctUntilChanged, BehaviorSubject, filter, combineLatest, pairwise, debounceTime, shareReplay, tap, merge, skip, switchMap, take } from 'rxjs';
|
|
3
5
|
import { coerceElement, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
|
|
4
|
-
import { fromEvent, Observable, Subject, BehaviorSubject, combineLatest, map, shareReplay, startWith, debounceTime, tap, takeUntil, take } from 'rxjs';
|
|
5
6
|
import { DOCUMENT } from '@angular/common';
|
|
7
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
6
8
|
import { __decorate, __metadata } from 'tslib';
|
|
7
9
|
import * as i1 from '@angular/cdk/layout';
|
|
8
10
|
import { debounceTime as debounceTime$1 } from 'rxjs/operators';
|
|
9
|
-
|
|
11
|
+
|
|
12
|
+
class StructuredDataComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this._sanitizer = inject(DomSanitizer);
|
|
15
|
+
}
|
|
16
|
+
set data(currentValue) {
|
|
17
|
+
this.jsonLD = this.getSafeHTML(currentValue);
|
|
18
|
+
}
|
|
19
|
+
getSafeHTML(value) {
|
|
20
|
+
const json = value ? JSON.stringify(value, null, 2).replace(/<\/script>/g, '<\\/script>') : '';
|
|
21
|
+
const html = `<script type="application/ld+json">${json}</script>`;
|
|
22
|
+
return this._sanitizer.bypassSecurityTrustHtml(html);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
StructuredDataComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: StructuredDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
StructuredDataComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: StructuredDataComponent, isStandalone: true, selector: "et-structured-data", inputs: { data: "data" }, host: { properties: { "innerHTML": "this.jsonLD" }, styleAttribute: "display: none" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: StructuredDataComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'et-structured-data',
|
|
31
|
+
standalone: true,
|
|
32
|
+
template: '',
|
|
33
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
34
|
+
encapsulation: ViewEncapsulation.None,
|
|
35
|
+
host: {
|
|
36
|
+
style: 'display: none',
|
|
37
|
+
},
|
|
38
|
+
}]
|
|
39
|
+
}], propDecorators: { data: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], jsonLD: [{
|
|
42
|
+
type: HostBinding,
|
|
43
|
+
args: ['innerHTML']
|
|
44
|
+
}] } });
|
|
10
45
|
|
|
11
46
|
const VIEWPORT_CONFIG = new InjectionToken('ViewportConfig');
|
|
12
47
|
/**
|
|
@@ -55,9 +90,9 @@ class ClickObserverFactory {
|
|
|
55
90
|
return fromEvent(document, 'click');
|
|
56
91
|
}
|
|
57
92
|
}
|
|
58
|
-
ClickObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
59
|
-
ClickObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
93
|
+
ClickObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
94
|
+
ClickObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverFactory, providedIn: 'root' });
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverFactory, decorators: [{
|
|
61
96
|
type: Injectable,
|
|
62
97
|
args: [{ providedIn: 'root' }]
|
|
63
98
|
}] });
|
|
@@ -111,9 +146,9 @@ class ClickObserverService {
|
|
|
111
146
|
}
|
|
112
147
|
}
|
|
113
148
|
}
|
|
114
|
-
ClickObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
115
|
-
ClickObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
149
|
+
ClickObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverService, deps: [{ token: ClickObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
150
|
+
ClickObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverService, providedIn: 'root' });
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickObserverService, decorators: [{
|
|
117
152
|
type: Injectable,
|
|
118
153
|
args: [{ providedIn: 'root' }]
|
|
119
154
|
}], ctorParameters: function () { return [{ type: ClickObserverFactory }]; } });
|
|
@@ -124,9 +159,9 @@ class MutationObserverFactory {
|
|
|
124
159
|
return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);
|
|
125
160
|
}
|
|
126
161
|
}
|
|
127
|
-
MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
128
|
-
MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
129
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
162
|
+
MutationObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: MutationObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
163
|
+
MutationObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: MutationObserverFactory, providedIn: 'root' });
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: MutationObserverFactory, decorators: [{
|
|
130
165
|
type: Injectable,
|
|
131
166
|
args: [{ providedIn: 'root' }]
|
|
132
167
|
}] });
|
|
@@ -186,9 +221,9 @@ class ContentObserverService {
|
|
|
186
221
|
}
|
|
187
222
|
}
|
|
188
223
|
}
|
|
189
|
-
ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
190
|
-
ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
224
|
+
ContentObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentObserverService, deps: [{ token: MutationObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
225
|
+
ContentObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentObserverService, providedIn: 'root' });
|
|
226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentObserverService, decorators: [{
|
|
192
227
|
type: Injectable,
|
|
193
228
|
args: [{ providedIn: 'root' }]
|
|
194
229
|
}], ctorParameters: function () { return [{ type: MutationObserverFactory }]; } });
|
|
@@ -203,13 +238,16 @@ class DestroyService {
|
|
|
203
238
|
this._destroy$.unsubscribe();
|
|
204
239
|
}
|
|
205
240
|
}
|
|
206
|
-
DestroyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
207
|
-
DestroyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
241
|
+
DestroyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: DestroyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
242
|
+
DestroyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: DestroyService });
|
|
243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: DestroyService, decorators: [{
|
|
209
244
|
type: Injectable
|
|
210
245
|
}] });
|
|
211
246
|
|
|
212
247
|
class FocusVisibleService {
|
|
248
|
+
get isFocusVisible() {
|
|
249
|
+
return this._hadKeyboardEvent;
|
|
250
|
+
}
|
|
213
251
|
constructor() {
|
|
214
252
|
this._document = inject(DOCUMENT);
|
|
215
253
|
this._hadKeyboardEvent = false;
|
|
@@ -218,9 +256,6 @@ class FocusVisibleService {
|
|
|
218
256
|
this._document.addEventListener('pointerdown', this.onPointerDown.bind(this), true);
|
|
219
257
|
this._document.addEventListener('touchstart', this.onPointerDown.bind(this), true);
|
|
220
258
|
}
|
|
221
|
-
get isFocusVisible() {
|
|
222
|
-
return this._hadKeyboardEvent;
|
|
223
|
-
}
|
|
224
259
|
onKeyDown(e) {
|
|
225
260
|
if (e.metaKey || e.altKey || e.ctrlKey) {
|
|
226
261
|
return;
|
|
@@ -231,9 +266,9 @@ class FocusVisibleService {
|
|
|
231
266
|
this._hadKeyboardEvent = false;
|
|
232
267
|
}
|
|
233
268
|
}
|
|
234
|
-
FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
235
|
-
FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
236
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
269
|
+
FocusVisibleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: FocusVisibleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
270
|
+
FocusVisibleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: FocusVisibleService, providedIn: 'root' });
|
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: FocusVisibleService, decorators: [{
|
|
237
272
|
type: Injectable,
|
|
238
273
|
args: [{
|
|
239
274
|
providedIn: 'root',
|
|
@@ -246,9 +281,9 @@ class ResizeObserverFactory {
|
|
|
246
281
|
return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);
|
|
247
282
|
}
|
|
248
283
|
}
|
|
249
|
-
ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
250
|
-
ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
251
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
284
|
+
ResizeObserverFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
285
|
+
ResizeObserverFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverFactory, providedIn: 'root' });
|
|
286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverFactory, decorators: [{
|
|
252
287
|
type: Injectable,
|
|
253
288
|
args: [{ providedIn: 'root' }]
|
|
254
289
|
}] });
|
|
@@ -304,26 +339,523 @@ class ResizeObserverService {
|
|
|
304
339
|
}
|
|
305
340
|
}
|
|
306
341
|
}
|
|
307
|
-
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
308
|
-
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
342
|
+
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverService, deps: [{ token: ResizeObserverFactory }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
343
|
+
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ResizeObserverService, decorators: [{
|
|
310
345
|
type: Injectable,
|
|
311
346
|
args: [{ providedIn: 'root' }]
|
|
312
347
|
}], ctorParameters: function () { return [{ type: ResizeObserverFactory }]; } });
|
|
313
348
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
349
|
+
const nextFrame = (cb) => {
|
|
350
|
+
requestAnimationFrame(() => {
|
|
351
|
+
requestAnimationFrame(cb);
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
const fromNextFrame = () => {
|
|
355
|
+
return new Observable((observer) => {
|
|
356
|
+
nextFrame(() => {
|
|
357
|
+
observer.next();
|
|
358
|
+
observer.complete();
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
const forceReflow = (element = document.body) => {
|
|
363
|
+
return element.offsetHeight;
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
const clamp = (value, min = 0, max = 100) => {
|
|
367
|
+
return Math.max(min, Math.min(max, value));
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
371
|
+
/* eslint-disable no-var */
|
|
372
|
+
/**
|
|
373
|
+
* Stolen from klona to avoid adding a dependency
|
|
374
|
+
* https://github.com/lukeed/klona
|
|
375
|
+
*
|
|
376
|
+
* MIT License
|
|
377
|
+
*
|
|
378
|
+
* Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
|
|
379
|
+
*
|
|
380
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
381
|
+
*
|
|
382
|
+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
383
|
+
*
|
|
384
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
385
|
+
*/
|
|
386
|
+
const set = (obj, key, val) => {
|
|
387
|
+
if (typeof val.value === 'object')
|
|
388
|
+
val.value = clone(val.value);
|
|
389
|
+
if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {
|
|
390
|
+
Object.defineProperty(obj, key, val);
|
|
391
|
+
}
|
|
392
|
+
else
|
|
393
|
+
obj[key] = val.value;
|
|
394
|
+
};
|
|
395
|
+
const clone = (original) => {
|
|
396
|
+
if (typeof original !== 'object')
|
|
397
|
+
return original;
|
|
398
|
+
var _og = original;
|
|
399
|
+
var i = 0, k, list, tmp, str = Object.prototype.toString.call(_og);
|
|
400
|
+
if (str === '[object Object]') {
|
|
401
|
+
tmp = Object.create(_og.__proto__ || null);
|
|
402
|
+
}
|
|
403
|
+
else if (str === '[object Array]') {
|
|
404
|
+
tmp = Array(_og.length);
|
|
405
|
+
}
|
|
406
|
+
else if (str === '[object Set]') {
|
|
407
|
+
tmp = new Set();
|
|
408
|
+
_og.forEach(function (val) {
|
|
409
|
+
tmp.add(clone(val));
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
else if (str === '[object Map]') {
|
|
413
|
+
tmp = new Map();
|
|
414
|
+
_og.forEach(function (val, key) {
|
|
415
|
+
tmp.set(clone(key), clone(val));
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
else if (str === '[object Date]') {
|
|
419
|
+
tmp = new Date(+_og);
|
|
420
|
+
}
|
|
421
|
+
else if (str === '[object RegExp]') {
|
|
422
|
+
tmp = new RegExp(_og.source, _og.flags);
|
|
423
|
+
}
|
|
424
|
+
else if (str === '[object DataView]') {
|
|
425
|
+
tmp = new _og.constructor(clone(_og.buffer));
|
|
426
|
+
}
|
|
427
|
+
else if (str === '[object ArrayBuffer]') {
|
|
428
|
+
tmp = _og.slice(0);
|
|
429
|
+
}
|
|
430
|
+
else if (str.slice(-6) === 'Array]') {
|
|
431
|
+
// ArrayBuffer.isView(x)
|
|
432
|
+
// ~> `new` bcuz `Buffer.slice` => ref
|
|
433
|
+
tmp = new _og.constructor(_og);
|
|
434
|
+
}
|
|
435
|
+
if (tmp) {
|
|
436
|
+
for (list = Object.getOwnPropertySymbols(_og); i < list.length; i++) {
|
|
437
|
+
set(tmp, list[i], Object.getOwnPropertyDescriptor(_og, list[i]));
|
|
438
|
+
}
|
|
439
|
+
for (i = 0, list = Object.getOwnPropertyNames(_og); i < list.length; i++) {
|
|
440
|
+
if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === _og[k])
|
|
441
|
+
continue;
|
|
442
|
+
set(tmp, k, Object.getOwnPropertyDescriptor(_og, k));
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
return tmp || _og;
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
const hasCookie = (name) => {
|
|
449
|
+
if (typeof document === 'undefined') {
|
|
450
|
+
return false;
|
|
451
|
+
}
|
|
452
|
+
return document.cookie.split(';').some((c) => {
|
|
453
|
+
return c.trim().startsWith(name + '=');
|
|
454
|
+
});
|
|
455
|
+
};
|
|
456
|
+
const getCookie = (name) => {
|
|
457
|
+
if (typeof document === 'undefined') {
|
|
458
|
+
return null;
|
|
459
|
+
}
|
|
460
|
+
// From https://stackoverflow.com/questions/10730362/get-cookie-by-name
|
|
461
|
+
return ('; ' + document.cookie).split(`; ${name}=`).pop()?.split(';')[0];
|
|
462
|
+
};
|
|
463
|
+
const setCookie = (name, data, expiresInDays = 30, domain = getDomain()) => {
|
|
464
|
+
if (typeof document === 'undefined') {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
const date = new Date();
|
|
468
|
+
date.setTime(date.getTime() + expiresInDays * 24 * 60 * 60 * 1000);
|
|
469
|
+
document.cookie = `${name}=${data}; path=/; expires=${date.toUTCString()}; domain=${domain}; SameSite=Lax;`;
|
|
470
|
+
};
|
|
471
|
+
const deleteCookie = (name, path, domain = getDomain()) => {
|
|
472
|
+
if (hasCookie(name)) {
|
|
473
|
+
document.cookie =
|
|
474
|
+
name +
|
|
475
|
+
'=' +
|
|
476
|
+
(path ? ';path=' + path : '') +
|
|
477
|
+
(domain ? ';domain=' + domain : '') +
|
|
478
|
+
';expires=Thu, 01 Jan 1970 00:00:01 GMT';
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
const getDomain = () => {
|
|
482
|
+
if (typeof navigator === 'undefined') {
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
485
|
+
const hostname = window.location.hostname;
|
|
486
|
+
if (hostname.includes('localhost')) {
|
|
487
|
+
return 'localhost';
|
|
488
|
+
}
|
|
489
|
+
const splitHost = hostname.split('.');
|
|
490
|
+
if (splitHost.length > 2) {
|
|
491
|
+
return `${splitHost[splitHost.length - 2]}.${splitHost[splitHost.length - 1]}`;
|
|
492
|
+
}
|
|
493
|
+
return hostname;
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
497
|
+
/* eslint-disable no-var */
|
|
498
|
+
/**
|
|
499
|
+
* Stolen from dequal to avoid adding a dependency
|
|
500
|
+
* https://github.com/lukeed/dequal
|
|
501
|
+
*
|
|
502
|
+
* The MIT License (MIT)
|
|
503
|
+
*
|
|
504
|
+
* Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
|
|
505
|
+
*
|
|
506
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
507
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
508
|
+
* in the Software without restriction, including without limitation the rights
|
|
509
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
510
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
511
|
+
* furnished to do so, subject to the following conditions:
|
|
512
|
+
*
|
|
513
|
+
* The above copyright notice and this permission notice shall be included in
|
|
514
|
+
* all copies or substantial portions of the Software.
|
|
515
|
+
*
|
|
516
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
517
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
518
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
519
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
520
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
521
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
522
|
+
* THE SOFTWARE.
|
|
523
|
+
*/
|
|
524
|
+
const has = Object.prototype.hasOwnProperty;
|
|
525
|
+
function find(iter, tar, key) {
|
|
526
|
+
for (key of iter.keys()) {
|
|
527
|
+
if (equal(key, tar))
|
|
528
|
+
return key;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const equal = (foo, bar) => {
|
|
532
|
+
var ctor, len, tmp;
|
|
533
|
+
if (foo === bar)
|
|
534
|
+
return true;
|
|
535
|
+
if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
|
|
536
|
+
if (ctor === Date)
|
|
537
|
+
return foo.getTime() === bar.getTime();
|
|
538
|
+
if (ctor === RegExp)
|
|
539
|
+
return foo.toString() === bar.toString();
|
|
540
|
+
if (ctor === Array) {
|
|
541
|
+
if ((len = foo.length) === bar.length) {
|
|
542
|
+
while (len-- && equal(foo[len], bar[len]))
|
|
543
|
+
;
|
|
544
|
+
}
|
|
545
|
+
return len === -1;
|
|
546
|
+
}
|
|
547
|
+
if (ctor === Set) {
|
|
548
|
+
if (foo.size !== bar.size) {
|
|
549
|
+
return false;
|
|
550
|
+
}
|
|
551
|
+
for (len of foo) {
|
|
552
|
+
tmp = len;
|
|
553
|
+
if (tmp && typeof tmp === 'object') {
|
|
554
|
+
tmp = find(bar, tmp);
|
|
555
|
+
if (!tmp)
|
|
556
|
+
return false;
|
|
557
|
+
}
|
|
558
|
+
if (!bar.has(tmp))
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
return true;
|
|
562
|
+
}
|
|
563
|
+
if (ctor === Map) {
|
|
564
|
+
if (foo.size !== bar.size) {
|
|
565
|
+
return false;
|
|
566
|
+
}
|
|
567
|
+
for (len of foo) {
|
|
568
|
+
tmp = len[0];
|
|
569
|
+
if (tmp && typeof tmp === 'object') {
|
|
570
|
+
tmp = find(bar, tmp);
|
|
571
|
+
if (!tmp)
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
if (!equal(len[1], bar.get(tmp))) {
|
|
575
|
+
return false;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
return true;
|
|
579
|
+
}
|
|
580
|
+
if (ctor === ArrayBuffer) {
|
|
581
|
+
foo = new Uint8Array(foo);
|
|
582
|
+
bar = new Uint8Array(bar);
|
|
583
|
+
}
|
|
584
|
+
else if (ctor === DataView) {
|
|
585
|
+
if ((len = foo.byteLength) === bar.byteLength) {
|
|
586
|
+
while (len-- && foo.getInt8(len) === bar.getInt8(len))
|
|
587
|
+
;
|
|
588
|
+
}
|
|
589
|
+
return len === -1;
|
|
590
|
+
}
|
|
591
|
+
if (ArrayBuffer.isView(foo)) {
|
|
592
|
+
if ((len = foo.byteLength) === bar.byteLength) {
|
|
593
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
594
|
+
//@ts-ignore
|
|
595
|
+
while (len-- && foo[len] === bar[len])
|
|
596
|
+
;
|
|
597
|
+
}
|
|
598
|
+
return len === -1;
|
|
599
|
+
}
|
|
600
|
+
if (!ctor || typeof foo === 'object') {
|
|
601
|
+
len = 0;
|
|
602
|
+
for (ctor in foo) {
|
|
603
|
+
if (has.call(foo, ctor) && ++len && !has.call(bar, ctor))
|
|
604
|
+
return false;
|
|
605
|
+
if (!(ctor in bar) || !equal(foo[ctor], bar[ctor]))
|
|
606
|
+
return false;
|
|
607
|
+
}
|
|
608
|
+
return Object.keys(bar).length === len;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
return foo !== foo && bar !== bar;
|
|
612
|
+
};
|
|
613
|
+
|
|
614
|
+
const createMediaQueryObservable = (query) => {
|
|
615
|
+
const mq = window.matchMedia(query);
|
|
616
|
+
const observable = new Observable((observer) => {
|
|
617
|
+
const eventHandler = (event) => {
|
|
618
|
+
observer.next(event);
|
|
619
|
+
};
|
|
620
|
+
mq.addEventListener('change', eventHandler);
|
|
621
|
+
return () => {
|
|
622
|
+
mq.removeEventListener('change', eventHandler);
|
|
623
|
+
};
|
|
624
|
+
}).pipe(startWith(mq), map(({ matches }) => ({
|
|
625
|
+
matches,
|
|
626
|
+
query,
|
|
627
|
+
})));
|
|
628
|
+
return observable;
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
const isAttributeRenderBinding = (value) => typeof value === 'boolean';
|
|
632
|
+
const isAttributeValueBinding = (value) => typeof value === 'object';
|
|
633
|
+
const createReactiveBindings = (...values) => {
|
|
634
|
+
const rootElementRef = inject(ElementRef);
|
|
635
|
+
const destroy$ = inject(DestroyService, { host: true }).destroy$;
|
|
636
|
+
const subscriptions = [];
|
|
637
|
+
const pushedAttributes = [];
|
|
638
|
+
const defaults = {};
|
|
639
|
+
const push = (value) => {
|
|
640
|
+
const { attribute, observable, elementRef } = value;
|
|
641
|
+
const elRef = elementRef || rootElementRef;
|
|
642
|
+
const attributes = Array.isArray(attribute) ? attribute : [attribute];
|
|
643
|
+
pushedAttributes.push(attributes);
|
|
644
|
+
for (const attribute of attributes) {
|
|
645
|
+
if (!defaults[attribute]) {
|
|
646
|
+
defaults[attribute] = elRef.nativeElement.getAttribute(attribute) || undefined;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
const subscription = observable
|
|
650
|
+
.pipe(takeUntil(destroy$), distinctUntilChanged((a, b) => {
|
|
651
|
+
if (isAttributeRenderBinding(a) && isAttributeRenderBinding(b)) {
|
|
652
|
+
return a === b;
|
|
653
|
+
}
|
|
654
|
+
else if (isAttributeValueBinding(a) && isAttributeValueBinding(b)) {
|
|
655
|
+
return a.render === b.render && a.value === b.value;
|
|
656
|
+
}
|
|
657
|
+
return false;
|
|
658
|
+
}))
|
|
659
|
+
.subscribe((value) => {
|
|
660
|
+
const currentAttributes = pushedAttributes.find((s) => s.some((current) => attributes.includes(current))) || [];
|
|
661
|
+
for (const attribute of currentAttributes) {
|
|
662
|
+
const isSingleClassMutation = attribute.startsWith('class.');
|
|
663
|
+
const isMultipleClassMutation = attribute === 'class';
|
|
664
|
+
const render = isAttributeRenderBinding(value) ? value : value.render;
|
|
665
|
+
if (isSingleClassMutation) {
|
|
666
|
+
const className = attribute.replace('class.', '');
|
|
667
|
+
if (!className) {
|
|
668
|
+
continue;
|
|
669
|
+
}
|
|
670
|
+
if (!render) {
|
|
671
|
+
elRef.nativeElement.classList.remove(className);
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
elRef.nativeElement.classList.add(className);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
else if (isMultipleClassMutation) {
|
|
678
|
+
const classes = isAttributeRenderBinding(value) ? '' : `${value.value}`;
|
|
679
|
+
if (!classes) {
|
|
680
|
+
continue;
|
|
681
|
+
}
|
|
682
|
+
if (!render) {
|
|
683
|
+
elRef.nativeElement.classList.remove(...classes.split(' '));
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
elRef.nativeElement.classList.add(...classes.split(' '));
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
const attributeValue = isAttributeRenderBinding(value) ? true : `${value.value}`;
|
|
691
|
+
if (!attribute) {
|
|
692
|
+
continue;
|
|
693
|
+
}
|
|
694
|
+
if (!render) {
|
|
695
|
+
elRef.nativeElement.removeAttribute(attribute);
|
|
696
|
+
}
|
|
697
|
+
else {
|
|
698
|
+
elRef.nativeElement.setAttribute(attribute, `${attributeValue}`);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
});
|
|
703
|
+
subscriptions.push({ attributes, subscription });
|
|
704
|
+
};
|
|
705
|
+
const remove = (...attributes) => {
|
|
706
|
+
for (const attribute of attributes) {
|
|
707
|
+
const sub = subscriptions.find((s) => s.attributes.includes(attribute));
|
|
708
|
+
const attributeStack = pushedAttributes.find((a) => a.includes(attribute));
|
|
709
|
+
if (sub) {
|
|
710
|
+
sub.attributes = sub.attributes.filter((a) => a !== attribute);
|
|
711
|
+
attributeStack?.splice(attributeStack.indexOf(attribute), 1);
|
|
712
|
+
if (sub.attributes.length === 0) {
|
|
713
|
+
sub.subscription.unsubscribe();
|
|
714
|
+
subscriptions.splice(subscriptions.indexOf(sub), 1);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
const reset = () => {
|
|
720
|
+
for (const attribute in defaults) {
|
|
721
|
+
if (defaults[attribute] === undefined) {
|
|
722
|
+
rootElementRef.nativeElement.removeAttribute(attribute);
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
rootElementRef.nativeElement.setAttribute(attribute, defaults[attribute]);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
};
|
|
729
|
+
for (const value of values) {
|
|
730
|
+
push(value);
|
|
731
|
+
}
|
|
732
|
+
return {
|
|
733
|
+
push,
|
|
734
|
+
remove,
|
|
735
|
+
reset,
|
|
736
|
+
};
|
|
737
|
+
};
|
|
738
|
+
|
|
739
|
+
const elementCanScroll = (element) => {
|
|
740
|
+
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
741
|
+
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
742
|
+
};
|
|
743
|
+
|
|
744
|
+
const provideViewportConfig = (viewportConfig) => {
|
|
745
|
+
return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
const routerDisableScrollTop = (config = {}) => {
|
|
749
|
+
if (!config.asReturnRoute) {
|
|
750
|
+
return {
|
|
751
|
+
disableScrollTop: true,
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
return {
|
|
755
|
+
disableScrollTopAsReturnRoute: true,
|
|
756
|
+
};
|
|
757
|
+
};
|
|
758
|
+
class RouterStateService {
|
|
759
|
+
get route$() {
|
|
760
|
+
return this._route$.asObservable();
|
|
761
|
+
}
|
|
762
|
+
get state$() {
|
|
763
|
+
return this._state$.asObservable();
|
|
764
|
+
}
|
|
765
|
+
constructor() {
|
|
766
|
+
this._isScrollTopOnNavigationEnabled = false;
|
|
767
|
+
this._router = inject(Router);
|
|
768
|
+
this._route$ = new BehaviorSubject('/');
|
|
769
|
+
this._state$ = new BehaviorSubject({
|
|
770
|
+
title: null,
|
|
771
|
+
fragment: null,
|
|
772
|
+
data: {},
|
|
773
|
+
pathParams: {},
|
|
774
|
+
queryParams: {},
|
|
775
|
+
});
|
|
776
|
+
this._router.events
|
|
777
|
+
.pipe(filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => {
|
|
778
|
+
const { url } = event;
|
|
779
|
+
const urlWithoutQueryParams = url.split('?')[0];
|
|
780
|
+
const withoutFragment = urlWithoutQueryParams.split('#')[0];
|
|
781
|
+
return withoutFragment;
|
|
782
|
+
}))
|
|
783
|
+
.subscribe(this._route$);
|
|
784
|
+
this._route$
|
|
785
|
+
.pipe(map(() => {
|
|
786
|
+
let route = this._router.routerState.snapshot.root;
|
|
787
|
+
while (route.firstChild) {
|
|
788
|
+
route = route.firstChild;
|
|
789
|
+
}
|
|
790
|
+
const { data, params, queryParams, title, fragment } = route;
|
|
791
|
+
return {
|
|
792
|
+
data,
|
|
793
|
+
pathParams: params,
|
|
794
|
+
queryParams,
|
|
795
|
+
title: title ?? null,
|
|
796
|
+
fragment,
|
|
797
|
+
};
|
|
798
|
+
}))
|
|
799
|
+
.subscribe(this._state$);
|
|
800
|
+
}
|
|
801
|
+
enableScrollEnhancements(config = {}) {
|
|
802
|
+
if (this._isScrollTopOnNavigationEnabled) {
|
|
803
|
+
return;
|
|
804
|
+
}
|
|
805
|
+
this._isScrollTopOnNavigationEnabled = true;
|
|
806
|
+
combineLatest([this._state$.pipe(pairwise()), this._route$.pipe(pairwise())])
|
|
807
|
+
.pipe(debounceTime(1))
|
|
808
|
+
.subscribe(([[prevState, currState], [prevRoute, currRoute]]) => {
|
|
809
|
+
const sameUrlNavigation = prevRoute === currRoute && equal(prevState.pathParams, currState.pathParams);
|
|
810
|
+
const didFragmentChange = prevState.fragment !== currState.fragment;
|
|
811
|
+
if (sameUrlNavigation) {
|
|
812
|
+
const allQueryParams = [
|
|
813
|
+
...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),
|
|
814
|
+
];
|
|
815
|
+
const changedQueryParams = allQueryParams.filter((key) => currState.queryParams[key] !== prevState.queryParams[key]);
|
|
816
|
+
if (!config.queryParamTriggerList?.length && !didFragmentChange) {
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
const caseQueryParams = changedQueryParams.some((key) => config.queryParamTriggerList?.includes(key));
|
|
820
|
+
const caseFragment = didFragmentChange && config.fragment?.enabled;
|
|
821
|
+
if (caseQueryParams) {
|
|
822
|
+
(config.scrollElement ?? document.documentElement).scrollTop = 0;
|
|
823
|
+
}
|
|
824
|
+
else if (caseFragment) {
|
|
825
|
+
const fragmentElement = document.getElementById(currState.fragment ?? '');
|
|
826
|
+
if (fragmentElement) {
|
|
827
|
+
fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
else {
|
|
832
|
+
if (!(currState.data['disableScrollTopAsReturnRoute'] && prevState.data['disableScrollTop']) &&
|
|
833
|
+
!currState.data['disableScrollTop']) {
|
|
834
|
+
(config.scrollElement ?? document.documentElement).scrollTop = 0;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
});
|
|
326
838
|
}
|
|
839
|
+
selectQueryParam(key) {
|
|
840
|
+
return this._state$.pipe(map((state) => state.queryParams[key]));
|
|
841
|
+
}
|
|
842
|
+
selectPathParam(key) {
|
|
843
|
+
return this._state$.pipe(map((state) => state.pathParams[key]));
|
|
844
|
+
}
|
|
845
|
+
selectData(key) {
|
|
846
|
+
return this._state$.pipe(map((state) => state.data[key]));
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
RouterStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
850
|
+
RouterStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, providedIn: 'root' });
|
|
851
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RouterStateService, decorators: [{
|
|
852
|
+
type: Injectable,
|
|
853
|
+
args: [{
|
|
854
|
+
providedIn: 'root',
|
|
855
|
+
}]
|
|
856
|
+
}], ctorParameters: function () { return []; } });
|
|
857
|
+
|
|
858
|
+
class ViewportService {
|
|
327
859
|
get isXs$() {
|
|
328
860
|
return this._isXs$.asObservable();
|
|
329
861
|
}
|
|
@@ -363,6 +895,18 @@ class ViewportService {
|
|
|
363
895
|
get currentViewport() {
|
|
364
896
|
return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);
|
|
365
897
|
}
|
|
898
|
+
constructor(_viewportConfig, _breakpointObserver) {
|
|
899
|
+
this._breakpointObserver = _breakpointObserver;
|
|
900
|
+
this._isXs$ = new BehaviorSubject(false);
|
|
901
|
+
this._isSm$ = new BehaviorSubject(false);
|
|
902
|
+
this._isMd$ = new BehaviorSubject(false);
|
|
903
|
+
this._isLg$ = new BehaviorSubject(false);
|
|
904
|
+
this._isXl$ = new BehaviorSubject(false);
|
|
905
|
+
this._is2Xl$ = new BehaviorSubject(false);
|
|
906
|
+
this.currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(map((val) => this.getCurrentViewport(val)), shareReplay());
|
|
907
|
+
this._viewportConfig = _viewportConfig || DEFAULT_VIEWPORT_CONFIG;
|
|
908
|
+
this._observeDefaultBreakpoints();
|
|
909
|
+
}
|
|
366
910
|
observe(options) {
|
|
367
911
|
const mediaQuery = this._buildMediaQuery(options);
|
|
368
912
|
return this._breakpointObserver.observe(mediaQuery).pipe(map((x) => x.matches), shareReplay());
|
|
@@ -441,8 +985,8 @@ class ViewportService {
|
|
|
441
985
|
return 'xs';
|
|
442
986
|
}
|
|
443
987
|
}
|
|
444
|
-
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
445
|
-
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
988
|
+
ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ViewportService, deps: [{ token: VIEWPORT_CONFIG, optional: true }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
989
|
+
ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ViewportService, providedIn: 'root' });
|
|
446
990
|
__decorate([
|
|
447
991
|
Memo(),
|
|
448
992
|
__metadata("design:type", Function),
|
|
@@ -459,7 +1003,7 @@ __decorate([
|
|
|
459
1003
|
__metadata("design:paramtypes", [Object]),
|
|
460
1004
|
__metadata("design:returntype", void 0)
|
|
461
1005
|
], ViewportService.prototype, "_buildMediaQuery", null);
|
|
462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1006
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ViewportService, decorators: [{
|
|
463
1007
|
type: Injectable,
|
|
464
1008
|
args: [{
|
|
465
1009
|
providedIn: 'root',
|
|
@@ -471,6 +1015,223 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
471
1015
|
type: Optional
|
|
472
1016
|
}] }, { type: i1.BreakpointObserver }]; }, propDecorators: { _getViewportSize: [], _buildMediaQuery: [] } });
|
|
473
1017
|
|
|
1018
|
+
const ANIMATABLE_TOKEN = new InjectionToken('ANIMATABLE_DIRECTIVE_TOKEN');
|
|
1019
|
+
class AnimatableDirective {
|
|
1020
|
+
constructor() {
|
|
1021
|
+
this._didEmitStart = false;
|
|
1022
|
+
this._parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });
|
|
1023
|
+
this._destroy$ = inject(DestroyService, { host: true }).destroy$;
|
|
1024
|
+
this._elementRef = inject(ElementRef);
|
|
1025
|
+
this._animationStart$ = new Subject();
|
|
1026
|
+
this._animationEnd$ = new Subject();
|
|
1027
|
+
this._animatedElement$ = new BehaviorSubject(this._elementRef.nativeElement);
|
|
1028
|
+
this.animationStart$ = this._animationStart$.asObservable().pipe(debounceTime(0));
|
|
1029
|
+
this.animationEnd$ = this._animationEnd$.asObservable().pipe(debounceTime(0));
|
|
1030
|
+
this._hostActiveAnimationCount$ = new BehaviorSubject(0);
|
|
1031
|
+
this._totalActiveAnimationCount$ = new BehaviorSubject(0);
|
|
1032
|
+
this.isAnimating$ = this._totalActiveAnimationCount$.pipe(map((count) => count > 0), debounceTime(0));
|
|
1033
|
+
}
|
|
1034
|
+
set animatedElement(value) {
|
|
1035
|
+
let newElement = null;
|
|
1036
|
+
if (value === null || value === undefined) {
|
|
1037
|
+
newElement = this._elementRef.nativeElement;
|
|
1038
|
+
}
|
|
1039
|
+
else if (typeof value === 'string') {
|
|
1040
|
+
const el = document.querySelector(value);
|
|
1041
|
+
if (el) {
|
|
1042
|
+
newElement = el;
|
|
1043
|
+
}
|
|
1044
|
+
else {
|
|
1045
|
+
if (isDevMode()) {
|
|
1046
|
+
console.warn(`Element with selector ${value} not found. Animatable directive will use host element.`);
|
|
1047
|
+
}
|
|
1048
|
+
newElement = this._elementRef.nativeElement;
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
else {
|
|
1052
|
+
newElement = value;
|
|
1053
|
+
}
|
|
1054
|
+
if (this._animatedElement$.value !== newElement) {
|
|
1055
|
+
this._animatedElement$.next(newElement);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
ngOnInit() {
|
|
1059
|
+
this._animatedElement$
|
|
1060
|
+
.pipe(tap((el) => {
|
|
1061
|
+
this._totalActiveAnimationCount$.next(this._totalActiveAnimationCount$.value - this._hostActiveAnimationCount$.value);
|
|
1062
|
+
this._hostActiveAnimationCount$.next(0);
|
|
1063
|
+
merge(fromEvent(el, 'animationstart'), fromEvent(el, 'transitionstart'))
|
|
1064
|
+
.pipe(tap(() => {
|
|
1065
|
+
const count = this._hostActiveAnimationCount$.value + 1;
|
|
1066
|
+
this._hostActiveAnimationCount$.next(count);
|
|
1067
|
+
this._totalActiveAnimationCount$.next(count);
|
|
1068
|
+
}), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
|
|
1069
|
+
.subscribe();
|
|
1070
|
+
merge(fromEvent(el, 'animationend'), fromEvent(el, 'animationcancel'), fromEvent(el, 'transitionend'), fromEvent(el, 'transitioncancel'))
|
|
1071
|
+
.pipe(tap(() => {
|
|
1072
|
+
const count = this._hostActiveAnimationCount$.value - 1;
|
|
1073
|
+
this._hostActiveAnimationCount$.next(count);
|
|
1074
|
+
this._totalActiveAnimationCount$.next(count);
|
|
1075
|
+
}), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
|
|
1076
|
+
.subscribe();
|
|
1077
|
+
}), takeUntil(this._destroy$))
|
|
1078
|
+
.subscribe();
|
|
1079
|
+
this._totalActiveAnimationCount$
|
|
1080
|
+
.pipe(tap((count) => {
|
|
1081
|
+
if (count > 0 && !this._didEmitStart) {
|
|
1082
|
+
this._animationStart$.next();
|
|
1083
|
+
this._didEmitStart = true;
|
|
1084
|
+
}
|
|
1085
|
+
else if (count === 0) {
|
|
1086
|
+
this._animationEnd$.next();
|
|
1087
|
+
this._didEmitStart = false;
|
|
1088
|
+
}
|
|
1089
|
+
}), takeUntil(this._destroy$))
|
|
1090
|
+
.subscribe();
|
|
1091
|
+
if (this._parent) {
|
|
1092
|
+
this._parent._hostActiveAnimationCount$
|
|
1093
|
+
.pipe(takeUntil(this._destroy$), tap((count) => {
|
|
1094
|
+
this._totalActiveAnimationCount$.next(count + this._hostActiveAnimationCount$.value);
|
|
1095
|
+
}))
|
|
1096
|
+
.subscribe();
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
AnimatableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: AnimatableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1101
|
+
AnimatableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: AnimatableDirective, isStandalone: true, selector: "[etAnimatable]", inputs: { animatedElement: ["etAnimatable", "animatedElement"] }, providers: [
|
|
1102
|
+
{
|
|
1103
|
+
provide: ANIMATABLE_TOKEN,
|
|
1104
|
+
useExisting: AnimatableDirective,
|
|
1105
|
+
},
|
|
1106
|
+
DestroyService,
|
|
1107
|
+
], exportAs: ["etAnimatable"], ngImport: i0 });
|
|
1108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: AnimatableDirective, decorators: [{
|
|
1109
|
+
type: Directive,
|
|
1110
|
+
args: [{
|
|
1111
|
+
selector: '[etAnimatable]',
|
|
1112
|
+
exportAs: 'etAnimatable',
|
|
1113
|
+
standalone: true,
|
|
1114
|
+
providers: [
|
|
1115
|
+
{
|
|
1116
|
+
provide: ANIMATABLE_TOKEN,
|
|
1117
|
+
useExisting: AnimatableDirective,
|
|
1118
|
+
},
|
|
1119
|
+
DestroyService,
|
|
1120
|
+
],
|
|
1121
|
+
}]
|
|
1122
|
+
}], propDecorators: { animatedElement: [{
|
|
1123
|
+
type: Input,
|
|
1124
|
+
args: ['etAnimatable']
|
|
1125
|
+
}] } });
|
|
1126
|
+
|
|
1127
|
+
const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken('ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN');
|
|
1128
|
+
const ANIMATION_CLASSES = {
|
|
1129
|
+
enterFrom: 'et-animation-enter-from',
|
|
1130
|
+
enterActive: 'et-animation-enter-active',
|
|
1131
|
+
enterTo: 'et-animation-enter-to',
|
|
1132
|
+
leaveFrom: 'et-animation-leave-from',
|
|
1133
|
+
leaveActive: 'et-animation-leave-active',
|
|
1134
|
+
leaveTo: 'et-animation-leave-to',
|
|
1135
|
+
};
|
|
1136
|
+
class AnimatedLifecycleDirective {
|
|
1137
|
+
constructor() {
|
|
1138
|
+
this._destroy$ = inject(DestroyService, { host: true }).destroy$;
|
|
1139
|
+
this._elementRef = inject(ElementRef);
|
|
1140
|
+
this._animatable = inject(ANIMATABLE_TOKEN);
|
|
1141
|
+
this._classList = this._elementRef.nativeElement.classList;
|
|
1142
|
+
this._state$ = new BehaviorSubject('init');
|
|
1143
|
+
this.state$ = this._state$.asObservable();
|
|
1144
|
+
this._bindings = createReactiveBindings({
|
|
1145
|
+
attribute: 'class.et-force-invisible',
|
|
1146
|
+
observable: this._state$.pipe(map((state) => state === 'init')),
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
get state() {
|
|
1150
|
+
return this._state$.value;
|
|
1151
|
+
}
|
|
1152
|
+
enter(config) {
|
|
1153
|
+
if (this.state !== 'init' && this.state !== 'left' && isDevMode()) {
|
|
1154
|
+
console.warn('Tried to enter but the element is not in the initial state. This may result in unexpected behavior.', this);
|
|
1155
|
+
}
|
|
1156
|
+
this._state$.next('entering');
|
|
1157
|
+
if (!config?.onlyTransition) {
|
|
1158
|
+
this._classList.add(ANIMATION_CLASSES.enterFrom);
|
|
1159
|
+
}
|
|
1160
|
+
forceReflow();
|
|
1161
|
+
this._classList.add(ANIMATION_CLASSES.enterActive);
|
|
1162
|
+
fromNextFrame()
|
|
1163
|
+
.pipe(tap(() => {
|
|
1164
|
+
if (!config?.onlyTransition) {
|
|
1165
|
+
this._classList.remove(ANIMATION_CLASSES.enterFrom);
|
|
1166
|
+
this._classList.add(ANIMATION_CLASSES.enterTo);
|
|
1167
|
+
}
|
|
1168
|
+
}), switchMap(() => this._animatable.animationEnd$), tap(() => {
|
|
1169
|
+
this._state$.next('entered');
|
|
1170
|
+
this._classList.remove(ANIMATION_CLASSES.enterActive);
|
|
1171
|
+
if (!config?.onlyTransition) {
|
|
1172
|
+
this._classList.remove(ANIMATION_CLASSES.enterTo);
|
|
1173
|
+
}
|
|
1174
|
+
}), takeUntil(this._destroy$), take(1))
|
|
1175
|
+
.subscribe();
|
|
1176
|
+
}
|
|
1177
|
+
leave(config) {
|
|
1178
|
+
if (this.state !== 'entered' && this.state !== 'entering' && isDevMode()) {
|
|
1179
|
+
console.warn('Tried to leave while already leaving or left. This may result in unexpected behavior.', this);
|
|
1180
|
+
}
|
|
1181
|
+
if (this._classList.contains(ANIMATION_CLASSES.enterFrom) ||
|
|
1182
|
+
this._classList.contains(ANIMATION_CLASSES.enterActive) ||
|
|
1183
|
+
this._classList.contains(ANIMATION_CLASSES.enterTo)) {
|
|
1184
|
+
this._classList.remove(ANIMATION_CLASSES.enterFrom);
|
|
1185
|
+
this._classList.remove(ANIMATION_CLASSES.enterActive);
|
|
1186
|
+
this._classList.remove(ANIMATION_CLASSES.enterTo);
|
|
1187
|
+
}
|
|
1188
|
+
this._state$.next('leaving');
|
|
1189
|
+
if (!config?.onlyTransition) {
|
|
1190
|
+
this._classList.add(ANIMATION_CLASSES.leaveFrom);
|
|
1191
|
+
}
|
|
1192
|
+
forceReflow();
|
|
1193
|
+
this._classList.add(ANIMATION_CLASSES.leaveActive);
|
|
1194
|
+
fromNextFrame()
|
|
1195
|
+
.pipe(tap(() => {
|
|
1196
|
+
if (!config?.onlyTransition) {
|
|
1197
|
+
this._classList.remove(ANIMATION_CLASSES.leaveFrom);
|
|
1198
|
+
this._classList.add(ANIMATION_CLASSES.leaveTo);
|
|
1199
|
+
}
|
|
1200
|
+
}), switchMap(() => this._animatable.animationEnd$), tap(() => {
|
|
1201
|
+
this._state$.next('left');
|
|
1202
|
+
this._classList.remove(ANIMATION_CLASSES.leaveActive);
|
|
1203
|
+
if (!config?.onlyTransition) {
|
|
1204
|
+
this._classList.remove(ANIMATION_CLASSES.leaveTo);
|
|
1205
|
+
}
|
|
1206
|
+
}), takeUntil(this._destroy$), take(1))
|
|
1207
|
+
.subscribe();
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
AnimatedLifecycleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: AnimatedLifecycleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1211
|
+
AnimatedLifecycleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: AnimatedLifecycleDirective, isStandalone: true, selector: "[etAnimatedLifecycle]", providers: [
|
|
1212
|
+
{
|
|
1213
|
+
provide: ANIMATED_LIFECYCLE_TOKEN,
|
|
1214
|
+
useExisting: AnimatedLifecycleDirective,
|
|
1215
|
+
},
|
|
1216
|
+
DestroyService,
|
|
1217
|
+
], exportAs: ["etAnimatedLifecycle"], hostDirectives: [{ directive: AnimatableDirective }], ngImport: i0 });
|
|
1218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: AnimatedLifecycleDirective, decorators: [{
|
|
1219
|
+
type: Directive,
|
|
1220
|
+
args: [{
|
|
1221
|
+
selector: '[etAnimatedLifecycle]',
|
|
1222
|
+
exportAs: 'etAnimatedLifecycle',
|
|
1223
|
+
standalone: true,
|
|
1224
|
+
providers: [
|
|
1225
|
+
{
|
|
1226
|
+
provide: ANIMATED_LIFECYCLE_TOKEN,
|
|
1227
|
+
useExisting: AnimatedLifecycleDirective,
|
|
1228
|
+
},
|
|
1229
|
+
DestroyService,
|
|
1230
|
+
],
|
|
1231
|
+
hostDirectives: [AnimatableDirective],
|
|
1232
|
+
}]
|
|
1233
|
+
}] });
|
|
1234
|
+
|
|
474
1235
|
class ClickOutsideDirective {
|
|
475
1236
|
constructor() {
|
|
476
1237
|
this._elementRef = inject(ElementRef);
|
|
@@ -493,9 +1254,9 @@ class ClickOutsideDirective {
|
|
|
493
1254
|
this._subscription?.unsubscribe();
|
|
494
1255
|
}
|
|
495
1256
|
}
|
|
496
|
-
ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
497
|
-
ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
498
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1257
|
+
ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1258
|
+
ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ClickOutsideDirective, isStandalone: true, selector: "[etClickOutside]", outputs: { etClickOutside: "etClickOutside" }, ngImport: i0 });
|
|
1259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ClickOutsideDirective, decorators: [{
|
|
499
1260
|
type: Directive,
|
|
500
1261
|
args: [{
|
|
501
1262
|
selector: '[etClickOutside]',
|
|
@@ -505,26 +1266,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
505
1266
|
type: Output
|
|
506
1267
|
}] } });
|
|
507
1268
|
|
|
508
|
-
const provideViewportConfig = (viewportConfig) => {
|
|
509
|
-
return { provide: VIEWPORT_CONFIG, useValue: viewportConfig };
|
|
510
|
-
};
|
|
511
|
-
|
|
512
|
-
const clamp = (value, min = 0, max = 100) => {
|
|
513
|
-
return Math.max(min, Math.min(max, value));
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
const elementCanScroll = (element) => {
|
|
517
|
-
const { scrollHeight, clientHeight, scrollWidth, clientWidth } = element;
|
|
518
|
-
return scrollHeight > clientHeight || scrollWidth > clientWidth;
|
|
519
|
-
};
|
|
520
|
-
|
|
521
1269
|
const CURSOR_DRAG_SCROLLING_CLASS = 'et-cursor-drag-scroll--scrolling';
|
|
522
1270
|
const CURSOR_DRAG_SCROLLING_PREPARED_CLASS = 'et-cursor-drag-scroll--prepared';
|
|
523
1271
|
|
|
524
1272
|
class CursorDragScrollDirective {
|
|
525
1273
|
constructor() {
|
|
526
1274
|
this._subscriptions = [];
|
|
527
|
-
this._destroy$ = inject(DestroyService).destroy$;
|
|
1275
|
+
this._destroy$ = inject(DestroyService, { host: true }).destroy$;
|
|
528
1276
|
this._elementRef = inject(ElementRef);
|
|
529
1277
|
this._contentObserverService = inject(ContentObserverService);
|
|
530
1278
|
this._resizeObserverService = inject(ResizeObserverService);
|
|
@@ -646,9 +1394,9 @@ class CursorDragScrollDirective {
|
|
|
646
1394
|
}
|
|
647
1395
|
}
|
|
648
1396
|
}
|
|
649
|
-
CursorDragScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
650
|
-
CursorDragScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
651
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1397
|
+
CursorDragScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1398
|
+
CursorDragScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: CursorDragScrollDirective, isStandalone: true, selector: "[etCursorDragScroll]", inputs: { enabled: ["etCursorDragScroll", "enabled"] }, providers: [DestroyService], exportAs: ["etCursorDragScroll"], ngImport: i0 });
|
|
1399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: CursorDragScrollDirective, decorators: [{
|
|
652
1400
|
type: Directive,
|
|
653
1401
|
args: [{
|
|
654
1402
|
selector: '[etCursorDragScroll]',
|
|
@@ -661,25 +1409,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
661
1409
|
args: ['etCursorDragScroll']
|
|
662
1410
|
}] } });
|
|
663
1411
|
|
|
664
|
-
class DestroyDirective {
|
|
665
|
-
constructor() {
|
|
666
|
-
this._destroy$ = new Subject();
|
|
667
|
-
this.destroy$ = this._destroy$.asObservable();
|
|
668
|
-
}
|
|
669
|
-
ngOnDestroy() {
|
|
670
|
-
this._destroy$.next(true);
|
|
671
|
-
this._destroy$.unsubscribe();
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
DestroyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DestroyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
675
|
-
DestroyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: DestroyDirective, isStandalone: true, ngImport: i0 });
|
|
676
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DestroyDirective, decorators: [{
|
|
677
|
-
type: Directive,
|
|
678
|
-
args: [{
|
|
679
|
-
standalone: true,
|
|
680
|
-
}]
|
|
681
|
-
}] });
|
|
682
|
-
|
|
683
1412
|
class LetContext {
|
|
684
1413
|
constructor() {
|
|
685
1414
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -690,6 +1419,10 @@ class LetContext {
|
|
|
690
1419
|
}
|
|
691
1420
|
|
|
692
1421
|
class LetDirective {
|
|
1422
|
+
set etLet(value) {
|
|
1423
|
+
this._context.$implicit = this._context.etLet = value;
|
|
1424
|
+
this._updateView();
|
|
1425
|
+
}
|
|
693
1426
|
constructor(_viewContainer, templateRef) {
|
|
694
1427
|
this._viewContainer = _viewContainer;
|
|
695
1428
|
this._context = new LetContext();
|
|
@@ -697,10 +1430,6 @@ class LetDirective {
|
|
|
697
1430
|
this._viewRef = null;
|
|
698
1431
|
this._templateRef = templateRef;
|
|
699
1432
|
}
|
|
700
|
-
set etLet(value) {
|
|
701
|
-
this._context.$implicit = this._context.etLet = value;
|
|
702
|
-
this._updateView();
|
|
703
|
-
}
|
|
704
1433
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
705
1434
|
static ngTemplateContextGuard(dir, ctx) {
|
|
706
1435
|
return true;
|
|
@@ -714,9 +1443,9 @@ class LetDirective {
|
|
|
714
1443
|
}
|
|
715
1444
|
}
|
|
716
1445
|
}
|
|
717
|
-
LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
718
|
-
LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1446
|
+
LetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: LetDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1447
|
+
LetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 });
|
|
1448
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: LetDirective, decorators: [{
|
|
720
1449
|
type: Directive,
|
|
721
1450
|
args: [{
|
|
722
1451
|
selector: '[etLet]',
|
|
@@ -731,7 +1460,7 @@ class ObserveContentDirective {
|
|
|
731
1460
|
this._contentObserver = inject(ContentObserverService);
|
|
732
1461
|
this._elementRef = inject(ElementRef);
|
|
733
1462
|
this._ngZone = inject(NgZone);
|
|
734
|
-
this.
|
|
1463
|
+
this.valueChange = new EventEmitter();
|
|
735
1464
|
this._disabled = false;
|
|
736
1465
|
this._debounce = null;
|
|
737
1466
|
this._currentSubscription = null;
|
|
@@ -762,23 +1491,23 @@ class ObserveContentDirective {
|
|
|
762
1491
|
this._unsubscribe();
|
|
763
1492
|
const stream = this._contentObserver.observe(this._elementRef);
|
|
764
1493
|
this._ngZone.runOutsideAngular(() => {
|
|
765
|
-
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime$1(this.debounce)) : stream).subscribe(this.
|
|
1494
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime$1(this.debounce)) : stream).subscribe(this.valueChange);
|
|
766
1495
|
});
|
|
767
1496
|
}
|
|
768
1497
|
_unsubscribe() {
|
|
769
1498
|
this._currentSubscription?.unsubscribe();
|
|
770
1499
|
}
|
|
771
1500
|
}
|
|
772
|
-
ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
773
|
-
ObserveContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
774
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1501
|
+
ObserveContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1502
|
+
ObserveContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ObserveContentDirective, isStandalone: true, selector: "[etObserveContent]", inputs: { disabled: ["etObserveContentDisabled", "disabled"], debounce: ["etObserveContentDebounce", "debounce"] }, outputs: { valueChange: "etObserveContent" }, exportAs: ["etObserveContent"], ngImport: i0 });
|
|
1503
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveContentDirective, decorators: [{
|
|
775
1504
|
type: Directive,
|
|
776
1505
|
args: [{
|
|
777
1506
|
selector: '[etObserveContent]',
|
|
778
1507
|
exportAs: 'etObserveContent',
|
|
779
1508
|
standalone: true,
|
|
780
1509
|
}]
|
|
781
|
-
}], propDecorators: {
|
|
1510
|
+
}], propDecorators: { valueChange: [{
|
|
782
1511
|
type: Output,
|
|
783
1512
|
args: ['etObserveContent']
|
|
784
1513
|
}], disabled: [{
|
|
@@ -794,7 +1523,7 @@ class ObserveResizeDirective {
|
|
|
794
1523
|
this._resizeObserver = inject(ResizeObserverService);
|
|
795
1524
|
this._elementRef = inject(ElementRef);
|
|
796
1525
|
this._ngZone = inject(NgZone);
|
|
797
|
-
this.
|
|
1526
|
+
this.valueChange = new EventEmitter();
|
|
798
1527
|
this._disabled = false;
|
|
799
1528
|
this._debounce = null;
|
|
800
1529
|
this._currentSubscription = null;
|
|
@@ -825,23 +1554,23 @@ class ObserveResizeDirective {
|
|
|
825
1554
|
this._unsubscribe();
|
|
826
1555
|
const stream = this._resizeObserver.observe(this._elementRef);
|
|
827
1556
|
this._ngZone.runOutsideAngular(() => {
|
|
828
|
-
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.
|
|
1557
|
+
this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.valueChange);
|
|
829
1558
|
});
|
|
830
1559
|
}
|
|
831
1560
|
_unsubscribe() {
|
|
832
1561
|
this._currentSubscription?.unsubscribe();
|
|
833
1562
|
}
|
|
834
1563
|
}
|
|
835
|
-
ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
836
|
-
ObserveResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
837
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1564
|
+
ObserveResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1565
|
+
ObserveResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ObserveResizeDirective, isStandalone: true, selector: "[etObserveResize]", inputs: { disabled: ["etObserveResizeDisabled", "disabled"], debounce: ["etObserveResizeDebounce", "debounce"] }, outputs: { valueChange: "etObserveResize" }, exportAs: ["etObserveResize"], ngImport: i0 });
|
|
1566
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveResizeDirective, decorators: [{
|
|
838
1567
|
type: Directive,
|
|
839
1568
|
args: [{
|
|
840
1569
|
selector: '[etObserveResize]',
|
|
841
1570
|
exportAs: 'etObserveResize',
|
|
842
1571
|
standalone: true,
|
|
843
1572
|
}]
|
|
844
|
-
}], propDecorators: {
|
|
1573
|
+
}], propDecorators: { valueChange: [{
|
|
845
1574
|
type: Output,
|
|
846
1575
|
args: ['etObserveResize']
|
|
847
1576
|
}], disabled: [{
|
|
@@ -864,9 +1593,9 @@ class ScrollObserverFirstElementDirective {
|
|
|
864
1593
|
this._isFirstElement = coerceBooleanProperty(value);
|
|
865
1594
|
}
|
|
866
1595
|
}
|
|
867
|
-
ScrollObserverFirstElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
868
|
-
ScrollObserverFirstElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
869
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1596
|
+
ScrollObserverFirstElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverFirstElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1597
|
+
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 });
|
|
1598
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverFirstElementDirective, decorators: [{
|
|
870
1599
|
type: Directive,
|
|
871
1600
|
args: [{
|
|
872
1601
|
selector: '[etScrollObserverFirstElement]',
|
|
@@ -883,9 +1612,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
883
1612
|
const SCROLL_OBSERVER_IGNORE_TARGET_CLASS = 'et-scroll-observer-ignore-target';
|
|
884
1613
|
class ScrollObserverIgnoreTargetDirective {
|
|
885
1614
|
}
|
|
886
|
-
ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
887
|
-
ScrollObserverIgnoreTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1615
|
+
ScrollObserverIgnoreTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1616
|
+
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 });
|
|
1617
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverIgnoreTargetDirective, decorators: [{
|
|
889
1618
|
type: Directive,
|
|
890
1619
|
args: [{
|
|
891
1620
|
selector: '[etScrollObserverIgnoreTarget]',
|
|
@@ -908,9 +1637,9 @@ class ScrollObserverLastElementDirective {
|
|
|
908
1637
|
this._isLastElement = coerceBooleanProperty(value);
|
|
909
1638
|
}
|
|
910
1639
|
}
|
|
911
|
-
ScrollObserverLastElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
912
|
-
ScrollObserverLastElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
913
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1640
|
+
ScrollObserverLastElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverLastElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1641
|
+
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 });
|
|
1642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ScrollObserverLastElementDirective, decorators: [{
|
|
914
1643
|
type: Directive,
|
|
915
1644
|
args: [{
|
|
916
1645
|
selector: '[etScrollObserverLastElement]',
|
|
@@ -931,7 +1660,7 @@ const OBSERVE_SCROLL_STATE = new InjectionToken('OBSERVE_SCROLL_STATE');
|
|
|
931
1660
|
|
|
932
1661
|
class ObserveScrollStateDirective {
|
|
933
1662
|
constructor() {
|
|
934
|
-
this._destroy$ = inject(DestroyService).destroy$;
|
|
1663
|
+
this._destroy$ = inject(DestroyService, { host: true }).destroy$;
|
|
935
1664
|
this._elementRef = inject(ElementRef);
|
|
936
1665
|
this._contentObserverService = inject(ContentObserverService);
|
|
937
1666
|
this._resizeObserverService = inject(ResizeObserverService);
|
|
@@ -942,7 +1671,7 @@ class ObserveScrollStateDirective {
|
|
|
942
1671
|
this._rootMargin = 0;
|
|
943
1672
|
this._threshold = 1;
|
|
944
1673
|
this._intersectionObserver = null;
|
|
945
|
-
this.
|
|
1674
|
+
this.valueChange = new EventEmitter();
|
|
946
1675
|
}
|
|
947
1676
|
get _firstCurrentChild() {
|
|
948
1677
|
const explicitFirstElement = this._elementRef.nativeElement.querySelector(`.${SCROLL_OBSERVER_FIRST_ELEMENT_CLASS}`);
|
|
@@ -999,7 +1728,7 @@ class ObserveScrollStateDirective {
|
|
|
999
1728
|
!elementCanScroll(this._elementRef.nativeElement)) {
|
|
1000
1729
|
this._unobserveChild('first');
|
|
1001
1730
|
this._unobserveChild('last');
|
|
1002
|
-
this.
|
|
1731
|
+
this.valueChange.emit({
|
|
1003
1732
|
isAtStart: true,
|
|
1004
1733
|
isAtEnd: true,
|
|
1005
1734
|
canScroll: false,
|
|
@@ -1016,7 +1745,7 @@ class ObserveScrollStateDirective {
|
|
|
1016
1745
|
const { first, last } = this._observedChildren;
|
|
1017
1746
|
const isAtStart = entries.find((entry) => entry.target === first)?.isIntersecting ?? false;
|
|
1018
1747
|
const isAtEnd = entries.find((entry) => entry.target === last)?.isIntersecting ?? false;
|
|
1019
|
-
this.
|
|
1748
|
+
this.valueChange.emit({
|
|
1020
1749
|
isAtStart,
|
|
1021
1750
|
isAtEnd,
|
|
1022
1751
|
canScroll: !isAtStart || !isAtEnd,
|
|
@@ -1060,15 +1789,15 @@ class ObserveScrollStateDirective {
|
|
|
1060
1789
|
return element;
|
|
1061
1790
|
}
|
|
1062
1791
|
}
|
|
1063
|
-
ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1064
|
-
ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
1792
|
+
ObserveScrollStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveScrollStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1793
|
+
ObserveScrollStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: ObserveScrollStateDirective, isStandalone: true, selector: "[etObserveScrollState]", inputs: { observerRootMargin: "observerRootMargin", observerThreshold: "observerThreshold" }, outputs: { valueChange: "etObserveScrollState" }, providers: [
|
|
1065
1794
|
{
|
|
1066
1795
|
provide: OBSERVE_SCROLL_STATE,
|
|
1067
1796
|
useExisting: ObserveScrollStateDirective,
|
|
1068
1797
|
},
|
|
1069
1798
|
DestroyService,
|
|
1070
1799
|
], exportAs: ["etObserveScrollState"], ngImport: i0 });
|
|
1071
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1800
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ObserveScrollStateDirective, decorators: [{
|
|
1072
1801
|
type: Directive,
|
|
1073
1802
|
args: [{
|
|
1074
1803
|
selector: '[etObserveScrollState]',
|
|
@@ -1086,34 +1815,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
|
|
|
1086
1815
|
type: Input
|
|
1087
1816
|
}], observerThreshold: [{
|
|
1088
1817
|
type: Input
|
|
1089
|
-
}],
|
|
1090
|
-
type: Output
|
|
1818
|
+
}], valueChange: [{
|
|
1819
|
+
type: Output,
|
|
1820
|
+
args: ['etObserveScrollState']
|
|
1091
1821
|
}] } });
|
|
1092
1822
|
|
|
1093
1823
|
class RepeatDirective {
|
|
1094
|
-
constructor(_mainTemplateRef, _viewContainerRef) {
|
|
1095
|
-
this._mainTemplateRef = _mainTemplateRef;
|
|
1096
|
-
this._viewContainerRef = _viewContainerRef;
|
|
1097
|
-
this._repeatCount = 2;
|
|
1098
|
-
}
|
|
1099
1824
|
get repeatCount() {
|
|
1100
1825
|
return this._repeatCount;
|
|
1101
1826
|
}
|
|
1102
1827
|
set repeatCount(value) {
|
|
1103
1828
|
this._repeatCount = coerceNumberProperty(value);
|
|
1104
|
-
}
|
|
1105
|
-
ngOnInit() {
|
|
1106
1829
|
this._render();
|
|
1107
1830
|
}
|
|
1831
|
+
constructor(_mainTemplateRef, _viewContainerRef) {
|
|
1832
|
+
this._mainTemplateRef = _mainTemplateRef;
|
|
1833
|
+
this._viewContainerRef = _viewContainerRef;
|
|
1834
|
+
this._repeatCount = 2;
|
|
1835
|
+
}
|
|
1108
1836
|
_render() {
|
|
1837
|
+
this._viewContainerRef.clear();
|
|
1109
1838
|
for (let i = 0; i < this.repeatCount; i++) {
|
|
1110
1839
|
this._viewContainerRef.createEmbeddedView(this._mainTemplateRef);
|
|
1111
1840
|
}
|
|
1112
1841
|
}
|
|
1113
1842
|
}
|
|
1114
|
-
RepeatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1115
|
-
RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
1116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
1843
|
+
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 });
|
|
1844
|
+
RepeatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.4", type: RepeatDirective, isStandalone: true, selector: "[etRepeat]", inputs: { repeatCount: ["etRepeat", "repeatCount"] }, ngImport: i0 });
|
|
1845
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: RepeatDirective, decorators: [{
|
|
1117
1846
|
type: Directive,
|
|
1118
1847
|
args: [{
|
|
1119
1848
|
selector: '[etRepeat]',
|
|
@@ -1283,9 +2012,9 @@ class SeoDirective {
|
|
|
1283
2012
|
}
|
|
1284
2013
|
}
|
|
1285
2014
|
}
|
|
1286
|
-
SeoDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1287
|
-
SeoDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
1288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2015
|
+
SeoDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SeoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2016
|
+
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 });
|
|
2017
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SeoDirective, decorators: [{
|
|
1289
2018
|
type: Directive,
|
|
1290
2019
|
args: [{
|
|
1291
2020
|
standalone: true,
|
|
@@ -1332,9 +2061,9 @@ class NormalizeGameResultTypePipe {
|
|
|
1332
2061
|
this.transform = normalizeGameResultType;
|
|
1333
2062
|
}
|
|
1334
2063
|
}
|
|
1335
|
-
NormalizeGameResultTypePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1336
|
-
NormalizeGameResultTypePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1337
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2064
|
+
NormalizeGameResultTypePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeGameResultTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2065
|
+
NormalizeGameResultTypePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: NormalizeGameResultTypePipe, isStandalone: true, name: "etNormalizeGameResultType" });
|
|
2066
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeGameResultTypePipe, decorators: [{
|
|
1338
2067
|
type: Pipe,
|
|
1339
2068
|
args: [{ name: 'etNormalizeGameResultType', standalone: true }]
|
|
1340
2069
|
}] });
|
|
@@ -1363,9 +2092,9 @@ class NormalizeMatchStatePipe {
|
|
|
1363
2092
|
this.transform = normalizeMatchState;
|
|
1364
2093
|
}
|
|
1365
2094
|
}
|
|
1366
|
-
NormalizeMatchStatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1367
|
-
NormalizeMatchStatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1368
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2095
|
+
NormalizeMatchStatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchStatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2096
|
+
NormalizeMatchStatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchStatePipe, isStandalone: true, name: "etNormalizeMatchState" });
|
|
2097
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchStatePipe, decorators: [{
|
|
1369
2098
|
type: Pipe,
|
|
1370
2099
|
args: [{ name: 'etNormalizeMatchState', standalone: true }]
|
|
1371
2100
|
}] });
|
|
@@ -1421,9 +2150,9 @@ class NormalizeMatchParticipantsPipe {
|
|
|
1421
2150
|
this.transform = normalizeMatchParticipants;
|
|
1422
2151
|
}
|
|
1423
2152
|
}
|
|
1424
|
-
NormalizeMatchParticipantsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1425
|
-
NormalizeMatchParticipantsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1426
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2153
|
+
NormalizeMatchParticipantsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchParticipantsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2154
|
+
NormalizeMatchParticipantsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchParticipantsPipe, isStandalone: true, name: "etNormalizeMatchParticipants" });
|
|
2155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchParticipantsPipe, decorators: [{
|
|
1427
2156
|
type: Pipe,
|
|
1428
2157
|
args: [{ name: 'etNormalizeMatchParticipants', standalone: true }]
|
|
1429
2158
|
}] });
|
|
@@ -1558,9 +2287,9 @@ class NormalizeMatchScorePipe {
|
|
|
1558
2287
|
this.transform = normalizeMatchScore;
|
|
1559
2288
|
}
|
|
1560
2289
|
}
|
|
1561
|
-
NormalizeMatchScorePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1562
|
-
NormalizeMatchScorePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1563
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2290
|
+
NormalizeMatchScorePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchScorePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2291
|
+
NormalizeMatchScorePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchScorePipe, isStandalone: true, name: "etNormalizeMatchScore" });
|
|
2292
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchScorePipe, decorators: [{
|
|
1564
2293
|
type: Pipe,
|
|
1565
2294
|
args: [{ name: 'etNormalizeMatchScore', standalone: true }]
|
|
1566
2295
|
}] });
|
|
@@ -1608,9 +2337,9 @@ class NormalizeMatchTypePipe {
|
|
|
1608
2337
|
this.transform = normalizeMatchType;
|
|
1609
2338
|
}
|
|
1610
2339
|
}
|
|
1611
|
-
NormalizeMatchTypePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1612
|
-
NormalizeMatchTypePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1613
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2340
|
+
NormalizeMatchTypePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2341
|
+
NormalizeMatchTypePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchTypePipe, isStandalone: true, name: "etNormalizeMatchType" });
|
|
2342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NormalizeMatchTypePipe, decorators: [{
|
|
1614
2343
|
type: Pipe,
|
|
1615
2344
|
args: [{ name: 'etNormalizeMatchType', standalone: true }]
|
|
1616
2345
|
}] });
|
|
@@ -1625,16 +2354,95 @@ class ToArrayPipe {
|
|
|
1625
2354
|
this.transform = toArray;
|
|
1626
2355
|
}
|
|
1627
2356
|
}
|
|
1628
|
-
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
1629
|
-
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.
|
|
1630
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
2357
|
+
ToArrayPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2358
|
+
ToArrayPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.1.4", ngImport: i0, type: ToArrayPipe, isStandalone: true, name: "toArray" });
|
|
2359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ToArrayPipe, decorators: [{
|
|
1631
2360
|
type: Pipe,
|
|
1632
2361
|
args: [{ name: 'toArray', standalone: true }]
|
|
1633
2362
|
}] });
|
|
1634
2363
|
|
|
2364
|
+
var _a;
|
|
2365
|
+
class TypedQueryList extends QueryList {
|
|
2366
|
+
constructor() {
|
|
2367
|
+
super(...arguments);
|
|
2368
|
+
this[_a] = () => {
|
|
2369
|
+
return super[Symbol.iterator]();
|
|
2370
|
+
};
|
|
2371
|
+
}
|
|
2372
|
+
get changes() {
|
|
2373
|
+
return super.changes;
|
|
2374
|
+
}
|
|
2375
|
+
toArray() {
|
|
2376
|
+
return super.toArray();
|
|
2377
|
+
}
|
|
2378
|
+
forEach(fn) {
|
|
2379
|
+
super.forEach(fn);
|
|
2380
|
+
}
|
|
2381
|
+
filter(fn) {
|
|
2382
|
+
return super.filter(fn);
|
|
2383
|
+
}
|
|
2384
|
+
map(fn) {
|
|
2385
|
+
return super.map(fn);
|
|
2386
|
+
}
|
|
2387
|
+
reduce(fn, initialValue) {
|
|
2388
|
+
return super.reduce(fn, initialValue);
|
|
2389
|
+
}
|
|
2390
|
+
some(fn) {
|
|
2391
|
+
return super.some(fn);
|
|
2392
|
+
}
|
|
2393
|
+
find(fn) {
|
|
2394
|
+
return super.find(fn);
|
|
2395
|
+
}
|
|
2396
|
+
}
|
|
2397
|
+
_a = Symbol.iterator;
|
|
2398
|
+
|
|
2399
|
+
const IS_ARRAY_NOT_EMPTY = 'isArrayNotEmpty';
|
|
2400
|
+
const IsArrayNotEmpty = (control) => {
|
|
2401
|
+
const value = control.value;
|
|
2402
|
+
if (!value) {
|
|
2403
|
+
return null;
|
|
2404
|
+
}
|
|
2405
|
+
return value.length > 0 ? null : { [IS_ARRAY_NOT_EMPTY]: true };
|
|
2406
|
+
};
|
|
2407
|
+
|
|
2408
|
+
const IS_EMAIL = 'isEmail';
|
|
2409
|
+
const IsEmail = (control) => {
|
|
2410
|
+
const value = control.value;
|
|
2411
|
+
if (!value) {
|
|
2412
|
+
return null;
|
|
2413
|
+
}
|
|
2414
|
+
const regex = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
|
|
2415
|
+
return regex.test(value) ? null : { [IS_EMAIL]: true };
|
|
2416
|
+
};
|
|
2417
|
+
|
|
2418
|
+
const MUST_MATCH = 'mustMatch';
|
|
2419
|
+
const MustMatch = (controlName, matchingControlName) => {
|
|
2420
|
+
return (formGroup) => {
|
|
2421
|
+
const control = formGroup.controls[controlName];
|
|
2422
|
+
const matchingControl = formGroup.controls[matchingControlName];
|
|
2423
|
+
// set error on matchingControl if validation fails
|
|
2424
|
+
if (matchingControl.errors && !matchingControl.errors[MUST_MATCH]) {
|
|
2425
|
+
return;
|
|
2426
|
+
}
|
|
2427
|
+
// set error on matchingControl if validation fails
|
|
2428
|
+
if (control.value !== matchingControl.value) {
|
|
2429
|
+
matchingControl.setErrors({ [MUST_MATCH]: true });
|
|
2430
|
+
}
|
|
2431
|
+
else {
|
|
2432
|
+
matchingControl.setErrors(null);
|
|
2433
|
+
}
|
|
2434
|
+
};
|
|
2435
|
+
};
|
|
2436
|
+
|
|
2437
|
+
const Validators = {
|
|
2438
|
+
MustMatch,
|
|
2439
|
+
IsEmail,
|
|
2440
|
+
IsArrayNotEmpty,
|
|
2441
|
+
};
|
|
2442
|
+
|
|
1635
2443
|
/**
|
|
1636
2444
|
* Generated bundle index. Do not edit.
|
|
1637
2445
|
*/
|
|
1638
2446
|
|
|
1639
|
-
export { ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG,
|
|
2447
|
+
export { ANIMATABLE_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AnimatableDirective, AnimatedLifecycleDirective, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DestroyService, FocusVisibleService, IS_ARRAY_NOT_EMPTY, IS_EMAIL, IsArrayNotEmpty, IsEmail, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SeoDirective, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, Validators, ViewportService, clamp, clone, createMediaQueryObservable, createReactiveBindings, deleteCookie, elementCanScroll, equal, forceReflow, fromNextFrame, getCookie, getDomain, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isGroupMatch, isKnockoutMatch, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, routerDisableScrollTop, setCookie, toArray, toArrayTrackByFn };
|
|
1640
2448
|
//# sourceMappingURL=ethlete-core.mjs.map
|