@ethlete/core 5.0.0-next.63 → 5.0.0-next.64

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.64
4
+
5
+ ### Minor Changes
6
+
7
+ - Theming: add the `migrate-color-theme-variants` generator. Run `nx g @ethlete/core:migrate-color-theme-variants` to rewrite the deprecated `colorTheme` and `semanticColorThemes` of your surface themes into `colorThemeVariants`.
8
+ - Theming: `provideColorScheme()` now swaps the default accent of the root surface through its `colorThemeVariants`, so the app root needs no `[etProvideSurface]` for it.
9
+ - Theming: add `SurfaceTheme.colorThemeVariants`, which swaps any chosen accent for a version that reads well on the surface, and deprecate `colorTheme` and `semanticColorThemes`.
10
+ - `provideColorScheme()` and `injectColorScheme().setMode()` switch between the default light and dark surface with an `et-scheme--*` class on `<html>`; regenerate the surface CSS to get the rule.
11
+
12
+ ### Patch Changes
13
+
14
+ - Surface and color directives no longer bundle the `provideColorScheme()` state (media query observer and root class painting) into apps that never call it.
15
+ - Theming: a surface now paints its swapped accent when it sits outside its parent surface in the DOM. A dialog or alert dialog opened with an opener from a light surface used the default accent instead of the variant.
16
+
3
17
  ## 5.0.0-next.63
4
18
 
5
19
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { assertInInjectionContext, inject, DestroyRef, ElementRef, TemplateRef, InjectionToken, booleanAttribute, QueryList, RendererFactory2, RendererStyleFlags2, isSignal, DOCUMENT, signal, linkedSignal, isDevMode, computed, afterNextRender, effect, untracked, ApplicationRef, runInInjectionContext, NgZone, Injector, numberAttribute, PLATFORM_ID, afterRenderEffect, EnvironmentInjector, createComponent, ViewEncapsulation, Component, Directive, model, ViewContainerRef, input, CSP_NONCE, provideEnvironmentInitializer, output, createEnvironmentInjector, Pipe, afterEveryRender } from '@angular/core';
2
+ import { assertInInjectionContext, inject, DestroyRef, ElementRef, TemplateRef, InjectionToken, booleanAttribute, QueryList, RendererFactory2, RendererStyleFlags2, isSignal, DOCUMENT, signal, linkedSignal, isDevMode, computed, afterNextRender, effect, untracked, ApplicationRef, runInInjectionContext, NgZone, Injector, numberAttribute, PLATFORM_ID, afterRenderEffect, EnvironmentInjector, createComponent, ViewEncapsulation, Component, Directive, model, ViewContainerRef, input, CSP_NONCE, provideEnvironmentInitializer, output, createEnvironmentInjector, Pipe, makeEnvironmentProviders, afterEveryRender } from '@angular/core';
3
3
  import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
4
4
  import { Subject, fromEvent, switchMap, startWith, of, defer, from, map, catchError, timer, takeUntil, tap, pairwise, debounceTime, merge, distinctUntilChanged, EMPTY, expand, skip, take, filter, BehaviorSubject, combineLatest, Observable, isObservable, firstValueFrom, defaultIfEmpty, concatMap, concat, finalize, exhaustMap, share, shareReplay, ReplaySubject } from 'rxjs';
5
5
  import { FormGroup, FormArray, FormControl } from '@angular/forms';
@@ -9693,6 +9693,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
9693
9693
  }]
9694
9694
  }], ctorParameters: () => [] });
9695
9695
 
9696
+ const COLOR_SCHEME_TYPE = new InjectionToken('ColorSchemeType');
9697
+
9696
9698
  const TOLERANCE_PX = 0.5;
