@ethlete/core 4.12.1 → 4.14.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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, TemplateRef, Injectable, isSignal, signal, QueryList, Injector, runInInjectionContext, effect, afterNextRender, NgZone, isDevMode, computed, untracked, Directive, model, EventEmitter, booleanAttribute, numberAttribute, Output, ViewContainerRef, Pipe, AfterRenderPhase, input } from '@angular/core';
2
+ import { inject, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostBinding, InjectionToken, assertInInjectionContext, DestroyRef, ElementRef, TemplateRef, Injectable, isSignal, signal, QueryList, Injector, effect, untracked, runInInjectionContext, afterNextRender, NgZone, isDevMode, computed, Directive, model, EventEmitter, booleanAttribute, numberAttribute, Output, ViewContainerRef, Pipe, AfterRenderPhase, input } from '@angular/core';
3
3
  import { DomSanitizer, Meta, Title } from '@angular/platform-browser';
4
4
  import { Subject, BehaviorSubject, takeUntil, switchMap, of, tap, map, startWith, Observable, combineLatest, timer, distinctUntilChanged, shareReplay, filter, take, fromEvent, pairwise, debounceTime, finalize, merge, skip, takeWhile } from 'rxjs';
5
5
  import { END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
@@ -1011,16 +1011,18 @@ const isElementVisible = (options) => {
1011
1011
  const elementBlockStart = elementRect.top;
1012
1012
  const containerInlineStart = containerRect.left;
1013
1013
  const containerBlockStart = containerRect.top;
1014
- const elementInlineEnd = elementInlineStart + elementRect.width;
1015
- const elementBlockEnd = elementBlockStart + elementRect.height;
1014
+ const elWith = elementRect.width || 1;
1015
+ const elHeight = elementRect.height || 1;
1016
+ const elementInlineEnd = elementInlineStart + elWith;
1017
+ const elementBlockEnd = elementBlockStart + elHeight;
1016
1018
  const containerInlineEnd = containerInlineStart + containerRect.width;
1017
1019
  const containerBlockEnd = containerBlockStart + containerRect.height;
1018
1020
  const isElementInlineVisible = elementInlineStart >= containerInlineStart && elementInlineEnd <= containerInlineEnd;
1019
1021
  const isElementBlockVisible = elementBlockStart >= containerBlockStart && elementBlockEnd <= containerBlockEnd;
1020
1022
  const inlineIntersection = Math.min(elementInlineEnd, containerInlineEnd) - Math.max(elementInlineStart, containerInlineStart);
1021
1023
  const blockIntersection = Math.min(elementBlockEnd, containerBlockEnd) - Math.max(elementBlockStart, containerBlockStart);
1022
- const inlineIntersectionPercentage = clamp((inlineIntersection / elementRect.width) * 100);
1023
- const blockIntersectionPercentage = clamp((blockIntersection / elementRect.height) * 100);
1024
+ const inlineIntersectionPercentage = clamp((inlineIntersection / elWith) * 100);
1025
+ const blockIntersectionPercentage = clamp((blockIntersection / elHeight) * 100);
1024
1026
  return {
1025
1027
  inline: isElementInlineVisible,
1026
1028
  block: isElementBlockVisible,
@@ -2301,35 +2303,64 @@ const buildElementSignal = (el) => {
2301
2303
  previousElement: previousElements?.[0] ?? null,
2302
2304
  }))), { initialValue: { currentElement: null, previousElement: null, previousElements: [], currentElements: [] } });
2303
2305
  };
