@ethlete/core 5.0.0-next.62 → 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.
@@ -21,6 +21,11 @@
21
21
  "schema": "./migrate-surface-interaction-swatch/schema.json",
22
22
  "description": "Rewrite surface theme interactionColor maps into the { color, onColor, inkColor } swatch shape"
23
23
  },
24
+ "migrate-color-theme-variants": {
25
+ "implementation": "./migrate-color-theme-variants/migration",
26
+ "schema": "./migrate-color-theme-variants/schema.json",
27
+ "description": "Rewrite surface theme colorTheme and semanticColorThemes into colorThemeVariants"
28
+ },
24
29
  "migrate-legacy-color-themes": {
25
30
  "implementation": "./migrate-legacy-color-themes/migration",
26
31
  "schema": "./migrate-legacy-color-themes/schema.json",
@@ -0,0 +1,136 @@
1
+ import { Project, SyntaxKind } from 'ts-morph';
2
+ const createProject = () => new Project({
3
+ useInMemoryFileSystem: true,
4
+ compilerOptions: {
5
+ target: 99,
6
+ module: 99,
7
+ },
8
+ });
9
+ const findProperty = (literal, name) => {
10
+ const property = literal.getProperty(name);
11
+ return property?.isKind(SyntaxKind.PropertyAssignment) ? property : undefined;
12
+ };
13
+ const stringValue = (property) => {
14
+ const initializer = property?.getInitializer();
15
+ return initializer?.isKind(SyntaxKind.StringLiteral) || initializer?.isKind(SyntaxKind.NoSubstitutionTemplateLiteral)
16
+ ? initializer.getLiteralText()
17
+ : undefined;
18
+ };
19
+ const literalsOf = (sourceFile) => sourceFile.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression);
20
+ export const collectColorThemesInFile = (filePath, content) => {
21
+ if (!content.includes('primary'))
22
+ return [];
23
+ return literalsOf(createProject().createSourceFile(filePath, content)).flatMap((literal) => {
24
+ const name = stringValue(findProperty(literal, 'name'));
25
+ if (!name || !literal.getProperty('primary'))
26
+ return [];
27
+ return [
28
+ {
29
+ name,
30
+ type: stringValue(findProperty(literal, 'type')),
31
+ isDefault: findProperty(literal, 'isDefault')?.getInitializer()?.getText() === 'true',
32
+ },
33
+ ];
34
+ });
35
+ };
36
+ const uniqueName = (names) => {
37
+ const unique = [...new Set(names)];
38
+ return unique.length === 1 ? unique[0] : undefined;
39
+ };
40
+ const quote = (value) => (/^[A-Za-z_$][\w$]*$/.test(value) ? value : `'${value}'`);
41
+ /**
42
+ * Rewrites a surface theme's deprecated `colorTheme` and `semanticColorThemes` into `colorThemeVariants`, keyed by
43
+ * the `isDefault` theme and the theme of each `type` in `themes`. Existing `colorThemeVariants` entries win, then
44
+ * `semanticColorThemes`, then `colorTheme`, the same order the runtime resolves them in.
45
+ */
46
+ export const migrateColorThemeVariantsInFile = (filePath, content, themes) => {
47
+ if (!content.includes('colorTheme') && !content.includes('semanticColorThemes')) {
48
+ return { changed: false, content, unresolved: [] };
49
+ }
50
+ const defaultName = uniqueName(themes.filter((theme) => theme.isDefault).map((theme) => theme.name));
51
+ const nameOfType = (type) => uniqueName(themes.filter((theme) => theme.type === type).map((theme) => theme.name));
52
+ const sourceFile = createProject().createSourceFile(filePath, content);
53
+ const unresolved = [];
54
+ let changed = false;
55
+ const surfaces = literalsOf(sourceFile).filter((literal) => literal.getProperty('elevation'));
56
+ for (const literal of surfaces) {
57
+ const colorTheme = findProperty(literal, 'colorTheme');
58
+ const semantic = findProperty(literal, 'semanticColorThemes');
59
+ if (!colorTheme && !semantic)
60
+ continue;
61
+ const surfaceName = stringValue(findProperty(literal, 'name')) ?? '<unnamed surface>';
62
+ const variants = findProperty(literal, 'colorThemeVariants');
63
+ const variantsLiteral = variants?.getInitializer();
64
+ if (variants && !variantsLiteral?.isKind(SyntaxKind.ObjectLiteralExpression)) {
65
+ unresolved.push(`${surfaceName}: colorThemeVariants is not an object literal`);
66
+ continue;
67
+ }
68
+ const existingKeys = new Set(variantsLiteral?.isKind(SyntaxKind.ObjectLiteralExpression)
69
+ ? variantsLiteral
70
+ .getProperties()
71
+ .flatMap((property) => property.isKind(SyntaxKind.PropertyAssignment) ? [property.getName().replace(/['"]/g, '')] : [])
72
+ : []);
73
+ const additions = new Map();
74
+ const toRemove = [];
75
+ const add = (key, value) => {
76
+ if (!existingKeys.has(key) && !additions.has(key))
77
+ additions.set(key, value);
78
+ };
79
+ let semanticResolved = true;
80
+ if (semantic) {
81
+ const semanticLiteral = semantic.getInitializer();
82
+ if (!semanticLiteral?.isKind(SyntaxKind.ObjectLiteralExpression)) {
83
+ semanticResolved = false;
84
+ unresolved.push(`${surfaceName}: semanticColorThemes is not an object literal`);
85
+ }
86
+ else {
87
+ const pending = [];
88
+ for (const property of semanticLiteral.getProperties()) {
89
+ const type = property.isKind(SyntaxKind.PropertyAssignment) ? property.getName().replace(/['"]/g, '') : '';
90
+ const value = property.isKind(SyntaxKind.PropertyAssignment) ? stringValue(property) : undefined;
91
+ const key = type ? nameOfType(type) : undefined;
92
+ if (!value || !key) {
93
+ semanticResolved = false;
94
+ unresolved.push(`${surfaceName}: semanticColorThemes entry ${property.getText()} has no single color theme of that type or no string value`);
95
+ continue;
96
+ }
97
+ pending.push([key, value]);
98
+ }
99
+ if (semanticResolved)
100
+ pending.forEach(([key, value]) => add(key, value));
101
+ }
102
+ }
103
+ let colorThemeResolved = true;
104
+ if (colorTheme) {
105
+ const value = stringValue(colorTheme);
106
+ if (!value || !defaultName) {
107
+ colorThemeResolved = false;
108
+ unresolved.push(`${surfaceName}: colorTheme ${colorTheme.getInitializer()?.getText()} needs a string value and exactly one isDefault color theme`);
109
+ }
110
+ else if (value !== defaultName) {
111
+ add(defaultName, value);
112
+ }
113
+ }
114
+ const added = [...additions];
115
+ if (semantic && semanticResolved) {
116
+ toRemove.push(semantic);
117
+ }
118
+ if (colorTheme && colorThemeResolved) {
119
+ toRemove.push(colorTheme);
120
+ }
121
+ if (toRemove.length === 0)
122
+ continue;
123
+ if (added.length > 0) {
124
+ const text = added.map(([key, value]) => `${quote(key)}: '${value}'`).join(', ');
125
+ if (variantsLiteral?.isKind(SyntaxKind.ObjectLiteralExpression)) {
126
+ variantsLiteral.addPropertyAssignments(added.map(([key, value]) => ({ name: quote(key), initializer: `'${value}'` })));
127
+ }
128
+ else {
129
+ toRemove.shift()?.replaceWithText(`colorThemeVariants: { ${text} }`);
130
+ }
131
+ }
132
+ toRemove.forEach((property) => property.remove());
133
+ changed = true;
134
+ }
135
+ return { changed, content: changed ? sourceFile.getFullText() : content, unresolved };
136
+ };
@@ -0,0 +1,46 @@
1
+ import { formatFiles, visitNotIgnoredFiles } from '@nx/devkit';
2
+ import { createMigrationScope } from '../migrate-provider-shape/migration-scope.js';
3
+ import { collectColorThemesInFile, migrateColorThemeVariantsInFile } from './color-theme-variants.js';
4
+ const isSource = (filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.ts');
5
+ export default async function migrateColorThemeVariants(tree, schema) {
6
+ console.log('\n🔄 Migrating surface colorTheme and semanticColorThemes to colorThemeVariants...');
7
+ const themes = [];
8
+ visitNotIgnoredFiles(tree, '', (filePath) => {
9
+ if (!isSource(filePath))
10
+ return;
11
+ const content = tree.read(filePath, 'utf-8');
12
+ if (content)
13
+ themes.push(...collectColorThemesInFile(filePath, content));
14
+ });
15
+ const defaults = themes.filter((theme) => theme.isDefault).map((theme) => theme.name);
16
+ console.log(` Color themes found: ${themes.map((theme) => theme.name).join(', ') || 'none'}`);
17
+ console.log(` Default color theme: ${defaults.join(', ') || 'none'}`);
18
+ const scope = createMigrationScope(tree, schema);
19
+ console.log(` Scope: ${scope.describe()}`);
20
+ let filesChanged = 0;
21
+ let unresolvedCount = 0;
22
+ scope.visit(tree, (filePath) => {
23
+ if (!isSource(filePath))
24
+ return;
25
+ const before = tree.read(filePath, 'utf-8');
26
+ if (!before)
27
+ return;
28
+ const result = migrateColorThemeVariantsInFile(filePath, before, themes);
29
+ for (const message of result.unresolved) {
30
+ unresolvedCount++;
31
+ console.warn(` ⚠ ${filePath}: ${message}`);
32
+ }
33
+ if (!result.changed)
34
+ return;
35
+ tree.write(filePath, result.content);
36
+ filesChanged++;
37
+ console.log(` ✓ ${filePath}`);
38
+ });
39
+ console.log(filesChanged === 0 ? ' Nothing to migrate.\n' : `\n✅ Migrated ${filesChanged} file(s).\n`);
40
+ if (unresolvedCount > 0) {
41
+ console.warn(` Review ${unresolvedCount} unresolved value(s) manually. They keep working until the next major.\n`);
42
+ }
43
+ if (!schema.skipFormat) {
44
+ await formatFiles(tree);
45
+ }
46
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "migrate-color-theme-variants",
4
+ "title": "Migrate surface colorTheme and semanticColorThemes to colorThemeVariants",
5
+ "type": "object",
6
+ "properties": {
7
+ "projects": {
8
+ "type": "array",
9
+ "items": { "type": "string" },
10
+ "description": "Nx projects to migrate. Defaults to every project in the workspace.",
11
+ "alias": "project"
12
+ },
13
+ "include": {
14
+ "type": "array",
15
+ "items": { "type": "string" },
16
+ "description": "Path prefixes to migrate, relative to the workspace root (e.g. 'apps/web'). Unioned with `projects`. Defaults to the whole workspace.",
17
+ "alias": "includePath"
18
+ },
19
+ "skipFormat": {
20
+ "type": "boolean",
21
+ "description": "Skip formatting files after migration",
22
+ "default": false
23
+ }
24
+ },
25
+ "required": []
26
+ }
@@ -423,6 +423,8 @@ function generateSurfaceThemeCss(themes, utilityPrefix, runtimePrefix, schema) {
423
423
  if (defaultLight && defaultDark) {
424
424
  pushSchemeSurfaceVars(themeVars, runtimePrefix, defaultLight);
425
425
  pushSchemeSurfaceVars(themeVars, runtimePrefix, defaultDark);
426
+ pushForcedSchemeSurfaceVars(themeVars, runtimePrefix, defaultLight);
427
+ pushForcedSchemeSurfaceVars(themeVars, runtimePrefix, defaultDark);
426
428
  }
427
429
  else {
428
430
  // A single registered surface type has no other scheme to switch to, so its default must
@@ -568,6 +570,14 @@ function pushSchemeSurfaceVars(vars, runtimePrefix, theme) {
568
570
  vars.push(` }`);
569
571
  vars.push(`}\n`);
570
572
  }
573
+ // `:root.<prefix>-scheme--<type>` must out-specify the `:root` inside the media query above, so the
574
+ // class set by `provideColorScheme()` overrides the OS preference regardless of source order.
575
+ function pushForcedSchemeSurfaceVars(vars, runtimePrefix, theme) {
576
+ vars.push(`:root.${runtimePrefix}-scheme--${theme.type} {`);
577
+ pushSurfaceVars(vars, runtimePrefix, theme, ' ');
578
+ vars.push(` color-scheme: ${theme.type};`);
579
+ vars.push(`}\n`);
580
+ }
571
581
  function pushSurfaceVars(vars, runtimePrefix, theme, indent) {
572
582
  vars.push(`${indent}--${runtimePrefix}-surface-background: ${theme.background};`);
573
583
  vars.push(`${indent}--${runtimePrefix}-surface-color: ${theme.color};`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/core",
3
- "version": "5.0.0-next.62",
3
+ "version": "5.0.0-next.64",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -9,6 +9,7 @@ import * as _angular_platform_browser from '@angular/platform-browser';
9
9
  import { AbstractControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';
10
10
  import * as _angular_router from '@angular/router';
11
11
  import { Data, Params, Router } from '@angular/router';
12
+ import { Location } from '@angular/common';
12
13
  import { FieldTree } from '@angular/forms/signals';
13
14
 
14
15
  declare const ANIMATABLE_TOKEN: InjectionToken<AnimatableDirective>;
@@ -106,6 +107,7 @@ declare class AnimatedLifecycleDirective implements AfterViewInit {
106
107
  leave(): void;
107
108
  forceEnteredState(): void;
108
109
  forceLeftState(): void;
110
+ private settleInstantly;
109
111
  private markForcedThisFrame;
110
112
  private handleNormalTransition;
111
113
  private handleInterruptedTransition;
@@ -1329,9 +1331,10 @@ declare const createRouterState: (router: Router) => RouterState;
1329
1331
  /**
1330
1332
  * Read the current route (the committed url without query params and fragment) straight from the router.
1331
1333
  * Unlike the `injectRoute` signal this reads synchronously, so it can be used inside a `router.events` handler
1332
- * where `router.url` is already committed. Falls back to the browser location before the first navigation commits.
1334
+ * where `router.url` is already committed. Before the first navigation commits it falls back to `location`
1335
+ * (without the base href) when given, else to the browser location.
1333
1336
  */
1334
- declare const createRoute: (router: Router) => string;
1337
+ declare const createRoute: (router: Router, location?: Location) => string;
1335
1338
  /**
1336
1339
  * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.
1337
1340
  */
@@ -1910,6 +1913,7 @@ declare const isHTMLOrSVGElement: (value: unknown) => value is HTMLElement | SVG
1910
1913
  */
1911
1914
  declare const ownsActiveElement: (hostElement: HTMLElement, document: Document) => boolean;
1912
1915
  declare const isFocusable: (element: HTMLElement, document: Document) => boolean;
1916
+ /** The elements Tab stops on inside `container`, with each named radio group collapsed to its checked (else first) radio. */
1913
1917
  declare const getFocusableElements: (container: HTMLElement, document: Document) => HTMLElement[];
1914
1918
  declare const getHeadingElement: (container: HTMLElement) => HTMLElement | null;
1915
1919
  declare const focusElement: (element: HTMLElement | null) => void;
@@ -2598,7 +2602,7 @@ type CurrentElementVisibility = {
2598
2602
  */
2599
2603
  isIntersecting: boolean;
2600
2604
  /**
2601
- * The ratio of the element that is intersecting the container.
2605
+ * The share of the element's area inside the container, like `IntersectionObserverEntry.intersectionRatio`.
2602
2606
  */
2603
2607
  intersectionRatio: number;
2604
2608
  /**
@@ -3276,9 +3280,14 @@ declare const ɵProvideColorThemesPrefix: (valueOverride?: string | undefined) =
3276
3280
  declare const injectColorThemesPrefix: _ethlete_core.InjectFn<string>;
3277
3281
  declare const provideColorThemesWithTailwind4: (themes: ColorTheme[], prefix?: string) => _angular_core.StaticProvider[][];
3278
3282
  /**
3279
- * A signal of the color theme for `type` on the surface this element renders on: the theme the nearest
3280
- * surface names in `semanticColorThemes`, else the first registered theme of that `type`. Reading it throws
3281
- * when the app registered no theme of that `type`, so read it only for a state that renders.
3283
+ * The color theme name that draws `chosenName` on `surface`: the surface's `colorThemeVariants` entry for it,
3284
+ * else `chosenName` itself. Always pass the chosen accent, never an already swapped one.
3285
+ */
3286
+ declare const resolveColorThemeVariant: (surface: SurfaceTheme | null | undefined, chosenName: string, themes: ColorTheme[] | null | undefined) => string;
3287
+ /**
3288
+ * A signal of the color theme for `type` on the surface this element renders on: the first registered theme
3289
+ * of that `type`, swapped for the nearest surface's `colorThemeVariants` entry. Reading it throws when the app
3290
+ * registered no theme of that `type`, so read it only for a state that renders.
3282
3291
  *
3283
3292
  * @example
3284
3293
  * protected successTheme = injectSemanticColorTheme('success');
@@ -3333,15 +3342,15 @@ type SurfaceTheme = {
3333
3342
  isDefault?: boolean;
3334
3343
  interactionColor?: SurfaceInteractionColor;
3335
3344
  /**
3336
- * The registered color theme that serves a semantic `type` on this surface, e.g.
3337
- * `{ success: 'success-on-light' }`. A `type` left out falls back to the first registered theme of
3338
- * that `type`. Read by `injectSemanticColorTheme()`.
3345
+ * Swaps a chosen color theme for a version that reads well on this surface, e.g.
3346
+ * `{ brand: 'brand-on-light', grey: 'grey-light' }`. The chosen theme is the nearest `[etProvideColor]`, the
3347
+ * `isDefault` theme where there is none, or the theme of a `type` for `injectSemanticColorTheme()`. An
3348
+ * accent without an entry stays the same on this surface.
3339
3349
  */
3350
+ colorThemeVariants?: Partial<Record<RegisteredColorThemeName, RegisteredColorThemeName>>;
3351
+ /** @deprecated Use `colorThemeVariants`, keyed by the name of the theme with that `type`. */
3340
3352
  semanticColorThemes?: Partial<Record<ColorThemeType, RegisteredColorThemeName>>;
3341
- /**
3342
- * The registered color theme a `[etProvideSurface]` element applies to its subtree, e.g. a darker
3343
- * `brand-on-light` on a light surface. An `[etProvideColor]` on or above the surface element wins.
3344
- */
3353
+ /** @deprecated Use `colorThemeVariants`, keyed by the name of the `isDefault` color theme. */
3345
3354
  colorTheme?: RegisteredColorThemeName;
3346
3355
  background: SurfaceThemeColor;
3347
3356
  color: SurfaceThemeColor;
@@ -3384,8 +3393,8 @@ declare const provideSurfaceThemesWithTailwind4: (themes: SurfaceTheme[], prefix
3384
3393
  /**
3385
3394
  * Inject the registered `isDefault` surface theme of a `type` - the surface an app renders on
3386
3395
  * where nothing scopes one. Without a `type`, resolves the default of the only surface type the
3387
- * app registers; an app registering both must name the one it means, since which of the two
3388
- * `:root` paints is a `prefers-color-scheme` decision. `null` when neither applies.
3396
+ * app registers; an app registering both must name the one it means. `null` when neither applies.
3397
+ * For the theme the root paints right now, use `injectRootSurfaceTheme()`.
3389
3398
  */
3390
3399
  declare const injectDefaultSurfaceTheme: (type?: SurfaceType) => SurfaceTheme | null;
3391
3400
 
@@ -3395,10 +3404,13 @@ declare class ProvideSurfaceDirective {
3395
3404
  private prefix;
3396
3405
  private injector;
3397
3406
  private parentProvider;
3398
- private defaultTheme;
3407
+ private hostElement;
3408
+ private rootTheme;
3409
+ private hasColorScheme;
3399
3410
  private colorThemes;
3400
3411
  private colorPrefix;
3401
3412
  private colorProvider;
3413
+ private ownColorProvider;
3402
3414
  private currentProviderSync;
3403
3415
  private forcedSurface;
3404
3416
  surface: InputSignal<RegisteredSurfaceThemeName | null | undefined>;
@@ -3413,6 +3425,7 @@ declare class ProvideSurfaceDirective {
3413
3425
  elevation: Signal<number>;
3414
3426
  surfaceType: Signal<_ethlete_core.SurfaceType | null>;
3415
3427
  surfaceName: Signal<string | undefined>;
3428
+ private inheritedSurfaceTheme;
3416
3429
  private colorThemeClass;
3417
3430
  protected surfaceClass: Signal<string>;
3418
3431
  syncWithProvider(provider: ProvideSurfaceDirective): void;
@@ -3432,9 +3445,8 @@ declare const injectSurfaceType: () => Signal<_ethlete_core.SurfaceType | null>;
3432
3445
  * effect on the surrounding surface provider, or the app's default surface where nothing provides
3433
3446
  * one. Use it to derive an elevation relative to the surrounding surface.
3434
3447
  *
3435
- * `null` where the app registers no surface themes, or registers a default per surface type -
3436
- * which of those two `:root` paints is a `prefers-color-scheme` decision, so it cannot be
3437
- * resolved at runtime.
3448
+ * `null` where the app registers no surface themes, or registers a default per surface type
3449
+ * without `provideColorScheme()`.
3438
3450
  */
3439
3451
  declare const injectParentSurface: () => Signal<SurfaceTheme | null>;
3440
3452
 
@@ -3520,6 +3532,36 @@ declare function injectColorPalette(options: InjectOptions): ColorPaletteEntry[]
3520
3532
  declare const injectSurfaceColorPalette: () => Signal<ColorPaletteEntry[] | null>;
3521
3533
  declare const COLOR_PALETTE: _angular_core.InjectionToken<ColorPaletteConfig>;
3522
3534
 
3535
+ type ColorSchemeMode = SurfaceType | 'system';
3536
+ type ColorSchemeConfig = {
3537
+ /** The mode the app starts in. Defaults to `'system'`. */
3538
+ mode?: ColorSchemeMode;
3539
+ };
3540
+ /**
3541
+ * Inject the app's color scheme: `mode()` is what the app asked for, `type()` the surface type the
3542
+ * root paints, `rootSurface()` the default surface theme of that type, and `setMode()` switches it.
3543
+ * Needs `provideColorScheme()`.
3544
+ */
3545
+ declare const injectColorScheme: _ethlete_core.InjectFn<{
3546
+ mode: Signal<ColorSchemeMode>;
3547
+ type: Signal<SurfaceType>;
3548
+ rootSurface: Signal<SurfaceTheme | null>;
3549
+ setMode: (next: ColorSchemeMode) => void;
3550
+ }>;
3551
+ /**
3552
+ * Lets the app switch between its default light and dark surface with a class on `<html>`, instead of
3553
+ * only following `prefers-color-scheme`. It also paints the root surface's `colorThemeVariants` entry for the
3554
+ * default accent on `<html>`. Add it to the application config, next to
3555
+ * `provideSurfaceThemesWithTailwind4()`.
3556
+ */
3557
+ declare const provideColorScheme: (config?: ColorSchemeConfig) => EnvironmentProviders;
3558
+ /**
3559
+ * Inject a signal of the default surface theme the root paints where nothing scopes one. If the app
3560
+ * registers a default for both surface types, it follows `injectColorScheme()`, and is `null` without
3561
+ * `provideColorScheme()`.
3562
+ */
3563
+ declare const injectRootSurfaceTheme: () => Signal<SurfaceTheme | null>;
3564
+
3523
3565
  /**
3524
3566
  * @deprecated Migrate to Tailwind v4. Intent to remove in v6.
3525
3567
  */
@@ -3569,6 +3611,7 @@ declare class ProvideColorDirective {
3569
3611
  private themes;
3570
3612
  private prefix;
3571
3613
  private injector;
3614
+ private rootSurfaceTheme;
3572
3615
  private parentProvider;
3573
3616
  private appRef;
3574
3617
  private currentProviderSync;
@@ -3584,6 +3627,7 @@ declare class ProvideColorDirective {
3584
3627
  */
3585
3628
  resolvedColor: _angular_core.Signal<ColorThemeInput | undefined>;
3586
3629
  colorName: _angular_core.Signal<string | undefined>;
3630
+ private paintedColorName;
3587
3631
  protected themeClass: _angular_core.Signal<string>;
3588
3632
  syncWithProvider(provider: ProvideColorDirective): void;
3589
3633
  stopSyncWithProvider(): void;
@@ -3823,7 +3867,7 @@ type CreateUnsavedChangesTrackerConfig<T> = {
3823
3867
  source: UnsavedChangesSource<T>;
3824
3868
  /**
3825
3869
  * The baseline the current value is compared against.
3826
- * If omitted, the first non-null value the source produces is captured automatically (so
3870
+ * If omitted or `null`, the first non-null value the source produces is captured automatically (so
3827
3871
  * async-filled forms work without wiring). A function is evaluated once, eagerly.
3828
3872
  */
3829
3873
  defaultValue?: T | (() => T);
@@ -3939,7 +3983,7 @@ type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {
3939
3983
  declare const createUnsavedChangesGuard: <T>(config: CreateUnsavedChangesGuardConfig<T>) => UnsavedChangesGuardRef<T>;
3940
3984
 
3941
3985
  /** The version of `@ethlete/core` this build was cut from. */
3942
- declare const CORE_VERSION = "5.0.0-next.62";
3986
+ declare const CORE_VERSION = "5.0.0-next.64";
3943
3987
 
3944
- 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_d 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 };
3945
- export type { AlternateLanguagesConfig, AngularRenderer, AnimatedBlockSizeConfig, AnimatedIfContext, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedSizeAxis, AnimationEndEvent, AppUpdates, AppUpdatesConfig, ArticleConfig, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorPaletteBySurface, ColorPaletteConfig, 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, InjectQueryParamAllConfig, 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, OverlayRuntime, 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 };
3988
+ 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_d 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 };
3989
+ export type { AlternateLanguagesConfig, AngularRenderer, AnimatedBlockSizeConfig, AnimatedIfContext, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedSizeAxis, AnimationEndEvent, AppUpdates, AppUpdatesConfig, ArticleConfig, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorPaletteBySurface, ColorPaletteConfig, ColorPaletteEntry, ColorSchemeConfig, ColorSchemeMode, 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, InjectQueryParamAllConfig, 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, OverlayRuntime, 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 };