@ethlete/core 3.7.0 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, isDevMode, Directive, Injectable, NgZone, EventEmitter, booleanAttribute, numberAttribute, Output, Injector, ViewContainerRef, TemplateRef, signal, Pipe, QueryList } from '@angular/core';
2
+ import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, effect, isDevMode, Directive, Injectable, NgZone, EventEmitter, booleanAttribute, numberAttribute, Output, Injector, ViewContainerRef, signal, TemplateRef, computed, Pipe, QueryList } from '@angular/core';
3
3
  import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
4
4
  import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, Observable, combineLatest, timer, startWith, map, distinctUntilChanged, shareReplay, skip, take, debounceTime, merge, fromEvent, filter, takeWhile, pairwise, finalize } from 'rxjs';
5
5
  import { END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
@@ -14,6 +14,7 @@ import { autoUpdate, computePosition, offset, flip, size, shift, limitShift, arr
14
14
  import { Router, NavigationEnd } from '@angular/router';
15
15
  import { __decorate, __metadata } from 'tslib';
16
16
  import { BreakpointObserver } from '@angular/cdk/layout';
17
+ import { toObservable } from '@angular/core/rxjs-interop';
17
18
  import { debounceTime as debounceTime$1 } from 'rxjs/operators';
18
19
 
19
20
  class StructuredDataComponent {
@@ -648,7 +649,12 @@ const createMutationObservable = (config) => {
648
649
  const oldValueStyles = oldValue?.split(';').map((s) => s.trim()) ?? [];
649
650
  const newValueStyles = newValue?.split(';').map((s) => s.trim()) ?? [];
650
651
  const changedStyles = newValueStyles.filter((s) => !oldValueStyles.includes(s));
651
- if (changedStyles.some((s) => config.options?.styleIgnoreList?.includes(s.split(':')[0])))
652
+ if (changedStyles.some((s) => {
653
+ const [key] = s.split(':');
654
+ if (!key)
655
+ return false;
656
+ return config.options?.styleIgnoreList?.includes(key);
657
+ }))
652
658
  continue;
653
659
  allowedMutations.push(mutation);
654
660
  }
@@ -1237,6 +1243,77 @@ class SelectionModel {
1237
1243
  }
1238
1244
  }
1239
1245
 
1246
+ const signalClasses = (el, classMap) => {
1247
+ for (const [classString, signal] of Object.entries(classMap)) {
1248
+ const classArray = classString.split(' ');
1249
+ if (!classArray.length) {
1250
+ continue;
1251
+ }
1252
+ effect(() => {
1253
+ const value = signal();
1254
+ if (value) {
1255
+ el.classList.add(...classArray);
1256
+ }
1257
+ else {
1258
+ el.classList.remove(...classArray);
1259
+ }
1260
+ });
1261
+ }
1262
+ };
1263
+ const signalHostClasses = (classMap) => {
1264
+ const el = inject(ElementRef).nativeElement;
1265
+ signalClasses(el, classMap);
1266
+ };
1267
+ const ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected'];
1268
+ const signalAttributes = (el, attributeMap) => {
1269
+ for (const [attributeString, signal] of Object.entries(attributeMap)) {
1270
+ effect(() => {
1271
+ const attributeArray = attributeString.split(' ');
1272
+ if (!attributeArray.length) {
1273
+ return;
1274
+ }
1275
+ const value = signal();
1276
+ const valueString = `${value}`;
1277
+ for (const attr of attributeArray) {
1278
+ if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(attr)) {
1279
+ if (value) {
1280
+ el.setAttribute(attr, '');
1281
+ }
1282
+ else {
1283
+ el.removeAttribute(attr);
1284
+ }
1285
+ }
1286
+ else {
1287
+ el.setAttribute(attr, valueString);
1288
+ }
1289
+ }
1290
+ });
1291
+ }
1292
+ };
1293
+ const signalHostAttributes = (attributeMap) => {
1294
+ const el = inject(ElementRef).nativeElement;
1295
+ signalAttributes(el, attributeMap);
1296
+ };
1297
+ const signalStyle = (el, styleMap) => {
1298
+ for (const [styleString, signal] of Object.entries(styleMap)) {
1299
+ effect(() => {
1300
+ const styleArray = styleString.split(' ');
1301
+ if (!styleArray.length) {
1302
+ return;
1303
+ }
1304
+ const value = signal();
1305
+ const valueString = `${value}`;
1306
+ for (const style of styleArray) {
1307
+ el.style.setProperty(style, valueString);
1308
+ }
1309
+ });
1310
+ }
1311
+ };
1312
+ const signalHostStyle = (styleMap) => {
1313
+ const el = inject(ElementRef).nativeElement;
1314
+ signalStyle(el, styleMap);
1315
+ };
1316
+
1240
1317
  const scrollBehaviorSupported = supportsScrollBehavior();
1241
1318
  let _uniqueIdCounter = 0;
1242
1319
  const BLOCK_CLASS = 'cdk-global-scrollblock';
@@ -1355,9 +1432,11 @@ class AnimatableDirective {
1355
1432
  this._elementRef = inject(ElementRef);
1356
1433
  this._animationStart$ = new Subject();
1357
1434
  this._animationEnd$ = new Subject();
1435
+ this._animationCancelled$ = new Subject();
1358
1436
  this._animatedElement$ = new BehaviorSubject(this._elementRef.nativeElement);
1359
1437
  this.animationStart$ = this._animationStart$.asObservable().pipe(debounceTime(0));
1360
1438
  this.animationEnd$ = this._animationEnd$.asObservable().pipe(debounceTime(0));
1439
+ this.animationCancelled$ = this._animationCancelled$.asObservable().pipe(debounceTime(0));
1361
1440
  this._hostActiveAnimationCount$ = new BehaviorSubject(0);
1362
1441
  this._totalActiveAnimationCount$ = new BehaviorSubject(0);
1363
1442
  this.isAnimating$ = this._totalActiveAnimationCount$.pipe(map((count) => count > 0), debounceTime(0));
@@ -1407,6 +1486,12 @@ class AnimatableDirective {
1407
1486
  this._totalActiveAnimationCount$.next(count);
1408
1487
  }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
1409
1488
  .subscribe();
1489
+ merge(fromEvent(el, 'animationcancel'), fromEvent(el, 'transitioncancel'))
1490
+ .pipe(filter((e) => e.target === el), // skip events from children
1491
+ tap(() => {
1492
+ this._animationCancelled$.next();
1493
+ }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
1494
+ .subscribe();
1410
1495
  }), takeUntil(this._destroy$))
1411
1496
  .subscribe();
1412
1497
  this._totalActiveAnimationCount$
@@ -1486,13 +1571,17 @@ class AnimatedLifecycleDirective {
1486
1571
  this._isConstructed = true;
1487
1572
  }
1488
1573
  enter(config) {
1574
+ if (this.state === 'entering')
1575
+ return;
1489
1576
  if (this.state === 'init' && !this._isConstructed) {
1490
1577
  // Force the state to entered so that the element is not animated when it is first rendered.
1491
1578
  this._forceState('entered');
1492
1579
  return;
1493
1580
  }
1494
- if (this.state !== 'init' && this.state !== 'left' && isDevMode()) {
1495
- console.warn('Tried to enter but the element is not in the initial state. This may result in unexpected behavior.', this);
1581
+ if (this.state === 'leaving') {
1582
+ this._classList.remove(ANIMATION_CLASSES.leaveFrom);
1583
+ this._classList.remove(ANIMATION_CLASSES.leaveActive);
1584
+ this._classList.remove(ANIMATION_CLASSES.leaveTo);
1496
1585
  }
1497
1586
  this._state$.next('entering');
1498
1587
  if (!config?.onlyTransition) {
@@ -1502,11 +1591,13 @@ class AnimatedLifecycleDirective {
1502
1591
  this._classList.add(ANIMATION_CLASSES.enterActive);
1503
1592
  fromNextFrame()
1504
1593
  .pipe(tap(() => {
1505
- if (!config?.onlyTransition) {
1594
+ if (!config?.onlyTransition && this.state === 'entering') {
1506
1595
  this._classList.remove(ANIMATION_CLASSES.enterFrom);
1507
1596
  this._classList.add(ANIMATION_CLASSES.enterTo);
1508
1597
  }
1509
1598
  }), switchMap(() => this._animatable.animationEnd$), tap(() => {
1599
+ if (this.state !== 'entering')
1600
+ return;
1510
1601
  this._state$.next('entered');
1511
1602
  this._classList.remove(ANIMATION_CLASSES.enterActive);
1512
1603
  if (!config?.onlyTransition) {
@@ -1516,16 +1607,13 @@ class AnimatedLifecycleDirective {
1516
1607
  .subscribe();
1517
1608
  }
1518
1609
  leave(config) {
1610
+ if (this.state === 'leaving')
1611
+ return;
1519
1612
  if (this.state === 'init') {
1520
1613
  this._state$.next('left');
1521
1614
  return;
1522
1615
  }
1523
- if (this.state !== 'entered' && this.state !== 'entering' && isDevMode()) {
1524
- console.warn('Tried to leave while already leaving or left. This may result in unexpected behavior.', this);
1525
- }
1526
- if (this._classList.contains(ANIMATION_CLASSES.enterFrom) ||
1527
- this._classList.contains(ANIMATION_CLASSES.enterActive) ||
1528
- this._classList.contains(ANIMATION_CLASSES.enterTo)) {
1616
+ if (this.state === 'entering') {
1529
1617
  this._classList.remove(ANIMATION_CLASSES.enterFrom);
1530
1618
  this._classList.remove(ANIMATION_CLASSES.enterActive);
1531
1619
  this._classList.remove(ANIMATION_CLASSES.enterTo);
@@ -1538,11 +1626,13 @@ class AnimatedLifecycleDirective {
1538
1626
  this._classList.add(ANIMATION_CLASSES.leaveActive);
1539
1627
  fromNextFrame()
1540
1628
  .pipe(tap(() => {
1541
- if (!config?.onlyTransition) {
1629
+ if (!config?.onlyTransition && this.state === 'leaving') {
1542
1630
  this._classList.remove(ANIMATION_CLASSES.leaveFrom);
1543
1631
  this._classList.add(ANIMATION_CLASSES.leaveTo);
1544
1632
  }
1545
1633
  }), switchMap(() => this._animatable.animationEnd$), tap(() => {
1634
+ if (this.state !== 'leaving')
1635
+ return;
1546
1636
  this._state$.next('left');
1547
1637
  this._classList.remove(ANIMATION_CLASSES.leaveActive);
1548
1638
  if (!config?.onlyTransition) {
@@ -2018,8 +2108,8 @@ class RouterStateService {
2018
2108
  this._router.events
2019
2109
  .pipe(filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => {
2020
2110
  const { url } = event;
2021
- const urlWithoutQueryParams = url.split('?')[0];
2022
- const withoutFragment = urlWithoutQueryParams.split('#')[0];
2111
+ const urlWithoutQueryParams = url.split('?')[0] ?? '';
2112
+ const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';
2023
2113
  return withoutFragment;
2024
2114
  }))
2025
2115
  .subscribe(this._route$);
@@ -2206,8 +2296,11 @@ class ViewportService {
2206
2296
  this._resizeObserverService
2207
2297
  .observe(document.documentElement)
2208
2298
  .pipe(tap((e) => {
2209
- const width = e[0].contentRect.width;
2210
- const height = e[0].contentRect.height;
2299
+ const entry = e[0];
2300
+ if (!entry)
2301
+ return;
2302
+ const width = entry.contentRect.width;
2303
+ const height = entry.contentRect.height;
2211
2304
  const obj = { width, height };
2212
2305
  if (equal(obj, this._viewportSize$.value))
2213
2306
  return;
@@ -2230,7 +2323,10 @@ class ViewportService {
2230
2323
  this._resizeObserverService
2231
2324
  .observe(scrollbarRuler)
2232
2325
  .pipe(tap((e) => {
2233
- const size = e[0].contentRect.width;
2326
+ const entry = e[0];
2327
+ if (!entry)
2328
+ return;
2329
+ const size = entry.contentRect.width;
2234
2330
  const obj = { width: 100 - size, height: 100 - size };
2235
2331
  if (equal(obj, this._scrollbarSize$.value))
2236
2332
  return;
@@ -2872,6 +2968,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
2872
2968
  type: Output
2873
2969
  }] } });
2874
2970
 
2971
+ const DEBUG_TOKEN = new InjectionToken('DEBUG_DIRECTIVE_TOKEN');
2972
+ class DebugDirective {
2973
+ constructor() {
2974
+ this._destroy$ = createDestroy();
2975
+ this._debug = signal(true);
2976
+ this.debug = this._debug.asReadonly();
2977
+ this.debug$ = toObservable(this.debug);
2978
+ this.startDebug$ = this.debug$.pipe(filter((debug) => !!debug));
2979
+ this.stopDebug$ = merge(this._destroy$, this.debug$.pipe(filter((debug) => !debug)));
2980
+ }
2981
+ set sDebug(value) {
2982
+ this._debug.set(value);
2983
+ }
2984
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DebugDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2985
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.5", type: DebugDirective, isStandalone: true, selector: "[etDebug]", inputs: { sDebug: ["etDebug", "sDebug", booleanAttribute] }, providers: [
2986
+ {
2987
+ provide: DEBUG_TOKEN,
2988
+ useExisting: DebugDirective,
2989
+ },
2990
+ ], exportAs: ["etDebug"], ngImport: i0 }); }
2991
+ }
2992
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DebugDirective, decorators: [{
2993
+ type: Directive,
2994
+ args: [{
2995
+ selector: '[etDebug]',
2996
+ exportAs: 'etDebug',
2997
+ standalone: true,
2998
+ providers: [
2999
+ {
3000
+ provide: DEBUG_TOKEN,
3001
+ useExisting: DebugDirective,
3002
+ },
3003
+ ],
3004
+ }]
3005
+ }], propDecorators: { sDebug: [{
3006
+ type: Input,
3007
+ args: [{ alias: 'etDebug', transform: booleanAttribute }]
3008
+ }] } });
3009
+
2875
3010
  const DELAYABLE_TOKEN = new InjectionToken('DELAYABLE_DIRECTIVE_TOKEN');
2876
3011
  class DelayableDirective {
2877
3012
  constructor() {
@@ -3331,13 +3466,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
3331
3466
  }] } });
3332
3467
 
3333
3468
  const OBSERVE_VISIBILITY_TOKEN = new InjectionToken('OBSERVE_VISIBILITY_TOKEN');
3469
+ const signalVisibilityChangeClasses = (cfg) => ({
3470
+ [`${cfg.name}--is-left`]: computed(() => cfg.signal()?.isLeft),
3471
+ [`${cfg.name}--is-right`]: computed(() => cfg.signal()?.isRight),
3472
+ [`${cfg.name}--is-above`]: computed(() => cfg.signal()?.isAbove),
3473
+ [`${cfg.name}--is-below`]: computed(() => cfg.signal()?.isBelow),
3474
+ [`${cfg.name}--is-visible`]: computed(() => cfg.signal()?.visible),
3475
+ });
3334
3476
  class ObserveVisibilityDirective {
3335
3477
  constructor() {
3336
3478
  this._destroy$ = createDestroy();
3337
3479
  this._elementRef = inject(ElementRef);
3338
3480
  this._intersectionObserverService = inject(IntersectionObserverService);
3339
- this.isIntersecting = signal(null);
3481
+ this.visibilityChange = signal(null);
3340
3482
  this.etObserveVisibility = new EventEmitter();
3483
+ signalHostClasses(signalVisibilityChangeClasses({
3484
+ name: 'et-observe-visibility',
3485
+ signal: this.visibilityChange,
3486
+ }));
3341
3487
  }
3342
3488
  ngAfterViewInit() {
3343
3489
  this._intersectionObserverService
@@ -3360,12 +3506,12 @@ class ObserveVisibilityDirective {
3360
3506
  entry,
3361
3507
  };
3362
3508
  this.etObserveVisibility.emit(data);
3363
- this.isIntersecting.set(data);
3509
+ this.visibilityChange.set(data);
3364
3510
  }))
3365
3511
  .subscribe();
3366
3512
  }
3367
3513
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ObserveVisibilityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3368
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: ObserveVisibilityDirective, isStandalone: true, selector: "[etObserveVisibility]", outputs: { etObserveVisibility: "etObserveVisibility" }, host: { properties: { "class.et-observe-visibility--is-visible": "isIntersecting" }, classAttribute: "et-observe-visibility" }, providers: [
3514
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: ObserveVisibilityDirective, isStandalone: true, selector: "[etObserveVisibility]", outputs: { etObserveVisibility: "etObserveVisibility" }, host: { classAttribute: "et-observe-visibility" }, providers: [
3369
3515
  {
3370
3516
  provide: OBSERVE_VISIBILITY_TOKEN,
3371
3517
  useExisting: ObserveVisibilityDirective,
@@ -3385,10 +3531,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
3385
3531
  ],
3386
3532
  host: {
3387
3533
  class: 'et-observe-visibility',
3388
- '[class.et-observe-visibility--is-visible]': 'isIntersecting',
3389
3534
  },
3390
3535
  }]
3391
- }], propDecorators: { etObserveVisibility: [{
3536
+ }], ctorParameters: function () { return []; }, propDecorators: { etObserveVisibility: [{
3392
3537
  type: Output
3393
3538
  }] } });
3394
3539
 
@@ -4016,5 +4161,5 @@ const Validators = {
4016
4161
  * Generated bundle index. Do not edit.
4017
4162
  */
4018
4163
 
4019
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEFAULT_VIEWPORT_CONFIG, DELAYABLE_TOKEN, DelayableDirective, ET_PROPERTY_REMOVED, FocusVisibleService, IS_ACTIVE_ELEMENT, IS_ARRAY_NOT_EMPTY, IS_ELEMENT, IS_EMAIL, IntersectionObserverFactory, IntersectionObserverService, IsActiveElementDirective, IsArrayNotEmpty, IsElementDirective, IsEmail, KeyPressManager, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, OBSERVE_VISIBILITY_TOKEN, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, ObserveVisibilityDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, RuntimeError, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SelectionModel, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ValidateAtLeastOneRequired, Validators, ViewportService, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, toArray, toArrayTrackByFn };
4164
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, ClickObserverFactory, ClickObserverService, ClickOutsideDirective, ContentObserverService, CursorDragScrollDirective, DEBUG_TOKEN, DEFAULT_VIEWPORT_CONFIG, DELAYABLE_TOKEN, DebugDirective, DelayableDirective, ET_PROPERTY_REMOVED, FocusVisibleService, IS_ACTIVE_ELEMENT, IS_ARRAY_NOT_EMPTY, IS_ELEMENT, IS_EMAIL, IntersectionObserverFactory, IntersectionObserverService, IsActiveElementDirective, IsArrayNotEmpty, IsElementDirective, IsEmail, KeyPressManager, LetContext, LetDirective, MUST_MATCH, Memo, MustMatch, MutationObserverFactory, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OBSERVE_SCROLL_STATE, OBSERVE_VISIBILITY_TOKEN, ObserveContentDirective, ObserveResizeDirective, ObserveScrollStateDirective, ObserveVisibilityDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RouterStateService, RuntimeError, SCROLL_OBSERVER_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_IGNORE_TARGET_CLASS, SCROLL_OBSERVER_LAST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_FIRST_ELEMENT_CLASS, SCROLL_OBSERVER_OBSERVING_LAST_ELEMENT_CLASS, SEO_DIRECTIVE_TOKEN, ScrollObserverFirstElementDirective, ScrollObserverIgnoreTargetDirective, ScrollObserverLastElementDirective, SelectionModel, SeoDirective, SmartBlockScrollStrategy, StructuredDataComponent, ToArrayPipe, TypedQueryList, VIEWPORT_CONFIG, ValidateAtLeastOneRequired, Validators, ViewportService, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalHostAttributes, signalHostClasses, signalHostStyle, signalStyle, signalVisibilityChangeClasses, toArray, toArrayTrackByFn };
4020
4165
  //# sourceMappingURL=ethlete-core.mjs.map