@ethlete/core 5.0.0-next.59 → 5.0.0-next.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import { formatFiles } from '@nx/devkit';
2
2
  import migrateColorNaming from './color-naming.js';
3
3
  import migrateCreateProvider from './create-provider.js';
4
+ import reportRemovedExports from './removed-exports.js';
4
5
  import migrateRouterStateService from './router-state-service.js';
5
6
  import migrateViewportService from './viewport-service.js';
6
7
  export default async function migrate(tree, schema) {
@@ -24,6 +25,10 @@ export default async function migrate(tree, schema) {
24
25
  console.log(' • Migrating theme → color naming...');
25
26
  await migrateColorNaming(tree);
26
27
  }
28
+ if (schema.reportRemovedExports !== false) {
29
+ console.log(' • Reporting removed exports...');
30
+ await reportRemovedExports(tree);
31
+ }
27
32
  if (!schema.skipFormat) {
28
33
  console.log(' • Formatting files...');
29
34
  await formatFiles(tree);
@@ -0,0 +1,93 @@
1
+ import * as ts from 'typescript';
2
+ const REMOVED_EXPORTS = new Map([
3
+ ...['Memo', 'MemoConfig', 'MemoResolver', 'MapLike'].map((name) => [name, 'the @Memo decorator']),
4
+ ...[
5
+ 'createProps',
6
+ 'createHostProps',
7
+ 'createPropHandlers',
8
+ 'createSetup',
9
+ 'createDependencyStash',
10
+ 'createElementDictionary',
11
+ 'bindProps',
12
+ 'unbindProps',
13
+ 'PropsDirective',
14
+ 'templateComputed',
15
+ 'ComponentType',
16
+ 'AnyTemplateType',
17
+ 'TemplateRefWithContext',
18
+ 'ComponentTypeWithInputs',
19
+ 'StringTemplate',
20
+ 'NgTemplateTemplate',
21
+ 'ComponentTemplate',
22
+ 'Props',
23
+ 'PropsAttachedElements',
24
+ 'PropsAttachedElementsInternal',
25
+ 'PropsInternal',
26
+ 'CreatePropsOptions',
27
+ 'HostProps',
28
+ 'PropHandlers',
29
+ 'BindPropsOptions',
30
+ 'UnbindPropsOptions',
31
+ ].map((name) => [name, 'the props module']),
32
+ ]);
33
+ const ET_PROPS_ATTRIBUTE = /\betProps\b/;
34
+ export default async function reportRemovedExports(tree) {
35
+ const findings = new Map();
36
+ function walkFiles(dir) {
37
+ for (const child of tree.children(dir)) {
38
+ if (child === 'node_modules')
39
+ continue;
40
+ const path = dir === '.' ? child : `${dir}/${child}`;
41
+ if (!tree.isFile(path)) {
42
+ walkFiles(path);
43
+ continue;
44
+ }
45
+ const messages = path.endsWith('.ts')
46
+ ? findRemovedImports(tree, path)
47
+ : path.endsWith('.html')
48
+ ? findEtPropsUsage(tree, path)
49
+ : [];
50
+ if (messages.length > 0)
51
+ findings.set(path, messages);
52
+ }
53
+ }
54
+ walkFiles('.');
55
+ if (findings.size === 0)
56
+ return;
57
+ console.log('\n⚠️ Manual migration required for the following files:');
58
+ findings.forEach((messages, file) => {
59
+ console.log(`\n📄 ${file}:`);
60
+ messages.forEach((message) => console.log(` - ${message}`));
61
+ });
62
+ }
63
+ function findRemovedImports(tree, filePath) {
64
+ const content = tree.read(filePath, 'utf-8');
65
+ if (!content || !content.includes('@ethlete/core'))
66
+ return [];
67
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
68
+ const messages = [];
69
+ for (const statement of sourceFile.statements) {
70
+ if (!ts.isImportDeclaration(statement) && !ts.isExportDeclaration(statement))
71
+ continue;
72
+ const specifier = statement.moduleSpecifier;
73
+ if (!specifier || !ts.isStringLiteral(specifier) || specifier.text !== '@ethlete/core')
74
+ continue;
75
+ const bindings = ts.isImportDeclaration(statement) ? statement.importClause?.namedBindings : statement.exportClause;
76
+ if (!bindings || ts.isNamespaceImport(bindings) || ts.isNamespaceExport(bindings))
77
+ continue;
78
+ for (const element of bindings.elements) {
79
+ const name = (element.propertyName ?? element.name).text;
80
+ const origin = REMOVED_EXPORTS.get(name);
81
+ if (origin) {
82
+ messages.push(`${name} was removed from @ethlete/core together with ${origin} and has no replacement.`);
83
+ }
84
+ }
85
+ }
86
+ return messages;
87
+ }
88
+ function findEtPropsUsage(tree, filePath) {
89
+ const content = tree.read(filePath, 'utf-8');
90
+ if (!content || !ET_PROPS_ATTRIBUTE.test(content))
91
+ return [];
92
+ return ['[etProps] (PropsDirective) was removed from @ethlete/core together with the props module.'];
93
+ }
@@ -28,6 +28,11 @@
28
28
  "type": "boolean",
29
29
  "description": "Migrate theme naming to color naming (ProvideThemeDirective -> ProvideColorDirective, etc.)",
30
30
  "default": true
31
+ },
32
+ "reportRemovedExports": {
33
+ "type": "boolean",
34
+ "description": "List imports of exports removed in v5 without a replacement (Memo, the props module)",
35
+ "default": true
31
36
  }
32
37
  },