2304
- const buildSignalEffects = (config) => {
2306
+ const buildSignalEffects = (el, config) => {
2307
+ const elements = buildElementSignal(el);
2305
2308
  const injector = inject(Injector);
2306
- const { map, eachItemFn, cleanupFn } = config;
2307
- const effectRefMap = {};
2308
- const has = (token) => token in effectRefMap;
2309
- const push = (tokenString, signal) => {
2310
- if (has(tokenString))
2311
- return;
2312
- const tokenArray = tokenString.split(' ').filter((token) => !!token);
2313
- for (const token of tokenArray) {
2314
- runInInjectionContext(injector, () => {
2315
- const ref = effect(() => {
2316
- const value = signal();
2317
- eachItemFn({ key: token, value });
2309
+ effect(() => {
2310
+ const { currentElements, previousElements } = elements();
2311
+ for (const previousEl of previousElements) {
2312
+ if (currentElements.includes(previousEl))
2313
+ continue;
2314
+ const tokens = Object.keys(config.tokenMap)
2315
+ .map((key) => key.split(' '))
2316
+ .flat();
2317
+ if (!tokens.length)
2318
+ continue;
2319
+ config.cleanupFn(previousEl, tokens);
2320
+ }
2321
+ for (const currentEl of currentElements) {
2322
+ if (previousElements.includes(currentEl))
2323
+ continue;
2324
+ for (const [tokens, condition] of Object.entries(config.tokenMap)) {
2325
+ untracked(() => {
2326
+ const tokenArray = tokens.split(' ');
2327
+ if (!tokenArray.length)
2328
+ return;
2329
+ config.updateFn(currentEl, tokenArray, condition());
2318
2330
  });
2319
- effectRefMap[token] = ref;
2320
- });
2331
+ }
2321
2332
  }
2333
+ });
2334
+ const effects = {};
2335
+ const has = (tokens) => tokens in effects;
2336
+ const push = (tokens, signal) => {
2337
+ if (has(tokens))
2338
+ return;
2339
+ runInInjectionContext(injector, () => {
2340
+ effects[tokens] = effect(() => {
2341
+ const { currentElements } = untracked(() => elements());
2342
+ for (const el of currentElements) {
2343
+ const tokenArray = tokens.split(' ');
2344
+ if (!tokenArray.length)
2345
+ continue;
2346
+ config.updateFn(el, tokenArray, signal());
2347
+ }
2348
+ });
2349
+ });
2322
2350
  };
2323
2351
  const pushMany = (map) => {
2324
- for (const [tokenString, signal] of Object.entries(map)) {
2325
- push(tokenString, signal);
2352
+ for (const [tokens, signal] of Object.entries(map)) {
2353
+ push(tokens, signal);
2326
2354
  }
2327
2355
  };
2328
- const remove = (...tokens) => {
2329
- for (const tokenString of tokens) {
2330
- effectRefMap[tokenString]?.destroy();
2331
- cleanupFn({ key: tokenString, value: map[tokenString]?.() });
2332
- delete effectRefMap[tokenString];
2356
+ const remove = (tokens) => {
2357
+ effects[tokens]?.destroy();
2358
+ delete effects[tokens];
2359
+ for (const el of elements().currentElements) {
2360
+ const tokenArray = tokens.split(' ');
2361
+ if (!tokenArray.length)
2362
+ continue;
2363
+ config.cleanupFn(el, tokenArray);
2333
2364
  }
2334
2365
  };
2335
2366
  const removeMany = (tokens) => {
@@ -2337,7 +2368,7 @@ const buildSignalEffects = (config) => {
2337
2368
  remove(token);
2338
2369
  }
2339
2370
  };
2340
- pushMany(map);
2371
+ pushMany(config.tokenMap);
2341
2372
  return { remove, removeMany, has, push, pushMany };
2342
2373
  };
2343
2374
  const signalIsRendered = () => {
@@ -2346,63 +2377,61 @@ const signalIsRendered = () => {
2346
2377
  return isRendered.asReadonly();
2347
2378
  };
2348
2379
  const signalClasses = (el, classMap) => {
2349
- const elements = buildElementSignal(el);
2350
- return buildSignalEffects({
2351
- map: classMap,
2352
- eachItemFn: ({ key, value }) => {
2353
- if (value) {
2354
- elements().currentElement?.classList.add(key);
2380
+ return buildSignalEffects(el, {
2381
+ tokenMap: classMap,
2382
+ cleanupFn: (el, tokens) => el.classList.remove(...tokens),
2383
+ updateFn: (el, tokens, condition) => {
2384
+ if (!condition) {
2385
+ el.classList.remove(...tokens);
2355
2386
  }
2356
2387
  else {
2357
- elements().currentElement?.classList.remove(key);
2388
+ el.classList.add(...tokens);
2358
2389
  }
2359
2390
  },
2360
- cleanupFn: ({ key }) => elements().currentElement?.classList.remove(key),
2361
2391
  });
2362
2392
  };
2363
2393
  const signalHostClasses = (classMap) => signalClasses(inject(ElementRef), classMap);
2364
2394
  const ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected', 'hidden', 'inert'];
2365
2395
  const signalAttributes = (el, attributeMap) => {
2366
- const elements = buildElementSignal(el);
2367
- return buildSignalEffects({
2368
- map: attributeMap,
2369
- eachItemFn: ({ key, value }) => {
2370
- const valueString = `${value}`;
2371
- if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(key)) {
2372
- if (value) {
2373
- elements().currentElement?.setAttribute(key, '');
2374
- }
2375
- else {
2376
- elements().currentElement?.removeAttribute(key);
2396
+ return buildSignalEffects(el, {
2397
+ tokenMap: attributeMap,
2398
+ cleanupFn: (el, tokens) => tokens.forEach((token) => el.removeAttribute(token)),
2399
+ updateFn: (el, tokens, condition) => {
2400
+ for (const token of tokens) {
2401
+ if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(token)) {
2402
+ if (condition) {
2403
+ el.setAttribute(token, '');
2404
+ }
2405
+ else {
2406
+ el.removeAttribute(token);
2407
+ }
2408
+ continue;
2377
2409
  }
2378
- }
2379
- else {
2380
- if (value === null || value === undefined) {
2381
- elements().currentElement?.removeAttribute(key);
2410
+ if (condition === null || condition === undefined) {
2411
+ el.removeAttribute(token);
2382
2412
  }
2383
2413
  else {
2384
- elements().currentElement?.setAttribute(key, valueString);
2414
+ el.setAttribute(token, `${condition}`);
2385
2415
  }
2386
2416
  }
2387
2417
  },
2388
- cleanupFn: ({ key }) => elements().currentElement?.removeAttribute(key),
2389
2418
  });
2390
2419
  };
2391
2420
  const signalHostAttributes = (attributeMap) => signalAttributes(inject(ElementRef), attributeMap);
2392
2421
  const signalStyles = (el, styleMap) => {
2393
- const elements = buildElementSignal(el);
2394
- return buildSignalEffects({
2395
- map: styleMap,
2396
- eachItemFn: ({ key, value }) => {
2397
- if (value === null || value === undefined) {
2398
- elements().currentElement?.style.removeProperty(key);
2399
- }
2400
- else {
2401
- const valueString = `${value}`;
2402
- elements().currentElement?.style.setProperty(key, valueString);
2422
+ return buildSignalEffects(el, {
2423
+ tokenMap: styleMap,
2424
+ cleanupFn: (el, tokens) => tokens.forEach((token) => el.style.removeProperty(token)),
2425
+ updateFn: (el, tokens, condition) => {
2426
+ for (const token of tokens) {
2427
+ if (condition === null || condition === undefined) {
2428
+ el.style.removeProperty(token);
2429
+ }
2430
+ else {
2431
+ el.style.setProperty(token, `${condition}`);
2432
+ }
2403
2433
  }
2404
2434
  },
2405
- cleanupFn: ({ key }) => elements().currentElement?.style.removeProperty(key),
2406
2435
  });
2407
2436
  };
2408
2437
  const signalHostStyles = (styleMap) => signalStyles(inject(ElementRef), styleMap);
@@ -2487,11 +2516,25 @@ const signalElementMutations = (el, options) => {
2487
2516
  return elementMutationsSignal.asReadonly();
2488
2517
  };
2489
2518
  const signalHostElementMutations = (options) => signalElementMutations(inject(ElementRef), options);
2490
- const signalElementScrollState = (el) => {
2519
+ const signalElementScrollState = (el, options) => {
2491
2520
  const elements = buildElementSignal(el);
2492
2521
  const elementDimensions = signalElementDimensions(elements);
2493
2522
  const elementMutations = signalElementMutations(elements, { childList: true, subtree: true });
2494
2523
  const isRendered = signalIsRendered();
2524
+ const initialScrollPosition = options?.initialScrollPosition;
2525
+ if (initialScrollPosition) {
2526
+ const ref = effect(() => {
2527
+ if (!isRendered())
2528
+ return;
2529
+ const scrollPosition = initialScrollPosition();
2530
+ const element = elements().currentElement;
2531
+ if (scrollPosition && element) {
2532
+ element.scrollLeft = scrollPosition.x;
2533
+ element.scrollTop = scrollPosition.y;
2534
+ ref.destroy();
2535
+ }
2536
+ });
2537
+ }
2495
2538
  return computed(() => {
2496
2539
  const element = elements().currentElement;
2497
2540
  const dimensions = elementDimensions();
@@ -2565,6 +2608,40 @@ const signalElementIntersection = (el, options) => {
2565
2608
  obs?.disconnect();
2566
2609
  }
2567
2610
  if (els.currentElements.length && !!enabled) {
2611
+ const rootEl = untracked(() => root().currentElement);
2612
+ const rootBounds = rootEl?.getBoundingClientRect();
2613
+ // check sync for intersections since the intersection observer async and we probably want to know the initial state
2614
+ const entries = els.currentElements
2615
+ .map((el) => {
2616
+ const visibility = isElementVisible({
2617
+ container: rootEl,
2618
+ element: el,
2619
+ });
2620
+ if (!visibility) {
2621
+ console.error('No visibility data found for element.', {
2622
+ element: el,
2623
+ container: rootEl,
2624
+ });
2625
+ return null;
2626
+ }
2627
+ const inlineIntersectionRatio = visibility.inlineIntersection / 100;
2628
+ const blockIntersectionRatio = visibility.blockIntersection / 100;
2629
+ const isIntersecting = inlineIntersectionRatio > 0 && blockIntersectionRatio > 0;
2630
+ const intersectionRatio = Math.min(inlineIntersectionRatio, blockIntersectionRatio);
2631
+ const elBounds = el.getBoundingClientRect();
2632
+ const intersectionEntry = {
2633
+ boundingClientRect: elBounds,
2634
+ intersectionRatio,
2635
+ intersectionRect: elBounds,
2636
+ isIntersecting,
2637
+ rootBounds: rootBounds ?? null,
2638
+ target: el,
2639
+ time: performance.now(),
2640
+ };
2641
+ return intersectionEntry;
2642
+ })
2643
+ .filter((e) => e !== null);
2644
+ elementIntersectionSignal.set(entries);
2568
2645
  for (const el of els.currentElements) {
2569
2646
  obs?.observe(el);
2570
2647
  }
@@ -2699,6 +2776,27 @@ const injectPathParam = (key, config) => {
2699
2776
  const src = computed(() => pathParams()[key] ?? null);
2700
2777
  return transformOrReturn(src, config);
2701
2778
  };
2779
+ const createIsRenderedSignal = () => {
2780
+ const value = signal(false);
2781
+ nextFrame(() => {
2782
+ if (!value()) {
2783
+ console.error('Render signal was not set to true. This can cause unexpected behavior. Make sure to .bind() the render signal at the end of the constructor.');
2784
+ }
2785
+ });
2786
+ return {
2787
+ state: value,
2788
+ bind: () => effect(() => value.set(true), { allowSignalWrites: true }),
2789
+ };
2790
+ };
2791
+ const createCanAnimateSignal = () => {
2792
+ const value = signal(false);
2793
+ nextFrame(() => {
2794
+ value.set(true);
2795
+ });
2796
+ return {
2797
+ state: value,
2798
+ };
2799
+ };
2702
2800
 
2703
2801
  const scrollBehaviorSupported = supportsScrollBehavior();
2704
2802
  let _uniqueIdCounter = 0;
@@ -5364,5 +5462,5 @@ const Validators = {
5364
5462
  * Generated bundle index. Do not edit.
5365
5463
  */
5366
5464
 
5367
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_SCROLLING_PREPARED_CLASS, 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, PropsDirective, 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, bindProps, buildSignalEffects, clamp, clone, cloneFormGroup, controlValueSignal, controlValueSignalWithPrevious, createComponentId, createDependencyStash, createDestroy, createElementDictionary, createFlipAnimation, createFlipAnimationGroup, createHostProps, createMediaQueryObservable, createMutationObservable, createPropHandlers, createProps, createReactiveBindings, createResizeObservable, createSetup, debouncedControlValueSignal, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getIntersectionInfo, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, hasCookie, inferMimeType, injectFragment, injectHostElement, injectOrRunInContext, injectPathParam, injectPathParams, injectQueryParam, injectQueryParams, injectRouteData, injectRouteDataItem, injectRouteTitle, injectTemplateRef, isArray, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObject, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, previousSignalValue, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, signalVisibilityChangeClasses, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, transformOrReturn, unbindProps };
5465
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, ActiveSelectionModel, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_SCROLLING_PREPARED_CLASS, 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, PropsDirective, 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, bindProps, buildSignalEffects, clamp, clone, cloneFormGroup, controlValueSignal, controlValueSignalWithPrevious, createCanAnimateSignal, createComponentId, createDependencyStash, createDestroy, createElementDictionary, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createMediaQueryObservable, createMutationObservable, createPropHandlers, createProps, createReactiveBindings, createResizeObservable, createSetup, debouncedControlValueSignal, deleteCookie, elementCanScroll, equal, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementVisibleStates, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getIntersectionInfo, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, hasCookie, inferMimeType, injectFragment, injectHostElement, injectOrRunInContext, injectPathParam, injectPathParams, injectQueryParam, injectQueryParams, injectRouteData, injectRouteDataItem, injectRouteTitle, injectTemplateRef, isArray, isElementVisible, isEmptyArray, isGroupMatch, isKnockoutMatch, isObject, isObjectArray, isPrimitiveArray, mergeSeoConfig, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, previousSignalValue, provideViewportConfig, round, routerDisableScrollTop, scrollToElement, setCookie, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, signalVisibilityChangeClasses, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, transformOrReturn, unbindProps };
5368
5466
  //# sourceMappingURL=ethlete-core.mjs.map