@ethlete/core 5.0.0-next.14 → 5.0.0-next.16

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,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, AfterViewInit, Signal, ComponentRef, StaticProvider, EmbeddedViewRef, ElementRef, Type, ViewContainerRef, Injector, RendererStyleFlags2, Provider, computed, InjectOptions, TemplateRef, QueryList, InputSignal, InputSignalWithTransform, PipeTransform, TrackByFunction, WritableSignal, DestroyRef, OnInit, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, AfterViewInit, Signal, ComponentRef, StaticProvider, EmbeddedViewRef, WritableSignal, InputSignalWithTransform, ElementRef, QueryList, RendererStyleFlags2, Type, Provider, Injector, ViewContainerRef, computed, InjectOptions, TemplateRef, InputSignal, PipeTransform, TrackByFunction, DestroyRef, OnInit, OnDestroy } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, BehaviorSubject, Subject } from 'rxjs';
5
5
  import * as _ethlete_core from '@ethlete/core';
@@ -8,8 +8,9 @@ import { ComponentPortal, ComponentType } from '@angular/cdk/portal';
8
8
  import { Placement, OffsetOptions, Padding } from '@floating-ui/dom';
9
9
  import { MatchListView, ParticipantViewUnion, MatchRankingView, StageType } from '@ethlete/types';
10
10
  import * as _angular_platform_browser from '@angular/platform-browser';