33
38
  "required": []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/core",
3
- "version": "5.0.0-next.59",
3
+ "version": "5.0.0-next.60",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, AfterViewInit, Signal, ElementRef, QueryList, WritableSignal, InputSignalWithTransform, Provider, RendererStyleFlags2, Type, ComponentRef, Injector, ViewContainerRef, EnvironmentProviders, Binding, InjectOptions, TemplateRef, InputSignal, PipeTransform, TrackByFunction, ApplicationRef } from '@angular/core';
2
+ import { InjectionToken, AfterViewInit, Signal, ElementRef, QueryList, WritableSignal, InputSignalWithTransform, Provider, RendererStyleFlags2, Type, ComponentRef, Injector, ViewContainerRef, EnvironmentProviders, Binding, InjectOptions, StaticProvider, TemplateRef, InputSignal, PipeTransform, TrackByFunction, ApplicationRef } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, BehaviorSubject, Subject } from 'rxjs';
5
5
  import * as _ethlete_core from '@ethlete/core';
@@ -276,9 +276,9 @@ type AppUpdates = {
276
276
  */
277
277
  reload: () => void;
278
278
  };
279
- declare const provideAppUpdatesConfig: (valueOverride?: Partial<AppUpdatesConfig> | undefined) => _angular_core.Provider[];
279
+ declare const provideAppUpdatesConfig: (valueOverride?: Partial<AppUpdatesConfig> | undefined) => _angular_core.StaticProvider[];
280
280
  declare const injectAppUpdatesConfig: _ethlete_core.InjectFn<AppUpdatesConfig>;
281
- declare const provideAppUpdatesInstance: () => _angular_core.Provider[];
281
+ declare const provideAppUpdatesInstance: () => _angular_core.StaticProvider[];
282
282
  declare const injectAppUpdates: _ethlete_core.InjectFn<AppUpdates>;
283
283
  /**
284
284
  * Keeps a long-lived tab from breaking on a deploy.
@@ -299,7 +299,7 @@ declare const injectAppUpdates: _ethlete_core.InjectFn<AppUpdates>;
299
299
  * Read {@link AppUpdates.isAvailable} to offer a reload, and {@link AppUpdates.isRequired} for the
300
300
  * case where this build is already broken and a reload is the only way on.
301
301
  */
302
- declare const provideAppUpdates: (config?: Partial<AppUpdatesConfig>) => (_angular_core.Provider | _angular_core.EnvironmentProviders)[];
302
+ declare const provideAppUpdates: (config?: Partial<AppUpdatesConfig>) => (_angular_core.StaticProvider | _angular_core.EnvironmentProviders)[];
303
303
 
