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

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,9 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
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
- import { Observable, BehaviorSubject, Subject } from 'rxjs';
4
+ import { Observable } from 'rxjs';
5
5
  import * as _ethlete_core from '@ethlete/core';
6
- import * as _floating_ui_dom from '@floating-ui/dom';
7
6
  import { VirtualElement, Placement, OffsetOptions, Padding } from '@floating-ui/dom';
8
7
  import { MatchListView, ParticipantViewUnion, MatchRankingView, StageType } from '@ethlete/types';
9
8
  import * as _angular_platform_browser from '@angular/platform-browser';
@@ -57,16 +56,28 @@ declare const ANIMATION_DEBUG_STORAGE_KEY = "et-overlay-debug";
57
56
  declare const isAnimationDebugEnabled: () => boolean;
58
57
  declare const animationDebugLog: (scope: string, ...args: unknown[]) => void;
59
58
 
60
- declare const ANIMATED_IF_TOKEN: InjectionToken<AnimatedIfDirective>;
61
- declare class AnimatedIfDirective {
59
+ declare const ANIMATION_ERROR_CODES: {
60
+ /** `*etAnimatedIf` was used without an `[etAnimatedLifecycle]` element around it. */
61
+ readonly MISSING_ANIMATED_LIFECYCLE: 9000;
62
+ };
63
+
64
+ declare const ANIMATED_IF_TOKEN: InjectionToken<AnimatedIfDirective<unknown>>;
65
+ type AnimatedIfContext<T> = {
66
+ $implicit: T;
67
+ etAnimatedIf: T;
68
+ };
69
+ declare class AnimatedIfDirective<T = unknown> {
70
+ static ngTemplateGuard_etAnimatedIf: 'binding';
62
71
  private templateRef;
63
72
  private viewContainerRef;
64
73
  private animatedLifecycle;
65
74
  private hasView;
66
- ifValue: _angular_core.InputSignal<unknown>;
75
+ private context;
76
+ ifValue: _angular_core.InputSignal<T | null>;
77
+ static ngTemplateContextGuard<T>(_dir: AnimatedIfDirective<T>, _ctx: unknown): _ctx is AnimatedIfContext<Exclude<T, false | 0 | '' | null | undefined>>;
67
78
  constructor();
68
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimatedIfDirective, never>;
69
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AnimatedIfDirective, "[etAnimatedIf]", never, { "ifValue": { "alias": "etAnimatedIf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimatedIfDirective<any>, never>;
80
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AnimatedIfDirective<any>, "[etAnimatedIf]", never, { "ifValue": { "alias": "etAnimatedIf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
70
81
  }
71
82
 
72
83
  declare const ANIMATED_LIFECYCLE_TOKEN: InjectionToken<AnimatedLifecycleDirective>;
@@ -82,7 +93,11 @@ declare class AnimatedLifecycleDirective implements AfterViewInit {
82
93
  private transitionIdCounter;
83
94
  private forcedThisFrame;
84
95
  private forcedFrameResetId;
85
- state$: BehaviorSubject<AnimatedLifecycleState>;
96
+ private stateSubject$;
97
+ private _state;
98
+ state: _angular_core.Signal<AnimatedLifecycleState>;
99
+ /** Emits the current lifecycle state synchronously on subscribe, then every change. */
100
+ state$: Observable<AnimatedLifecycleState>;
86
101
  stateChange: _angular_core.OutputRef<AnimatedLifecycleState>;
87
102
  skipNextEnter: _angular_core.ModelSignal<boolean>;
88
103
  constructor();
@@ -113,7 +128,8 @@ declare class AnimatedLifecycleDirective implements AfterViewInit {
113
128
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AnimatedLifecycleDirective, "[etAnimatedLifecycle]", ["etAnimatedLifecycle"], { "skipNextEnter": { "alias": "skipNextEnter"; "required": false; "isSignal": true; }; }, { "stateChange": "stateChange"; "skipNextEnter": "skipNextEnterChange"; }, never, never, true, [{ directive: typeof AnimatableDirective; inputs: {}; outputs: {}; }]>;
114
129
  }
115
130
 
116
- declare const nextFrame: (cb: () => void) => void;
131
+ /** Runs `cb` two frames from now. Returns a function that cancels it if it has not run yet. */
132
+ declare const nextFrame: (cb: () => void) => () => void;
117
133
  declare const fromNextFrame: () => Observable<void>;
118
134
  declare const forceReflow: (element?: HTMLElement) => number;
119
135
  /**
@@ -226,7 +242,7 @@ type AppUpdatesConfig = {
226
242
  * pauses while the tab is hidden and resumes the moment it is looked at again, so a tab left open
227
243
  * overnight asks once on return rather than thousands of times in the dark.
228
244
  *
229
- * `0` polls not at all, leaving {@link AppUpdates.check} to the app.
245
+ * `0` polls not at all, leaving {@link AppUpdates.check$} to the app.
230
246
  * @default 300_000
231
247
  */
232
248
  pollInterval: number;
@@ -268,8 +284,8 @@ type AppUpdates = {
268
284
  isRequired: Signal<boolean>;
269
285
  /** Whether reloading right now would throw away unsaved changes - the reason an update can't just reload. */
270
286
  wouldDiscardChanges: Signal<boolean>;
271
- /** Checks for a new deploy now, regardless of the poll schedule. */
272
- check: () => Promise<void>;
287
+ /** Checks for a new deploy now, regardless of the poll schedule. Cold: nothing is fetched until it is subscribed. */
288
+ check$: () => Observable<void>;
273
289
  /**
274
290
  * Reloads the page, releasing the unsaved-changes tab locks first so the browser does not ask its
275
291
  * own "Leave site?" question on top of whatever the app already asked.
@@ -312,14 +328,15 @@ declare const provideAppUpdates: (config?: Partial<AppUpdatesConfig>) => (_angul
312
328
  */
313
329
  declare const readBuildFingerprint: (document: Document) => string;
314
330
  /**
315
- * Reads the currently deployed build's fingerprint from the app's entry document.
331
+ * Reads the currently deployed build's fingerprint from the app's entry document. Cold: nothing is fetched
332
+ * until it is subscribed.
316
333
  *
317
334
  * `null` for anything that is not a usable answer - a network failure, a non-2xx response, or a body
318
335
  * with no entry scripts in it. Callers must treat that as "no information" rather than as a change:
319
336
  * an error page parses perfectly well as HTML, and acting on its empty fingerprint would reload the
320
337
  * app in a loop.
321
338
  */
322
- declare const fetchDeployedBuildFingerprint: (url: string) => Promise<string | null>;
339
+ declare const fetchDeployedBuildFingerprint$: (url: string) => Observable<string | null>;
323
340
 
324
341
  /**
325
342
  * Whether an error means the running build is stale - a module it was going to import lazily is no
@@ -333,6 +350,7 @@ declare class ClickOutsideDirective {
333
350
  private elementRef;
334
351
  private document;
335
352
  didClickOutside: _angular_core.OutputEmitterRef<MouseEvent>;
353
+ private pressStartedInside;
336
354
  constructor();
337
355
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClickOutsideDirective, never>;
338
356
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ClickOutsideDirective, "[etClickOutside]", never, {}, { "didClickOutside": "etClickOutside"; }, never, never, true, never>;
@@ -579,6 +597,7 @@ declare const injectBreakpointObserver: _ethlete_core.InjectFn<{
579
597
 
580
598
  type BreakpointMap<T> = Partial<Record<Breakpoint, T>>;
581
599
  type BreakpointInput<T> = T | BreakpointMap<T>;
600
+ /** Builds an input transform that coerces a value or a per-breakpoint map to `T` for the current breakpoint. */
582
601
  declare const breakpointTransformBase: <T, WriteT = BreakpointInput<T>>(coerce: (value: WriteT) => T, defaultValue: T) => ((value: WriteT) => T);
583
602
  /**
584
603
  * Transform factory for boolean inputs.
@@ -785,8 +804,10 @@ declare const signalElementDimensions: (el: SignalElementBindingType) => Signal<
785
804
  declare const signalHostElementDimensions: () => Signal<NullableElementDimensions>;
786
805
  declare const injectViewportSize: () => Signal<ElementSize>;
787
806
 
788
- type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {
807
+ type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root' | 'rootMargin' | 'threshold'> & {
789
808
  root?: SignalElementBindingType;
809
+ rootMargin?: MaybeSignal<string>;
810
+ threshold?: MaybeSignal<number | number[]>;
790
811
  enabled?: Signal<boolean>;
791
812
  };
792
813
  type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {
@@ -1026,6 +1047,18 @@ type CreateUserConsentProviderOptions = {
1026
1047
  };
1027
1048
  declare const createUserConsentProvider: (options: CreateUserConsentProviderOptions) => Provider;
1028
1049
 
1050
+ /**
1051
+ * Declares the `et-visually-hidden` class as a styles-only component: content that stays in the
1052
+ * accessibility tree but is clipped out of the layout. Mount it from any component whose template
1053
+ * uses the class.
1054
+ */
1055
+ declare class VisuallyHiddenStylesComponent {
1056
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<VisuallyHiddenStylesComponent, never>;
1057
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VisuallyHiddenStylesComponent, "et-visually-hidden-styles", never, {}, {}, never, never, true, never>;
1058
+ }
1059
+ /** Mounts {@link VisuallyHiddenStylesComponent}. Call from an injection context. */
1060
+ declare const mountVisuallyHidden: () => _angular_core.ComponentRef<VisuallyHiddenStylesComponent>;
1061
+
1029
1062
  /** Inject a signal containing a boolean value indicating if the viewport is xs */
1030
1063
  declare const injectIsXs: () => _angular_core.Signal<boolean>;
1031
1064
  /** Inject a signal containing a boolean value indicating if the viewport is sm */
@@ -1306,26 +1339,35 @@ declare const injectRouterState: () => Signal<RouterState>;
1306
1339
  /** Inject a signal containing the current route fragment (the part after the # inside the url if present) */
1307
1340
  declare const injectFragment: <T = string | null>(config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1308
1341
  /** Inject all currently available query parameters as a signal */
1309
- declare const injectQueryParams: () => Signal<Params>;
1342
+ declare const injectQueryParams: (config?: InjectUtilConfig) => Signal<Params>;
1310
1343
  /** Inject all currently available route data as a signal */
1311
- declare const injectRouteData: () => Signal<Data>;
1344
+ declare const injectRouteData: (config?: InjectUtilConfig) => Signal<Data>;
1312
1345
  /** Inject the current route title as a signal */
1313
- declare const injectRouteTitle: <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1346
+ declare const injectRouteTitle: <T = string | null>(config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1314
1347
  /** Inject all currently available path parameters as a signal */
1315
- declare const injectPathParams: () => Signal<Params>;
1316
- type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {
1348
+ declare const injectPathParams: (config?: InjectUtilConfig) => Signal<Params>;
1349
+ type InjectQueryParamConfig<T> = InjectUtilConfig & InjectUtilTransformConfig<string | null, T> & {
1317
1350
  /**
1318
1351
  * If true, the initial value will be read from the browser's url.
1319
1352
  * Note that this will not work with arrays or complex objects.
1320
1353
  */
1321
1354
  requireSync?: boolean;
1322
1355
  };
1323
- /** Inject a specific query parameter as a signal */
1356
+ type InjectQueryParamAllConfig<T> = InjectUtilConfig & InjectUtilTransformConfig<string[], T> & {
1357
+ /** If true, the values are read from the browser's url while the router has none. */
1358
+ requireSync?: boolean;
1359
+ };
1360
+ /**
1361
+ * Inject a specific query parameter as a signal. A repeated parameter (`?tag=a&tag=b`) resolves to its first value;
1362
+ * use `injectQueryParamAll` to read every value.
1363
+ */
1324
1364
  declare const injectQueryParam: <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => Signal<T>;
1365
+ /** Inject every value of a specific query parameter as a signal. Resolves to an empty array when it is absent. */
1366
+ declare const injectQueryParamAll: <T = string[]>(key: string, config?: InjectQueryParamAllConfig<T>) => Signal<T>;
1325
1367
  /** Inject a specific route data item as a signal */
1326
- declare const injectRouteDataItem: <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => Signal<T>;
1368
+ declare const injectRouteDataItem: <T = unknown>(key: string, config?: InjectUtilConfig & InjectUtilTransformConfig<unknown, T>) => Signal<T>;
1327
1369
  /** Inject a specific path parameter as a signal */
1328
- declare const injectPathParam: <T = string | null>(key: string, config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1370
+ declare const injectPathParam: <T = string | null>(key: string, config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1329
1371
  /**
1330
1372
  * Inject query params that changed during navigation. Unchanged query params will be ignored.
1331
1373
  * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.
@@ -1357,7 +1399,7 @@ declare const injectPathParamChanges: () => Signal<Record<string, unknown>>;
1357
1399
  * protected cameFromCart = this.navState?.fromCart ?? false;
1358
1400
  * }
1359
1401
  */
1360
- declare const injectRouterNavigationState: <T>() => T | null;
1402
+ declare const injectRouterNavigationState: <T>(config?: InjectUtilConfig) => T | null;
1361
1403
 
1362
1404
  declare class ScrollObserverDirective {
1363
1405
  private elementRef;
@@ -1369,9 +1411,7 @@ declare class ScrollObserverDirective {
1369
1411
  private _endIntersection;
1370
1412
  isAtStart: Signal<boolean>;
1371
1413
  isAtEnd: Signal<boolean>;
1372
- /** @internal */
1373
1414
  registerStart(el: ElementRef<HTMLElement>): () => void;
1374
- /** @internal */
1375
1415
  registerEnd(el: ElementRef<HTMLElement>): () => void;
1376
1416
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollObserverDirective, never>;
1377
1417
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ScrollObserverDirective, "[etScrollObserver]", ["etScrollObserver"], { "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; }, { "enabled": "enabledChange"; }, never, never, true, never>;
@@ -1690,7 +1730,7 @@ declare const injectNotifications: _ethlete_core.InjectFn<Notifications>;
1690
1730
 
1691
1731
  type OverlayRuntimeRole = 'dialog' | 'alertdialog';
1692
1732
  type OverlayRuntimeAutoFocusTarget = 'container' | 'first-heading' | 'first-tabbable';
1693
- type OverlayRuntimeCloseSource = 'api' | 'escape' | 'outside-pointer' | 'drag' | 'reference-detached' | 'replace';
1733
+ type OverlayRuntimeCloseSource = 'api' | 'escape' | 'outside-pointer' | 'drag' | 'reference-detached' | 'replace' | 'navigation';
1694
1734
  type OverlayRuntimeCenteredPosition = {
1695
1735
  kind: 'center';
1696
1736
  };
@@ -1836,44 +1876,29 @@ type OverlayRuntimeMountConfig<TComponent extends object> = {
1836
1876
  };
1837
1877
 
1838
1878
  type OverlayRuntimeState = 'mounting' | 'mounted' | 'closing' | 'closed';
1839
- declare const createOverlayRuntimeRef: <TComponent extends object, TResult = unknown>(id: string, config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">, elements: OverlayRuntimeElements, requestClose: (result: TResult | undefined, source: OverlayRuntimeCloseSource) => void) => {
1840
- id: string;
1841
- config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">;
1842
- elements: OverlayRuntimeElements;
1843
- state: _angular_core.Signal<OverlayRuntimeState>;
1844
- componentInstance: _angular_core.Signal<TComponent | null>;
1845
- /** @internal */
1846
- beforeOpenedSubject: Subject<void>;
1879
+ /**
1880
+ * The handle `OverlayRuntime.mount()` returns. The lifecycle observables replay their event, so a
1881
+ * subscriber that arrives after it still gets one emission.
1882
+ */
1883
+ type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = {
1884
+ readonly id: string;
1885
+ readonly config: Omit<OverlayRuntimeMountConfig<TComponent>, 'component'>;
1886
+ readonly elements: OverlayRuntimeElements;
1887
+ readonly state: Signal<OverlayRuntimeState>;
1888
+ readonly componentInstance: Signal<TComponent | null>;
1847
1889
  close(result?: TResult, source?: OverlayRuntimeCloseSource): void;
1848
- /** Close bypassing every registered close guard - used by a guard's owner to commit a
1849
- * close it previously vetoed (e.g. after an async confirm resolved). */
1890
+ /** Closes while bypassing every registered close guard, e.g. to commit a close a guard vetoed earlier. */
1850
1891
  forceClose(result?: TResult, source?: OverlayRuntimeCloseSource): void;
1851
- /** Register a synchronous veto for pending closes. Returns an unregister function. */
1892
+ /** Registers a synchronous veto for pending closes. Returns an unregister function. */
1852
1893
  registerCloseGuard(guard: OverlayRuntimeCloseGuard<TResult>): () => void;
1853
1894
  beforeOpened(): Observable<void>;
1854
1895
  afterOpened(): Observable<void>;
1855
1896
  beforeClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
1856
1897
  afterClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
1857
- /** @internal */
1858
- attachComponentRef(componentRef: ComponentRef<TComponent>): void;
1859
- /** @internal */
1860
- attachPositionUpdater(updater: (strategy: OverlayRuntimePositionStrategy) => void): void;
1861
1898
  updatePositionStrategy(strategy: OverlayRuntimePositionStrategy): void;
1862
- /** @internal */
1863
- attachBackdropUpdater(updater: (hasBackdrop: boolean) => void): void;
1864
- /**
1865
- * Adds or removes the backdrop of an open overlay. `elements.backdropElement` follows.
1866
- * A closing overlay keeps the backdrop it has, so its leave transition stays intact.
1867
- */
1899
+ /** Adds or removes the backdrop of an open overlay. A closing overlay keeps the backdrop it has. */
1868
1900
  updateBackdrop(hasBackdrop: boolean): void;
1869
- /** @internal */
1870
- markOpened(): void;
1871
- /** @internal */
1872
- beginClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): boolean;
1873
- /** @internal */
1874
- finishClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): void;
1875
1901
  };
1876
- type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = ReturnType<typeof createOverlayRuntimeRef<TComponent, TResult>>;
1877
1902
 
1878
1903
  declare const FOCUSABLE_SELECTOR: string;
1879
1904
  declare const isHTMLElement: (value: unknown) => value is HTMLElement;
@@ -1923,47 +1948,10 @@ declare const resolveOverlayLayer: (element: Element | null | undefined) => numb
1923
1948
  */
1924
1949
  declare const isOnHigherOverlayLayer: (target: EventTarget | null | undefined, layer: number) => boolean;
1925
1950
 
1926
- declare const setBaseElementStyles: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer) => void;
1927
- declare const setBackdropStyles: (backdropElement: HTMLElement, renderer: AngularRenderer) => void;
1928
1951
  declare const applyCenteredPosition: (hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer, _config: OverlayRuntimeCenteredPosition) => void;
1929
1952
  declare const applyGlobalPosition: (hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer, config: OverlayRuntimeGlobalPosition) => void;
1930
- /**
1931
- * Clears every inline style any position strategy kind may have set and
1932
- * restores the base element styles, so a different strategy can be applied afterwards.
1933
- */
1934
- declare const resetPositioningStyles: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer) => void;
1935
- /**
1936
- * Positions an anchored overlay pane and returns the cleanup for its auto-update loop.
1937
- */
1938
- type AnchoredPositionSetup = (strategy: OverlayRuntimeAnchoredPosition, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1939
- /**
1940
- * Installs the anchored positioning implementation. Called by `anchoredOverlayPosition()`, which is
1941
- * the only thing that pulls `@floating-ui/dom` into the bundle - apps that never anchor an overlay
1942
- * do not ship it.
1943
- *
1944
- * @internal
1945
- */
1946
- declare const registerAnchoredPositionSetup: (setup: AnchoredPositionSetup) => void;
1947
1953
  declare const setupPositioning: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1948
1954
 
1949
- /**
1950
- * The floating-ui middleware only a subset of anchored overlays needs. Installed by
1951
- * `enableAnchoredOverlayPositionExtras()`.
1952
- *
1953
- * @internal
1954
- */
1955
- type AnchoredPositionMiddlewareExtras = {
1956
- size: typeof _floating_ui_dom.size;
1957
- arrow: typeof _floating_ui_dom.arrow;
1958
- hide: typeof _floating_ui_dom.hide;
1959
- };
1960
- /**
1961
- * Installs the `size` / `arrow` / `hide` middleware. Called by
1962
- * `enableAnchoredOverlayPositionExtras()`.
1963
- *
1964
- * @internal
1965
- */
1966
- declare const registerAnchoredPositionMiddlewareExtras: (extras: AnchoredPositionMiddlewareExtras) => void;
1967
1955
  declare const createAnchoredPositionCleanup: (strategy: OverlayRuntimeAnchoredPosition, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1968
1956
  /**
1969
1957
  * Builds an anchored position strategy and installs the anchored positioning implementation.
@@ -2027,8 +2015,6 @@ declare const overlayViewportInsetsFor: (element: Element) => OverlayViewportIns
2027
2015
  /**
2028
2016
  * Runs `listener` whenever a reservation is made or released, so an already positioned overlay can be
2029
2017
  * laid out again. Returns the unsubscribe callback.
2030
- *
2031
- * @internal
2032
2018
  */
2033
2019
  declare const onOverlayViewportInsetsChange: (listener: () => void) => () => void;
2034
2020
 
@@ -2041,6 +2027,9 @@ declare const createComponentId: (prefix: string) => string;
2041
2027
  */
2042
2028
  declare const randomId: () => string;
2043
2029
 
2030
+ /**
2031
+ * @deprecated Use `takeUntilDestroyed()` from `@angular/core/rxjs-interop`. `yarn nx g @ethlete/core:migrate-create-destroy` rewrites the common pattern.
2032
+ */
2044
2033
  declare const createDestroy: () => rxjs.Observable<boolean>;
2045
2034
 
2046
2035
  declare const injectHostElement: <T = HTMLElement>() => T;
@@ -2125,6 +2114,17 @@ declare const createRxHostListener: <K extends keyof HTMLElementEventMap>(eventN
2125
2114
  declare const applyHostListener: <K extends keyof HTMLElementEventMap>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, options?: AddEventListenerOptions) => rxjs.Subscription;
2126
2115
  declare const applyHostListeners: (listeners: Partial<{ [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void; }>, options?: AddEventListenerOptions) => void;
2127
2116
 
2117
+ /**
2118
+ * Like Angular's `booleanAttribute`, but keeps `null` and `undefined` so a tri-state input can tell
2119
+ * "not set" apart from `false`. A bare attribute (`<et-x closeOnActivate>`) reads as `true`.
2120
+ *
2121
+ * @example
2122
+ * closeOnActivate = input<boolean | undefined, unknown>(undefined, { transform: optionalBooleanAttribute });
2123
+ */
2124
+ declare function optionalBooleanAttribute(value: null): null;
2125
+ declare function optionalBooleanAttribute(value: undefined): undefined;
2126
+ declare function optionalBooleanAttribute(value: unknown): boolean;
2127
+
2128
2128
  declare class TypedQueryList<T> extends QueryList<T> {
2129
2129
  get changes(): Observable<TypedQueryList<T>>;
2130
2130
  }
@@ -2187,6 +2187,7 @@ type Translatable = {
2187
2187
  text: string;
2188
2188
  };
2189
2189
 
2190
+ /** @deprecated Keyed on the deprecated `KeyboardEvent.keyCode`. Compare `KeyboardEvent.key` instead. */
2190
2191
  declare class KeyPressManager {
2191
2192
  readonly key: number;
2192
2193
  private isKeyPressed;
@@ -2208,16 +2209,35 @@ declare const createLogger: (config: CreateLoggerConfig) => {
2208
2209
  error: (...args: unknown[]) => void;
2209
2210
  };
2210
2211
 
2212
+ /** Attribute that makes `htmlToMarkdown` write an element's text verbatim, without Markdown escaping:
2213
+ * `<span data-markdown-verbatim>{{user:_x}}</span>` becomes `{{user:_x}}`. The element must hold
2214
+ * text only. */
2215
+ declare const MARKDOWN_VERBATIM_ATTR = "data-markdown-verbatim";
2216
+ /** Whether `url` may be embedded as an image `src`: everything except `javascript:` and `vbscript:`
2217
+ * URLs and non-image `data:` URLs, however they are cased, spaced or entity-encoded. */
2218
+ declare const isSafeUrl: (url: string) => boolean;
2219
+ /** Whether `url` may become a link: `http:`, `https:`, `mailto:` and `tel:` URLs, relative paths and
2220
+ * fragments pass; any other scheme (`javascript:`, `data:`, `vbscript:`, ...) is refused, however
2221
+ * it is cased, spaced or entity-encoded. */
2222
+ declare const isSafeLinkUrl: (url: string) => boolean;
2211
2223
  /**
2212
2224
  * Converts a markdown string to HTML.
2213
2225
  * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
2214
2226
  * links, images, block quotes, unordered/ordered (and nested) lists, tables, horizontal rules, and paragraphs.
2227
+ * A backslash before a punctuation character keeps that character literal.
2228
+ * Text matching `options.verbatim` is emitted as plain text, untouched by any Markdown syntax:
2229
+ * `markdownToHtml('{{field:__x__}}', { verbatim: /\{\{[^}]+\}\}/ })` returns `<p>{{field:__x__}}</p>`.
2215
2230
  */
2216
- declare const markdownToHtml: (markdown: string) => string;
2231
+ declare const markdownToHtml: (markdown: string, options?: {
2232
+ verbatim?: RegExp;
2233
+ }) => string;
2217
2234
  /**
2218
2235
  * Converts an HTML string to markdown.
2219
2236
  * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
2220
2237
  * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.
2238
+ * Text that would read as Markdown is backslash-escaped (code and {@link MARKDOWN_VERBATIM_ATTR}
2239
+ * elements are left as is), and a link whose URL
2240
+ * fails {@link isSafeLinkUrl} keeps only its text.
2221
2241
  */
2222
2242
  declare const htmlToMarkdown: (html: string) => string;
2223
2243
 
@@ -2464,7 +2484,9 @@ declare class InitialsPipe implements PipeTransform {
2464
2484
  declare const initials: (value: string | null | undefined, maxLength?: number) => string;
2465
2485
 
2466
2486
  declare class MarkdownToHtmlPipe implements PipeTransform {
2467
- transform: (markdown: string) => string;
2487
+ transform: (markdown: string, options?: {
2488
+ verbatim?: RegExp;
2489
+ }) => string;
2468
2490
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MarkdownToHtmlPipe, never>;
2469
2491
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<MarkdownToHtmlPipe, "markdownToHtml", true>;
2470
2492
  }
@@ -2502,8 +2524,8 @@ type ResizeEdge = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
2502
2524
  type ResizeMoveEvent = {
2503
2525
  edge: ResizeEdge;
2504
2526
  /** Cumulative delta from the pointerdown position. */
2505
- dx: number;
2506
- dy: number;
2527
+ totalDx: number;
2528
+ totalDy: number;
2507
2529
  clientX: number;
2508
2530
  clientY: number;
2509
2531
  };
@@ -2515,7 +2537,7 @@ declare class ResizeHandlesComponent {
2515
2537
  private gesture$;
2516
2538
  resizeStarted: _angular_core.OutputRef<ResizeEdge>;
2517
2539
  resizeMoved: _angular_core.OutputRef<ResizeMoveEvent>;
2518
- resizeEnded: _angular_core.OutputRef<void>;
2540
+ resizeEnded: _angular_core.OutputRef<ResizeMoveEvent>;
2519
2541
  /**
2520
2542
  * The browser took the gesture away mid-resize (a system gesture, an incoming call, the tab going
2521
2543
  * to the background). Revert to the size the resize started from - the user never let go, so there
@@ -2869,6 +2891,9 @@ declare const injectLinkStore: _ethlete_core.InjectFn<{
2869
2891
  removeLink: (id: symbol, key?: string) => void;
2870
2892
  getLinkKey: (linkConfig: LinkConfig) => string;
2871
2893
  }>;
2894
+ /**
2895
+ * Binds a link tag. Only removes the elements it created; pre-existing links are left in place, unlike meta bindings.
2896
+ */
2872
2897
  declare const applyLinkBinding: (binding: MaybeSignal<LinkConfig | null | undefined>) => void;
2873
2898
  declare const applyCanonicalBinding: (binding: MaybeSignal<string | null | undefined>) => void;
2874
2899
  declare const applyAlternateBinding: (hreflang: string, binding: MaybeSignal<string | null | undefined>) => void;
@@ -2934,6 +2959,9 @@ declare const injectMetaStore: _ethlete_core.InjectFn<{
2934
2959
  removeTag: (id: symbol, selector?: string) => void;
2935
2960
  getSelector: (config: MetaTagConfig) => string;
2936
2961
  }>;
2962
+ /**
2963
+ * Binds a meta tag. Removes any pre-existing tags matching the same selector, unlike link bindings, which leave pre-existing links alone.
2964
+ */
2937
2965
  declare const applyMetaBinding: (binding: MaybeSignal<MetaTagConfig | null | undefined>) => void;
2938
2966
  declare const applyDescriptionBinding: (binding: MaybeSignal<string | null | undefined>) => void;
2939
2967
  declare const applyKeywordsBinding: (binding: MaybeSignal<string[] | null | undefined>) => void;
@@ -3065,11 +3093,11 @@ type TitleConfig = {
3065
3093
  */
3066
3094
  transformer: (title: string, locale: string) => string;
3067
3095
  /**
3068
- * A title part to be prefixed to all titles
3096
+ * A title part to be suffixed to all titles
3069
3097
  */
3070
3098
  suffixPart?: TitlePart;
3071
3099
  /**
3072
- * A title part to be suffixed to all titles
3100
+ * A title part to be prefixed to all titles
3073
3101
  */
3074
3102
  prefixPart?: TitlePart;
3075
3103
  };
@@ -3172,6 +3200,99 @@ declare class ColorInteractiveDirective {
3172
3200
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ColorInteractiveDirective, "[etColorInteractive]", never, {}, {}, never, never, true, never>;
3173
3201
  }
3174
3202
 
3203
+ type ThemeRGBColor = `${number} ${number} ${number}`;
3204
+ type ThemeHSLColor = `${number} ${number}% ${number}%`;
3205
+ type ThemeColor = ThemeRGBColor | ThemeHSLColor;
3206
+ type ThemeColorMap = {
3207
+ default: ThemeColor;
3208
+ hover: ThemeColor;
3209
+ focus?: ThemeColor;
3210
+ active: ThemeColor;
3211
+ disabled: ThemeColor;
3212
+ };
3213
+ type OnThemeColorMap = {
3214
+ default: ThemeColor;
3215
+ hover?: ThemeColor;
3216
+ focus?: ThemeColor;
3217
+ active?: ThemeColor;
3218
+ disabled?: ThemeColor;
3219
+ };
3220
+ type ThemeInkColorMap = {
3221
+ default: ThemeColor;
3222
+ hover?: ThemeColor;
3223
+ focus?: ThemeColor;
3224
+ active?: ThemeColor;
3225
+ disabled?: ThemeColor;
3226
+ };
3227
+ type ThemeSwatch = {
3228
+ color: ThemeColorMap;
3229
+ onColor: OnThemeColorMap;
3230
+ inkColor?: ThemeInkColorMap;
3231
+ };
3232
+ type ColorThemeType = 'success' | 'warning' | 'error';
3233
+ type ColorTheme = {
3234
+ name: string;
3235
+ type?: ColorThemeType;
3236
+ isDefault?: boolean;
3237
+ primary: ThemeSwatch;
3238
+ secondary?: ThemeSwatch;
3239
+ tertiary?: ThemeSwatch;
3240
+ };
3241
+ /**
3242
+ * Augmentable registry for the literal set of color theme names an app defines. Left
3243
+ * empty by default, which keeps theme-name-accepting APIs (like `etProvideColor`) typed
3244
+ * as plain `string`.
3245
+ *
3246
+ * Apps that want those APIs checked and autocompleted against their own theme names
3247
+ * should augment this interface once, near where their themes are defined:
3248
+ *
3249
+ * ```ts
3250
+ * declare module '@ethlete/core' {
3251
+ * interface EthleteColorThemeNameRegistry {
3252
+ * name: 'pitch-green' | 'red' | 'light-grey';
3253
+ * }
3254
+ * }
3255
+ * ```
3256
+ */
3257
+ interface EthleteColorThemeNameRegistry {
3258
+ }
3259
+ type RegisteredColorThemeName = EthleteColorThemeNameRegistry extends {
3260
+ name: infer N extends string;
3261
+ } ? N : string;
3262
+ /**
3263
+ * Reserved color name. Resolves the color tokens from the ambient surface's neutral swatch
3264
+ * (`SurfaceTheme['interactionColor']`) instead of a registered accent, so a secondary action can
3265
+ * read as chrome without the app registering a neutral color theme. Apps must not register a color
3266
+ * theme under this name.
3267
+ */
3268
+ declare const SURFACE_COLOR = "surface";
3269
+ type SurfaceColor = typeof SURFACE_COLOR;
3270
+ /** Everything `[etProvideColor]` accepts: a registered theme name, a theme object, `surface`, or nothing. */
3271
+ type ColorThemeInput = RegisteredColorThemeName | SurfaceColor | ColorTheme | null;
3272
+ declare const createCssColorThemeName: (name: string) => string;
3273
+ declare const ɵProvideColorThemes: (valueOverride?: (ColorTheme | undefined)[] | undefined) => _angular_core.StaticProvider[];
3274
+ declare const injectColorThemes: _ethlete_core.InjectFn<ColorTheme[]>;
3275
+ declare const ɵProvideColorThemesPrefix: (valueOverride?: string | undefined) => _angular_core.StaticProvider[];
3276
+ declare const injectColorThemesPrefix: _ethlete_core.InjectFn<string>;
3277
+ declare const provideColorThemesWithTailwind4: (themes: ColorTheme[], prefix?: string) => _angular_core.StaticProvider[][];
3278
+ /**
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.
3282
+ *
3283
+ * @example
3284
+ * protected successTheme = injectSemanticColorTheme('success');
3285
+ * // <span [etProvideColor]="successTheme()">+12%</span>
3286
+ */
3287
+ declare const injectSemanticColorTheme: (type: ColorThemeType) => Signal<ColorTheme>;
3288
+ /** @deprecated Use `injectSemanticColorTheme('error')`, which follows the surface the element renders on. */
3289
+ declare const injectErrorTheme: () => ColorTheme;
3290
+ /** @deprecated Use `injectSemanticColorTheme('warning')`, which follows the surface the element renders on. */
3291
+ declare const injectWarningTheme: () => ColorTheme;
3292
+ /** @deprecated Use `injectSemanticColorTheme('success')`, which follows the surface the element renders on. */
3293
+ declare const injectSuccessTheme: () => ColorTheme;
3294
+ declare const injectDefaultColorTheme: () => ColorTheme;
3295
+
3175
3296
  declare const SURFACE_TYPE: {
3176
3297
  readonly LIGHT: "light";
3177
3298
  readonly DARK: "dark";
@@ -3211,6 +3332,17 @@ type SurfaceTheme = {
3211
3332
  elevation: number;
3212
3333
  isDefault?: boolean;
3213
3334
  interactionColor?: SurfaceInteractionColor;
3335
+ /**
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()`.
3339
+ */
3340
+ 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
+ */
3345
+ colorTheme?: RegisteredColorThemeName;
3214
3346
  background: SurfaceThemeColor;
3215
3347
  color: SurfaceThemeColor;
3216
3348
  colorMuted: SurfaceThemeColor;
@@ -3264,6 +3396,9 @@ declare class ProvideSurfaceDirective {
3264
3396
  private injector;
3265
3397
  private parentProvider;
3266
3398
  private defaultTheme;
3399
+ private colorThemes;
3400
+ private colorPrefix;
3401
+ private colorProvider;
3267
3402
  private currentProviderSync;
3268
3403
  private forcedSurface;
3269
3404
  surface: InputSignal<RegisteredSurfaceThemeName | null | undefined>;
@@ -3278,12 +3413,11 @@ declare class ProvideSurfaceDirective {
3278
3413
  elevation: Signal<number>;
3279
3414
  surfaceType: Signal<_ethlete_core.SurfaceType | null>;
3280
3415
  surfaceName: Signal<string | undefined>;
3416
+ private colorThemeClass;
3281
3417
  protected surfaceClass: Signal<string>;
3282
3418
  syncWithProvider(provider: ProvideSurfaceDirective): void;
3283
3419
  stopSyncWithProvider(): void;
3284
- /** @internal */
3285
3420
  forceSurface(surface: RegisteredSurfaceThemeName | null): void;
3286
- /** @internal */
3287
3421
  clearForcedSurface(): void;
3288
3422
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProvideSurfaceDirective, never>;
3289
3423
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ProvideSurfaceDirective, "[etProvideSurface]", never, { "surface": { "alias": "etProvideSurface"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -3333,86 +3467,6 @@ declare class AutoSurfaceDirective {
3333
3467
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AutoSurfaceDirective, "[etAutoSurface]", never, { "surfaceProvider": { "alias": "surfaceProvider"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof ProvideSurfaceDirective; inputs: {}; outputs: {}; }]>;
3334
3468
  }
3335
3469
 
3336
- type ThemeRGBColor = `${number} ${number} ${number}`;
3337
- type ThemeHSLColor = `${number} ${number}% ${number}%`;
3338
- type ThemeColor = ThemeRGBColor | ThemeHSLColor;
3339
- type ThemeColorMap = {
3340
- default: ThemeColor;
3341
- hover: ThemeColor;
3342
- focus?: ThemeColor;
3343
- active: ThemeColor;
3344
- disabled: ThemeColor;
3345
- };
3346
- type OnThemeColorMap = {
3347
- default: ThemeColor;
3348
- hover?: ThemeColor;
3349
- focus?: ThemeColor;
3350
- active?: ThemeColor;
3351
- disabled?: ThemeColor;
3352
- };
3353
- type ThemeInkColorMap = {
3354
- default: ThemeColor;
3355
- hover?: ThemeColor;
3356
- focus?: ThemeColor;
3357
- active?: ThemeColor;
3358
- disabled?: ThemeColor;
3359
- };
3360
- type ThemeSwatch = {
3361
- color: ThemeColorMap;
3362
- onColor: OnThemeColorMap;
3363
- inkColor?: ThemeInkColorMap;
3364
- };
3365
- type ColorThemeType = 'success' | 'warning' | 'error';
3366
- type ColorTheme = {
3367
- name: string;
3368
- type?: ColorThemeType;
3369
- isDefault?: boolean;
3370
- primary: ThemeSwatch;
3371
- secondary?: ThemeSwatch;
3372
- tertiary?: ThemeSwatch;
3373
- };
3374
- /**
3375
- * Augmentable registry for the literal set of color theme names an app defines. Left
3376
- * empty by default, which keeps theme-name-accepting APIs (like `etProvideColor`) typed
3377
- * as plain `string`.
3378
- *
3379
- * Apps that want those APIs checked and autocompleted against their own theme names
3380
- * should augment this interface once, near where their themes are defined:
3381
- *
3382
- * ```ts
3383
- * declare module '@ethlete/core' {
3384
- * interface EthleteColorThemeNameRegistry {
3385
- * name: 'pitch-green' | 'red' | 'light-grey';
3386
- * }
3387
- * }
3388
- * ```
3389
- */
3390
- interface EthleteColorThemeNameRegistry {
3391
- }
3392
- type RegisteredColorThemeName = EthleteColorThemeNameRegistry extends {
3393
- name: infer N extends string;
3394
- } ? N : string;
3395
- /**
3396
- * Reserved color name. Resolves the color tokens from the ambient surface's neutral swatch
3397
- * (`SurfaceTheme['interactionColor']`) instead of a registered accent, so a secondary action can
3398
- * read as chrome without the app registering a neutral color theme. Apps must not register a color
3399
- * theme under this name.
3400
- */
3401
- declare const SURFACE_COLOR = "surface";
3402
- type SurfaceColor = typeof SURFACE_COLOR;
3403
- /** Everything `[etProvideColor]` accepts: a registered theme name, a theme object, `surface`, or nothing. */
3404
- type ColorThemeInput = RegisteredColorThemeName | SurfaceColor | ColorTheme | null;
3405
- declare const createCssColorThemeName: (name: string) => string;
3406
- declare const ɵProvideColorThemes: (valueOverride?: (ColorTheme | undefined)[] | undefined) => _angular_core.StaticProvider[];
3407
- declare const injectColorThemes: _ethlete_core.InjectFn<ColorTheme[]>;
3408
- declare const ɵProvideColorThemesPrefix: (valueOverride?: string | undefined) => _angular_core.StaticProvider[];
3409
- declare const injectColorThemesPrefix: _ethlete_core.InjectFn<string>;
3410
- declare const provideColorThemesWithTailwind4: (themes: ColorTheme[], prefix?: string) => _angular_core.StaticProvider[][];
3411
- declare const injectErrorTheme: () => ColorTheme;
3412
- declare const injectWarningTheme: () => ColorTheme;
3413
- declare const injectSuccessTheme: () => ColorTheme;
3414
- declare const injectDefaultColorTheme: () => ColorTheme;
3415
-
3416
3470
  /** One choice in a {@link provideColorPalette} palette. */
3417
3471
  type ColorPaletteEntry = {
3418
3472
  /** The color theme this choice selects - a name the app registered with `provideColorThemesWithTailwind4`. */
@@ -3420,25 +3474,51 @@ type ColorPaletteEntry = {
3420
3474
  /** What a user reads next to the swatch. Provide it already translated. */
3421
3475
  label: string;
3422
3476
  };
3477
+ /**
3478
+ * One palette per surface theme the app registered, keyed by the surface theme name. `default` is
3479
+ * used on every surface without its own list. Every list must keep the same order.
3480
+ */
3481
+ type ColorPaletteBySurface = {
3482
+ default: ColorPaletteEntry[];
3483
+ } & Partial<Record<RegisteredSurfaceThemeName, ColorPaletteEntry[]>>;
3484
+ type ColorPaletteConfig = ColorPaletteEntry[] | ColorPaletteBySurface;
3423
3485
  /**
3424
3486
  * The color themes a subtree may offer a user as pickable choices, in the order they should appear.
3425
3487
  * A curated slice of what `provideColorThemesWithTailwind4` registered: an app registers every theme
3426
3488
  * it renders with, including ones nobody should pick by hand (`error`, `warning`), and adds the
3427
3489
  * user-facing label a swatch needs.
3428
3490
  *
3429
- * Components that let a user choose a color read it optionally and fall back to accepting a raw
3430
- * theme name when it is absent - the scheduler's `colorToken` field is the reference consumer.
3491
+ * Pass one list, or one list per registered surface theme name plus a `default`. The charts draw with
3492
+ * the list of the surface they sit on; a color picker always offers the `default` list.
3431
3493
  *
3432
3494
  * @example
3433
3495
  * provideColorPalette([
3434
3496
  * { token: 'brand', label: 'Team green' },
3435
3497
  * { token: 'ocean', label: 'Training blue' },
3436
3498
  * ]);
3499
+ *
3500
+ * @example
3501
+ * provideColorPalette({
3502
+ * default: [{ token: 'ocean', label: 'Training' }],
3503
+ * 'dark-card': [{ token: 'ocean-bright', label: 'Training' }],
3504
+ * });
3505
+ */
3506
+ declare const provideColorPalette: (palette: ColorPaletteConfig) => _angular_core.StaticProvider[];
3507
+ /**
3508
+ * The palette from {@link provideColorPalette}; with one list per surface, the `default` list. Pass
3509
+ * `{ optional: true }` - most apps provide none.
3437
3510
  */
3438
- declare const provideColorPalette: (valueOverride?: (ColorPaletteEntry | undefined)[] | undefined) => _angular_core.StaticProvider[];
3439
- /** The palette from {@link provideColorPalette}. Pass `{ optional: true }` - most apps provide none. */
3440
- declare const injectColorPalette: _ethlete_core.InjectFn<ColorPaletteEntry[]>;
3441
- declare const COLOR_PALETTE: _angular_core.InjectionToken<ColorPaletteEntry[]>;
3511
+ declare function injectColorPalette(): ColorPaletteEntry[];
3512
+ declare function injectColorPalette(options: InjectOptions & {
3513
+ optional?: false;
3514
+ }): ColorPaletteEntry[];
3515
+ declare function injectColorPalette(options: InjectOptions): ColorPaletteEntry[] | null;
3516
+ /**
3517
+ * The palette from {@link provideColorPalette} for the surface the current subtree renders on: that
3518
+ * surface theme's list, else the `default` list. `null` when no palette is provided.
3519
+ */
3520
+ declare const injectSurfaceColorPalette: () => Signal<ColorPaletteEntry[] | null>;
3521
+ declare const COLOR_PALETTE: _angular_core.InjectionToken<ColorPaletteConfig>;
3442
3522
 
3443
3523
  /**
3444
3524
  * @deprecated Migrate to Tailwind v4. Intent to remove in v6.
@@ -3483,8 +3563,6 @@ declare const COLOR_PROVIDER: InjectionToken<ProvideColorDirective>;
3483
3563
  * it through element DI, so overlay containers fall back to this when resolving the provider to
3484
3564
  * `syncWithProvider()` - resolve at sync time, not at injection time, since root components only
3485
3565
  * register with `ApplicationRef` once bootstrap completes.
3486
- *
3487
- * @internal
3488
3566
  */
3489
3567
  declare const resolveAppRootColorProvider: (appRef: ApplicationRef) => ProvideColorDirective | null;
3490
3568
  declare class ProvideColorDirective {
@@ -3492,6 +3570,7 @@ declare class ProvideColorDirective {
3492
3570
  private prefix;
3493
3571
  private injector;
3494
3572
  private parentProvider;
3573
+ private appRef;
3495
3574
  private currentProviderSync;
3496
3575
  private forcedColor;
3497
3576
  color: InputSignal<ColorThemeInput | undefined>;
@@ -3508,9 +3587,7 @@ declare class ProvideColorDirective {
3508
3587
  protected themeClass: _angular_core.Signal<string>;
3509
3588
  syncWithProvider(provider: ProvideColorDirective): void;
3510
3589
  stopSyncWithProvider(): void;
3511
- /** @internal */
3512
3590
  forceColor(color: ColorThemeInput): void;
3513
- /** @internal */
3514
3591
  clearForcedColor(): void;
3515
3592
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProvideColorDirective, never>;
3516
3593
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ProvideColorDirective, "[etProvideColor]", never, { "color": { "alias": "etProvideColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -3565,8 +3642,9 @@ type UnsavedChangesAbandonReason = 'logout' | (string & {});
3565
3642
  type UnsavedChangesConfirmContext = {
3566
3643
  /**
3567
3644
  * Aborts when the session this confirm belongs to ends underneath it - a logout, or an explicit
3568
- * `abandonAll()`. **Close your confirm dialog when it fires**, otherwise it is left on screen over
3569
- * a page the user has already been redirected away from. The guard itself stops waiting either way.
3645
+ * `abandonAll()`. An `Observable` confirm is unsubscribed when it fires; a confirm that returns a
3646
+ * `Promise` must **close its dialog itself**, otherwise it is left on screen over a page the user has
3647
+ * already been redirected away from. The guard itself stops waiting either way.
3570
3648
  *
3571
3649
  * ```ts
3572
3650
  * confirm: (value, { signal }) => {
@@ -3578,7 +3656,7 @@ type UnsavedChangesConfirmContext = {
3578
3656
  */
3579
3657
  signal: AbortSignal;
3580
3658
  };
3581
- /** @internal A live tracker, as seen by the coordinator. */
3659
+ /** A live tracker, as seen by the coordinator. */
3582
3660
  type UnsavedChangesRegistration = {
3583
3661
  abandon: (reason: UnsavedChangesAbandonReason) => void;
3584
3662
  /**
@@ -3661,7 +3739,7 @@ type UnsavedChangesTabConfig = {
3661
3739
  * {@link UNSAVED_CHANGES_TITLE_MARKER}, a string is used as-is.
3662
3740
  *
3663
3741
  * Goes through the core title store (`injectTitleStore`), so the app's title must be owned by it
3664
- * (`applyHeadTitleBinding` / the `etSeo` directive) - an app that writes `document.title` by some
3742
+ * (`applyHeadTitleBinding` / `applySocialMediaBindings`) - an app that writes `document.title` by some
3665
3743
  * other means would fight the store over it.
3666
3744
  * @default false
3667
3745
  */
@@ -3750,10 +3828,11 @@ type CreateUnsavedChangesTrackerConfig<T> = {
3750
3828
  */
3751
3829
  defaultValue?: T | (() => T);
3752
3830
  /**
3753
- * Required, per call site. Runs only when there are changes to discard.
3831
+ * Runs only when there are changes to discard. Defaults to the confirm set with
3832
+ * `provideUnsavedChangesConfirm()`; without either, dev mode throws `ET9100`.
3754
3833
  * @see UnsavedChangesConfirmFn
3755
3834
  */
3756
- confirm: UnsavedChangesConfirmFn<T>;
3835
+ confirm?: UnsavedChangesConfirmFn<T>;
3757
3836
  /**
3758
3837
  * Custom equality between the current value and the default. Deep-equal by default.
3759
3838
  *
@@ -3820,6 +3899,25 @@ type UnsavedChangesTrackerRef<T> = {
3820
3899
  */
3821
3900
  declare const createUnsavedChangesTracker: <T>(config: CreateUnsavedChangesTrackerConfig<T>) => UnsavedChangesTrackerRef<T>;
3822
3901
 
3902
+ /** The confirm an unsaved-changes tracker or guard runs when its own config has none. */
3903
+ declare const UNSAVED_CHANGES_CONFIRM: InjectionToken<UnsavedChangesConfirmFn<unknown>>;
3904
+ /**
3905
+ * Sets the confirm every unsaved-changes tracker and guard below this injector runs when its config has no
3906
+ * `confirm`. `factory` runs once, in an injection context, and returns the confirm.
3907
+ *
3908
+ * @example
3909
+ * provideUnsavedChangesConfirm(() => {
3910
+ * const dialogs = inject(MyDialogs);
3911
+ * return () => dialogs.confirmDiscard();
3912
+ * });
3913
+ */
3914
+ declare const provideUnsavedChangesConfirm: (factory: () => UnsavedChangesConfirmFn<unknown>) => Provider;
3915
+
3916
+ declare const UNSAVED_CHANGES_ERROR_CODES: {
3917
+ /** An unsaved-changes tracker or guard has no `confirm`, and no `provideUnsavedChangesConfirm()` is in scope. */
3918
+ readonly MISSING_CONFIRM: 9100;
3919
+ };
3920
+
3823
3921
  type CreateUnsavedChangesGuardConfig<T> = CreateUnsavedChangesTrackerConfig<T>;
3824
3922
  type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {
3825
3923
  /**
@@ -3841,7 +3939,7 @@ type UnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {
3841
3939
  declare const createUnsavedChangesGuard: <T>(config: CreateUnsavedChangesGuardConfig<T>) => UnsavedChangesGuardRef<T>;
3842
3940
 
3843
3941
  /** The version of `@ethlete/core` this build was cut from. */
3844
- declare const CORE_VERSION = "5.0.0-next.60";
3942
+ declare const CORE_VERSION = "5.0.0-next.62";
3845
3943
 
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 };
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 };
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 };