@ethlete/core 5.0.0-next.44 → 5.0.0-next.45
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 +14 -0
- package/fesm2022/ethlete-core.mjs +118 -51
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/generators/devtools-about/generator.js +113 -0
- package/generators/devtools-about/schema.json +25 -0
- package/generators/generators.json +5 -0
- package/package.json +1 -1
- package/types/ethlete-core.d.ts +26 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ethlete/core
|
|
2
2
|
|
|
3
|
+
## 5.0.0-next.45
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#3053](https://github.com/ethlete-io/ethdk/pull/3053) [`19ac925`](https://github.com/ethlete-io/ethdk/commit/19ac92556c91563cda0b9639d985639e48255075) Thanks [@github-actions](https://github.com/apps/github-actions)! - Drag and resize gestures no longer sweep a text selection across the page, and `suppressTextSelection()` is exported for gestures you drive yourself.
|
|
8
|
+
|
|
9
|
+
- [#3053](https://github.com/ethlete-io/ethdk/pull/3053) [`ebcff36`](https://github.com/ethlete-io/ethdk/commit/ebcff36d21695414d8ea93e32a88f262110f8883) Thanks [@github-actions](https://github.com/apps/github-actions)! - The overlay mount config takes an optional `document`, so an overlay anchored inside a same-origin pop-up window now opens in that window.
|
|
10
|
+
|
|
11
|
+
- [#3053](https://github.com/ethlete-io/ethdk/pull/3053) [`f426563`](https://github.com/ethlete-io/ethdk/commit/f4265630749f162d097b147da55256e8bfa056ad) Thanks [@github-actions](https://github.com/apps/github-actions)! - Query devtools: an About tab reporting the loaded `@ethlete/*` and Angular versions plus `provideQueryDevtools({ about })`, mirrored on `window.ethlete` and in the session export.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#3053](https://github.com/ethlete-io/ethdk/pull/3053) [`8459c8b`](https://github.com/ethlete-io/ethdk/commit/8459c8b38595133b97e33615ba8fa6f685dddb8a) Thanks [@github-actions](https://github.com/apps/github-actions)! - Anchored overlays no longer fly to the viewport corner when their reference element is removed while they are open - the pane keeps its last position, or closes at once with `autoCloseIfReferenceHidden`.
|
|
16
|
+
|
|
3
17
|
## 5.0.0-next.44
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, ElementRef, Directive, assertInInjectionContext, DestroyRef, TemplateRef, QueryList, RendererFactory2, RendererStyleFlags2, isSignal, DOCUMENT, signal, linkedSignal, isDevMode, computed, afterNextRender, effect, NgZone, untracked, EnvironmentInjector, runInInjectionContext, Injector, booleanAttribute, numberAttribute, PLATFORM_ID, ApplicationRef, createComponent, model, ViewContainerRef, input, output, Pipe, ViewEncapsulation, Component, afterEveryRender } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed, toSignal, toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { Subject, BehaviorSubject, debounceTime, combineLatest, map, merge, fromEvent, filter, tap, switchMap, startWith, of, defer, from, catchError, timer, takeUntil, pairwise, distinctUntilChanged, take, Observable, concatMap, EMPTY, concat, exhaustMap, share, shareReplay, isObservable, firstValueFrom, defaultIfEmpty } from 'rxjs';
|
|
4
|
+
import { Subject, BehaviorSubject, debounceTime, combineLatest, map, merge, fromEvent, filter, tap, switchMap, startWith, of, defer, from, catchError, timer, takeUntil, pairwise, distinctUntilChanged, take, Observable, concatMap, EMPTY, concat, finalize, exhaustMap, share, shareReplay, isObservable, firstValueFrom, defaultIfEmpty } from 'rxjs';
|
|
5
5
|
import { FormGroup, FormArray, FormControl } from '@angular/forms';
|
|
6
6
|
import { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';
|
|
7
7
|
import { DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
|
|
@@ -4110,6 +4110,40 @@ const createSwipeTracker = (startEvent) => {
|
|
|
4110
4110
|
return { update, end, cancel };
|
|
4111
4111
|
};
|
|
4112
4112
|
|
|
4113
|
+
const suppressions = /* @__PURE__ */ new WeakMap();
|
|
4114
|
+
/**
|
|
4115
|
+
* Stop the browser from starting a text selection, until the returned function is called.
|
|
4116
|
+
*
|
|
4117
|
+
* Pointer-driven gestures (drag, resize, scrub) otherwise sweep a selection across everything the
|
|
4118
|
+
* pointer passes over. Call this when the gesture starts and release it when the gesture ends -
|
|
4119
|
+
* including when it is cancelled, or the page stays unselectable.
|
|
4120
|
+
*
|
|
4121
|
+
* Nested or concurrent calls are counted, so the last release restores the document's original
|
|
4122
|
+
* inline `user-select`. Releasing twice is a no-op.
|
|
4123
|
+
*/
|
|
4124
|
+
const suppressTextSelection = (doc) => {
|
|
4125
|
+
const existing = suppressions.get(doc);
|
|
4126
|
+
if (existing) {
|
|
4127
|
+
existing.count++;
|
|
4128
|
+
}
|
|
4129
|
+
else {
|
|
4130
|
+
suppressions.set(doc, { count: 1, previousInlineValue: doc.documentElement.style.userSelect });
|
|
4131
|
+
doc.documentElement.style.userSelect = 'none';
|
|
4132
|
+
}
|
|
4133
|
+
let released = false;
|
|
4134
|
+
return () => {
|
|
4135
|
+
const state = suppressions.get(doc);
|
|
4136
|
+
if (released || !state)
|
|
4137
|
+
return;
|
|
4138
|
+
released = true;
|
|
4139
|
+
state.count--;
|
|
4140
|
+
if (state.count > 0)
|
|
4141
|
+
return;
|
|
4142
|
+
suppressions.delete(doc);
|
|
4143
|
+
doc.documentElement.style.userSelect = state.previousInlineValue;
|
|
4144
|
+
};
|
|
4145
|
+
};
|
|
4146
|
+
|
|
4113
4147
|
const ANGULAR_ROOT_ELEMENT_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
4114
4148
|
const appRef = inject(ApplicationRef);
|
|
4115
4149
|
const rootElement = signal(null, /* @ts-ignore */
|
|
@@ -5121,16 +5155,19 @@ const setupDragObservable = (startEvent, el, commitThreshold) => {
|
|
|
5121
5155
|
},
|
|
5122
5156
|
});
|
|
5123
5157
|
}), takeUntil(end$));
|
|
5124
|
-
return
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5158
|
+
return defer(() => {
|
|
5159
|
+
const releaseSelection = suppressTextSelection(el.ownerDocument);
|
|
5160
|
+
return concat(moves$, defer(() => {
|
|
5161
|
+
if (cancelled)
|
|
5162
|
+
return of({ type: 'cancelled' });
|
|
5163
|
+
if (!committed)
|
|
5164
|
+
return of({ type: 'tapped' });
|
|
5165
|
+
return of({
|
|
5166
|
+
type: 'end',
|
|
5167
|
+
data: { clientX: endX, clientY: endY, totalDx: endX - startX, totalDy: endY - startY },
|
|
5168
|
+
});
|
|
5169
|
+
})).pipe(finalize(releaseSelection));
|
|
5170
|
+
});
|
|
5134
5171
|
};
|
|
5135
5172
|
/**
|
|
5136
5173
|
* Observe one drag gesture, starting from a `pointerdown` on `element`.
|
|
@@ -5141,6 +5178,9 @@ const setupDragObservable = (startEvent, el, commitThreshold) => {
|
|
|
5141
5178
|
* `tapped` instead - its position is the `pointerdown` the caller already holds. The stream
|
|
5142
5179
|
* completes with the gesture, so there is nothing to unsubscribe on the happy path.
|
|
5143
5180
|
*
|
|
5181
|
+
* Text selection is suppressed on the element's document for as long as the gesture runs, so a drag
|
|
5182
|
+
* does not sweep a selection across the page.
|
|
5183
|
+
*
|
|
5144
5184
|
* A gesture the browser takes away - a `pointercancel` from a system gesture, an incoming call, the
|
|
5145
5185
|
* tab going to the background - ends on `cancelled` rather than `end` or `tapped`. Treat it as
|
|
5146
5186
|
* "revert", not "drop here": the user never let go, so there is no position they chose.
|
|
@@ -5699,7 +5739,30 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
5699
5739
|
left: '0',
|
|
5700
5740
|
width: mirrorWidthElement ? `${mirrorWidthElement.offsetWidth}px` : 'max-content',
|
|
5701
5741
|
});
|
|
5742
|
+
/**
|
|
5743
|
+
* What to do when the reference is not somewhere the pane can be positioned against: either removed
|
|
5744
|
+
* from the document, or scrolled out of a clipping ancestor. Both measure as a rect the pane must not
|
|
5745
|
+
* be moved to - a detached element reports zeros, which is the viewport's top-left corner.
|
|
5746
|
+
*/
|
|
5747
|
+
const handleUnusableReference = () => {
|
|
5748
|
+
if (strategy.autoCloseIfReferenceHidden) {
|
|
5749
|
+
// Closed before any transform is applied, so the exit animation does not run from the corner.
|
|
5750
|
+
overlayRef.close(undefined, 'reference-detached');
|
|
5751
|
+
return;
|
|
5752
|
+
}
|
|
5753
|
+
if (strategy.autoHide) {
|
|
5754
|
+
renderer.setStyle(paneElement, { visibility: 'hidden' });
|
|
5755
|
+
}
|
|
5756
|
+
};
|
|
5702
5757
|
const cleanup = autoUpdate(strategy.referenceElement, paneElement, () => {
|
|
5758
|
+
// Checked here rather than left to the `hide` middleware, which is only in the list when `autoHide`
|
|
5759
|
+
// or `autoCloseIfReferenceHidden` asked for it: a trigger destroyed while its overlay is open (a
|
|
5760
|
+
// menu item that removes the button it was opened from) would otherwise fly to the corner for the
|
|
5761
|
+
// frames the overlay takes to animate out.
|
|
5762
|
+
if (isHTMLElement(strategy.referenceElement) && !strategy.referenceElement.isConnected) {
|
|
5763
|
+
handleUnusableReference();
|
|
5764
|
+
return;
|
|
5765
|
+
}
|
|
5703
5766
|
const arrowElement = paneElement.querySelector('[et-floating-arrow]');
|
|
5704
5767
|
const middleware = [];
|
|
5705
5768
|
middleware.push(offset(strategy.offset ?? 8));
|
|
@@ -5769,18 +5832,8 @@ const createAnchoredPositionCleanup = (strategy, paneElement, overlayRef, render
|
|
|
5769
5832
|
strategy: 'absolute',
|
|
5770
5833
|
middleware,
|
|
5771
5834
|
}).then(({ x, y, placement, middlewareData }) => {
|
|
5772
|
-
// A detached reference reports a zeroed rect, so floating-ui positions the pane at the
|
|
5773
|
-
// viewport's top-left. Tear the overlay down (without animating from that bogus position)
|
|
5774
|
-
// before applying the transform when auto-close is on, and otherwise leave the pane where it
|
|
5775
|
-
// last was rather than snapping it to the corner.
|
|
5776
5835
|
if (middlewareData.hide?.referenceHidden) {
|
|
5777
|
-
|
|
5778
|
-
overlayRef.close(undefined, 'reference-detached');
|
|
5779
|
-
return;
|
|
5780
|
-
}
|
|
5781
|
-
if (strategy.autoHide) {
|
|
5782
|
-
renderer.setStyle(paneElement, { visibility: 'hidden' });
|
|
5783
|
-
}
|
|
5836
|
+
handleUnusableReference();
|
|
5784
5837
|
return;
|
|
5785
5838
|
}
|
|
5786
5839
|
renderer.setStyle(paneElement, {
|
|
@@ -5938,20 +5991,23 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
5938
5991
|
...(ngDevMode ? [{ debugName: "openEntriesState" }] : /* istanbul ignore next */ []));
|
|
5939
5992
|
const openEntries = computed(() => openEntriesState(), /* @ts-ignore */
|
|
5940
5993
|
...(ngDevMode ? [{ debugName: "openEntries" }] : /* istanbul ignore next */ []));
|
|
5941
|
-
|
|
5994
|
+
// One runtime root per document: overlays usually all mount into the app's document, but an
|
|
5995
|
+
// overlay anchored inside a same-origin pop-up window (config.document) needs a root over there.
|
|
5996
|
+
const rootElements = new Map();
|
|
5942
5997
|
// Synchronous teardown for each currently-mounted overlay, run when the runtime's injector is
|
|
5943
5998
|
// destroyed (app teardown). Registered on mount, removed once the overlay is destroyed normally.
|
|
5944
5999
|
const mountedTeardowns = new Set();
|
|
5945
|
-
const getRootElement = () => {
|
|
5946
|
-
|
|
5947
|
-
|
|
6000
|
+
const getRootElement = (targetDocument) => {
|
|
6001
|
+
const existingRoot = rootElements.get(targetDocument);
|
|
6002
|
+
if (existingRoot) {
|
|
6003
|
+
return existingRoot;
|
|
5948
6004
|
}
|
|
5949
6005
|
// A previous Angular app (e.g. the one that existed before a Storybook HMR update or story
|
|
5950
6006
|
// switch) may have left its runtime root orphaned in <body> if it was torn down mid-animation.
|
|
5951
6007
|
// Such a node keeps a backdrop/pane on screen and blocks pointer events, so clear any stragglers
|
|
5952
6008
|
// before creating ours.
|
|
5953
|
-
|
|
5954
|
-
rootElement = renderer.createElement('div');
|
|
6009
|
+
targetDocument.querySelectorAll('.et-overlay-runtime-root').forEach((el) => el.remove());
|
|
6010
|
+
const rootElement = renderer.createElement('div');
|
|
5955
6011
|
renderer.addClass(rootElement, 'et-overlay-runtime-root');
|
|
5956
6012
|
renderer.setStyle(rootElement, {
|
|
5957
6013
|
position: 'fixed',
|
|
@@ -5965,18 +6021,20 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
5965
6021
|
// rendered behind the panel that triggered it.
|
|
5966
6022
|
zIndex: '2147483003',
|
|
5967
6023
|
});
|
|
5968
|
-
renderer.appendChild(
|
|
6024
|
+
renderer.appendChild(targetDocument.body, rootElement);
|
|
6025
|
+
rootElements.set(targetDocument, rootElement);
|
|
5969
6026
|
return rootElement;
|
|
5970
6027
|
};
|
|
5971
|
-
const maybeDestroyRootElement = () => {
|
|
5972
|
-
|
|
6028
|
+
const maybeDestroyRootElement = (targetDocument) => {
|
|
6029
|
+
const rootElement = rootElements.get(targetDocument);
|
|
6030
|
+
if (!rootElement || openEntriesState().some((entry) => entry.elements.rootElement === rootElement)) {
|
|
5973
6031
|
return;
|
|
5974
6032
|
}
|
|
5975
6033
|
const parentNode = renderer.parentNode(rootElement);
|
|
5976
6034
|
if (parentNode) {
|
|
5977
6035
|
renderer.removeChild(parentNode, rootElement);
|
|
5978
6036
|
}
|
|
5979
|
-
|
|
6037
|
+
rootElements.delete(targetDocument);
|
|
5980
6038
|
};
|
|
5981
6039
|
const isTopMost = (overlayRef) => {
|
|
5982
6040
|
return openEntriesState().at(-1) === overlayRef;
|
|
@@ -5989,11 +6047,12 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
5989
6047
|
return componentRef.injector.get(ANIMATED_LIFECYCLE_TOKEN, null);
|
|
5990
6048
|
};
|
|
5991
6049
|
const mount = (config) => {
|
|
5992
|
-
const
|
|
6050
|
+
const targetDocument = config.document ?? document;
|
|
6051
|
+
const root = getRootElement(targetDocument);
|
|
5993
6052
|
const hostElement = renderer.createElement('div');
|
|
5994
6053
|
const paneElement = renderer.createElement('div');
|
|
5995
6054
|
const backdropElement = config.hasBackdrop === false ? null : renderer.createElement('div');
|
|
5996
|
-
const previousFocusedElement = isHTMLElement(
|
|
6055
|
+
const previousFocusedElement = isHTMLElement(targetDocument.activeElement) ? targetDocument.activeElement : null;
|
|
5997
6056
|
const autoFocus = config.autoFocus ?? 'first-tabbable';
|
|
5998
6057
|
renderer.addClass(hostElement, 'et-overlay-runtime-entry');
|
|
5999
6058
|
setBaseElementStyles(config, hostElement, paneElement, renderer);
|
|
@@ -6068,7 +6127,7 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6068
6127
|
renderer.removeChild(parentNode, hostElement);
|
|
6069
6128
|
}
|
|
6070
6129
|
openEntriesState.update((entries) => entries.filter((entry) => entry !== overlayRef));
|
|
6071
|
-
maybeDestroyRootElement();
|
|
6130
|
+
maybeDestroyRootElement(targetDocument);
|
|
6072
6131
|
if (config.restoreFocus !== false && previousFocusedElement?.isConnected) {
|
|
6073
6132
|
previousFocusedElement.focus({ preventScroll: true });
|
|
6074
6133
|
}
|
|
@@ -6116,8 +6175,8 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6116
6175
|
event.preventDefault();
|
|
6117
6176
|
overlayRef.close(undefined, 'escape');
|
|
6118
6177
|
};
|
|
6119
|
-
|
|
6120
|
-
cleanupFns.push(() =>
|
|
6178
|
+
targetDocument.addEventListener('keydown', onKeyDown, true);
|
|
6179
|
+
cleanupFns.push(() => targetDocument.removeEventListener('keydown', onKeyDown, true));
|
|
6121
6180
|
}
|
|
6122
6181
|
const closeOnOutsidePointer = config.closeOnOutsidePointer ?? config.modal === false;
|
|
6123
6182
|
if (closeOnOutsidePointer) {
|
|
@@ -6142,13 +6201,13 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6142
6201
|
clickEvent.preventDefault();
|
|
6143
6202
|
}
|
|
6144
6203
|
};
|
|
6145
|
-
|
|
6204
|
+
targetDocument.addEventListener('click', swallowReopenClick, { capture: true, once: true });
|
|
6146
6205
|
}
|
|
6147
6206
|
};
|
|
6148
|
-
|
|
6149
|
-
cleanupFns.push(() =>
|
|
6207
|
+
targetDocument.addEventListener('pointerdown', onPointerDown, true);
|
|
6208
|
+
cleanupFns.push(() => targetDocument.removeEventListener('pointerdown', onPointerDown, true));
|
|
6150
6209
|
}
|
|
6151
|
-
cleanupFns.push(setupFocusTrap(paneElement, overlayRef, config.modal !== false, isTopMost,
|
|
6210
|
+
cleanupFns.push(setupFocusTrap(paneElement, overlayRef, config.modal !== false, isTopMost, targetDocument));
|
|
6152
6211
|
nextFrame(() => {
|
|
6153
6212
|
if (overlayRef.state() !== 'mounting') {
|
|
6154
6213
|
animationDebugLog(`runtime ${config.id}`, `enter skipped (state "${overlayRef.state()}" before enter frame)`);
|
|
@@ -6157,7 +6216,7 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6157
6216
|
const lifecycle = getAnimatedLifecycle(componentRef);
|
|
6158
6217
|
if (!lifecycle) {
|
|
6159
6218
|
interactiveCloseReady = true;
|
|
6160
|
-
applyInitialFocus(paneElement, autoFocus,
|
|
6219
|
+
applyInitialFocus(paneElement, autoFocus, targetDocument);
|
|
6161
6220
|
overlayRef.markOpened();
|
|
6162
6221
|
return;
|
|
6163
6222
|
}
|
|
@@ -6179,7 +6238,7 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6179
6238
|
lifecycle.state$
|
|
6180
6239
|
.pipe(filter((state) => state === 'entered'), take(1))
|
|
6181
6240
|
.subscribe(() => {
|
|
6182
|
-
applyInitialFocus(paneElement, autoFocus,
|
|
6241
|
+
applyInitialFocus(paneElement, autoFocus, targetDocument);
|
|
6183
6242
|
overlayRef.markOpened();
|
|
6184
6243
|
});
|
|
6185
6244
|
});
|
|
@@ -6187,7 +6246,7 @@ const OVERLAY_RUNTIME_DEF = /* @__PURE__ */ defineRootProvider(() => {
|
|
|
6187
6246
|
};
|
|
6188
6247
|
destroyRef.onDestroy(() => {
|
|
6189
6248
|
[...mountedTeardowns].forEach((teardown) => teardown());
|
|
6190
|
-
maybeDestroyRootElement();
|
|
6249
|
+
[...rootElements.keys()].forEach((targetDocument) => maybeDestroyRootElement(targetDocument));
|
|
6191
6250
|
});
|
|
6192
6251
|
return {
|
|
6193
6252
|
mount,
|
|
@@ -7131,7 +7190,7 @@ const EDGE_CURSORS = {
|
|
|
7131
7190
|
nw: 'nwse-resize',
|
|
7132
7191
|
se: 'nwse-resize',
|
|
7133
7192
|
};
|
|
7134
|
-
const setupResizeObservable = (startEvent, edge) => {
|
|
7193
|
+
const setupResizeObservable = (startEvent, edge, doc) => {
|
|
7135
7194
|
const pointerId = startEvent.pointerId;
|
|
7136
7195
|
const startX = startEvent.clientX;
|
|
7137
7196
|
const startY = startEvent.clientY;
|
|
@@ -7139,18 +7198,22 @@ const setupResizeObservable = (startEvent, edge) => {
|
|
|
7139
7198
|
const end$ = merge(fromEvent(document, 'pointerup'), fromEvent(document, 'pointercancel')).pipe(filter((e) => e.pointerId === pointerId), take(1),
|
|
7140
7199
|
// Read below by the terminating `defer`, which only runs once this has completed the moves.
|
|
7141
7200
|
tap((e) => (cancelled = e.type === 'pointercancel')));
|
|
7142
|
-
return
|
|
7143
|
-
|
|
7144
|
-
|
|
7145
|
-
|
|
7201
|
+
return defer(() => {
|
|
7202
|
+
const releaseSelection = suppressTextSelection(doc);
|
|
7203
|
+
return concat(of({ type: 'start', edge }), fromEvent(document, 'pointermove').pipe(filter((e) => e.pointerId === pointerId), map((e) => ({
|
|
7204
|
+
type: 'move',
|
|
7205
|
+
data: { edge, dx: e.clientX - startX, dy: e.clientY - startY, clientX: e.clientX, clientY: e.clientY },
|
|
7206
|
+
})), takeUntil(end$)), defer(() => of({ type: cancelled ? 'cancelled' : 'end' }))).pipe(finalize(releaseSelection));
|
|
7207
|
+
});
|
|
7146
7208
|
};
|
|
7147
7209
|
class ResizeHandlesComponent {
|
|
7148
7210
|
constructor() {
|
|
7211
|
+
this.el = inject(ElementRef);
|
|
7149
7212
|
this.edges = input(['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'], /* @ts-ignore */
|
|
7150
7213
|
...(ngDevMode ? [{ debugName: "edges" }] : /* istanbul ignore next */ []));
|
|
7151
7214
|
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
7152
7215
|
this.gestureStart$ = new Subject();
|
|
7153
|
-
this.gesture$ = this.gestureStart$.pipe(exhaustMap(({ event, edge }) => setupResizeObservable(event, edge)), takeUntilDestroyed(), share());
|
|
7216
|
+
this.gesture$ = this.gestureStart$.pipe(exhaustMap(({ event, edge }) => setupResizeObservable(event, edge, this.el.nativeElement.ownerDocument)), takeUntilDestroyed(), share());
|
|
7154
7217
|
this.resizeStarted = outputFromObservable(this.gesture$.pipe(filter((e) => e.type === 'start'), map((e) => e.edge)));
|
|
7155
7218
|
this.resizeMoved = outputFromObservable(this.gesture$.pipe(filter((e) => e.type === 'move'), map((e) => e.data)));
|
|
7156
7219
|
this.resizeEnded = outputFromObservable(this.gesture$.pipe(filter((e) => e.type === 'end'), map(() => undefined)));
|
|
@@ -9399,9 +9462,13 @@ const createUnsavedChangesGuard = (config) => {
|
|
|
9399
9462
|
};
|
|
9400
9463
|
};
|
|
9401
9464
|
|
|
9465
|
+
// Generated from package.json by tools/scripts/generate-version.js - do not edit.
|
|
9466
|
+
/** The version of `@ethlete/core` this build was cut from. */
|
|
9467
|
+
const CORE_VERSION = '5.0.0-next.45';
|
|
9468
|
+
|
|
9402
9469
|
/**
|
|
9403
9470
|
* Generated bundle index. Do not edit.
|
|
9404
9471
|
*/
|
|
9405
9472
|
|
|
9406
|
-
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_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, 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, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, 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, 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, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, 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, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, resetPositioningStyles, resolveAppRootColorProvider, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, 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, slugify, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
9473
|
+
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_PROVIDER, CORE_VERSION, 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, 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, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RestoreScrollDirective, RuntimeError, 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, 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, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDefaultColorTheme, 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, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUnsavedChangesCoordinator, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, matchesReducedMotion, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, normalizeUnsavedChangesSource, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFaviconStore, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideNotifications, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideUnsavedChangesCoordinator, provideViewportConfig, randomId, readFromClipboard, registerAnchoredPositionMiddlewareExtras, registerAnchoredPositionSetup, resetPositioningStyles, resolveAppRootColorProvider, resolveSurfaceByElevation, round, routerDisableScrollTop, routerRestoreScroll, 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, slugify, suppressTextSelection, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toInjectFn, toProvideFn, toStringBinding, toToken, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
|
|
9407
9474
|
//# sourceMappingURL=ethlete-core.mjs.map
|