304
304
  /**
305
305
  * Identifies the build a document boots from, by its entry script filenames. Those carry a content
@@ -381,7 +381,7 @@ declare class ScrollObserverStartDirective {
381
381
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ScrollObserverStartDirective, "[etScrollObserverStart]", never, {}, {}, never, never, true, never>;
382
382
  }
383
383
 
384
- type SignalElementBindingComplexType = HTMLElement | ElementRef<HTMLElement> | QueryList<ElementRef<HTMLElement> | HTMLElement> | Array<ElementRef<HTMLElement> | HTMLElement> | null | undefined;
384
+ type SignalElementBindingComplexType = HTMLElement | ElementRef<HTMLElement> | QueryList<ElementRef<HTMLElement> | HTMLElement> | ReadonlyArray<ElementRef<HTMLElement> | HTMLElement> | null | undefined;
385
385
  type SignalElementBindingType = HTMLElement | ElementRef<HTMLElement> | Observable<SignalElementBindingComplexType> | Signal<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement> | ElementSignal;
386
386
  type ElementSignal = Signal<{
387
387
  currentElements: HTMLElement[];
@@ -561,13 +561,13 @@ declare const BREAKPOINT_ORDER: Breakpoint[];
561
561
  * @see https://tailwindcss.com/docs/screens
562
562
  */
563
563
  declare const DEFAULT_VIEWPORT_CONFIG: ViewportConfig;
564
- declare const provideViewportConfig: (valueOverride?: Partial<ViewportConfig> | undefined) => _angular_core.Provider[];
564
+ declare const provideViewportConfig: (valueOverride?: Partial<ViewportConfig> | undefined) => _angular_core.StaticProvider[];
565
565
  declare const injectViewportConfig: _ethlete_core.InjectFn<ViewportConfig>;
566
566
  type BuildMediaQueryOptions = {
567
567
  min?: number | Breakpoint;
568
568
  max?: number | Breakpoint;
569
569
  };
