@ngutil/style 0.0.116 → 0.0.118
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/fesm2022/ngutil-style.mjs +95 -87
- package/fesm2022/ngutil-style.mjs.map +1 -1
- package/index.d.ts +16 -8
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, NgZone, Injectable, DOCUMENT } from '@angular/core';
|
|
3
|
-
import { Observable, distinctUntilChanged,
|
|
4
|
-
import { coerceElement, isPlainObject, __zone_symbol__, rawRequestAnimationFrame, rawCancelAnimationFrame, NumberWithUnit } from '@ngutil/common';
|
|
3
|
+
import { finalize, shareReplay, Observable, distinctUntilChanged, map, of, combineLatest } from 'rxjs';
|
|
4
|
+
import { coerceElement, isEqual as isEqual$1, isPlainObject, __zone_symbol__, rawRequestAnimationFrame, rawCancelAnimationFrame, NumberWithUnit } from '@ngutil/common';
|
|
5
5
|
import { isEqual, clamp } from 'es-toolkit';
|
|
6
6
|
|
|
7
7
|
class MediaWatcher {
|
|
@@ -13,7 +13,7 @@ class MediaWatcher {
|
|
|
13
13
|
watch(query) {
|
|
14
14
|
let watcher = this.#watches[query];
|
|
15
15
|
if (!watcher) {
|
|
16
|
-
watcher = this.#newWatcher(query);
|
|
16
|
+
watcher = this.#newWatcher(query).pipe(finalize(() => delete this.#watches[query]), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
17
17
|
this.#watches[query] = watcher;
|
|
18
18
|
}
|
|
19
19
|
return watcher;
|
|
@@ -30,7 +30,7 @@ class MediaWatcher {
|
|
|
30
30
|
queryWatcher.removeEventListener("change", listener);
|
|
31
31
|
delete this.#watches[query];
|
|
32
32
|
};
|
|
33
|
-
}).pipe(distinctUntilChanged()
|
|
33
|
+
}).pipe(distinctUntilChanged()));
|
|
34
34
|
}
|
|
35
35
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: MediaWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
36
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: MediaWatcher, providedIn: "root" }); }
|
|
@@ -108,7 +108,7 @@ class DimensionWatcher {
|
|
|
108
108
|
watcher = this.#createResizeWatcher(watches, element, box);
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
watches.set(element, watcher);
|
|
111
|
+
watches.set(element, watcher.pipe(finalize(() => watches.delete(element)), shareReplay({ refCount: true, bufferSize: 1 })));
|
|
112
112
|
}
|
|
113
113
|
return watcher;
|
|
114
114
|
}
|
|
@@ -141,7 +141,7 @@ class DimensionWatcher {
|
|
|
141
141
|
observer.disconnect();
|
|
142
142
|
watches.delete(el);
|
|
143
143
|
};
|
|
144
|
-
}).pipe(distinctUntilChanged(dimensionIsEq)
|
|
144
|
+
}).pipe(distinctUntilChanged(dimensionIsEq)));
|
|
145
145
|
}
|
|
146
146
|
#createScollWatcher(watches, el) {
|
|
147
147
|
const borderBox = this.watch(el, "border-box");
|
|
@@ -171,7 +171,7 @@ class DimensionWatcher {
|
|
|
171
171
|
mutation.disconnect();
|
|
172
172
|
watches.delete(el);
|
|
173
173
|
};
|
|
174
|
-
}).pipe(distinctUntilChanged(dimensionIsEq)
|
|
174
|
+
}).pipe(distinctUntilChanged(dimensionIsEq)));
|
|
175
175
|
}
|
|
176
176
|
#createWindowResizeWatcher() {
|
|
177
177
|
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
@@ -186,7 +186,7 @@ class DimensionWatcher {
|
|
|
186
186
|
return () => {
|
|
187
187
|
window.removeEventListener("resize", onResize);
|
|
188
188
|
};
|
|
189
|
-
}).pipe(distinctUntilChanged(dimensionIsEq)
|
|
189
|
+
}).pipe(distinctUntilChanged(dimensionIsEq)));
|
|
190
190
|
}
|
|
191
191
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: DimensionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
192
192
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: DimensionWatcher, providedIn: "root" }); }
|
|
@@ -202,26 +202,20 @@ function dimensionIsEq(a, b) {
|
|
|
202
202
|
class PositionWatcher {
|
|
203
203
|
#zone = inject(NgZone);
|
|
204
204
|
#document = inject(DOCUMENT);
|
|
205
|
-
#watches =
|
|
206
|
-
watch(element
|
|
205
|
+
#watches = new Map();
|
|
206
|
+
watch(element) {
|
|
207
207
|
if (element instanceof Window) {
|
|
208
208
|
return of({ x: 0, y: 0 });
|
|
209
209
|
}
|
|
210
210
|
element = coerceElement(element);
|
|
211
|
-
|
|
212
|
-
let watcher = watchers.get(element);
|
|
211
|
+
let watcher = this.#watches.get(element);
|
|
213
212
|
if (watcher == null) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
watcher = this.#createViewportWatcher(element);
|
|
219
|
-
}
|
|
220
|
-
watchers.set(element, watcher);
|
|
213
|
+
watcher = this.#createWatcher(element).pipe(finalize(() => this.#watches.delete(element)), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
214
|
+
this.#watches.set(element, watcher);
|
|
221
215
|
}
|
|
222
216
|
return watcher;
|
|
223
217
|
}
|
|
224
|
-
#
|
|
218
|
+
#createWatcher(element) {
|
|
225
219
|
return this.#zone.runOutsideAngular(() => new Observable((dest) => {
|
|
226
220
|
let rafId = undefined;
|
|
227
221
|
const emit = () => {
|
|
@@ -237,32 +231,7 @@ class PositionWatcher {
|
|
|
237
231
|
return () => {
|
|
238
232
|
rafId && cancelAnimationFrame(rafId);
|
|
239
233
|
};
|
|
240
|
-
}).pipe(distinctUntilChanged(isEqual)
|
|
241
|
-
}
|
|
242
|
-
#createViewportWatcher(element) {
|
|
243
|
-
const relative = this.#relativeElement(element);
|
|
244
|
-
if (relative == null) {
|
|
245
|
-
return this.#createDocumentWatcher(element);
|
|
246
|
-
}
|
|
247
|
-
return this.#zone.runOutsideAngular(() => {
|
|
248
|
-
const relativePosition$ = this.watch(relative);
|
|
249
|
-
const elementPosition$ = this.#createDocumentWatcher(element);
|
|
250
|
-
return combineLatest({ relative: relativePosition$, element: elementPosition$ }).pipe(map(({ relative, element }) => ({
|
|
251
|
-
x: element.x - relative.x,
|
|
252
|
-
y: element.y - relative.y
|
|
253
|
-
})), shareReplay(1));
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
#relativeElement(element) {
|
|
257
|
-
let parent = element.parentElement;
|
|
258
|
-
while (parent) {
|
|
259
|
-
const style = getComputedStyle(parent);
|
|
260
|
-
if (style.position === "sticky" || style.position === "fixed") {
|
|
261
|
-
return parent;
|
|
262
|
-
}
|
|
263
|
-
parent = parent.parentElement;
|
|
264
|
-
}
|
|
265
|
-
return undefined;
|
|
234
|
+
}).pipe(distinctUntilChanged(isEqual)));
|
|
266
235
|
}
|
|
267
236
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: PositionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
268
237
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: PositionWatcher, providedIn: "root" }); }
|
|
@@ -293,6 +262,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.13", ngImpo
|
|
|
293
262
|
args: [{ providedIn: "root" }]
|
|
294
263
|
}] });
|
|
295
264
|
|
|
265
|
+
class ScrollOffsetWatcher {
|
|
266
|
+
#zone = inject(NgZone);
|
|
267
|
+
#watches = new Map();
|
|
268
|
+
watch(element) {
|
|
269
|
+
element = coerceElement(element);
|
|
270
|
+
let watcher = this.#watches.get(element);
|
|
271
|
+
if (watcher == null) {
|
|
272
|
+
watcher = this.#createWatcher(element).pipe(finalize(() => this.#watches.delete(element)), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
273
|
+
this.#watches.set(element, watcher);
|
|
274
|
+
}
|
|
275
|
+
return watcher;
|
|
276
|
+
}
|
|
277
|
+
#createWatcher(element) {
|
|
278
|
+
if (element instanceof Window) {
|
|
279
|
+
return this.#createElementWatcher(element);
|
|
280
|
+
}
|
|
281
|
+
const watchers = [];
|
|
282
|
+
let el = coerceElement(element);
|
|
283
|
+
while (el) {
|
|
284
|
+
if (el.tagName === "BODY") {
|
|
285
|
+
watchers.push(this.#createElementWatcher(window));
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
watchers.push(this.#createElementWatcher(el));
|
|
289
|
+
el = el.parentElement;
|
|
290
|
+
}
|
|
291
|
+
return combineLatest(watchers).pipe(map(positions => positions.reduce((acc, pos) => ({ x: acc.x + pos.x, y: acc.y + pos.y }), { x: 0, y: 0 })), distinctUntilChanged(isEqual$1));
|
|
292
|
+
}
|
|
293
|
+
#createElementWatcher(element) {
|
|
294
|
+
console.log("create scroll watcher for", element);
|
|
295
|
+
return this.#zone.runOutsideAngular(() => new Observable(dst => {
|
|
296
|
+
const handler = element instanceof Window
|
|
297
|
+
? () => dst.next({ x: element.scrollX, y: element.scrollY })
|
|
298
|
+
: () => dst.next({ x: element.scrollLeft, y: element.scrollTop });
|
|
299
|
+
handler();
|
|
300
|
+
element.addEventListener("scroll", handler, { capture: true, passive: true });
|
|
301
|
+
return () => element.removeEventListener("scroll", handler, { capture: true });
|
|
302
|
+
}).pipe(distinctUntilChanged(isEqual$1)));
|
|
303
|
+
}
|
|
304
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ScrollOffsetWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
305
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ScrollOffsetWatcher, providedIn: "root" }); }
|
|
306
|
+
}
|
|
307
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.13", ngImport: i0, type: ScrollOffsetWatcher, decorators: [{
|
|
308
|
+
type: Injectable,
|
|
309
|
+
args: [{ providedIn: "root" }]
|
|
310
|
+
}] });
|
|
311
|
+
|
|
296
312
|
class NodeRemovedWatcher {
|
|
297
313
|
#zone = inject(NgZone);
|
|
298
314
|
#watches = new Map();
|
|
@@ -300,7 +316,7 @@ class NodeRemovedWatcher {
|
|
|
300
316
|
element = coerceElement(element);
|
|
301
317
|
let watcher = this.#watches.get(element);
|
|
302
318
|
if (watcher == null) {
|
|
303
|
-
watcher = this.#createWatcher(element);
|
|
319
|
+
watcher = this.#createWatcher(element).pipe(finalize(() => this.#watches.delete(element)));
|
|
304
320
|
this.#watches.set(element, watcher);
|
|
305
321
|
}
|
|
306
322
|
return watcher;
|
|
@@ -566,6 +582,9 @@ function rectContract(rect, padding) {
|
|
|
566
582
|
function rectContainsPoint(rect, point) {
|
|
567
583
|
return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height;
|
|
568
584
|
}
|
|
585
|
+
function rectIntersect(a, b) {
|
|
586
|
+
return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;
|
|
587
|
+
}
|
|
569
588
|
|
|
570
589
|
const ZERO_PADDING = sidesNormalize(0);
|
|
571
590
|
const ZERO_CONNECTION = { x: 0, y: 0 };
|
|
@@ -579,14 +598,15 @@ function floatingPosition({ dims, options }) {
|
|
|
579
598
|
};
|
|
580
599
|
const anchor = {
|
|
581
600
|
rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,
|
|
582
|
-
link: alignmentNormalize(options.anchor.link)
|
|
601
|
+
link: alignmentNormalize(options.anchor.link),
|
|
602
|
+
visible: false
|
|
583
603
|
};
|
|
584
|
-
const minWidth = dims.
|
|
585
|
-
const minHeight = dims.
|
|
586
|
-
const maxWidth = dims.
|
|
587
|
-
const maxHeight = dims.
|
|
604
|
+
const minWidth = dims.sizeConstraints?.minWidth || 0;
|
|
605
|
+
const minHeight = dims.sizeConstraints?.minHeight || 0;
|
|
606
|
+
const maxWidth = dims.sizeConstraints?.maxWidth || Infinity;
|
|
607
|
+
const maxHeight = dims.sizeConstraints?.maxHeight || Infinity;
|
|
588
608
|
const content = {
|
|
589
|
-
rect: { x: 0, y: 0
|
|
609
|
+
rect: { ...dims.content, x: 0, y: 0 },
|
|
590
610
|
link: alignmentNormalize(options.content.link),
|
|
591
611
|
constrained: {
|
|
592
612
|
width: clamp(dims.content.width, minWidth, maxWidth),
|
|
@@ -598,7 +618,7 @@ function floatingPosition({ dims, options }) {
|
|
|
598
618
|
anchor,
|
|
599
619
|
content,
|
|
600
620
|
connection: ZERO_CONNECTION,
|
|
601
|
-
|
|
621
|
+
sizeConstraints: dims.sizeConstraints,
|
|
602
622
|
direction: "down" /* FloatingPositionDirection.Down */
|
|
603
623
|
};
|
|
604
624
|
const area = placementArea(position, anchor.link, content.link);
|
|
@@ -610,72 +630,56 @@ function floatingPosition({ dims, options }) {
|
|
|
610
630
|
applyAlts(position, "V" /* FloatingPositionAltAxis.Vertical */, options.verticalAlt);
|
|
611
631
|
}
|
|
612
632
|
position.direction = floatingPositionDirection(position);
|
|
633
|
+
position.anchor.visible = rectIntersect(position.placement.rectWithPadding, position.anchor.rect);
|
|
613
634
|
return position;
|
|
614
635
|
}
|
|
615
636
|
function placementArea(pos, anchorLink, contentLink) {
|
|
616
637
|
const connection = rectOrigin(pos.anchor.rect, anchorLink);
|
|
617
638
|
let { x, y } = connection;
|
|
618
639
|
const placement = pos.placement.rect;
|
|
640
|
+
const constraint = pos.placement.rectWithPadding;
|
|
619
641
|
const placementPad = pos.placement.padding;
|
|
620
|
-
let width =
|
|
621
|
-
let height = 0;
|
|
642
|
+
let { width, height } = placement;
|
|
622
643
|
switch (contentLink.horizontal) {
|
|
623
644
|
case "left":
|
|
624
645
|
case "start":
|
|
625
|
-
width = placement.width - x;
|
|
626
646
|
break;
|
|
627
647
|
case "center":
|
|
628
648
|
if (anchorLink.horizontal === "center") {
|
|
629
|
-
width = placement.width;
|
|
630
649
|
x = placement.x;
|
|
631
650
|
}
|
|
632
651
|
else {
|
|
633
|
-
|
|
634
|
-
const rightSize = placement.width - x - placementPad.right.value;
|
|
635
|
-
const mw = Math.max(0, Math.min(leftSize, rightSize));
|
|
636
|
-
width = mw * 2;
|
|
637
|
-
x -= mw;
|
|
652
|
+
x -= pos.content.constrained.width / 2;
|
|
638
653
|
}
|
|
639
654
|
break;
|
|
640
655
|
case "end":
|
|
641
656
|
case "right":
|
|
642
|
-
width = x -
|
|
643
|
-
|
|
657
|
+
width = x - placementPad.left.value;
|
|
658
|
+
if (anchorLink.horizontal === "center") {
|
|
659
|
+
x = placement.x;
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
x -= pos.content.constrained.width;
|
|
663
|
+
}
|
|
644
664
|
break;
|
|
645
665
|
}
|
|
646
666
|
switch (contentLink.vertical) {
|
|
647
667
|
case "top":
|
|
648
|
-
height = placement.height - y;
|
|
649
668
|
break;
|
|
650
669
|
case "middle":
|
|
651
670
|
if (anchorLink.vertical === "middle") {
|
|
652
|
-
height = placement.height;
|
|
653
671
|
y = placement.y;
|
|
654
672
|
}
|
|
655
673
|
else {
|
|
656
|
-
|
|
657
|
-
const bottomSize = placement.height - y - placementPad.bottom.value;
|
|
658
|
-
const mh = Math.max(0, Math.min(topSize, bottomSize));
|
|
659
|
-
height = mh * 2;
|
|
660
|
-
y -= mh;
|
|
674
|
+
y -= pos.content.constrained.height / 2;
|
|
661
675
|
}
|
|
662
676
|
break;
|
|
663
677
|
case "bottom":
|
|
664
|
-
height = y -
|
|
678
|
+
height = y - placementPad.top.value;
|
|
665
679
|
y = placement.y;
|
|
666
680
|
break;
|
|
667
681
|
}
|
|
668
|
-
const
|
|
669
|
-
const newX = Math.max(x, constraint.x);
|
|
670
|
-
const newY = Math.max(y, constraint.y);
|
|
671
|
-
const diffX = newX - x;
|
|
672
|
-
const diffY = newY - y;
|
|
673
|
-
const area = {
|
|
674
|
-
x: newX,
|
|
675
|
-
y: newY,
|
|
676
|
-
width: Math.min(newX + width - diffX, constraint.x + constraint.width) - newX,
|
|
677
|
-
height: Math.min(newY + height - diffY, constraint.y + constraint.height) - newY
|
|
678
|
-
};
|
|
682
|
+
const area = rectConstraint({ x, y, width, height }, constraint);
|
|
679
683
|
return { area, contentLink, anchorLink, connection };
|
|
680
684
|
}
|
|
681
685
|
function setPlacement(position, { area, anchorLink, contentLink, connection }) {
|
|
@@ -778,11 +782,15 @@ function oppositeLink(axis, link) {
|
|
|
778
782
|
return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] };
|
|
779
783
|
}
|
|
780
784
|
}
|
|
781
|
-
function floatingPositionToStyle(pos) {
|
|
785
|
+
function floatingPositionToStyle(pos, display = "inline-flex") {
|
|
786
|
+
if (pos.anchor.visible === false) {
|
|
787
|
+
return { "display": "none", "pointerEvents": "none" };
|
|
788
|
+
}
|
|
782
789
|
const contentRect = pos.content.rect;
|
|
783
790
|
const placementRect = pos.placement.rect;
|
|
784
791
|
// const { width: maxWidth, height: maxHeight } = pos.placement.area
|
|
785
|
-
const style = {};
|
|
792
|
+
const style = { display: display, pointerEvents: "" };
|
|
793
|
+
// TODO: translate3d
|
|
786
794
|
if (pos.content.link.horizontal === "right") {
|
|
787
795
|
style["right"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`;
|
|
788
796
|
style["left"] = "auto";
|
|
@@ -842,5 +850,5 @@ function floatingPositionDirection(pos) {
|
|
|
842
850
|
* Generated bundle index. Do not edit.
|
|
843
851
|
*/
|
|
844
852
|
|
|
845
|
-
export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher, NodeRemovedWatcher, PositionWatcher, RectWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionDirection, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContainsPoint, rectContract, rectExpand, rectMoveOrigin, rectOrigin, sidesNormalize };
|
|
853
|
+
export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher, NodeRemovedWatcher, PositionWatcher, RectWatcher, ScrollOffsetWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionDirection, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContainsPoint, rectContract, rectExpand, rectIntersect, rectMoveOrigin, rectOrigin, sidesNormalize };
|
|
846
854
|
//# sourceMappingURL=ngutil-style.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/services/position-watcher.service.ts","../../../../packages/style/src/services/rect-watcher.service.ts","../../../../packages/style/src/services/node-removed-watcher.service.ts","../../../../packages/style/src/util/alignment.ts","../../../../packages/style/src/util/in-animation.ts","../../../../packages/style/src/util/sides.ts","../../../../packages/style/src/util/rect.ts","../../../../packages/style/src/util/floating-position.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query)\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged(), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","\nimport { inject, Injectable, NgZone, DOCUMENT } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement | Window, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension> {\n element = coerceElement(element)\n\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n let watcher = watches.get(element)\n if (watcher == null) {\n if (element instanceof Window) {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, this.#document.documentElement)\n } else {\n watcher = this.#createWindowResizeWatcher()\n }\n } else {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, element)\n } else {\n watcher = this.#createResizeWatcher(watches, element, box)\n }\n }\n\n watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n if (!this.#document.contains(el)) {\n return\n }\n\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createWindowResizeWatcher(): Observable<Dimension> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const onResize = () => {\n sub.next({\n width: window.innerWidth,\n height: window.innerHeight\n })\n }\n onResize()\n window.addEventListener(\"resize\", onResize)\n return () => {\n window.removeEventListener(\"resize\", onResize)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","\nimport { inject, Injectable, NgZone, DOCUMENT } from \"@angular/core\"\n\nimport { combineLatest, distinctUntilChanged, map, Observable, of, shareReplay, Subscriber } from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Position } from \"../util/rect\"\n\nexport type WatchPosition = \"document\" | \"viewport\"\nexport type Watches = Map<HTMLElement | Window, Observable<Position>>\n\n@Injectable({ providedIn: \"root\" })\nexport class PositionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: Record<WatchPosition, Watches> = {} as any\n\n watch(element: ElementInput | Window, position: WatchPosition = \"viewport\"): Observable<Position> {\n if (element instanceof Window) {\n return of({ x: 0, y: 0 })\n }\n\n element = coerceElement(element)\n\n const watchers = this.#watches[position] ??= new Map()\n\n let watcher = watchers.get(element)\n if (watcher == null) {\n if (position === \"document\") {\n watcher = this.#createDocumentWatcher(element)\n } else {\n watcher = this.#createViewportWatcher(element)\n }\n watchers.set(element, watcher)\n }\n\n return watcher\n }\n\n #createDocumentWatcher(element: HTMLElement): Observable<Position> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((dest: Subscriber<Position>) => {\n let rafId: number | undefined = undefined\n const emit = () => {\n if (this.#document.contains(element)) {\n const {x, y} = element.getBoundingClientRect()\n dest.next({x, y})\n }\n\n if (!dest.closed) {\n rafId = requestAnimationFrame(emit)\n }\n }\n emit()\n return () => {\n rafId && cancelAnimationFrame(rafId)\n }\n }).pipe(distinctUntilChanged(isEqual), shareReplay(1))\n )\n }\n\n #createViewportWatcher(element: HTMLElement): Observable<Position> {\n const relative = this.#relativeElement(element)\n if (relative == null) {\n return this.#createDocumentWatcher(element)\n }\n\n return this.#zone.runOutsideAngular(() => {\n const relativePosition$ = this.watch(relative)\n const elementPosition$ = this.#createDocumentWatcher(element)\n\n return combineLatest({ relative: relativePosition$, element: elementPosition$ }).pipe(\n map(({ relative, element }) => ({\n x: element.x - relative.x,\n y: element.y - relative.y\n })),\n shareReplay(1)\n )\n })\n }\n\n #relativeElement(element: HTMLElement): HTMLElement | undefined {\n let parent = element.parentElement\n while (parent) {\n const style = getComputedStyle(parent)\n if (style.position === \"sticky\" || style.position === \"fixed\") {\n return parent\n }\n parent = parent.parentElement\n }\n return undefined\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { combineLatest, map, Observable, Subscriber } from \"rxjs\"\n\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { Rect } from \"../util/rect\"\nimport { DimensionWatcher, WatchBox } from \"./dimension-watcher.service\"\nimport { PositionWatcher } from \"./position-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class RectWatcher {\n readonly #dimWatcher = inject(DimensionWatcher)\n readonly #posWatcher = inject(PositionWatcher)\n\n watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect> {\n return new Observable((dest: Subscriber<Rect>) =>\n combineLatest({\n dim: this.#dimWatcher.watch(element, watchBox),\n pos: this.#posWatcher.watch(element)\n })\n .pipe(\n map(({ dim, pos }) => {\n return { ...dim, ...pos }\n })\n )\n .subscribe(dest)\n )\n }\n}\n","import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { Observable } from \"rxjs\"\n\nimport { coerceElement, type ElementInput } from \"@ngutil/common\"\n\n@Injectable({ providedIn: \"root\" })\nexport class NodeRemovedWatcher {\n readonly #zone = inject(NgZone)\n #watches = new Map<HTMLElement, Observable<void>>()\n\n watch(element: ElementInput): Observable<void> {\n element = coerceElement(element)\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element)\n this.#watches.set(element, watcher)\n }\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<void> {\n return this.#zone.runOutsideAngular(\n () =>\n new Observable<void>(dst => {\n this.#zone.runOutsideAngular(() => {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (Array.from(mutation.removedNodes).includes(element)) {\n dst.next()\n dst.complete()\n return\n }\n }\n })\n\n observer.observe(element.parentNode!, { childList: true })\n\n return () => {\n observer.disconnect()\n }\n })\n })\n )\n }\n}\n","import { isPlainObject } from \"@ngutil/common\"\n\nconst HORIZONTAL = [\"start\", \"left\", \"center\", \"end\", \"right\"] as const\nexport type AlignHorizontal = (typeof HORIZONTAL)[number]\n\nexport const AlignHorizontalOpposite: Record<AlignHorizontal, AlignHorizontal> = {\n start: \"end\",\n left: \"right\",\n center: \"center\",\n end: \"start\",\n right: \"left\"\n}\n\nconst VERTICAL = [\"top\", \"middle\", \"bottom\"] as const\nexport type AlignVertical = (typeof VERTICAL)[number]\n\nexport const AlignVerticalOpposite: Record<AlignVertical, AlignVertical> = {\n top: \"bottom\",\n middle: \"middle\",\n bottom: \"top\"\n}\n\nexport type AlignmentInput =\n | `${AlignHorizontal} ${AlignVertical}`\n | `${AlignVertical} ${AlignHorizontal}`\n | AlignVertical\n | AlignHorizontal\n | Alignment\n\nexport interface Alignment {\n horizontal: AlignHorizontal\n vertical: AlignVertical\n}\n\nconst DEFAULT: Alignment = { horizontal: \"center\", vertical: \"middle\" }\n\nexport function alignmentNormalize(value?: AlignmentInput): Alignment {\n if (value == null) {\n return DEFAULT\n }\n\n if (isPlainObject(value)) {\n if (\"horizontal\" in value && \"vertical\" in value) {\n return value\n } else {\n throw new Error(`Invalid alignment: ${value}`)\n }\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`Invalid alignment: ${value}`)\n }\n\n const entries = Array.from(new Set(value.split(/\\s+/g))) as [string, string]\n if (entries.length > 2) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || \"center\"\n const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || \"middle\"\n\n return { horizontal, vertical }\n}\n\nconst HorizontalOrigin: Record<AlignHorizontal, \"left\" | \"center\" | \"right\"> = {\n start: \"left\",\n left: \"left\",\n center: \"center\",\n right: \"right\",\n end: \"right\"\n}\n\nconst VerticalOrigin: Record<AlignVertical, \"top\" | \"center\" | \"bottom\"> = {\n top: \"top\",\n middle: \"center\",\n bottom: \"bottom\"\n}\n\nexport function alignmentToTransformOrigin(alignment: Alignment): string {\n return `${HorizontalOrigin[alignment.horizontal] || \"center\"} ${VerticalOrigin[alignment.vertical] || \"center\"}`\n}\n","import { combineLatest, distinctUntilChanged, map, Observable, Subscriber } from \"rxjs\"\n\nimport { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from \"@ngutil/common\"\n\nconst addEventListener = __zone_symbol__(\"addEventListener\")\nconst removeEventListener = __zone_symbol__(\"removeEventListener\")\n\nexport function inAnimation<T extends HTMLElement>(el: T, animations?: string[]) {\n return _in(\n el,\n \"animationName\",\n \"animationstart\",\n \"animationiteration\",\n \"animationend\",\n \"animationcancel\",\n animations\n )\n}\n\nexport function inTransition<T extends HTMLElement>(el: T, properties?: string[]) {\n return _in(el, \"propertyName\", \"transitionstart\", \"transitionrun\", \"transitionend\", \"transitioncancel\", properties)\n}\n\nexport function isAnimating<T extends HTMLElement>(el: T) {\n return combineLatest([inAnimation(el), inTransition(el)]).pipe(\n map(values => !!(values[0] || values[1])),\n distinctUntilChanged()\n )\n}\n\nfunction _in<T extends HTMLElement>(\n el: T,\n keyName: string,\n beginName: string,\n doingName: string,\n endName: string,\n cancelName: string,\n keys?: string[]\n) {\n return new Observable((dest: Subscriber<string[] | null>) => {\n const state: { [key: string]: number } = {}\n\n const start = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (key in state) {\n state[key]++\n } else {\n state[key] = 1\n }\n dest.next(Object.keys(state))\n }\n\n const doing = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (!(key in state)) {\n state[key] = 1\n dest.next(Object.keys(state))\n }\n }\n\n const end = (event: any) => {\n if (event[keyName] in state) {\n const key = event[keyName]\n state[key]--\n if (state[key] <= 0) {\n delete state[key]\n }\n }\n\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n }\n\n el[addEventListener](beginName, start)\n el[addEventListener](doingName, doing)\n el[addEventListener](endName, end)\n el[addEventListener](cancelName, end)\n\n const raf = rawRequestAnimationFrame(() => {\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n })\n\n return () => {\n rawCancelAnimationFrame(raf)\n el[removeEventListener](beginName, start)\n el[removeEventListener](doingName, doing)\n el[removeEventListener](endName, end)\n el[removeEventListener](cancelName, end)\n }\n }).pipe(distinctUntilChanged())\n}\n","import { isPlainObject, NumberWithUnit } from \"@ngutil/common\"\n\nexport interface Sides {\n top: NumberWithUnit\n right: NumberWithUnit\n bottom: NumberWithUnit\n left: NumberWithUnit\n}\n\nexport type SidesUnit = \"px\" | \"%\"\nexport type SidesNumber = `${number}${SidesUnit}` | number\nexport type SidesInputObj = { top?: SidesNumber; right?: SidesNumber; bottom?: SidesNumber; left?: SidesNumber }\nexport type SidesInput =\n | Sides\n | SidesNumber\n | SidesInputObj\n | `${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`\n\nexport function sidesNormalize(value: SidesInput): Sides {\n if (isPlainObject(value)) {\n return {\n top: NumberWithUnit.coerce(value.top || 0, \"px\"),\n right: NumberWithUnit.coerce(value.right || 0, \"px\"),\n bottom: NumberWithUnit.coerce(value.bottom || 0, \"px\"),\n left: NumberWithUnit.coerce(value.left || 0, \"px\")\n }\n } else if (typeof value === \"number\") {\n return sidesNormalize(`${value}px`)\n } else if (typeof value !== \"string\") {\n throw new Error(`Invalid sides: ${value}`)\n }\n\n const entries = value.split(/\\s+/g).map(v => NumberWithUnit.coerce(v, \"px\")) as [NumberWithUnit]\n\n if (entries.length < 0 || entries.length > 4) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n return compose(...entries)\n}\n\nfunction compose(\n top: NumberWithUnit,\n right: NumberWithUnit = top,\n bottom: NumberWithUnit = top,\n left: NumberWithUnit = right\n): Sides {\n return { top, right, bottom, left }\n}\n","import { AlignHorizontal, AlignmentInput, alignmentNormalize, AlignVertical } from \"./alignment\"\nimport { SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface Dimension {\n width: number\n height: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexport interface Rect extends Dimension, Position {}\n\nexport function rectOrigin(rect: Rect, origin: AlignmentInput): Position {\n const originNorm = alignmentNormalize(origin)\n return { x: rectHorizontalOrigin(rect, originNorm.horizontal), y: rectVerticalOrigin(rect, originNorm.vertical) }\n}\n\nfunction rectHorizontalOrigin(rect: Rect, horizontal: AlignHorizontal): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return rect.x\n\n case \"center\":\n return rect.x + rect.width / 2\n\n case \"end\":\n case \"right\":\n return rect.x + rect.width\n }\n}\n\nfunction rectVerticalOrigin(rect: Rect, vertical: AlignVertical): number {\n switch (vertical) {\n case \"top\":\n return rect.y\n\n case \"middle\":\n return rect.y + rect.height / 2\n\n case \"bottom\":\n return rect.y + rect.height\n }\n}\n\nexport function rectMoveOrigin(rect: Rect | Dimension, origin: AlignmentInput, position: Position): Rect {\n const originNorm = alignmentNormalize(origin)\n return {\n ...rect,\n x: rectMoveHorizontal(rect, originNorm.horizontal, position),\n y: rectMoveVertical(rect, originNorm.vertical, position)\n }\n}\n\nfunction rectMoveHorizontal(rect: Dimension, horizontal: AlignHorizontal, position: Position): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return position.x\n\n case \"center\":\n return position.x - rect.width / 2\n\n case \"end\":\n case \"right\":\n return position.x - rect.width\n }\n}\n\nfunction rectMoveVertical(rect: Dimension, vertical: AlignVertical, position: Position): number {\n switch (vertical) {\n case \"top\":\n return position.y\n\n case \"middle\":\n return position.y - rect.height / 2\n\n case \"bottom\":\n return position.y - rect.height\n }\n}\n\nexport function rectConstraint(rect: Rect, constraint: Rect): Rect {\n const x = Math.max(rect.x, constraint.x)\n const y = Math.max(rect.y, constraint.y)\n return {\n x: x,\n y: y,\n width: Math.min(x + rect.width, constraint.x + constraint.width) - x,\n height: Math.min(y + rect.height, constraint.y + constraint.height) - y\n }\n}\nexport function rectExpand(rect: Rect, margin: SidesInput): Rect {\n const marginNorm = sidesNormalize(margin)\n return {\n x: rect.x - marginNorm.left.value,\n y: rect.y - marginNorm.top.value,\n width: rect.width + marginNorm.left.value + marginNorm.right.value,\n height: rect.height + marginNorm.top.value + marginNorm.bottom.value\n }\n}\n\nexport function rectContract(rect: Rect, padding: SidesInput): Rect {\n const normMargin = sidesNormalize(padding)\n return {\n x: rect.x + normMargin.left.value,\n y: rect.y + normMargin.top.value,\n width: rect.width - normMargin.left.value - normMargin.right.value,\n height: rect.height - normMargin.top.value - normMargin.bottom.value\n }\n}\n\nexport function rectContainsPoint(rect: Rect, point: Position): boolean {\n return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height\n}\n","import { clamp } from \"es-toolkit\"\n\nimport {\n AlignHorizontalOpposite,\n Alignment,\n AlignmentInput,\n alignmentNormalize,\n AlignVerticalOpposite\n} from \"./alignment\"\n// import type { FloatingPositionOptionsNormalized } from \"./position\"\nimport { Dimension, Position, Rect, rectContract, rectExpand, rectMoveOrigin, rectOrigin } from \"./rect\"\nimport { Sides, SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface FloatingPositionInput {\n dims: FloatingPositionDims\n options: FloatingPositionOptions\n}\n\nexport interface FloatingPositionDims {\n content: Dimension\n anchor: Rect\n placement: Rect\n constraints?: FloatingPositionConstraintsInput\n}\n\nexport interface FloatingPositionOptions {\n content: FloatingPositionContentOptions\n anchor: FloatingPositionAnchorOptions\n placement: FloatingPositionPlacementOptions\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\nexport interface FloatingPositionContentOptions {\n link: AlignmentInput\n}\n\nexport interface FloatingPositionConstraintsInput {\n minWidth?: number\n maxWidth?: number\n minHeight?: number\n maxHeight?: number\n}\n\nexport interface FloatingPositionAnchorOptions {\n link: AlignmentInput\n margin?: SidesInput\n}\n\nexport interface FloatingPositionPlacementOptions {\n padding?: SidesInput\n}\n\nexport interface FloatingPosition {\n content: {\n rect: Position & Readonly<Dimension>\n link: Alignment\n readonly constrained: Readonly<Dimension>\n }\n anchor: {\n readonly rect: Readonly<Rect>\n link: Alignment\n }\n placement: {\n readonly rect: Readonly<Rect>\n readonly padding: Readonly<Sides>\n readonly rectWithPadding: Readonly<Rect>\n area: Readonly<Rect>\n }\n connection: Position\n direction: FloatingPositionDirection\n constraints?: FloatingPositionConstraintsInput\n}\n\ninterface PlacementArea {\n anchorLink: Alignment\n contentLink: Alignment\n area: FloatingPosition[\"placement\"][\"area\"]\n connection: Position\n}\n\ntype FloatingPositionAltConst =\n | \"none\"\n | \"flip\"\n | \"shift\"\n | \"flip-shift\"\n | \"greatest\"\n | \"greatest-shift\"\n | \"smallest\"\n | \"smallest-shift\"\nexport type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc\nexport type FloatingPositionAltFunc = (pos: FloatingPosition, axis: FloatingPositionAltAxis) => void\nexport type FloatingPositionAltNorm = Array<FloatingPositionAltFunc>\n\nexport const enum FloatingPositionAltAxis {\n Horizontal = \"H\",\n Vertical = \"V\"\n}\n\nconst ZERO_PADDING = sidesNormalize(0)\nconst ZERO_CONNECTION = { x: 0, y: 0 }\n\nexport function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition {\n const padding = options.placement.padding ? sidesNormalize(options.placement.padding) : ZERO_PADDING\n const placement: FloatingPosition[\"placement\"] = {\n rect: dims.placement,\n padding: padding,\n rectWithPadding: rectContract(dims.placement, padding),\n area: { ...dims.placement }\n }\n\n const anchor: FloatingPosition[\"anchor\"] = {\n rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,\n link: alignmentNormalize(options.anchor.link)\n }\n\n const minWidth = dims.constraints?.minWidth || 0\n const minHeight = dims.constraints?.minHeight || 0\n const maxWidth = dims.constraints?.maxWidth || Infinity\n const maxHeight = dims.constraints?.maxHeight || Infinity\n const content: FloatingPosition[\"content\"] = {\n rect: { x: 0, y: 0, ...dims.content },\n link: alignmentNormalize(options.content.link),\n constrained: {\n width: clamp(dims.content.width, minWidth, maxWidth),\n height: clamp(dims.content.height, minHeight, maxHeight)\n }\n }\n\n const position = {\n placement,\n anchor,\n content,\n connection: ZERO_CONNECTION,\n constrains: dims.constraints,\n direction: FloatingPositionDirection.Down\n }\n const area = placementArea(position, anchor.link, content.link)\n setPlacement(position, area)\n\n if (options.horizontalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Horizontal, options.horizontalAlt)\n }\n\n if (options.verticalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Vertical, options.verticalAlt)\n }\n\n position.direction = floatingPositionDirection(position)\n return position\n}\n\nfunction placementArea(pos: FloatingPosition, anchorLink: Alignment, contentLink: Alignment): PlacementArea {\n const connection = rectOrigin(pos.anchor.rect, anchorLink)\n let { x, y } = connection\n const placement = pos.placement.rect\n const placementPad = pos.placement.padding\n let width = 0\n let height = 0\n\n switch (contentLink.horizontal) {\n case \"left\":\n case \"start\":\n width = placement.width - x\n break\n case \"center\":\n if (anchorLink.horizontal === \"center\") {\n width = placement.width\n x = placement.x\n } else {\n const leftSize = x - placementPad.left.value\n const rightSize = placement.width - x - placementPad.right.value\n const mw = Math.max(0, Math.min(leftSize, rightSize))\n width = mw * 2\n x -= mw\n }\n break\n case \"end\":\n case \"right\":\n width = x - placement.x\n x = placement.x\n break\n }\n\n switch (contentLink.vertical) {\n case \"top\":\n height = placement.height - y\n break\n case \"middle\":\n if (anchorLink.vertical === \"middle\") {\n height = placement.height\n y = placement.y\n } else {\n const topSize = y - placementPad.top.value\n const bottomSize = placement.height - y - placementPad.bottom.value\n const mh = Math.max(0, Math.min(topSize, bottomSize))\n height = mh * 2\n y -= mh\n }\n\n break\n case \"bottom\":\n height = y - placement.y\n y = placement.y\n break\n }\n\n const constraint = pos.placement.rectWithPadding\n const newX = Math.max(x, constraint.x)\n const newY = Math.max(y, constraint.y)\n const diffX = newX - x\n const diffY = newY - y\n\n const area = {\n x: newX,\n y: newY,\n width: Math.min(newX + width - diffX, constraint.x + constraint.width) - newX,\n height: Math.min(newY + height - diffY, constraint.y + constraint.height) - newY\n }\n\n return { area, contentLink, anchorLink, connection }\n}\n\nfunction setPlacement(position: FloatingPosition, { area, anchorLink, contentLink, connection }: PlacementArea): void {\n position.placement.area = area\n position.anchor.link = anchorLink\n position.content.link = contentLink\n\n const plannedContentRect = rectMoveOrigin(position.content.rect, contentLink, connection)\n position.connection = adjustConnection(area, plannedContentRect, connection)\n position.content.rect = rectMoveOrigin(position.content.rect, contentLink, connection)\n}\n\nfunction adjustConnection(\n placement: FloatingPosition[\"placement\"][\"area\"],\n content: FloatingPosition[\"content\"][\"rect\"],\n connection: FloatingPosition[\"connection\"]\n) {\n const x = Math.max(placement.x, content.x)\n const y = Math.max(placement.y, content.y)\n const leftDiff = x - content.x\n const topDiff = y - content.y\n const widthDiff = placement.x + placement.width - (x + content.width)\n const heightDiff = placement.y + placement.height - (y + content.height)\n\n const result = { ...connection }\n connection.x += leftDiff\n connection.y += topDiff\n\n if (widthDiff < 0) {\n connection.x += widthDiff\n }\n\n if (heightDiff < 0) {\n connection.y += heightDiff\n }\n return result\n}\n\nfunction applyAlts(pos: FloatingPosition, axis: FloatingPositionAltAxis, alts: FloatingPositionAltInput) {\n const norm = positionAltNormalize(alts)\n for (const alt of norm) {\n alt(pos, axis)\n }\n}\n\nexport function positionAltNormalize(\n input: FloatingPositionAltInput | FloatingPositionAltNorm\n): FloatingPositionAltNorm {\n if (Array.isArray(input)) {\n return input\n } else if (typeof input === \"function\") {\n return [input]\n } else if (typeof input === \"string\") {\n return altStringToFns(input)\n } else {\n throw new Error(`Invalid alt position: ${input}`)\n }\n}\n\nfunction altStringToFns(input: FloatingPositionAltConst): FloatingPositionAltNorm {\n switch (input) {\n case \"none\":\n return [none]\n case \"flip\":\n return [flip]\n case \"shift\":\n return [shift]\n case \"flip-shift\":\n return [flip, shift]\n case \"greatest\":\n return [greatest]\n case \"greatest-shift\":\n return [greatest, shift]\n case \"smallest\":\n return [smallest]\n case \"smallest-shift\":\n return [smallest, shift]\n }\n}\n\nfunction none(pos: FloatingPosition, axis: FloatingPositionAltAxis): void { }\n\nfunction flip(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n if (pos.placement.area[wh] >= pos.content.constrained[wh]) {\n return\n }\n return greatest(pos, axis)\n}\n\nfunction shift(pos: FloatingPosition, axis: FloatingPositionAltAxis): void { }\n\nfunction greatest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a >= b)\n}\n\nfunction smallest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a <= b)\n}\n\nfunction _bySize(pos: FloatingPosition, axis: FloatingPositionAltAxis, cmp: (a: number, b: number) => boolean): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n\n const current = pos.placement.area[wh]\n const anchorLink = oppositeLink(axis, pos.anchor.link)\n const contentLink = oppositeLink(axis, pos.content.link)\n const oppositePlacement = placementArea(pos, anchorLink, contentLink)\n\n if (cmp(current, oppositePlacement.area[wh])) {\n return\n }\n\n setPlacement(pos, oppositePlacement)\n}\n\nfunction oppositeLink(axis: FloatingPositionAltAxis, link: Alignment): Alignment {\n if (axis === FloatingPositionAltAxis.Horizontal) {\n return { horizontal: AlignHorizontalOpposite[link.horizontal], vertical: link.vertical }\n } else {\n return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] }\n }\n}\n\nexport function floatingPositionToStyle(pos: Readonly<FloatingPosition>): Partial<CSSStyleDeclaration> {\n const contentRect = pos.content.rect\n const placementRect = pos.placement.rect\n // const { width: maxWidth, height: maxHeight } = pos.placement.area\n const style: Partial<CSSStyleDeclaration> = {}\n\n if (pos.content.link.horizontal === \"right\") {\n style[\"right\"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`\n style[\"left\"] = \"auto\"\n } else {\n style[\"left\"] = `${contentRect.x}px`\n style[\"right\"] = \"auto\"\n }\n\n if (pos.content.link.vertical === \"bottom\") {\n style[\"bottom\"] = `${placementRect.height - (contentRect.y + contentRect.height)}px`\n style[\"top\"] = \"auto\"\n } else {\n style[\"top\"] = `${contentRect.y}px`\n style[\"bottom\"] = \"auto\"\n }\n\n // style[\"maxWidth\"] = `${maxWidth}px`\n // style[\"maxHeight\"] = `${maxHeight}px`\n\n return style\n}\n\nexport const enum FloatingPositionDirection {\n Up = \"up\",\n Down = \"down\",\n Left = \"left\",\n Right = \"right\",\n Center = \"center\"\n}\n\nexport function floatingPositionDirection(pos: Readonly<FloatingPosition>): FloatingPositionDirection {\n const { x: ax, y: ay, width: aw, height: ah } = pos.anchor.rect\n const { x: bx, y: by, width: bw, height: bh } = pos.content.rect\n const contentLink = pos.content.link\n const anchorLink = pos.anchor.link\n\n if (anchorLink.horizontal === \"center\" && anchorLink.vertical === \"middle\") {\n if (contentLink.horizontal === \"center\" && contentLink.vertical === \"middle\") {\n return FloatingPositionDirection.Center\n }\n\n const cx = pos.connection.x\n if (cx <= bx) {\n return FloatingPositionDirection.Right\n } else if (cx >= bx + bw) {\n return FloatingPositionDirection.Left\n }\n }\n\n const widthOverlapPx = Math.min(ax + aw, bx + bw) - Math.max(ax, bx)\n const widthOverlapPercent = widthOverlapPx / Math.max(aw, bw)\n const heightOverlapPx = Math.min(ay + ah, by + bh) - Math.max(ay, by)\n const heightOverlapPercent = heightOverlapPx / Math.max(ah, bh)\n\n if (widthOverlapPercent >= heightOverlapPercent) {\n if (contentLink.vertical === \"bottom\") {\n return FloatingPositionDirection.Up\n }\n\n return FloatingPositionDirection.Down\n } else {\n if (contentLink.horizontal === \"right\") {\n return FloatingPositionDirection.Left\n }\n\n return FloatingPositionDirection.Right\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/services/position-watcher.service.ts","../../../../packages/style/src/services/rect-watcher.service.ts","../../../../packages/style/src/services/scroll-offset-watcher.service.ts","../../../../packages/style/src/services/node-removed-watcher.service.ts","../../../../packages/style/src/util/alignment.ts","../../../../packages/style/src/util/in-animation.ts","../../../../packages/style/src/util/sides.ts","../../../../packages/style/src/util/rect.ts","../../../../packages/style/src/util/floating-position.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, finalize, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query).pipe(\n finalize(() => delete this.#watches[query]),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged())\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","\nimport { inject, Injectable, NgZone, DOCUMENT } from \"@angular/core\"\n\nimport { distinctUntilChanged, finalize, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement | Window, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension> {\n element = coerceElement(element)\n\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n let watcher = watches.get(element)\n if (watcher == null) {\n if (element instanceof Window) {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, this.#document.documentElement)\n } else {\n watcher = this.#createWindowResizeWatcher()\n }\n } else {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, element)\n } else {\n watcher = this.#createResizeWatcher(watches, element, box)\n }\n }\n\n watches.set(element, watcher.pipe(\n finalize(() => watches.delete(element)),\n shareReplay({ refCount: true, bufferSize: 1 })\n ))\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n if (!this.#document.contains(el)) {\n return\n }\n\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq))\n )\n }\n\n #createWindowResizeWatcher(): Observable<Dimension> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const onResize = () => {\n sub.next({\n width: window.innerWidth,\n height: window.innerHeight\n })\n }\n onResize()\n window.addEventListener(\"resize\", onResize)\n return () => {\n window.removeEventListener(\"resize\", onResize)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","\nimport { inject, Injectable, NgZone, DOCUMENT } from \"@angular/core\"\n\nimport { combineLatest, distinctUntilChanged, finalize, map, Observable, of, shareReplay, Subscriber } from \"rxjs\"\n\nimport { isEqual } from \"es-toolkit\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Position } from \"../util/rect\"\nimport { ScrollOffsetWatcher } from \"./scroll-offset-watcher.service\"\n\nexport type Watches = Map<HTMLElement | Window, Observable<Position>>\n\n@Injectable({ providedIn: \"root\" })\nexport class PositionWatcher {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n readonly #watches: Watches = new Map()\n\n watch(element: ElementInput | Window): Observable<Position> {\n if (element instanceof Window) {\n return of({ x: 0, y: 0 })\n }\n\n element = coerceElement(element)\n\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element).pipe(\n finalize(() => this.#watches.delete(element)),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n this.#watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<Position> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((dest: Subscriber<Position>) => {\n let rafId: number | undefined = undefined\n const emit = () => {\n if (this.#document.contains(element)) {\n const {x, y} = element.getBoundingClientRect()\n dest.next({x, y})\n }\n\n if (!dest.closed) {\n rafId = requestAnimationFrame(emit)\n }\n }\n emit()\n return () => {\n rafId && cancelAnimationFrame(rafId)\n }\n }).pipe(distinctUntilChanged(isEqual))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { combineLatest, map, Observable, Subscriber } from \"rxjs\"\n\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { Rect } from \"../util/rect\"\nimport { DimensionWatcher, WatchBox } from \"./dimension-watcher.service\"\nimport { PositionWatcher } from \"./position-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class RectWatcher {\n readonly #dimWatcher = inject(DimensionWatcher)\n readonly #posWatcher = inject(PositionWatcher)\n\n watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect> {\n return new Observable((dest: Subscriber<Rect>) =>\n combineLatest({\n dim: this.#dimWatcher.watch(element, watchBox),\n pos: this.#posWatcher.watch(element)\n })\n .pipe(\n map(({ dim, pos }) => {\n return { ...dim, ...pos }\n })\n )\n .subscribe(dest)\n )\n }\n}\n","import { DOCUMENT, inject, Inject, Injectable, NgZone } from \"@angular/core\"\nimport type { Position } from \"../util/rect\"\nimport { combineLatest, distinctUntilChanged, finalize, map, Observable, shareReplay, tap } from \"rxjs\"\n\nimport { coerceElement, ElementInput, isEqual } from \"@ngutil/common\"\n\nexport type Watches = Map<HTMLElement | Window, Observable<Position>>\n\n@Injectable({providedIn: \"root\"})\nexport class ScrollOffsetWatcher {\n readonly #zone = inject(NgZone)\n readonly #watches: Watches = new Map()\n\n watch(element: ElementInput | Window, ): Observable<Position> {\n element = coerceElement(element)\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element).pipe(\n finalize(() => this.#watches.delete(element)),\n shareReplay({refCount: true, bufferSize: 1})\n )\n this.#watches.set(element, watcher)\n }\n return watcher\n }\n\n #createWatcher(element: HTMLElement | Window): Observable<Position> {\n if (element instanceof Window) {\n return this.#createElementWatcher(element)\n }\n\n const watchers = []\n let el: HTMLElement | null = coerceElement(element)\n while (el) {\n if (el.tagName === \"BODY\") {\n watchers.push(this.#createElementWatcher(window))\n break\n }\n watchers.push(this.#createElementWatcher(el))\n el = el.parentElement\n }\n\n return combineLatest(watchers).pipe(\n map(positions => positions.reduce((acc, pos) => ({x: acc.x + pos.x, y: acc.y + pos.y}), {x: 0, y: 0})),\n distinctUntilChanged(isEqual)\n )\n }\n\n #createElementWatcher(element: HTMLElement | Window): Observable<Position> {\n console.log(\"create scroll watcher for\", element)\n return this.#zone.runOutsideAngular(() =>\n new Observable<Position>(dst => {\n const handler = element instanceof Window\n ? () => dst.next({x: element.scrollX, y: element.scrollY})\n : () => dst.next({x: element.scrollLeft, y: element.scrollTop})\n handler()\n element.addEventListener(\"scroll\", handler, {capture: true, passive: true})\n return () => element.removeEventListener(\"scroll\", handler, {capture: true})\n\n }).pipe(distinctUntilChanged(isEqual))\n )\n }\n}\n","import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { finalize, Observable } from \"rxjs\"\n\nimport { coerceElement, type ElementInput } from \"@ngutil/common\"\n\n@Injectable({ providedIn: \"root\" })\nexport class NodeRemovedWatcher {\n readonly #zone = inject(NgZone)\n #watches = new Map<HTMLElement, Observable<void>>()\n\n watch(element: ElementInput): Observable<void> {\n element = coerceElement(element)\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element).pipe(\n finalize(() => this.#watches.delete(element))\n )\n this.#watches.set(element, watcher)\n }\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<void> {\n return this.#zone.runOutsideAngular(\n () =>\n new Observable<void>(dst => {\n this.#zone.runOutsideAngular(() => {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (Array.from(mutation.removedNodes).includes(element)) {\n dst.next()\n dst.complete()\n return\n }\n }\n })\n\n observer.observe(element.parentNode!, { childList: true })\n\n return () => {\n observer.disconnect()\n }\n })\n })\n )\n }\n}\n","import { isPlainObject } from \"@ngutil/common\"\n\nconst HORIZONTAL = [\"start\", \"left\", \"center\", \"end\", \"right\"] as const\nexport type AlignHorizontal = (typeof HORIZONTAL)[number]\n\nexport const AlignHorizontalOpposite: Record<AlignHorizontal, AlignHorizontal> = {\n start: \"end\",\n left: \"right\",\n center: \"center\",\n end: \"start\",\n right: \"left\"\n}\n\nconst VERTICAL = [\"top\", \"middle\", \"bottom\"] as const\nexport type AlignVertical = (typeof VERTICAL)[number]\n\nexport const AlignVerticalOpposite: Record<AlignVertical, AlignVertical> = {\n top: \"bottom\",\n middle: \"middle\",\n bottom: \"top\"\n}\n\nexport type AlignmentInput =\n | `${AlignHorizontal} ${AlignVertical}`\n | `${AlignVertical} ${AlignHorizontal}`\n | AlignVertical\n | AlignHorizontal\n | Alignment\n\nexport interface Alignment {\n horizontal: AlignHorizontal\n vertical: AlignVertical\n}\n\nconst DEFAULT: Alignment = { horizontal: \"center\", vertical: \"middle\" }\n\nexport function alignmentNormalize(value?: AlignmentInput): Alignment {\n if (value == null) {\n return DEFAULT\n }\n\n if (isPlainObject(value)) {\n if (\"horizontal\" in value && \"vertical\" in value) {\n return value\n } else {\n throw new Error(`Invalid alignment: ${value}`)\n }\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`Invalid alignment: ${value}`)\n }\n\n const entries = Array.from(new Set(value.split(/\\s+/g))) as [string, string]\n if (entries.length > 2) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || \"center\"\n const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || \"middle\"\n\n return { horizontal, vertical }\n}\n\nconst HorizontalOrigin: Record<AlignHorizontal, \"left\" | \"center\" | \"right\"> = {\n start: \"left\",\n left: \"left\",\n center: \"center\",\n right: \"right\",\n end: \"right\"\n}\n\nconst VerticalOrigin: Record<AlignVertical, \"top\" | \"center\" | \"bottom\"> = {\n top: \"top\",\n middle: \"center\",\n bottom: \"bottom\"\n}\n\nexport function alignmentToTransformOrigin(alignment: Alignment): string {\n return `${HorizontalOrigin[alignment.horizontal] || \"center\"} ${VerticalOrigin[alignment.vertical] || \"center\"}`\n}\n","import { combineLatest, distinctUntilChanged, map, Observable, Subscriber } from \"rxjs\"\n\nimport { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from \"@ngutil/common\"\n\nconst addEventListener = __zone_symbol__(\"addEventListener\")\nconst removeEventListener = __zone_symbol__(\"removeEventListener\")\n\nexport function inAnimation<T extends HTMLElement>(el: T, animations?: string[]) {\n return _in(\n el,\n \"animationName\",\n \"animationstart\",\n \"animationiteration\",\n \"animationend\",\n \"animationcancel\",\n animations\n )\n}\n\nexport function inTransition<T extends HTMLElement>(el: T, properties?: string[]) {\n return _in(el, \"propertyName\", \"transitionstart\", \"transitionrun\", \"transitionend\", \"transitioncancel\", properties)\n}\n\nexport function isAnimating<T extends HTMLElement>(el: T) {\n return combineLatest([inAnimation(el), inTransition(el)]).pipe(\n map(values => !!(values[0] || values[1])),\n distinctUntilChanged()\n )\n}\n\nfunction _in<T extends HTMLElement>(\n el: T,\n keyName: string,\n beginName: string,\n doingName: string,\n endName: string,\n cancelName: string,\n keys?: string[]\n) {\n return new Observable((dest: Subscriber<string[] | null>) => {\n const state: { [key: string]: number } = {}\n\n const start = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (key in state) {\n state[key]++\n } else {\n state[key] = 1\n }\n dest.next(Object.keys(state))\n }\n\n const doing = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (!(key in state)) {\n state[key] = 1\n dest.next(Object.keys(state))\n }\n }\n\n const end = (event: any) => {\n if (event[keyName] in state) {\n const key = event[keyName]\n state[key]--\n if (state[key] <= 0) {\n delete state[key]\n }\n }\n\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n }\n\n el[addEventListener](beginName, start)\n el[addEventListener](doingName, doing)\n el[addEventListener](endName, end)\n el[addEventListener](cancelName, end)\n\n const raf = rawRequestAnimationFrame(() => {\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n })\n\n return () => {\n rawCancelAnimationFrame(raf)\n el[removeEventListener](beginName, start)\n el[removeEventListener](doingName, doing)\n el[removeEventListener](endName, end)\n el[removeEventListener](cancelName, end)\n }\n }).pipe(distinctUntilChanged())\n}\n","import { isPlainObject, NumberWithUnit } from \"@ngutil/common\"\n\nexport interface Sides {\n top: NumberWithUnit\n right: NumberWithUnit\n bottom: NumberWithUnit\n left: NumberWithUnit\n}\n\nexport type SidesUnit = \"px\" | \"%\"\nexport type SidesNumber = `${number}${SidesUnit}` | number\nexport type SidesInputObj = { top?: SidesNumber; right?: SidesNumber; bottom?: SidesNumber; left?: SidesNumber }\nexport type SidesInput =\n | Sides\n | SidesNumber\n | SidesInputObj\n | `${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`\n\nexport function sidesNormalize(value: SidesInput): Sides {\n if (isPlainObject(value)) {\n return {\n top: NumberWithUnit.coerce(value.top || 0, \"px\"),\n right: NumberWithUnit.coerce(value.right || 0, \"px\"),\n bottom: NumberWithUnit.coerce(value.bottom || 0, \"px\"),\n left: NumberWithUnit.coerce(value.left || 0, \"px\")\n }\n } else if (typeof value === \"number\") {\n return sidesNormalize(`${value}px`)\n } else if (typeof value !== \"string\") {\n throw new Error(`Invalid sides: ${value}`)\n }\n\n const entries = value.split(/\\s+/g).map(v => NumberWithUnit.coerce(v, \"px\")) as [NumberWithUnit]\n\n if (entries.length < 0 || entries.length > 4) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n return compose(...entries)\n}\n\nfunction compose(\n top: NumberWithUnit,\n right: NumberWithUnit = top,\n bottom: NumberWithUnit = top,\n left: NumberWithUnit = right\n): Sides {\n return { top, right, bottom, left }\n}\n","import { AlignHorizontal, AlignmentInput, alignmentNormalize, AlignVertical } from \"./alignment\"\nimport { SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface Dimension {\n width: number\n height: number\n}\n\nexport interface Position {\n x: number\n y: number\n}\n\nexport interface Rect extends Dimension, Position {}\n\nexport function rectOrigin(rect: Rect, origin: AlignmentInput): Position {\n const originNorm = alignmentNormalize(origin)\n return { x: rectHorizontalOrigin(rect, originNorm.horizontal), y: rectVerticalOrigin(rect, originNorm.vertical) }\n}\n\nfunction rectHorizontalOrigin(rect: Rect, horizontal: AlignHorizontal): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return rect.x\n\n case \"center\":\n return rect.x + rect.width / 2\n\n case \"end\":\n case \"right\":\n return rect.x + rect.width\n }\n}\n\nfunction rectVerticalOrigin(rect: Rect, vertical: AlignVertical): number {\n switch (vertical) {\n case \"top\":\n return rect.y\n\n case \"middle\":\n return rect.y + rect.height / 2\n\n case \"bottom\":\n return rect.y + rect.height\n }\n}\n\nexport function rectMoveOrigin(rect: Rect | Dimension, origin: AlignmentInput, position: Position): Rect {\n const originNorm = alignmentNormalize(origin)\n return {\n ...rect,\n x: rectMoveHorizontal(rect, originNorm.horizontal, position),\n y: rectMoveVertical(rect, originNorm.vertical, position)\n }\n}\n\nfunction rectMoveHorizontal(rect: Dimension, horizontal: AlignHorizontal, position: Position): number {\n switch (horizontal) {\n case \"start\":\n case \"left\":\n return position.x\n\n case \"center\":\n return position.x - rect.width / 2\n\n case \"end\":\n case \"right\":\n return position.x - rect.width\n }\n}\n\nfunction rectMoveVertical(rect: Dimension, vertical: AlignVertical, position: Position): number {\n switch (vertical) {\n case \"top\":\n return position.y\n\n case \"middle\":\n return position.y - rect.height / 2\n\n case \"bottom\":\n return position.y - rect.height\n }\n}\n\nexport function rectConstraint(rect: Rect, constraint: Rect): Rect {\n const x = Math.max(rect.x, constraint.x)\n const y = Math.max(rect.y, constraint.y)\n return {\n x: x,\n y: y,\n width: Math.min(x + rect.width, constraint.x + constraint.width) - x,\n height: Math.min(y + rect.height, constraint.y + constraint.height) - y\n }\n}\nexport function rectExpand(rect: Rect, margin: SidesInput): Rect {\n const marginNorm = sidesNormalize(margin)\n return {\n x: rect.x - marginNorm.left.value,\n y: rect.y - marginNorm.top.value,\n width: rect.width + marginNorm.left.value + marginNorm.right.value,\n height: rect.height + marginNorm.top.value + marginNorm.bottom.value\n }\n}\n\nexport function rectContract(rect: Rect, padding: SidesInput): Rect {\n const normMargin = sidesNormalize(padding)\n return {\n x: rect.x + normMargin.left.value,\n y: rect.y + normMargin.top.value,\n width: rect.width - normMargin.left.value - normMargin.right.value,\n height: rect.height - normMargin.top.value - normMargin.bottom.value\n }\n}\n\nexport function rectContainsPoint(rect: Rect, point: Position): boolean {\n return point.x >= rect.x && point.x < rect.x + rect.width && point.y >= rect.y && point.y < rect.y + rect.height\n}\n\nexport function rectIntersect(a: Rect, b: Rect): boolean {\n return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y\n}\n\n","import { clamp } from \"es-toolkit\"\n\nimport {\n AlignHorizontalOpposite,\n Alignment,\n AlignmentInput,\n alignmentNormalize,\n AlignVerticalOpposite\n} from \"./alignment\"\n// import type { FloatingPositionOptionsNormalized } from \"./position\"\nimport { Dimension, Position, Rect, rectConstraint, rectContract, rectExpand, rectIntersect, rectMoveOrigin, rectOrigin } from \"./rect\"\nimport { Sides, SidesInput, sidesNormalize } from \"./sides\"\n\nexport interface FloatingPositionInput {\n dims: FloatingPositionDims\n options: FloatingPositionOptions\n}\n\nexport interface FloatingPositionDims {\n content: Dimension\n anchor: Rect\n placement: Rect\n sizeConstraints?: FloatingSizeConstraintsInput\n}\n\nexport interface FloatingPositionOptions {\n content: FloatingPositionContentOptions\n anchor: FloatingPositionAnchorOptions\n placement: FloatingPositionPlacementOptions\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\nexport interface FloatingPositionContentOptions {\n link: AlignmentInput\n}\n\nexport interface FloatingSizeConstraintsInput {\n minWidth?: number\n maxWidth?: number\n minHeight?: number\n maxHeight?: number\n}\n\nexport interface FloatingPositionAnchorOptions {\n link: AlignmentInput\n margin?: SidesInput\n}\n\nexport interface FloatingPositionPlacementOptions {\n padding?: SidesInput\n}\n\nexport interface FloatingPosition {\n content: {\n rect: Position & Readonly<Dimension>\n link: Alignment\n readonly constrained: Readonly<Dimension>\n }\n anchor: {\n readonly rect: Readonly<Rect>\n link: Alignment\n visible: boolean\n }\n placement: {\n readonly rect: Readonly<Rect>\n readonly padding: Readonly<Sides>\n readonly rectWithPadding: Readonly<Rect>\n area: Readonly<Rect>\n }\n connection: Position\n direction: FloatingPositionDirection\n sizeConstraints?: FloatingSizeConstraintsInput\n}\n\ninterface PlacementArea {\n anchorLink: Alignment\n contentLink: Alignment\n area: FloatingPosition[\"placement\"][\"area\"]\n connection: Position\n}\n\ntype FloatingPositionAltConst =\n | \"none\"\n | \"flip\"\n | \"shift\"\n | \"flip-shift\"\n | \"greatest\"\n | \"greatest-shift\"\n | \"smallest\"\n | \"smallest-shift\"\nexport type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc\nexport type FloatingPositionAltFunc = (pos: FloatingPosition, axis: FloatingPositionAltAxis) => void\nexport type FloatingPositionAltNorm = Array<FloatingPositionAltFunc>\n\nexport const enum FloatingPositionAltAxis {\n Horizontal = \"H\",\n Vertical = \"V\"\n}\n\nconst ZERO_PADDING = sidesNormalize(0)\nconst ZERO_CONNECTION = { x: 0, y: 0 }\n\nexport function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition {\n const padding = options.placement.padding ? sidesNormalize(options.placement.padding) : ZERO_PADDING\n const placement: FloatingPosition[\"placement\"] = {\n rect: dims.placement,\n padding: padding,\n rectWithPadding: rectContract(dims.placement, padding),\n area: { ...dims.placement }\n }\n\n const anchor: FloatingPosition[\"anchor\"] = {\n rect: options.anchor.margin ? rectExpand(dims.anchor, options.anchor.margin) : dims.anchor,\n link: alignmentNormalize(options.anchor.link),\n visible: false\n }\n\n const minWidth = dims.sizeConstraints?.minWidth || 0\n const minHeight = dims.sizeConstraints?.minHeight || 0\n const maxWidth = dims.sizeConstraints?.maxWidth || Infinity\n const maxHeight = dims.sizeConstraints?.maxHeight || Infinity\n const content: FloatingPosition[\"content\"] = {\n rect: { ...dims.content, x: 0, y: 0 },\n link: alignmentNormalize(options.content.link),\n constrained: {\n width: clamp(dims.content.width, minWidth, maxWidth),\n height: clamp(dims.content.height, minHeight, maxHeight)\n }\n }\n\n const position = {\n placement,\n anchor,\n content,\n connection: ZERO_CONNECTION,\n sizeConstraints: dims.sizeConstraints,\n direction: FloatingPositionDirection.Down\n }\n const area = placementArea(position, anchor.link, content.link)\n setPlacement(position, area)\n\n if (options.horizontalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Horizontal, options.horizontalAlt)\n }\n\n if (options.verticalAlt) {\n applyAlts(position, FloatingPositionAltAxis.Vertical, options.verticalAlt)\n }\n\n position.direction = floatingPositionDirection(position)\n position.anchor.visible = rectIntersect(position.placement.rectWithPadding, position.anchor.rect)\n return position\n}\n\nfunction placementArea(pos: FloatingPosition, anchorLink: Alignment, contentLink: Alignment): PlacementArea {\n const connection = rectOrigin(pos.anchor.rect, anchorLink)\n let { x, y } = connection\n const placement = pos.placement.rect\n const constraint = pos.placement.rectWithPadding\n const placementPad = pos.placement.padding\n let { width, height } = placement\n\n switch (contentLink.horizontal) {\n case \"left\":\n case \"start\":\n break\n case \"center\":\n if (anchorLink.horizontal === \"center\") {\n x = placement.x\n } else {\n x -= pos.content.constrained.width / 2\n }\n break\n case \"end\":\n case \"right\":\n width = x - placementPad.left.value\n if (anchorLink.horizontal === \"center\") {\n x = placement.x\n } else {\n x -= pos.content.constrained.width\n }\n break\n }\n\n switch (contentLink.vertical) {\n case \"top\":\n break\n case \"middle\":\n if (anchorLink.vertical === \"middle\") {\n y = placement.y\n } else {\n y -= pos.content.constrained.height / 2\n }\n break\n case \"bottom\":\n height = y - placementPad.top.value\n y = placement.y\n break\n }\n\n const area = rectConstraint({ x, y, width, height }, constraint)\n return { area, contentLink, anchorLink, connection }\n}\n\nfunction setPlacement(position: FloatingPosition, { area, anchorLink, contentLink, connection }: PlacementArea): void {\n position.placement.area = area\n position.anchor.link = anchorLink\n position.content.link = contentLink\n\n const plannedContentRect = rectMoveOrigin(position.content.rect, contentLink, connection)\n position.connection = adjustConnection(area, plannedContentRect, connection)\n position.content.rect = rectMoveOrigin(position.content.rect, contentLink, connection)\n}\n\nfunction adjustConnection(\n placement: FloatingPosition[\"placement\"][\"area\"],\n content: FloatingPosition[\"content\"][\"rect\"],\n connection: FloatingPosition[\"connection\"]\n) {\n const x = Math.max(placement.x, content.x)\n const y = Math.max(placement.y, content.y)\n const leftDiff = x - content.x\n const topDiff = y - content.y\n const widthDiff = placement.x + placement.width - (x + content.width)\n const heightDiff = placement.y + placement.height - (y + content.height)\n\n const result = { ...connection }\n connection.x += leftDiff\n connection.y += topDiff\n\n if (widthDiff < 0) {\n connection.x += widthDiff\n }\n\n if (heightDiff < 0) {\n connection.y += heightDiff\n }\n return result\n}\n\nfunction applyAlts(pos: FloatingPosition, axis: FloatingPositionAltAxis, alts: FloatingPositionAltInput) {\n const norm = positionAltNormalize(alts)\n for (const alt of norm) {\n alt(pos, axis)\n }\n}\n\nexport function positionAltNormalize(\n input: FloatingPositionAltInput | FloatingPositionAltNorm\n): FloatingPositionAltNorm {\n if (Array.isArray(input)) {\n return input\n } else if (typeof input === \"function\") {\n return [input]\n } else if (typeof input === \"string\") {\n return altStringToFns(input)\n } else {\n throw new Error(`Invalid alt position: ${input}`)\n }\n}\n\nfunction altStringToFns(input: FloatingPositionAltConst): FloatingPositionAltNorm {\n switch (input) {\n case \"none\":\n return [none]\n case \"flip\":\n return [flip]\n case \"shift\":\n return [shift]\n case \"flip-shift\":\n return [flip, shift]\n case \"greatest\":\n return [greatest]\n case \"greatest-shift\":\n return [greatest, shift]\n case \"smallest\":\n return [smallest]\n case \"smallest-shift\":\n return [smallest, shift]\n }\n}\n\nfunction none(pos: FloatingPosition, axis: FloatingPositionAltAxis): void { }\n\nfunction flip(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n if (pos.placement.area[wh] >= pos.content.constrained[wh]) {\n return\n }\n return greatest(pos, axis)\n}\n\nfunction shift(pos: FloatingPosition, axis: FloatingPositionAltAxis): void { }\n\nfunction greatest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a >= b)\n}\n\nfunction smallest(pos: FloatingPosition, axis: FloatingPositionAltAxis): void {\n _bySize(pos, axis, (a, b) => a <= b)\n}\n\nfunction _bySize(pos: FloatingPosition, axis: FloatingPositionAltAxis, cmp: (a: number, b: number) => boolean): void {\n const wh: \"width\" | \"height\" = axis === FloatingPositionAltAxis.Horizontal ? \"width\" : \"height\"\n\n const current = pos.placement.area[wh]\n const anchorLink = oppositeLink(axis, pos.anchor.link)\n const contentLink = oppositeLink(axis, pos.content.link)\n const oppositePlacement = placementArea(pos, anchorLink, contentLink)\n\n if (cmp(current, oppositePlacement.area[wh])) {\n return\n }\n\n setPlacement(pos, oppositePlacement)\n}\n\nfunction oppositeLink(axis: FloatingPositionAltAxis, link: Alignment): Alignment {\n if (axis === FloatingPositionAltAxis.Horizontal) {\n return { horizontal: AlignHorizontalOpposite[link.horizontal], vertical: link.vertical }\n } else {\n return { horizontal: link.horizontal, vertical: AlignVerticalOpposite[link.vertical] }\n }\n}\n\nexport function floatingPositionToStyle(pos: Readonly<FloatingPosition>, display: CSSStyleDeclaration[\"display\"] = \"inline-flex\"): Partial<CSSStyleDeclaration> {\n if (pos.anchor.visible === false) {\n return {\"display\": \"none\", \"pointerEvents\": \"none\"}\n }\n\n const contentRect = pos.content.rect\n const placementRect = pos.placement.rect\n // const { width: maxWidth, height: maxHeight } = pos.placement.area\n const style: Partial<CSSStyleDeclaration> = { display: display, pointerEvents: \"\" }\n\n // TODO: translate3d\n if (pos.content.link.horizontal === \"right\") {\n style[\"right\"] = `${placementRect.width - (contentRect.x + contentRect.width)}px`\n style[\"left\"] = \"auto\"\n } else {\n style[\"left\"] = `${contentRect.x}px`\n style[\"right\"] = \"auto\"\n }\n\n if (pos.content.link.vertical === \"bottom\") {\n style[\"bottom\"] = `${placementRect.height - (contentRect.y + contentRect.height)}px`\n style[\"top\"] = \"auto\"\n } else {\n style[\"top\"] = `${contentRect.y}px`\n style[\"bottom\"] = \"auto\"\n }\n\n // style[\"maxWidth\"] = `${maxWidth}px`\n // style[\"maxHeight\"] = `${maxHeight}px`\n\n return style\n}\n\nexport const enum FloatingPositionDirection {\n Up = \"up\",\n Down = \"down\",\n Left = \"left\",\n Right = \"right\",\n Center = \"center\"\n}\n\nexport function floatingPositionDirection(pos: Readonly<FloatingPosition>): FloatingPositionDirection {\n const { x: ax, y: ay, width: aw, height: ah } = pos.anchor.rect\n const { x: bx, y: by, width: bw, height: bh } = pos.content.rect\n const contentLink = pos.content.link\n const anchorLink = pos.anchor.link\n\n if (anchorLink.horizontal === \"center\" && anchorLink.vertical === \"middle\") {\n if (contentLink.horizontal === \"center\" && contentLink.vertical === \"middle\") {\n return FloatingPositionDirection.Center\n }\n\n const cx = pos.connection.x\n if (cx <= bx) {\n return FloatingPositionDirection.Right\n } else if (cx >= bx + bw) {\n return FloatingPositionDirection.Left\n }\n }\n\n const widthOverlapPx = Math.min(ax + aw, bx + bw) - Math.max(ax, bx)\n const widthOverlapPercent = widthOverlapPx / Math.max(aw, bw)\n const heightOverlapPx = Math.min(ay + ah, by + bh) - Math.max(ay, by)\n const heightOverlapPercent = heightOverlapPx / Math.max(ah, bh)\n\n if (widthOverlapPercent >= heightOverlapPercent) {\n if (contentLink.vertical === \"bottom\") {\n return FloatingPositionDirection.Up\n }\n\n return FloatingPositionDirection.Down\n } else {\n if (contentLink.horizontal === \"right\") {\n return FloatingPositionDirection.Left\n }\n\n return FloatingPositionDirection.Right\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isEqual"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -86,6 +86,7 @@ declare function rectConstraint(rect: Rect, constraint: Rect): Rect;
|
|
|
86
86
|
declare function rectExpand(rect: Rect, margin: SidesInput): Rect;
|
|
87
87
|
declare function rectContract(rect: Rect, padding: SidesInput): Rect;
|
|
88
88
|
declare function rectContainsPoint(rect: Rect, point: Position): boolean;
|
|
89
|
+
declare function rectIntersect(a: Rect, b: Rect): boolean;
|
|
89
90
|
|
|
90
91
|
type WatchBox = ResizeObserverBoxOptions | "scroll-box";
|
|
91
92
|
declare class DimensionWatcher {
|
|
@@ -95,10 +96,9 @@ declare class DimensionWatcher {
|
|
|
95
96
|
static ɵprov: i0.ɵɵInjectableDeclaration<DimensionWatcher>;
|
|
96
97
|
}
|
|
97
98
|
|
|
98
|
-
type WatchPosition = "document" | "viewport";
|
|
99
99
|
declare class PositionWatcher {
|
|
100
100
|
#private;
|
|
101
|
-
watch(element: ElementInput | Window
|
|
101
|
+
watch(element: ElementInput | Window): Observable<Position>;
|
|
102
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<PositionWatcher, never>;
|
|
103
103
|
static ɵprov: i0.ɵɵInjectableDeclaration<PositionWatcher>;
|
|
104
104
|
}
|
|
@@ -110,6 +110,13 @@ declare class RectWatcher {
|
|
|
110
110
|
static ɵprov: i0.ɵɵInjectableDeclaration<RectWatcher>;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
declare class ScrollOffsetWatcher {
|
|
114
|
+
#private;
|
|
115
|
+
watch(element: ElementInput | Window): Observable<Position>;
|
|
116
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScrollOffsetWatcher, never>;
|
|
117
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ScrollOffsetWatcher>;
|
|
118
|
+
}
|
|
119
|
+
|
|
113
120
|
declare class NodeRemovedWatcher {
|
|
114
121
|
#private;
|
|
115
122
|
watch(element: ElementInput): Observable<void>;
|
|
@@ -129,7 +136,7 @@ interface FloatingPositionDims {
|
|
|
129
136
|
content: Dimension;
|
|
130
137
|
anchor: Rect;
|
|
131
138
|
placement: Rect;
|
|
132
|
-
|
|
139
|
+
sizeConstraints?: FloatingSizeConstraintsInput;
|
|
133
140
|
}
|
|
134
141
|
interface FloatingPositionOptions {
|
|
135
142
|
content: FloatingPositionContentOptions;
|
|
@@ -141,7 +148,7 @@ interface FloatingPositionOptions {
|
|
|
141
148
|
interface FloatingPositionContentOptions {
|
|
142
149
|
link: AlignmentInput;
|
|
143
150
|
}
|
|
144
|
-
interface
|
|
151
|
+
interface FloatingSizeConstraintsInput {
|
|
145
152
|
minWidth?: number;
|
|
146
153
|
maxWidth?: number;
|
|
147
154
|
minHeight?: number;
|
|
@@ -163,6 +170,7 @@ interface FloatingPosition {
|
|
|
163
170
|
anchor: {
|
|
164
171
|
readonly rect: Readonly<Rect>;
|
|
165
172
|
link: Alignment;
|
|
173
|
+
visible: boolean;
|
|
166
174
|
};
|
|
167
175
|
placement: {
|
|
168
176
|
readonly rect: Readonly<Rect>;
|
|
@@ -172,7 +180,7 @@ interface FloatingPosition {
|
|
|
172
180
|
};
|
|
173
181
|
connection: Position;
|
|
174
182
|
direction: FloatingPositionDirection;
|
|
175
|
-
|
|
183
|
+
sizeConstraints?: FloatingSizeConstraintsInput;
|
|
176
184
|
}
|
|
177
185
|
type FloatingPositionAltConst = "none" | "flip" | "shift" | "flip-shift" | "greatest" | "greatest-shift" | "smallest" | "smallest-shift";
|
|
178
186
|
type FloatingPositionAltInput = FloatingPositionAltConst | FloatingPositionAltFunc;
|
|
@@ -184,7 +192,7 @@ declare const enum FloatingPositionAltAxis {
|
|
|
184
192
|
}
|
|
185
193
|
declare function floatingPosition({ dims, options }: FloatingPositionInput): FloatingPosition;
|
|
186
194
|
declare function positionAltNormalize(input: FloatingPositionAltInput | FloatingPositionAltNorm): FloatingPositionAltNorm;
|
|
187
|
-
declare function floatingPositionToStyle(pos: Readonly<FloatingPosition
|
|
195
|
+
declare function floatingPositionToStyle(pos: Readonly<FloatingPosition>, display?: CSSStyleDeclaration["display"]): Partial<CSSStyleDeclaration>;
|
|
188
196
|
declare const enum FloatingPositionDirection {
|
|
189
197
|
Up = "up",
|
|
190
198
|
Down = "down",
|
|
@@ -194,5 +202,5 @@ declare const enum FloatingPositionDirection {
|
|
|
194
202
|
}
|
|
195
203
|
declare function floatingPositionDirection(pos: Readonly<FloatingPosition>): FloatingPositionDirection;
|
|
196
204
|
|
|
197
|
-
export { ColorSchemeService, DimensionWatcher, Duration, Ease, FloatingPositionAltAxis, FloatingPositionDirection, MediaWatcher, NodeRemovedWatcher, PositionWatcher, RectWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionDirection, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContainsPoint, rectContract, rectExpand, rectMoveOrigin, rectOrigin, sidesNormalize };
|
|
198
|
-
export type { AlignHorizontal, AlignVertical, Alignment, AlignmentInput, Dimension, FloatingPosition, FloatingPositionAltFunc, FloatingPositionAltInput, FloatingPositionAltNorm, FloatingPositionAnchorOptions,
|
|
205
|
+
export { ColorSchemeService, DimensionWatcher, Duration, Ease, FloatingPositionAltAxis, FloatingPositionDirection, MediaWatcher, NodeRemovedWatcher, PositionWatcher, RectWatcher, ScrollOffsetWatcher, alignmentNormalize, alignmentToTransformOrigin, floatingPosition, floatingPositionDirection, floatingPositionToStyle, inAnimation, inTransition, isAnimating, positionAltNormalize, rectConstraint, rectContainsPoint, rectContract, rectExpand, rectIntersect, rectMoveOrigin, rectOrigin, sidesNormalize };
|
|
206
|
+
export type { AlignHorizontal, AlignVertical, Alignment, AlignmentInput, Dimension, FloatingPosition, FloatingPositionAltFunc, FloatingPositionAltInput, FloatingPositionAltNorm, FloatingPositionAnchorOptions, FloatingPositionContentOptions, FloatingPositionDims, FloatingPositionInput, FloatingPositionOptions, FloatingPositionPlacementOptions, FloatingSizeConstraintsInput, Position, Rect, Sides, SidesInput, WatchBox };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/style",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.118",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"sass": "./index.scss",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@angular/core": "20.3.13",
|
|
18
18
|
"es-toolkit": "^1.35.0",
|
|
19
19
|
"rxjs": "^7.8.1",
|
|
20
|
-
"@ngutil/common": "0.0.
|
|
20
|
+
"@ngutil/common": "0.0.118"
|
|
21
21
|
},
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"access": "public",
|