@ethlete/core 5.0.0-next.37 → 5.0.0-next.39

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ethlete/core
2
2
 
3
+ ## 5.0.0-next.39
4
+
5
+ ### Patch Changes
6
+
7
+ - [`74850e3`](https://github.com/ethlete-io/ethdk/commit/74850e3a62339565c13bdeb89c4334993eefd2b3) Thanks [@TomTomB](https://github.com/TomTomB)! - The provider-definition doc comments no longer spell the pure annotation out verbatim, so Rollup stops warning about (and stripping) an annotation it cannot attach to a call while bundling `@ethlete/core`.
8
+
9
+ ## 5.0.0-next.38
10
+
11
+ ### Minor Changes
12
+
13
+ - [#3043](https://github.com/ethlete-io/ethdk/pull/3043) [`eeb8db3`](https://github.com/ethlete-io/ethdk/commit/eeb8db366907058d9f8357ab84582580dc5ab7d9) Thanks [@github-actions](https://github.com/apps/github-actions)! - Add a browser notification API: `injectNotifications()` exposes a reactive `permission` signal,
14
+ `request()`, `show(config)` returning a `NotificationRef`, and `closeAll()` - over both the
15
+ `Notification` constructor and the service-worker path, SSR-safe.
16
+
3
17
  ## 5.0.0-next.37
4
18
 
5
19
  ### Major Changes
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, ElementRef, Directive, assertInInjectionContext, DestroyRef, TemplateRef, QueryList, RendererFactory2, RendererStyleFlags2, isSignal, DOCUMENT, signal, linkedSignal, isDevMode, computed, afterNextRender, effect, NgZone, untracked, EnvironmentInjector, runInInjectionContext, Injector, booleanAttribute, numberAttribute, PLATFORM_ID, ApplicationRef, createComponent, model, ViewContainerRef, input, output, Pipe, ViewEncapsulation, Component, afterEveryRender } from '@angular/core';
3
3
  import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
4
- import { Subject, BehaviorSubject, debounceTime, combineLatest, map, merge, fromEvent, filter, tap, switchMap, startWith, of, defer, from, catchError, timer, takeUntil, pairwise, distinctUntilChanged, take, Observable, concatMap, EMPTY, concat, exhaustMap, share, isObservable, firstValueFrom, defaultIfEmpty } from 'rxjs';
4
+ import { Subject, BehaviorSubject, debounceTime, combineLatest, map, merge, fromEvent, filter, tap, switchMap, startWith, of, defer, from, catchError, timer, takeUntil, pairwise, distinctUntilChanged, take, Observable, concatMap, EMPTY, concat, exhaustMap, share, shareReplay, isObservable, firstValueFrom, defaultIfEmpty } from 'rxjs';
5
5
  import { FormGroup, FormArray, FormControl } from '@angular/forms';
6
6
  import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
7
7
  import { DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
@@ -175,7 +175,15 @@ const createProviders = (token, factory, extraToken) => [
175
175
  { provide: token, useFactory: factory },
176
176
  ...(extraToken ? [{ provide: extraToken, useExisting: token }] : []),
177
177
  ];
178
-
178
+ /**
179
+ * Defines a provider that a subtree opts into - `provideX()` in some component's `providers`, then
180
+ * `injectX()` below it. Nothing is created until the subtree provides it.
181
+ *
182
+ * Assign the result to one `const`, name the halves with {@link toProvideFn} / {@link toInjectFn} /
183
+ * {@link toToken}, and put a `__PURE__` annotation comment on each of those declarations. Never destructure
184
+ * the definition: that declaration cannot be tree-shaken, so it ships the factory's whole closure to
185
+ * every consumer. Enforced by `ethlete/no-impure-top-level-provider`.
186
+ */
179
187
  const defineProvider = (factory, options) => {
180
188
  const token = new InjectionToken(options?.name ?? createComponentId('provider'));
181
189
  return {
@@ -226,7 +234,7 @@ const defineStaticRootProvider = (defaultValue, options) => {
226
234
  token,
227
235
  };
228
236
  };
229
-
237
+ /** The `provideX` half of a provider definition. A call, so a `__PURE__` annotation makes it droppable. */
230
238
  const toProvideFn = (definition) => definition.provide;
231
239
  /** The `injectX` half of a provider definition. */
232
240
  const toInjectFn = (definition) => definition.inject;
@@ -4977,6 +4985,235 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
4977
4985
  }]
4978
4986
  }], ctorParameters: () => [], propDecorators: { commitThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "commitThreshold", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], dragTapped: [{ type: i0.Output, args: ["dragTapped"] }], dragStarted: [{ type: i0.Output, args: ["dragStarted"] }], dragMoved: [{ type: i0.Output, args: ["dragMoved"] }], dragEnded: [{ type: i0.Output, args: ["dragEnded"] }] } });
