@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 +14 -0
- package/fesm2022/ethlete-core.mjs +179 -36
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/generators/generators.json +5 -0
- package/generators/migrate-color-theme-variants/color-theme-variants.js +136 -0
- package/generators/migrate-color-theme-variants/migration.js +46 -0
- package/generators/migrate-color-theme-variants/schema.json +26 -0
- package/generators/tailwind-4-surface-theme/generator.js +10 -0
- package/package.json +1 -1
- package/types/ethlete-core.d.ts +59 -19
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
|
|
9787
|
-
*
|
|
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
|
-
*
|
|
9839
|
-
*
|
|
9840
|
-
|
|
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
|
|
9956
|
+
const rootSurface = injectRootSurfaceTheme();
|
|
9850
9957
|
return computed(() => {
|
|
9851
|
-
const
|
|
9852
|
-
const
|
|
9853
|
-
const
|
|
9854
|
-
if (
|
|
9855
|
-
return
|
|
9856
|
-
|
|
9857
|
-
|
|
9858
|
-
|
|
9859
|
-
|
|
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
|
-
|
|
9963
|
-
|
|
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.
|
|
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.
|
|
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
|
|
10075
|
-
if (
|
|
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
|
-
|
|
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
|
|
10146
|
-
return computed(() => provider?.surfaceType() ??
|
|
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
|
-
*
|
|
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
|
|
10160
|
-
return computed(() => provider?.activeTheme() ??
|
|
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.
|
|
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
|