@ethlete/core 5.0.0-next.50 → 5.0.0-next.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/fesm2022/ethlete-core.mjs +278 -113
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ethlete-core.d.ts +105 -17
|
@@ -7,7 +7,7 @@ import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
|
|
|
7
7
|
import { DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
|
|
8
8
|
import { Router, NavigationEnd, NavigationSkipped, NavigationStart, NavigationError, RouterLink } from '@angular/router';
|
|
9
9
|
import { Title, Meta, DomSanitizer } from '@angular/platform-browser';
|
|
10
|
-
import {
|
|
10
|
+
import { offset, flip, shift, limitShift, computePosition, autoUpdate, hide, arrow, size } from '@floating-ui/dom';
|
|
11
11
|
|
|
12
12
|
const ANIMATION_DEBUG_STORAGE_KEY = 'et-overlay-debug';
|
|
13
13
|
let cachedEnabled = null;
|
|
@@ -42,7 +42,6 @@ class AnimatableDirective {
|
|
|
42
42
|
this.animationEndSubject$ = new Subject();
|
|
43
43
|
this.activeAnimationCount = 0;
|
|
44
44
|
this.hostActiveAnimationCount$ = new BehaviorSubject(0);
|
|
45
|
-
this.pendingTransitionIds = [];
|
|
46
45
|
this.animationStart$ = this.animationStartSubject$.asObservable().pipe(debounceTime(0));
|
|
47
46
|
this.animationEnd$ = this.animationEndSubject$.asObservable().pipe(debounceTime(0));
|
|
48
47
|
this.totalActiveAnimationCount$ = this.parent
|
|
@@ -58,9 +57,10 @@ class AnimatableDirective {
|
|
|
58
57
|
const startingNewBatch = this.activeAnimationCount === 0;
|
|
59
58
|
this.updateActiveAnimationCount(1);
|
|
60
59
|
if (startingNewBatch) {
|
|
61
|
-
this.activeBatchTransitionId = this.
|
|
60
|
+
this.activeBatchTransitionId = this.pendingTransitionId;
|
|
61
|
+
this.pendingTransitionId = undefined;
|
|
62
62
|
}
|
|
63
|
-
animationDebugLog(`animatable ${el.tagName.toLowerCase()}`, `start (count ${this.activeAnimationCount}, batch "${this.activeBatchTransitionId}", pending
|
|
63
|
+
animationDebugLog(`animatable ${el.tagName.toLowerCase()}`, `start (count ${this.activeAnimationCount}, batch "${this.activeBatchTransitionId}", pending "${this.pendingTransitionId ?? 'none'}")`);
|
|
64
64
|
if (!didEmitStart) {
|
|
65
65
|
didEmitStart = true;
|
|
66
66
|
this.animationStartSubject$.next();
|
|
@@ -91,8 +91,33 @@ class AnimatableDirective {
|
|
|
91
91
|
}), takeUntilDestroyed())
|
|
92
92
|
.subscribe();
|
|
93
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Labels the next batch of animations that starts on this element. Only the most recent id is
|
|
96
|
+
* kept: a call whose animations never start must not leave an id behind for a later batch.
|
|
97
|
+
*/
|
|
94
98
|
setTransitionId(id) {
|
|
95
|
-
this.
|
|
99
|
+
this.pendingTransitionId = id;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The animations running on this element right now, without the endless and pseudo-element ones.
|
|
103
|
+
*
|
|
104
|
+
* Reading this flushes pending style changes, so an animation a class change started in the same
|
|
105
|
+
* task is already listed here. `isAnimating$` cannot answer that: it turns true only once the
|
|
106
|
+
* browser dispatches `transitionrun`, a frame after the style change is committed.
|
|
107
|
+
*/
|
|
108
|
+
getRunningAnimations() {
|
|
109
|
+
const el = this.elementRef.nativeElement;
|
|
110
|
+
if (typeof el.getAnimations !== 'function')
|
|
111
|
+
return [];
|
|
112
|
+
return el.getAnimations().filter((animation) => {
|
|
113
|
+
if (animation.playState !== 'running')
|
|
114
|
+
return false;
|
|
115
|
+
const effect = animation.effect;
|
|
116
|
+
if (!effect || effect.pseudoElement)
|
|
117
|
+
return false;
|
|
118
|
+
// An endless animation never resolves `finished`, so awaiting one would strand the transition.
|
|
119
|
+
return effect.getComputedTiming().iterations !== Infinity;
|
|
120
|
+
});
|
|
96
121
|
}
|
|
97
122
|
updateActiveAnimationCount(delta) {
|
|
98
123
|
const newVal = this.activeAnimationCount + delta;
|
|
@@ -4696,73 +4721,39 @@ class AnimatedLifecycleDirective {
|
|
|
4696
4721
|
this.removeClass(fromClass);
|
|
4697
4722
|
this.addClass(toClass);
|
|
4698
4723
|
}
|
|
4699
|
-
}), switchMap(() => this.
|
|
4700
|
-
if (isAnimating)
|
|
4701
|
-
return of(true);
|
|
4702
|
-
// Nothing started yet on the first check - give a transition with a delay one more
|
|
4703
|
-
// frame before concluding none is coming (mirrors handleInterruptedTransition).
|
|
4704
|
-
return fromNextFrame().pipe(switchMap(() => this.animatable.isAnimating$), take(1));
|
|
4705
|
-
}), switchMap((isAnimating) => {
|
|
4706
|
-
if (!isAnimating) {
|
|
4707
|
-
// No transition ever started - e.g. `prefers-reduced-motion` collapsed every
|
|
4708
|
-
// transition-duration to 0, which per spec never fires transitionrun/transitionend.
|
|
4709
|
-
// Waiting on animationEnd$ here would hang forever, so treat it as settled.
|
|
4710
|
-
this.debugLog(`${transitionId}: completes via fallback (no transition started)`);
|
|
4711
|
-
return of(true);
|
|
4712
|
-
}
|
|
4713
|
-
return this.animatable.animationEnd$.pipe(filter(() => this.state$.value === expectedState), switchMap((e) => {
|
|
4714
|
-
if (!e.cancelled && e.transitionId === transitionId) {
|
|
4715
|
-
return of(true);
|
|
4716
|
-
}
|
|
4717
|
-
// The batch ended cancelled or under a different id - e.g. the browser cancelled and
|
|
4718
|
-
// restarted a running transition mid-flight (an anchored overlay whose ancestor pane got
|
|
4719
|
-
// destroyed) or a foreign transition on the same element finished. If nothing is
|
|
4720
|
-
// animating anymore the expected end event can never arrive, so treat the transition as
|
|
4721
|
-
// settled instead of waiting forever (mirrors the fallback in handleInterruptedTransition).
|
|
4722
|
-
return this.animatable.isAnimating$.pipe(take(1), tap((stillAnimating) => {
|
|
4723
|
-
if (!stillAnimating) {
|
|
4724
|
-
this.debugLog(`${transitionId}: completes via fallback (batch id "${e.transitionId ?? 'none'}", cancelled ${e.cancelled})`);
|
|
4725
|
-
}
|
|
4726
|
-
}), map((stillAnimating) => !stillAnimating));
|
|
4727
|
-
}));
|
|
4728
|
-
}), filter((settled) => settled && this.state$.value === expectedState), tap(onComplete), take(1), takeUntil(cancelSignal), takeUntilDestroyed(this.destroyRef))
|
|
4724
|
+
}), switchMap(() => this.whenAnimationsSettled()), tap(() => this.debugLog(`${transitionId}: settled`)), filter(() => this.state$.value === expectedState), tap(onComplete), take(1), takeUntil(cancelSignal), takeUntilDestroyed(this.destroyRef))
|
|
4729
4725
|
.subscribe();
|
|
4730
4726
|
}
|
|
4731
4727
|
handleInterruptedTransition(config) {
|
|
4732
4728
|
const { removeClasses, addClasses, expectedState, transitionId, onComplete, cancelSignal } = config;
|
|
4733
4729
|
this.removeClasses(...removeClasses);
|
|
4734
4730
|
addClasses.forEach((cls) => this.addClass(cls));
|
|
4735
|
-
|
|
4736
|
-
.pipe(
|
|
4737
|
-
if (isAnimating) {
|
|
4738
|
-
return of(true);
|
|
4739
|
-
}
|
|
4740
|
-
this.debugLog(`${transitionId}: interrupt found no running transition, re-checking next frame`);
|
|
4741
|
-
return fromNextFrame().pipe(switchMap(() => this.animatable.isAnimating$), take(1));
|
|
4742
|
-
}), take(1), switchMap((isAnimating) => {
|
|
4743
|
-
if (!isAnimating && this.state$.value === expectedState) {
|
|
4744
|
-
this.debugLog(`${transitionId}: interrupt completes INSTANTLY (no transition running after class swap)`);
|
|
4745
|
-
return of({ cancelled: false, transitionId });
|
|
4746
|
-
}
|
|
4747
|
-
this.debugLog(`${transitionId}: interrupt waiting for animation end`, { isAnimating });
|
|
4748
|
-
return this.animatable.animationEnd$.pipe(switchMap((e) => {
|
|
4749
|
-
if (e.transitionId === transitionId) {
|
|
4750
|
-
return of(e);
|
|
4751
|
-
}
|
|
4752
|
-
return this.animatable.isAnimating$.pipe(take(1), switchMap((stillAnimating) => {
|
|
4753
|
-
if (!stillAnimating && this.state$.value === expectedState) {
|
|
4754
|
-
this.debugLog(`${transitionId}: interrupt completes via foreign animation end (batch id was "${e.transitionId}")`, { stillAnimating });
|
|
4755
|
-
return of({ cancelled: false, transitionId });
|
|
4756
|
-
}
|
|
4757
|
-
return of(null);
|
|
4758
|
-
}));
|
|
4759
|
-
}), filter((e) => e !== null && e.transitionId === transitionId));
|
|
4760
|
-
}), filter((e) => this.state$.value === expectedState && !e.cancelled), tap(() => {
|
|
4761
|
-
this.debugLog(`${transitionId}: interrupt complete`);
|
|
4762
|
-
onComplete();
|
|
4763
|
-
}), take(1), takeUntil(cancelSignal), takeUntilDestroyed(this.destroyRef))
|
|
4731
|
+
this.whenAnimationsSettled()
|
|
4732
|
+
.pipe(tap(() => this.debugLog(`${transitionId}: interrupt settled`)), filter(() => this.state$.value === expectedState), tap(onComplete), take(1), takeUntil(cancelSignal), takeUntilDestroyed(this.destroyRef))
|
|
4764
4733
|
.subscribe();
|
|
4765
4734
|
}
|
|
4735
|
+
/**
|
|
4736
|
+
* Emits once every animation the class change started on this element has finished, or right away
|
|
4737
|
+
* when the change starts none - a `transition-duration` of 0 (`prefers-reduced-motion`) or a
|
|
4738
|
+
* property whose value did not change.
|
|
4739
|
+
*
|
|
4740
|
+
* `isAnimating$` cannot replace the reading here: it turns true a frame after the browser commits
|
|
4741
|
+
* the style change, so a slow commit reads as "nothing will animate" and ends the transition
|
|
4742
|
+
* before its animation starts.
|
|
4743
|
+
*/
|
|
4744
|
+
whenAnimationsSettled(isFirstRead = true) {
|
|
4745
|
+
return defer(() => {
|
|
4746
|
+
const running = this.animatable.getRunningAnimations();
|
|
4747
|
+
if (!running.length) {
|
|
4748
|
+
// Settling on the first read means nothing was ever awaited, so emitting here would reenter
|
|
4749
|
+
// the enter()/leave() call still on the stack. Every later read already runs off a promise.
|
|
4750
|
+
return isFirstRead ? fromNextFrame() : of(undefined);
|
|
4751
|
+
}
|
|
4752
|
+
// A running animation may be replaced rather than finished - the browser retargets a transition
|
|
4753
|
+
// whose end value changes - so re-read instead of settling on the first batch.
|
|
4754
|
+
return from(Promise.allSettled(running.map((animation) => animation.finished))).pipe(switchMap(() => this.whenAnimationsSettled(false)));
|
|
4755
|
+
});
|
|
4756
|
+
}
|
|
4766
4757
|
addClass(className) {
|
|
4767
4758
|
this.renderer.addClass(this.element, className);
|
|
4768
4759
|
}
|
|
@@ -6562,6 +6553,54 @@ const provideAppUpdates = (config) => [
|
|
|
6562
6553
|
provideEnvironmentInitializer(() => void injectAppUpdates()),
|
|
6563
6554
|
];
|
|
6564
6555
|
|
|
6556
|
+
/**
|
|
6557
|
+
* Attribute an element uses to declare the stacking level it paints at. Its value is the z-index of
|
|
6558
|
+
* the runtime root an overlay opened from inside it mounts into, and the level every outside-pointer
|
|
6559
|
+
* close compares a press against.
|
|
6560
|
+
*/
|
|
6561
|
+
const OVERLAY_LAYER_ATTRIBUTE = 'data-et-overlay-layer';
|
|
6562
|
+
/**
|
|
6563
|
+
* The stacking level overlays mount at when nothing above their origin declares another one. Near
|
|
6564
|
+
* int32 max, so an overlay outranks an arbitrary host application's own stacking.
|
|
6565
|
+
*/
|
|
6566
|
+
const DEFAULT_OVERLAY_LAYER = 2147483003;
|
|
6567
|
+
/**
|
|
6568
|
+
* The stacking level for an overlay opened from `element`: the one declared by the nearest ancestor
|
|
6569
|
+
* carrying `data-et-overlay-layer`, or {@link DEFAULT_OVERLAY_LAYER}.
|
|
6570
|
+
*
|
|
6571
|
+
* Put the attribute on anything that paints above the default overlay layer - a devtools panel, an
|
|
6572
|
+
* always-on-top widget - so a menu, tooltip or dialog opened inside it is not rendered behind the
|
|
6573
|
+
* thing that opened it, and so working in it does not close an overlay below it. Overlays sharing a
|
|
6574
|
+
* level share a runtime root and stack in open order.
|
|
6575
|
+
*/
|
|
6576
|
+
const resolveOverlayLayer = (element) => {
|
|
6577
|
+
const declaring = element?.closest?.(`[${OVERLAY_LAYER_ATTRIBUTE}]`);
|
|
6578
|
+
if (!declaring) {
|
|
6579
|
+
return DEFAULT_OVERLAY_LAYER;
|
|
6580
|
+
}
|
|
6581
|
+
const declared = declaring.getAttribute(OVERLAY_LAYER_ATTRIBUTE)?.trim();
|
|
6582
|
+
const layer = Number(declared);
|
|
6583
|
+
if (!declared || !Number.isFinite(layer)) {
|
|
6584
|
+
return DEFAULT_OVERLAY_LAYER;
|
|
6585
|
+
}
|
|
6586
|
+
return layer;
|
|
6587
|
+
};
|
|
6588
|
+
/**
|
|
6589
|
+
* Whether `target` sits on a stacking level above `layer` - a press inside the query devtools panel
|
|
6590
|
+
* while an application overlay is open, for example.
|
|
6591
|
+
*
|
|
6592
|
+
* Every outside-pointer close asks this first: a press on a surface that paints over an overlay is
|
|
6593
|
+
* aimed at that surface, not at the content the overlay covers, so it must not close the overlay.
|
|
6594
|
+
* The level of a press inside another overlay resolves through that overlay's runtime root, so a
|
|
6595
|
+
* menu opened from the devtools panel counts as part of the panel's level too.
|
|
6596
|
+
*/
|
|
6597
|
+
const isOnHigherOverlayLayer = (target, layer) => {
|
|
6598
|
+
if (!(target instanceof Element)) {
|
|
6599
|
+
return false;
|
|
6600
|
+
}
|
|
6601
|
+
return resolveOverlayLayer(target) > layer;
|
|
6602
|
+
};
|
|
6603
|
+
|
|
6565
6604
|
class ClickOutsideDirective {
|
|
6566
6605
|
constructor() {
|
|
6567
6606
|
this.elementRef = inject(ElementRef);
|
|
@@ -6569,10 +6608,13 @@ class ClickOutsideDirective {
|
|
|
6569
6608
|
this.didClickOutside = output({ alias: 'etClickOutside' });
|
|
6570
6609
|
fromEvent(this.document.documentElement, 'click')
|
|
6571
6610
|
.pipe(tap((event) => {
|
|
6611
|
+
const hostElement = this.elementRef.nativeElement;
|
|
6572
6612
|
const activeElement = event.target;
|
|
6573
|
-
const isInside =
|
|
6613
|
+
const isInside = hostElement.contains(activeElement);
|
|
6574
6614
|
if (isInside)
|
|
6575
6615
|
return;
|
|
6616
|
+
if (isOnHigherOverlayLayer(activeElement, resolveOverlayLayer(hostElement)))
|
|
6617
|
+
return;
|
|
6576
6618
|
this.didClickOutside.emit(event);
|
|
6577
6619
|
}), takeUntilDestroyed())
|
|
6578
6620
|
.subscribe();
|
|
@@ -7191,37 +7233,112 @@ const setupFocusTrap = (paneElement, overlayRef, enabled, isTopMost, document) =
|
|
|
7191
7233
|
};
|
|
7192
7234
|
};
|
|
7193
7235
|
|
|
7236
|
+
const NO_INSET = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
7237
|
+
const reservations = /* @__PURE__ */ new Set();
|
|
7238
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
7194
7239
|
/**
|
|
7195
|
-
*
|
|
7196
|
-
*
|
|
7240
|
+
* The custom property each edge is published as on the document root, so page chrome that overlays
|
|
7241
|
+
* cannot move for you - a sticky action bar, a floating button - can keep out of the same space:
|
|
7242
|
+
* `inset-block-end: calc(1.6rem + var(--et-viewport-inset-bottom, 0px))`.
|
|
7197
7243
|
*/
|
|
7198
|
-
const
|
|
7244
|
+
const INSET_PROPERTIES = {
|
|
7245
|
+
top: '--et-viewport-inset-top',
|
|
7246
|
+
right: '--et-viewport-inset-right',
|
|
7247
|
+
bottom: '--et-viewport-inset-bottom',
|
|
7248
|
+
left: '--et-viewport-inset-left',
|
|
7249
|
+
};
|
|
7199
7250
|
/**
|
|
7200
|
-
*
|
|
7201
|
-
*
|
|
7251
|
+
* Page content paints below every reserving surface, so - unlike an overlay - it keeps out of every
|
|
7252
|
+
* reservation, whichever level it was made on.
|
|
7202
7253
|
*/
|
|
7203
|
-
const
|
|
7254
|
+
const publishInsetProperties = () => {
|
|
7255
|
+
const root = globalThis.document?.documentElement;
|
|
7256
|
+
if (!root)
|
|
7257
|
+
return;
|
|
7258
|
+
const insets = overlayViewportInsets(Number.NEGATIVE_INFINITY);
|
|
7259
|
+
Object.entries(INSET_PROPERTIES).forEach(([edge, property]) => {
|
|
7260
|
+
if (!reservations.size) {
|
|
7261
|
+
root.style.removeProperty(property);
|
|
7262
|
+
return;
|
|
7263
|
+
}
|
|
7264
|
+
root.style.setProperty(property, `${insets[edge]}px`);
|
|
7265
|
+
});
|
|
7266
|
+
};
|
|
7267
|
+
const notify = () => {
|
|
7268
|
+
publishInsetProperties();
|
|
7269
|
+
listeners.forEach((listener) => listener());
|
|
7270
|
+
};
|
|
7204
7271
|
/**
|
|
7205
|
-
*
|
|
7206
|
-
* carrying `data-et-overlay-layer`, or {@link DEFAULT_OVERLAY_LAYER}.
|
|
7272
|
+
* Reserves an edge of the viewport, so overlays keep out of it. Returns the release callback.
|
|
7207
7273
|
*
|
|
7208
|
-
*
|
|
7209
|
-
* always-on-top widget
|
|
7210
|
-
*
|
|
7274
|
+
* Meant for a surface an application paints over its own content and above the overlay layer - a
|
|
7275
|
+
* docked devtools panel, an always-on-top widget. A centered or globally positioned overlay is laid
|
|
7276
|
+
* out inside what is left of the viewport, and an anchored one avoids the reserved edge the same way
|
|
7277
|
+
* it avoids the viewport edge. Page chrome that nothing can move for you - a sticky action bar, a
|
|
7278
|
+
* floating button - reads the published `--et-viewport-inset-*` custom properties instead.
|
|
7211
7279
|
*/
|
|
7212
|
-
const
|
|
7213
|
-
const
|
|
7214
|
-
|
|
7215
|
-
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7219
|
-
|
|
7220
|
-
|
|
7221
|
-
|
|
7222
|
-
return
|
|
7280
|
+
const reserveOverlayViewportSpace = (reservation) => {
|
|
7281
|
+
const entry = {
|
|
7282
|
+
top: reservation.top ?? 0,
|
|
7283
|
+
right: reservation.right ?? 0,
|
|
7284
|
+
bottom: reservation.bottom ?? 0,
|
|
7285
|
+
left: reservation.left ?? 0,
|
|
7286
|
+
layer: reservation.layer ?? DEFAULT_OVERLAY_LAYER + 1,
|
|
7287
|
+
};
|
|
7288
|
+
reservations.add(entry);
|
|
7289
|
+
notify();
|
|
7290
|
+
return () => {
|
|
7291
|
+
if (!reservations.delete(entry))
|
|
7292
|
+
return;
|
|
7293
|
+
notify();
|
|
7294
|
+
};
|
|
7295
|
+
};
|
|
7296
|
+
/**
|
|
7297
|
+
* What an overlay on this stacking level must keep out of: the largest reservation per edge made by a
|
|
7298
|
+
* surface that paints above it. Reservations on or below the level are ignored - they cannot cover it.
|
|
7299
|
+
*/
|
|
7300
|
+
const overlayViewportInsets = (layer = DEFAULT_OVERLAY_LAYER) => {
|
|
7301
|
+
let insets = NO_INSET;
|
|
7302
|
+
reservations.forEach((reservation) => {
|
|
7303
|
+
if (reservation.layer <= layer)
|
|
7304
|
+
return;
|
|
7305
|
+
insets = {
|
|
7306
|
+
top: Math.max(insets.top, reservation.top),
|
|
7307
|
+
right: Math.max(insets.right, reservation.right),
|
|
7308
|
+
bottom: Math.max(insets.bottom, reservation.bottom),
|
|
7309
|
+
left: Math.max(insets.left, reservation.left),
|
|
7310
|
+
};
|
|
7311
|
+
});
|
|
7312
|
+
return insets;
|
|
7313
|
+
};
|
|
7314
|
+
/** {@link overlayViewportInsets} for the stacking level `element` is rendered on. */
|
|
7315
|
+
const overlayViewportInsetsFor = (element) => overlayViewportInsets(resolveOverlayLayer(element));
|
|
7316
|
+
/**
|
|
7317
|
+
* Runs `listener` whenever a reservation is made or released, so an already positioned overlay can be
|
|
7318
|
+
* laid out again. Returns the unsubscribe callback.
|
|
7319
|
+
*
|
|
7320
|
+
* @internal
|
|
7321
|
+
*/
|
|
7322
|
+
const onOverlayViewportInsetsChange = (listener) => {
|
|
7323
|
+
listeners.add(listener);
|
|
7324
|
+
return () => {
|
|
7325
|
+
listeners.delete(listener);
|
|
7326
|
+
};
|
|
7223
7327
|
};
|
|
7224
7328
|
|
|
7329
|
+
/**
|
|
7330
|
+
* Shrinks the host box to the part of the viewport nothing above this overlay has reserved, so a
|
|
7331
|
+
* centered or globally placed pane is laid out inside it instead of under a docked panel.
|
|
7332
|
+
*/
|
|
7333
|
+
const applyViewportInsets = (hostElement, renderer) => {
|
|
7334
|
+
const insets = overlayViewportInsetsFor(hostElement);
|
|
7335
|
+
renderer.setStyle(hostElement, {
|
|
7336
|
+
top: `${insets.top}px`,
|
|
7337
|
+
right: `${insets.right}px`,
|
|
7338
|
+
bottom: `${insets.bottom}px`,
|
|
7339
|
+
left: `${insets.left}px`,
|
|
7340
|
+
});
|
|
7341
|
+
};
|
|
7225
7342
|
const setBaseElementStyles = (config, hostElement, paneElement, renderer) => {
|
|
7226
7343
|
renderer.setStyle(hostElement, {
|
|
7227
7344
|
position: 'fixed',
|
|
@@ -7253,6 +7370,7 @@ const applyCenteredPosition = (hostElement, paneElement, renderer, _config) => {
|
|
|
7253
7370
|
padding: '16px',
|
|
7254
7371
|
overflow: 'auto',
|
|
7255
7372
|
});
|
|
7373
|
+
applyViewportInsets(hostElement, renderer);
|
|
7256
7374
|
renderer.setStyle(paneElement, {
|
|
7257
7375
|
position: 'relative',
|
|
7258
7376
|
});
|
|
@@ -7267,6 +7385,7 @@ const applyGlobalPosition = (hostElement, paneElement, renderer, config) => {
|
|
|
7267
7385
|
placeItems: `${config.vertical ?? 'center'} ${config.horizontal ?? 'center'}`,
|
|
7268
7386
|
padding: config.padding ?? '0',
|
|
7269
7387
|
});
|
|
7388
|
+
applyViewportInsets(hostElement, renderer);
|
|
7270
7389
|
renderer.setStyle(paneElement, {
|
|
7271
7390
|
position: 'relative',
|
|
7272
7391
|
});
|
|
@@ -7328,10 +7447,10 @@ const setupPositioning = (config, hostElement, paneElement, overlayRef, renderer
|
|
|
7328
7447
|
}
|
|
7329
7448
|
if (strategy.kind === 'global') {
|
|
7330
7449
|
applyGlobalPosition(hostElement, paneElement, renderer, strategy);
|
|
7331
|
-
return () =>
|
|
7450
|
+
return onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));
|
|
7332
7451
|
}
|
|
7333
7452
|
applyCenteredPosition(hostElement, paneElement, renderer, strategy);
|
|
7334
|
-
return () =>
|
|
7453
|
+
return onOverlayViewportInsetsChange(() => applyViewportInsets(hostElement, renderer));
|
|
7335
7454
|
};
|
|
7336
7455
|
|
|
7337
7456
|
let middlewareExtras = null;
|
|
@@ -7403,6 +7522,27 @@ const preferredSide = (options) => ({
|
|
|
7403
7522
|
: { data: { availableSpace }, reset: { placement: toOppositeSidePlacement(placement) } };
|
|
7404
7523
|
},
|
|
7405
7524
|
});
|
|
7525
|
+
const toSideObject = (padding) => typeof padding === 'number'
|
|
7526
|
+
? { top: padding, right: padding, bottom: padding, left: padding }
|
|
7527
|
+
: {
|
|
7528
|
+
top: padding.top ?? 0,
|
|
7529
|
+
right: padding.right ?? 0,
|
|
7530
|
+
bottom: padding.bottom ?? 0,
|
|
7531
|
+
left: padding.left ?? 0,
|
|
7532
|
+
};
|
|
7533
|
+
/**
|
|
7534
|
+
* The strategy's own viewport padding plus the space reserved on each edge. Every middleware that
|
|
7535
|
+
* measures overflow gets it, so an edge a docked panel covers is as unavailable as the viewport edge.
|
|
7536
|
+
*/
|
|
7537
|
+
const paddingWithInsets = (padding, insets) => {
|
|
7538
|
+
const own = toSideObject(padding);
|
|
7539
|
+
return {
|
|
7540
|
+
top: own.top + insets.top,
|
|
7541
|
+
right: own.right + insets.right,
|
|
7542
|
+
bottom: own.bottom + insets.bottom,
|
|
7543
|
+
left: own.left + insets.left,
|
|
7544
|
+
};
|
|
7545
|
+
};
|
|
7406
7546
|
const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, renderer) => {
|
|
7407
7547
|
// mirrorWidth needs a real element to measure; virtual references fall back to max-content
|
|
7408
7548
|
const mirrorWidthElement = strategy.mirrorWidth && isHTMLElement(strategy.referenceElement) ? strategy.referenceElement : null;
|
|
@@ -7430,7 +7570,7 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
7430
7570
|
renderer.setStyle(paneElement, { visibility: 'hidden' });
|
|
7431
7571
|
}
|
|
7432
7572
|
};
|
|
7433
|
-
const
|
|
7573
|
+
const update = () => {
|
|
7434
7574
|
// Checked here rather than left to the `hide` middleware, which is only in the list when `autoHide`
|
|
7435
7575
|
// or `autoCloseIfReferenceHidden` asked for it: a trigger destroyed while its overlay is open (a
|
|
7436
7576
|
// menu item that removes the button it was opened from) would otherwise fly to the corner for the
|
|
@@ -7440,19 +7580,22 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
7440
7580
|
return;
|
|
7441
7581
|
}
|
|
7442
7582
|
const arrowElement = paneElement.querySelector('[et-floating-arrow]');
|
|
7583
|
+
const insets = overlayViewportInsetsFor(paneElement);
|
|
7584
|
+
const viewportPadding = paddingWithInsets(strategy.viewportPadding ?? 8, insets);
|
|
7443
7585
|
const middleware = [];
|
|
7444
7586
|
middleware.push(offset(strategy.offset ?? 8));
|
|
7445
7587
|
middleware.push(strategy.minAvailableSpace === undefined
|
|
7446
7588
|
? flip({
|
|
7447
7589
|
fallbackPlacements: strategy.fallbackPlacements ?? undefined,
|
|
7448
7590
|
fallbackAxisSideDirection: 'start',
|
|
7591
|
+
padding: insets,
|
|
7449
7592
|
boundary: strategy.boundary,
|
|
7450
7593
|
})
|
|
7451
7594
|
: preferredSide({
|
|
7452
7595
|
minAvailableSpace: strategy.minAvailableSpace,
|
|
7453
7596
|
// must stay the padding `size` measures with: the threshold is then compared against the
|
|
7454
7597
|
// very height the pane ends up capped to
|
|
7455
|
-
padding:
|
|
7598
|
+
padding: viewportPadding,
|
|
7456
7599
|
boundary: strategy.boundary,
|
|
7457
7600
|
}));
|
|
7458
7601
|
if (strategy.shift !== false) {
|
|
@@ -7463,7 +7606,7 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
7463
7606
|
crossAxis: strategy.minAvailableSpace === undefined &&
|
|
7464
7607
|
(typeof strategy.shift === 'object' ? (strategy.shift.crossAxis ?? false) : false),
|
|
7465
7608
|
limiter: limitShift(),
|
|
7466
|
-
padding:
|
|
7609
|
+
padding: viewportPadding,
|
|
7467
7610
|
boundary: strategy.boundary,
|
|
7468
7611
|
}));
|
|
7469
7612
|
}
|
|
@@ -7473,7 +7616,7 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
7473
7616
|
const extras = requireMiddlewareExtras('autoResize');
|
|
7474
7617
|
if (extras) {
|
|
7475
7618
|
middleware.push(extras.size({
|
|
7476
|
-
padding:
|
|
7619
|
+
padding: viewportPadding,
|
|
7477
7620
|
apply({ availableHeight, availableWidth }) {
|
|
7478
7621
|
renderer.setCssProperties(paneElement, {
|
|
7479
7622
|
'--et-overlay-max-width': `${availableWidth}px`,
|
|
@@ -7527,9 +7670,14 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
7527
7670
|
renderer.setCssProperty(arrowElement, '--et-floating-arrow-translate', `translate3d(${middlewareData.arrow.x ?? 0}px, ${middlewareData.arrow.y ?? 0}px, 0)`);
|
|
7528
7671
|
}
|
|
7529
7672
|
});
|
|
7530
|
-
}
|
|
7673
|
+
};
|
|
7674
|
+
const cleanup = autoUpdate(strategy.referenceElement, paneElement, update);
|
|
7675
|
+
// A panel docked over the page changes how much room the pane has without moving, resizing or
|
|
7676
|
+
// scrolling anything `autoUpdate` watches.
|
|
7677
|
+
const stopInsetUpdates = onOverlayViewportInsetsChange(update);
|
|
7531
7678
|
return () => {
|
|
7532
7679
|
cleanup();
|
|
7680
|
+
stopInsetUpdates();
|
|
7533
7681
|
};
|
|
7534
7682
|
};
|
|
7535
7683
|
/**
|
|
@@ -7740,7 +7888,8 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
7740
7888
|
};
|
|
7741
7889
|
const mount = (config) => {
|
|
7742
7890
|
const targetDocument = config.document ?? document;
|
|
7743
|
-
const
|
|
7891
|
+
const layer = config.zIndex ?? DEFAULT_OVERLAY_LAYER;
|
|
7892
|
+
const root = getRootElement(targetDocument, layer);
|
|
7744
7893
|
const hostElement = renderer.createElement('div');
|
|
7745
7894
|
const paneElement = renderer.createElement('div');
|
|
7746
7895
|
const backdropElement = config.hasBackdrop === false ? null : renderer.createElement('div');
|
|
@@ -7880,6 +8029,9 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
7880
8029
|
if (!isHTMLElement(target) || paneElement.contains(target)) {
|
|
7881
8030
|
return;
|
|
7882
8031
|
}
|
|
8032
|
+
if (isOnHigherOverlayLayer(target, layer)) {
|
|
8033
|
+
return;
|
|
8034
|
+
}
|
|
7883
8035
|
if (!interactiveCloseReady) {
|
|
7884
8036
|
animationDebugLog(`runtime ${config.id}`, 'outside pointer ignored (enter transition has not started yet)');
|
|
7885
8037
|
return;
|
|
@@ -9160,9 +9312,16 @@ class ProvideSurfaceDirective {
|
|
|
9160
9312
|
return theme;
|
|
9161
9313
|
}, /* @ts-ignore */
|
|
9162
9314
|
...(ngDevMode ? [{ debugName: "resolvedTheme" }] : /* istanbul ignore next */ []));
|
|
9163
|
-
|
|
9315
|
+
/**
|
|
9316
|
+
* The surface theme in effect on this element - the theme this provider resolves itself, or,
|
|
9317
|
+
* where it is left unset, the one it inherits from the closest ancestor provider. The outermost
|
|
9318
|
+
* provider resolves the app default, so the chain ends there.
|
|
9319
|
+
*/
|
|
9320
|
+
this.activeTheme = computed(() => this.resolvedTheme() ?? this.parentProvider?.activeTheme() ?? null, /* @ts-ignore */
|
|
9321
|
+
...(ngDevMode ? [{ debugName: "activeTheme" }] : /* istanbul ignore next */ []));
|
|
9322
|
+
this.elevation = computed(() => this.activeTheme()?.elevation ?? 0, /* @ts-ignore */
|
|
9164
9323
|
...(ngDevMode ? [{ debugName: "elevation" }] : /* istanbul ignore next */ []));
|
|
9165
|
-
this.surfaceType = computed(() => this.
|
|
9324
|
+
this.surfaceType = computed(() => this.activeTheme()?.type ?? null, /* @ts-ignore */
|
|
9166
9325
|
...(ngDevMode ? [{ debugName: "surfaceType" }] : /* istanbul ignore next */ []));
|
|
9167
9326
|
this.surfaceName = computed(() => {
|
|
9168
9327
|
const value = this.effectiveSurface();
|
|
@@ -9237,20 +9396,25 @@ const injectSurfaceType = () => {
|
|
|
9237
9396
|
const defaultType = injectDefaultSurfaceTheme()?.type ?? SURFACE_TYPE.DARK;
|
|
9238
9397
|
return computed(() => provider?.surfaceType() ?? defaultType);
|
|
9239
9398
|
};
|
|
9399
|
+
/**
|
|
9400
|
+
* Inject a signal containing the surface theme the current subtree renders on - the theme in
|
|
9401
|
+
* effect on the surrounding surface provider, or the app's default surface where nothing provides
|
|
9402
|
+
* one. Use it to derive an elevation relative to the surrounding surface.
|
|
9403
|
+
*
|
|
9404
|
+
* `null` where the app registers no surface themes, or registers a default per surface type -
|
|
9405
|
+
* which of those two `:root` paints is a `prefers-color-scheme` decision, so it cannot be
|
|
9406
|
+
* resolved at runtime.
|
|
9407
|
+
*/
|
|
9408
|
+
const injectParentSurface = () => {
|
|
9409
|
+
const provider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });
|
|
9410
|
+
const defaultTheme = injectDefaultSurfaceTheme();
|
|
9411
|
+
return computed(() => provider?.activeTheme() ?? defaultTheme);
|
|
9412
|
+
};
|
|
9240
9413
|
|
|
9241
9414
|
let uniqueId = 0;
|
|
9242
9415
|
const SURFACE_CONTEXT_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
9243
9416
|
const entries = signal([], /* @ts-ignore */
|
|
9244
9417
|
...(ngDevMode ? [{ debugName: "entries" }] : /* istanbul ignore next */ []));
|
|
9245
|
-
const topEntry = computed(() => {
|
|
9246
|
-
const stack = entries();
|
|
9247
|
-
return stack.length > 0 ? (stack[stack.length - 1] ?? null) : null;
|
|
9248
|
-
}, /* @ts-ignore */
|
|
9249
|
-
...(ngDevMode ? [{ debugName: "topEntry" }] : /* istanbul ignore next */ []));
|
|
9250
|
-
const topType = computed(() => topEntry()?.type ?? null, /* @ts-ignore */
|
|
9251
|
-
...(ngDevMode ? [{ debugName: "topType" }] : /* istanbul ignore next */ []));
|
|
9252
|
-
const topElevation = computed(() => topEntry()?.elevation ?? 0, /* @ts-ignore */
|
|
9253
|
-
...(ngDevMode ? [{ debugName: "topElevation" }] : /* istanbul ignore next */ []));
|
|
9254
9418
|
const register = (type, elevation, element) => {
|
|
9255
9419
|
const id = `surface-ctx-${uniqueId++}`;
|
|
9256
9420
|
const entry = { id, type, elevation, element };
|
|
@@ -9270,7 +9434,7 @@ const SURFACE_CONTEXT_TRACKER_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
9270
9434
|
}
|
|
9271
9435
|
return null;
|
|
9272
9436
|
};
|
|
9273
|
-
return {
|
|
9437
|
+
return { register, surfaceForElement };
|
|
9274
9438
|
}, { name: 'SurfaceContextTracker' });
|
|
9275
9439
|
const provideSurfaceContextTracker = /* @__PURE__ */ toProvideFn(SURFACE_CONTEXT_TRACKER_DEF);
|
|
9276
9440
|
const injectSurfaceContextTracker = /* @__PURE__ */ toInjectFn(SURFACE_CONTEXT_TRACKER_DEF);
|
|
@@ -9290,9 +9454,9 @@ class AutoSurfaceDirective {
|
|
|
9290
9454
|
}
|
|
9291
9455
|
constructor() {
|
|
9292
9456
|
this.ownSurfaceProvider = inject(ProvideSurfaceDirective);
|
|
9293
|
-
this.contextSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });
|
|
9294
9457
|
this.surfaceThemes = injectSurfaceThemes({ optional: true });
|
|
9295
9458
|
this.surfaceContextTracker = injectSurfaceContextTracker();
|
|
9459
|
+
this.parentSurface = injectParentSurface();
|
|
9296
9460
|
this.elementRef = inject(ElementRef);
|
|
9297
9461
|
/**
|
|
9298
9462
|
* Explicit surface provider to resolve the surface relative to. Falls back to the
|
|
@@ -9319,9 +9483,10 @@ class AutoSurfaceDirective {
|
|
|
9319
9483
|
// Establish a dependency on the DOM-settle tick so the non-reactive containment read below
|
|
9320
9484
|
// is re-evaluated after the element is grafted into its final overlay pane.
|
|
9321
9485
|
this.domSettleTick();
|
|
9322
|
-
const
|
|
9323
|
-
const
|
|
9324
|
-
const
|
|
9486
|
+
const explicitProvider = this.surfaceProvider();
|
|
9487
|
+
const contextTheme = explicitProvider ? explicitProvider.activeTheme() : this.parentSurface();
|
|
9488
|
+
const contextElevation = contextTheme?.elevation ?? null;
|
|
9489
|
+
const contextType = contextTheme?.type ?? null;
|
|
9325
9490
|
// An overlay's projected/portaled content keeps the injector of where it was
|
|
9326
9491
|
// *declared* (the trigger location), not the pane it renders into - so the
|
|
9327
9492
|
// injector-derived parent surface is one elevation too low. The surface-context
|
|
@@ -9843,11 +10008,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
|
|
|
9843
10008
|
|
|
9844
10009
|
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
9845
10010
|
/** The version of `@ethlete/core` this build was cut from. */
|
|
9846
|
-
const CORE_VERSION = '5.0.0-next.
|
|
10011
|
+
const CORE_VERSION = '5.0.0-next.52';
|
|
9847
10012
|
|
|
9848
10013
|
/**
|
|
9849
10014
|
* Generated bundle index. Do not edit.
|
|
9850
10015
|
*/
|
|
9851
10016
|
|
|
9852
|
-
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, ET_RESTORE_SCROLL, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, Validators, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createObjectUrlHandle, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, fetchDeployedBuildFingerprint, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectNotifications, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, resetPositioningStyles, resolveAppRootColorProvider, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
10017
|
+
export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PALETTE, COLOR_PROVIDER, CORE_VERSION, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_OVERLAY_LAYER, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, ET_RESTORE_SCROLL, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MustMatch, NOTIFICATION_CLICK_MESSAGE_TYPE, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, OVERLAY_LAYER_ATTRIBUTE, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, SURFACE_COLOR, SURFACE_PROVIDER, SURFACE_TYPE, SWIPE_VELOCITY_WINDOW_MS, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, UNSAVED_CHANGES_TITLE_MARKER, ValidateAtLeastOneRequired, Validators, anchoredOverlayPosition, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyFaviconOverlay, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHeadTitleMarker, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createObjectUrlHandle, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUnsavedChangesGuard, createUnsavedChangesTabLock, createUnsavedChangesTracker, createUserConsentProvider, deferredSignal, defineLabels, defineProvider, defineRootProvider, defineStaticProvider, defineStaticRootProvider, deleteCookie, dragGestureFrom, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, enableAnchoredOverlayPositionExtras, equal, fetchDeployedBuildFingerprint, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, holdScrollRestoration, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectAppUpdates, injectAppUpdatesConfig, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorPalette, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, injectDefaultSurfaceTheme, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFaviconStore, injectFileDownload, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsDocumentVisible, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectNotifications, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectParentSurface, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterNavigationState, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceType, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, isOnHigherOverlayLayer, isStaleBuildError, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, onOverlayViewportInsetsChange, overlayViewportInsets, overlayViewportInsetsFor, previousSignalValue, provideAppUpdates, provideAppUpdatesConfig, provideAppUpdatesInstance, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorPalette, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readBuildFingerprint, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, reserveOverlayViewportSpace, resetPositioningStyles, resolveAppRootColorProvider, resolveOverlayLayer, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalDeferredLoading, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
9853
10018
|
//# sourceMappingURL=ethlete-core.mjs.map
|