11
- import { FormGroup, AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
12
- import { Data, Params, Event as Event$1 } from '@angular/router';
11
+ import { AbstractControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';
12
+ import * as _angular_router from '@angular/router';
13
+ import { Data, Params } from '@angular/router';
13
14
 
14
15
  declare const ANIMATABLE_TOKEN: InjectionToken<AnimatableDirective>;
15
16
  type AnimationEndEvent = {
@@ -36,6 +37,14 @@ declare class AnimatableDirective {
36
37
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AnimatableDirective, "[etAnimatable]", ["etAnimatable"], {}, {}, never, never, true, never>;
37
38
  }
38
39
 
40
+ declare const ANIMATION_DEBUG_STORAGE_KEY = "et-overlay-debug";
41
+ /**
42
+ * Debug logging for overlay and animation lifecycle internals.
43
+ * Enable via `localStorage.setItem('et-overlay-debug', 'true')` and reload.
44
+ */
45
+ declare const isAnimationDebugEnabled: () => boolean;
46
+ declare const animationDebugLog: (scope: string, ...args: unknown[]) => void;
47
+
39
48
  declare const ANIMATED_IF_TOKEN: InjectionToken<AnimatedIfDirective>;
40
49
  declare class AnimatedIfDirective {
41
50
  private templateRef;
@@ -77,10 +86,22 @@ declare class AnimatedLifecycleDirective implements AfterViewInit {
77
86
  private removeClass;
78
87
  private removeClasses;
79
88
  private updateState;
89
+ private debugLog;
80
90
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimatedLifecycleDirective, never>;
81
91
  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: {}; }]>;
82
92
  }
83
93
 
94
+ /**
95
+ * Cascades hover/active-driven color DOWN to descendants explicitly marked with
96
+ * `ColorInteractiveDirective` — this element does not color itself. Use it when a wrapper should
97
+ * expand a nested control's hit/visual area (e.g. clicking a checkbox's label should light up the
98
+ * checkbox itself), never to give a wrapper its own interactive coloring — that's
99
+ * `ColorInteractiveDirective`.
100
+ *
101
+ * Does nothing unless at least one descendant carries `ColorInteractiveDirective` — check for
102
+ * that before adding this. It was mistakenly added to a component with no such descendant once
103
+ * already, where it did nothing but was confusing to read.
104
+ */
84
105
  declare class ColorInteractiveContainerDirective {
85
106
  private styleManager;
86
107
  constructor();
@@ -88,11 +109,38 @@ declare class ColorInteractiveContainerDirective {
88
109
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ColorInteractiveContainerDirective, "[etColorInteractiveContainer]", never, {}, {}, never, never, true, never>;
89
110
  }
90
111
 
112
+ /**
113
+ * Marks a descendant as NOT counting toward an ancestor's `ColorInteractiveDirective`
114
+ * `:hover`/`:active` reaction (via the `:has()` guard in color-interactive-styles.component.css).
115
+ * Use it for content that's incidentally inside an interactive ancestor but isn't part of what
116
+ * makes that ancestor interactive — e.g. a hint/error block sitting inside a form field's frame.
117
+ *
118
+ * This only suppresses the ancestor's OWN reaction to hovering/pressing the excluded element — it
119
+ * has no effect on custom-property inheritance into descendants past the excluded element. If
120
+ * what you actually need is "stop my own cosmetic styling from reacting to a parent's unrelated
121
+ * interaction," this is the wrong tool; that's the class of bug `ColorInteractiveHasFocusDirective`
122
+ * used to have (see its own comment).
123
+ */
91
124
  declare class ColorInteractiveExcludeDirective {
92
125
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColorInteractiveExcludeDirective, never>;
93
126
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ColorInteractiveExcludeDirective, "[etColorInteractiveExclude]", never, {}, {}, never, never, true, never>;
94
127
  }
95
128
 
129
+ /**
130
+ * Tints `--et-theme-color-primary-*` etc. only when a descendant genuinely has `:focus-visible`
131
+ * (`:has(:focus-visible)`) — never on mouse `:hover`/`:active`. Use this for a wrapper (like a
132
+ * form field's frame) that should show the theme color while its control is focused, but must
133
+ * NOT react to incidental mouse interaction with unrelated nested widgets (a toolbar button, a
134
+ * rendered link) that happen to live inside the same wrapper.
135
+ *
136
+ * Deliberately does NOT also carry `ColorInteractiveDirective`'s `et-color-interactive` class:
137
+ * that class's plain `:hover`/`:active` rules locally override the same (inheriting)
138
+ * `--et-theme-color-primary-rgb`, so anything bubbling up from ANYWHERE in the subtree would
139
+ * leak the transient hover/press color into every descendant reading it for unrelated cosmetics —
140
+ * exactly the bug this directive's only consumer (form-field) shipped once, before the two
141
+ * behaviors were split apart. If you need the plain hover/active reaction too, add
142
+ * `ColorInteractiveDirective` explicitly and make sure you actually want both.
143
+ */
96
144
  declare class ColorInteractiveHasFocusDirective {
97
145
  private styleManager;
98
146
  constructor();
@@ -100,6 +148,19 @@ declare class ColorInteractiveHasFocusDirective {
100
148
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ColorInteractiveHasFocusDirective, "[etColorInteractiveHasFocus]", never, {}, {}, never, never, true, never>;
101
149
  }
102
150
 
151
+ /**
152
+ * Makes an element react to ITS OWN `:hover`/`:active`/`:focus-visible`/`[disabled]` by tinting
153
+ * `--et-theme-color-primary-*`/`-on-primary-*`/`-ink-*` with the current color theme. Use this on
154
+ * a single, self-contained interactive element — a button, a checkbox, a segmented button.
155
+ *
156
+ * Do NOT apply this to a wrapper that also contains OTHER, independently-interactive elements
157
+ * (e.g. a toolbar with its own buttons, or a form-field's control slot). These are ordinary
158
+ * inheriting CSS custom properties, so a descendant reading them for its own cosmetics (a caret
159
+ * color, a link color) gets swept along whenever ANYTHING inside the wrapper is hovered or
160
+ * clicked — not just when the wrapper itself is the thing being interacted with. That exact bug
161
+ * shipped once already; see ColorInteractiveContainerDirective/ColorInteractiveHasFocusDirective
162
+ * for the shapes that avoid it.
163
+ */
103
164
  declare class ColorInteractiveDirective {
104
165
  private styleManager;
105
166
  constructor();
@@ -311,6 +372,17 @@ declare const injectSurfaceContextTracker: {
311
372
  (options: _angular_core.InjectOptions): SurfaceContextTracker | null;
312
373
  };
313
374
 
375
+ /**
376
+ * Same shape as `ColorInteractiveDirective` — reacts to its own `:hover`/`:focus-visible`/
377
+ * `:active`/`[disabled]` — but drives `--et-surface-interaction-*`, a neutral/muted tint, instead
378
+ * of the ambient color theme. Use it for chrome-level interaction feedback that shouldn't borrow
379
+ * the page's brand color (a tab trigger's hover state, a toggle button that should look neutral
380
+ * until it's actually active — see `ButtonDirective`'s `mutedUntilPressed`).
381
+ *
382
+ * Has no container/exclude/has-focus variants: it has no descendant-cascading CSS at all, so
383
+ * applying it to a wrapper with independently-interactive children is safe by construction —
384
+ * unlike `ColorInteractiveDirective`, there's no bubbling-leak failure mode to worry about here.
385
+ */
314
386
  declare class SurfaceInteractiveDirective {
315
387
  private styleManager;
316
388
  constructor();
@@ -488,129 +560,374 @@ declare class ScrollObserverStartDirective {
488
560
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ScrollObserverStartDirective, "[etScrollObserverStart]", never, {}, {}, never, never, true, never>;
489
561
  }
490
562
 
491
- declare class ScrollObserverDirective {
492
- private elementRef;
493
- enabled: _angular_core.ModelSignal<boolean>;
494
- private _startEl;
495
- private _endEl;
496
- private _startIntersection;
497
- private _endIntersection;
498
- isAtStart: Signal<boolean>;
499
- isAtEnd: Signal<boolean>;
500
- _registerStart(el: ElementRef<HTMLElement>): void;
501
- _registerEnd(el: ElementRef<HTMLElement>): void;
502
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollObserverDirective, never>;
503
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ScrollObserverDirective, "[etScrollObserver]", ["etScrollObserver"], { "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; }, { "enabled": "enabledChange"; }, never, never, true, never>;
504
- }
505
-
506
- type DragMoveEvent = {
507
- readonly stepX: number;
508
- readonly stepY: number;
509
- readonly clientX: number;
510
- readonly clientY: number;
563
+ declare const previousSignalValue: <T>(signal: Signal<T>) => Signal<T | undefined>;
564
+ type SyncSignalOptions = {
565
+ /**
566
+ * If true, the target signal will not be updated with the source signal's value in a sync operation.
567
+ * This should be set to true for signals that need to be initialized first before syncing (eg. required inputs)
568
+ * @default false
569
+ */
570
+ skipSyncRead?: boolean;
571
+ /**
572
+ * If true, the first time the effect will be triggered will be skipped.
573
+ * @default false
574
+ */
575
+ skipFirstRun?: boolean;
511
576
  };
512
- declare class DragHandleDirective {
513
- private el;
514
- commitThreshold: _angular_core.InputSignal<number>;
515
- disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
516
- private gestureStart$;
517
- private gesture$;
518
- dragTapped: _angular_core.OutputRef<void>;
519
- dragStarted: _angular_core.OutputRef<void>;
520
- dragMoved: _angular_core.OutputRef<DragMoveEvent>;
521
- dragEnded: _angular_core.OutputRef<void>;
522
- isDragging: _angular_core.Signal<boolean>;
523
- constructor();
524
- startGesture(event: PointerEvent): void;
525
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DragHandleDirective, never>;
526
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragHandleDirective, "[etDragHandle]", never, { "commitThreshold": { "alias": "commitThreshold"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "dragTapped": "dragTapped"; "dragStarted": "dragStarted"; "dragMoved": "dragMoved"; "dragEnded": "dragEnded"; }, never, never, true, never>;
527
- }
577
+ declare const syncSignal: <T>(from: Signal<T>, to: WritableSignal<T>, options?: SyncSignalOptions) => _angular_core.EffectRef;
578
+ type MaybeSignal<T> = T | Signal<T>;
579
+ declare const maybeSignalValue: <T>(value: MaybeSignal<T>) => T;
580
+ /**
581
+ * A computed that will only be reactive until the source signal contains a truthy value.
582
+ * All subsequent changes inside the computation will be ignored.
583
+ */
584
+ declare const computedTillTruthy: <T>(source: Signal<T>) => Signal<T | null>;
585
+ /**
586
+ * A computed that will only be reactive until the source signal contains a falsy value.
587
+ * All subsequent changes inside the computation will be ignored.
588
+ */
589
+ declare const computedTillFalsy: <T>(source: Signal<T>) => Signal<T | null>;
590
+ /**
591
+ * A writeable signal that will be set to the provided value once all inputs are set.
592
+ * During that time, the signal will be set to `null`.
593
+ */
594
+ declare const deferredSignal: <T extends () => unknown>(valueFn: T) => WritableSignal<ReturnType<T> | null>;
595
+ declare const memoizeSignal: <T>(factory: () => Signal<T>) => () => Signal<T>;
528
596
 
529
- type OverlayRuntimeRole = 'dialog' | 'alertdialog';
530
- type OverlayRuntimeAutoFocusTarget = 'container' | 'first-heading' | 'first-tabbable';
531
- type OverlayRuntimeCloseSource = 'api' | 'escape' | 'outside-pointer';
532
- type OverlayRuntimeCenteredPosition = {
533
- kind: 'center';
597
+ type SignalAnimatedNumberOptions = {
598
+ /**
599
+ * The initial value to start animating from.
600
+ * If not provided, the animation will start from 0
601
+ */
602
+ initialValue?: number;
603
+ /**
604
+ * Duration of the animation in milliseconds.
605
+ * @default 1000
606
+ */
607
+ duration?: number;
608
+ /**
609
+ * Easing function that takes a progress value (0 to 1) and returns an eased value (0 to 1).
610
+ * Options:
611
+ * - `easeLinear()`
612
+ * - `easeIn()`
613
+ * - `easeOut()`
614
+ * - `easeInOut()`
615
+ * - `easeElastic()`
616
+ * - `easeOutBack()`
617
+ * - `easeOutBackStrong()`
618
+ * @default easeOut()
619
+ */
620
+ easing?: (t: number) => number;
621
+ /**
622
+ * Function to round the animated value.
623
+ * @default (v: number) => Math.round(v)
624
+ */
625
+ round?: (value: number) => number;
626
+ /**
627
+ * Callback invoked when the animation starts.
628
+ */
629
+ onAnimationStart?: () => void;
630
+ /**
631
+ * Callback invoked when the animation ends.
632
+ */
633
+ onAnimationEnd?: () => void;
534
634
  };
535
- type OverlayRuntimeAnchoredPosition = {
536
- kind: 'anchored';
537
- referenceElement: HTMLElement;
538
- placement?: Placement;
539
- fallbackPlacements?: Placement[];
540
- offset?: OffsetOptions | null;
541
- arrowPadding?: Padding | null;
542
- viewportPadding?: Padding | null;
543
- autoResize?: boolean;
544
- shift?: boolean;
545
- autoHide?: boolean;
546
- autoCloseIfReferenceHidden?: boolean;
547
- mirrorWidth?: boolean;
635
+ type AnimatedNumberSignal = Signal<number> & {
636
+ /**
637
+ * Starts the animation from the current value to the target value.
638
+ * @returns The animated signal for chaining
639
+ */
640
+ play: () => AnimatedNumberSignal;
641
+ /**
642
+ * Resets the animation to the initial value and stops any ongoing animation.
643
+ * @returns The animated signal for chaining
644
+ */
645
+ reset: () => AnimatedNumberSignal;
646
+ /**
647
+ * Stops the current animation at its current position.
648
+ * @returns The animated signal for chaining
649
+ */
650
+ stop: () => AnimatedNumberSignal;
548
651
  };
549
- type OverlayRuntimePositionStrategy = OverlayRuntimeCenteredPosition | OverlayRuntimeAnchoredPosition;
550
- type OverlayRuntimeElements = {
551
- rootElement: HTMLElement;
552
- hostElement: HTMLElement;
553
- backdropElement: HTMLElement | null;
554
- paneElement: HTMLElement;
652
+ /**
653
+ * Creates a signal that animates the transition of a numeric signal's value over time.
654
+ */
655
+ declare const signalAnimatedNumber: (source: MaybeSignal<number>, options?: SignalAnimatedNumberOptions) => AnimatedNumberSignal;
656
+ declare const easeLinear: (t: number) => number;
657
+ declare const easeIn: (t: number) => number;
658
+ declare const easeOut: (t: number) => number;
659
+ declare const easeInOut: (t: number) => number;
660
+ /** Elastic easing function (overshoots) */
661
+ declare const easeElastic: (t: number) => number;
662
+ /** Back easing function (overshoots slightly then settles) */
663
+ declare const easeOutBack: (t: number) => number;
664
+ /** Back easing function with more overshoot */
665
+ declare const easeOutBackStrong: (t: number) => number;
666
+
667
+ type Vec2 = [number, number];
668
+ type ViewportConfig = {
669
+ breakpoints: {
670
+ xs: Vec2;
671
+ sm: Vec2;
672
+ md: Vec2;
673
+ lg: Vec2;
674
+ xl: Vec2;
675
+ '2xl': Vec2;
676
+ };
555
677
  };
556
- type OverlayRuntimeCloseEvent<TResult = unknown> = {
557
- result: TResult | undefined;
558
- source: OverlayRuntimeCloseSource;
678
+ type Breakpoint = keyof ViewportConfig['breakpoints'];
679
+ declare const BREAKPOINT_ORDER: Breakpoint[];
680
+ /**
681
+ * Default viewport config based on Tailwind CSS.
682
+ * @see https://tailwindcss.com/docs/screens
683
+ */
684
+ declare const DEFAULT_VIEWPORT_CONFIG: ViewportConfig;
685
+ declare const provideViewportConfig: (valueOverride?: Partial<ViewportConfig> | undefined) => _angular_core.Provider[];
686
+ declare const injectViewportConfig: {
687
+ (): ViewportConfig;
688
+ (options: _angular_core.InjectOptions & {
689
+ optional?: false;
690
+ }): ViewportConfig;
691
+ (options: _angular_core.InjectOptions): ViewportConfig | null;
559
692
  };
560
- type OverlayRuntimeComponentBase = {
561
- animatedLifecycle?: Signal<AnimatedLifecycleDirective | undefined>;
693
+ type BuildMediaQueryOptions = {
694
+ min?: number | Breakpoint;
695
+ max?: number | Breakpoint;
562
696
  };
563
- type OverlayRuntimeMountConfig<TComponent extends object> = {
564
- id: string;
565
- component: Type<TComponent>;
566
- viewContainerRef?: ViewContainerRef;
567
- injector?: Injector;
568
- providers?: StaticProvider[];
569
- role?: OverlayRuntimeRole;
570
- positionStrategy?: OverlayRuntimePositionStrategy;
571
- hasBackdrop?: boolean;
572
- modal?: boolean;
573
- autoFocus?: OverlayRuntimeAutoFocusTarget | string | false;
574
- restoreFocus?: boolean;
575
- closeOnEscape?: boolean;
576
- closeOnOutsidePointer?: boolean;
577
- ariaDescribedBy?: string | null;
578
- ariaLabelledBy?: string | null;
579
- ariaLabel?: string | null;
580
- hostClass?: string[];
581
- backdropClass?: string[];
582
- paneClass?: string[];
583
- inputBindings?: Record<string, unknown>;
697
+ declare const provideBreakpointObserver: () => _angular_core.Provider[];
698
+ declare const injectBreakpointObserver: {
699
+ (): {
700
+ observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
701
+ isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
702
+ getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
703
+ buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
704
+ observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
705
+ isMediaQueryMatched: (mediaQuery: string) => boolean;
706
+ };
707
+ (options: _angular_core.InjectOptions & {
708
+ optional?: false;
709
+ }): {
710
+ observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
711
+ isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
712
+ getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
713
+ buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
714
+ observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
715
+ isMediaQueryMatched: (mediaQuery: string) => boolean;
716
+ };
717
+ (options: _angular_core.InjectOptions): {
718
+ observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
719
+ isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
720
+ getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
721
+ buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
722
+ observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
723
+ isMediaQueryMatched: (mediaQuery: string) => boolean;
724
+ } | null;
584
725
  };
585
726
 
586
- type OverlayRuntimeState = 'mounting' | 'mounted' | 'closing' | 'closed';
587
- declare const createOverlayRuntimeRef: <TComponent extends object, TResult = unknown>(id: string, config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">, elements: OverlayRuntimeElements, requestClose: (result: TResult | undefined, source: OverlayRuntimeCloseSource) => void) => {
588
- id: string;
589
- config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">;
590
- elements: OverlayRuntimeElements;
591
- state: _angular_core.Signal<OverlayRuntimeState>;
592
- componentInstance: _angular_core.Signal<TComponent | null>;
593
- beforeOpenedSubject: Subject<void>;
594
- close(result?: TResult, source?: OverlayRuntimeCloseSource): void;
595
- beforeOpened(): Observable<void>;
596
- afterOpened(): Observable<void>;
597
- beforeClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
598
- afterClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
599
- attachComponentRef(componentRef: ComponentRef<TComponent>): void;
600
- markOpened(): void;
601
- beginClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): boolean;
602
- finishClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): void;
727
+ type BreakpointMap<T> = Partial<Record<Breakpoint, T>>;
728
+ type BreakpointInput<T> = T | BreakpointMap<T>;
729
+ declare const breakpointTransformBase: <T, WriteT = BreakpointInput<T>>(coerce: (value: WriteT) => T) => ((value: WriteT) => T);
730
+ /**
731
+ * Transform factory for boolean inputs.
732
+ * Coerces plain values with `booleanAttribute`; resolves {@link BreakpointMap} mobile-first.
733
+ *
734
+ * @example
735
+ * snap = input(false, { transform: boolBreakpointTransform() });
736
+ * // Template: `snap` | `[snap]="true"` | `[snap]="{ xs: false, md: true }"`
737
+ */
738
+ declare const boolBreakpointTransform: () => ((value: BreakpointInput<boolean> | string) => boolean);
739
+ /**
740
+ * Transform factory for number inputs.
741
+ * Coerces plain values with `numberAttribute`; resolves {@link BreakpointMap} mobile-first.
742
+ *
743
+ * @example
744
+ * scrollMargin = input(0, { transform: numberBreakpointTransform() });
745
+ * // Template: `[scrollMargin]="16"` | `[scrollMargin]="{ xs: 0, md: 16 }"`
746
+ */
747
+ declare const numberBreakpointTransform: () => ((value: BreakpointInput<number> | string) => number);
748
+ /**
749
+ * Transform factory for any typed input (string unions, arrays, objects, etc.).
750
+ * Passes plain values through as-is; resolves {@link BreakpointMap} mobile-first.
751
+ * A value is treated as a {@link BreakpointMap} only when all its keys are valid breakpoint names.
752
+ *
753
+ * @example
754
+ * itemSize = input('auto', { transform: typedBreakpointTransform<ScrollableItemSize>() });
755
+ * tags = input([], { transform: typedBreakpointTransform<string[]>() });
756
+ * // Template: `[itemSize]="'third'"` | `[itemSize]="{ xs: 'full', md: 'third' }"`
757
+ */
758
+ declare const typedBreakpointTransform: <T>() => ((value: BreakpointInput<T>) => T);
759
+ type BoolBreakpointSignal = InputSignalWithTransform<boolean, BreakpointInput<boolean> | string>;
760
+ type NumberBreakpointSignal = InputSignalWithTransform<number, BreakpointInput<number> | string>;
761
+ type TypedBreakpointSignal<T> = InputSignalWithTransform<T, BreakpointInput<T>>;
762
+ declare const injectBreakpointInput: <T>(inputSignal: Signal<BreakpointInput<T>>, defaultValue: T) => Signal<T>;
763
+ declare const booleanBreakpointAttribute: (value: unknown) => BreakpointInput<boolean>;
764
+ declare const numberBreakpointAttribute: (value: unknown) => BreakpointInput<number>;
765
+ declare const BREAKPOINT_INSTANCE_TOKEN: InjectionToken<unknown>;
766
+ declare const provideBreakpointInstance: (componentClass: unknown) => {
767
+ provide: InjectionToken<unknown>;
768
+ useExisting: unknown;
603
769
  };
604
- type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = ReturnType<typeof createOverlayRuntimeRef<TComponent, TResult>>;
605
770
 
606
- declare const FOCUSABLE_SELECTOR: string;
607
- declare const isHTMLElement: (value: unknown) => value is HTMLElement;
608
- declare const isFocusable: (element: HTMLElement, document: Document) => boolean;
609
- declare const getFocusableElements: (container: HTMLElement, document: Document) => HTMLElement[];
610
- declare const getHeadingElement: (container: HTMLElement) => HTMLElement | null;
611
- declare const focusElement: (element: HTMLElement | null) => void;
612
- declare const applyInitialFocus: (paneElement: HTMLElement, autoFocus: OverlayRuntimeAutoFocusTarget | string | false, document: Document) => void;
613
- declare const setupFocusTrap: (paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, enabled: boolean, isTopMost: (ref: OverlayRuntimeRef<object, unknown>) => boolean, document: Document) => () => void;
771
+ type ControlValueSignalOptions = {
772
+ debounceTime?: number;
773
+ /**
774
+ * @default false
775
+ */
776
+ debounceFirst?: boolean;
777
+ };
778
+ declare const controlValueSignal: <TControlInput extends Signal<AbstractControl | null> | AbstractControl, TControl extends TControlInput extends Signal<infer TSignalControl> ? TSignalControl : TControlInput>(control: TControlInput, options?: ControlValueSignalOptions) => Signal<ReturnType<NonNullable<TControl>["getRawValue"]> | null>;
779
+ /**
780
+ * The first item in the pair is the previous value and the second item is the current value.
781
+ */
782
+ declare const controlValueSignalWithPrevious: <T extends AbstractControl>(control: T, options?: ControlValueSignalOptions) => Signal<[ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>["getRawValue"]> | null, ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>["getRawValue"]> | null]>;
783
+
784
+ type SignalElementBindingComplexType = HTMLElement | ElementRef<HTMLElement> | QueryList<ElementRef<HTMLElement> | HTMLElement> | Array<ElementRef<HTMLElement> | HTMLElement> | null | undefined;
785
+ type SignalElementBindingType = HTMLElement | ElementRef<HTMLElement> | Observable<SignalElementBindingComplexType> | Signal<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement> | ElementSignal;
786
+ type ElementSignal = Signal<{
787
+ currentElements: HTMLElement[];
788
+ previousElements: HTMLElement[];
789
+ }>;
790
+ type ElementSignalValue = ReturnType<ElementSignal>;
791
+ declare const isElementSignal: (el: unknown) => el is ElementSignal;
792
+ declare const createDocumentElementSignal: () => ElementSignal;
793
+ declare const createEmptyElementSignal: () => ElementSignal;
794
+ declare const buildElementSignal: (el: SignalElementBindingType | null | undefined) => ElementSignal;
795
+ declare const firstElementSignal: (el: ElementSignal) => Signal<{
796
+ currentElement: HTMLElement | null;
797
+ previousElement: HTMLElement | null;
798
+ }>;
799
+
800
+ declare const signalElementChildren: (el: SignalElementBindingType) => _angular_core.Signal<HTMLElement[]>;
801
+
802
+ type BuildSignalEffectsConfig<T extends Record<string, Signal<unknown>>> = {
803
+ /** The tokens to apply and their signal value */
804
+ tokenMap: T;
805
+ /** This function will be invoked for elements that were removed from the signal effects */
806
+ cleanupFn: (el: HTMLElement, tokens: string[]) => void;
807
+ /** This function will be invoked for elements that were added to the signal effects or when their signal value changes */
808
+ updateFn: (el: HTMLElement, tokens: string[], conditionResult: unknown) => void;
809
+ };
810
+ declare const buildSignalEffects: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, config: BuildSignalEffectsConfig<T>) => {
811
+ remove: (tokens: string) => void;
812
+ removeMany: (tokens: string[]) => void;
813
+ has: (tokens: string) => boolean;
814
+ push: (tokens: string, signal: Signal<unknown>) => void;
815
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
816
+ };
817
+ declare const signalClasses: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, classMap: T) => {
818
+ remove: (tokens: string) => void;
819
+ removeMany: (tokens: string[]) => void;
820
+ has: (tokens: string) => boolean;
821
+ push: (tokens: string, signal: Signal<unknown>) => void;
822
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
823
+ };
824
+ declare const signalHostClasses: <T extends Record<string, Signal<unknown>>>(classMap: T) => {
825
+ remove: (tokens: string) => void;
826
+ removeMany: (tokens: string[]) => void;
827
+ has: (tokens: string) => boolean;
828
+ push: (tokens: string, signal: Signal<unknown>) => void;
829
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
830
+ };
831
+ declare const signalAttributes: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, attributeMap: T) => {
832
+ remove: (tokens: string) => void;
833
+ removeMany: (tokens: string[]) => void;
834
+ has: (tokens: string) => boolean;
835
+ push: (tokens: string, signal: Signal<unknown>) => void;
836
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
837
+ };
838
+ declare const signalHostAttributes: <T extends Record<string, Signal<unknown>>>(attributeMap: T) => {
839
+ remove: (tokens: string) => void;
840
+ removeMany: (tokens: string[]) => void;
841
+ has: (tokens: string) => boolean;
842
+ push: (tokens: string, signal: Signal<unknown>) => void;
843
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
844
+ };
845
+ declare const signalStyles: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, styleMap: T) => {
846
+ remove: (tokens: string) => void;
847
+ removeMany: (tokens: string[]) => void;
848
+ has: (tokens: string) => boolean;
849
+ push: (tokens: string, signal: Signal<unknown>) => void;
850
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
851
+ };
852
+ declare const signalHostStyles: <T extends Record<string, Signal<unknown>>>(styleMap: T) => {
853
+ remove: (tokens: string) => void;
854
+ removeMany: (tokens: string[]) => void;
855
+ has: (tokens: string) => boolean;
856
+ push: (tokens: string, signal: Signal<unknown>) => void;
857
+ pushMany: (map: Record<string, Signal<unknown>>) => void;
858
+ };
859
+
860
+ type LogicalSize = {
861
+ inlineSize: number;
862
+ blockSize: number;
863
+ };
864
+ type ElementRect = {
865
+ bottom: number;
866
+ height: number;
867
+ left: number;
868
+ right: number;
869
+ top: number;
870
+ width: number;
871
+ x: number;
872
+ y: number;
873
+ };
874
+ type ElementSize = {
875
+ width: number;
876
+ height: number;
877
+ };
878
+ declare const boundingClientRectToElementRect: (rect: DOMRectReadOnly) => ElementRect;
879
+ declare const createElementDimensions: (el: HTMLElement | null, rect?: DOMRect) => NullableElementDimensions;
880
+ type ElementDimensions = {
881
+ rect: () => ElementRect;
882
+ client: ElementSize;
883
+ scroll: ElementSize;
884
+ offset: ElementSize;
885
+ };
886
+ type NullableElementDimensions = {
887
+ [K in keyof ElementDimensions]: ElementDimensions[K] | null;
888
+ };
889
+ declare const signalElementDimensions: (el: SignalElementBindingType) => Signal<NullableElementDimensions>;
890
+ declare const signalHostElementDimensions: () => Signal<NullableElementDimensions>;
891
+ declare const injectViewportSize: () => Signal<ElementSize>;
892
+
893
+ type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {
894
+ root?: SignalElementBindingType;
895
+ enabled?: Signal<boolean>;
896
+ };
897
+ type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {
898
+ isAbove: boolean;
899
+ isBelow: boolean;
900
+ isLeft: boolean;
901
+ isRight: boolean;
902
+ isVisible: boolean;
903
+ };
904
+ declare const signalElementIntersection: (el: SignalElementBindingType, options?: SignalElementIntersectionOptions) => Signal<IntersectionObserverEntryWithDetails[]>;
905
+ declare const signalHostElementIntersection: (options?: SignalElementIntersectionOptions) => Signal<IntersectionObserverEntryWithDetails[]>;
906
+
907
+ declare const signalElementMutations: (el: SignalElementBindingType, options?: MutationObserverInit) => _angular_core.Signal<MutationRecord | null>;
908
+ declare const signalHostElementMutations: (options?: MutationObserverInit) => _angular_core.Signal<MutationRecord | null>;
909
+
910
+ type ElementLastScrollDirectionType = 'up' | 'down' | 'left' | 'right';
911
+ type ElementLastScrollDirection = {
912
+ type: ElementLastScrollDirectionType;
913
+ time: number;
914
+ };
915
+ declare const signalElementLastScrollDirection: (el: SignalElementBindingType) => _angular_core.Signal<ElementLastScrollDirection | null>;
916
+ declare const signalHostElementLastScrollDirection: () => _angular_core.Signal<ElementLastScrollDirection | null>;
917
+
918
+ type SignalElementScrollStateOptions = {
919
+ /** The initial scroll position to scroll to. Once a truthy value get's emitted, all further values will be ignored. */
920
+ initialScrollPosition?: Signal<ScrollToOptions | null>;
921
+ };
922
+ type ElementScrollState = {
923
+ canScroll: boolean;
924
+ canScrollHorizontally: boolean;
925
+ canScrollVertically: boolean;
926
+ elementDimensions: NullableElementDimensions;
927
+ };
928
+ declare const areScrollStatesEqual: (a: ElementScrollState, b: ElementScrollState) => boolean;
929
+ declare const signalElementScrollState: (el: SignalElementBindingType, options?: SignalElementScrollStateOptions) => Signal<ElementScrollState>;
930
+ declare const signalHostElementScrollState: () => Signal<ElementScrollState>;
614
931
 
615
932
  declare const injectAngularRootElement: {
616
933
  (): _angular_core.WritableSignal<HTMLElement | null>;
@@ -642,70 +959,10 @@ declare const BOUNDARY_ELEMENT_TOKEN: _angular_core.InjectionToken<{
642
959
  override: _angular_core.WritableSignal<HTMLElement | null>;
643
960
  }>;
644
961
 
645
- type Vec2 = [number, number];
646
- type ViewportConfig = {
647
- breakpoints: {
648
- xs: Vec2;
649
- sm: Vec2;
650
- md: Vec2;
651
- lg: Vec2;
652
- xl: Vec2;
653
- '2xl': Vec2;
654
- };
655
- };
656
- type Breakpoint = keyof ViewportConfig['breakpoints'];
657
- declare const BREAKPOINT_ORDER: Breakpoint[];
658
- /**
659
- * Default viewport config based on Tailwind CSS.
660
- * @see https://tailwindcss.com/docs/screens
661
- */
662
- declare const DEFAULT_VIEWPORT_CONFIG: ViewportConfig;
663
- declare const provideViewportConfig: (valueOverride?: Partial<ViewportConfig> | undefined) => _angular_core.Provider[];
664
- declare const injectViewportConfig: {
665
- (): ViewportConfig;
666
- (options: _angular_core.InjectOptions & {
667
- optional?: false;
668
- }): ViewportConfig;
669
- (options: _angular_core.InjectOptions): ViewportConfig | null;
670
- };
671
- type BuildMediaQueryOptions = {
672
- min?: number | Breakpoint;
673
- max?: number | Breakpoint;
674
- };
675
- declare const provideBreakpointObserver: () => _angular_core.Provider[];
676
- declare const injectBreakpointObserver: {
677
- (): {
678
- observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
679
- isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
680
- getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
681
- buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
682
- observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
683
- isMediaQueryMatched: (mediaQuery: string) => boolean;
684
- };
685
- (options: _angular_core.InjectOptions & {
686
- optional?: false;
687
- }): {
688
- observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
689
- isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
690
- getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
691
- buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
692
- observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
693
- isMediaQueryMatched: (mediaQuery: string) => boolean;
694
- };
695
- (options: _angular_core.InjectOptions): {
696
- observeBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
697
- isBreakpointMatched: (options: BuildMediaQueryOptions) => boolean;
698
- getBreakpointSize: (type: Breakpoint, option: "min" | "max") => number;
699
- buildMediaQueryString: (options: BuildMediaQueryOptions) => string;
700
- observeMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
701
- isMediaQueryMatched: (mediaQuery: string) => boolean;
702
- } | null;
703
- };
704
-
705
- declare const provideFocusVisibleTracker: () => _angular_core.Provider[];
706
- declare const injectFocusVisibleTracker: {
707
- (): {
708
- isFocusVisible: _angular_core.Signal<boolean>;
962
+ declare const provideFocusVisibleTracker: () => _angular_core.Provider[];
963
+ declare const injectFocusVisibleTracker: {
964
+ (): {
965
+ isFocusVisible: _angular_core.Signal<boolean>;
709
966
  };
710
967
  (options: _angular_core.InjectOptions & {
711
968
  optional?: false;
@@ -903,1199 +1160,1082 @@ type CreateUserConsentProviderOptions = {
903
1160
  };
904
1161
  declare const createUserConsentProvider: (options: CreateUserConsentProviderOptions) => Provider;
905
1162
 
906
- declare const setBaseElementStyles: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer) => void;
907
- declare const setBackdropStyles: (backdropElement: HTMLElement, renderer: AngularRenderer) => void;
908
- declare const applyCenteredPosition: (hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer, _config: OverlayRuntimeCenteredPosition) => void;
909
- declare const createAnchoredPositionCleanup: (strategy: OverlayRuntimeAnchoredPosition, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
910
- declare const setupPositioning: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1163
+ /** Inject a signal containing a boolean value indicating if the viewport is xs */
1164
+ declare const injectIsXs: () => _angular_core.Signal<boolean>;
1165
+ /** Inject a signal containing a boolean value indicating if the viewport is sm */
1166
+ declare const injectIsSm: () => _angular_core.Signal<boolean>;
1167
+ /** Inject a signal containing a boolean value indicating if the viewport is md */
1168
+ declare const injectIsMd: () => _angular_core.Signal<boolean>;
1169
+ /** Inject a signal containing a boolean value indicating if the viewport is lg */
1170
+ declare const injectIsLg: () => _angular_core.Signal<boolean>;
1171
+ /** Inject a signal containing a boolean value indicating if the viewport is xl */
1172
+ declare const injectIsXl: () => _angular_core.Signal<boolean>;
1173
+ /** Inject a signal containing a boolean value indicating if the viewport is 2xl */
1174
+ declare const injectIs2Xl: () => _angular_core.Signal<boolean>;
1175
+ /**
1176
+ * Inject a boolean value indicating if the viewport is matching the provided options.
1177
+ * This value is not reactive. If you want to react to changes, use the {@link injectObserveBreakpoint} function instead.
1178
+ */
1179
+ declare const injectBreakpointIsMatched: (options: BuildMediaQueryOptions) => boolean;
1180
+ /**
1181
+ * Inject a boolean value indicating if the media query is matched.
1182
+ * This value is not reactive. If you want to react to changes, use the {@link injectObserveMediaQuery} function instead.
1183
+ */
1184
+ declare const injectMediaQueryIsMatched: (mediaQuery: string) => boolean;
1185
+ /**
1186
+ * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.
1187
+ */
1188
+ declare const injectObserveBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
1189
+ /**
1190
+ * Inject a signal containing a boolean value indicating if the media query is matched.
1191
+ */
1192
+ declare const injectObserveMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
1193
+ /** Inject a signal containing the current breakpoint. */
1194
+ declare const injectCurrentBreakpoint: () => _angular_core.Signal<"xs" | "sm" | "md" | "lg" | "xl" | "2xl">;
1195
+ /** Inject a signal that indicates if the user is using a portrait display */
1196
+ declare const injectIsPortrait: () => _angular_core.Signal<boolean>;
1197
+ /** Inject a signal that indicates if the user is using a landscape display */
1198
+ declare const injectIsLandscape: () => _angular_core.Signal<boolean>;
1199
+ /** Inject a signal containing the current display orientation */
1200
+ declare const injectDisplayOrientation: () => _angular_core.Signal<"portrait" | "landscape">;
1201
+ /** Inject a signal that indicates if the device has a touch input */
1202
+ declare const injectHasTouchInput: () => _angular_core.Signal<boolean>;
1203
+ /** Inject a signal that indicates if the device has a fine input (mouse or stylus) */
1204
+ declare const injectHasPrecisionInput: () => _angular_core.Signal<boolean>;
1205
+ /** Inject a signal containing the current device input type */
1206
+ declare const injectDeviceInputType: () => _angular_core.Signal<"touch" | "mouse">;
1207
+ /** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */
1208
+ declare const injectCanHover: () => _angular_core.Signal<boolean>;
1209
+ /** Inject a signal containing the viewport dimensions */
1210
+ declare const injectViewportDimensions: () => _angular_core.Signal<_ethlete_core.NullableElementDimensions>;
1211
+ /** Inject a signal containing the scrollbar dimensions. Dimensions will be 0 if scrollbars overlap the page contents (like on mobile). */
1212
+ declare const injectScrollbarDimensions: () => _angular_core.Signal<{
1213
+ width: number;
1214
+ height: number;
1215
+ } | null>;
911
1216
 
912
- type OverlayRuntime = {
913
- mount: <TComponent extends object, TResult = unknown>(config: OverlayRuntimeMountConfig<TComponent>) => OverlayRuntimeRef<TComponent, TResult>;
914
- openEntries: ReturnType<typeof computed<OverlayRuntimeRef<object, unknown>[]>>;
1217
+ /**
1218
+ * Applies scrollbar size CSS variables to the documentElement (html tag) in pixels.
1219
+ * - `--et-sw`: scrollbar width
1220
+ * - `--et-sh`: scrollbar height
1221
+ */
1222
+ declare const writeScrollbarSizeToCssVariables: () => void;
1223
+ /**
1224
+ * Applies viewport size CSS variables to the documentElement (html tag) in pixels.
1225
+ * - `--et-vw`: viewport width excluding scrollbar width
1226
+ * - `--et-vh`: viewport height excluding scrollbar height
1227
+ */
1228
+ declare const writeViewportSizeToCssVariables: () => void;
1229
+
1230
+ type CursorDragScrollDirection = 'horizontal' | 'vertical' | 'both';
1231
+ type CursorDragScrollOptions = {
1232
+ /** If true, cursor drag scrolling will be enabled. */
1233
+ enabled?: Signal<boolean>;
1234
+ /** The allowed scroll direction. */
1235
+ allowedDirection?: MaybeSignal<CursorDragScrollDirection>;
915
1236
  };
916
- declare const provideOverlayRuntime: () => _angular_core.Provider[];
917
- declare const injectOverlayRuntime: {
918
- (): OverlayRuntime;
919
- (options: _angular_core.InjectOptions & {
920
- optional?: false;
921
- }): OverlayRuntime;
922
- (options: _angular_core.InjectOptions): OverlayRuntime | null;
1237
+ /** A function to apply cursor drag scroll behavior to an element. */
1238
+ declare const useCursorDragScroll: (el: SignalElementBindingType, options?: CursorDragScrollOptions) => {
1239
+ isDragging: Signal<boolean>;
1240
+ currentDragAmount: Signal<{
1241
+ x: number;
1242
+ y: number;
1243
+ }>;
923
1244
  };
924
1245
 
925
- declare const createComponentId: (prefix: string) => string;
926
-
927
- declare const createDestroy: () => rxjs.Observable<boolean>;
928
-
929
- declare const injectHostElement: <T = HTMLElement>() => T;
930
- declare const injectTemplateRef: <C = unknown>() => TemplateRef<C>;
931
- type CreateProviderOptions = {
1246
+ type SetupScrollRestorationConfig = {
932
1247
  /**
933
- * Optional name for the provider, useful for debugging.
934
- * If not provided, the name will be a generated string.
1248
+ * The scrollable container.
1249
+ * @default document.documentElement
935
1250
  */
936
- name?: string;
1251
+ scrollElement?: HTMLElement;
937
1252
  /**
938
- * Optional existing InjectionToken to also provide the created provider under.
1253
+ * A list of query params that should trigger a scroll to top.
1254
+ * @default []
1255
+ * @example ['page'] // will scroll to top when the page query param changes
939
1256
  */
940
- extraInjectionToken?: InjectionToken<unknown>;
1257
+ queryParamTriggerList?: string[];
1258
+ /**
1259
+ * Config for fragment scrolling.
1260
+ */
1261
+ fragment?: {
1262
+ /**
1263
+ * Enable fragment scrolling (scroll to element with id)
1264
+ * @default false
1265
+ */
1266
+ enabled?: boolean;
1267
+ /**
1268
+ * Whether to use smooth scrolling or not.
1269
+ * @default false
1270
+ */
1271
+ smooth?: boolean;
1272
+ };
941
1273
  };
942
- type ProviderResult<T> = readonly [
943
- provide: () => Provider[],
944
- inject: {
945
- (): T;
946
- (options: InjectOptions & {
947
- optional?: false;
948
- }): T;
949
- (options: InjectOptions): T | null;
950
- },
951
- token: InjectionToken<T>
952
- ];
953
- type StaticProviderResult<T> = readonly [
954
- provide: (valueOverride?: Partial<T>) => Provider[],
955
- inject: {
956
- (): T;
957
- (options: InjectOptions & {
958
- optional?: false;
959
- }): T;
960
- (options: InjectOptions): T | null;
961
- },
962
- token: InjectionToken<T>
963
- ];
964
- type RootProviderResult<T> = readonly [
965
- inject: {
966
- (): T;
967
- (options: InjectOptions & {
968
- optional?: false;
969
- }): T;
970
- (options: InjectOptions): T | null;
971
- },
972
- token: InjectionToken<T>
973
- ];
974
- declare const createProvider: <T>(factory: () => T, options?: CreateProviderOptions) => ProviderResult<T>;
975
- declare const createRootProvider: <T>(factory: () => T, options?: CreateProviderOptions) => ProviderResult<T>;
976
- declare const createStaticProvider: <T>(defaultValue?: T, options?: CreateProviderOptions) => StaticProviderResult<T>;
977
- declare const createStaticRootProvider: <T>(defaultValue?: T, options?: CreateProviderOptions) => StaticProviderResult<T>;
978
-
979
- declare const cloneFormGroup: <T extends FormGroup<any>>(formGroup: T) => T;
980
- declare const getFormGroupValue: <T extends FormGroup>(formGroup: T) => Record<string, unknown>;
981
-
982
- declare const createRxHostListener: <K extends keyof HTMLElementEventMap>(eventName: K, options?: EventListenerOptions) => rxjs.Observable<HTMLElementEventMap[K]>;
983
- declare const applyHostListener: <K extends keyof HTMLElementEventMap>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, options?: EventListenerOptions) => rxjs.Subscription;
984
- declare const applyHostListeners: (listeners: Partial<{ [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void; }>, options?: EventListenerOptions) => void;
985
-
986
- declare class TypedQueryList<T> extends QueryList<T> {
987
- get changes(): Observable<TypedQueryList<T>>;
988
- }
989
- declare function switchQueryListChanges(): <T extends TypedQueryList<unknown> | null | undefined>(source: Observable<T>) => Observable<T>;
990
-
991
- /**
992
- * Sets the value of an input signal.
993
- * See issue: https://github.com/angular/angular/issues/54782
994
- */
995
- declare const setInputSignal: <T>(input: InputSignal<T> | InputSignalWithTransform<T, unknown>, value: T) => void;
996
-
997
- type NgClassType = string | string[] | Set<string> | {
998
- [klass: string]: any;
999
- } | null | undefined;
1000
-
1001
- declare const AT_LEAST_ONE_REQUIRED = "atLeastOneRequired";
1002
- type ValidateAtLeastOneRequiredConfig = {
1274
+ declare const ET_DISABLE_SCROLL_TOP: unique symbol;
1275
+ declare const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE: unique symbol;
1276
+ declare const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE: unique symbol;
1277
+ type RouterDisableScrollTopConfig = {
1003
1278
  /**
1004
- * Keys of form controls to validate in the supplied form group
1279
+ * Whether to disable scroll to top ONLY when navigating back to this route.
1280
+ * @default false
1005
1281
  */
1006
- keys: string[];
1282
+ asReturnRoute?: boolean;
1007
1283
  /**
1008
- * If true, the value `false` will result in a validation error
1284
+ * Whether to disable scroll to top when a path param changes.
1009
1285
  * @default false
1010
1286
  */
1011
- checkFalse?: boolean;
1287
+ onPathParamChange?: boolean;
1012
1288
  };
1013
- declare const ValidateAtLeastOneRequired: (config: ValidateAtLeastOneRequiredConfig) => ValidatorFn;
1014
- declare const IS_ARRAY_NOT_EMPTY = "isArrayNotEmpty";
1015
- declare const IsArrayNotEmpty: (control: AbstractControl) => ValidationErrors | null;
1016
- declare const IS_EMAIL = "isEmail";
1017
- declare const IsEmail: (control: AbstractControl) => ValidationErrors | null;
1018
- declare const MUST_MATCH = "mustMatch";
1019
- declare const MustMatch: (controlName: string, matchingControlName: string) => (formGroup: AbstractControl) => {
1020
- mustMatch: boolean;
1021
- } | null;
1022
- declare const Validators: {
1023
- readonly MustMatch: (controlName: string, matchingControlName: string) => (formGroup: AbstractControl) => {
1024
- mustMatch: boolean;
1025
- } | null;
1026
- readonly IsEmail: (control: AbstractControl) => ValidationErrors | null;
1027
- readonly IsArrayNotEmpty: (control: AbstractControl) => ValidationErrors | null;
1028
- readonly ValidateAtLeastOneRequired: (config: ValidateAtLeastOneRequiredConfig) => ValidatorFn;
1289
+ declare const routerDisableScrollTop: (config?: RouterDisableScrollTopConfig) => {
1290
+ [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]?: boolean | undefined;
1291
+ [ET_DISABLE_SCROLL_TOP]: boolean;
1292
+ } | {
1293
+ [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]?: boolean | undefined;
1294
+ [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: boolean;
1029
1295
  };
1296
+ declare const setupScrollRestoration: (config?: SetupScrollRestorationConfig) => void;
1030
1297
 
1031
- declare const clone: <T>(original: T) => T;
1032
- declare const equal: (foo: any, bar: any) => boolean;
1033
-
1034
- declare const hasCookie: (name: string) => boolean;
1035
- declare const getCookie: (name: string) => string | null | undefined;
1036
- declare const setCookie: (name: string, data: string, expiresInDays?: number | null, domain?: string | null, path?: string, sameSite?: "strict" | "none" | "lax") => void;
1037
- declare const deleteCookie: (name: string, path?: string, domain?: string | null) => void;
1038
- declare const getDomain: () => string | null;
1039
-
1040
- type Translatable = {
1041
- i18n: string;
1042
- text: string;
1298
+ declare const signalIsRendered: () => _angular_core.Signal<boolean>;
1299
+ declare const createIsRenderedSignal: () => {
1300
+ state: _angular_core.WritableSignal<boolean>;
1301
+ bind: () => _angular_core.EffectRef;
1302
+ };
1303
+ declare const createCanAnimateSignal: () => {
1304
+ state: _angular_core.Signal<boolean>;
1043
1305
  };
1044
1306
 
1045
- declare class KeyPressManager {
1046
- readonly key: number;
1047
- private readonly _isKeyPressed$;
1048
- private readonly _keyPressCount$;
1049
- private readonly _stopTimeout$;
1050
- constructor(key: number);
1051
- isPressed(event: KeyboardEvent): boolean;
1052
- clear(): void;
1053
- }
1054
-
1055
- declare const DISABLE_LOGGER_PARAM = "et-logger-quiet";
1056
- type CreateLoggerConfig = {
1057
- scope: string;
1058
- feature: string;
1307
+ type RouterState = {
1308
+ data: Data;
1309
+ pathParams: Params;
1310
+ queryParams: Params;
1311
+ title: string | null;
1312
+ fragment: string | null;
1059
1313
  };
1060
- declare const createLogger: (config: CreateLoggerConfig) => {
1061
- log: (...args: unknown[]) => void;
1062
- warn: (...args: unknown[]) => void;
1063
- error: (...args: unknown[]) => void;
1314
+ declare const ET_PROPERTY_REMOVED: unique symbol;
1315
+ type InjectUtilConfig = {
1316
+ /** The injector to use for the injection. Must be provided if the function is not called from within a injection context. */
1317
+ injector?: Injector;
1064
1318
  };
1065
-
1319
+ type InjectUtilTransformConfig<In, Out> = {
1320
+ /**
1321
+ * A transform function similar to the `transform` function in Angular input bindings.
1322
+ * Can be used to transform the value before it is returned.
1323
+ * E.g. transforming `"true"` to `true` for a boolean attribute.
1324
+ */
1325
+ transform?: (value: In) => Out;
1326
+ };
1327
+ declare const transformOrReturn: <In, Out>(src: Signal<In>, config?: InjectUtilTransformConfig<In, Out>) => Signal<Out>;
1328
+ /** Inject the current router event */
1329
+ declare const injectRouterEvent: () => Signal<_angular_router.Event>;
1066
1330
  /**
1067
- * Converts a markdown string to HTML.
1068
- * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
1069
- * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.
1331
+ * Signal that indicates whether the router has been initialized.
1332
+ * The router is considered initialized once the first NavigationEnd event with an id different than -1 has been emitted.
1070
1333
  */
1071
- declare const markdownToHtml: (markdown: string) => string;
1334
+ declare const injectIsRouterInitialized: () => Signal<boolean>;
1072
1335
  /**
1073
- * Converts an HTML string to markdown.
1074
- * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
1075
- * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.
1336
+ * Inject the current url.
1337
+ * The url includes query params as well as the fragment. Use `injectRoute` instead if you are not intrusted in those.
1338
+ * @example "/my-page?query=1&param=true#fragment"
1076
1339
  */
1077
- declare const htmlToMarkdown: (html: string) => string;
1078
-
1079
- declare const clamp: (value: number, min?: number, max?: number) => number;
1080
- declare const round: (value: number, precision?: number) => number;
1081
-
1082
- declare const isObject: (value: unknown) => value is Record<string, unknown>;
1083
- declare const isArray: (value: unknown) => value is unknown[];
1084
- declare const getObjectProperty: (obj: Record<string, unknown>, prop: string) => unknown;
1340
+ declare const injectUrl: () => Signal<string>;
1341
+ /**
1342
+ * Inject the current route
1343
+ * @example "/my-page"
1344
+ */
1345
+ declare const injectRoute: () => Signal<string>;
1346
+ /**
1347
+ * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.
1348
+ */
1349
+ declare const injectRouterState: () => Signal<RouterState>;
1350
+ /** Inject a signal containing the current route fragment (the part after the # inside the url if present) */
1351
+ declare const injectFragment: <T = string | null>(config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1352
+ /** Inject all currently available query parameters as a signal */
1353
+ declare const injectQueryParams: () => Signal<Params>;
1354
+ /** Inject all currently available route data as a signal */
1355
+ declare const injectRouteData: () => Signal<Data>;
1356
+ /** Inject the current route title as a signal */
1357
+ declare const injectRouteTitle: <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1358
+ /** Inject all currently available path parameters as a signal */
1359
+ declare const injectPathParams: () => Signal<Params>;
1360
+ type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {
1361
+ /**
1362
+ * If true, the initial value will be read from the browser's url.
1363
+ * Note that this will not work with arrays or complex objects.
1364
+ */
1365
+ requireSync?: boolean;
1366
+ };
1367
+ /** Inject a specific query parameter as a signal */
1368
+ declare const injectQueryParam: <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => Signal<T>;
1369
+ /** Inject a specific route data item as a signal */
1370
+ declare const injectRouteDataItem: <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => Signal<T>;
1371
+ /** Inject a specific path parameter as a signal */
1372
+ declare const injectPathParam: <T = string | null>(key: string, config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
1373
+ /**
1374
+ * Inject query params that changed during navigation. Unchanged query params will be ignored.
1375
+ * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.
1376
+ */
1377
+ declare const injectQueryParamChanges: () => Signal<Record<string, unknown>>;
1378
+ /**
1379
+ * Inject path params that changed during navigation. Unchanged path params will be ignored.
1380
+ * Removed path params will be represented by the symbol `ET_PROPERTY_REMOVED`.
1381
+ */
1382
+ declare const injectPathParamChanges: () => Signal<Record<string, unknown>>;
1085
1383
 
1086
- declare const RUNTIME_ERROR_NO_DATA = "__ET_NO_DATA__";
1087
- declare class RuntimeError<T extends number> extends Error {
1088
- code: T;
1089
- data: unknown;
1090
- constructor(code: T, message: null | false | string, data?: unknown);
1384
+ declare class ScrollObserverDirective {
1385
+ private elementRef;
1386
+ enabled: _angular_core.ModelSignal<MaybeSignal<boolean>>;
1387
+ private enabledValue;
1388
+ private _startEl;
1389
+ private _endEl;
1390
+ private _startIntersection;
1391
+ private _endIntersection;
1392
+ isAtStart: Signal<boolean>;
1393
+ isAtEnd: Signal<boolean>;
1394
+ _registerStart(el: ElementRef<HTMLElement>): void;
1395
+ _registerEnd(el: ElementRef<HTMLElement>): void;
1396
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollObserverDirective, never>;
1397
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ScrollObserverDirective, "[etScrollObserver]", ["etScrollObserver"], { "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; }, { "enabled": "enabledChange"; }, never, never, true, never>;
1091
1398
  }
1092
- declare function formatRuntimeError<T extends number>(code: T, message: null | false | string): string;
1093
1399
 
1094
- type CreateSessionMemoryConfig<TValue> = {
1095
- key: string;
1096
- parse: (storedValue: string) => TValue | null;
1097
- serialize: (value: TValue) => string;
1098
- };
1099
- declare const createAutoSessionMemoryKey: ({ element, prefix }: {
1100
- element: HTMLElement;
1101
- prefix: string;
1102
- }) => string;
1103
- declare const canUseSessionMemory: () => boolean;
1104
- declare const createSessionMemory: <TValue>({ key, parse, serialize }: CreateSessionMemoryConfig<TValue>) => {
1105
- read: () => TValue | null;
1106
- write: (value: TValue) => boolean;
1107
- remove: () => boolean;
1400
+ type DragMoveEvent = {
1401
+ readonly stepX: number;
1402
+ readonly stepY: number;
1403
+ readonly clientX: number;
1404
+ readonly clientY: number;
1108
1405
  };
1109
-
1110
- declare class NormalizeGameResultTypePipe implements PipeTransform {
1111
- transform: (type: string | null) => NormalizedGameResultType | null;
1112
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeGameResultTypePipe, never>;
1113
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeGameResultTypePipe, "etNormalizeGameResultType", true>;
1406
+ declare class DragHandleDirective {
1407
+ private el;
1408
+ commitThreshold: _angular_core.InputSignal<number>;
1409
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1410
+ private gestureStart$;
1411
+ private gesture$;
1412
+ dragTapped: _angular_core.OutputRef<void>;
1413
+ dragStarted: _angular_core.OutputRef<void>;
1414
+ dragMoved: _angular_core.OutputRef<DragMoveEvent>;
1415
+ dragEnded: _angular_core.OutputRef<void>;
1416
+ isDragging: _angular_core.Signal<boolean>;
1417
+ constructor();
1418
+ startGesture(event: PointerEvent): void;
1419
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DragHandleDirective, never>;
1420
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragHandleDirective, "[etDragHandle]", never, { "commitThreshold": { "alias": "commitThreshold"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "dragTapped": "dragTapped"; "dragStarted": "dragStarted"; "dragMoved": "dragMoved"; "dragEnded": "dragEnded"; }, never, never, true, never>;
1114
1421
  }
1115
- type NormalizedGameResultType = Translatable & {
1116
- shortCode: string;
1117
- };
1118
- declare const normalizeGameResultType: (type: string | null) => NormalizedGameResultType | null;
1119
1422
 
1120
- declare class NormalizeMatchParticipantsPipe implements PipeTransform {
1121
- transform: (match: MatchListView | null) => NormalizedMatchParticipants | null;
1122
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchParticipantsPipe, never>;
1123
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchParticipantsPipe, "etNormalizeMatchParticipants", true>;
1124
- }
1125
- type NormalizedMatchParticipants = {
1126
- home: NormalizedMatchParticipant | null;
1127
- away: NormalizedMatchParticipant | null;
1423
+ type OverlayRuntimeRole = 'dialog' | 'alertdialog';
1424
+ type OverlayRuntimeAutoFocusTarget = 'container' | 'first-heading' | 'first-tabbable';
1425
+ type OverlayRuntimeCloseSource = 'api' | 'escape' | 'outside-pointer' | 'drag';
1426
+ type OverlayRuntimeCenteredPosition = {
1427
+ kind: 'center';
1128
1428
  };
1129
- type NormalizedParticipantType = 'team' | 'player' | 'unknown';
1130
- type NormalizedMatchParticipant = ({
1131
- type: 'tbd';
1132
- participantType: NormalizedParticipantType;
1133
- data: ParticipantViewUnion | null;
1134
- } & Translatable) | {
1135
- type: 'participant';
1136
- participantType: NormalizedParticipantType;
1137
- data: ParticipantViewUnion;
1138
- } | ({
1139
- type: 'none';
1140
- participantType: NormalizedParticipantType;
1141
- data: ParticipantViewUnion | null;
1142
- } & Translatable);
1143
- declare const normalizeMatchParticipants: (match: MatchListView | null) => NormalizedMatchParticipants | null;
1144
- declare const normalizeMatchParticipant: (match: MatchListView | null, side: "home" | "away") => NormalizedMatchParticipant | null;
1145
-
1146
- declare class NormalizeMatchScorePipe implements PipeTransform {
1147
- transform: (match: MatchListView | null | undefined) => NormalizedMatchScore | null;
1148
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchScorePipe, never>;
1149
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchScorePipe, "etNormalizeMatchScore", true>;
1150
- }
1151
- declare const enum MatchStateType {
1152
- PREPARING_ROUND = "preparingRound",
1153
- PRE_MATCH = "preMatch",
1154
- LIVE = "live",
1155
- POST_MATCH = "postMatch",
1156
- AUTO_WIN = "autoWin"
1157
- }
1158
- type NormalizedMatchScore = {
1159
- home: {
1160
- score: string | number | null;
1161
- isWinner: boolean;
1162
- };
1163
- away: {
1164
- score: string | number | null;
1165
- isWinner: boolean;
1166
- };
1167
- subLine: string | null;
1168
- isNumeric: boolean;
1429
+ type OverlayRuntimeGlobalPositionAlignment = 'start' | 'center' | 'end' | 'stretch';
1430
+ type OverlayRuntimeGlobalPosition = {
1431
+ kind: 'global';
1432
+ /** Horizontal placement of the pane inside the viewport. Defaults to `center`. */
1433
+ horizontal?: OverlayRuntimeGlobalPositionAlignment;
1434
+ /** Vertical placement of the pane inside the viewport. Defaults to `center`. */
1435
+ vertical?: OverlayRuntimeGlobalPositionAlignment;
1436
+ /** Padding applied to the host element. Defaults to `0`. */
1437
+ padding?: string;
1169
1438
  };
1170
- declare const normalizeMatchScore: (match: MatchListView | null | undefined) => NormalizedMatchScore | null;
1171
- declare const isKnockoutMatch: (match: MatchListView | null | undefined) => boolean;
1172
- declare const isGroupMatch: (match: MatchListView | null | undefined) => boolean;
1173
- declare const getKnockoutMatchScore: (score: MatchRankingView | null | undefined) => "match-score.knockout.won" | "match-score.knockout.lost" | "match-score.knockout.tie" | null;
1174
- declare const getMatchScoreSubLine: (match: MatchListView | null | undefined) => "match-score.groups.sub-line" | null;
1175
- declare const getGroupMatchScore: (match: MatchListView | null | undefined) => {
1176
- home: {
1177
- score: number;
1178
- isWinner: boolean;
1179
- };
1180
- away: {
1181
- score: number;
1182
- isWinner: boolean;
1183
- };
1184
- } | null;
1185
- declare const getGroupMatchPoints: (match: MatchListView | null | undefined) => {
1186
- home: {
1187
- score: number;
1188
- isWinner: boolean;
1189
- };
1190
- away: {
1191
- score: number;
1192
- isWinner: boolean;
1193
- };
1194
- } | null;
1195
-
1196
- declare class NormalizeMatchStatePipe implements PipeTransform {
1197
- transform: (match: MatchListView | null | undefined) => MatchStateType | null;
1198
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchStatePipe, never>;
1199
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchStatePipe, "etNormalizeMatchState", true>;
1200
- }
1201
- declare const normalizeMatchState: (match: MatchListView | null | undefined) => MatchStateType | null;
1202
-
1203
- declare class NormalizeMatchTypePipe implements PipeTransform {
1204
- transform: (matchType: StageType | null | undefined) => Translatable | null;
1205
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchTypePipe, never>;
1206
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchTypePipe, "etNormalizeMatchType", true>;
1207
- }
1208
- declare const normalizeMatchType: (matchType: StageType | null | undefined) => Translatable | null;
1209
-
1210
- declare class HtmlToMarkdownPipe implements PipeTransform {
1211
- transform: (html: string) => string;
1212
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<HtmlToMarkdownPipe, never>;
1213
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<HtmlToMarkdownPipe, "htmlToMarkdown", true>;
1214
- }
1215
-
1216
- declare class InferMimeTypePipe implements PipeTransform {
1217
- transform: (srcset: string) => string | null;
1218
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<InferMimeTypePipe, never>;
1219
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<InferMimeTypePipe, "inferMimeType", true>;
1220
- }
1221
- /**
1222
- * Infers the mime type of a given url or srcset.
1223
- * If a srcset is provided, it will infer the mime type of the first url in the srcset.
1224
- * If the srcset contains a query parameter `?fm=`, it will use the value of that parameter, since it is often used to specify the file format in image api's like contentful.
1225
- */
1226
- declare const inferMimeType: (srcset: string) => string | null;
1227
-
1228
- declare class MarkdownToHtmlPipe implements PipeTransform {
1229
- transform: (markdown: string) => string;
1230
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MarkdownToHtmlPipe, never>;
1231
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<MarkdownToHtmlPipe, "markdownToHtml", true>;
1232
- }
1233
-
1234
- declare class ToArrayPipe implements PipeTransform {
1235
- transform: (value: number) => number[];
1236
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToArrayPipe, never>;
1237
- static ɵpipe: _angular_core.ɵɵPipeDeclaration<ToArrayPipe, "toArray", true>;
1238
- }
1239
- declare const toArray: (value: number) => number[];
1240
- declare const toArrayTrackByFn: TrackByFunction<number>;
1241
-
1242
- declare const createPropHandlers: () => {
1243
- classes: {
1244
- remove: (tokens: string) => void;
1245
- removeMany: (tokens: string[]) => void;
1246
- has: (tokens: string) => boolean;
1247
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1248
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1249
- };
1250
- attributes: {
1251
- remove: (tokens: string) => void;
1252
- removeMany: (tokens: string[]) => void;
1253
- has: (tokens: string) => boolean;
1254
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1255
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1256
- };
1257
- styles: {
1258
- remove: (tokens: string) => void;
1259
- removeMany: (tokens: string[]) => void;
1260
- has: (tokens: string) => boolean;
1261
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1262
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1263
- };
1264
- id: string;
1265
- elementRef: ElementRef<HTMLElement>;
1439
+ type OverlayRuntimeAnchoredPosition = {
1440
+ kind: 'anchored';
1441
+ referenceElement: HTMLElement;
1442
+ placement?: Placement;
1443
+ fallbackPlacements?: Placement[];
1444
+ offset?: OffsetOptions | null;
1445
+ arrowPadding?: Padding | null;
1446
+ viewportPadding?: Padding | null;
1447
+ autoResize?: boolean;
1448
+ shift?: boolean;
1449
+ autoHide?: boolean;
1450
+ autoCloseIfReferenceHidden?: boolean;
1451
+ mirrorWidth?: boolean;
1266
1452
  };
1267
- type PropHandlers = ReturnType<typeof createPropHandlers>;
1268
-
1269
- type Props = Readonly<{
1270
- attached: Signal<boolean>;
1271
- attachedElements: PropsAttachedElements;
1272
- }>;
1273
- type PropsAttachedElements = {
1274
- first: Signal<HTMLElement | null>;
1275
- firstId: Signal<string | null>;
1276
- get(id: string): HTMLElement | null;
1453
+ type OverlayRuntimePositionStrategy = OverlayRuntimeCenteredPosition | OverlayRuntimeAnchoredPosition | OverlayRuntimeGlobalPosition;
1454
+ type OverlayRuntimeElements = {
1455
+ rootElement: HTMLElement;
1456
+ hostElement: HTMLElement;
1457
+ backdropElement: HTMLElement | null;
1458
+ paneElement: HTMLElement;
1277
1459
  };
1278
- type PropsAttachedElementsInternal = PropsAttachedElements & {
1279
- has: (id: string) => boolean;
1280
- push: (id: string, element: HTMLElement) => void;
1281
- remove: (id: string) => void;
1460
+ type OverlayRuntimeCloseEvent<TResult = unknown> = {
1461
+ result: TResult | undefined;
1462
+ source: OverlayRuntimeCloseSource;
1282
1463
  };
1283
- type PropsInternal = {
1284
- single: boolean;
1285
- name: string;
1286
- bindId: boolean;
1287
- attached: Signal<boolean>;
1288
- attachedElements: PropsAttachedElementsInternal;
1289
- classBindings: Record<string, Signal<unknown>> | null;
1290
- attributeBindings: Record<string, Signal<unknown>> | null;
1291
- styleBindings: Record<string, Signal<unknown>> | null;
1292
- staticClassBindings: string[] | null;
1293
- staticAttributeBindings: Record<string, unknown> | null;
1294
- staticStyleBindings: Record<string, unknown> | null;
1295
- attachEventListeners: ((context: {
1296
- on: HTMLElement['addEventListener'];
1297
- element: HTMLElement;
1298
- }) => void) | null;
1464
+ type OverlayRuntimeComponentBase = {
1465
+ animatedLifecycle?: Signal<AnimatedLifecycleDirective | undefined>;
1299
1466
  };
1300
- type CreatePropsOptions = {
1301
- name: string;
1302
- bindId?: boolean;
1303
- single?: boolean;
1304
- classes?: Record<string, Signal<unknown>>;
1305
- attributes?: Record<string, Signal<unknown>>;
1306
- styles?: Record<string, Signal<unknown>>;
1307
- staticClasses?: string[];
1308
- staticAttributes?: Record<string, unknown>;
1309
- staticStyles?: Record<string, unknown>;
1310
- listeners?: (context: {
1311
- on: HTMLElement['addEventListener'];
1312
- element: HTMLElement;
1313
- }) => void;
1467
+ type OverlayRuntimeAnimationDelegateEnterContext = {
1468
+ lifecycle: AnimatedLifecycleDirective;
1469
+ elements: OverlayRuntimeElements;
1314
1470
  };
1315
- declare const createProps: (props: CreatePropsOptions) => Props;
1316
- type HostProps = {
1317
- props: Props;
1318
- handlers: PropHandlers;
1471
+ type OverlayRuntimeAnimationDelegateLeaveContext = OverlayRuntimeAnimationDelegateEnterContext & {
1472
+ closeEvent: OverlayRuntimeCloseEvent;
1319
1473
  };
1320
- declare const createHostProps: (props: CreatePropsOptions) => HostProps;
1321
-
1322
- declare const createSetup: <T extends Record<string, unknown>>(config: {
1323
- setupFn: (params: T) => void;
1324
- this: ThisType<unknown>;
1325
- }) => (params: T) => void;
1326
-
1327
- declare const createDependencyStash: <T extends Record<string, WritableSignal<unknown>>>(stash: T) => T & {
1328
- provideSignal: <K extends keyof T>(data: {
1329
- signal: Signal<ReturnType<T[K]>>;
1330
- for: K;
1331
- }) => void;
1332
- provideValue: <K extends keyof T>(data: {
1333
- value: ReturnType<T[K]>;
1334
- for: K;
1335
- }) => void;
1474
+ /**
1475
+ * Overrides the runtime's default enter/leave animation handling.
1476
+ * A delegate must eventually drive the lifecycle state to `entered` (enter) or `left` (leave),
1477
+ * otherwise the overlay will never finish opening or closing.
1478
+ */
1479
+ type OverlayRuntimeAnimationDelegate = {
1480
+ enter?: (context: OverlayRuntimeAnimationDelegateEnterContext) => void;
1481
+ leave?: (context: OverlayRuntimeAnimationDelegateLeaveContext) => void;
1336
1482
  };
1337
-
1338
- declare const createElementDictionary: () => {
1339
- ids: _angular_core.Signal<string[]>;
1340
- elements: _angular_core.Signal<HTMLElement[]>;
1341
- has: (id: string) => boolean;
1342
- get: (id: string) => HTMLElement | null;
1343
- push: (id: string, element: HTMLElement) => void;
1344
- remove: (id: string) => void;
1345
- isEmpty: _angular_core.Signal<boolean>;
1346
- firstElement: _angular_core.Signal<HTMLElement | null>;
1347
- firstId: _angular_core.Signal<string | null>;
1483
+ type OverlayRuntimeMountConfig<TComponent extends object> = {
1484
+ id: string;
1485
+ component: Type<TComponent>;
1486
+ viewContainerRef?: ViewContainerRef;
1487
+ injector?: Injector;
1488
+ providers?: StaticProvider[];
1489
+ role?: OverlayRuntimeRole;
1490
+ positionStrategy?: OverlayRuntimePositionStrategy;
1491
+ hasBackdrop?: boolean;
1492
+ modal?: boolean;
1493
+ autoFocus?: OverlayRuntimeAutoFocusTarget | string | false;
1494
+ restoreFocus?: boolean;
1495
+ closeOnEscape?: boolean;
1496
+ closeOnOutsidePointer?: boolean;
1497
+ ariaDescribedBy?: string | null;
1498
+ ariaLabelledBy?: string | null;
1499
+ ariaLabel?: string | null;
1500
+ hostClass?: string[];
1501
+ backdropClass?: string[];
1502
+ paneClass?: string[];
1503
+ inputBindings?: Record<string, unknown>;
1504
+ outputBindings?: Record<string, (event: unknown) => unknown>;
1505
+ animationDelegate?: OverlayRuntimeAnimationDelegate;
1348
1506
  };
1349
1507
 
1350
- type BindPropsOptions = {
1351
- props: Props | PropsInternal;
1352
- handlers: PropHandlers;
1353
- };
1354
- declare const bindProps: (config: BindPropsOptions) => void;
1355
- type UnbindPropsOptions = {
1356
- props: Props | PropsInternal;
1357
- handlers: PropHandlers;
1508
+ type OverlayRuntimeState = 'mounting' | 'mounted' | 'closing' | 'closed';
1509
+ declare const createOverlayRuntimeRef: <TComponent extends object, TResult = unknown>(id: string, config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">, elements: OverlayRuntimeElements, requestClose: (result: TResult | undefined, source: OverlayRuntimeCloseSource) => void) => {
1510
+ id: string;
1511
+ config: Omit<OverlayRuntimeMountConfig<TComponent>, "component">;
1512
+ elements: OverlayRuntimeElements;
1513
+ state: _angular_core.Signal<OverlayRuntimeState>;
1514
+ componentInstance: _angular_core.Signal<TComponent | null>;
1515
+ beforeOpenedSubject: Subject<void>;
1516
+ close(result?: TResult, source?: OverlayRuntimeCloseSource): void;
1517
+ beforeOpened(): Observable<void>;
1518
+ afterOpened(): Observable<void>;
1519
+ beforeClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
1520
+ afterClosed(): Observable<OverlayRuntimeCloseEvent<TResult>>;
1521
+ attachComponentRef(componentRef: ComponentRef<TComponent>): void;
1522
+ /** @internal */
1523
+ attachPositionUpdater(updater: (strategy: OverlayRuntimePositionStrategy) => void): void;
1524
+ updatePositionStrategy(strategy: OverlayRuntimePositionStrategy): void;
1525
+ markOpened(): void;
1526
+ beginClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): boolean;
1527
+ finishClose(closeEvent: OverlayRuntimeCloseEvent<TResult>): void;
1358
1528
  };
1359
- declare const unbindProps: (config: UnbindPropsOptions) => void;
1529
+ type OverlayRuntimeRef<TComponent extends object = object, TResult = unknown> = ReturnType<typeof createOverlayRuntimeRef<TComponent, TResult>>;
1360
1530
 
1361
- declare class PropsDirective {
1362
- destroyRef: DestroyRef;
1363
- props: _angular_core.InputSignalWithTransform<PropsInternal, Readonly<{
1364
- attached: _angular_core.Signal<boolean>;
1365
- attachedElements: _ethlete_core.PropsAttachedElements;
1366
- }>>;
1367
- propHandlers: {
1368
- classes: {
1369
- remove: (tokens: string) => void;
1370
- removeMany: (tokens: string[]) => void;
1371
- has: (tokens: string) => boolean;
1372
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1373
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1374
- };
1375
- attributes: {
1376
- remove: (tokens: string) => void;
1377
- removeMany: (tokens: string[]) => void;
1378
- has: (tokens: string) => boolean;
1379
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1380
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1381
- };
1382
- styles: {
1383
- remove: (tokens: string) => void;
1384
- removeMany: (tokens: string[]) => void;
1385
- has: (tokens: string) => boolean;
1386
- push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1387
- pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1388
- };
1389
- id: string;
1390
- elementRef: _angular_core.ElementRef<HTMLElement>;
1391
- };
1392
- constructor();
1393
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropsDirective, never>;
1394
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PropsDirective, "[etProps]", never, { "props": { "alias": "etProps"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1395
- }
1531
+ declare const FOCUSABLE_SELECTOR: string;
1532
+ declare const isHTMLElement: (value: unknown) => value is HTMLElement;
1533
+ declare const isFocusable: (element: HTMLElement, document: Document) => boolean;
1534
+ declare const getFocusableElements: (container: HTMLElement, document: Document) => HTMLElement[];
1535
+ declare const getHeadingElement: (container: HTMLElement) => HTMLElement | null;
1536
+ declare const focusElement: (element: HTMLElement | null) => void;
1537
+ declare const applyInitialFocus: (paneElement: HTMLElement, autoFocus: OverlayRuntimeAutoFocusTarget | string | false, document: Document) => void;
1538
+ declare const setupFocusTrap: (paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, enabled: boolean, isTopMost: (ref: OverlayRuntimeRef<object, unknown>) => boolean, document: Document) => () => void;
1396
1539
 
1397
- type AnyTemplateType = string | TemplateRef<unknown> | ComponentType<unknown> | TemplateRefWithContext | ComponentTypeWithInputs;
1398
- type TemplateRefWithContext<T = Record<string, unknown> | undefined, J = unknown> = {
1399
- template: TemplateRef<J>;
1400
- context?: T;
1401
- injector?: Injector;
1402
- };
1403
- type ComponentTypeWithInputs<T = Record<string, unknown> | undefined, J = unknown> = {
1404
- component: ComponentType<J>;
1405
- inputs?: T;
1406
- injector?: Injector;
1407
- };
1408
- type StringTemplate = {
1409
- type: 'string';
1410
- value: string;
1411
- };
1412
- type NgTemplateTemplate = {
1413
- type: 'template';
1414
- value: TemplateRef<unknown>;
1415
- context?: Record<string, unknown>;
1416
- injector: Injector | null;
1540
+ declare const setBaseElementStyles: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer) => void;
1541
+ declare const setBackdropStyles: (backdropElement: HTMLElement, renderer: AngularRenderer) => void;
1542
+ declare const applyCenteredPosition: (hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer, _config: OverlayRuntimeCenteredPosition) => void;
1543
+ declare const applyGlobalPosition: (hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer, config: OverlayRuntimeGlobalPosition) => void;
1544
+ /**
1545
+ * Clears every inline style any position strategy kind may have set and
1546
+ * restores the base element styles, so a different strategy can be applied afterwards.
1547
+ */
1548
+ declare const resetPositioningStyles: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, renderer: AngularRenderer) => void;
1549
+ declare const createAnchoredPositionCleanup: (strategy: OverlayRuntimeAnchoredPosition, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1550
+ declare const setupPositioning: (config: OverlayRuntimeMountConfig<object>, hostElement: HTMLElement, paneElement: HTMLElement, overlayRef: OverlayRuntimeRef<object, unknown>, renderer: AngularRenderer) => () => void;
1551
+
1552
+ type OverlayRuntime = {
1553
+ mount: <TComponent extends object, TResult = unknown>(config: OverlayRuntimeMountConfig<TComponent>) => OverlayRuntimeRef<TComponent, TResult>;
1554
+ openEntries: ReturnType<typeof computed<OverlayRuntimeRef<object, unknown>[]>>;
1417
1555
  };
1418
- type ComponentTemplate = {
1419
- type: 'component';
1420
- value: ComponentType<unknown>;
1421
- inputs?: Record<string, unknown>;
1422
- injector: Injector | null;
1556
+ declare const provideOverlayRuntime: () => _angular_core.Provider[];
1557
+ declare const injectOverlayRuntime: {
1558
+ (): OverlayRuntime;
1559
+ (options: _angular_core.InjectOptions & {
1560
+ optional?: false;
1561
+ }): OverlayRuntime;
1562
+ (options: _angular_core.InjectOptions): OverlayRuntime | null;
1423
1563
  };
1424
- declare const templateComputed: (templateSignal: Signal<AnyTemplateType | null>) => Signal<StringTemplate | NgTemplateTemplate | ComponentTemplate | null>;
1425
1564
 
1426
- type ResizeEdge = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
1427
- type ResizeMoveEvent = {
1428
- edge: ResizeEdge;
1429
- dx: number;
1430
- dy: number;
1431
- };
1432
- declare class ResizeHandlesComponent {
1433
- edges: _angular_core.InputSignal<ResizeEdge[]>;
1434
- disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1435
- private gestureStart$;
1436
- private gesture$;
1437
- resizeStarted: _angular_core.OutputRef<ResizeEdge>;
1438
- resizeMoved: _angular_core.OutputRef<ResizeMoveEvent>;
1439
- resizeEnded: _angular_core.OutputRef<void>;
1440
- isResizing: _angular_core.Signal<boolean>;
1441
- activeEdge: _angular_core.Signal<ResizeEdge | null>;
1442
- readonly edgeCursors: Record<ResizeEdge, string>;
1443
- startResizeGesture(event: PointerEvent, edge: ResizeEdge): void;
1444
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResizeHandlesComponent, never>;
1445
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResizeHandlesComponent, "et-resize-handles", never, { "edges": { "alias": "edges"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "resizeStarted": "resizeStarted"; "resizeMoved": "resizeMoved"; "resizeEnded": "resizeEnded"; }, never, never, true, never>;
1446
- }
1565
+ declare const createComponentId: (prefix: string) => string;
1447
1566
 
1448
- declare const elementCanScroll: (element?: HTMLElement | null, direction?: "x" | "y") => boolean;
1449
- type IsElementVisibleOptions = {
1450
- /**
1451
- * The element to check if it is visible inside a container.
1452
- */
1453
- element?: HTMLElement | null;
1454
- /**
1455
- * The container to check if the element is visible inside.
1456
- * If null or undefined, uses the viewport as the container.
1457
- * @default null (viewport)
1458
- */
1459
- container?: HTMLElement | null;
1460
- /**
1461
- * The container's rect to check if the element is visible inside. Can be supplied to reduce the amount of DOM reads.
1462
- * Only used when container is provided and not null.
1463
- * @default container.getBoundingClientRect()
1464
- */
1465
- containerRect?: DOMRect | null;
1466
- /**
1467
- * The element's rect. Can be supplied to reduce the amount of DOM reads.
1468
- * @default element.getBoundingClientRect()
1469
- */
1470
- elementRect?: DOMRect | null;
1471
- };
1472
- type CurrentElementVisibility = {
1473
- /**
1474
- * Whether the element is visible in the inline direction.
1475
- */
1476
- inline: boolean;
1477
- /**
1478
- * Whether the element is visible in the block direction.
1479
- */
1480
- block: boolean;
1481
- /**
1482
- * The percentage of the element that is visible in the inline direction.
1483
- */
1484
- inlineIntersection: number;
1485
- /**
1486
- * The percentage of the element that is visible in the block direction.
1487
- */
1488
- blockIntersection: number;
1489
- /**
1490
- * Whether the element is intersecting the container.
1491
- */
1492
- isIntersecting: boolean;
1493
- /**
1494
- * The ratio of the element that is intersecting the container.
1495
- */
1496
- intersectionRatio: number;
1497
- /**
1498
- * The element that is being checked for visibility.
1499
- */
1500
- element: HTMLElement;
1567
+ declare const createDestroy: () => rxjs.Observable<boolean>;
1568
+
1569
+ declare const injectHostElement: <T = HTMLElement>() => T;
1570
+ declare const injectTemplateRef: <C = unknown>() => TemplateRef<C>;
1571
+ type CreateProviderOptions = {
1501
1572
  /**
1502
- * The container's rect used for the calculation.
1573
+ * Optional name for the provider, useful for debugging.
1574
+ * If not provided, the name will be a generated string.
1503
1575
  */
1504
- containerRect: DOMRect;
1576
+ name?: string;
1505
1577
  /**
1506
- * The element's rect used for the calculation.
1578
+ * Optional existing InjectionToken to also provide the created provider under.
1507
1579
  */
1508
- elementRect: DOMRect;
1580
+ extraInjectionToken?: InjectionToken<unknown>;
1509
1581
  };
1510
- declare const isElementVisible: (options: IsElementVisibleOptions) => CurrentElementVisibility | null;
1511
- declare const getElementScrollCoordinates: (options: ScrollToElementOptions) => ScrollToOptions;
1512
- type ScrollToElementOptions = {
1513
- /**
1514
- * The element to scroll to.
1515
- */
1516
- element?: HTMLElement | null;
1517
- /**
1518
- * The scroll container to scroll to the element in.
1519
- * Must be provided - cannot scroll the viewport programmatically with this function.
1520
- */
1521
- container?: HTMLElement | null;
1522
- /**
1523
- * The direction to scroll in.
1524
- * @default 'both'
1525
- */
1526
- direction?: 'inline' | 'block' | 'both';
1527
- /**
1528
- * The origin of the element to scroll to.
1529
- * @default 'nearest'
1530
- */
1531
- origin?: 'start' | 'end' | 'center' | 'nearest';
1532
- /**
1533
- * The scroll behavior.
1534
- * @default 'smooth'
1535
- */
1536
- behavior?: ScrollBehavior;
1582
+ type ProviderResult<T> = readonly [
1583
+ provide: () => Provider[],
1584
+ inject: {
1585
+ (): T;
1586
+ (options: InjectOptions & {
1587
+ optional?: false;
1588
+ }): T;
1589
+ (options: InjectOptions): T | null;
1590
+ },
1591
+ token: InjectionToken<T>
1592
+ ];
1593
+ type StaticProviderResult<T> = readonly [
1594
+ provide: (valueOverride?: Partial<T>) => Provider[],
1595
+ inject: {
1596
+ (): T;
1597
+ (options: InjectOptions & {
1598
+ optional?: false;
1599
+ }): T;
1600
+ (options: InjectOptions): T | null;
1601
+ },
1602
+ token: InjectionToken<T>
1603
+ ];
1604
+ type RootProviderResult<T> = readonly [
1605
+ inject: {
1606
+ (): T;
1607
+ (options: InjectOptions & {
1608
+ optional?: false;
1609
+ }): T;
1610
+ (options: InjectOptions): T | null;
1611
+ },
1612
+ token: InjectionToken<T>
1613
+ ];
1614
+ declare const createProvider: <T>(factory: () => T, options?: CreateProviderOptions) => ProviderResult<T>;
1615
+ declare const createRootProvider: <T>(factory: () => T, options?: CreateProviderOptions) => ProviderResult<T>;
1616
+ declare const createStaticProvider: <T>(defaultValue?: T, options?: CreateProviderOptions) => StaticProviderResult<T>;
1617
+ declare const createStaticRootProvider: <T>(defaultValue?: T, options?: CreateProviderOptions) => StaticProviderResult<T>;
1618
+
1619
+ declare const cloneFormGroup: <T extends FormGroup<any>>(formGroup: T) => T;
1620
+ declare const getFormGroupValue: <T extends FormGroup>(formGroup: T) => Record<string, unknown>;
1621
+
1622
+ declare const createRxHostListener: <K extends keyof HTMLElementEventMap>(eventName: K, options?: EventListenerOptions) => rxjs.Observable<HTMLElementEventMap[K]>;
1623
+ declare const applyHostListener: <K extends keyof HTMLElementEventMap>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, options?: EventListenerOptions) => rxjs.Subscription;
1624
+ declare const applyHostListeners: (listeners: Partial<{ [K in keyof HTMLElementEventMap]: (event: HTMLElementEventMap[K]) => void; }>, options?: EventListenerOptions) => void;
1625
+
1626
+ declare class TypedQueryList<T> extends QueryList<T> {
1627
+ get changes(): Observable<TypedQueryList<T>>;
1628
+ }
1629
+ declare function switchQueryListChanges(): <T extends TypedQueryList<unknown> | null | undefined>(source: Observable<T>) => Observable<T>;
1630
+
1631
+ /**
1632
+ * Sets the value of an input signal.
1633
+ * See issue: https://github.com/angular/angular/issues/54782
1634
+ */
1635
+ declare const setInputSignal: <T>(input: InputSignal<T> | InputSignalWithTransform<T, unknown>, value: T) => void;
1636
+
1637
+ type NgClassType = string | string[] | Set<string> | {
1638
+ [klass: string]: any;
1639
+ } | null | undefined;
1640
+
1641
+ declare const AT_LEAST_ONE_REQUIRED = "atLeastOneRequired";
1642
+ type ValidateAtLeastOneRequiredConfig = {
1537
1643
  /**
1538
- * The scroll inline-margin
1539
- * @default 0
1644
+ * Keys of form controls to validate in the supplied form group
1540
1645
  */
1541
- scrollInlineMargin?: number;
1646
+ keys: string[];
1542
1647
  /**
1543
- * The scroll block-margin
1544
- * @default 0
1648
+ * If true, the value `false` will result in a validation error
1649
+ * @default false
1545
1650
  */
1546
- scrollBlockMargin?: number;
1651
+ checkFalse?: boolean;
1547
1652
  };
1548
- declare const scrollToElement: (options: ScrollToElementOptions) => void;
1549
-
1550
- type ScrollSnapOrigin = 'auto' | 'start' | 'center' | 'end';
1551
- type ScrollSnapTarget = {
1552
- /** The element to snap to. */
1553
- element: HTMLElement;
1554
- /** The resolved alignment to use when scrolling to the element. */
1555
- origin: 'start' | 'center' | 'end';
1556
- } | null;
1557
- declare const getScrollSnapTarget: (items: HTMLElement[], container: HTMLElement, direction: "horizontal" | "vertical", origin: ScrollSnapOrigin, margin?: number) => ScrollSnapTarget;
1558
- type ScrollContainerTarget = {
1559
- element: HTMLElement;
1560
- origin: 'start' | 'end';
1561
- } | null;
1562
- declare const getScrollContainerTarget: (entries: IntersectionObserverEntry[], direction: "start" | "end") => ScrollContainerTarget;
1563
- type ScrollItemTarget = {
1564
- element: HTMLElement;
1565
- index: number;
1566
- origin: 'start' | 'end' | 'center';
1653
+ declare const ValidateAtLeastOneRequired: (config: ValidateAtLeastOneRequiredConfig) => ValidatorFn;
1654
+ declare const IS_ARRAY_NOT_EMPTY = "isArrayNotEmpty";
1655
+ declare const IsArrayNotEmpty: (control: AbstractControl) => ValidationErrors | null;
1656
+ declare const IS_EMAIL = "isEmail";
1657
+ declare const IsEmail: (control: AbstractControl) => ValidationErrors | null;
1658
+ declare const MUST_MATCH = "mustMatch";
1659
+ declare const MustMatch: (controlName: string, matchingControlName: string) => (formGroup: AbstractControl) => {
1660
+ mustMatch: boolean;
1567
1661
  } | null;
1568
- declare const getScrollItemTarget: (entries: IntersectionObserverEntry[], container: HTMLElement, direction: "start" | "end", scrollOrigin: "auto" | "center" | "start" | "end", axisDirection: "horizontal" | "vertical") => ScrollItemTarget;
1662
+ declare const Validators: {
1663
+ readonly MustMatch: (controlName: string, matchingControlName: string) => (formGroup: AbstractControl) => {
1664
+ mustMatch: boolean;
1665
+ } | null;
1666
+ readonly IsEmail: (control: AbstractControl) => ValidationErrors | null;
1667
+ readonly IsArrayNotEmpty: (control: AbstractControl) => ValidationErrors | null;
1668
+ readonly ValidateAtLeastOneRequired: (config: ValidateAtLeastOneRequiredConfig) => ValidatorFn;
1669
+ };
1569
1670
 
1570
- declare const previousSignalValue: <T>(signal: Signal<T>) => Signal<T | undefined>;
1571
- type SyncSignalOptions = {
1572
- /**
1573
- * If true, the target signal will not be updated with the source signal's value in a sync operation.
1574
- * This should be set to true for signals that need to be initialized first before syncing (eg. required inputs)
1575
- * @default false
1576
- */
1577
- skipSyncRead?: boolean;
1578
- /**
1579
- * If true, the first time the effect will be triggered will be skipped.
1580
- * @default false
1581
- */
1582
- skipFirstRun?: boolean;
1671
+ declare const clone: <T>(original: T) => T;
1672
+ declare const equal: (foo: any, bar: any) => boolean;
1673
+
1674
+ declare const hasCookie: (name: string) => boolean;
1675
+ declare const getCookie: (name: string) => string | null | undefined;
1676
+ declare const setCookie: (name: string, data: string, expiresInDays?: number | null, domain?: string | null, path?: string, sameSite?: "strict" | "none" | "lax") => void;
1677
+ declare const deleteCookie: (name: string, path?: string, domain?: string | null) => void;
1678
+ declare const getDomain: () => string | null;
1679
+
1680
+ type Translatable = {
1681
+ i18n: string;
1682
+ text: string;
1583
1683
  };
1584
- declare const syncSignal: <T>(from: Signal<T>, to: WritableSignal<T>, options?: SyncSignalOptions) => _angular_core.EffectRef;
1585
- type MaybeSignal<T> = T | Signal<T>;
1586
- declare const maybeSignalValue: <T>(value: MaybeSignal<T>) => T;
1587
- /**
1588
- * A computed that will only be reactive until the source signal contains a truthy value.
1589
- * All subsequent changes inside the computation will be ignored.
1590
- */
1591
- declare const computedTillTruthy: <T>(source: Signal<T>) => Signal<T | null>;
1592
- /**
1593
- * A computed that will only be reactive until the source signal contains a falsy value.
1594
- * All subsequent changes inside the computation will be ignored.
1595
- */
1596
- declare const computedTillFalsy: <T>(source: Signal<T>) => Signal<T | null>;
1597
- /**
1598
- * A writeable signal that will be set to the provided value once all inputs are set.
1599
- * During that time, the signal will be set to `null`.
1600
- */
1601
- declare const deferredSignal: <T extends () => unknown>(valueFn: T) => WritableSignal<ReturnType<T> | null>;
1602
- declare const memoizeSignal: <T>(factory: () => Signal<T>) => () => Signal<T>;
1603
1684
 
1604
- type SignalAnimatedNumberOptions = {
1605
- /**
1606
- * The initial value to start animating from.
1607
- * If not provided, the animation will start from 0
1608
- */
1609
- initialValue?: number;
1610
- /**
1611
- * Duration of the animation in milliseconds.
1612
- * @default 1000
1613
- */
1614
- duration?: number;
1615
- /**
1616
- * Easing function that takes a progress value (0 to 1) and returns an eased value (0 to 1).
1617
- * Options:
1618
- * - `easeLinear()`
1619
- * - `easeIn()`
1620
- * - `easeOut()`
1621
- * - `easeInOut()`
1622
- * - `easeElastic()`
1623
- * - `easeOutBack()`
1624
- * - `easeOutBackStrong()`
1625
- * @default easeOut()
1626
- */
1627
- easing?: (t: number) => number;
1628
- /**
1629
- * Function to round the animated value.
1630
- * @default (v: number) => Math.round(v)
1631
- */
1632
- round?: (value: number) => number;
1633
- /**
1634
- * Callback invoked when the animation starts.
1635
- */
1636
- onAnimationStart?: () => void;
1637
- /**
1638
- * Callback invoked when the animation ends.
1639
- */
1640
- onAnimationEnd?: () => void;
1685
+ declare class KeyPressManager {
1686
+ readonly key: number;
1687
+ private readonly _isKeyPressed$;
1688
+ private readonly _keyPressCount$;
1689
+ private readonly _stopTimeout$;
1690
+ constructor(key: number);
1691
+ isPressed(event: KeyboardEvent): boolean;
1692
+ clear(): void;
1693
+ }
1694
+
1695
+ declare const DISABLE_LOGGER_PARAM = "et-logger-quiet";
1696
+ type CreateLoggerConfig = {
1697
+ scope: string;
1698
+ feature: string;
1641
1699
  };
1642
- type AnimatedNumberSignal = Signal<number> & {
1643
- /**
1644
- * Starts the animation from the current value to the target value.
1645
- * @returns The animated signal for chaining
1646
- */
1647
- play: () => AnimatedNumberSignal;
1648
- /**
1649
- * Resets the animation to the initial value and stops any ongoing animation.
1650
- * @returns The animated signal for chaining
1651
- */
1652
- reset: () => AnimatedNumberSignal;
1653
- /**
1654
- * Stops the current animation at its current position.
1655
- * @returns The animated signal for chaining
1656
- */
1657
- stop: () => AnimatedNumberSignal;
1700
+ declare const createLogger: (config: CreateLoggerConfig) => {
1701
+ log: (...args: unknown[]) => void;
1702
+ warn: (...args: unknown[]) => void;
1703
+ error: (...args: unknown[]) => void;
1658
1704
  };
1659
- /**
1660
- * Creates a signal that animates the transition of a numeric signal's value over time.
1661
- */
1662
- declare const signalAnimatedNumber: (source: MaybeSignal<number>, options?: SignalAnimatedNumberOptions) => AnimatedNumberSignal;
1663
- declare const easeLinear: (t: number) => number;
1664
- declare const easeIn: (t: number) => number;
1665
- declare const easeOut: (t: number) => number;
1666
- declare const easeInOut: (t: number) => number;
1667
- /** Elastic easing function (overshoots) */
1668
- declare const easeElastic: (t: number) => number;
1669
- /** Back easing function (overshoots slightly then settles) */
1670
- declare const easeOutBack: (t: number) => number;
1671
- /** Back easing function with more overshoot */
1672
- declare const easeOutBackStrong: (t: number) => number;
1673
1705
 
1674
- type BreakpointMap<T> = Partial<Record<Breakpoint, T>>;
1675
- type BreakpointInput<T> = T | BreakpointMap<T>;
1676
- declare const breakpointTransformBase: <T, WriteT = BreakpointInput<T>>(coerce: (value: WriteT) => T) => ((value: WriteT) => T);
1677
1706
  /**
1678
- * Transform factory for boolean inputs.
1679
- * Coerces plain values with `booleanAttribute`; resolves {@link BreakpointMap} mobile-first.
1680
- *
1681
- * @example
1682
- * snap = input(false, { transform: boolBreakpointTransform() });
1683
- * // Template: `snap` | `[snap]="true"` | `[snap]="{ xs: false, md: true }"`
1684
- */
1685
- declare const boolBreakpointTransform: () => ((value: BreakpointInput<boolean> | string) => boolean);
1686
- /**
1687
- * Transform factory for number inputs.
1688
- * Coerces plain values with `numberAttribute`; resolves {@link BreakpointMap} mobile-first.
1689
- *
1690
- * @example
1691
- * scrollMargin = input(0, { transform: numberBreakpointTransform() });
1692
- * // Template: `[scrollMargin]="16"` | `[scrollMargin]="{ xs: 0, md: 16 }"`
1707
+ * Converts a markdown string to HTML.
1708
+ * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
1709
+ * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.
1693
1710
  */
1694
- declare const numberBreakpointTransform: () => ((value: BreakpointInput<number> | string) => number);
1711
+ declare const markdownToHtml: (markdown: string) => string;
1695
1712
  /**
1696
- * Transform factory for any typed input (string unions, arrays, objects, etc.).
1697
- * Passes plain values through as-is; resolves {@link BreakpointMap} mobile-first.
1698
- * A value is treated as a {@link BreakpointMap} only when all its keys are valid breakpoint names.
1699
- *
1700
- * @example
1701
- * itemSize = input('auto', { transform: typedBreakpointTransform<ScrollableItemSize>() });
1702
- * tags = input([], { transform: typedBreakpointTransform<string[]>() });
1703
- * // Template: `[itemSize]="'third'"` | `[itemSize]="{ xs: 'full', md: 'third' }"`
1713
+ * Converts an HTML string to markdown.
1714
+ * Covers headings, bold, italic, strikethrough, inline code, fenced code blocks,
1715
+ * links, images, block quotes, unordered/ordered lists, tables, horizontal rules, and paragraphs.
1704
1716
  */
1705
- declare const typedBreakpointTransform: <T>() => ((value: BreakpointInput<T>) => T);
1706
- type BoolBreakpointSignal = InputSignalWithTransform<boolean, BreakpointInput<boolean> | string>;
1707
- type NumberBreakpointSignal = InputSignalWithTransform<number, BreakpointInput<number> | string>;
1708
- type TypedBreakpointSignal<T> = InputSignalWithTransform<T, BreakpointInput<T>>;
1709
- declare const injectBreakpointInput: <T>(inputSignal: Signal<BreakpointInput<T>>, defaultValue: T) => Signal<T>;
1710
- declare const booleanBreakpointAttribute: (value: unknown) => BreakpointInput<boolean>;
1711
- declare const numberBreakpointAttribute: (value: unknown) => BreakpointInput<number>;
1712
- declare const BREAKPOINT_INSTANCE_TOKEN: InjectionToken<unknown>;
1713
- declare const provideBreakpointInstance: (componentClass: unknown) => {
1714
- provide: InjectionToken<unknown>;
1715
- useExisting: unknown;
1716
- };
1717
+ declare const htmlToMarkdown: (html: string) => string;
1717
1718
 
1718
- type ControlValueSignalOptions = {
1719
- debounceTime?: number;
1720
- /**
1721
- * @default false
1722
- */
1723
- debounceFirst?: boolean;
1724
- };
1725
- declare const controlValueSignal: <TControlInput extends Signal<AbstractControl | null> | AbstractControl, TControl extends TControlInput extends Signal<infer TSignalControl> ? TSignalControl : TControlInput>(control: TControlInput, options?: ControlValueSignalOptions) => Signal<ReturnType<NonNullable<TControl>["getRawValue"]> | null>;
1726
- /**
1727
- * The first item in the pair is the previous value and the second item is the current value.
1728
- */
1729
- declare const controlValueSignalWithPrevious: <T extends AbstractControl>(control: T, options?: ControlValueSignalOptions) => Signal<[ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>["getRawValue"]> | null, ReturnType<NonNullable<T extends Signal<infer TSignalControl> ? TSignalControl : T>["getRawValue"]> | null]>;
1719
+ declare const clamp: (value: number, min?: number, max?: number) => number;
1720
+ declare const round: (value: number, precision?: number) => number;
1730
1721
 
1731
- type SignalElementBindingComplexType = HTMLElement | ElementRef<HTMLElement> | QueryList<ElementRef<HTMLElement> | HTMLElement> | Array<ElementRef<HTMLElement> | HTMLElement> | null | undefined;
1732
- type SignalElementBindingType = HTMLElement | ElementRef<HTMLElement> | Observable<SignalElementBindingComplexType> | Signal<SignalElementBindingComplexType> | QueryList<ElementRef<HTMLElement> | HTMLElement> | ElementSignal;
1733
- type ElementSignal = Signal<{
1734
- currentElements: HTMLElement[];
1735
- previousElements: HTMLElement[];
1736
- }>;
1737
- type ElementSignalValue = ReturnType<ElementSignal>;
1738
- declare const isElementSignal: (el: unknown) => el is ElementSignal;
1739
- declare const createDocumentElementSignal: () => ElementSignal;
1740
- declare const createEmptyElementSignal: () => ElementSignal;
1741
- declare const buildElementSignal: (el: SignalElementBindingType | null | undefined) => ElementSignal;
1742
- declare const firstElementSignal: (el: ElementSignal) => Signal<{
1743
- currentElement: HTMLElement | null;
1744
- previousElement: HTMLElement | null;
1745
- }>;
1722
+ declare const isObject: (value: unknown) => value is Record<string, unknown>;
1723
+ declare const isArray: (value: unknown) => value is unknown[];
1724
+ declare const getObjectProperty: (obj: Record<string, unknown>, prop: string) => unknown;
1746
1725
 
1747
- declare const signalElementChildren: (el: SignalElementBindingType) => _angular_core.Signal<HTMLElement[]>;
1726
+ declare const RUNTIME_ERROR_NO_DATA = "__ET_NO_DATA__";
1727
+ declare class RuntimeError<T extends number> extends Error {
1728
+ code: T;
1729
+ data: unknown;
1730
+ constructor(code: T, message: null | false | string, data?: unknown);
1731
+ }
1732
+ declare function formatRuntimeError<T extends number>(code: T, message: null | false | string): string;
1748
1733
 
1749
- type BuildSignalEffectsConfig<T extends Record<string, Signal<unknown>>> = {
1750
- /** The tokens to apply and their signal value */
1751
- tokenMap: T;
1752
- /** This function will be invoked for elements that were removed from the signal effects */
1753
- cleanupFn: (el: HTMLElement, tokens: string[]) => void;
1754
- /** This function will be invoked for elements that were added to the signal effects or when their signal value changes */
1755
- updateFn: (el: HTMLElement, tokens: string[], conditionResult: unknown) => void;
1756
- };
1757
- declare const buildSignalEffects: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, config: BuildSignalEffectsConfig<T>) => {
1758
- remove: (tokens: string) => void;
1759
- removeMany: (tokens: string[]) => void;
1760
- has: (tokens: string) => boolean;
1761
- push: (tokens: string, signal: Signal<unknown>) => void;
1762
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1763
- };
1764
- declare const signalClasses: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, classMap: T) => {
1765
- remove: (tokens: string) => void;
1766
- removeMany: (tokens: string[]) => void;
1767
- has: (tokens: string) => boolean;
1768
- push: (tokens: string, signal: Signal<unknown>) => void;
1769
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1734
+ type CreateSessionMemoryConfig<TValue> = {
1735
+ key: string;
1736
+ parse: (storedValue: string) => TValue | null;
1737
+ serialize: (value: TValue) => string;
1770
1738
  };
1771
- declare const signalHostClasses: <T extends Record<string, Signal<unknown>>>(classMap: T) => {
1772
- remove: (tokens: string) => void;
1773
- removeMany: (tokens: string[]) => void;
1774
- has: (tokens: string) => boolean;
1775
- push: (tokens: string, signal: Signal<unknown>) => void;
1776
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1739
+ declare const createAutoSessionMemoryKey: ({ element, prefix }: {
1740
+ element: HTMLElement;
1741
+ prefix: string;
1742
+ }) => string;
1743
+ declare const canUseSessionMemory: () => boolean;
1744
+ declare const createSessionMemory: <TValue>({ key, parse, serialize }: CreateSessionMemoryConfig<TValue>) => {
1745
+ read: () => TValue | null;
1746
+ write: (value: TValue) => boolean;
1747
+ remove: () => boolean;
1777
1748
  };
1778
- declare const signalAttributes: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, attributeMap: T) => {
1779
- remove: (tokens: string) => void;
1780
- removeMany: (tokens: string[]) => void;
1781
- has: (tokens: string) => boolean;
1782
- push: (tokens: string, signal: Signal<unknown>) => void;
1783
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1749
+
1750
+ type SwipeTracker = {
1751
+ update(event: TouchEvent | MouseEvent): SwipeUpdateEvent;
1752
+ end(): SwipeEndEvent;
1753
+ cancel(): void;
1754
+ };
1755
+ type SwipeEndEvent = {
1756
+ positivePixelPerSecondX: number;
1757
+ positivePixelPerSecondY: number;
1758
+ pixelPerSecondX: number;
1759
+ pixelPerSecondY: number;
1760
+ movementX: number;
1761
+ movementY: number;
1762
+ positiveMovementX: number;
1763
+ positiveMovementY: number;
1764
+ originClientX: number;
1765
+ originClientY: number;
1766
+ };
1767
+ type SwipeUpdateEvent = {
1768
+ originClientX: number;
1769
+ originClientY: number;
1770
+ timestamp: number;
1771
+ movementX: number;
1772
+ movementY: number;
1773
+ positiveMovementX: number;
1774
+ positiveMovementY: number;
1775
+ isScrolling: boolean;
1776
+ isSwiping: boolean;
1777
+ };
1778
+ declare const createSwipeTracker: (startEvent: TouchEvent | MouseEvent) => SwipeTracker;
1779
+
1780
+ declare class NormalizeGameResultTypePipe implements PipeTransform {
1781
+ transform: (type: string | null) => NormalizedGameResultType | null;
1782
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeGameResultTypePipe, never>;
1783
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeGameResultTypePipe, "etNormalizeGameResultType", true>;
1784
+ }
1785
+ type NormalizedGameResultType = Translatable & {
1786
+ shortCode: string;
1784
1787
  };
1785
- declare const signalHostAttributes: <T extends Record<string, Signal<unknown>>>(attributeMap: T) => {
1786
- remove: (tokens: string) => void;
1787
- removeMany: (tokens: string[]) => void;
1788
- has: (tokens: string) => boolean;
1789
- push: (tokens: string, signal: Signal<unknown>) => void;
1790
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1788
+ declare const normalizeGameResultType: (type: string | null) => NormalizedGameResultType | null;
1789
+
1790
+ declare class NormalizeMatchParticipantsPipe implements PipeTransform {
1791
+ transform: (match: MatchListView | null) => NormalizedMatchParticipants | null;
1792
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchParticipantsPipe, never>;
1793
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchParticipantsPipe, "etNormalizeMatchParticipants", true>;
1794
+ }
1795
+ type NormalizedMatchParticipants = {
1796
+ home: NormalizedMatchParticipant | null;
1797
+ away: NormalizedMatchParticipant | null;
1791
1798
  };
1792
- declare const signalStyles: <T extends Record<string, Signal<unknown>>>(el: SignalElementBindingType, styleMap: T) => {
1793
- remove: (tokens: string) => void;
1794
- removeMany: (tokens: string[]) => void;
1795
- has: (tokens: string) => boolean;
1796
- push: (tokens: string, signal: Signal<unknown>) => void;
1797
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1799
+ type NormalizedParticipantType = 'team' | 'player' | 'unknown';
1800
+ type NormalizedMatchParticipant = ({
1801
+ type: 'tbd';
1802
+ participantType: NormalizedParticipantType;
1803
+ data: ParticipantViewUnion | null;
1804
+ } & Translatable) | {
1805
+ type: 'participant';
1806
+ participantType: NormalizedParticipantType;
1807
+ data: ParticipantViewUnion;
1808
+ } | ({
1809
+ type: 'none';
1810
+ participantType: NormalizedParticipantType;
1811
+ data: ParticipantViewUnion | null;
1812
+ } & Translatable);
1813
+ declare const normalizeMatchParticipants: (match: MatchListView | null) => NormalizedMatchParticipants | null;
1814
+ declare const normalizeMatchParticipant: (match: MatchListView | null, side: "home" | "away") => NormalizedMatchParticipant | null;
1815
+
1816
+ declare class NormalizeMatchScorePipe implements PipeTransform {
1817
+ transform: (match: MatchListView | null | undefined) => NormalizedMatchScore | null;
1818
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchScorePipe, never>;
1819
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchScorePipe, "etNormalizeMatchScore", true>;
1820
+ }
1821
+ declare const enum MatchStateType {
1822
+ PREPARING_ROUND = "preparingRound",
1823
+ PRE_MATCH = "preMatch",
1824
+ LIVE = "live",
1825
+ POST_MATCH = "postMatch",
1826
+ AUTO_WIN = "autoWin"
1827
+ }
1828
+ type NormalizedMatchScore = {
1829
+ home: {
1830
+ score: string | number | null;
1831
+ isWinner: boolean;
1832
+ };
1833
+ away: {
1834
+ score: string | number | null;
1835
+ isWinner: boolean;
1836
+ };
1837
+ subLine: string | null;
1838
+ isNumeric: boolean;
1798
1839
  };
1799
- declare const signalHostStyles: <T extends Record<string, Signal<unknown>>>(styleMap: T) => {
1800
- remove: (tokens: string) => void;
1801
- removeMany: (tokens: string[]) => void;
1802
- has: (tokens: string) => boolean;
1803
- push: (tokens: string, signal: Signal<unknown>) => void;
1804
- pushMany: (map: Record<string, Signal<unknown>>) => void;
1840
+ declare const normalizeMatchScore: (match: MatchListView | null | undefined) => NormalizedMatchScore | null;
1841
+ declare const isKnockoutMatch: (match: MatchListView | null | undefined) => boolean;
1842
+ declare const isGroupMatch: (match: MatchListView | null | undefined) => boolean;
1843
+ declare const getKnockoutMatchScore: (score: MatchRankingView | null | undefined) => "match-score.knockout.won" | "match-score.knockout.lost" | "match-score.knockout.tie" | null;
1844
+ declare const getMatchScoreSubLine: (match: MatchListView | null | undefined) => "match-score.groups.sub-line" | null;
1845
+ declare const getGroupMatchScore: (match: MatchListView | null | undefined) => {
1846
+ home: {
1847
+ score: number;
1848
+ isWinner: boolean;
1849
+ };
1850
+ away: {
1851
+ score: number;
1852
+ isWinner: boolean;
1853
+ };
1854
+ } | null;
1855
+ declare const getGroupMatchPoints: (match: MatchListView | null | undefined) => {
1856
+ home: {
1857
+ score: number;
1858
+ isWinner: boolean;
1859
+ };
1860
+ away: {
1861
+ score: number;
1862
+ isWinner: boolean;
1863
+ };
1864
+ } | null;
1865
+
1866
+ declare class NormalizeMatchStatePipe implements PipeTransform {
1867
+ transform: (match: MatchListView | null | undefined) => MatchStateType | null;
1868
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchStatePipe, never>;
1869
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchStatePipe, "etNormalizeMatchState", true>;
1870
+ }
1871
+ declare const normalizeMatchState: (match: MatchListView | null | undefined) => MatchStateType | null;
1872
+
1873
+ declare class NormalizeMatchTypePipe implements PipeTransform {
1874
+ transform: (matchType: StageType | null | undefined) => Translatable | null;
1875
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NormalizeMatchTypePipe, never>;
1876
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<NormalizeMatchTypePipe, "etNormalizeMatchType", true>;
1877
+ }
1878
+ declare const normalizeMatchType: (matchType: StageType | null | undefined) => Translatable | null;
1879
+
1880
+ declare class HtmlToMarkdownPipe implements PipeTransform {
1881
+ transform: (html: string) => string;
1882
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HtmlToMarkdownPipe, never>;
1883
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<HtmlToMarkdownPipe, "htmlToMarkdown", true>;
1884
+ }
1885
+
1886
+ declare class InferMimeTypePipe implements PipeTransform {
1887
+ transform: (srcset: string) => string | null;
1888
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InferMimeTypePipe, never>;
1889
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<InferMimeTypePipe, "inferMimeType", true>;
1890
+ }
1891
+ /**
1892
+ * Infers the mime type of a given url or srcset.
1893
+ * If a srcset is provided, it will infer the mime type of the first url in the srcset.
1894
+ * If the srcset contains a query parameter `?fm=`, it will use the value of that parameter, since it is often used to specify the file format in image api's like contentful.
1895
+ */
1896
+ declare const inferMimeType: (srcset: string) => string | null;
1897
+
1898
+ declare class MarkdownToHtmlPipe implements PipeTransform {
1899
+ transform: (markdown: string) => string;
1900
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MarkdownToHtmlPipe, never>;
1901
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<MarkdownToHtmlPipe, "markdownToHtml", true>;
1902
+ }
1903
+
1904
+ declare class ToArrayPipe implements PipeTransform {
1905
+ transform: (value: number) => number[];
1906
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToArrayPipe, never>;
1907
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<ToArrayPipe, "toArray", true>;
1908
+ }
1909
+ declare const toArray: (value: number) => number[];
1910
+ declare const toArrayTrackByFn: TrackByFunction<number>;
1911
+
1912
+ declare const createPropHandlers: () => {
1913
+ classes: {
1914
+ remove: (tokens: string) => void;
1915
+ removeMany: (tokens: string[]) => void;
1916
+ has: (tokens: string) => boolean;
1917
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1918
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1919
+ };
1920
+ attributes: {
1921
+ remove: (tokens: string) => void;
1922
+ removeMany: (tokens: string[]) => void;
1923
+ has: (tokens: string) => boolean;
1924
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1925
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1926
+ };
1927
+ styles: {
1928
+ remove: (tokens: string) => void;
1929
+ removeMany: (tokens: string[]) => void;
1930
+ has: (tokens: string) => boolean;
1931
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
1932
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
1933
+ };
1934
+ id: string;
1935
+ elementRef: ElementRef<HTMLElement>;
1805
1936
  };
1937
+ type PropHandlers = ReturnType<typeof createPropHandlers>;
1806
1938
 
1807
- type LogicalSize = {
1808
- inlineSize: number;
1809
- blockSize: number;
1939
+ type Props = Readonly<{
1940
+ attached: Signal<boolean>;
1941
+ attachedElements: PropsAttachedElements;
1942
+ }>;
1943
+ type PropsAttachedElements = {
1944
+ first: Signal<HTMLElement | null>;
1945
+ firstId: Signal<string | null>;
1946
+ get(id: string): HTMLElement | null;
1810
1947
  };
1811
- type ElementRect = {
1812
- bottom: number;
1813
- height: number;
1814
- left: number;
1815
- right: number;
1816
- top: number;
1817
- width: number;
1818
- x: number;
1819
- y: number;
1948
+ type PropsAttachedElementsInternal = PropsAttachedElements & {
1949
+ has: (id: string) => boolean;
1950
+ push: (id: string, element: HTMLElement) => void;
1951
+ remove: (id: string) => void;
1820
1952
  };
1821
- type ElementSize = {
1822
- width: number;
1823
- height: number;
1953
+ type PropsInternal = {
1954
+ single: boolean;
1955
+ name: string;
1956
+ bindId: boolean;
1957
+ attached: Signal<boolean>;
1958
+ attachedElements: PropsAttachedElementsInternal;
1959
+ classBindings: Record<string, Signal<unknown>> | null;
1960
+ attributeBindings: Record<string, Signal<unknown>> | null;
1961
+ styleBindings: Record<string, Signal<unknown>> | null;
1962
+ staticClassBindings: string[] | null;
1963
+ staticAttributeBindings: Record<string, unknown> | null;
1964
+ staticStyleBindings: Record<string, unknown> | null;
1965
+ attachEventListeners: ((context: {
1966
+ on: HTMLElement['addEventListener'];
1967
+ element: HTMLElement;
1968
+ }) => void) | null;
1824
1969
  };
1825
- declare const boundingClientRectToElementRect: (rect: DOMRectReadOnly) => ElementRect;
1826
- declare const createElementDimensions: (el: HTMLElement | null, rect?: DOMRect) => NullableElementDimensions;
1827
- type ElementDimensions = {
1828
- rect: () => ElementRect;
1829
- client: ElementSize;
1830
- scroll: ElementSize;
1831
- offset: ElementSize;
1970
+ type CreatePropsOptions = {
1971
+ name: string;
1972
+ bindId?: boolean;
1973
+ single?: boolean;
1974
+ classes?: Record<string, Signal<unknown>>;
1975
+ attributes?: Record<string, Signal<unknown>>;
1976
+ styles?: Record<string, Signal<unknown>>;
1977
+ staticClasses?: string[];
1978
+ staticAttributes?: Record<string, unknown>;
1979
+ staticStyles?: Record<string, unknown>;
1980
+ listeners?: (context: {
1981
+ on: HTMLElement['addEventListener'];
1982
+ element: HTMLElement;
1983
+ }) => void;
1832
1984
  };
1833
- type NullableElementDimensions = {
1834
- [K in keyof ElementDimensions]: ElementDimensions[K] | null;
1985
+ declare const createProps: (props: CreatePropsOptions) => Props;
1986
+ type HostProps = {
1987
+ props: Props;
1988
+ handlers: PropHandlers;
1835
1989
  };
1836
- declare const signalElementDimensions: (el: SignalElementBindingType) => Signal<NullableElementDimensions>;
1837
- declare const signalHostElementDimensions: () => Signal<NullableElementDimensions>;
1838
- declare const injectViewportSize: () => Signal<ElementSize>;
1990
+ declare const createHostProps: (props: CreatePropsOptions) => HostProps;
1839
1991
 
1840
- type SignalElementIntersectionOptions = Omit<IntersectionObserverInit, 'root'> & {
1841
- root?: SignalElementBindingType;
1842
- enabled?: Signal<boolean>;
1843
- };
1844
- type IntersectionObserverEntryWithDetails = IntersectionObserverEntry & {
1845
- isAbove: boolean;
1846
- isBelow: boolean;
1847
- isLeft: boolean;
1848
- isRight: boolean;
1849
- isVisible: boolean;
1850
- };
1851
- declare const signalElementIntersection: (el: SignalElementBindingType, options?: SignalElementIntersectionOptions) => Signal<IntersectionObserverEntryWithDetails[]>;
1852
- declare const signalHostElementIntersection: (options?: SignalElementIntersectionOptions) => Signal<IntersectionObserverEntryWithDetails[]>;
1992
+ declare const createSetup: <T extends Record<string, unknown>>(config: {
1993
+ setupFn: (params: T) => void;
1994
+ this: ThisType<unknown>;
1995
+ }) => (params: T) => void;
1853
1996
 
1854
- declare const signalElementMutations: (el: SignalElementBindingType, options?: MutationObserverInit) => _angular_core.Signal<MutationRecord | null>;
1855
- declare const signalHostElementMutations: (options?: MutationObserverInit) => _angular_core.Signal<MutationRecord | null>;
1997
+ declare const createDependencyStash: <T extends Record<string, WritableSignal<unknown>>>(stash: T) => T & {
1998
+ provideSignal: <K extends keyof T>(data: {
1999
+ signal: Signal<ReturnType<T[K]>>;
2000
+ for: K;
2001
+ }) => void;
2002
+ provideValue: <K extends keyof T>(data: {
2003
+ value: ReturnType<T[K]>;
2004
+ for: K;
2005
+ }) => void;
2006
+ };
1856
2007
 
1857
- type ElementLastScrollDirectionType = 'up' | 'down' | 'left' | 'right';
1858
- type ElementLastScrollDirection = {
1859
- type: ElementLastScrollDirectionType;
1860
- time: number;
2008
+ declare const createElementDictionary: () => {
2009
+ ids: _angular_core.Signal<string[]>;
2010
+ elements: _angular_core.Signal<HTMLElement[]>;
2011
+ has: (id: string) => boolean;
2012
+ get: (id: string) => HTMLElement | null;
2013
+ push: (id: string, element: HTMLElement) => void;
2014
+ remove: (id: string) => void;
2015
+ isEmpty: _angular_core.Signal<boolean>;
2016
+ firstElement: _angular_core.Signal<HTMLElement | null>;
2017
+ firstId: _angular_core.Signal<string | null>;
1861
2018
  };
1862
- declare const signalElementLastScrollDirection: (el: SignalElementBindingType) => _angular_core.Signal<ElementLastScrollDirection | null>;
1863
- declare const signalHostElementLastScrollDirection: () => _angular_core.Signal<ElementLastScrollDirection | null>;
1864
2019
 
1865
- type SignalElementScrollStateOptions = {
1866
- /** The initial scroll position to scroll to. Once a truthy value get's emitted, all further values will be ignored. */
1867
- initialScrollPosition?: Signal<ScrollToOptions | null>;
2020
+ type BindPropsOptions = {
2021
+ props: Props | PropsInternal;
2022
+ handlers: PropHandlers;
1868
2023
  };
1869
- type ElementScrollState = {
1870
- canScroll: boolean;
1871
- canScrollHorizontally: boolean;
1872
- canScrollVertically: boolean;
1873
- elementDimensions: NullableElementDimensions;
2024
+ declare const bindProps: (config: BindPropsOptions) => void;
2025
+ type UnbindPropsOptions = {
2026
+ props: Props | PropsInternal;
2027
+ handlers: PropHandlers;
1874
2028
  };
1875
- declare const areScrollStatesEqual: (a: ElementScrollState, b: ElementScrollState) => boolean;
1876
- declare const signalElementScrollState: (el: SignalElementBindingType, options?: SignalElementScrollStateOptions) => Signal<ElementScrollState>;
1877
- declare const signalHostElementScrollState: () => Signal<ElementScrollState>;
1878
-
1879
- /** Inject a signal containing a boolean value indicating if the viewport is xs */
1880
- declare const injectIsXs: () => _angular_core.Signal<boolean>;
1881
- /** Inject a signal containing a boolean value indicating if the viewport is sm */
1882
- declare const injectIsSm: () => _angular_core.Signal<boolean>;
1883
- /** Inject a signal containing a boolean value indicating if the viewport is md */
1884
- declare const injectIsMd: () => _angular_core.Signal<boolean>;
1885
- /** Inject a signal containing a boolean value indicating if the viewport is lg */
1886
- declare const injectIsLg: () => _angular_core.Signal<boolean>;
1887
- /** Inject a signal containing a boolean value indicating if the viewport is xl */
1888
- declare const injectIsXl: () => _angular_core.Signal<boolean>;
1889
- /** Inject a signal containing a boolean value indicating if the viewport is 2xl */
1890
- declare const injectIs2Xl: () => _angular_core.Signal<boolean>;
1891
- /**
1892
- * Inject a boolean value indicating if the viewport is matching the provided options.
1893
- * This value is not reactive. If you want to react to changes, use the {@link injectObserveBreakpoint} function instead.
1894
- */
1895
- declare const injectBreakpointIsMatched: (options: BuildMediaQueryOptions) => boolean;
1896
- /**
1897
- * Inject a boolean value indicating if the media query is matched.
1898
- * This value is not reactive. If you want to react to changes, use the {@link injectObserveMediaQuery} function instead.
1899
- */
1900
- declare const injectMediaQueryIsMatched: (mediaQuery: string) => boolean;
1901
- /**
1902
- * Inject a signal containing a boolean value indicating if the viewport is matching the provided options.
1903
- */
1904
- declare const injectObserveBreakpoint: (options: BuildMediaQueryOptions) => _angular_core.Signal<boolean>;
1905
- /**
1906
- * Inject a signal containing a boolean value indicating if the media query is matched.
1907
- */
1908
- declare const injectObserveMediaQuery: (mediaQuery: string) => _angular_core.Signal<boolean>;
1909
- /** Inject a signal containing the current breakpoint. */
1910
- declare const injectCurrentBreakpoint: () => _angular_core.Signal<"xs" | "sm" | "md" | "lg" | "xl" | "2xl">;
1911
- /** Inject a signal that indicates if the user is using a portrait display */
1912
- declare const injectIsPortrait: () => _angular_core.Signal<boolean>;
1913
- /** Inject a signal that indicates if the user is using a landscape display */
1914
- declare const injectIsLandscape: () => _angular_core.Signal<boolean>;
1915
- /** Inject a signal containing the current display orientation */
1916
- declare const injectDisplayOrientation: () => _angular_core.Signal<"portrait" | "landscape">;
1917
- /** Inject a signal that indicates if the device has a touch input */
1918
- declare const injectHasTouchInput: () => _angular_core.Signal<boolean>;
1919
- /** Inject a signal that indicates if the device has a fine input (mouse or stylus) */
1920
- declare const injectHasPrecisionInput: () => _angular_core.Signal<boolean>;
1921
- /** Inject a signal containing the current device input type */
1922
- declare const injectDeviceInputType: () => _angular_core.Signal<"touch" | "mouse">;
1923
- /** Inject a signal containing a boolean value indicating if the user can hover (eg. using a mouse) */
1924
- declare const injectCanHover: () => _angular_core.Signal<boolean>;
1925
- /** Inject a signal containing the viewport dimensions */
1926
- declare const injectViewportDimensions: () => _angular_core.Signal<_ethlete_core.NullableElementDimensions>;
1927
- /** Inject a signal containing the scrollbar dimensions. Dimensions will be 0 if scrollbars overlap the page contents (like on mobile). */
1928
- declare const injectScrollbarDimensions: () => _angular_core.Signal<{
1929
- width: number;
1930
- height: number;
1931
- } | null>;
2029
+ declare const unbindProps: (config: UnbindPropsOptions) => void;
1932
2030
 
1933
- /**
1934
- * Applies scrollbar size CSS variables to the documentElement (html tag) in pixels.
1935
- * - `--et-sw`: scrollbar width
1936
- * - `--et-sh`: scrollbar height
1937
- */
1938
- declare const writeScrollbarSizeToCssVariables: () => void;
1939
- /**
1940
- * Applies viewport size CSS variables to the documentElement (html tag) in pixels.
1941
- * - `--et-vw`: viewport width excluding scrollbar width
1942
- * - `--et-vh`: viewport height excluding scrollbar height
1943
- */
1944
- declare const writeViewportSizeToCssVariables: () => void;
2031
+ declare class PropsDirective {
2032
+ destroyRef: DestroyRef;
2033
+ props: _angular_core.InputSignalWithTransform<PropsInternal, Readonly<{
2034
+ attached: _angular_core.Signal<boolean>;
2035
+ attachedElements: _ethlete_core.PropsAttachedElements;
2036
+ }>>;
2037
+ propHandlers: {
2038
+ classes: {
2039
+ remove: (tokens: string) => void;
2040
+ removeMany: (tokens: string[]) => void;
2041
+ has: (tokens: string) => boolean;
2042
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
2043
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
2044
+ };
2045
+ attributes: {
2046
+ remove: (tokens: string) => void;
2047
+ removeMany: (tokens: string[]) => void;
2048
+ has: (tokens: string) => boolean;
2049
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
2050
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
2051
+ };
2052
+ styles: {
2053
+ remove: (tokens: string) => void;
2054
+ removeMany: (tokens: string[]) => void;
2055
+ has: (tokens: string) => boolean;
2056
+ push: (tokens: string, signal: _angular_core.Signal<unknown>) => void;
2057
+ pushMany: (map: Record<string, _angular_core.Signal<unknown>>) => void;
2058
+ };
2059
+ id: string;
2060
+ elementRef: _angular_core.ElementRef<HTMLElement>;
2061
+ };
2062
+ constructor();
2063
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropsDirective, never>;
2064
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PropsDirective, "[etProps]", never, { "props": { "alias": "etProps"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
2065
+ }
1945
2066
 
1946
- type CursorDragScrollDirection = 'horizontal' | 'vertical' | 'both';
1947
- type CursorDragScrollOptions = {
1948
- /** If true, cursor drag scrolling will be enabled. */
1949
- enabled?: Signal<boolean>;
1950
- /** The allowed scroll direction. */
1951
- allowedDirection?: MaybeSignal<CursorDragScrollDirection>;
2067
+ type AnyTemplateType = string | TemplateRef<unknown> | ComponentType<unknown> | TemplateRefWithContext | ComponentTypeWithInputs;
2068
+ type TemplateRefWithContext<T = Record<string, unknown> | undefined, J = unknown> = {
2069
+ template: TemplateRef<J>;
2070
+ context?: T;
2071
+ injector?: Injector;
2072
+ };
2073
+ type ComponentTypeWithInputs<T = Record<string, unknown> | undefined, J = unknown> = {
2074
+ component: ComponentType<J>;
2075
+ inputs?: T;
2076
+ injector?: Injector;
2077
+ };
2078
+ type StringTemplate = {
2079
+ type: 'string';
2080
+ value: string;
2081
+ };
2082
+ type NgTemplateTemplate = {
2083
+ type: 'template';
2084
+ value: TemplateRef<unknown>;
2085
+ context?: Record<string, unknown>;
2086
+ injector: Injector | null;
2087
+ };
2088
+ type ComponentTemplate = {
2089
+ type: 'component';
2090
+ value: ComponentType<unknown>;
2091
+ inputs?: Record<string, unknown>;
2092
+ injector: Injector | null;
1952
2093
  };
1953
- /** A function to apply cursor drag scroll behavior to an element. */
1954
- declare const useCursorDragScroll: (el: SignalElementBindingType, options?: CursorDragScrollOptions) => {
1955
- isDragging: Signal<boolean>;
1956
- currentDragAmount: Signal<{
1957
- x: number;
1958
- y: number;
1959
- }>;
2094
+ declare const templateComputed: (templateSignal: Signal<AnyTemplateType | null>) => Signal<StringTemplate | NgTemplateTemplate | ComponentTemplate | null>;
2095
+
2096
+ type ResizeEdge = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
2097
+ type ResizeMoveEvent = {
2098
+ edge: ResizeEdge;
2099
+ dx: number;
2100
+ dy: number;
1960
2101
  };
2102
+ declare class ResizeHandlesComponent {
2103
+ edges: _angular_core.InputSignal<ResizeEdge[]>;
2104
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2105
+ private gestureStart$;
2106
+ private gesture$;
2107
+ resizeStarted: _angular_core.OutputRef<ResizeEdge>;
2108
+ resizeMoved: _angular_core.OutputRef<ResizeMoveEvent>;
2109
+ resizeEnded: _angular_core.OutputRef<void>;
2110
+ isResizing: _angular_core.Signal<boolean>;
2111
+ activeEdge: _angular_core.Signal<ResizeEdge | null>;
2112
+ readonly edgeCursors: Record<ResizeEdge, string>;
2113
+ startResizeGesture(event: PointerEvent, edge: ResizeEdge): void;
2114
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResizeHandlesComponent, never>;
2115
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResizeHandlesComponent, "et-resize-handles", never, { "edges": { "alias": "edges"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "resizeStarted": "resizeStarted"; "resizeMoved": "resizeMoved"; "resizeEnded": "resizeEnded"; }, never, never, true, never>;
2116
+ }
1961
2117
 
1962
- type SetupScrollRestorationConfig = {
2118
+ declare const elementCanScroll: (element?: HTMLElement | null, direction?: "x" | "y") => boolean;
2119
+ type IsElementVisibleOptions = {
1963
2120
  /**
1964
- * The scrollable container.
1965
- * @default document.documentElement
2121
+ * The element to check if it is visible inside a container.
1966
2122
  */
1967
- scrollElement?: HTMLElement;
2123
+ element?: HTMLElement | null;
1968
2124
  /**
1969
- * A list of query params that should trigger a scroll to top.
1970
- * @default []
1971
- * @example ['page'] // will scroll to top when the page query param changes
2125
+ * The container to check if the element is visible inside.
2126
+ * If null or undefined, uses the viewport as the container.
2127
+ * @default null (viewport)
1972
2128
  */
1973
- queryParamTriggerList?: string[];
2129
+ container?: HTMLElement | null;
1974
2130
  /**
1975
- * Config for fragment scrolling.
2131
+ * The container's rect to check if the element is visible inside. Can be supplied to reduce the amount of DOM reads.
2132
+ * Only used when container is provided and not null.
2133
+ * @default container.getBoundingClientRect()
1976
2134
  */
1977
- fragment?: {
1978
- /**
1979
- * Enable fragment scrolling (scroll to element with id)
1980
- * @default false
1981
- */
1982
- enabled?: boolean;
1983
- /**
1984
- * Whether to use smooth scrolling or not.
1985
- * @default false
1986
- */
1987
- smooth?: boolean;
1988
- };
2135
+ containerRect?: DOMRect | null;
2136
+ /**
2137
+ * The element's rect. Can be supplied to reduce the amount of DOM reads.
2138
+ * @default element.getBoundingClientRect()
2139
+ */
2140
+ elementRect?: DOMRect | null;
1989
2141
  };
1990
- declare const ET_DISABLE_SCROLL_TOP: unique symbol;
1991
- declare const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE: unique symbol;
1992
- declare const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE: unique symbol;
1993
- type RouterDisableScrollTopConfig = {
2142
+ type CurrentElementVisibility = {
1994
2143
  /**
1995
- * Whether to disable scroll to top ONLY when navigating back to this route.
1996
- * @default false
2144
+ * Whether the element is visible in the inline direction.
1997
2145
  */
1998
- asReturnRoute?: boolean;
2146
+ inline: boolean;
1999
2147
  /**
2000
- * Whether to disable scroll to top when a path param changes.
2001
- * @default false
2148
+ * Whether the element is visible in the block direction.
2002
2149
  */
2003
- onPathParamChange?: boolean;
2004
- };
2005
- declare const routerDisableScrollTop: (config?: RouterDisableScrollTopConfig) => {
2006
- [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]?: boolean | undefined;
2007
- [ET_DISABLE_SCROLL_TOP]: boolean;
2008
- } | {
2009
- [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]?: boolean | undefined;
2010
- [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: boolean;
2011
- };
2012
- declare const setupScrollRestoration: (config?: SetupScrollRestorationConfig) => void;
2013
-
2014
- declare const signalIsRendered: () => _angular_core.Signal<boolean>;
2015
- declare const createIsRenderedSignal: () => {
2016
- state: _angular_core.WritableSignal<boolean>;
2017
- bind: () => _angular_core.EffectRef;
2018
- };
2019
- declare const createCanAnimateSignal: () => {
2020
- state: _angular_core.Signal<boolean>;
2021
- };
2022
-
2023
- type RouterState = {
2024
- data: Data;
2025
- pathParams: Params;
2026
- queryParams: Params;
2027
- title: string | null;
2028
- fragment: string | null;
2029
- };
2030
- declare const ET_PROPERTY_REMOVED: unique symbol;
2031
- type InjectUtilConfig = {
2032
- /** The injector to use for the injection. Must be provided if the function is not called from within a injection context. */
2033
- injector?: Injector;
2034
- };
2035
- type InjectUtilTransformConfig<In, Out> = {
2150
+ block: boolean;
2036
2151
  /**
2037
- * A transform function similar to the `transform` function in Angular input bindings.
2038
- * Can be used to transform the value before it is returned.
2039
- * E.g. transforming `"true"` to `true` for a boolean attribute.
2152
+ * The percentage of the element that is visible in the inline direction.
2040
2153
  */
2041
- transform?: (value: In) => Out;
2154
+ inlineIntersection: number;
2155
+ /**
2156
+ * The percentage of the element that is visible in the block direction.
2157
+ */
2158
+ blockIntersection: number;
2159
+ /**
2160
+ * Whether the element is intersecting the container.
2161
+ */
2162
+ isIntersecting: boolean;
2163
+ /**
2164
+ * The ratio of the element that is intersecting the container.
2165
+ */
2166
+ intersectionRatio: number;
2167
+ /**
2168
+ * The element that is being checked for visibility.
2169
+ */
2170
+ element: HTMLElement;
2171
+ /**
2172
+ * The container's rect used for the calculation.
2173
+ */
2174
+ containerRect: DOMRect;
2175
+ /**
2176
+ * The element's rect used for the calculation.
2177
+ */
2178
+ elementRect: DOMRect;
2042
2179
  };
2043
- declare const transformOrReturn: <In, Out>(src: Signal<In>, config?: InjectUtilTransformConfig<In, Out>) => Signal<Out>;
2044
- /** Inject the current router event */
2045
- declare const injectRouterEvent: () => Signal<Event$1>;
2046
- /**
2047
- * Signal that indicates whether the router has been initialized.
2048
- * The router is considered initialized once the first NavigationEnd event with an id different than -1 has been emitted.
2049
- */
2050
- declare const injectIsRouterInitialized: () => Signal<boolean>;
2051
- /**
2052
- * Inject the current url.
2053
- * The url includes query params as well as the fragment. Use `injectRoute` instead if you are not intrusted in those.
2054
- * @example "/my-page?query=1&param=true#fragment"
2055
- */
2056
- declare const injectUrl: () => Signal<string>;
2057
- /**
2058
- * Inject the current route
2059
- * @example "/my-page"
2060
- */
2061
- declare const injectRoute: () => Signal<string>;
2062
- /**
2063
- * Inject the complete router state. This includes the current route data, path params, query params, title and fragment.
2064
- */
2065
- declare const injectRouterState: () => Signal<RouterState>;
2066
- /** Inject a signal containing the current route fragment (the part after the # inside the url if present) */
2067
- declare const injectFragment: <T = string | null>(config?: InjectUtilConfig & InjectUtilTransformConfig<string | null, T>) => Signal<T>;
2068
- /** Inject all currently available query parameters as a signal */
2069
- declare const injectQueryParams: () => Signal<Params>;
2070
- /** Inject all currently available route data as a signal */
2071
- declare const injectRouteData: () => Signal<Data>;
2072
- /** Inject the current route title as a signal */
2073
- declare const injectRouteTitle: <T = string | null>(config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
2074
- /** Inject all currently available path parameters as a signal */
2075
- declare const injectPathParams: () => Signal<Params>;
2076
- type InjectQueryParamConfig<T> = InjectUtilTransformConfig<string | null, T> & {
2180
+ declare const isElementVisible: (options: IsElementVisibleOptions) => CurrentElementVisibility | null;
2181
+ declare const getElementScrollCoordinates: (options: ScrollToElementOptions) => ScrollToOptions;
2182
+ type ScrollToElementOptions = {
2077
2183
  /**
2078
- * If true, the initial value will be read from the browser's url.
2079
- * Note that this will not work with arrays or complex objects.
2184
+ * The element to scroll to.
2080
2185
  */
2081
- requireSync?: boolean;
2186
+ element?: HTMLElement | null;
2187
+ /**
2188
+ * The scroll container to scroll to the element in.
2189
+ * Must be provided - cannot scroll the viewport programmatically with this function.
2190
+ */
2191
+ container?: HTMLElement | null;
2192
+ /**
2193
+ * The direction to scroll in.
2194
+ * @default 'both'
2195
+ */
2196
+ direction?: 'inline' | 'block' | 'both';
2197
+ /**
2198
+ * The origin of the element to scroll to.
2199
+ * @default 'nearest'
2200
+ */
2201
+ origin?: 'start' | 'end' | 'center' | 'nearest';
2202
+ /**
2203
+ * The scroll behavior.
2204
+ * @default 'smooth'
2205
+ */
2206
+ behavior?: ScrollBehavior;
2207
+ /**
2208
+ * The scroll inline-margin
2209
+ * @default 0
2210
+ */
2211
+ scrollInlineMargin?: number;
2212
+ /**
2213
+ * The scroll block-margin
2214
+ * @default 0
2215
+ */
2216
+ scrollBlockMargin?: number;
2082
2217
  };
2083
- /** Inject a specific query parameter as a signal */
2084
- declare const injectQueryParam: <T = string | null>(key: string, config?: InjectQueryParamConfig<T>) => Signal<T>;
2085
- /** Inject a specific route data item as a signal */
2086
- declare const injectRouteDataItem: <T = unknown>(key: string, config?: InjectUtilTransformConfig<unknown, T>) => Signal<T>;
2087
- /** Inject a specific path parameter as a signal */
2088
- declare const injectPathParam: <T = string | null>(key: string, config?: InjectUtilTransformConfig<string | null, T>) => Signal<T>;
2089
- /**
2090
- * Inject query params that changed during navigation. Unchanged query params will be ignored.
2091
- * Removed query params will be represented by the symbol `ET_PROPERTY_REMOVED`.
2092
- */
2093
- declare const injectQueryParamChanges: () => Signal<Record<string, unknown>>;
2094
- /**
2095
- * Inject path params that changed during navigation. Unchanged path params will be ignored.
2096
- * Removed path params will be represented by the symbol `ET_PROPERTY_REMOVED`.
2097
- */
2098
- declare const injectPathParamChanges: () => Signal<Record<string, unknown>>;
2218
+ declare const scrollToElement: (options: ScrollToElementOptions) => void;
2219
+
2220
+ type ScrollSnapOrigin = 'auto' | 'start' | 'center' | 'end';
2221
+ type ScrollSnapTarget = {
2222
+ /** The element to snap to. */
2223
+ element: HTMLElement;
2224
+ /** The resolved alignment to use when scrolling to the element. */
2225
+ origin: 'start' | 'center' | 'end';
2226
+ } | null;
2227
+ declare const getScrollSnapTarget: (items: HTMLElement[], container: HTMLElement, direction: "horizontal" | "vertical", origin: ScrollSnapOrigin, margin?: number) => ScrollSnapTarget;
2228
+ type ScrollContainerTarget = {
2229
+ element: HTMLElement;
2230
+ origin: 'start' | 'end';
2231
+ } | null;
2232
+ declare const getScrollContainerTarget: (entries: IntersectionObserverEntry[], direction: "start" | "end") => ScrollContainerTarget;
2233
+ type ScrollItemTarget = {
2234
+ element: HTMLElement;
2235
+ index: number;
2236
+ origin: 'start' | 'end' | 'center';
2237
+ } | null;
2238
+ declare const getScrollItemTarget: (entries: IntersectionObserverEntry[], container: HTMLElement, direction: "start" | "end", scrollOrigin: "auto" | "center" | "start" | "end", axisDirection: "horizontal" | "vertical") => ScrollItemTarget;
2099
2239
 
2100
2240
  type HeadBinding<T> = {
2101
2241
  id: symbol;
@@ -2643,5 +2783,5 @@ declare const injectTitleStore: {
2643
2783
  };
2644
2784
  declare const applyHeadTitleBinding: (binding: MaybeSignal<string | number | null | undefined>, options?: Omit<TitlePart, "text">) => void;
2645
2785
 
2646
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, 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, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, IsArrayNotEmpty, IsEmail, jsonLd_d as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, ValidateAtLeastOneRequired, Validators, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyHeadBinding, applyHeadTitleBinding, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createProvider, createRootProvider, createRootThemeCss, createRxHostListener, createSessionMemory, createSetup, createStaticProvider, createStaticRootProvider, createSwatchCss, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUserConsentProvider, deferredSignal, deleteCookie, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, htmlToMarkdown, inferMimeType, injectAngularRootElement, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideViewportConfig, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toStringBinding, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
2647
- export type { AlternateLanguagesConfig, AlternateLink, AngularRenderer, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedOverlayComponentBase, AnimatedOverlayMountConfig, AnimatedOverlayState, AnimationEndEvent, AnyTemplateType, ArticleConfig, BindPropsOptions, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorTheme, ColorThemeType, ComponentTemplate, ComponentTypeWithInputs, ConsentHandler, ControlValueSignalOptions, CreateLoggerConfig, CreatePropsOptions, CreateProviderOptions, CreateSessionMemoryConfig, CreateUserConsentProviderOptions, CurrentElementVisibility, CursorDragScrollDirection, CursorDragScrollOptions, DragMoveEvent, ElementDimensions, ElementLastScrollDirection, ElementLastScrollDirectionType, ElementRect, ElementScrollState, ElementSignal, ElementSignalValue, ElementSize, FacebookCard, FlipAnimationConfig, HeadBinding, HostProps, InjectQueryParamConfig, InjectUtilConfig, InjectUtilTransformConfig, IntersectionObserverEntryWithDetails, IsElementVisibleOptions, LinkConfig, LinkStoreConfig, LogicalSize, MaybeObservable, MaybeSignal, MetaConfig, MetaTagConfig, NgClassType, NgTemplateTemplate, NormalizedGameResultType, NormalizedMatchParticipant, NormalizedMatchParticipants, NormalizedMatchScore, NullableElementDimensions, NumberBreakpointSignal, OnThemeColorMap, OpenGraph, OpenGraphConfig, OverlayRuntimeAnchoredPosition, OverlayRuntimeAutoFocusTarget, OverlayRuntimeCenteredPosition, OverlayRuntimeCloseEvent, OverlayRuntimeCloseSource, OverlayRuntimeComponentBase, OverlayRuntimeElements, OverlayRuntimeMountConfig, OverlayRuntimePositionStrategy, OverlayRuntimeRef, OverlayRuntimeRole, OverlayRuntimeState, PropHandlers, Props, PropsAttachedElements, PropsAttachedElementsInternal, PropsInternal, ProviderResult, ResizeEdge, ResizeMoveEvent, ResourceHintsConfig, RobotsConfig, RootProviderResult, RouterDisableScrollTopConfig, RouterState, ScrollContainerTarget, ScrollItemTarget, ScrollSnapOrigin, ScrollSnapTarget, ScrollToElementOptions, SeoConfig, SetupScrollRestorationConfig, SignalAnimatedNumberOptions, SignalElementBindingComplexType, SignalElementBindingType, SignalElementIntersectionOptions, SignalElementScrollStateOptions, SocialMediaConfig, StaticProviderResult, StringTemplate, StructuredDataConfig, StyleManager, SurfaceContextEntry, SurfaceContextTracker, SurfaceInteractionColor, SurfaceTheme, SurfaceThemeColor, SurfaceType, SyncSignalOptions, TemplateRefWithContext, ThemeColor, ThemeColorMap, ThemeHSLColor, ThemeInkColorMap, ThemeRGBColor, ThemeSwatch, TitleConfig, TitlePart, Translatable, TwitterCard, TwitterCardConfig, TypedBreakpointSignal, UnbindPropsOptions, ValidateAtLeastOneRequiredConfig, Vec2, ViewportConfig };
2786
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, 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, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, IsArrayNotEmpty, IsEmail, jsonLd_d as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, ValidateAtLeastOneRequired, Validators, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createProvider, createRootProvider, createRootThemeCss, createRxHostListener, createSessionMemory, createSetup, createStaticProvider, createStaticRootProvider, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUserConsentProvider, deferredSignal, deleteCookie, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, htmlToMarkdown, inferMimeType, injectAngularRootElement, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideViewportConfig, resetPositioningStyles, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toStringBinding, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
2787
+ export type { AlternateLanguagesConfig, AlternateLink, AngularRenderer, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedOverlayComponentBase, AnimatedOverlayMountConfig, AnimatedOverlayState, AnimationEndEvent, AnyTemplateType, ArticleConfig, BindPropsOptions, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorTheme, ColorThemeType, ComponentTemplate, ComponentTypeWithInputs, ConsentHandler, ControlValueSignalOptions, CreateLoggerConfig, CreatePropsOptions, CreateProviderOptions, CreateSessionMemoryConfig, CreateUserConsentProviderOptions, CurrentElementVisibility, CursorDragScrollDirection, CursorDragScrollOptions, DragMoveEvent, ElementDimensions, ElementLastScrollDirection, ElementLastScrollDirectionType, ElementRect, ElementScrollState, ElementSignal, ElementSignalValue, ElementSize, FacebookCard, FlipAnimationConfig, HeadBinding, HostProps, InjectQueryParamConfig, InjectUtilConfig, InjectUtilTransformConfig, IntersectionObserverEntryWithDetails, IsElementVisibleOptions, LinkConfig, LinkStoreConfig, LogicalSize, MaybeObservable, MaybeSignal, MetaConfig, MetaTagConfig, NgClassType, NgTemplateTemplate, NormalizedGameResultType, NormalizedMatchParticipant, NormalizedMatchParticipants, NormalizedMatchScore, NullableElementDimensions, NumberBreakpointSignal, OnThemeColorMap, OpenGraph, OpenGraphConfig, OverlayRuntimeAnchoredPosition, OverlayRuntimeAnimationDelegate, OverlayRuntimeAnimationDelegateEnterContext, OverlayRuntimeAnimationDelegateLeaveContext, OverlayRuntimeAutoFocusTarget, OverlayRuntimeCenteredPosition, OverlayRuntimeCloseEvent, OverlayRuntimeCloseSource, OverlayRuntimeComponentBase, OverlayRuntimeElements, OverlayRuntimeGlobalPosition, OverlayRuntimeGlobalPositionAlignment, OverlayRuntimeMountConfig, OverlayRuntimePositionStrategy, OverlayRuntimeRef, OverlayRuntimeRole, OverlayRuntimeState, PropHandlers, Props, PropsAttachedElements, PropsAttachedElementsInternal, PropsInternal, ProviderResult, ResizeEdge, ResizeMoveEvent, ResourceHintsConfig, RobotsConfig, RootProviderResult, RouterDisableScrollTopConfig, RouterState, ScrollContainerTarget, ScrollItemTarget, ScrollSnapOrigin, ScrollSnapTarget, ScrollToElementOptions, SeoConfig, SetupScrollRestorationConfig, SignalAnimatedNumberOptions, SignalElementBindingComplexType, SignalElementBindingType, SignalElementIntersectionOptions, SignalElementScrollStateOptions, SocialMediaConfig, StaticProviderResult, StringTemplate, StructuredDataConfig, StyleManager, SurfaceContextEntry, SurfaceContextTracker, SurfaceInteractionColor, SurfaceTheme, SurfaceThemeColor, SurfaceType, SwipeEndEvent, SwipeTracker, SwipeUpdateEvent, SyncSignalOptions, TemplateRefWithContext, ThemeColor, ThemeColorMap, ThemeHSLColor, ThemeInkColorMap, ThemeRGBColor, ThemeSwatch, TitleConfig, TitlePart, Translatable, TwitterCard, TwitterCardConfig, TypedBreakpointSignal, UnbindPropsOptions, ValidateAtLeastOneRequiredConfig, Vec2, ViewportConfig };