570
- declare const provideBreakpointObserver: () => _angular_core.Provider[];
570
+ declare const provideBreakpointObserver: () => _angular_core.StaticProvider[];
571
571
  declare const injectBreakpointObserver: _ethlete_core.InjectFn<{
572
572
  observeBreakpoint: (options: BuildMediaQueryOptions) => Signal<boolean>;
573
573
  isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
@@ -845,7 +845,7 @@ declare const signalHostElementScrollState: () => Signal<ElementScrollState>;
845
845
 
846
846
  declare const injectAngularRootElement: _ethlete_core.InjectFn<_angular_core.WritableSignal<HTMLElement | null>>;
847
847
 
848
- declare const provideBoundaryElement: () => _angular_core.Provider[];
848
+ declare const provideBoundaryElement: () => _angular_core.StaticProvider[];
849
849
  declare const injectBoundaryElement: _ethlete_core.InjectFn<{
850
850
  value: _angular_core.Signal<HTMLElement>;
851
851
  override: _angular_core.WritableSignal<HTMLElement | null>;
@@ -883,7 +883,7 @@ type FileDownloadOptions = {
883
883
  */
884
884
  declare const injectFileDownload: () => (options: FileDownloadOptions) => void;
885
885
 
886
- declare const provideFocusVisibleTracker: () => _angular_core.Provider[];
886
+ declare const provideFocusVisibleTracker: () => _angular_core.StaticProvider[];
887
887
  declare const injectFocusVisibleTracker: _ethlete_core.InjectFn<{
888
888
  isFocusVisible: _angular_core.Signal<boolean>;
889
889
  }>;
@@ -940,12 +940,12 @@ type LabelsDefinition<T> = {
940
940
  */
941
941
  declare const defineLabels: <T extends object>(name: string, defaults: T | ((locale: string) => T)) => LabelsDefinition<T>;
942
942
 
943
- declare const provideLocale: () => _angular_core.Provider[];
943
+ declare const provideLocale: () => _angular_core.StaticProvider[];
944
944
  declare const injectLocale: _ethlete_core.InjectFn<{
945
945
  currentLocale: _angular_core.WritableSignal<string>;
946
946
  }>;
947
947
 
948
- declare const provideRenderer: () => _angular_core.Provider[];
948
+ declare const provideRenderer: () => _angular_core.StaticProvider[];
949
949
  declare const injectRenderer: _ethlete_core.InjectFn<{
950
950
  addClass: (element: HTMLElement, ...classes: string[]) => void;
951
951
  removeClass: (element: HTMLElement, ...classes: string[]) => void;
@@ -988,7 +988,7 @@ type AngularRenderer = NonNullable<ReturnType<typeof injectRenderer>>;
988
988
  type StyleManager = {
989
989
  mount: <TComponent>(component: Type<TComponent>) => ComponentRef<TComponent>;
990
990
  };
991
- declare const provideStyleManager: () => _angular_core.Provider[];
991
+ declare const provideStyleManager: () => _angular_core.StaticProvider[];
992
992
  declare const injectStyleManager: _ethlete_core.InjectFn<StyleManager>;
993
993
 
994
994
  type ConsentHandler = {
@@ -1685,7 +1685,7 @@ type Notifications = {
1685
1685
  readonly closeAll: () => void;
1686
1686
  };
1687
1687
 
1688
- declare const provideNotifications: () => _angular_core.Provider[];
1688
+ declare const provideNotifications: () => _angular_core.StaticProvider[];
1689
1689
  declare const injectNotifications: _ethlete_core.InjectFn<Notifications>;
1690
1690
 
1691
1691
  type OverlayRuntimeRole = 'dialog' | 'alertdialog';
@@ -1989,7 +1989,7 @@ type OverlayRuntime = {
1989
1989
  mount: <TComponent extends object, TResult = unknown>(config: OverlayRuntimeMountConfig<TComponent>) => OverlayRuntimeRef<TComponent, TResult>;
1990
1990
  openEntries: Signal<OverlayRuntimeRef<object, unknown>[]>;
1991
1991
  };
1992
- declare const provideOverlayRuntime: () => _angular_core.Provider[];
1992
+ declare const provideOverlayRuntime: () => _angular_core.StaticProvider[];
1993
1993
  declare const injectOverlayRuntime: _ethlete_core.InjectFn<OverlayRuntime>;
1994
1994
 
1995
1995
  /** The space each viewport edge has reserved, in px. */
@@ -2070,13 +2070,13 @@ type InjectFn<T> = {
2070
2070
  * {@link toToken} - never by destructuring, see {@link defineProvider}.
2071
2071
  */
2072
2072
  type ProviderDefinition<T> = {
2073
- readonly provide: () => Provider[];
2073
+ readonly provide: () => StaticProvider[];
2074
2074
  readonly inject: InjectFn<T>;
2075
2075
  readonly token: InjectionToken<T>;
2076
2076
  };
2077
2077
  /** {@link ProviderDefinition} for a value provider, whose `provide` takes a partial override. */
2078
2078
  type StaticProviderDefinition<T> = {
2079
- readonly provide: (valueOverride?: Partial<T>) => Provider[];
2079
+ readonly provide: (valueOverride?: Partial<T>) => StaticProvider[];
2080
2080
  readonly inject: InjectFn<T>;
2081
2081
  readonly token: InjectionToken<T>;
2082
2082
  };
@@ -2676,7 +2676,7 @@ type FaviconOverlay = {
2676
2676
  * Registrations are keyed, and a `progress` overlay wins over a `dot` - a ring that also carries a
2677
2677
  * badge reads as neither.
2678
2678
  */
2679
- declare const provideFaviconStore: () => _angular_core.Provider[];
2679
+ declare const provideFaviconStore: () => _angular_core.StaticProvider[];
2680
2680
  declare const injectFaviconStore: _ethlete_core.InjectFn<{
2681
2681
  activeOverlay: _angular_core.Signal<FaviconOverlay | null>;
2682
2682
  addOverlay: (id: symbol, overlay: FaviconOverlay) => void;
@@ -2861,9 +2861,9 @@ type LinkStoreConfig = {
2861
2861
  multiInstanceRels: Set<string>;
2862
2862
  };
2863
2863
  declare const DEFAULT_MULTI_INSTANCE_RELS: Set<string>;
2864
- declare const provideLinkStoreConfig: (valueOverride?: Partial<LinkStoreConfig> | undefined) => _angular_core.Provider[];
2864
+ declare const provideLinkStoreConfig: (valueOverride?: Partial<LinkStoreConfig> | undefined) => _angular_core.StaticProvider[];
2865
2865
  declare const injectLinkStoreConfig: _ethlete_core.InjectFn<LinkStoreConfig>;
2866
- declare const provideLinkStore: () => _angular_core.Provider[];
2866
+ declare const provideLinkStore: () => _angular_core.StaticProvider[];
2867
2867
  declare const injectLinkStore: _ethlete_core.InjectFn<{
2868
2868
  addLink: (id: symbol, linkConfig: LinkConfig) => void;
2869
2869
  removeLink: (id: symbol, key?: string) => void;
@@ -2926,9 +2926,9 @@ type MetaConfig = {
2926
2926
  multiInstanceTags: Set<string>;
2927
2927
  };
2928
2928
  declare const DEFAULT_MULTI_INSTANCE_TAGS: Set<string>;
2929
- declare const provideMetaConfig: (valueOverride?: Partial<MetaConfig> | undefined) => _angular_core.Provider[];
2929
+ declare const provideMetaConfig: (valueOverride?: Partial<MetaConfig> | undefined) => _angular_core.StaticProvider[];
2930
2930
  declare const injectMetaConfig: _ethlete_core.InjectFn<MetaConfig>;
2931
- declare const provideMetaStore: () => _angular_core.Provider[];
2931
+ declare const provideMetaStore: () => _angular_core.StaticProvider[];
2932
2932
  declare const injectMetaStore: _ethlete_core.InjectFn<{
2933
2933
  addTag: (id: symbol, rawConfig: MetaTagConfig) => void;
2934
2934
  removeTag: (id: symbol, selector?: string) => void;
@@ -3028,9 +3028,9 @@ type StructuredDataConfig = {
3028
3028
  */
3029
3029
  placement: 'head' | 'body';
3030
3030
  };
3031
- declare const provideStructuredDataConfig: (valueOverride?: Partial<StructuredDataConfig> | undefined) => _angular_core.Provider[];
3031
+ declare const provideStructuredDataConfig: (valueOverride?: Partial<StructuredDataConfig> | undefined) => _angular_core.StaticProvider[];
3032
3032
  declare const injectStructuredDataConfig: _ethlete_core.InjectFn<StructuredDataConfig>;
3033
- declare const provideStructuredDataStore: () => _angular_core.Provider[];
3033
+ declare const provideStructuredDataStore: () => _angular_core.StaticProvider[];
3034
3034
  declare const injectStructuredDataStore: _ethlete_core.InjectFn<{
3035
3035
  addStructuredData: (id: symbol, data: WithContext<Thing> | Graph) => void;
3036
3036
  removeStructuredData: (id: symbol) => void;
@@ -3073,9 +3073,9 @@ type TitleConfig = {
3073
3073
  */
3074
3074
  prefixPart?: TitlePart;
3075
3075
  };
3076
- declare const provideTitleConfig: (valueOverride?: Partial<TitleConfig> | undefined) => _angular_core.Provider[];
3076
+ declare const provideTitleConfig: (valueOverride?: Partial<TitleConfig> | undefined) => _angular_core.StaticProvider[];
3077
3077
  declare const injectTitleConfig: _ethlete_core.InjectFn<TitleConfig>;
3078
- declare const provideTitleStore: () => _angular_core.Provider[];
3078
+ declare const provideTitleStore: () => _angular_core.StaticProvider[];
3079
3079
  declare const injectTitleStore: _ethlete_core.InjectFn<{
3080
3080
  title: _angular_core.Signal<string>;
3081
3081
  addPart: (id: symbol, part: TitlePart) => void;
@@ -3240,11 +3240,15 @@ type RegisteredSurfaceThemeName = EthleteSurfaceThemeNameRegistry extends {
3240
3240
  } ? N : string;
3241
3241
  declare const createCssSurfaceName: (name: string) => string;
3242
3242
  declare const resolveSurfaceByElevation: (themes: SurfaceTheme[], type: SurfaceType, elevation: number) => SurfaceTheme | null;
3243
- declare const ɵProvideSurfaceThemes: (valueOverride?: (SurfaceTheme | undefined)[] | undefined) => _angular_core.Provider[];
3243
+ declare const ɵProvideSurfaceThemes: (valueOverride?: (SurfaceTheme | undefined)[] | undefined) => _angular_core.StaticProvider[];
3244
3244
  declare const injectSurfaceThemes: _ethlete_core.InjectFn<SurfaceTheme[]>;
3245
- declare const ɵProvideSurfaceThemesPrefix: (valueOverride?: string | undefined) => _angular_core.Provider[];
3245
+ declare const ɵProvideSurfaceThemesPrefix: (valueOverride?: string | undefined) => _angular_core.StaticProvider[];
3246
3246
  declare const injectSurfaceThemesPrefix: _ethlete_core.InjectFn<string>;
3247
- declare const provideSurfaceThemesWithTailwind4: (themes: SurfaceTheme[], prefix?: string) => _angular_core.Provider[][];
3247
+ /**
3248
+ * Registers the app's surface themes. In dev mode it also warns once the page has loaded if the root
3249
+ * font size is still the browser default, i.e. the app is missing `html { font-size: 62.5%; }`.
3250
+ */
3251
+ declare const provideSurfaceThemesWithTailwind4: (themes: SurfaceTheme[], prefix?: string) => (_angular_core.StaticProvider[] | _angular_core.EnvironmentProviders)[];
3248
3252
  /**
3249
3253
  * Inject the registered `isDefault` surface theme of a `type` - the surface an app renders on
3250
3254
  * where nothing scopes one. Without a `type`, resolves the default of the only surface type the
@@ -3399,11 +3403,11 @@ type SurfaceColor = typeof SURFACE_COLOR;
3399
3403
  /** Everything `[etProvideColor]` accepts: a registered theme name, a theme object, `surface`, or nothing. */
3400
3404
  type ColorThemeInput = RegisteredColorThemeName | SurfaceColor | ColorTheme | null;
3401
3405
  declare const createCssColorThemeName: (name: string) => string;
3402
- declare const ɵProvideColorThemes: (valueOverride?: (ColorTheme | undefined)[] | undefined) => _angular_core.Provider[];
3406
+ declare const ɵProvideColorThemes: (valueOverride?: (ColorTheme | undefined)[] | undefined) => _angular_core.StaticProvider[];
3403
3407
  declare const injectColorThemes: _ethlete_core.InjectFn<ColorTheme[]>;
3404
- declare const ɵProvideColorThemesPrefix: (valueOverride?: string | undefined) => _angular_core.Provider[];
3408
+ declare const ɵProvideColorThemesPrefix: (valueOverride?: string | undefined) => _angular_core.StaticProvider[];
3405
3409
  declare const injectColorThemesPrefix: _ethlete_core.InjectFn<string>;
3406
- declare const provideColorThemesWithTailwind4: (themes: ColorTheme[], prefix?: string) => _angular_core.Provider[][];
3410
+ declare const provideColorThemesWithTailwind4: (themes: ColorTheme[], prefix?: string) => _angular_core.StaticProvider[][];
3407
3411
  declare const injectErrorTheme: () => ColorTheme;
3408
3412
  declare const injectWarningTheme: () => ColorTheme;
3409
3413
  declare const injectSuccessTheme: () => ColorTheme;
@@ -3431,7 +3435,7 @@ type ColorPaletteEntry = {
3431
3435
  * { token: 'ocean', label: 'Training blue' },
3432
3436
  * ]);
3433
3437
  */
3434
- declare const provideColorPalette: (valueOverride?: (ColorPaletteEntry | undefined)[] | undefined) => _angular_core.Provider[];
3438
+ declare const provideColorPalette: (valueOverride?: (ColorPaletteEntry | undefined)[] | undefined) => _angular_core.StaticProvider[];
3435
3439
  /** The palette from {@link provideColorPalette}. Pass `{ optional: true }` - most apps provide none. */
3436
3440
  declare const injectColorPalette: _ethlete_core.InjectFn<ColorPaletteEntry[]>;
3437
3441
  declare const COLOR_PALETTE: _angular_core.InjectionToken<ColorPaletteEntry[]>;
@@ -3470,7 +3474,7 @@ declare const createTailwindColorThemes: (themes: ColorTheme[], prefix?: string)
3470
3474
  /**
3471
3475
  * @deprecated Use provideColorThemesWithTailwind4 instead after migrating to Tailwind CSS v4. Intent to remove in v6.
3472
3476
  */
3473
- declare const provideColorThemes: (themes: ColorTheme[]) => _angular_core.Provider[][];
3477
+ declare const provideColorThemes: (themes: ColorTheme[]) => _angular_core.StaticProvider[][];
3474
3478
 
3475
3479
  declare const COLOR_PROVIDER: InjectionToken<ProvideColorDirective>;
3476
3480
  /**
@@ -3531,7 +3535,7 @@ type SurfaceContextTracker = {
3531
3535
  */
3532
3536
  surfaceForElement: (host: HTMLElement) => SurfaceContextSurface | null;
3533
3537
  };
3534
- declare const provideSurfaceContextTracker: () => _angular_core.Provider[];
3538
+ declare const provideSurfaceContextTracker: () => _angular_core.StaticProvider[];
3535
3539
  declare const injectSurfaceContextTracker: _ethlete_core.InjectFn<SurfaceContextTracker>;
3536
3540
 
3537
3541
  /**
@@ -3599,7 +3603,7 @@ type UnsavedChangesRegistration = {
3599
3603
  * Root-provided; every tracker registers itself. Inject it to abandon guards from app code (a session
3600
3604
  * timeout of your own, a hard reset) or to read whether a confirm is currently on screen.
3601
3605
  */
3602
- declare const provideUnsavedChangesCoordinator: () => _angular_core.Provider[];
3606
+ declare const provideUnsavedChangesCoordinator: () => _angular_core.StaticProvider[];
3603
3607
  declare const injectUnsavedChangesCoordinator: _ethlete_core.InjectFn<{
3604
3608
  /** Whether a confirm is currently on screen. */
3605
3609
  isCheckPending: Signal<boolean>;
@@ -3837,7 +3841,7 @@ type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {
3837
3841
  declare const createUnsavedChangesGuard: <T>(config: CreateUnsavedChangesGuardConfig<T>) => UnsavedChangesGuardRef<T>;
3838
3842
 
3839
3843
  /** The version of `@ethlete/core` this build was cut from. */
3840
- declare const CORE_VERSION = "5.0.0-next.59";
3844
+ declare const CORE_VERSION = "5.0.0-next.60";
3841
3845
 
3842
3846
  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_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_d as JsonLD, KeyPressManager, 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_TITLE_MARKER, ValidateAtLeastOneRequired, 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, createOverlayRuntimeRef, 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, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, 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, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, mountEasingTokens, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointTransform, onOverlayViewportInsetsChange, 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, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, reserveOverlayViewportSpace, resetPositioningStyles, resolveAppRootColorProvider, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setBackdropStyles, setBaseElementStyles, 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 };
3843
3847
  export type { AlternateLanguagesConfig, AnchoredPositionMiddlewareExtras, AnchoredPositionSetup, AngularRenderer, AnimatedBlockSizeConfig, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedSizeAxis, AnimationEndEvent, AppUpdates, AppUpdatesConfig, ArticleConfig, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorPaletteEntry, ColorTheme, ColorThemeInput, ColorThemeType, ConsentHandler, ControlValueSignalOptions, Countdown, CountdownDeadline, CreateLoggerConfig, CreateSessionMemoryConfig, CreateUnsavedChangesGuardConfig, CreateUnsavedChangesTabLockConfig, CreateUnsavedChangesTrackerConfig, CreateUserConsentProviderOptions, CurrentElementVisibility, CursorDragScrollDirection, CursorDragScrollOptions, DragEndEvent, DragGestureEvent, DragMoveEvent, DragStartEvent, ElementDimensions, ElementLastScrollDirection, ElementLastScrollDirectionType, ElementRect, ElementScrollState, ElementSignal, ElementSignalValue, ElementSize, EthleteColorThemeNameRegistry, EthleteSurfaceThemeNameRegistry, FaviconOverlay, FileDownloadOptions, FlipAnimationConfig, InjectFn, InjectQueryParamConfig, InjectUtilConfig, InjectUtilTransformConfig, IntersectionObserverEntryWithDetails, IsElementVisibleOptions, LabelsDefinition, LabelsSource, LinkConfig, LinkStoreConfig, LogicalSize, MaybeSignal, MetaConfig, MetaTagConfig, NgClassType, NormalizedGameResultType, NormalizedMatchParticipant, NormalizedMatchParticipants, NormalizedMatchScore, NormalizedUnsavedChangesSource, NotificationActionConfig, NotificationClickContext, NotificationClickMessage, NotificationDeliveryPath, NotificationPermissionState, NotificationRef, Notifications, NullableElementDimensions, NumberBreakpointSignal, ObjectUrlHandle, OnThemeColorMap, OpenGraphConfig, OverlayRuntimeAnchoredPosition, OverlayRuntimeAnimationDelegate, OverlayRuntimeAnimationDelegateEnterContext, OverlayRuntimeAnimationDelegateLeaveContext, OverlayRuntimeAutoFocusTarget, OverlayRuntimeCenteredPosition, OverlayRuntimeCloseEvent, OverlayRuntimeCloseGuard, OverlayRuntimeCloseSource, OverlayRuntimeComponentBase, OverlayRuntimeElements, OverlayRuntimeGlobalPosition, OverlayRuntimeGlobalPositionAlignment, OverlayRuntimeMountConfig, OverlayRuntimePositionStrategy, OverlayRuntimeRef, OverlayRuntimeRole, OverlayRuntimeShiftOptions, OverlayRuntimeState, OverlayViewportInset, OverlayViewportReservation, ProviderDefinition, ProviderDefinitionOptions, RegisteredColorThemeName, RegisteredSurfaceThemeName, ResizeEdge, ResizeMoveEvent, ResourceHintsConfig, RobotsConfig, RouterDisableScrollTopConfig, RouterState, ScrollContainerTarget, ScrollItemTarget, ScrollRestorationRestoreConfig, ScrollRestorationScrollElement, ScrollSnapOrigin, ScrollSnapTarget, ScrollToElementOptions, SetupScrollRestorationConfig, ShowNotificationConfig, SignalAnimatedNumberOptions, SignalDeferredLoadingOptions, SignalElementBindingComplexType, SignalElementBindingType, SignalElementChildrenOptions, SignalElementIntersectionOptions, SignalElementScrollStateOptions, SocialMediaConfig, StaticProviderDefinition, StructuredDataConfig, StyleManager, SurfaceColor, SurfaceContextEntry, SurfaceContextSurface, SurfaceContextTracker, SurfaceInteractionColor, SurfaceInteractionColorMap, SurfaceOnInteractionColorMap, SurfaceTheme, SurfaceThemeColor, SurfaceType, SwipeEndEvent, SwipeTracker, SwipeUpdateEvent, SyncSignalOptions, ThemeColor, ThemeColorMap, ThemeHSLColor, ThemeInkColorMap, ThemeRGBColor, ThemeSwatch, TitleConfig, TitlePart, Translatable, TwitterCardConfig, TypedBreakpointSignal, UnsavedChangesAbandonReason, UnsavedChangesConfirmContext, UnsavedChangesConfirmFn, UnsavedChangesGuardRef, UnsavedChangesRegistration, UnsavedChangesSource, UnsavedChangesTabConfig, UnsavedChangesTabLockRef, UnsavedChangesTrackerRef, ValidateAtLeastOneRequiredConfig, Vec2, ViewportConfig };