@ethlete/core 3.12.0 → 3.13.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.
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, isSignal, computed, signal, effect, isDevMode, Directive, Injectable, NgZone, EventEmitter, booleanAttribute, numberAttribute, Output, Injector, ViewContainerRef, TemplateRef, Pipe, QueryList } from '@angular/core';
3
3
  import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
4
- import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, startWith, Observable, combineLatest, timer, map, distinctUntilChanged, shareReplay, skip, take, debounceTime, merge, fromEvent, filter, takeWhile, pairwise, finalize } from 'rxjs';
4
+ import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, map, startWith, Observable, combineLatest, timer, distinctUntilChanged, shareReplay, filter, take, skip, debounceTime, merge, fromEvent, takeWhile, pairwise, finalize } from 'rxjs';
5
5
  import { END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
6
6
  import { FormGroup, FormArray, FormControl } from '@angular/forms';
7
- import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
7
+ import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
8
8
  import { coerceElement, coerceCssPixelValue } from '@angular/cdk/coercion';
9
9
  import { supportsScrollBehavior } from '@angular/cdk/platform';
10
10
  import * as i1 from '@angular/common';
@@ -132,34 +132,38 @@ class ActiveSelectionModel {
132
132
  this._activeOption$.next(option);
133
133
  return this;
134
134
  }
135
- evaluateKeyboardEvent(event) {
135
+ isOptionActive$(option) {
136
+ return this.activeOption$.pipe(map((activeOption) => activeOption === option));
137
+ }
138
+ evaluateKeyboardEvent(event, config) {
139
+ const { skipDisabled = false } = config ?? {};
136
140
  const keyCode = event.keyCode;
137
141
  const activeOption = this.activeOption;
138
142
  if (!this.selectionModel || !activeOption)
139
- return;
143
+ return null;
140
144
  const currentIndex = this.selectionModel?.getOptionIndex(activeOption);
141
145
  if (currentIndex === null)
142
- return;
146
+ return null;
143
147
  let newActiveOption = undefined;
144
148
  switch (keyCode) {
145
149
  case DOWN_ARROW:
146
150
  {
147
- newActiveOption = this.selectionModel?.getOptionByOffset(1, currentIndex);
151
+ newActiveOption = this.selectionModel?.getOptionByOffset(1, currentIndex, { skipDisabled });
148
152
  }
149
153
  break;
150
154
  case UP_ARROW:
151
155
  {
152
- newActiveOption = this.selectionModel?.getOptionByOffset(-1, currentIndex);
156
+ newActiveOption = this.selectionModel?.getOptionByOffset(-1, currentIndex, { skipDisabled });
153
157
  }
154
158
  break;
155
159
  case PAGE_UP:
156
160
  {
157
- newActiveOption = this.selectionModel?.getOptionByOffset(-10, currentIndex);
161
+ newActiveOption = this.selectionModel?.getOptionByOffset(-10, currentIndex, { skipDisabled, clamp: true });
158
162
  }
159
163
  break;
160
164
  case PAGE_DOWN:
161
165
  {
162
- newActiveOption = this.selectionModel?.getOptionByOffset(10, currentIndex);
166
+ newActiveOption = this.selectionModel?.getOptionByOffset(10, currentIndex, { skipDisabled, clamp: true });
163
167
  }
164
168
  break;
165
169
  case HOME:
@@ -176,9 +180,10 @@ class ActiveSelectionModel {
176
180
  if (newActiveOption !== undefined) {
177
181
  event.preventDefault();
178
182
  }
179
- if (newActiveOption !== activeOption && newActiveOption !== undefined) {
183
+ if (newActiveOption !== activeOption && newActiveOption) {
180
184
  this._activeOption$.next(newActiveOption);
181
185
  }
186
+ return newActiveOption ?? null;
182
187
  }
183
188
  _resetActiveOptions() {
184
189
  const firstOption = this.selectionModel?.getFirstOption();
@@ -1005,27 +1010,6 @@ const getObjectProperty = (obj, prop) => {
1005
1010
  return value;
1006
1011
  };
1007
1012
  class SelectionModel {
1008
- constructor() {
1009
- this._selection$ = new BehaviorSubject([]);
1010
- this._options$ = new BehaviorSubject([]);
1011
- this._valueBinding$ = new BehaviorSubject(null);
1012
- this._keyBinding$ = new BehaviorSubject(null);
1013
- this._labelBinding$ = new BehaviorSubject(null);
1014
- this._disabledBinding$ = new BehaviorSubject(null);
1015
- this._allowMultiple$ = new BehaviorSubject(false);
1016
- this._filter$ = new BehaviorSubject('');
1017
- this.value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(map(([selection, valueBinding, allowMultiple]) => {
1018
- if (allowMultiple) {
1019
- return selection.map((option) => this.execFnOrGetOptionProperty(option, valueBinding));
1020
- }
1021
- const [option] = selection;
1022
- if (!option)
1023
- return null;
1024
- return this.execFnOrGetOptionProperty(option, valueBinding);
1025
- }));
1026
- this.filteredOptions$ = combineLatest([this.options$, this.filter$, this.labelBinding$]).pipe(map(([options, filter]) => this.getFilteredOptions(filter, options)), shareReplay({ bufferSize: 1, refCount: true }));
1027
- this._optionsAndSelection$ = combineLatest([this._options$, this._selection$]);
1028
- }
1029
1013
  get selection$() {
1030
1014
  return this._selection$.asObservable();
1031
1015
  }
@@ -1074,6 +1058,40 @@ class SelectionModel {
1074
1058
  get filter() {
1075
1059
  return this._filter$.value;
1076
1060
  }
1061
+ constructor() {
1062
+ this._destroy$ = createDestroy();
1063
+ this._lastSelectionSetSubscription = null;
1064
+ this._selection$ = new BehaviorSubject([]);
1065
+ this._options$ = new BehaviorSubject([]);
1066
+ this.optionsSignal = toSignal(this.options$);
1067
+ this._valueBinding$ = new BehaviorSubject(null);
1068
+ this._keyBinding$ = new BehaviorSubject(null);
1069
+ this._labelBinding$ = new BehaviorSubject(null);
1070
+ this._disabledBinding$ = new BehaviorSubject(null);
1071
+ this._allowMultiple$ = new BehaviorSubject(false);
1072
+ this._filter$ = new BehaviorSubject('');
1073
+ this.value$ = combineLatest([this.selection$, this.valueBinding$, this.allowMultiple$]).pipe(map(([selection, valueBinding, allowMultiple]) => {
1074
+ if (allowMultiple) {
1075
+ return selection.map((option) => this.execFnOrGetOptionProperty(option, valueBinding));
1076
+ }
1077
+ const [option] = selection;
1078
+ if (!option)
1079
+ return null;
1080
+ return this.execFnOrGetOptionProperty(option, valueBinding);
1081
+ }));
1082
+ this.filteredOptions$ = combineLatest([this.options$, this.filter$, this.labelBinding$]).pipe(map(([options, filter]) => this.getFilteredOptions(filter, options)), shareReplay({ bufferSize: 1, refCount: true }));
1083
+ this._optionsAndSelection$ = combineLatest([this._options$, this._selection$]);
1084
+ this.allowMultiple$
1085
+ .pipe(tap(() => {
1086
+ if (this.allowMultiple)
1087
+ return;
1088
+ const [option] = this.selection;
1089
+ if (!option)
1090
+ return;
1091
+ this.setSelection([option]);
1092
+ }), takeUntilDestroyed())
1093
+ .subscribe();
1094
+ }
1077
1095
  setSelection(selection) {
1078
1096
  if (!Array.isArray(selection)) {
1079
1097
  selection = [selection];
@@ -1081,6 +1099,24 @@ class SelectionModel {
1081
1099
  this._selection$.next(selection);
1082
1100
  return this;
1083
1101
  }
1102
+ setSelectionFromValue(value) {
1103
+ if (Array.isArray(value)) {
1104
+ const selection = value.map((v) => this.getOptionByValue(v)).filter((v) => v !== undefined);
1105
+ this.setSelection(selection);
1106
+ }
1107
+ else {
1108
+ const selection = this.getOptionByValue(value);
1109
+ if (selection) {
1110
+ this.setSelection(selection);
1111
+ }
1112
+ }
1113
+ }
1114
+ setSelectionFromValue$(value) {
1115
+ this._lastSelectionSetSubscription?.unsubscribe();
1116
+ this._lastSelectionSetSubscription = this.options$
1117
+ .pipe(takeUntil(this._destroy$), filter((o) => !!o.length), tap(() => this.setSelectionFromValue(value)), take(1))
1118
+ .subscribe();
1119
+ }
1084
1120
  setValueBinding(fnOrPropertyPath) {
1085
1121
  this._valueBinding$.next(fnOrPropertyPath);
1086
1122
  return this;
@@ -1177,29 +1213,40 @@ class SelectionModel {
1177
1213
  getOptionByIndex(index, options = this.getFilteredOptions()) {
1178
1214
  return options[index] || null;
1179
1215
  }
1180
- getOptionByOffset(offset, index, options = this.getFilteredOptions(), config = { clamp: true }) {
1181
- const { loop, clamp } = config;
1216
+ getOptionByOffset(offset, index, config = { clamp: true }) {
1217
+ const { loop, clamp, skipDisabled, options = this.getFilteredOptions() } = config;
1182
1218
  const newIndex = index + offset;
1183
1219
  const remainingOffset = newIndex * -1;
1220
+ let optionResult = null;
1184
1221
  if (newIndex < 0) {
1185
1222
  if (loop) {
1186
- return this.getOptionByOffset(remainingOffset, options.length - 1, options, config);
1223
+ optionResult = this.getOptionByOffset(remainingOffset, options.length - 1, config);
1187
1224
  }
1188
- if (clamp) {
1189
- return this.getFirstOption();
1225
+ else if (clamp) {
1226
+ optionResult = this.getFirstOption();
1227
+ }
1228
+ else {
1229
+ optionResult = null;
1190
1230
  }
1191
- return null;
1192
1231
  }
1193
- if (newIndex >= options.length) {
1232
+ else if (newIndex >= options.length) {
1194
1233
  if (loop) {
1195
- return this.getOptionByOffset(remainingOffset, 0, options, config);
1234
+ optionResult = this.getOptionByOffset(remainingOffset, 0, config);
1196
1235
  }
1197
- if (clamp) {
1198
- return this.getLastOption();
1236
+ else if (clamp) {
1237
+ optionResult = this.getLastOption();
1199
1238
  }
1200
- return null;
1239
+ else {
1240
+ optionResult = null;
1241
+ }
1242
+ }
1243
+ else {
1244
+ optionResult = this.getOptionByIndex(newIndex);
1201
1245
  }
1202
- return this.getOptionByIndex(newIndex);
1246
+ if (optionResult && skipDisabled && this.isDisabled(optionResult)) {
1247
+ return this.getOptionByOffset(offset, newIndex, config);
1248
+ }
1249
+ return optionResult;
1203
1250
  }
1204
1251
  getFirstOption(options = this.getFilteredOptions()) {
1205
1252
  return this.getOptionByIndex(0, options);
@@ -1231,7 +1278,7 @@ class SelectionModel {
1231
1278
  const index = this.getNonMultipleSelectedOptionIndex();
1232
1279
  if (index === null)
1233
1280
  return null;
1234
- return this.getOptionByOffset(index, offset, this.getFilteredOptions(), config);
1281
+ return this.getOptionByOffset(index, offset, config);
1235
1282
  }
1236
1283
  getLabel(option) {
1237
1284
  return this.execFnOrGetOptionProperty(option, this.labelBinding);
@@ -1263,7 +1310,12 @@ class SelectionModel {
1263
1310
  return this.getOption(optionKey, this.keyBinding, this.selection) !== undefined;
1264
1311
  }
1265
1312
  isDisabled(option) {
1266
- return this.execFnOrGetOptionProperty(option, this.disabledBinding);
1313
+ if (!this.disabledBinding)
1314
+ return false;
1315
+ const result = this.execFnOrGetOptionProperty(option, this.disabledBinding);
1316
+ if (result === option)
1317
+ return false;
1318
+ return !!result;
1267
1319
  }
1268
1320
  getFilteredOptions(filter = this.filter, options = this.options) {
1269
1321
  if (!filter)
@@ -2602,6 +2654,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
2602
2654
  args: ['etObserveResizeDebounce']
2603
2655
  }] } });
2604
2656
 
2657
+ const ROOT_BOUNDARY_TOKEN = new InjectionToken('ROOT_BOUNDARY_TOKEN');
2658
+ class RootBoundaryDirective {
2659
+ constructor() {
2660
+ this._elementRef = inject(ElementRef);
2661
+ this._boundaryElement = null;
2662
+ }
2663
+ get boundaryElement() {
2664
+ return this._boundaryElement ?? this._elementRef.nativeElement;
2665
+ }
2666
+ set boundaryElement(v) {
2667
+ this._boundaryElement = v;
2668
+ }
2669
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: RootBoundaryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2670
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: RootBoundaryDirective, isStandalone: true, selector: "[etRootBoundary]", providers: [
2671
+ {
2672
+ provide: ROOT_BOUNDARY_TOKEN,
2673
+ useExisting: RootBoundaryDirective,
2674
+ },
2675
+ ], ngImport: i0 }); }
2676
+ }
2677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: RootBoundaryDirective, decorators: [{
2678
+ type: Directive,
2679
+ args: [{
2680
+ selector: '[etRootBoundary]',
2681
+ standalone: true,
2682
+ providers: [
2683
+ {
2684
+ provide: ROOT_BOUNDARY_TOKEN,
2685
+ useExisting: RootBoundaryDirective,
2686
+ },
2687
+ ],
2688
+ }]
2689
+ }] });
2690
+
2605
2691
  class AnimatedOverlayDirective {
2606
2692
  constructor() {
2607
2693
  this._destroy$ = createDestroy();
@@ -2611,6 +2697,7 @@ class AnimatedOverlayDirective {
2611
2697
  this._zone = inject(NgZone);
2612
2698
  this._elementRef = inject(ElementRef);
2613
2699
  this._observeResize = inject(ObserveResizeDirective);
2700
+ this._rootBoundary = inject(RootBoundaryDirective, { optional: true });
2614
2701
  this._portal = null;
2615
2702
  this._overlayRef = null;
2616
2703
  this._componentRef = null;
@@ -2622,6 +2709,7 @@ class AnimatedOverlayDirective {
2622
2709
  this._isMounted$ = new BehaviorSubject(false);
2623
2710
  this._isMounting$ = new BehaviorSubject(false);
2624
2711
  this._isUnmounting$ = new BehaviorSubject(false);
2712
+ this._isHidden$ = new BehaviorSubject(false);
2625
2713
  /**
2626
2714
  * The placement of the animated overlay.
2627
2715
  * @default undefined
@@ -2670,6 +2758,12 @@ class AnimatedOverlayDirective {
2670
2758
  get isUnmounting() {
2671
2759
  return this._isUnmounting$.value;
2672
2760
  }
2761
+ get isHidden$() {
2762
+ return this._isHidden$.asObservable();
2763
+ }
2764
+ get isHidden() {
2765
+ return this._isHidden$.value;
2766
+ }
2673
2767
  get portal() {
2674
2768
  return this._portal;
2675
2769
  }
@@ -2723,6 +2817,7 @@ class AnimatedOverlayDirective {
2723
2817
  const floatingElArrow = this._componentRef.instance._elementRef?.nativeElement.querySelector('[et-floating-arrow]');
2724
2818
  floatingEl.classList.add('et-floating-element');
2725
2819
  const refEl = this._elementRef.nativeElement;
2820
+ const boundary = this._rootBoundary?.boundaryElement ?? undefined;
2726
2821
  this._floatingElCleanupFn = autoUpdate(refEl, floatingEl, () => {
2727
2822
  if (!this._componentRef)
2728
2823
  return;
@@ -2734,6 +2829,7 @@ class AnimatedOverlayDirective {
2734
2829
  fallbackPlacements: this.fallbackPlacements ?? undefined,
2735
2830
  fallbackAxisSideDirection: 'start',
2736
2831
  crossAxis: false,
2832
+ boundary,
2737
2833
  }),
2738
2834
  ...(this.autoResize
2739
2835
  ? [
@@ -2746,9 +2842,9 @@ class AnimatedOverlayDirective {
2746
2842
  }),
2747
2843
  ]
2748
2844
  : []),
2749
- shift({ limiter: limitShift(), padding: this.viewportPadding ?? undefined }),
2845
+ shift({ limiter: limitShift(), padding: this.viewportPadding ?? undefined, boundary }),
2750
2846
  ...(floatingElArrow ? [arrow({ element: floatingElArrow, padding: this.arrowPadding ?? undefined })] : []),
2751
- ...(this.autoHide ? [hide({ strategy: 'referenceHidden' })] : []),
2847
+ ...(this.autoHide ? [hide({ strategy: 'referenceHidden', boundary })] : []),
2752
2848
  ],
2753
2849
  }).then(({ x, y, placement, middlewareData }) => {
2754
2850
  floatingEl.style.setProperty('--et-floating-translate', `translate3d(${x}px, ${y}px, 0)`);
@@ -2759,9 +2855,11 @@ class AnimatedOverlayDirective {
2759
2855
  }
2760
2856
  if (middlewareData.hide?.referenceHidden) {
2761
2857
  floatingEl.classList.add('et-floating-element--hidden');
2858
+ this._isHidden$.next(true);
2762
2859
  }
2763
2860
  else {
2764
2861
  floatingEl.classList.remove('et-floating-element--hidden');
2862
+ this._isHidden$.next(false);
2765
2863
  }
2766
2864
  });
2767
2865
  });
@@ -2794,6 +2892,9 @@ class AnimatedOverlayDirective {
2794
2892
  if (!this._componentRef) {
2795
2893
  return;
2796
2894
  }
2895
+ if (this.isHidden) {
2896
+ return;
2897
+ }
2797
2898
  this._isUnmounting$.next(true);
2798
2899
  this._beforeClosed?.next();
2799
2900
  this._componentRef.instance._animatedLifecycle?.leave();
@@ -4444,5 +4545,5 @@ const Validators = {
4444
4545
  * Generated bundle index. Do not edit.
4445
4546
  */
4446
4547
 
4447
- 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, InferMimeTypePipe, 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, buildSignalEffects, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, inferMimeType, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalHostAttributes, signalHostClasses, signalHostStyles, signalStyles, signalVisibilityChangeClasses, switchQueryListChanges, toArray, toArrayTrackByFn };
4548
+ 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, InferMimeTypePipe, 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, ROOT_BOUNDARY_TOKEN, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeObserverFactory, ResizeObserverService, RootBoundaryDirective, 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, buildSignalEffects, clamp, clone, cloneFormGroup, createDestroy, createFlipAnimation, createFlipAnimationGroup, createMediaQueryObservable, createMutationObservable, createReactiveBindings, createResizeObservable, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getKnockoutMatchScore, getMatchScoreSubLine, hasCookie, inferMimeType, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalHostAttributes, signalHostClasses, signalHostStyles, signalStyles, signalVisibilityChangeClasses, switchQueryListChanges, toArray, toArrayTrackByFn };
4448
4549
  //# sourceMappingURL=ethlete-core.mjs.map