@ngutil/style 0.0.116 → 0.0.119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,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, shareReplay, map, of, combineLatest } from 'rxjs';
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(), shareReplay(1)));
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), shareReplay(1)));
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), shareReplay(1)));
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), shareReplay(1)));
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, position = "viewport") {
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
- const watchers = this.#watches[position] ??= new Map();
212
- let watcher = watchers.get(element);
211
+ let watcher = this.#watches.get(element);
213
212
  if (watcher == null) {
214
- if (position === "document") {
215
- watcher = this.#createDocumentWatcher(element);
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
- #createDocumentWatcher(element) {
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), shareReplay(1)));
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.constraints?.minWidth || 0;
585
- const minHeight = dims.constraints?.minHeight || 0;
586
- const maxWidth = dims.constraints?.maxWidth || Infinity;
587
- const maxHeight = dims.constraints?.maxHeight || Infinity;
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, ...dims.content },
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
- constrains: dims.constraints,
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 = 0;
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
- const leftSize = x - placementPad.left.value;
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 - placement.x;
643
- x = placement.x;
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
- const topSize = y - placementPad.top.value;
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 - placement.y;
678
+ height = y - placementPad.top.value;
665
679
  y = placement.y;
666
680
  break;
667
681
  }
668
- const constraint = pos.placement.rectWithPadding;
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, position?: WatchPosition): Observable<Position>;
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
- constraints?: FloatingPositionConstraintsInput;
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 FloatingPositionConstraintsInput {
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
- constraints?: FloatingPositionConstraintsInput;
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>): Partial<CSSStyleDeclaration>;
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, FloatingPositionConstraintsInput, FloatingPositionContentOptions, FloatingPositionDims, FloatingPositionInput, FloatingPositionOptions, FloatingPositionPlacementOptions, Position, Rect, Sides, SidesInput, WatchBox };
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.116",
3
+ "version": "0.0.119",
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.116"
20
+ "@ngutil/common": "0.0.119"
21
21
  },
22
22
  "publishConfig": {
23
23
  "access": "public",