9697
9699
  const readFontSizePx = (view, element) => {
9698
9700
  const match = /^(\d+(?:\.\d+)?)px$/.exec(view.getComputedStyle(element).fontSize ?? '');
@@ -9783,8 +9785,8 @@ const provideSurfaceThemesWithTailwind4 = (themes, prefix = 'et') => [
9783
9785
  /**
9784
9786
  * Inject the registered `isDefault` surface theme of a `type` - the surface an app renders on
9785
9787
  * where nothing scopes one. Without a `type`, resolves the default of the only surface type the
9786
- * app registers; an app registering both must name the one it means, since which of the two
9787
- * `:root` paints is a `prefers-color-scheme` decision. `null` when neither applies.
9788
+ * app registers; an app registering both must name the one it means. `null` when neither applies.
9789
+ * For the theme the root paints right now, use `injectRootSurfaceTheme()`.
9788
9790
  */
9789
9791
  const injectDefaultSurfaceTheme = (type) => {
9790
9792
  const defaults = injectSurfaceThemes({ optional: true })?.filter((theme) => theme.isDefault) ?? [];
@@ -9793,6 +9795,92 @@ const injectDefaultSurfaceTheme = (type) => {
9793
9795
  return defaults.length === 1 ? (defaults[0] ?? null) : null;
9794
9796
  };
9795
9797
 
9798
+ const findRootSurfaceTheme = (defaults, type) => {
9799
+ if (defaults.length <= 1)
9800
+ return defaults[0] ?? null;
9801
+ return defaults.find((theme) => theme.type === type) ?? null;
9802
+ };
9803
+ const COLOR_SCHEME_DEF = /* @__PURE__ */ defineProvider(() => {
9804
+ const root = inject(DOCUMENT).documentElement;
9805
+ const prefix = injectSurfaceThemesPrefix({ optional: true }) || 'et';
9806
+ const prefersDark = injectBreakpointObserver().observeMediaQuery('(prefers-color-scheme: dark)');
9807
+ const mode = signal('system', /* @ts-ignore */
9808
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
9809
+ const surfaceDefaults = injectSurfaceThemes({ optional: true })?.filter((theme) => theme.isDefault) ?? [];
9810
+ const colorThemes = injectColorThemes({ optional: true });
9811
+ const colorPrefix = injectColorThemesPrefix({ optional: true }) || 'et';
9812
+ const type = computed(() => {
9813
+ const current = mode();
9814
+ if (current !== 'system')
9815
+ return current;
9816
+ return prefersDark() ? 'dark' : 'light';
9817
+ }, /* @ts-ignore */
9818
+ ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
9819
+ const rootSurface = computed(() => findRootSurfaceTheme(surfaceDefaults, type()), /* @ts-ignore */
9820
+ ...(ngDevMode ? [{ debugName: "rootSurface" }] : /* istanbul ignore next */ []));
9821
+ const rootColorClass = computed(() => {
9822
+ const chosen = colorThemes?.find((theme) => theme.isDefault)?.name;
9823
+ if (!chosen)
9824
+ return null;
9825
+ const variant = resolveColorThemeVariant(rootSurface(), chosen, colorThemes);
9826
+ return variant === chosen ? null : `${colorPrefix}-color--${createCssColorThemeName(variant)}`;
9827
+ }, /* @ts-ignore */
9828
+ ...(ngDevMode ? [{ debugName: "rootColorClass" }] : /* istanbul ignore next */ []));
9829
+ let paintedColorClass = null;
9830
+ const clearColorClass = () => {
9831
+ if (paintedColorClass)
9832
+ root.classList.remove(paintedColorClass);
9833
+ paintedColorClass = null;
9834
+ };
9835
+ effect(() => {
9836
+ const next = rootColorClass();
9837
+ clearColorClass();
9838
+ if (next)
9839
+ root.classList.add(next);
9840
+ paintedColorClass = next;
9841
+ });
9842
+ const clearClasses = () => root.classList.remove(`${prefix}-scheme--light`, `${prefix}-scheme--dark`);
9843
+ const setMode = (next) => {
9844
+ clearClasses();
9845
+ if (next !== 'system')
9846
+ root.classList.add(`${prefix}-scheme--${next}`);
9847
+ mode.set(next);
9848
+ };
9849
+ inject(DestroyRef).onDestroy(() => {
9850
+ clearClasses();
9851
+ clearColorClass();
9852
+ });
9853
+ return { mode: mode.asReadonly(), type, rootSurface, setMode };
9854
+ }, { name: 'Color Scheme' });
9855
+ const provideColorSchemeState = /* @__PURE__ */ toProvideFn(COLOR_SCHEME_DEF);
9856
+ /**
9857
+ * Inject the app's color scheme: `mode()` is what the app asked for, `type()` the surface type the
9858
+ * root paints, `rootSurface()` the default surface theme of that type, and `setMode()` switches it.
9859
+ * Needs `provideColorScheme()`.
9860
+ */
9861
+ const injectColorScheme = /* @__PURE__ */ toInjectFn(COLOR_SCHEME_DEF);
9862
+ /**
9863
+ * Lets the app switch between its default light and dark surface with a class on `<html>`, instead of
9864
+ * only following `prefers-color-scheme`. It also paints the root surface's `colorThemeVariants` entry for the
9865
+ * default accent on `<html>`. Add it to the application config, next to
9866
+ * `provideSurfaceThemesWithTailwind4()`.
9867
+ */
9868
+ const provideColorScheme = (config) => makeEnvironmentProviders([
9869
+ provideColorSchemeState(),
9870
+ { provide: COLOR_SCHEME_TYPE, useFactory: () => injectColorScheme().type },
9871
+ provideEnvironmentInitializer(() => injectColorScheme().setMode(config?.mode ?? 'system')),
9872
+ ]);
9873
+ /**
9874
+ * Inject a signal of the default surface theme the root paints where nothing scopes one. If the app
9875
+ * registers a default for both surface types, it follows `injectColorScheme()`, and is `null` without
9876
+ * `provideColorScheme()`.
9877
+ */
9878
+ const injectRootSurfaceTheme = () => {
9879
+ const defaults = injectSurfaceThemes({ optional: true })?.filter((theme) => theme.isDefault) ?? [];
9880
+ const colorSchemeType = inject(COLOR_SCHEME_TYPE, { optional: true });
9881
+ return computed(() => findRootSurfaceTheme(defaults, colorSchemeType?.()));
9882
+ };
9883
+
9796
9884
  /**
9797
9885
  * Reserved color name. Resolves the color tokens from the ambient surface's neutral swatch
9798
9886
  * (`SurfaceTheme['interactionColor']`) instead of a registered accent, so a secondary action can
@@ -9835,9 +9923,28 @@ const findColorThemeByType = (themes, type, caller) => {
9835
9923
  };
9836
9924
  const injectColorThemeByType = (type) => findColorThemeByType(injectColorThemes({ optional: true }), type, 'injectColorThemeByType');
9837
9925
  /**
9838
- * A signal of the color theme for `type` on the surface this element renders on: the theme the nearest
9839
- * surface names in `semanticColorThemes`, else the first registered theme of that `type`. Reading it throws
9840
- * when the app registered no theme of that `type`, so read it only for a state that renders.
9926
+ * The color theme name that draws `chosenName` on `surface`: the surface's `colorThemeVariants` entry for it,
9927
+ * else `chosenName` itself. Always pass the chosen accent, never an already swapped one.
9928
+ */
9929
+ const resolveColorThemeVariant = (surface, chosenName, themes) => {
9930
+ if (!surface || chosenName === SURFACE_COLOR)
9931
+ return chosenName;
9932
+ const variants = surface.colorThemeVariants;
9933
+ const variant = variants?.[chosenName];
9934
+ if (variant)
9935
+ return variant;
9936
+ const chosen = themes?.find((t) => t.name === chosenName);
9937
+ const semantic = chosen?.type ? surface.semanticColorThemes?.[chosen.type] : undefined;
9938
+ if (semantic)
9939
+ return semantic;
9940
+ if (surface.colorTheme && chosen?.isDefault)
9941
+ return surface.colorTheme;
9942
+ return chosenName;
9943
+ };
9944
+ /**
9945
+ * A signal of the color theme for `type` on the surface this element renders on: the first registered theme
9946
+ * of that `type`, swapped for the nearest surface's `colorThemeVariants` entry. Reading it throws when the app
9947
+ * registered no theme of that `type`, so read it only for a state that renders.
9841
9948
  *
9842
9949
  * @example
9843
9950
  * protected successTheme = injectSemanticColorTheme('success');
@@ -9846,17 +9953,20 @@ const injectColorThemeByType = (type) => findColorThemeByType(injectColorThemes(
9846
9953
  const injectSemanticColorTheme = (type) => {
9847
9954
  const themes = injectColorThemes({ optional: true });
9848
9955
  const surfaceProvider = inject(SURFACE_PROVIDER, { optional: true });
9849
- const defaultSurface = injectDefaultSurfaceTheme();
9956
+ const rootSurface = injectRootSurfaceTheme();
9850
9957
  return computed(() => {
9851
- const surface = surfaceProvider?.activeTheme() ?? defaultSurface;
9852
- const mappedName = surface?.semanticColorThemes?.[type];
9853
- const mapped = mappedName ? themes?.find((t) => t.name === mappedName) : undefined;
9854
- if (mapped)
9855
- return mapped;
9856
- if (mappedName && isDevMode()) {
9857
- console.error(`[injectSemanticColorTheme] Surface theme "${surface?.name}" maps "${type}" to the color theme "${mappedName}", which is not registered. Add it to provideColorThemesWithTailwind4().`);
9858
- }
9859
- return findColorThemeByType(themes, type, 'injectSemanticColorTheme');
9958
+ const chosen = findColorThemeByType(themes, type, 'injectSemanticColorTheme');
9959
+ const surface = surfaceProvider?.activeTheme() ?? rootSurface();
9960
+ const variantName = resolveColorThemeVariant(surface, chosen.name, themes);
9961
+ if (variantName === chosen.name)
9962
+ return chosen;
9963
+ const variant = themes?.find((t) => t.name === variantName);
9964
+ if (variant)
9965
+ return variant;
9966
+ if (isDevMode()) {
9967
+ console.error(`[injectSemanticColorTheme] Surface theme "${surface?.name}" maps "${type}" to the color theme "${variantName}", which is not registered. Add it to provideColorThemesWithTailwind4().`);
9968
+ }
9969
+ return chosen;
9860
9970
  });
9861
9971
  };
9862
9972
  /** @deprecated Use `injectSemanticColorTheme('error')`, which follows the surface the element renders on. */
@@ -9907,6 +10017,7 @@ class ProvideColorDirective {
9907
10017
  this.themes = injectColorThemes({ optional: true });
9908
10018
  this.prefix = injectColorThemesPrefix({ optional: true });
9909
10019
  this.injector = inject(Injector);
10020
+ this.rootSurfaceTheme = injectRootSurfaceTheme();
9910
10021
  this.parentProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });
9911
10022
  this.appRef = inject(ApplicationRef);
9912
10023
  this.currentProviderSync = null;
@@ -9957,12 +10068,25 @@ class ProvideColorDirective {
9957
10068
  return createCssColorThemeName(value);
9958
10069
  }, /* @ts-ignore */
9959
10070
  ...(ngDevMode ? [{ debugName: "colorName" }] : /* istanbul ignore next */ []));
10071
+ this.paintedColorName = computed(() => {
10072
+ const raw = this.effectiveColor();
10073
+ const value = typeof raw === 'object' && raw !== null ? raw.name : raw;
10074
+ if (!this.colorName() || !value)
10075
+ return;
10076
+ const surface = this.injector.get(SURFACE_PROVIDER, null)?.activeTheme() ?? this.rootSurfaceTheme();
10077
+ const variant = resolveColorThemeVariant(surface, value, this.themes);
10078
+ if (variant === value)
10079
+ return this.colorName();
10080
+ if (isDevMode() && !this.themes?.some((theme) => theme.name === variant)) {
10081
+ console.error(`Surface theme ${surface?.name} names the color theme ${variant}, which does not exist. Please make sure to add it to provideColorThemesWithTailwind4()`);
10082
+ }
10083
+ return createCssColorThemeName(variant);
10084
+ }, /* @ts-ignore */
10085
+ ...(ngDevMode ? [{ debugName: "paintedColorName" }] : /* istanbul ignore next */ []));
9960
10086
  this.themeClass = computed(() => {
9961
10087
  const prefix = this.prefix || 'et';
9962
- if (this.colorName()) {
9963
- return `${prefix}-color--${this.colorName()}`;
9964
- }
9965
- return `${prefix}-color--inherited`;
10088
+ const name = this.paintedColorName();
10089
+ return name ? `${prefix}-color--${name}` : `${prefix}-color--inherited`;
9966
10090
  }, /* @ts-ignore */
9967
10091
  ...(ngDevMode ? [{ debugName: "themeClass" }] : /* istanbul ignore next */ []));
9968
10092
  }
@@ -10021,10 +10145,13 @@ class ProvideSurfaceDirective {
10021
10145
  this.prefix = injectSurfaceThemesPrefix({ optional: true });
10022
10146
  this.injector = inject(Injector);
10023
10147
  this.parentProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });
10024
- this.defaultTheme = injectDefaultSurfaceTheme();
10148
+ this.hostElement = injectHostElement();
10149
+ this.rootTheme = injectRootSurfaceTheme();
10150
+ this.hasColorScheme = !!inject(COLOR_SCHEME_TYPE, { optional: true });
10025
10151
  this.colorThemes = injectColorThemes({ optional: true });
10026
10152
  this.colorPrefix = injectColorThemesPrefix({ optional: true });
10027
10153
  this.colorProvider = inject(COLOR_PROVIDER, { optional: true });
10154
+ this.ownColorProvider = inject(COLOR_PROVIDER, { optional: true, self: true });
10028
10155
  this.currentProviderSync = null;
10029
10156
  this.forcedSurface = signal(FORCED_SURFACE_UNSET, /* @ts-ignore */
10030
10157
  ...(ngDevMode ? [{ debugName: "forcedSurface" }] : /* istanbul ignore next */ []));
@@ -10044,7 +10171,7 @@ class ProvideSurfaceDirective {
10044
10171
  // Only the outermost provider adopts the app default. A nested one left unset must keep
10045
10172
  // resolving to `null` so it reports the surface it inherits instead of resetting elevation.
10046
10173
  if (!value)
10047
- return this.parentProvider ? null : this.defaultTheme;
10174
+ return this.parentProvider ? null : this.rootTheme();
10048
10175
  const theme = this.themes.find((t) => t.name === value) ?? null;
10049
10176
  if (isDevMode() && !theme) {
10050
10177
  console.error(`Surface theme ${value} does not exist. Please make sure to add it to provideSurfaceThemesWithTailwind4()`);
@@ -10071,13 +10198,25 @@ class ProvideSurfaceDirective {
10071
10198
  }, /* @ts-ignore */
10072
10199
  ...(ngDevMode ? [{ debugName: "surfaceName" }] : /* istanbul ignore next */ []));
10073
10200
  this.colorThemeClass = computed(() => {
10074
- const colorTheme = this.resolvedTheme()?.colorTheme;
10075
- if (!colorTheme || this.colorProvider?.resolvedColor())
10201
+ const own = this.ownColorProvider?.effectiveColor();
10202
+ if (typeof own === 'object' && own !== null ? own.name : own)
10203
+ return null;
10204
+ const resolved = this.colorProvider?.resolvedColor();
10205
+ const chosen = (typeof resolved === 'object' && resolved !== null ? resolved.name : resolved) ||
10206
+ this.colorThemes?.find((theme) => theme.isDefault)?.name;
10207
+ if (!chosen)
10208
+ return null;
10209
+ const variant = resolveColorThemeVariant(this.activeTheme(), chosen, this.colorThemes);
10210
+ // An overlay pane's DI parent surface is not its DOM ancestor, so the pane cannot inherit the parent's class.
10211
+ const inheritsFromParent = !this.parentProvider || this.parentProvider.hostElement.contains(this.hostElement);
10212
+ if (inheritsFromParent &&
10213
+ variant === resolveColorThemeVariant(this.inheritedSurfaceTheme(), chosen, this.colorThemes)) {
10076
10214
  return null;
10077
- if (isDevMode() && !this.colorThemes?.some((theme) => theme.name === colorTheme)) {
10078
- console.error(`Surface theme ${this.resolvedTheme()?.name} names the color theme ${colorTheme}, which does not exist. Please make sure to add it to provideColorThemesWithTailwind4()`);
10079
10215
  }
10080
- return `${this.colorPrefix || 'et'}-color--${createCssColorThemeName(colorTheme)}`;
10216
+ if (isDevMode() && !this.colorThemes?.some((theme) => theme.name === variant)) {
10217
+ console.error(`Surface theme ${this.activeTheme()?.name} names the color theme ${variant}, which does not exist. Please make sure to add it to provideColorThemesWithTailwind4()`);
10218
+ }
10219
+ return `${this.colorPrefix || 'et'}-color--${createCssColorThemeName(variant)}`;
10081
10220
  }, /* @ts-ignore */
10082
10221
  ...(ngDevMode ? [{ debugName: "colorThemeClass" }] : /* istanbul ignore next */ []));
10083
10222
  this.surfaceClass = computed(() => {
@@ -10090,6 +10229,11 @@ class ProvideSurfaceDirective {
10090
10229
  }, /* @ts-ignore */
10091
10230
  ...(ngDevMode ? [{ debugName: "surfaceClass" }] : /* istanbul ignore next */ []));
10092
10231
  }
10232
+ inheritedSurfaceTheme() {
10233
+ if (this.parentProvider)
10234
+ return this.parentProvider.activeTheme();
10235
+ return this.hasColorScheme ? this.rootTheme() : null;
10236
+ }
10093
10237
  syncWithProvider(provider) {
10094
10238
  this.currentProviderSync?.destroy();
10095
10239
  runInInjectionContext(this.injector, () => {
@@ -10142,22 +10286,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
10142
10286
  */
10143
10287
  const injectSurfaceType = () => {
10144
10288
  const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });
10145
- const defaultType = injectDefaultSurfaceTheme()?.type ?? null;
10146
- return computed(() => provider?.surfaceType() ?? defaultType);
10289
+ const rootTheme = injectRootSurfaceTheme();
10290
+ return computed(() => provider?.surfaceType() ?? rootTheme()?.type ?? null);
10147
10291
  };
10148
10292
  /**
10149
10293
  * Inject a signal containing the surface theme the current subtree renders on - the theme in
10150
10294
  * effect on the surrounding surface provider, or the app's default surface where nothing provides
10151
10295
  * one. Use it to derive an elevation relative to the surrounding surface.
10152
10296
  *
10153
- * `null` where the app registers no surface themes, or registers a default per surface type -
10154
- * which of those two `:root` paints is a `prefers-color-scheme` decision, so it cannot be
10155
- * resolved at runtime.
10297
+ * `null` where the app registers no surface themes, or registers a default per surface type
10298
+ * without `provideColorScheme()`.
10156
10299
  */
10157
10300
  const injectParentSurface = () => {
10158
10301
  const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });
10159
- const defaultTheme = injectDefaultSurfaceTheme();
10160
- return computed(() => provider?.activeTheme() ?? defaultTheme);
10302
+ const rootTheme = injectRootSurfaceTheme();
10303
+ return computed(() => provider?.activeTheme() ?? rootTheme());
10161
10304
  };
10162
10305
 
10163
10306
  let uniqueId = 0;
@@ -10579,11 +10722,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
10579
10722
 
10580
10723
  // Generated from package.json by tools/scripts/generate-version.js - do not edit.
10581
10724
  /** The version of `@ethlete/core` this build was cut from. */
10582
- const CORE_VERSION = '5.0.0-next.63';
10725
+ const CORE_VERSION = '5.0.0-next.64';
10583
10726
 
10584
10727
  /**
10585
10728
  * Generated bundle index. Do not edit.
10586
10729
  */
10587
10730
 
10588
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, ANIMATION_ERROR_CODES, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, 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, ET_RESTORE_SCROLL, EasingTokensStylesComponent, EthleteValidators, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MARKDOWN_VERBATIM_ATTR, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_CONFIRM, UNSAVED_CHANGES_ERROR_CODES, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, VisuallyHiddenStylesComponent, 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, boolBreakpointTransform, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDestroy, createDocumentElementSignal, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createIsRenderedSignal, createLogger, createObjectUrlHandle, createPropertyBinding, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, 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, fetchDeployedBuildFingerprint$, 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, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, 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, injectParentSurface, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamAll, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectSemanticColorTheme, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceColorPalette, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElement, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isHTMLOrSVGElement, isKnockoutMatch, isObject, isOnHigherOverlayLayer, isSafeLinkUrl, isSafeUrl, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, mountEasingTokens, mountVisuallyHidden, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointTransform, onOverlayViewportInsetsChange, optionalBooleanAttribute, overlayViewportInsets, overlayViewportInsetsFor, ownsActiveElement, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesConfirm, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, reserveOverlayViewportSpace, resolveAppRootColorProvider, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalCountdown, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
10731
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, ANIMATION_ERROR_CODES, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, 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, ET_RESTORE_SCROLL, EasingTokensStylesComponent, EthleteValidators, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MARKDOWN_VERBATIM_ATTR, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_CONFIRM, UNSAVED_CHANGES_ERROR_CODES, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, VisuallyHiddenStylesComponent, 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, boolBreakpointTransform, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDestroy, createDocumentElementSignal, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createIsRenderedSignal, createLogger, createObjectUrlHandle, createPropertyBinding, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, 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, fetchDeployedBuildFingerprint$, 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, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorScheme, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, 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, injectParentSurface, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamAll, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRootSurfaceTheme, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectSemanticColorTheme, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceColorPalette, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElement, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isHTMLOrSVGElement, isKnockoutMatch, isObject, isOnHigherOverlayLayer, isSafeLinkUrl, isSafeUrl, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, mountEasingTokens, mountVisuallyHidden, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointTransform, onOverlayViewportInsetsChange, optionalBooleanAttribute, overlayViewportInsets, overlayViewportInsetsFor, ownsActiveElement, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorScheme, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesConfirm, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, reserveOverlayViewportSpace, resolveAppRootColorProvider, resolveColorThemeVariant, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalCountdown, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
10589
10732
  //# sourceMappingURL=ethlete-core.mjs.map