4979
4987
 
4988
+ /**
4989
+ * The `message` type a service worker must post for `onClick` to fire on the service-worker path,
4990
+ * where the click event is dispatched to the worker and never reaches the page.
4991
+ *
4992
+ * Nothing in the SDK can install this handler - a service worker's code is the app's. Add it to yours
4993
+ * to make `onClick` work on Android Chrome and installed iOS web apps:
4994
+ *
4995
+ * ```js
4996
+ * self.addEventListener('notificationclick', (event) => {
4997
+ * event.notification.close();
4998
+ *
4999
+ * event.waitUntil(
5000
+ * self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => {
5001
+ * for (const client of clients) {
5002
+ * client.postMessage({
5003
+ * type: 'et:notification-click',
5004
+ * tag: event.notification.tag,
5005
+ * data: event.notification.data,
5006
+ * action: event.action || undefined,
5007
+ * });
5008
+ * }
5009
+ * }),
5010
+ * );
5011
+ * });
5012
+ * ```
5013
+ */
5014
+ const NOTIFICATION_CLICK_MESSAGE_TYPE = 'et:notification-click';
5015
+
5016
+ const toNotificationOptions = (config, tag) => ({
5017
+ body: config.body,
5018
+ icon: config.icon,
5019
+ badge: config.badge,
5020
+ image: config.image,
5021
+ tag,
5022
+ data: config.data,
5023
+ lang: config.lang,
5024
+ dir: config.dir,
5025
+ silent: config.silent,
5026
+ requireInteraction: config.requireInteraction,
5027
+ renotify: config.renotify,
5028
+ vibrate: config.vibrate,
5029
+ timestamp: config.timestamp,
5030
+ actions: config.actions,
5031
+ });
5032
+ // The constructor rejects `actions` with a TypeError rather than ignoring them, so the page path gets
5033
+ // a copy without the options only a persistent notification understands.
5034
+ const toPageNotificationOptions = (options) => {
5035
+ const { actions, image, renotify, timestamp, vibrate, ...pageOptions } = options;
5036
+ return pageOptions;
5037
+ };
5038
+ const NOTIFICATIONS_DEF = /* @__PURE__ */ defineRootProvider(() => {
5039
+ const destroyRef = inject(DestroyRef);
5040
+ const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
5041
+ const isSupported = isBrowser && typeof Notification !== 'undefined';
5042
+ // Streams here outlive the call that created them, and `close()` can be called after teardown -
5043
+ // where `takeUntilDestroyed()` would throw rather than unsubscribe.
5044
+ const destroyed$ = new Subject();
5045
+ destroyRef.onDestroy(() => {
5046
+ destroyed$.next();
5047
+ destroyed$.complete();
5048
+ });
5049
+ const permission = signal(isSupported ? Notification.permission : 'unsupported', /* @ts-ignore */
5050
+ ...(ngDevMode ? [{ debugName: "permission" }] : /* istanbul ignore next */ []));
5051
+ if (isSupported) {
5052
+ // Chromium and Firefox report permission changes here, including a revoke made in site settings
5053
+ // while the tab is open. WebKit has no `notifications` descriptor and rejects the query.
5054
+ const permissionStatus$ = navigator.permissions
5055
+ ? from(navigator.permissions.query({ name: 'notifications' })).pipe(catchError(() => EMPTY))
5056
+ : EMPTY;
5057
+ permissionStatus$
5058
+ .pipe(switchMap((status) => fromEvent(status, 'change').pipe(map(() => status.state), startWith(status.state))), map((state) => (state === 'prompt' ? 'default' : state)), tap((state) => permission.set(state)), takeUntil(destroyed$))
5059
+ .subscribe();
5060
+ const isDocumentVisible = injectIsDocumentVisible();
5061
+ // The fallback for engines without that descriptor: a permission changed in browser settings is
5062
+ // only observable by reading it again, and coming back to the tab is when that matters.
5063
+ effect(() => {
5064
+ if (!isDocumentVisible()) {
5065
+ return;
5066
+ }
5067
+ untracked(() => permission.set(Notification.permission));
5068
+ });
5069
+ }
5070
+ const request = () => defer(() => {
5071
+ if (!isSupported) {
5072
+ return of('unsupported');
5073
+ }
5074
+ // The prompt can only be shown once - after that only the user can change it in site settings.
5075
+ if (Notification.permission !== 'default') {
5076
+ return of(Notification.permission);
5077
+ }
5078
+ return from(new Promise((resolve) => {
5079
+ // WebKit only gained the promise-returning form in Safari 16 and hands the result to the
5080
+ // deprecated callback before that. Passing both is spec-legal; the later resolve is a no-op.
5081
+ const requested = Notification.requestPermission(resolve);
5082
+ requested?.then(resolve, () => resolve(Notification.permission));
5083
+ }));
5084
+ }).pipe(tap((state) => permission.set(state)));
5085
+ let nextTagId = 0;
5086
+ const clickHandlers = new Map();
5087
+ const openCloseFns = new Set();
5088
+ let isClickRelayAttached = false;
5089
+ const attachClickRelay = () => {
5090
+ const serviceWorker = navigator.serviceWorker;
5091
+ if (isClickRelayAttached || !serviceWorker) {
5092
+ return;
5093
+ }
5094
+ isClickRelayAttached = true;
5095
+ fromEvent(serviceWorker, 'message')
5096
+ .pipe(map((event) => event.data), filter((message) => message?.type === NOTIFICATION_CLICK_MESSAGE_TYPE), tap((message) => clickHandlers.get(message.tag)?.({ tag: message.tag, data: message.data, action: message.action })), takeUntil(destroyed$))
5097
+ .subscribe();
5098
+ };
5099
+ // `getRegistration()` rather than `ready`: `ready` never settles in an app without a service
5100
+ // worker, which would leave every `shown$` hanging instead of reporting 'unavailable'.
5101
+ const serviceWorkerRegistration = () => defer(() => navigator.serviceWorker
5102
+ ? from(navigator.serviceWorker.getRegistration()).pipe(catchError(() => of(undefined)))
5103
+ : of(undefined));
5104
+ const closePersistentNotifications = (tag) => serviceWorkerRegistration().pipe(switchMap((registration) => registration
5105
+ ? // Firefox rejects getNotifications() when the worker is not the one that showed them.
5106
+ from(registration.getNotifications(tag ? { tag } : undefined)).pipe(catchError(() => of([])))
5107
+ : of([])), tap((notifications) => notifications.forEach((notification) => notification.close())));
5108
+ const show = (config) => {
5109
+ const tag = config.tag ?? `et-notification-${++nextTagId}`;
5110
+ const options = toNotificationOptions(config, tag);
5111
+ const path = config.path ?? 'auto';
5112
+ // Actions only redirect a notification that has not been pinned to a path - `path: 'page'` is a
5113
+ // caller saying they would rather have it without the buttons than not at all.
5114
+ const needsPersistent = path === 'auto' && !!config.actions?.length;
5115
+ const closed$ = new Subject();
5116
+ let isClosed = false;
5117
+ let pageNotification = null;
5118
+ const close = () => {
5119
+ if (isClosed) {
5120
+ return;
5121
+ }
5122
+ isClosed = true;
5123
+ closed$.next();
5124
+ closed$.complete();
5125
+ clickHandlers.delete(tag);
5126
+ openCloseFns.delete(close);
5127
+ pageNotification?.close();
5128
+ // A no-op unless this notification took the persistent path.
5129
+ closePersistentNotifications(tag).pipe(takeUntil(destroyed$)).subscribe();
5130
+ };
5131
+ const showViaPage = () => {
5132
+ let notification;
5133
+ try {
5134
+ notification = new Notification(config.title, toPageNotificationOptions(options));
5135
+ }
5136
+ catch {
5137
+ // How Android Chrome says "persistent notifications only" - there is no feature flag to test.
5138
+ return 'unavailable';
5139
+ }
5140
+ pageNotification = notification;
5141
+ notification.onclick = (event) => config.onClick?.({ tag, data: config.data, event });
5142
+ notification.onclose = () => {
5143
+ // The user dismissed it - forget the ref so `closeAll()` has nothing stale to walk.
5144
+ openCloseFns.delete(close);
5145
+ config.onClose?.();
5146
+ };
5147
+ notification.onshow = () => config.onShow?.();
5148
+ notification.onerror = () => config.onError?.();
5149
+ if (isClosed) {
5150
+ notification.close();
5151
+ return 'unavailable';
5152
+ }
5153
+ return 'page';
5154
+ };
5155
+ const showViaServiceWorker = () => serviceWorkerRegistration().pipe(switchMap((registration) => {
5156
+ if (!registration || isClosed) {
5157
+ return of('unavailable');
5158
+ }
5159
+ if (config.onClick) {
5160
+ clickHandlers.set(tag, config.onClick);
5161
+ attachClickRelay();
5162
+ }
5163
+ return from(registration.showNotification(config.title, options)).pipe(switchMap(() => isClosed
5164
+ ? // Closed while the worker was still putting it up - take back what just appeared.
5165
+ closePersistentNotifications(tag).pipe(map(() => 'unavailable'))
5166
+ : of('service-worker')), catchError(() => {
5167
+ clickHandlers.delete(tag);
5168
+ return of('unavailable');
5169
+ }));
5170
+ }));
5171
+ const shown$ = defer(() => {
5172
+ // Permission is never requested here - an app that wants the prompt calls `request()`.
5173
+ if (!isSupported || Notification.permission !== 'granted' || isClosed) {
5174
+ return of('unavailable');
5175
+ }
5176
+ if (path === 'service-worker' || needsPersistent) {
5177
+ return showViaServiceWorker();
5178
+ }
5179
+ const pagePath = showViaPage();
5180
+ if (pagePath !== 'unavailable' || path === 'page') {
5181
+ return of(pagePath);
5182
+ }
5183
+ return showViaServiceWorker();
5184
+ }).pipe(tap((deliveryPath) => {
5185
+ if (deliveryPath === 'unavailable') {
5186
+ openCloseFns.delete(close);
5187
+ }
5188
+ }),
5189
+ // Shown once, replayed to every later subscriber - `refCount: false` keeps the result after
5190
+ // the eager subscription below has completed.
5191
+ shareReplay({ bufferSize: 1, refCount: false }));
5192
+ openCloseFns.add(close);
5193
+ // `show()` is imperative: the notification appears whether or not anyone subscribes.
5194
+ shown$.pipe(takeUntil(destroyed$)).subscribe();
5195
+ if (config.autoClose) {
5196
+ shown$
5197
+ .pipe(filter((deliveryPath) => deliveryPath !== 'unavailable'), switchMap(() => timer(config.autoClose ?? 0)), tap(() => close()), takeUntil(closed$), takeUntil(destroyed$))
5198
+ .subscribe();
5199
+ }
5200
+ return { tag, shown$, close };
5201
+ };
5202
+ const closeAll = () => {
5203
+ for (const close of Array.from(openCloseFns)) {
5204
+ close();
5205
+ }
5206
+ closePersistentNotifications().pipe(takeUntil(destroyed$)).subscribe();
5207
+ };
5208
+ destroyRef.onDestroy(() => {
5209
+ clickHandlers.clear();
5210
+ openCloseFns.clear();
5211
+ });
5212
+ return { isSupported, permission: permission.asReadonly(), request, show, closeAll };
5213
+ }, { name: 'Notifications' });
5214
+ const provideNotifications = /* @__PURE__ */ toProvideFn(NOTIFICATIONS_DEF);
5215
+ const injectNotifications = /* @__PURE__ */ toInjectFn(NOTIFICATIONS_DEF);
5216
+
4980
5217
  const FOCUSABLE_SELECTOR = /* @__PURE__ */ [
4981
5218
  'a[href]',
4982
5219
  'area[href]',
@@ -9019,5 +9256,5 @@ const createUnsavedChangesGuard = (config) => {
9019
9256
  * Generated bundle index. Do not edit.
9020
9257
  */
9021
9258
 
9022
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MustMatch, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, Validators, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, resetPositioningStyles, resolveAppRootColorProvider, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
9259
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, Validators, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectNotifications, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, resetPositioningStyles, resolveAppRootColorProvider, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
9023
9260
  //# sourceMappingURL=ethlete-core.mjs.map