@ngutil/floating 0.0.65 → 0.0.66

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,53 +1,46 @@
1
1
  import { animate, AnimationBuilder, style } from "@angular/animations";
2
- import { map, Observable, switchMap, take, tap, timer } from "rxjs";
2
+ import { map, Observable, of, switchMap, take, tap } from "rxjs";
3
3
  import { animationObservable } from "@ngutil/graphics";
4
- import { alignmentToTransformOrigin, Duration, Ease } from "@ngutil/style";
4
+ import { Duration, Ease, floatingPositionDirection } from "@ngutil/style";
5
5
  // https://tympanus.net/Development/ModalWindowEffects/
6
6
  const timing = `${Duration.FastMs}ms ${Ease.Deceleration}`;
7
7
  export class AnimationTrait {
8
- constructor(animation, options) {
8
+ constructor(animation, params) {
9
9
  this.animation = animation;
10
- this.options = options;
10
+ this.params = params;
11
11
  this.name = "animation";
12
12
  }
13
13
  connect(floatingRef) {
14
14
  return new Observable((dst) => {
15
15
  const builder = floatingRef.container.injector.get(AnimationBuilder);
16
16
  const element = floatingRef.container.nativeElement;
17
- const options = this.options || {};
18
- floatingRef.state.on("showing", () => animationParams(floatingRef, 0, options.params).pipe(switchMap(params => animationObservable({
17
+ floatingRef.state.on("showing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
19
18
  builder,
20
19
  element,
21
20
  animation: this.animation.show,
22
- options: { ...options, params }
21
+ options: { params }
23
22
  }))));
24
- floatingRef.state.on("disposing", () => animationParams(floatingRef, 0, options.params).pipe(switchMap(params => animationObservable({
23
+ floatingRef.state.on("disposing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
25
24
  builder,
26
25
  element,
27
26
  animation: this.animation.hide,
28
- options: { ...options, params }
27
+ options: { params }
29
28
  })), tap(() => (element.style.display = "none"))));
30
29
  floatingRef.state.on("disposing", () => dst.complete());
31
30
  dst.next();
32
31
  });
33
32
  }
34
33
  }
35
- function animationParams(floatingRef, delay, overrides) {
36
- const src = delay > 0
37
- ? timer(delay).pipe(switchMap(() => floatingRef.watchTrait("position")))
38
- : floatingRef.watchTrait("position");
39
- return src.pipe(take(1), map(position => {
40
- const origin = alignmentToTransformOrigin(position.content.link);
41
- return {
42
- origin,
43
- ...overrides
44
- };
45
- }));
34
+ function animationParams(floatingRef, params) {
35
+ if (params == null) {
36
+ return of({});
37
+ }
38
+ return floatingRef.watchTrait("position").pipe(take(1), map(params));
46
39
  }
47
40
  export const FallAnimation = {
48
41
  show: [
49
42
  style({
50
- transform: "scale(1.5)",
43
+ transform: "scale({{ scale }})",
51
44
  visibility: "visible",
52
45
  opacity: "0"
53
46
  }),
@@ -58,51 +51,57 @@ export const FallAnimation = {
58
51
  ],
59
52
  hide: [
60
53
  animate(timing, style({
61
- transform: "scale(1.5)",
54
+ transform: "scale({{ scale }})",
62
55
  visibility: "visible",
63
56
  opacity: "0"
64
57
  }))
65
58
  ]
66
59
  };
67
- export function fallAnimation(options) {
68
- return new AnimationTrait(FallAnimation, options);
60
+ export function fallAnimation(scale = 1.5) {
61
+ return new AnimationTrait(FallAnimation, () => {
62
+ return { scale };
63
+ });
69
64
  }
70
65
  export const FadeAnimation = {
71
66
  show: [style({ opacity: 0 }), animate(timing, style({ opacity: 1 }))],
72
67
  hide: [animate(timing, style({ opacity: 0 }))]
73
68
  };
74
- export function fadeAnimation(options) {
75
- return new AnimationTrait(FadeAnimation, options);
69
+ export function fadeAnimation() {
70
+ return new AnimationTrait(FadeAnimation);
76
71
  }
77
- export const DropAnimation = {
72
+ const SlideAnimation = {
78
73
  show: [
79
74
  style({
80
- transform: "translate({{ translateX }}, {{ translateY }})",
75
+ transform: "translate({{ tx }}, {{ ty }})",
81
76
  opacity: "0",
82
- transformOrigin: "{{ origin }}",
77
+ // transformOrigin: "{{ origin }}",
83
78
  visibility: "visible"
84
79
  }),
85
80
  animate(timing, style({
86
81
  opacity: "1",
87
- transform: "scale(1, 1) translate(0px, 0px)"
82
+ transform: "translate(0px, 0px)"
88
83
  }))
89
84
  ],
90
- hide: [
91
- animate(timing, style({ opacity: 0, transform: "translate(calc({{ translateX }} * -1), calc({{ translateY }} * -1))" }))
92
- ]
85
+ hide: [animate(timing, style({ opacity: 0, transform: "translate(calc({{ tx }} * -1), calc({{ ty }} * -1))" }))]
93
86
  };
94
- export function dropAnimation(options) {
95
- if (!options) {
96
- options = {};
97
- }
98
- if (!options.params) {
99
- options.params = {};
100
- }
101
- else {
102
- options.params = { ...options.params };
103
- }
104
- options.params["translateX"] = "0px";
105
- options.params["translateY"] = "-40px";
106
- return new AnimationTrait(DropAnimation, options);
87
+ const SlideAnimationParams = {
88
+ center: { tx: 0, ty: 0 },
89
+ up: { tx: 0, ty: 1 },
90
+ down: { tx: 0, ty: -1 },
91
+ left: { tx: 1, ty: 0 },
92
+ right: { tx: -1, ty: 0 }
93
+ };
94
+ function slideAnimation(size) {
95
+ return new AnimationTrait(SlideAnimation, position => {
96
+ const direction = floatingPositionDirection(position);
97
+ const { tx, ty } = SlideAnimationParams[direction];
98
+ return { tx: `${tx * size}px`, ty: `${ty * size}px` };
99
+ });
100
+ }
101
+ export function slideNearAnimation(size = 40) {
102
+ return slideAnimation(size * -1);
103
+ }
104
+ export function slideAwayAnimation(size = 40) {
105
+ return slideAnimation(size);
107
106
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2Zsb2F0aW5nL3RyYWl0cy9hbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBdUMsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFM0csT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFvQixNQUFNLGVBQWUsQ0FBQTtBQU81Rix1REFBdUQ7QUFFdkQsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtBQUUxRCxNQUFNLE9BQU8sY0FBYztJQUd2QixZQUNhLFNBQXVCLEVBQ3ZCLE9BQTBCO1FBRDFCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFKOUIsU0FBSSxHQUFHLFdBQVcsQ0FBQTtJQUt4QixDQUFDO0lBRUosT0FBTyxDQUFDLFdBQXdCO1FBQzVCLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUF3QixFQUFFLEVBQUU7WUFDL0MsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDcEUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUE7WUFFbEMs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R0FBRyxFQUFFLENBQUE7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDMUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFBO0lBRXRDLE9BQU8sSUFBSSxjQUFjLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25NZXRhZGF0YSwgQW5pbWF0aW9uT3B0aW9ucywgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiXG5cbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciwgc3dpdGNoTWFwLCB0YWtlLCB0YXAsIHRpbWVyIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBhbmltYXRpb25PYnNlcnZhYmxlIH0gZnJvbSBcIkBuZ3V0aWwvZ3JhcGhpY3NcIlxuaW1wb3J0IHsgYWxpZ25tZW50VG9UcmFuc2Zvcm1PcmlnaW4sIER1cmF0aW9uLCBFYXNlLCBGbG9hdGluZ1Bvc2l0aW9uIH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBGbG9hdGluZ1JlZiB9IGZyb20gXCIuLi9mbG9hdGluZy1yZWZcIlxuaW1wb3J0IHsgRmxvYXRpbmdUcmFpdCB9IGZyb20gXCIuL19iYXNlXCJcblxuZXhwb3J0IHR5cGUgQW5pbWF0aW9uU2V0ID0geyBzaG93OiBBbmltYXRpb25NZXRhZGF0YVtdOyBoaWRlOiBBbmltYXRpb25NZXRhZGF0YVtdIH1cblxuLy8gaHR0cHM6Ly90eW1wYW51cy5uZXQvRGV2ZWxvcG1lbnQvTW9kYWxXaW5kb3dFZmZlY3RzL1xuXG5jb25zdCB0aW1pbmcgPSBgJHtEdXJhdGlvbi5GYXN0TXN9bXMgJHtFYXNlLkRlY2VsZXJhdGlvbn1gXG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25UcmFpdCBpbXBsZW1lbnRzIEZsb2F0aW5nVHJhaXQ8dW5rbm93bj4ge1xuICAgIHJlYWRvbmx5IG5hbWUgPSBcImFuaW1hdGlvblwiXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgYW5pbWF0aW9uOiBBbmltYXRpb25TZXQsXG4gICAgICAgIHJlYWRvbmx5IG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zXG4gICAgKSB7fVxuXG4gICAgY29ubmVjdChmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWYpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkc3Q6IFN1YnNjcmliZXI8dW5rbm93bj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmbG9hdGluZ1JlZi5jb250YWluZXIuaW5qZWN0b3IuZ2V0KEFuaW1hdGlvbkJ1aWxkZXIpXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwge31cblxuICAgICAgICAgICAgZmxvYXRpbmdSZWYuc3RhdGUub24oXCJzaG93aW5nXCIsICgpID0+XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uUGFyYW1zKGZsb2F0aW5nUmVmLCAwLCBvcHRpb25zLnBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT2JzZXJ2YWJsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdGhpcy5hbmltYXRpb24uc2hvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IC4uLm9wdGlvbnMsIHBhcmFtcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZmxvYXRpbmdSZWYuc3RhdGUub24oXCJkaXNwb3NpbmdcIiwgKCkgPT5cbiAgICAgICAgICAgICAgICBhbmltYXRpb25QYXJhbXMoZmxvYXRpbmdSZWYsIDAsIG9wdGlvbnMucGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocGFyYW1zID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25PYnNlcnZhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0aGlzLmFuaW1hdGlvbi5oaWRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsgLi4ub3B0aW9ucywgcGFyYW1zIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGZsb2F0aW5nUmVmLnN0YXRlLm9uKFwiZGlzcG9zaW5nXCIsICgpID0+IGRzdC5jb21wbGV0ZSgpKVxuICAgICAgICAgICAgZHN0Lm5leHQoKVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYW5pbWF0aW9uUGFyYW1zKFxuICAgIGZsb2F0aW5nUmVmOiBGbG9hdGluZ1JlZixcbiAgICBkZWxheTogbnVtYmVyLFxuICAgIG92ZXJyaWRlczogQW5pbWF0aW9uT3B0aW9uc1tcInBhcmFtc1wiXVxuKTogT2JzZXJ2YWJsZTxBbmltYXRpb25PcHRpb25zW1wicGFyYW1zXCJdPiB7XG4gICAgY29uc3Qgc3JjID1cbiAgICAgICAgZGVsYXkgPiAwXG4gICAgICAgICAgICA/IHRpbWVyKGRlbGF5KS5waXBlKHN3aXRjaE1hcCgoKSA9PiBmbG9hdGluZ1JlZi53YXRjaFRyYWl0PEZsb2F0aW5nUG9zaXRpb24+KFwicG9zaXRpb25cIikpKVxuICAgICAgICAgICAgOiBmbG9hdGluZ1JlZi53YXRjaFRyYWl0PEZsb2F0aW5nUG9zaXRpb24+KFwicG9zaXRpb25cIilcblxuICAgIHJldHVybiBzcmMucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHBvc2l0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGFsaWdubWVudFRvVHJhbnNmb3JtT3JpZ2luKHBvc2l0aW9uLmNvbnRlbnQubGluaylcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgICAgIC4uLm92ZXJyaWRlc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIClcbn1cblxuZXhwb3J0IGNvbnN0IEZhbGxBbmltYXRpb246IEFuaW1hdGlvblNldCA9IHtcbiAgICBzaG93OiBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogXCJzY2FsZSgxLjUpXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgICAgIG9wYWNpdHk6IFwiMFwiXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgdGltaW5nLFxuICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJzY2FsZSgxKVwiLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgXSxcbiAgICBoaWRlOiBbXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICB0aW1pbmcsXG4gICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInNjYWxlKDEuNSlcIixcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiBcIjBcIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIF1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhbGxBbmltYXRpb24ob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvblRyYWl0KEZhbGxBbmltYXRpb24sIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCBGYWRlQW5pbWF0aW9uOiBBbmltYXRpb25TZXQgPSB7XG4gICAgc2hvdzogW3N0eWxlKHsgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSh0aW1pbmcsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSldLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhZGVBbmltYXRpb24ob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvblRyYWl0KEZhZGVBbmltYXRpb24sIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCBEcm9wQW5pbWF0aW9uOiBBbmltYXRpb25TZXQgPSB7XG4gICAgc2hvdzogW1xuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKHt7IHRyYW5zbGF0ZVggfX0sIHt7IHRyYW5zbGF0ZVkgfX0pXCIsXG4gICAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogXCJ7eyBvcmlnaW4gfX1cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgdGltaW5nLFxuICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJzY2FsZSgxLCAxKSB0cmFuc2xhdGUoMHB4LCAwcHgpXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdLFxuICAgIGhpZGU6IFtcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgIHRpbWluZyxcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZShjYWxjKHt7IHRyYW5zbGF0ZVggfX0gKiAtMSksIGNhbGMoe3sgdHJhbnNsYXRlWSB9fSAqIC0xKSlcIiB9KVxuICAgICAgICApXG4gICAgXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJvcEFuaW1hdGlvbihvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMucGFyYW1zKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zID0ge31cbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHsgLi4ub3B0aW9ucy5wYXJhbXMgfVxuICAgIH1cblxuICAgIG9wdGlvbnMucGFyYW1zW1widHJhbnNsYXRlWFwiXSA9IFwiMHB4XCJcbiAgICBvcHRpb25zLnBhcmFtc1tcInRyYW5zbGF0ZVlcIl0gPSBcIi00MHB4XCJcblxuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uVHJhaXQoRHJvcEFuaW1hdGlvbiwgb3B0aW9ucylcbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2Zsb2F0aW5nL3RyYWl0cy9hbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFekYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRTVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUErQyx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQU90SCx1REFBdUQ7QUFFdkQsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtBQUkxRCxNQUFNLE9BQU8sY0FBYztJQUd2QixZQUNhLFNBQXVCLEVBQ3ZCLE1BQTZCO1FBRDdCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFKakMsU0FBSSxHQUFHLFdBQVcsQ0FBQTtJQUt4QixDQUFDO0lBRUosT0FBTyxDQUFDLFdBQXdCO1FBQzVCLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUF3QixFQUFFLEVBQUU7WUFDL0MsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDcEUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7WUFFbkQsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUNqQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNmLG1CQUFtQixDQUFDO2dCQUNoQixPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtnQkFDOUIsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFO2FBQ3RCLENBQUMsQ0FDTCxDQUNKLENBQ0osQ0FBQTtZQUNELFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FDbkMsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDZixtQkFBbUIsQ0FBQztnQkFDaEIsT0FBTztnQkFDUCxPQUFPO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Z0JBQzlCLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRTthQUN0QixDQUFDLENBQ0wsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUM5QyxDQUNKLENBQUE7WUFDRCxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDdkQsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0NBQ0o7QUFFRCxTQUFTLGVBQWUsQ0FBQyxXQUF3QixFQUFFLE1BQTZCO0lBQzVFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQW1CLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDMUYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDdkMsSUFBSSxFQUFFO1FBQ0YsS0FBSyxDQUFDO1lBQ0YsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixVQUFVLEVBQUUsU0FBUztZQUNyQixPQUFPLEVBQUUsR0FBRztTQUNmLENBQUM7UUFDRixPQUFPLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztZQUNGLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLE9BQU8sRUFBRSxHQUFHO1NBQ2YsQ0FBQyxDQUNMO0tBQ0o7SUFDRCxJQUFJLEVBQUU7UUFDRixPQUFPLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztZQUNGLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsVUFBVSxFQUFFLFNBQVM7WUFDckIsT0FBTyxFQUFFLEdBQUc7U0FDZixDQUFDLENBQ0w7S0FDSjtDQUNKLENBQUE7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQWdCLEdBQUc7SUFDN0MsT0FBTyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUNwQixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3ZDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakQsQ0FBQTtBQUVELE1BQU0sVUFBVSxhQUFhO0lBQ3pCLE9BQU8sSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVELE1BQU0sY0FBYyxHQUFpQjtJQUNqQyxJQUFJLEVBQUU7UUFDRixLQUFLLENBQUM7WUFDRixTQUFTLEVBQUUsK0JBQStCO1lBQzFDLE9BQU8sRUFBRSxHQUFHO1lBQ1osbUNBQW1DO1lBQ25DLFVBQVUsRUFBRSxTQUFTO1NBQ3hCLENBQUM7UUFDRixPQUFPLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztZQUNGLE9BQU8sRUFBRSxHQUFHO1lBQ1osU0FBUyxFQUFFLHFCQUFxQjtTQUNuQyxDQUFDLENBQ0w7S0FDSjtJQUNELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUscURBQXFELEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbkgsQ0FBQTtBQUVELE1BQU0sb0JBQW9CLEdBQXFFO0lBQzNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDcEIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdkIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCLENBQUE7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sSUFBSSxjQUFjLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sU0FBUyxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUN6RCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFO0lBQ2hELE9BQU8sY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFO0lBQ2hELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25NZXRhZGF0YSwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiXG5cbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmliZXIsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBhbmltYXRpb25PYnNlcnZhYmxlIH0gZnJvbSBcIkBuZ3V0aWwvZ3JhcGhpY3NcIlxuaW1wb3J0IHsgRHVyYXRpb24sIEVhc2UsIEZsb2F0aW5nUG9zaXRpb24sIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24sIGZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24gfSBmcm9tIFwiQG5ndXRpbC9zdHlsZVwiXG5cbmltcG9ydCB7IEZsb2F0aW5nUmVmIH0gZnJvbSBcIi4uL2Zsb2F0aW5nLXJlZlwiXG5pbXBvcnQgeyBGbG9hdGluZ1RyYWl0IH0gZnJvbSBcIi4vX2Jhc2VcIlxuXG5leHBvcnQgdHlwZSBBbmltYXRpb25TZXQgPSB7IHNob3c6IEFuaW1hdGlvbk1ldGFkYXRhW107IGhpZGU6IEFuaW1hdGlvbk1ldGFkYXRhW10gfVxuXG4vLyBodHRwczovL3R5bXBhbnVzLm5ldC9EZXZlbG9wbWVudC9Nb2RhbFdpbmRvd0VmZmVjdHMvXG5cbmNvbnN0IHRpbWluZyA9IGAke0R1cmF0aW9uLkZhc3RNc31tcyAke0Vhc2UuRGVjZWxlcmF0aW9ufWBcblxuZXhwb3J0IHR5cGUgQW5pbWF0aW9uVHJhaXRQYXJhbXMgPSAocG9zaXRpb246IEZsb2F0aW5nUG9zaXRpb24pID0+IG9iamVjdFxuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uVHJhaXQgaW1wbGVtZW50cyBGbG9hdGluZ1RyYWl0PHVua25vd24+IHtcbiAgICByZWFkb25seSBuYW1lID0gXCJhbmltYXRpb25cIlxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IGFuaW1hdGlvbjogQW5pbWF0aW9uU2V0LFxuICAgICAgICByZWFkb25seSBwYXJhbXM/OiBBbmltYXRpb25UcmFpdFBhcmFtc1xuICAgICkge31cblxuICAgIGNvbm5lY3QoZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLmluamVjdG9yLmdldChBbmltYXRpb25CdWlsZGVyKVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZsb2F0aW5nUmVmLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50XG5cbiAgICAgICAgICAgIGZsb2F0aW5nUmVmLnN0YXRlLm9uKFwic2hvd2luZ1wiLCAoKSA9PlxuICAgICAgICAgICAgICAgIGFuaW1hdGlvblBhcmFtcyhmbG9hdGluZ1JlZiwgdGhpcy5wYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9ic2VydmFibGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uLnNob3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyBwYXJhbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGZsb2F0aW5nUmVmLnN0YXRlLm9uKFwiZGlzcG9zaW5nXCIsICgpID0+XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uUGFyYW1zKGZsb2F0aW5nUmVmLCB0aGlzLnBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT2JzZXJ2YWJsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdGhpcy5hbmltYXRpb24uaGlkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHBhcmFtcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBmbG9hdGluZ1JlZi5zdGF0ZS5vbihcImRpc3Bvc2luZ1wiLCAoKSA9PiBkc3QuY29tcGxldGUoKSlcbiAgICAgICAgICAgIGRzdC5uZXh0KClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGlvblBhcmFtcyhmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWYsIHBhcmFtcz86IEFuaW1hdGlvblRyYWl0UGFyYW1zKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBpZiAocGFyYW1zID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KVxuICAgIH1cblxuICAgIHJldHVybiBmbG9hdGluZ1JlZi53YXRjaFRyYWl0PEZsb2F0aW5nUG9zaXRpb24+KFwicG9zaXRpb25cIikucGlwZSh0YWtlKDEpLCBtYXAocGFyYW1zKSlcbn1cblxuZXhwb3J0IGNvbnN0IEZhbGxBbmltYXRpb246IEFuaW1hdGlvblNldCA9IHtcbiAgICBzaG93OiBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogXCJzY2FsZSh7eyBzY2FsZSB9fSlcIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICAgICAgb3BhY2l0eTogXCIwXCJcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICB0aW1pbmcsXG4gICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInNjYWxlKDEpXCIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogXCIxXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdLFxuICAgIGhpZGU6IFtcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgIHRpbWluZyxcbiAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwic2NhbGUoe3sgc2NhbGUgfX0pXCIsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogXCIwXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWxsQW5pbWF0aW9uKHNjYWxlOiBudW1iZXIgPSAxLjUpIHtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvblRyYWl0KEZhbGxBbmltYXRpb24sICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgc2NhbGUgfVxuICAgIH0pXG59XG5cbmV4cG9ydCBjb25zdCBGYWRlQW5pbWF0aW9uOiBBbmltYXRpb25TZXQgPSB7XG4gICAgc2hvdzogW3N0eWxlKHsgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSh0aW1pbmcsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSldLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhZGVBbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRpb25UcmFpdChGYWRlQW5pbWF0aW9uKVxufVxuXG5jb25zdCBTbGlkZUFuaW1hdGlvbjogQW5pbWF0aW9uU2V0ID0ge1xuICAgIHNob3c6IFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSh7eyB0eCB9fSwge3sgdHkgfX0pXCIsXG4gICAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybU9yaWdpbjogXCJ7eyBvcmlnaW4gfX1cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgdGltaW5nLFxuICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMHB4LCAwcHgpXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKGNhbGMoe3sgdHggfX0gKiAtMSksIGNhbGMoe3sgdHkgfX0gKiAtMSkpXCIgfSkpXVxufVxuXG5jb25zdCBTbGlkZUFuaW1hdGlvblBhcmFtczogeyBbSyBpbiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uXTogeyB0eDogbnVtYmVyOyB0eTogbnVtYmVyIH0gfSA9IHtcbiAgICBjZW50ZXI6IHsgdHg6IDAsIHR5OiAwIH0sXG4gICAgdXA6IHsgdHg6IDAsIHR5OiAxIH0sXG4gICAgZG93bjogeyB0eDogMCwgdHk6IC0xIH0sXG4gICAgbGVmdDogeyB0eDogMSwgdHk6IDAgfSxcbiAgICByaWdodDogeyB0eDogLTEsIHR5OiAwIH1cbn1cblxuZnVuY3Rpb24gc2xpZGVBbmltYXRpb24oc2l6ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRpb25UcmFpdChTbGlkZUFuaW1hdGlvbiwgcG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBmbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uKHBvc2l0aW9uKVxuICAgICAgICBjb25zdCB7IHR4LCB0eSB9ID0gU2xpZGVBbmltYXRpb25QYXJhbXNbZGlyZWN0aW9uXVxuICAgICAgICByZXR1cm4geyB0eDogYCR7dHggKiBzaXplfXB4YCwgdHk6IGAke3R5ICogc2l6ZX1weGAgfVxuICAgIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGlkZU5lYXJBbmltYXRpb24oc2l6ZTogbnVtYmVyID0gNDApIHtcbiAgICByZXR1cm4gc2xpZGVBbmltYXRpb24oc2l6ZSAqIC0xKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpZGVBd2F5QW5pbWF0aW9uKHNpemU6IG51bWJlciA9IDQwKSB7XG4gICAgcmV0dXJuIHNsaWRlQW5pbWF0aW9uKHNpemUpXG59XG4iXX0=
@@ -1,4 +1,5 @@
1
- import { combineLatest, isObservable, map, Observable, of, switchMap, takeUntil } from "rxjs";
1
+ import { combineLatest, distinctUntilChanged, isObservable, map, Observable, of, switchMap, takeUntil } from "rxjs";
2
+ import { isEqual } from "lodash";
2
3
  import { isElementInput } from "@ngutil/common";
3
4
  import { DimensionWatcher, floatingPosition, floatingPositionToStyle, RectWatcher } from "@ngutil/style";
4
5
  export class PositionTrait {
@@ -21,31 +22,28 @@ export class PositionTrait {
21
22
  const injector = floatingRef.container.injector;
22
23
  const dimWatcher = injector.get(DimensionWatcher);
23
24
  const rectWatcher = injector.get(RectWatcher);
24
- const dimWatches = {
25
- content: dimWatcher.watch(floatingRef.container, "border-box"),
26
- anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),
27
- placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef)
28
- };
29
- const sizeWatches = {
30
- minWidth: sizeWatcher(dimWatcher, "width", this.options.content.minWidth),
31
- maxWidth: sizeWatcher(dimWatcher, "width", this.options.content.maxWidth),
32
- minHeight: sizeWatcher(dimWatcher, "height", this.options.content.minHeight),
33
- maxHeight: sizeWatcher(dimWatcher, "height", this.options.content.maxHeight)
25
+ const constraints = this.options.content.constraints || {};
26
+ const constraintsWatches = {
27
+ minWidth: sizeWatcher(dimWatcher, "width", constraints.minWidth),
28
+ maxWidth: sizeWatcher(dimWatcher, "width", constraints.maxWidth),
29
+ minHeight: sizeWatcher(dimWatcher, "height", constraints.minHeight),
30
+ maxHeight: sizeWatcher(dimWatcher, "height", constraints.maxHeight)
34
31
  };
35
32
  const watches = {
36
- dims: combineLatest(dimWatches),
37
- size: combineLatest(sizeWatches)
33
+ content: dimWatcher.watch(floatingRef.container, "border-box"),
34
+ anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),
35
+ placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef),
36
+ constraints: combineLatest(constraintsWatches)
38
37
  };
39
- return (combineLatest(watches)
40
- // .pipe(distinctUntilChanged(isEqual))
41
- .subscribe(({ dims, size }) => {
42
- console.log(size);
38
+ return combineLatest(watches)
39
+ .pipe(distinctUntilChanged(isEqual))
40
+ .subscribe(dims => {
43
41
  const pos = floatingPosition({ dims, options: this.options });
44
42
  const floatingEl = floatingRef.container.nativeElement;
45
43
  Object.assign(floatingEl.style, floatingPositionToStyle(pos));
46
- Object.assign(floatingEl.style, sizesToStyle(pos, size));
44
+ Object.assign(floatingEl.style, constraintsToStyle(pos, dims.constraints));
47
45
  dest.next(pos);
48
- }));
46
+ });
49
47
  }).pipe(takeUntil(floatingRef.state.onExecute("disposing")));
50
48
  }
51
49
  }
@@ -72,7 +70,7 @@ function sizeWatcher(dimWatcher, prop, size) {
72
70
  }
73
71
  return of(NaN);
74
72
  }
75
- function sizesToStyle(pos, sizes) {
73
+ function constraintsToStyle(pos, sizes) {
76
74
  const { minWidth, maxWidth, minHeight, maxHeight } = sizes;
77
75
  const { width, height } = pos.placement.area;
78
76
  return {
@@ -85,4 +83,4 @@ function sizesToStyle(pos, sizes) {
85
83
  export function position(options) {
86
84
  return new PositionTrait(options);
87
85
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvZmxvYXRpbmcvdHJhaXRzL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFjLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFekcsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3RCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQU1oQix1QkFBdUIsRUFFdkIsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFBO0FBMkN0QixNQUFNLE9BQU8sYUFBYTtJQUt0QixZQUFZLE9BQTZCO1FBSmhDLFNBQUksR0FBRyxVQUFVLENBQUE7UUFLdEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBRTdCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQTtRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFBO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQWEsQ0FBQTtJQUNoQyxDQUFDO0lB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QUMsSUFBSSxDQUFBO0lBQzVDLE9BQU87UUFDSCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDckUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3pFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDM0UsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSTtLQUNuRixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBNkI7SUFDbEQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgaXNPYnNlcnZhYmxlLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpYmVyLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRWxlbWVudElucHV0LCBpc0VsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQge1xuICAgIERpbWVuc2lvbixcbiAgICBEaW1lbnNpb25XYXRjaGVyLFxuICAgIGZsb2F0aW5nUG9zaXRpb24sXG4gICAgRmxvYXRpbmdQb3NpdGlvbixcbiAgICBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXQsXG4gICAgRmxvYXRpbmdQb3NpdGlvbkFuY2hvck9wdGlvbnMsXG4gICAgRmxvYXRpbmdQb3NpdGlvbkNvbnRlbnRPcHRpb25zLFxuICAgIEZsb2F0aW5nUG9zaXRpb25QbGFjZW1lbnRPcHRpb25zLFxuICAgIGZsb2F0aW5nUG9zaXRpb25Ub1N0eWxlLFxuICAgIFJlY3QsXG4gICAgUmVjdFdhdGNoZXJcbn0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBGbG9hdGluZ1JlZiB9IGZyb20gXCIuLi9mbG9hdGluZy1yZWZcIlxuaW1wb3J0IHsgRmxvYXRpbmdUcmFpdCB9IGZyb20gXCIuL19iYXNlXCJcblxuZXhwb3J0IHR5cGUgUG9zaXRpb25UcmFpdEVsZW1lbnRSZWYgPSBFbGVtZW50SW5wdXQgfCBXaW5kb3cgfCBcImxheWVyXCIgfCBcInZpZXdwb3J0XCJcblxuZXhwb3J0IHR5cGUgUG9zaXRpb25UcmFpdE9wdGlvbnMgPSB7XG4gICAgY29udGVudD86IEZsb2F0aW5nUG9zaXRpb25Db250ZW50T3B0aW9ucyAmIE1pbk1heFNpemVzXG4gICAgYW5jaG9yPzogRmxvYXRpbmdQb3NpdGlvbkFuY2hvck9wdGlvbnMgJiB7IHJlZjogUG9zaXRpb25UcmFpdEVsZW1lbnRSZWYgfVxuICAgIHBsYWNlbWVudD86IEZsb2F0aW5nUG9zaXRpb25QbGFjZW1lbnRPcHRpb25zICYgeyByZWY6IFBvc2l0aW9uVHJhaXRFbGVtZW50UmVmIH1cbiAgICBob3Jpem9udGFsQWx0PzogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0XG4gICAgdmVydGljYWxBbHQ/OiBGbG9hdGluZ1Bvc2l0aW9uQWx0SW5wdXRcbn1cblxudHlwZSBTaXplSW5wdXQgPSBudW1iZXIgfCBFbGVtZW50SW5wdXQgfCBPYnNlcnZhYmxlPG51bWJlcj4gfCBPYnNlcnZhYmxlPEVsZW1lbnRJbnB1dD5cbmludGVyZmFjZSBNaW5NYXhTaXplcyB7XG4gICAgbWluV2lkdGg/OiBTaXplSW5wdXRcbiAgICBtYXhXaWR0aD86IFNpemVJbnB1dFxuICAgIG1pbkhlaWdodD86IFNpemVJbnB1dFxuICAgIG1heEhlaWdodD86IFNpemVJbnB1dFxufVxuXG50eXBlIFdhdGNoZXMgPSB7XG4gICAgY29udGVudDogT2JzZXJ2YWJsZTxEaW1lbnNpb24+XG4gICAgYW5jaG9yOiBPYnNlcnZhYmxlPFJlY3Q+XG4gICAgcGxhY2VtZW50OiBPYnNlcnZhYmxlPFJlY3Q+XG59XG5cbnR5cGUgU2l6ZVdhdGNoZXMgPSB7XG4gICAgbWluV2lkdGg6IE9ic2VydmFibGU8bnVtYmVyPlxuICAgIG1heFdpZHRoOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgICBtaW5IZWlnaHQ6IE9ic2VydmFibGU8bnVtYmVyPlxuICAgIG1heEhlaWdodDogT2JzZXJ2YWJsZTxudW1iZXI+XG59XG5cbmludGVyZmFjZSBNaW5NYXhTaXplc1Jlc3VsdCB7XG4gICAgbWluV2lkdGg6IG51bWJlclxuICAgIG1heFdpZHRoOiBudW1iZXJcbiAgICBtaW5IZWlnaHQ6IG51bWJlclxuICAgIG1heEhlaWdodDogbnVtYmVyXG59XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvblRyYWl0IGltcGxlbWVudHMgRmxvYXRpbmdUcmFpdDxGbG9hdGluZ1Bvc2l0aW9uPiB7XG4gICAgcmVhZG9ubHkgbmFtZSA9IFwicG9zaXRpb25cIlxuXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8UG9zaXRpb25UcmFpdE9wdGlvbnM+XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQb3NpdGlvblRyYWl0T3B0aW9ucykge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSB7IC4uLm9wdGlvbnMgfVxuXG4gICAgICAgIGlmICghY2xvbmVkLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgY2xvbmVkLnBsYWNlbWVudCA9IHsgcmVmOiBcInZpZXdwb3J0XCIgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9uZWQuYW5jaG9yKSB7XG4gICAgICAgICAgICBjbG9uZWQuYW5jaG9yID0geyByZWY6IGNsb25lZC5wbGFjZW1lbnQucmVmLCBsaW5rOiBcImNlbnRlciBtaWRkbGVcIiB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb25lZC5jb250ZW50KSB7XG4gICAgICAgICAgICBjbG9uZWQuY29udGVudCA9IHsgbGluazogXCJjZW50ZXIgbWlkZGxlXCIgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gY2xvbmVkIGFzIGFueVxuICAgIH1cblxuICAgIGNvbm5lY3QoZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmPGFueT4pOiBPYnNlcnZhYmxlPEZsb2F0aW5nUG9zaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPEZsb2F0aW5nUG9zaXRpb24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGZsb2F0aW5nUmVmLmNvbnRhaW5lci5pbmplY3RvclxuICAgICAgICAgICAgY29uc3QgZGltV2F0Y2hlciA9IGluamVjdG9yLmdldChEaW1lbnNpb25XYXRjaGVyKVxuICAgICAgICAgICAgY29uc3QgcmVjdFdhdGNoZXIgPSBpbmplY3Rvci5nZXQoUmVjdFdhdGNoZXIpXG5cbiAgICAgICAgICAgIGNvbnN0IGRpbVdhdGNoZXM6IFdhdGNoZXMgPSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogZGltV2F0Y2hlci53YXRjaChmbG9hdGluZ1JlZi5jb250YWluZXIsIFwiYm9yZGVyLWJveFwiKSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHJlZldhdGNoZXIocmVjdFdhdGNoZXIsIHRoaXMub3B0aW9ucy5hbmNob3IucmVmLCBmbG9hdGluZ1JlZiksXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiByZWZXYXRjaGVyKHJlY3RXYXRjaGVyLCB0aGlzLm9wdGlvbnMucGxhY2VtZW50LnJlZiwgZmxvYXRpbmdSZWYpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNpemVXYXRjaGVzOiBTaXplV2F0Y2hlcyA9IHtcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogc2l6ZVdhdGNoZXIoZGltV2F0Y2hlciwgXCJ3aWR0aFwiLCB0aGlzLm9wdGlvbnMuY29udGVudC5taW5XaWR0aCksXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHNpemVXYXRjaGVyKGRpbVdhdGNoZXIsIFwid2lkdGhcIiwgdGhpcy5vcHRpb25zLmNvbnRlbnQubWF4V2lkdGgpLFxuICAgICAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVdhdGNoZXIoZGltV2F0Y2hlciwgXCJoZWlnaHRcIiwgdGhpcy5vcHRpb25zLmNvbnRlbnQubWluSGVpZ2h0KSxcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHNpemVXYXRjaGVyKGRpbVdhdGNoZXIsIFwiaGVpZ2h0XCIsIHRoaXMub3B0aW9ucy5jb250ZW50Lm1heEhlaWdodClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgd2F0Y2hlcyA9IHtcbiAgICAgICAgICAgICAgICBkaW1zOiBjb21iaW5lTGF0ZXN0KGRpbVdhdGNoZXMpLFxuICAgICAgICAgICAgICAgIHNpemU6IGNvbWJpbmVMYXRlc3Qoc2l6ZVdhdGNoZXMpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdCh3YXRjaGVzKVxuICAgICAgICAgICAgICAgICAgICAvLyAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBkaW1zLCBzaXplIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHNpemUpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBmbG9hdGluZ1Bvc2l0aW9uKHsgZGltcywgb3B0aW9uczogdGhpcy5vcHRpb25zIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdGluZ0VsID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmxvYXRpbmdFbC5zdHlsZSwgZmxvYXRpbmdQb3NpdGlvblRvU3R5bGUocG9zKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmxvYXRpbmdFbC5zdHlsZSwgc2l6ZXNUb1N0eWxlKHBvcywgc2l6ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Lm5leHQocG9zKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5waXBlKHRha2VVbnRpbChmbG9hdGluZ1JlZi5zdGF0ZS5vbkV4ZWN1dGUoXCJkaXNwb3NpbmdcIikpKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVmV2F0Y2hlcihyZWN0V2F0Y2hlcjogUmVjdFdhdGNoZXIsIHJlZjogUG9zaXRpb25UcmFpdEVsZW1lbnRSZWYsIGZsb2F0aW5nUmVmOiBGbG9hdGluZ1JlZjxhbnk+KSB7XG4gICAgaWYgKHJlZiA9PT0gXCJsYXllclwiKSB7XG4gICAgICAgIHJldHVybiByZWN0V2F0Y2hlci53YXRjaChmbG9hdGluZ1JlZi5sYXllclN2Yy5yb290LCBcImJvcmRlci1ib3hcIilcbiAgICB9IGVsc2UgaWYgKHJlZiA9PT0gXCJ2aWV3cG9ydFwiIHx8IHJlZiBpbnN0YW5jZW9mIFdpbmRvdykge1xuICAgICAgICByZXR1cm4gcmVjdFdhdGNoZXIud2F0Y2god2luZG93LCBcImJvcmRlci1ib3hcIilcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVjdFdhdGNoZXIud2F0Y2gocmVmLCBcImJvcmRlci1ib3hcIilcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNpemVXYXRjaGVyKGRpbVdhdGNoZXI6IERpbWVuc2lvbldhdGNoZXIsIHByb3A6IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIsIHNpemU/OiBTaXplSW5wdXQpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gb2Yoc2l6ZSlcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudElucHV0KHNpemUpKSB7XG4gICAgICAgIHJldHVybiBkaW1XYXRjaGVyLndhdGNoKHNpemUsIFwiYm9yZGVyLWJveFwiKS5waXBlKG1hcCh2YWx1ZSA9PiB2YWx1ZVtwcm9wXSkpXG4gICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoc2l6ZSkpIHtcbiAgICAgICAgcmV0dXJuIChzaXplIGFzIE9ic2VydmFibGU8bnVtYmVyIHwgRWxlbWVudElucHV0PikucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiBzaXplV2F0Y2hlcihkaW1XYXRjaGVyLCBwcm9wLCB2YWx1ZSkpXG4gICAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIG9mKE5hTilcbn1cblxuZnVuY3Rpb24gc2l6ZXNUb1N0eWxlKHBvczogRmxvYXRpbmdQb3NpdGlvbiwgc2l6ZXM6IE1pbk1heFNpemVzUmVzdWx0KTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiB7XG4gICAgY29uc3QgeyBtaW5XaWR0aCwgbWF4V2lkdGgsIG1pbkhlaWdodCwgbWF4SGVpZ2h0IH0gPSBzaXplc1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcG9zLnBsYWNlbWVudC5hcmVhXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWluV2lkdGg6IGlzTmFOKG1pbldpZHRoKSA/IFwiYXV0b1wiIDogYCR7TWF0aC5taW4od2lkdGgsIG1pbldpZHRoKX1weGAsXG4gICAgICAgIG1pbkhlaWdodDogaXNOYU4obWluSGVpZ2h0KSA/IFwiYXV0b1wiIDogYCR7TWF0aC5taW4oaGVpZ2h0LCBtaW5IZWlnaHQpfXB4YCxcbiAgICAgICAgbWF4V2lkdGg6IGlzTmFOKG1heFdpZHRoKSA/IGAke3dpZHRofXB4YCA6IGAke01hdGgubWluKHdpZHRoLCBtYXhXaWR0aCl9cHhgLFxuICAgICAgICBtYXhIZWlnaHQ6IGlzTmFOKG1heEhlaWdodCkgPyBgJHtoZWlnaHR9cHhgIDogYCR7TWF0aC5taW4oaGVpZ2h0LCBtYXhIZWlnaHQpfXB4YFxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uKG9wdGlvbnM6IFBvc2l0aW9uVHJhaXRPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvblRyYWl0KG9wdGlvbnMpXG59XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvZmxvYXRpbmcvdHJhaXRzL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFFRixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVoQyxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzdELE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBT2hCLHVCQUF1QixFQUV2QixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUE7QUE2Q3RCLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQVksT0FBNkI7UUFKaEMsU0FBSSxHQUFHLFVBQVUsQ0FBQTtRQUt0QixNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFFN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFBO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUE7UUFDOUMsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBYSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxPQUFPLENBQUMsV0FBNkI7UUFDakMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQWtDLEVBQUUsRUFBRTtZQUN6RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtZQUMvQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDakQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFBO1lBQzFELE1BQU0sa0JBQWtCLEdBQXNCO2dCQUMxQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDaEUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hFLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDO2dCQUNuRSxTQUFTLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQzthQUN0RSxDQUFBO1lBRUQsTUFBTSxPQUFPLEdBQVk7Z0JBQ3JCLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO2dCQUM5RCxNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDO2dCQUNyRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDO2dCQUMzRSxXQUFXLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixDQUFDO2FBQ2pELENBQUE7WUFFRCxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNkLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtnQkFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7Z0JBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2dCQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO2dCQUMxRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLENBQUMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEUsQ0FBQztDQUNKO0FBRUQsU0FBUyxVQUFVLENBQUMsV0FBd0IsRUFBRSxHQUE0QixFQUFFLFdBQTZCO0lBQ3JHLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUNyRSxDQUFDO1NBQU0sSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUNyRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ2xELENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFVBQTRCLEVBQUUsSUFBd0IsRUFBRSxJQUFnQjtJQUN6RixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25CLENBQUM7U0FBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0UsQ0FBQztTQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBUSxJQUEwQyxDQUFDLElBQUksQ0FDbkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDM0QsQ0FBQTtJQUNMLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFxQixFQUFFLEtBQXdCO0lBQ3ZFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFDMUQsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQTtJQUM1QyxPQUFPO1FBQ0gsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQ3JFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSTtRQUN6RSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO1FBQzNFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUk7S0FDbkYsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQTZCO0lBQ2xELE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBpc09ic2VydmFibGUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgU3Vic2NyaWJlcixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBFbGVtZW50SW5wdXQsIGlzRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcbmltcG9ydCB7XG4gICAgRGltZW5zaW9uLFxuICAgIERpbWVuc2lvbldhdGNoZXIsXG4gICAgZmxvYXRpbmdQb3NpdGlvbixcbiAgICBGbG9hdGluZ1Bvc2l0aW9uLFxuICAgIEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dCxcbiAgICBGbG9hdGluZ1Bvc2l0aW9uQW5jaG9yT3B0aW9ucyxcbiAgICBGbG9hdGluZ1Bvc2l0aW9uQ29udGVudE9wdGlvbnMsXG4gICAgRmxvYXRpbmdQb3NpdGlvbkRpbXMsXG4gICAgRmxvYXRpbmdQb3NpdGlvblBsYWNlbWVudE9wdGlvbnMsXG4gICAgZmxvYXRpbmdQb3NpdGlvblRvU3R5bGUsXG4gICAgUmVjdCxcbiAgICBSZWN0V2F0Y2hlclxufSBmcm9tIFwiQG5ndXRpbC9zdHlsZVwiXG5cbmltcG9ydCB7IEZsb2F0aW5nUmVmIH0gZnJvbSBcIi4uL2Zsb2F0aW5nLXJlZlwiXG5pbXBvcnQgeyBGbG9hdGluZ1RyYWl0IH0gZnJvbSBcIi4vX2Jhc2VcIlxuXG5leHBvcnQgdHlwZSBQb3NpdGlvblRyYWl0RWxlbWVudFJlZiA9IEVsZW1lbnRJbnB1dCB8IFdpbmRvdyB8IFwibGF5ZXJcIiB8IFwidmlld3BvcnRcIlxuXG5leHBvcnQgdHlwZSBQb3NpdGlvblRyYWl0T3B0aW9ucyA9IHtcbiAgICBjb250ZW50PzogT21pdDxGbG9hdGluZ1Bvc2l0aW9uQ29udGVudE9wdGlvbnMsIFwiY29uc3RyYWludHNcIj4gJiB7IGNvbnN0cmFpbnRzPzogU2l6ZUNvbnN0cmFpbnRzSW5wdXQgfVxuICAgIGFuY2hvcj86IEZsb2F0aW5nUG9zaXRpb25BbmNob3JPcHRpb25zICYgeyByZWY6IFBvc2l0aW9uVHJhaXRFbGVtZW50UmVmIH1cbiAgICBwbGFjZW1lbnQ/OiBGbG9hdGluZ1Bvc2l0aW9uUGxhY2VtZW50T3B0aW9ucyAmIHsgcmVmOiBQb3NpdGlvblRyYWl0RWxlbWVudFJlZiB9XG4gICAgaG9yaXpvbnRhbEFsdD86IEZsb2F0aW5nUG9zaXRpb25BbHRJbnB1dFxuICAgIHZlcnRpY2FsQWx0PzogRmxvYXRpbmdQb3NpdGlvbkFsdElucHV0XG59XG5cbi8qKlxuICogV2lkdGggb3QgaGVpZ2h0IGlucHV0IHZhbHVlc1xuICpcbiAqIC0gYG51bWJlcmA6IGV4Y2FjdCB2YWx1ZVxuICogLSBgRWxlbWVudElucHV0YDogZWxlbWVudCByZWZlcmVuY2UsIGFuZCB0YWtlIHRoZSBkaW1lbnNpb24gZnJvbSBpdFxuICogLSBgbGlua2A6IHRha2UgdGhlIGRpbWVuc2lvbiBmcm9tIHRoZSBhbmNob3IgZWxlbWVudCBhbmQgb25seSBhcHBseSBvbiBjb25uZWN0aW9uIGRpbWVuc2lvbi5cbiAqICAgIGVnLjogYGFuY2hvci5saW5rID0gXCJsZWZ0IGJvdHRvbVwiYCBhbmQgYGNvbnRlbnQubGluayA9IFwibGVmdCB0b3BcImAsIGluIHRoaXMgY2FzZSBvbmx5IHdpZHRoIHdpbGwgYmUgYXBwbGllZC5cbiAqL1xudHlwZSBTaXplSW5wdXRDb25zdCA9IG51bWJlciB8IEVsZW1lbnRJbnB1dFxudHlwZSBTaXplSW5wdXQgPSBTaXplSW5wdXRDb25zdCB8IE9ic2VydmFibGU8U2l6ZUlucHV0Q29uc3Q+XG5cbmludGVyZmFjZSBTaXplQ29uc3RyYWludHNJbnB1dCB7XG4gICAgbWluV2lkdGg/OiBTaXplSW5wdXRcbiAgICBtYXhXaWR0aD86IFNpemVJbnB1dFxuICAgIG1pbkhlaWdodD86IFNpemVJbnB1dFxuICAgIG1heEhlaWdodD86IFNpemVJbnB1dFxufVxuXG50eXBlIFNpemVDb25zdHJhaW50cyA9IE5vbk51bGxhYmxlPEZsb2F0aW5nUG9zaXRpb25EaW1zW1wiY29uc3RyYWludHNcIl0+XG5cbnR5cGUgV2F0Y2hlcyA9IHtcbiAgICBjb250ZW50OiBPYnNlcnZhYmxlPERpbWVuc2lvbj5cbiAgICBhbmNob3I6IE9ic2VydmFibGU8UmVjdD5cbiAgICBwbGFjZW1lbnQ6IE9ic2VydmFibGU8UmVjdD5cbiAgICBjb25zdHJhaW50czogT2JzZXJ2YWJsZTxDb25zdHJhaW50c1Jlc3VsdD5cbn1cblxudHlwZSBDb25zdHJhaW50V2F0Y2hlcyA9IHsgW0sgaW4ga2V5b2YgU2l6ZUNvbnN0cmFpbnRzXS0/OiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPFNpemVDb25zdHJhaW50c1tLXT4+IH1cbnR5cGUgQ29uc3RyYWludHNSZXN1bHQgPSBSZXF1aXJlZDxTaXplQ29uc3RyYWludHM+XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvblRyYWl0IGltcGxlbWVudHMgRmxvYXRpbmdUcmFpdDxGbG9hdGluZ1Bvc2l0aW9uPiB7XG4gICAgcmVhZG9ubHkgbmFtZSA9IFwicG9zaXRpb25cIlxuXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8UG9zaXRpb25UcmFpdE9wdGlvbnM+XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQb3NpdGlvblRyYWl0T3B0aW9ucykge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSB7IC4uLm9wdGlvbnMgfVxuXG4gICAgICAgIGlmICghY2xvbmVkLnBsYWNlbWVudCkge1xuICAgICAgICAgICAgY2xvbmVkLnBsYWNlbWVudCA9IHsgcmVmOiBcInZpZXdwb3J0XCIgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9uZWQuYW5jaG9yKSB7XG4gICAgICAgICAgICBjbG9uZWQuYW5jaG9yID0geyByZWY6IGNsb25lZC5wbGFjZW1lbnQucmVmLCBsaW5rOiBcImNlbnRlciBtaWRkbGVcIiB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb25lZC5jb250ZW50KSB7XG4gICAgICAgICAgICBjbG9uZWQuY29udGVudCA9IHsgbGluazogXCJjZW50ZXIgbWlkZGxlXCIgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gY2xvbmVkIGFzIGFueVxuICAgIH1cblxuICAgIGNvbm5lY3QoZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmPGFueT4pOiBPYnNlcnZhYmxlPEZsb2F0aW5nUG9zaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPEZsb2F0aW5nUG9zaXRpb24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGZsb2F0aW5nUmVmLmNvbnRhaW5lci5pbmplY3RvclxuICAgICAgICAgICAgY29uc3QgZGltV2F0Y2hlciA9IGluamVjdG9yLmdldChEaW1lbnNpb25XYXRjaGVyKVxuICAgICAgICAgICAgY29uc3QgcmVjdFdhdGNoZXIgPSBpbmplY3Rvci5nZXQoUmVjdFdhdGNoZXIpXG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5vcHRpb25zLmNvbnRlbnQuY29uc3RyYWludHMgfHwge31cbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzV2F0Y2hlczogQ29uc3RyYWludFdhdGNoZXMgPSB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IHNpemVXYXRjaGVyKGRpbVdhdGNoZXIsIFwid2lkdGhcIiwgY29uc3RyYWludHMubWluV2lkdGgpLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBzaXplV2F0Y2hlcihkaW1XYXRjaGVyLCBcIndpZHRoXCIsIGNvbnN0cmFpbnRzLm1heFdpZHRoKSxcbiAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IHNpemVXYXRjaGVyKGRpbVdhdGNoZXIsIFwiaGVpZ2h0XCIsIGNvbnN0cmFpbnRzLm1pbkhlaWdodCksXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBzaXplV2F0Y2hlcihkaW1XYXRjaGVyLCBcImhlaWdodFwiLCBjb25zdHJhaW50cy5tYXhIZWlnaHQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHdhdGNoZXM6IFdhdGNoZXMgPSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogZGltV2F0Y2hlci53YXRjaChmbG9hdGluZ1JlZi5jb250YWluZXIsIFwiYm9yZGVyLWJveFwiKSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHJlZldhdGNoZXIocmVjdFdhdGNoZXIsIHRoaXMub3B0aW9ucy5hbmNob3IucmVmLCBmbG9hdGluZ1JlZiksXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiByZWZXYXRjaGVyKHJlY3RXYXRjaGVyLCB0aGlzLm9wdGlvbnMucGxhY2VtZW50LnJlZiwgZmxvYXRpbmdSZWYpLFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBjb21iaW5lTGF0ZXN0KGNvbnN0cmFpbnRzV2F0Y2hlcylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qod2F0Y2hlcylcbiAgICAgICAgICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRpbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBmbG9hdGluZ1Bvc2l0aW9uKHsgZGltcywgb3B0aW9uczogdGhpcy5vcHRpb25zIH0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0aW5nRWwgPSBmbG9hdGluZ1JlZi5jb250YWluZXIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGZsb2F0aW5nRWwuc3R5bGUsIGZsb2F0aW5nUG9zaXRpb25Ub1N0eWxlKHBvcykpXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmxvYXRpbmdFbC5zdHlsZSwgY29uc3RyYWludHNUb1N0eWxlKHBvcywgZGltcy5jb25zdHJhaW50cykpXG4gICAgICAgICAgICAgICAgICAgIGRlc3QubmV4dChwb3MpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwoZmxvYXRpbmdSZWYuc3RhdGUub25FeGVjdXRlKFwiZGlzcG9zaW5nXCIpKSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlZldhdGNoZXIocmVjdFdhdGNoZXI6IFJlY3RXYXRjaGVyLCByZWY6IFBvc2l0aW9uVHJhaXRFbGVtZW50UmVmLCBmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWY8YW55Pikge1xuICAgIGlmIChyZWYgPT09IFwibGF5ZXJcIikge1xuICAgICAgICByZXR1cm4gcmVjdFdhdGNoZXIud2F0Y2goZmxvYXRpbmdSZWYubGF5ZXJTdmMucm9vdCwgXCJib3JkZXItYm94XCIpXG4gICAgfSBlbHNlIGlmIChyZWYgPT09IFwidmlld3BvcnRcIiB8fCByZWYgaW5zdGFuY2VvZiBXaW5kb3cpIHtcbiAgICAgICAgcmV0dXJuIHJlY3RXYXRjaGVyLndhdGNoKHdpbmRvdywgXCJib3JkZXItYm94XCIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlY3RXYXRjaGVyLndhdGNoKHJlZiwgXCJib3JkZXItYm94XCIpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaXplV2F0Y2hlcihkaW1XYXRjaGVyOiBEaW1lbnNpb25XYXRjaGVyLCBwcm9wOiBcIndpZHRoXCIgfCBcImhlaWdodFwiLCBzaXplPzogU2l6ZUlucHV0KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnRJbnB1dChzaXplKSkge1xuICAgICAgICByZXR1cm4gZGltV2F0Y2hlci53YXRjaChzaXplLCBcImJvcmRlci1ib3hcIikucGlwZShtYXAodmFsdWUgPT4gdmFsdWVbcHJvcF0pKVxuICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHNpemUpKSB7XG4gICAgICAgIHJldHVybiAoc2l6ZSBhcyBPYnNlcnZhYmxlPG51bWJlciB8IEVsZW1lbnRJbnB1dD4pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gc2l6ZVdhdGNoZXIoZGltV2F0Y2hlciwgcHJvcCwgdmFsdWUpKVxuICAgICAgICApXG4gICAgfVxuICAgIHJldHVybiBvZihOYU4pXG59XG5cbmZ1bmN0aW9uIGNvbnN0cmFpbnRzVG9TdHlsZShwb3M6IEZsb2F0aW5nUG9zaXRpb24sIHNpemVzOiBDb25zdHJhaW50c1Jlc3VsdCk6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4ge1xuICAgIGNvbnN0IHsgbWluV2lkdGgsIG1heFdpZHRoLCBtaW5IZWlnaHQsIG1heEhlaWdodCB9ID0gc2l6ZXNcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHBvcy5wbGFjZW1lbnQuYXJlYVxuICAgIHJldHVybiB7XG4gICAgICAgIG1pbldpZHRoOiBpc05hTihtaW5XaWR0aCkgPyBcImF1dG9cIiA6IGAke01hdGgubWluKHdpZHRoLCBtaW5XaWR0aCl9cHhgLFxuICAgICAgICBtaW5IZWlnaHQ6IGlzTmFOKG1pbkhlaWdodCkgPyBcImF1dG9cIiA6IGAke01hdGgubWluKGhlaWdodCwgbWluSGVpZ2h0KX1weGAsXG4gICAgICAgIG1heFdpZHRoOiBpc05hTihtYXhXaWR0aCkgPyBgJHt3aWR0aH1weGAgOiBgJHtNYXRoLm1pbih3aWR0aCwgbWF4V2lkdGgpfXB4YCxcbiAgICAgICAgbWF4SGVpZ2h0OiBpc05hTihtYXhIZWlnaHQpID8gYCR7aGVpZ2h0fXB4YCA6IGAke01hdGgubWluKGhlaWdodCwgbWF4SGVpZ2h0KX1weGBcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbihvcHRpb25zOiBQb3NpdGlvblRyYWl0T3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUG9zaXRpb25UcmFpdChvcHRpb25zKVxufVxuIl19
@@ -1,9 +1,10 @@
1
1
  import { AnimationBuilder, style as style$1, animate } from '@angular/animations';
2
- import { Observable, switchMap, tap, timer, take, map, fromEvent, filter, from, of, race, exhaustMap, distinctUntilChanged, combineLatest, takeUntil, isObservable, share, ReplaySubject, shareReplay, takeWhile, debounceTime, startWith, EMPTY } from 'rxjs';
2
+ import { Observable, switchMap, tap, of, take, map, fromEvent, filter, from, race, exhaustMap, distinctUntilChanged, combineLatest, takeUntil, isObservable, share, ReplaySubject, shareReplay, takeWhile, debounceTime, startWith, EMPTY } from 'rxjs';
3
3
  import { animationObservable, CoverService } from '@ngutil/graphics';
4
- import { Duration, Ease, alignmentToTransformOrigin, DimensionWatcher, RectWatcher, floatingPosition, floatingPositionToStyle } from '@ngutil/style';
4
+ import { Duration, Ease, floatingPositionDirection, DimensionWatcher, RectWatcher, floatingPosition, floatingPositionToStyle } from '@ngutil/style';
5
5
  import { KeystrokeService, FocusService } from '@ngutil/aria';
6
6
  import { coerceElement, isElementInput, Lifecycle, toSorted } from '@ngutil/common';
7
+ import { isEqual } from 'lodash';
7
8
  import * as i0 from '@angular/core';
8
9
  import { ElementRef, Injector, InjectionToken, inject, Directive, Injectable, ComponentFactoryResolver, ViewContainerRef, ApplicationRef, Inject, TemplateRef } from '@angular/core';
9
10
  import { DOCUMENT } from '@angular/common';
@@ -12,49 +13,42 @@ import { DomPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/p
12
13
  // https://tympanus.net/Development/ModalWindowEffects/
13
14
  const timing = `${Duration.FastMs}ms ${Ease.Deceleration}`;
14
15
  class AnimationTrait {
15
- constructor(animation, options) {
16
+ constructor(animation, params) {
16
17
  this.animation = animation;
17
- this.options = options;
18
+ this.params = params;
18
19
  this.name = "animation";
19
20
  }
20
21
  connect(floatingRef) {
21
22
  return new Observable((dst) => {
22
23
  const builder = floatingRef.container.injector.get(AnimationBuilder);
23
24
  const element = floatingRef.container.nativeElement;
24
- const options = this.options || {};
25
- floatingRef.state.on("showing", () => animationParams(floatingRef, 0, options.params).pipe(switchMap(params => animationObservable({
25
+ floatingRef.state.on("showing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
26
26
  builder,
27
27
  element,
28
28
  animation: this.animation.show,
29
- options: { ...options, params }
29
+ options: { params }
30
30
  }))));
31
- floatingRef.state.on("disposing", () => animationParams(floatingRef, 0, options.params).pipe(switchMap(params => animationObservable({
31
+ floatingRef.state.on("disposing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
32
32
  builder,
33
33
  element,
34
34
  animation: this.animation.hide,
35
- options: { ...options, params }
35
+ options: { params }
36
36
  })), tap(() => (element.style.display = "none"))));
37
37
  floatingRef.state.on("disposing", () => dst.complete());
38
38
  dst.next();
39
39
  });
40
40
  }
41
41
  }
42
- function animationParams(floatingRef, delay, overrides) {
43
- const src = delay > 0
44
- ? timer(delay).pipe(switchMap(() => floatingRef.watchTrait("position")))
45
- : floatingRef.watchTrait("position");
46
- return src.pipe(take(1), map(position => {
47
- const origin = alignmentToTransformOrigin(position.content.link);
48
- return {
49
- origin,
50
- ...overrides
51
- };
52
- }));
42
+ function animationParams(floatingRef, params) {
43
+ if (params == null) {
44
+ return of({});
45
+ }
46
+ return floatingRef.watchTrait("position").pipe(take(1), map(params));
53
47
  }
54
48
  const FallAnimation = {
55
49
  show: [
56
50
  style$1({
57
- transform: "scale(1.5)",
51
+ transform: "scale({{ scale }})",
58
52
  visibility: "visible",
59
53
  opacity: "0"
60
54
  }),
@@ -65,52 +59,58 @@ const FallAnimation = {
65
59
  ],
66
60
  hide: [
67
61
  animate(timing, style$1({
68
- transform: "scale(1.5)",
62
+ transform: "scale({{ scale }})",
69
63
  visibility: "visible",
70
64
  opacity: "0"
71
65
  }))
72
66
  ]
73
67
  };
74
- function fallAnimation(options) {
75
- return new AnimationTrait(FallAnimation, options);
68
+ function fallAnimation(scale = 1.5) {
69
+ return new AnimationTrait(FallAnimation, () => {
70
+ return { scale };
71
+ });
76
72
  }
77
73
  const FadeAnimation = {
78
74
  show: [style$1({ opacity: 0 }), animate(timing, style$1({ opacity: 1 }))],
79
75
  hide: [animate(timing, style$1({ opacity: 0 }))]
80
76
  };
81
- function fadeAnimation(options) {
82
- return new AnimationTrait(FadeAnimation, options);
77
+ function fadeAnimation() {
78
+ return new AnimationTrait(FadeAnimation);
83
79
  }
84
- const DropAnimation = {
80
+ const SlideAnimation = {
85
81
  show: [
86
82
  style$1({
87
- transform: "translate({{ translateX }}, {{ translateY }})",
83
+ transform: "translate({{ tx }}, {{ ty }})",
88
84
  opacity: "0",
89
- transformOrigin: "{{ origin }}",
85
+ // transformOrigin: "{{ origin }}",
90
86
  visibility: "visible"
91
87
  }),
92
88
  animate(timing, style$1({
93
89
  opacity: "1",
94
- transform: "scale(1, 1) translate(0px, 0px)"
90
+ transform: "translate(0px, 0px)"
95
91
  }))
96
92
  ],
97
- hide: [
98
- animate(timing, style$1({ opacity: 0, transform: "translate(calc({{ translateX }} * -1), calc({{ translateY }} * -1))" }))
99
- ]
93
+ hide: [animate(timing, style$1({ opacity: 0, transform: "translate(calc({{ tx }} * -1), calc({{ ty }} * -1))" }))]
100
94
  };
101
- function dropAnimation(options) {
102
- if (!options) {
103
- options = {};
104
- }
105
- if (!options.params) {
106
- options.params = {};
107
- }
108
- else {
109
- options.params = { ...options.params };
110
- }
111
- options.params["translateX"] = "0px";
112
- options.params["translateY"] = "-40px";
113
- return new AnimationTrait(DropAnimation, options);
95
+ const SlideAnimationParams = {
96
+ center: { tx: 0, ty: 0 },
97
+ up: { tx: 0, ty: 1 },
98
+ down: { tx: 0, ty: -1 },
99
+ left: { tx: 1, ty: 0 },
100
+ right: { tx: -1, ty: 0 }
101
+ };
102
+ function slideAnimation(size) {
103
+ return new AnimationTrait(SlideAnimation, position => {
104
+ const direction = floatingPositionDirection(position);
105
+ const { tx, ty } = SlideAnimationParams[direction];
106
+ return { tx: `${tx * size}px`, ty: `${ty * size}px` };
107
+ });
108
+ }
109
+ function slideNearAnimation(size = 40) {
110
+ return slideAnimation(size * -1);
111
+ }
112
+ function slideAwayAnimation(size = 40) {
113
+ return slideAnimation(size);
114
114
  }
115
115
 
116
116
  class BackdropTrait {
@@ -297,31 +297,28 @@ class PositionTrait {
297
297
  const injector = floatingRef.container.injector;
298
298
  const dimWatcher = injector.get(DimensionWatcher);
299
299
  const rectWatcher = injector.get(RectWatcher);
300
- const dimWatches = {
301
- content: dimWatcher.watch(floatingRef.container, "border-box"),
302
- anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),
303
- placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef)
304
- };
305
- const sizeWatches = {
306
- minWidth: sizeWatcher(dimWatcher, "width", this.options.content.minWidth),
307
- maxWidth: sizeWatcher(dimWatcher, "width", this.options.content.maxWidth),
308
- minHeight: sizeWatcher(dimWatcher, "height", this.options.content.minHeight),
309
- maxHeight: sizeWatcher(dimWatcher, "height", this.options.content.maxHeight)
300
+ const constraints = this.options.content.constraints || {};
301
+ const constraintsWatches = {
302
+ minWidth: sizeWatcher(dimWatcher, "width", constraints.minWidth),
303
+ maxWidth: sizeWatcher(dimWatcher, "width", constraints.maxWidth),
304
+ minHeight: sizeWatcher(dimWatcher, "height", constraints.minHeight),
305
+ maxHeight: sizeWatcher(dimWatcher, "height", constraints.maxHeight)
310
306
  };
311
307
  const watches = {
312
- dims: combineLatest(dimWatches),
313
- size: combineLatest(sizeWatches)
308
+ content: dimWatcher.watch(floatingRef.container, "border-box"),
309
+ anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),
310
+ placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef),
311
+ constraints: combineLatest(constraintsWatches)
314
312
  };
315
- return (combineLatest(watches)
316
- // .pipe(distinctUntilChanged(isEqual))
317
- .subscribe(({ dims, size }) => {
318
- console.log(size);
313
+ return combineLatest(watches)
314
+ .pipe(distinctUntilChanged(isEqual))
315
+ .subscribe(dims => {
319
316
  const pos = floatingPosition({ dims, options: this.options });
320
317
  const floatingEl = floatingRef.container.nativeElement;
321
318
  Object.assign(floatingEl.style, floatingPositionToStyle(pos));
322
- Object.assign(floatingEl.style, sizesToStyle(pos, size));
319
+ Object.assign(floatingEl.style, constraintsToStyle(pos, dims.constraints));
323
320
  dest.next(pos);
324
- }));
321
+ });
325
322
  }).pipe(takeUntil(floatingRef.state.onExecute("disposing")));
326
323
  }
327
324
  }
@@ -348,7 +345,7 @@ function sizeWatcher(dimWatcher, prop, size) {
348
345
  }
349
346
  return of(NaN);
350
347
  }
351
- function sizesToStyle(pos, sizes) {
348
+ function constraintsToStyle(pos, sizes) {
352
349
  const { minWidth, maxWidth, minHeight, maxHeight } = sizes;
353
350
  const { width, height } = pos.placement.area;
354
351
  return {
@@ -1003,5 +1000,5 @@ function provideFloating(options = {}) {
1003
1000
  * Generated bundle index. Do not edit.
1004
1001
  */
1005
1002
 
1006
- export { AlwaysOnTop, AnimationTrait, AttributeTrait, BackdropRef, BackdropTrait, ChildRef, ComponentPortalRef, ContainerRef, DropAnimation, FadeAnimation, FallAnimation, FloatingComponentFactory, FloatingFactory, FloatingRef, FloatingService, FloatingTemplateFactory, FocusTrait, IndividualLayer, LAYER_CONTAINER_ZINDEX_START, LayerContainer, LayerService, PortalRef, PositionTrait, RootLayer, StyleTrait, TRAITS, TemplatePortalRef, attribute, backdrop, closeTrigger, dropAnimation, fadeAnimation, fallAnimation, focus, modal, position, provideFloating, style };
1003
+ export { AlwaysOnTop, AnimationTrait, AttributeTrait, BackdropRef, BackdropTrait, ChildRef, ComponentPortalRef, ContainerRef, FadeAnimation, FallAnimation, FloatingComponentFactory, FloatingFactory, FloatingRef, FloatingService, FloatingTemplateFactory, FocusTrait, IndividualLayer, LAYER_CONTAINER_ZINDEX_START, LayerContainer, LayerService, PortalRef, PositionTrait, RootLayer, StyleTrait, TRAITS, TemplatePortalRef, attribute, backdrop, closeTrigger, fadeAnimation, fallAnimation, focus, modal, position, provideFloating, slideAwayAnimation, slideNearAnimation, style };
1007
1004
  //# sourceMappingURL=ngutil-floating.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-floating.mjs","sources":["../../../../packages/floating/src/floating/traits/animation.ts","../../../../packages/floating/src/floating/traits/backdrop.ts","../../../../packages/floating/src/floating/traits/close-trigger.ts","../../../../packages/floating/src/floating/traits/focus.ts","../../../../packages/floating/src/floating/traits/position.ts","../../../../packages/floating/src/floating/traits/modal.ts","../../../../packages/floating/src/floating/traits/style.ts","../../../../packages/floating/src/floating/traits/attribute.ts","../../../../packages/floating/src/layer/child-ref.ts","../../../../packages/floating/src/layer/container-ref.ts","../../../../packages/floating/src/layer/backdrop-ref.ts","../../../../packages/floating/src/layer/external-ref.ts","../../../../packages/floating/src/layer/layer-container.ts","../../../../packages/floating/src/layer/portal-ref.ts","../../../../packages/floating/src/layer/layer.service.ts","../../../../packages/floating/src/floating/floating-ref.ts","../../../../packages/floating/src/floating/floating.service.ts","../../../../packages/floating/src/index.ts","../../../../packages/floating/src/ngutil-floating.ts"],"sourcesContent":["import { animate, AnimationBuilder, AnimationMetadata, AnimationOptions, style } from \"@angular/animations\"\n\nimport { map, Observable, Subscriber, switchMap, take, tap, timer } from \"rxjs\"\n\nimport { animationObservable } from \"@ngutil/graphics\"\nimport { alignmentToTransformOrigin, Duration, Ease, FloatingPosition } from \"@ngutil/style\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type AnimationSet = { show: AnimationMetadata[]; hide: AnimationMetadata[] }\n\n// https://tympanus.net/Development/ModalWindowEffects/\n\nconst timing = `${Duration.FastMs}ms ${Ease.Deceleration}`\n\nexport class AnimationTrait implements FloatingTrait<unknown> {\n readonly name = \"animation\"\n\n constructor(\n readonly animation: AnimationSet,\n readonly options?: AnimationOptions\n ) {}\n\n connect(floatingRef: FloatingRef): Observable<unknown> {\n return new Observable((dst: Subscriber<unknown>) => {\n const builder = floatingRef.container.injector.get(AnimationBuilder)\n const element = floatingRef.container.nativeElement\n const options = this.options || {}\n\n floatingRef.state.on(\"showing\", () =>\n animationParams(floatingRef, 0, options.params).pipe(\n switchMap(params =>\n animationObservable({\n builder,\n element,\n animation: this.animation.show,\n options: { ...options, params }\n })\n )\n )\n )\n floatingRef.state.on(\"disposing\", () =>\n animationParams(floatingRef, 0, options.params).pipe(\n switchMap(params =>\n animationObservable({\n builder,\n element,\n animation: this.animation.hide,\n options: { ...options, params }\n })\n ),\n tap(() => (element.style.display = \"none\"))\n )\n )\n floatingRef.state.on(\"disposing\", () => dst.complete())\n dst.next()\n })\n }\n}\n\nfunction animationParams(\n floatingRef: FloatingRef,\n delay: number,\n overrides: AnimationOptions[\"params\"]\n): Observable<AnimationOptions[\"params\"]> {\n const src =\n delay > 0\n ? timer(delay).pipe(switchMap(() => floatingRef.watchTrait<FloatingPosition>(\"position\")))\n : floatingRef.watchTrait<FloatingPosition>(\"position\")\n\n return src.pipe(\n take(1),\n map(position => {\n const origin = alignmentToTransformOrigin(position.content.link)\n return {\n origin,\n ...overrides\n }\n })\n )\n}\n\nexport const FallAnimation: AnimationSet = {\n show: [\n style({\n transform: \"scale(1.5)\",\n visibility: \"visible\",\n opacity: \"0\"\n }),\n animate(\n timing,\n style({\n transform: \"scale(1)\",\n opacity: \"1\"\n })\n )\n ],\n hide: [\n animate(\n timing,\n style({\n transform: \"scale(1.5)\",\n visibility: \"visible\",\n opacity: \"0\"\n })\n )\n ]\n}\n\nexport function fallAnimation(options?: AnimationOptions) {\n return new AnimationTrait(FallAnimation, options)\n}\n\nexport const FadeAnimation: AnimationSet = {\n show: [style({ opacity: 0 }), animate(timing, style({ opacity: 1 }))],\n hide: [animate(timing, style({ opacity: 0 }))]\n}\n\nexport function fadeAnimation(options?: AnimationOptions) {\n return new AnimationTrait(FadeAnimation, options)\n}\n\nexport const DropAnimation: AnimationSet = {\n show: [\n style({\n transform: \"translate({{ translateX }}, {{ translateY }})\",\n opacity: \"0\",\n transformOrigin: \"{{ origin }}\",\n visibility: \"visible\"\n }),\n animate(\n timing,\n style({\n opacity: \"1\",\n transform: \"scale(1, 1) translate(0px, 0px)\"\n })\n )\n ],\n hide: [\n animate(\n timing,\n style({ opacity: 0, transform: \"translate(calc({{ translateX }} * -1), calc({{ translateY }} * -1))\" })\n )\n ]\n}\n\nexport function dropAnimation(options?: AnimationOptions) {\n if (!options) {\n options = {}\n }\n\n if (!options.params) {\n options.params = {}\n } else {\n options.params = { ...options.params }\n }\n\n options.params[\"translateX\"] = \"0px\"\n options.params[\"translateY\"] = \"-40px\"\n\n return new AnimationTrait(DropAnimation, options)\n}\n","import { AnimationBuilder } from \"@angular/animations\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { animationObservable, CoverOptions } from \"@ngutil/graphics\"\n\nimport { BackdropRef } from \"../../layer\"\nimport { type FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\nimport { FadeAnimation } from \"./animation\"\n\ninterface CommonOptions {}\n\nexport type BackdropTraitOptions = CoverOptions & CommonOptions\n\nexport class BackdropTrait implements FloatingTrait<BackdropRef> {\n readonly name = \"backdrop\"\n\n constructor(readonly options: BackdropTraitOptions) {}\n\n connect(floatingRef: FloatingRef<any>): Observable<BackdropRef> {\n return new Observable((dest: Subscriber<BackdropRef>) => {\n const animationBuilder = floatingRef.container.injector.get(AnimationBuilder)\n const options = { ...this.options }\n const backdrop = floatingRef.layerSvc.newBackdrop(floatingRef.container, options)\n\n floatingRef.container.nativeElement.setAttribute(\"data-floating-has-backdrop\", \"true\")\n backdrop.nativeElement.setAttribute(\"data-floating-backdrop\", floatingRef.uid)\n\n backdrop.state.on(\"showing\", () =>\n animationObservable({\n builder: animationBuilder,\n element: backdrop.nativeElement,\n animation: FadeAnimation.show\n })\n )\n backdrop.state.on(\"disposing\", () =>\n animationObservable({\n builder: animationBuilder,\n element: backdrop.nativeElement,\n animation: FadeAnimation.hide\n })\n )\n\n backdrop.state.on(\"disposed\", () => dest.complete())\n\n floatingRef.state.on(\"disposing\", () => backdrop.dispose())\n\n dest.add(backdrop.show().subscribe())\n dest.next(backdrop)\n })\n }\n}\n\nexport function backdrop(options: BackdropTraitOptions) {\n return new BackdropTrait(options)\n}\n","import {\n distinctUntilChanged,\n exhaustMap,\n filter,\n from,\n fromEvent,\n map,\n Observable,\n ObservableInput,\n of,\n race\n} from \"rxjs\"\n\nimport { KeystrokeService } from \"@ngutil/aria\"\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport interface ClickOutsideOptions {\n /**\n * If clicks happened on this element, that not trigger the close event\n */\n allowedElements?: ElementInput[]\n}\n\nexport interface CloseTriggerOptions {\n /**\n * Close floating when click outside of floating element\n */\n clickOutside?: boolean | ClickOutsideOptions\n\n /**\n * Only works when the floating element is focused\n */\n keystroke?: boolean\n\n /**\n * Close when emitting any value\n */\n trigger?: ObservableInput<any>\n}\n\nexport interface CloseTriggerEvent {\n source: \"click\" | \"keystroke\" | \"backbutton\" | \"trigger\"\n}\n\nclass CloseTriggerTrait implements FloatingTrait {\n readonly name = \"close-trigger\"\n\n constructor(readonly options: CloseTriggerOptions = {}) {}\n\n connect(floatingRef: FloatingRef): Observable<CloseTriggerEvent | void> {\n const { keystroke, clickOutside, trigger } = this.options\n\n const container = floatingRef.container.nativeElement\n const triggers: Array<Observable<any>> = []\n const selfUid = Number(floatingRef.uid)\n\n if (keystroke) {\n const ks = floatingRef.container.injector.get(KeystrokeService)\n\n triggers.push(\n ks.watch(container, { key: \"Escape\", state: \"up\" }).pipe(\n map(() => {\n return { source: \"keystroke\" as const }\n })\n )\n )\n\n // TODO: angular auxiliary route\n }\n\n if (clickOutside) {\n const allowedElements =\n typeof clickOutside === \"boolean\" ? [] : clickOutside.allowedElements?.map(coerceElement) || []\n\n triggers.push(\n fromEvent(document, \"click\", { capture: true, passive: true }).pipe(\n filter(event => {\n if (!(event.target instanceof HTMLElement)) {\n return false\n }\n const target = event.target\n\n for (const allowed of allowedElements) {\n if (target === allowed || allowed.contains(target)) {\n return false\n }\n }\n\n const floatingUid = getFloatingUid(target, \"data-floating\", \"floating\")\n const backdropUid = getFloatingUid(target, \"data-floating-backdrop\", \"floatingBackdrop\")\n const otherBackdropUid =\n floatingUid != null && floatingUid !== selfUid\n ? getFloatingUid(\n document.querySelector(`[data-floating-backdrop=\"${floatingUid}\"]`),\n \"data-floating-backdrop\",\n \"floatingBackdrop\"\n )\n : undefined\n\n // console.log({ floatingUid, backdropUid, otherBackdropUid, self: selfUid })\n\n if (floatingUid == null && backdropUid == null) {\n return true\n } else {\n return (\n // click on self or erlier backdrop\n (backdropUid != null && backdropUid <= selfUid) ||\n // click on other floating element, whitout backdrop\n (floatingUid != null && otherBackdropUid == null && floatingUid < selfUid) ||\n // click on other floating element that opened erlier\n (floatingUid != null && floatingUid < selfUid)\n )\n }\n }),\n map(() => {\n return { source: \"click\" as const }\n })\n )\n )\n }\n\n if (trigger) {\n triggers.push(\n from(trigger).pipe(\n map(() => {\n return { source: \"trigger\" as const }\n })\n )\n )\n }\n\n if (triggers.length === 0) {\n return of()\n } else {\n return new Observable(dst =>\n floatingRef.state.on(\"shown\", () => {\n race(...triggers)\n .pipe(\n exhaustMap(event =>\n floatingRef.close().pipe(\n map(() => event),\n distinctUntilChanged()\n )\n )\n )\n .subscribe(dst)\n })\n )\n }\n }\n}\n\nexport function closeTrigger(options: CloseTriggerOptions = { clickOutside: true, keystroke: true }) {\n return new CloseTriggerTrait(options)\n}\n\nfunction getFloatingUid(el: HTMLElement | null, attr: string, dataset: string): number | undefined {\n if (el == null) {\n return undefined\n }\n\n if (el.matches(`[${attr}]`)) {\n return Number(el.dataset[dataset]) || undefined\n } else {\n const parent = el.closest(`[${attr}]`) as HTMLElement\n if (parent) {\n return Number(parent.dataset[dataset]) || undefined\n }\n }\n return undefined\n}\n","import { Observable } from \"rxjs\"\n\nimport { Focusable, FocusService, FocusState } from \"@ngutil/aria\"\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport interface FocusOptions {\n trap?: boolean\n connect?: Focusable | FocusState\n tabindex?: number\n focusOnClose?: ElementInput\n}\n\nexport class FocusTrait implements FloatingTrait<unknown> {\n readonly name = \"focus\"\n\n constructor(readonly options: FocusOptions) {}\n\n connect(floatingRef: FloatingRef): Observable<unknown> {\n return new Observable(dest => {\n const originallyFocused = document.activeElement as HTMLElement\n const svc = floatingRef.container.injector.get(FocusService)\n\n if (this.options.connect) {\n const tabindex = this.options.tabindex == null ? 0 : this.options.tabindex\n floatingRef.container.nativeElement.setAttribute(\"tabindex\", tabindex.toString())\n dest.add(this.options.connect.connect(floatingRef.container).subscribe())\n }\n\n if (this.options.trap) {\n dest.add(this.#trap(floatingRef, svc).subscribe())\n }\n\n floatingRef.state.on(\"disposing\", () => {\n const active = document.activeElement\n const floating = floatingRef.container.nativeElement\n if (active === floating || floating.contains(active)) {\n originallyFocused && document.contains(originallyFocused) && svc.focus(originallyFocused, \"program\")\n }\n dest.complete()\n })\n dest.next()\n })\n }\n\n #trap(floatingRef: FloatingRef, svc: FocusService) {\n return new Observable(() => {\n const trap = svc.focusTrap(floatingRef.container.nativeElement)\n\n floatingRef.state.on(\"shown\", () => {\n trap.focusInitialElement()\n })\n\n return () => {\n trap.destroy()\n }\n })\n }\n}\n\nexport function focus(options: FocusOptions) {\n return new FocusTrait(options)\n}\n","import { combineLatest, isObservable, map, Observable, of, Subscriber, switchMap, takeUntil } from \"rxjs\"\n\nimport { ElementInput, isElementInput } from \"@ngutil/common\"\nimport {\n Dimension,\n DimensionWatcher,\n floatingPosition,\n FloatingPosition,\n FloatingPositionAltInput,\n FloatingPositionAnchorOptions,\n FloatingPositionContentOptions,\n FloatingPositionPlacementOptions,\n floatingPositionToStyle,\n Rect,\n RectWatcher\n} from \"@ngutil/style\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type PositionTraitElementRef = ElementInput | Window | \"layer\" | \"viewport\"\n\nexport type PositionTraitOptions = {\n content?: FloatingPositionContentOptions & MinMaxSizes\n anchor?: FloatingPositionAnchorOptions & { ref: PositionTraitElementRef }\n placement?: FloatingPositionPlacementOptions & { ref: PositionTraitElementRef }\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\ntype SizeInput = number | ElementInput | Observable<number> | Observable<ElementInput>\ninterface MinMaxSizes {\n minWidth?: SizeInput\n maxWidth?: SizeInput\n minHeight?: SizeInput\n maxHeight?: SizeInput\n}\n\ntype Watches = {\n content: Observable<Dimension>\n anchor: Observable<Rect>\n placement: Observable<Rect>\n}\n\ntype SizeWatches = {\n minWidth: Observable<number>\n maxWidth: Observable<number>\n minHeight: Observable<number>\n maxHeight: Observable<number>\n}\n\ninterface MinMaxSizesResult {\n minWidth: number\n maxWidth: number\n minHeight: number\n maxHeight: number\n}\n\nexport class PositionTrait implements FloatingTrait<FloatingPosition> {\n readonly name = \"position\"\n\n readonly options: Required<PositionTraitOptions>\n\n constructor(options: PositionTraitOptions) {\n const cloned = { ...options }\n\n if (!cloned.placement) {\n cloned.placement = { ref: \"viewport\" }\n }\n\n if (!cloned.anchor) {\n cloned.anchor = { ref: cloned.placement.ref, link: \"center middle\" }\n }\n\n if (!cloned.content) {\n cloned.content = { link: \"center middle\" }\n }\n\n this.options = cloned as any\n }\n\n connect(floatingRef: FloatingRef<any>): Observable<FloatingPosition> {\n return new Observable((dest: Subscriber<FloatingPosition>) => {\n const injector = floatingRef.container.injector\n const dimWatcher = injector.get(DimensionWatcher)\n const rectWatcher = injector.get(RectWatcher)\n\n const dimWatches: Watches = {\n content: dimWatcher.watch(floatingRef.container, \"border-box\"),\n anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),\n placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef)\n }\n\n const sizeWatches: SizeWatches = {\n minWidth: sizeWatcher(dimWatcher, \"width\", this.options.content.minWidth),\n maxWidth: sizeWatcher(dimWatcher, \"width\", this.options.content.maxWidth),\n minHeight: sizeWatcher(dimWatcher, \"height\", this.options.content.minHeight),\n maxHeight: sizeWatcher(dimWatcher, \"height\", this.options.content.maxHeight)\n }\n\n const watches = {\n dims: combineLatest(dimWatches),\n size: combineLatest(sizeWatches)\n }\n\n return (\n combineLatest(watches)\n // .pipe(distinctUntilChanged(isEqual))\n .subscribe(({ dims, size }) => {\n console.log(size)\n const pos = floatingPosition({ dims, options: this.options })\n const floatingEl = floatingRef.container.nativeElement\n Object.assign(floatingEl.style, floatingPositionToStyle(pos))\n Object.assign(floatingEl.style, sizesToStyle(pos, size))\n dest.next(pos)\n })\n )\n }).pipe(takeUntil(floatingRef.state.onExecute(\"disposing\")))\n }\n}\n\nfunction refWatcher(rectWatcher: RectWatcher, ref: PositionTraitElementRef, floatingRef: FloatingRef<any>) {\n if (ref === \"layer\") {\n return rectWatcher.watch(floatingRef.layerSvc.root, \"border-box\")\n } else if (ref === \"viewport\" || ref instanceof Window) {\n return rectWatcher.watch(window, \"border-box\")\n } else {\n return rectWatcher.watch(ref, \"border-box\")\n }\n}\n\nfunction sizeWatcher(dimWatcher: DimensionWatcher, prop: \"width\" | \"height\", size?: SizeInput): Observable<number> {\n if (typeof size === \"number\") {\n return of(size)\n } else if (isElementInput(size)) {\n return dimWatcher.watch(size, \"border-box\").pipe(map(value => value[prop]))\n } else if (isObservable(size)) {\n return (size as Observable<number | ElementInput>).pipe(\n switchMap(value => sizeWatcher(dimWatcher, prop, value))\n )\n }\n return of(NaN)\n}\n\nfunction sizesToStyle(pos: FloatingPosition, sizes: MinMaxSizesResult): Partial<CSSStyleDeclaration> {\n const { minWidth, maxWidth, minHeight, maxHeight } = sizes\n const { width, height } = pos.placement.area\n return {\n minWidth: isNaN(minWidth) ? \"auto\" : `${Math.min(width, minWidth)}px`,\n minHeight: isNaN(minHeight) ? \"auto\" : `${Math.min(height, minHeight)}px`,\n maxWidth: isNaN(maxWidth) ? `${width}px` : `${Math.min(width, maxWidth)}px`,\n maxHeight: isNaN(maxHeight) ? `${height}px` : `${Math.min(height, maxHeight)}px`\n }\n}\n\nexport function position(options: PositionTraitOptions) {\n return new PositionTrait(options)\n}\n","import { fallAnimation } from \"./animation\"\nimport { backdrop } from \"./backdrop\"\nimport { closeTrigger } from \"./close-trigger\"\nimport { focus } from \"./focus\"\nimport { position } from \"./position\"\n\nexport function modal() {\n return [\n position({\n anchor: {\n ref: \"viewport\",\n link: \"center middle\"\n },\n placement: {\n ref: \"viewport\",\n padding: \"16px\"\n }\n }),\n backdrop({ type: \"solid\", color: \"rgba(0, 0, 0, .3)\" }),\n focus({ trap: true }),\n closeTrigger(),\n fallAnimation()\n ]\n}\n","import { Observable, of } from \"rxjs\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport class StyleTrait implements FloatingTrait<Partial<CSSStyleDeclaration>> {\n readonly name = \"style\"\n\n constructor(readonly styles: Partial<CSSStyleDeclaration>) {}\n\n connect(floatingRef: FloatingRef): Observable<Partial<CSSStyleDeclaration>> {\n Object.assign(floatingRef.container.nativeElement.style, this.styles)\n return of(this.styles)\n }\n}\n\nexport function style(styles: Partial<CSSStyleDeclaration>) {\n return new StyleTrait(styles)\n}\n","import { Observable, of } from \"rxjs\"\n\nimport { Primitive } from \"utility-types\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type Attributes = { [key: string]: Primitive } | { dataset: { [key: string]: Primitive } }\n\nexport class AttributeTrait implements FloatingTrait<Attributes> {\n readonly name = \"attribute\"\n\n constructor(readonly attrs: Attributes) {}\n\n connect(floatingRef: FloatingRef): Observable<Attributes> {\n const el = floatingRef.container.nativeElement\n\n for (const [k, v] of Object.entries(this.attrs)) {\n if (k === \"dataset\") {\n v && Object.assign(el.dataset, v)\n } else if (v == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, v.toString())\n }\n }\n\n return of(this.attrs)\n }\n}\n\nexport function attribute(attrs: Attributes) {\n return new AttributeTrait(attrs)\n}\n","import { ElementRef } from \"@angular/core\"\n\nimport { filter, Observable, of, share, take } from \"rxjs\"\n\nimport { Lifecycle } from \"@ngutil/common\"\n\nexport type DisposeHandler<T> = (ref: T) => Observable<void>\n\nexport enum AlwaysOnTop {\n /**\n * Display as open order\n */\n None = 0,\n\n /**\n * Modals\n */\n Modal = 2,\n\n /**\n * User access control\n */\n UAC = 3,\n\n /**\n * Toast...\n */\n Toast = 4,\n\n /**\n * Like select drop down, tooltip, stb...\n */\n Control = 5\n}\n\n// TODO: disposing, disposed\n\nexport abstract class ChildRef<T extends HTMLElement = HTMLElement> extends ElementRef<T> {\n readonly state = new Lifecycle({\n showing: {},\n shown: {},\n disposing: { cancellable: false },\n disposed: { cancellable: false, order: \"sequential\" }\n })\n\n /**\n * @internal\n */\n set zIndex(val: number) {\n if (this._zIndex !== val) {\n this._zIndex = val\n this.nativeElement.style.zIndex = String(val)\n }\n }\n get zIndex(): number {\n return this._zIndex\n }\n private _zIndex: number = -1\n\n protected readonly disposed$ = this.state.current$.pipe(\n filter(state => state === \"disposed\"),\n take(1),\n share()\n )\n\n constructor(\n nativeElement: T,\n public readonly alwaysOnTop: AlwaysOnTop = AlwaysOnTop.None\n ) {\n super(nativeElement)\n this.state.on(\"disposed\", () => {\n this.nativeElement.parentElement?.removeChild(this.nativeElement)\n this.state.destroy()\n delete (this as any).state\n })\n }\n\n dispose() {\n if (this.state == null) {\n return of()\n }\n return this.state.run([\"disposing\", \"disposed\"])\n }\n}\n","import { Injector, Provider } from \"@angular/core\"\n\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\n\nexport interface ContainerOptions {\n alwaysOnTop?: AlwaysOnTop\n elevation?: number\n classes?: string[]\n attributes?: Record<string, string>\n injector?: Injector\n providers?: Provider[]\n}\n\nexport class ContainerRef extends ChildRef {\n public readonly injector: Injector\n\n protected injectorName = \"ContainerRef\"\n\n constructor(public readonly options: ContainerOptions) {\n super(createElement(options), options.alwaysOnTop || AlwaysOnTop.None)\n\n const providers = options.providers || []\n this.injector = Injector.create({\n providers: [...this.getProviders(), ...providers],\n parent: options.injector,\n name: this.injectorName\n })\n\n this.state.on(\"disposed\", () => {\n delete (this as any).options\n delete (this as any).injector\n })\n }\n\n protected getProviders(): Provider[] {\n return [\n { provide: ChildRef, useValue: this },\n { provide: ContainerRef, useValue: this }\n ]\n }\n}\n\nfunction createElement(options: ContainerOptions): HTMLDivElement {\n const div = document.createElement(\"div\")\n div.style.position = \"absolute\"\n div.style.top = \"0\"\n div.style.left = \"0\"\n div.style.width = \"max-content\"\n div.style.display = \"inline-flex\"\n div.style.flexDirection = \"column\"\n div.style.alignItems = \"stretch\"\n div.style.justifyContent = \"stretch\"\n div.style.boxSizing = \"border-box\"\n\n if (options.classes) {\n div.classList.add(...options.classes)\n }\n\n return div\n}\n","import { takeUntil } from \"rxjs\"\n\nimport { CoverRef } from \"@ngutil/graphics\"\nimport { CoverOptions } from \"@ngutil/graphics\"\n\nimport { ChildRef } from \"./child-ref\"\n\nexport type BackdropOptions = CoverOptions\n\nexport class BackdropRef extends ChildRef {\n readonly group: string\n\n set visible(visible: boolean) {\n if (this.#visible !== visible) {\n this.#visible = visible\n this.nativeElement.style.visibility = visible ? \"visible\" : \"hidden\"\n }\n }\n\n get visible(): boolean {\n return this.#visible\n }\n #visible: boolean = false\n\n constructor(\n readonly coverRef: CoverRef<any>,\n readonly under: ChildRef,\n readonly options: CoverOptions\n ) {\n super(coverRef.nativeElement)\n\n this.group = `${options.color === \"transparent\" ? \"transparent\" : \"solid\"}`\n\n this.state.on(\"showing\", () => {\n this.coverRef\n .show()\n .pipe(takeUntil(this.state.onDone(\"disposed\")))\n .subscribe(() => {\n this.visible = true\n })\n })\n }\n\n show() {\n return this.state.run(\"showing\", \"shown\")\n }\n}\n","import { ChildRef } from \"./child-ref\"\n\nexport class ExternalRef extends ChildRef {}\n","import { DOCUMENT } from \"@angular/common\"\nimport { Directive, ElementRef, inject, Injectable, InjectionToken } from \"@angular/core\"\n\nimport { toSorted } from \"@ngutil/common\"\n\nimport { BackdropRef } from \"./backdrop-ref\"\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\n\nexport const LAYER_CONTAINER_ZINDEX_START = new InjectionToken<number>(\"LAYER_CONTAINER_ZINDEX_START\")\n\n@Directive()\nexport abstract class LayerContainer {\n abstract readonly root: HTMLElement\n\n readonly #children: Array<ChildRef> = []\n readonly zIndexStart: number = inject(LAYER_CONTAINER_ZINDEX_START)\n\n append<T extends ChildRef>(ref: T): T {\n if (!this.#children.includes(ref)) {\n this.#children.push(ref)\n this.#update()\n this.root.appendChild(ref.nativeElement)\n ref.state.on(\"disposing\", () => this.#remove(ref))\n }\n return ref\n }\n\n #remove(ref: ChildRef) {\n const idx = this.#children.indexOf(ref)\n if (idx > -1) {\n this.#children.splice(idx, 1)\n this.#update()\n }\n }\n\n #update() {\n const children = toSorted(this.#children, sortChildren2)\n\n let zIndex = this.zIndexStart\n for (const child of children) {\n child.zIndex = zIndex\n zIndex += 1\n }\n\n children.sort(sortByZIndexDesc)\n\n let hasBackdrop = false\n for (const child of children) {\n if (child instanceof BackdropRef && child.options.color !== \"transparent\") {\n child.visible = !hasBackdrop\n hasBackdrop = true\n }\n }\n }\n}\n\n@Injectable()\nexport class RootLayer extends LayerContainer {\n readonly root = inject(DOCUMENT).body\n}\n\n@Directive({\n standalone: true,\n providers: [{ provide: LayerContainer, useExisting: IndividualLayer }]\n})\nexport class IndividualLayer extends LayerContainer {\n readonly root = inject(ElementRef).nativeElement\n}\n\nfunction sortChildren2(a: ChildRef, b: ChildRef) {\n const alwaysOnTop = sortByAlwaysOnTop(a, b)\n if (alwaysOnTop === 0) {\n return sortByBackdrop(a, b)\n } else {\n return alwaysOnTop\n }\n}\n\nfunction sortByBackdrop(a: ChildRef, b: ChildRef) {\n if (a instanceof BackdropRef && a.under === b) {\n return -1\n } else if (b instanceof BackdropRef && b.under === a) {\n return 1\n }\n return 0\n}\n\nfunction sortByZIndexDesc(a: ChildRef, b: ChildRef) {\n return b.zIndex - a.zIndex\n}\n\nfunction sortByAlwaysOnTop(a: ChildRef, b: ChildRef) {\n return getAlwaysOnTop(a) - getAlwaysOnTop(b)\n}\n\nfunction getAlwaysOnTop(child: ChildRef): number {\n if (child instanceof BackdropRef) {\n return child.under.alwaysOnTop || AlwaysOnTop.None\n } else {\n return child.alwaysOnTop || AlwaysOnTop.None\n }\n}\n","import { ComponentPortal, ComponentType, DomPortalOutlet, PortalOutlet, TemplatePortal } from \"@angular/cdk/portal\"\nimport { ComponentFactoryResolver, Provider, TemplateRef, ViewContainerRef } from \"@angular/core\"\n\nimport { ContainerOptions, ContainerRef } from \"./container-ref\"\n\nexport interface PortalOptions extends ContainerOptions {}\n\nexport abstract class PortalRef extends ContainerRef {\n protected override injectorName = \"PortalRef\"\n protected outlet: PortalOutlet\n\n constructor(options: PortalOptions) {\n super(options)\n\n this.outlet = new DomPortalOutlet(this.nativeElement, undefined, undefined, this.injector)\n this.state.on(\"disposed\", () => {\n this.outlet.dispose()\n delete (this as any).outlet\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: PortalRef, useValue: this }]\n }\n}\n\nexport interface ComponentPortalOptions<T = any> extends PortalOptions {\n viewContainerRef?: ViewContainerRef\n}\n\nexport class ComponentPortalRef<T = any> extends PortalRef {\n protected override injectorName = \"ComponentPortalRef\"\n protected readonly portal: ComponentPortal<T>\n\n constructor(\n public readonly component: ComponentType<T>,\n options: ComponentPortalOptions<T>\n ) {\n super(options)\n\n const resolver = this.injector.get(ComponentFactoryResolver)\n const vcr = this.injector.get(ViewContainerRef)\n\n this.portal = new ComponentPortal(component, options.viewContainerRef || vcr, this.injector, resolver)\n this.outlet.attach(this.portal)\n\n this.state.on(\"disposed\", () => {\n this.portal.isAttached && this.portal.detach()\n delete (this as any).portal\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: ComponentPortalRef, useValue: this }]\n }\n}\n\nexport interface TemplatePortalOptions<T = any> extends PortalOptions {\n viewContainerRef: ViewContainerRef\n context?: T\n}\n\nexport class TemplatePortalRef<T = any> extends PortalRef {\n protected override injectorName = \"TemplatePortalRef\"\n protected readonly portal: TemplatePortal<T>\n\n constructor(\n public readonly template: TemplateRef<T>,\n options: TemplatePortalOptions<T>\n ) {\n super(options)\n this.portal = new TemplatePortal(template, options.viewContainerRef, options.context)\n this.outlet.attach(this.portal)\n\n this.state.on(\"disposed\", () => {\n this.portal.isAttached && this.portal.detach()\n delete (this as any).portal\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: TemplatePortalRef, useValue: this }]\n }\n}\n","import { ComponentType } from \"@angular/cdk/portal\"\nimport { ApplicationRef, inject, Injectable, Injector, TemplateRef, ViewContainerRef } from \"@angular/core\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { CoverService } from \"@ngutil/graphics\"\n\nimport { BackdropOptions, BackdropRef } from \"./backdrop-ref\"\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\nimport { ContainerOptions, ContainerRef } from \"./container-ref\"\nimport { ExternalRef } from \"./external-ref\"\nimport { LayerContainer } from \"./layer-container\"\nimport { ComponentPortalOptions, ComponentPortalRef, TemplatePortalOptions, TemplatePortalRef } from \"./portal-ref\"\n\n// TODO: ELEVATION_STEP config with injection\n// TODO: ELEVATION_START config with injection\n\n@Injectable()\nexport class LayerService {\n readonly #container = inject(LayerContainer)\n readonly #cover = inject(CoverService)\n readonly #injector = inject(Injector)\n readonly #appRef = inject(ApplicationRef)\n\n get root() {\n return this.#container.root\n }\n\n newComponentPortal<T>(component: ComponentType<T>, options: ComponentPortalOptions<T>): ComponentPortalRef<T> {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new ComponentPortalRef(component, options))\n }\n\n newTemplatePortal<T>(tpl: TemplateRef<T>, options: TemplatePortalOptions<T>): TemplatePortalRef<T> {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new TemplatePortalRef(tpl, options))\n }\n\n newContainer(options: ContainerOptions): ContainerRef {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new ContainerRef(options))\n }\n\n newBackdrop(under: ChildRef, options: BackdropOptions): BackdropRef {\n const coverRef = this.#cover.create(this.root, options)\n return this.#container.append(new BackdropRef(coverRef, under, options))\n }\n\n addExternal(element: ElementInput, alwaysOnTop: AlwaysOnTop = AlwaysOnTop.None) {\n return this.#container.append(new ExternalRef(coerceElement(element), alwaysOnTop))\n }\n\n #getInjector() {\n try {\n this.#injector.get(ViewContainerRef)\n return this.#injector\n // eslint-disable-next-line no-empty\n } catch (err) {}\n\n const root = this.#appRef.components[0]\n if (root == null) {\n throw new Error(\"Root component not found\")\n }\n\n return root.injector\n }\n}\n","import { Inject, Injectable, InjectionToken } from \"@angular/core\"\n\nimport {\n combineLatest,\n debounceTime,\n EMPTY,\n filter,\n map,\n Observable,\n ReplaySubject,\n shareReplay,\n startWith,\n take,\n takeUntil,\n takeWhile\n} from \"rxjs\"\n\nimport { Lifecycle } from \"@ngutil/common\"\n\nimport { ContainerRef } from \"../layer/container-ref\"\nimport { LayerService } from \"../layer/layer.service\"\nimport { FloatingTrait } from \"./traits/_base\"\n\nexport type Traits = { [key: string]: FloatingTrait }\n\nexport const TRAITS = new InjectionToken<Traits>(\"TRAITS\")\n\nexport interface FloatingChannel {\n floatingRef: FloatingRef\n type: string\n data?: any\n}\n\nexport interface FloatingTraitEvent {\n name: string\n data: object\n}\n\ntype TraitState = { [key: string]: FloatingTraitEvent | null }\n\nlet UID_COUNTER = 0\n\n@Injectable()\nexport class FloatingRef<C extends FloatingChannel = FloatingChannel, T extends HTMLElement = HTMLElement> {\n readonly channel = new ReplaySubject<FloatingChannel>(1)\n\n readonly state = new Lifecycle({\n init: {},\n showing: {},\n shown: {},\n closing: { cancellable: false, order: \"sequential\" },\n disposing: { cancellable: false },\n disposed: { cancellable: false, order: \"sequential\" },\n cleanup: { cancellable: false, order: \"sequential\" }\n })\n\n readonly #traits: Traits = {}\n readonly traitState$: Observable<TraitState>\n\n readonly #untilCleanup = this.state.onExecute(\"cleanup\")\n readonly #untilDisposed = this.state.onExecute(\"disposed\")\n\n readonly uid = `${++UID_COUNTER}`\n\n constructor(\n readonly layerSvc: LayerService,\n readonly container: ContainerRef,\n @Inject(TRAITS) traits: Traits\n ) {\n Object.assign(container.nativeElement.style, {\n overflow: \"hidden\",\n visibility: \"hidden\",\n pointerEvents: \"none\"\n })\n container.nativeElement.setAttribute(\"data-floating\", this.uid)\n\n this.#traits = traits\n this.traitState$ = this.#traitState().pipe(shareReplay(1))\n\n this.state.current$.pipe(takeWhile(state => state !== \"cleanup\", true)).subscribe(state => {\n this.emit({ type: state } as C)\n })\n this.state.on(\"init\", () => this.traitState$.pipe(takeUntil(this.#untilCleanup), debounceTime(5), take(1)))\n this.state.on(\"showing\", () => {\n container.nativeElement.style.visibility = \"visible\"\n })\n this.state.on(\"shown\", () => {\n container.nativeElement.style.pointerEvents = null as any\n })\n this.state.on(\"disposing\", () => {\n container.nativeElement.style.pointerEvents = \"none\"\n })\n\n this.state.control(container.state)\n }\n\n show() {\n return this.state.run(\"init\", \"showing\", \"shown\")\n }\n\n /**\n * @deprecated\n */\n hide() {\n return this.close(true)\n }\n\n close(force = false) {\n if (force) {\n return this.state.run(\"disposing\", \"disposed\", \"cleanup\")\n } else {\n return this.state.run(\"closing\", \"disposing\", \"disposed\", \"cleanup\")\n }\n }\n\n emit(event: Omit<C, \"floatingRef\">) {\n this.channel.next({ ...event, floatingRef: this } as any)\n }\n\n setResult(data: any) {\n this.emit({ type: \"result\", data } as C)\n this.close(true).subscribe()\n }\n\n watchTrait<T>(name: string): Observable<T> {\n return this.traitState$.pipe(\n takeUntil(this.#untilDisposed),\n map(state => state[name]),\n filter(value => value != null)\n ) as Observable<T>\n }\n\n #traitState(): Observable<TraitState> {\n const src: { [key: string]: Observable<FloatingTraitEvent | null> } = {}\n\n for (const [k, v] of Object.entries(this.#traits)) {\n src[k] = v.connect(this).pipe(takeUntil(this.#untilDisposed), startWith(null))\n }\n\n if (Object.keys(src).length === 0) {\n return EMPTY\n } else {\n return combineLatest(src).pipe(shareReplay(1))\n }\n }\n}\n","import { ComponentType } from \"@angular/cdk/portal\"\nimport { inject, Injectable, Provider, TemplateRef } from \"@angular/core\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { LayerService } from \"../layer/layer.service\"\nimport { ComponentPortalOptions, TemplatePortalOptions } from \"../layer/portal-ref\"\nimport { FloatingChannel, FloatingRef, TRAITS } from \"./floating-ref\"\nimport { type FloatingTrait } from \"./traits/_base\"\nimport { position, type PositionTraitOptions } from \"./traits/position\"\n\nexport type FloatingTraitInput = FloatingTrait | Array<FloatingTraitInput>\n\nexport abstract class FloatingFactory {\n protected readonly traits: { [key: string]: FloatingTrait } = {}\n\n #providers: Provider[] = []\n\n constructor(protected readonly floatingSvc: FloatingService) {}\n\n trait(...traits: Array<FloatingTraitInput>) {\n for (const trait of traits) {\n if (Array.isArray(trait)) {\n this.trait(...trait)\n } else {\n this.traits[trait.name] = trait\n }\n }\n\n return this\n }\n\n show(): Observable<FloatingChannel> {\n return new Observable((dest: Subscriber<FloatingChannel>) => {\n let disposing = false\n\n const ref = this.create()\n const channelSub = ref.channel.subscribe(event => {\n dest.next(event)\n if (event.type === \"disposing\") {\n disposing = true\n }\n if (event.type === \"cleanup\") {\n dest.complete()\n }\n })\n\n const showSub = ref.show().subscribe()\n\n return () => {\n showSub.unsubscribe()\n channelSub.unsubscribe()\n if (!disposing) {\n ref.hide().subscribe()\n }\n }\n })\n }\n\n subscribe: Observable<FloatingChannel>[\"subscribe\"] = (...args: any[]) => this.show().subscribe(...args)\n\n protected providers(providers?: Provider[]): Provider[] {\n if (!providers) {\n providers = []\n }\n\n providers = [\n ...providers,\n { provide: TRAITS, useValue: this.traits },\n { provide: LayerService, useValue: this.floatingSvc.layer },\n { provide: FloatingService, useValue: this.floatingSvc },\n FloatingRef,\n ...this.#providers\n ]\n\n return providers\n }\n\n protected abstract create(): FloatingRef<FloatingChannel>\n\n position(options: PositionTraitOptions) {\n return this.trait(position(options))\n }\n\n provides(providers: Provider | Provider[]) {\n if (Array.isArray(providers)) {\n this.#providers = [...this.#providers, ...providers]\n } else {\n this.#providers = [...this.#providers, providers]\n }\n return this\n }\n}\n\nexport class FloatingTemplateFactory<T extends object> extends FloatingFactory {\n constructor(\n floatingSvc: FloatingService,\n public readonly tpl: TemplateRef<T>,\n public readonly options: TemplatePortalOptions<T>\n ) {\n super(floatingSvc)\n }\n\n protected override create(): FloatingRef<FloatingChannel> {\n const options: TemplatePortalOptions<T> = { ...this.options }\n options.providers = this.providers(options.providers)\n const container = this.floatingSvc.layer.newTemplatePortal(this.tpl, options)\n return container.injector.get(FloatingRef)\n }\n}\n\nexport class FloatingComponentFactory<T extends ComponentType<any>> extends FloatingFactory {\n constructor(\n floatingSvc: FloatingService,\n public readonly component: T,\n public readonly options: ComponentPortalOptions<T>\n ) {\n super(floatingSvc)\n }\n\n protected override create(): FloatingRef<FloatingChannel> {\n const options: ComponentPortalOptions<T> = { ...this.options }\n options.providers = this.providers(options.providers)\n const container = this.floatingSvc.layer.newComponentPortal(this.component, options)\n return container.injector.get(FloatingRef)\n }\n}\n\n/**\n * @example\n * ```typescript\n * class SomeComponent {}\n *\n * class SomeList {\n * readonly floating = inject(FloatingService)\n *\n * showComponent() {\n * this.floating.from(SomeComponent).traits(position(), backdrop()).subscribe()\n * }\n * ```\n */\n@Injectable()\nexport class FloatingService {\n readonly layer = inject(LayerService)\n // readonly parent = inject(FloatingRef, { skipSelf: true, optional: true })\n\n from<T extends ComponentType<any>>(component: T, opts?: ComponentPortalOptions<T>): FloatingComponentFactory<T>\n\n from<T extends object>(tpl: TemplateRef<T>, opts?: TemplatePortalOptions<T>): FloatingTemplateFactory<T>\n\n from<T>(value: ComponentType<T> | TemplateRef<T>, opts: any): FloatingFactory {\n if (value instanceof TemplateRef) {\n return new FloatingTemplateFactory(this, value as any, opts)\n } else {\n return new FloatingComponentFactory(this, value as any, opts)\n }\n }\n}\n","import { Provider } from \"@angular/core\"\n\nimport { FloatingService } from \"./floating\"\nimport { LAYER_CONTAINER_ZINDEX_START, LayerContainer, LayerService, RootLayer } from \"./layer\"\n\nexport * from \"./floating\"\nexport * from \"./layer\"\n\nexport interface ProvideFloatingOptions {\n zIndexStart?: number\n}\n\nconst DEFAULTS: ProvideFloatingOptions = {\n zIndexStart: 10000\n}\n\nexport function provideFloating(options: ProvideFloatingOptions = {}): Provider[] {\n const opts = { ...DEFAULTS, ...options }\n return [\n { provide: LAYER_CONTAINER_ZINDEX_START, useValue: opts.zIndexStart },\n { provide: LayerContainer, useClass: RootLayer },\n LayerService,\n FloatingService\n ]\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["style"],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-floating.mjs","sources":["../../../../packages/floating/src/floating/traits/animation.ts","../../../../packages/floating/src/floating/traits/backdrop.ts","../../../../packages/floating/src/floating/traits/close-trigger.ts","../../../../packages/floating/src/floating/traits/focus.ts","../../../../packages/floating/src/floating/traits/position.ts","../../../../packages/floating/src/floating/traits/modal.ts","../../../../packages/floating/src/floating/traits/style.ts","../../../../packages/floating/src/floating/traits/attribute.ts","../../../../packages/floating/src/layer/child-ref.ts","../../../../packages/floating/src/layer/container-ref.ts","../../../../packages/floating/src/layer/backdrop-ref.ts","../../../../packages/floating/src/layer/external-ref.ts","../../../../packages/floating/src/layer/layer-container.ts","../../../../packages/floating/src/layer/portal-ref.ts","../../../../packages/floating/src/layer/layer.service.ts","../../../../packages/floating/src/floating/floating-ref.ts","../../../../packages/floating/src/floating/floating.service.ts","../../../../packages/floating/src/index.ts","../../../../packages/floating/src/ngutil-floating.ts"],"sourcesContent":["import { animate, AnimationBuilder, AnimationMetadata, style } from \"@angular/animations\"\n\nimport { map, Observable, of, Subscriber, switchMap, take, tap } from \"rxjs\"\n\nimport { animationObservable } from \"@ngutil/graphics\"\nimport { Duration, Ease, FloatingPosition, FloatingPositionDirection, floatingPositionDirection } from \"@ngutil/style\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type AnimationSet = { show: AnimationMetadata[]; hide: AnimationMetadata[] }\n\n// https://tympanus.net/Development/ModalWindowEffects/\n\nconst timing = `${Duration.FastMs}ms ${Ease.Deceleration}`\n\nexport type AnimationTraitParams = (position: FloatingPosition) => object\n\nexport class AnimationTrait implements FloatingTrait<unknown> {\n readonly name = \"animation\"\n\n constructor(\n readonly animation: AnimationSet,\n readonly params?: AnimationTraitParams\n ) {}\n\n connect(floatingRef: FloatingRef): Observable<unknown> {\n return new Observable((dst: Subscriber<unknown>) => {\n const builder = floatingRef.container.injector.get(AnimationBuilder)\n const element = floatingRef.container.nativeElement\n\n floatingRef.state.on(\"showing\", () =>\n animationParams(floatingRef, this.params).pipe(\n switchMap(params =>\n animationObservable({\n builder,\n element,\n animation: this.animation.show,\n options: { params }\n })\n )\n )\n )\n floatingRef.state.on(\"disposing\", () =>\n animationParams(floatingRef, this.params).pipe(\n switchMap(params =>\n animationObservable({\n builder,\n element,\n animation: this.animation.hide,\n options: { params }\n })\n ),\n tap(() => (element.style.display = \"none\"))\n )\n )\n floatingRef.state.on(\"disposing\", () => dst.complete())\n dst.next()\n })\n }\n}\n\nfunction animationParams(floatingRef: FloatingRef, params?: AnimationTraitParams): Observable<object> {\n if (params == null) {\n return of({})\n }\n\n return floatingRef.watchTrait<FloatingPosition>(\"position\").pipe(take(1), map(params))\n}\n\nexport const FallAnimation: AnimationSet = {\n show: [\n style({\n transform: \"scale({{ scale }})\",\n visibility: \"visible\",\n opacity: \"0\"\n }),\n animate(\n timing,\n style({\n transform: \"scale(1)\",\n opacity: \"1\"\n })\n )\n ],\n hide: [\n animate(\n timing,\n style({\n transform: \"scale({{ scale }})\",\n visibility: \"visible\",\n opacity: \"0\"\n })\n )\n ]\n}\n\nexport function fallAnimation(scale: number = 1.5) {\n return new AnimationTrait(FallAnimation, () => {\n return { scale }\n })\n}\n\nexport const FadeAnimation: AnimationSet = {\n show: [style({ opacity: 0 }), animate(timing, style({ opacity: 1 }))],\n hide: [animate(timing, style({ opacity: 0 }))]\n}\n\nexport function fadeAnimation() {\n return new AnimationTrait(FadeAnimation)\n}\n\nconst SlideAnimation: AnimationSet = {\n show: [\n style({\n transform: \"translate({{ tx }}, {{ ty }})\",\n opacity: \"0\",\n // transformOrigin: \"{{ origin }}\",\n visibility: \"visible\"\n }),\n animate(\n timing,\n style({\n opacity: \"1\",\n transform: \"translate(0px, 0px)\"\n })\n )\n ],\n hide: [animate(timing, style({ opacity: 0, transform: \"translate(calc({{ tx }} * -1), calc({{ ty }} * -1))\" }))]\n}\n\nconst SlideAnimationParams: { [K in FloatingPositionDirection]: { tx: number; ty: number } } = {\n center: { tx: 0, ty: 0 },\n up: { tx: 0, ty: 1 },\n down: { tx: 0, ty: -1 },\n left: { tx: 1, ty: 0 },\n right: { tx: -1, ty: 0 }\n}\n\nfunction slideAnimation(size: number) {\n return new AnimationTrait(SlideAnimation, position => {\n const direction = floatingPositionDirection(position)\n const { tx, ty } = SlideAnimationParams[direction]\n return { tx: `${tx * size}px`, ty: `${ty * size}px` }\n })\n}\n\nexport function slideNearAnimation(size: number = 40) {\n return slideAnimation(size * -1)\n}\n\nexport function slideAwayAnimation(size: number = 40) {\n return slideAnimation(size)\n}\n","import { AnimationBuilder } from \"@angular/animations\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { animationObservable, CoverOptions } from \"@ngutil/graphics\"\n\nimport { BackdropRef } from \"../../layer\"\nimport { type FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\nimport { FadeAnimation } from \"./animation\"\n\ninterface CommonOptions {}\n\nexport type BackdropTraitOptions = CoverOptions & CommonOptions\n\nexport class BackdropTrait implements FloatingTrait<BackdropRef> {\n readonly name = \"backdrop\"\n\n constructor(readonly options: BackdropTraitOptions) {}\n\n connect(floatingRef: FloatingRef<any>): Observable<BackdropRef> {\n return new Observable((dest: Subscriber<BackdropRef>) => {\n const animationBuilder = floatingRef.container.injector.get(AnimationBuilder)\n const options = { ...this.options }\n const backdrop = floatingRef.layerSvc.newBackdrop(floatingRef.container, options)\n\n floatingRef.container.nativeElement.setAttribute(\"data-floating-has-backdrop\", \"true\")\n backdrop.nativeElement.setAttribute(\"data-floating-backdrop\", floatingRef.uid)\n\n backdrop.state.on(\"showing\", () =>\n animationObservable({\n builder: animationBuilder,\n element: backdrop.nativeElement,\n animation: FadeAnimation.show\n })\n )\n backdrop.state.on(\"disposing\", () =>\n animationObservable({\n builder: animationBuilder,\n element: backdrop.nativeElement,\n animation: FadeAnimation.hide\n })\n )\n\n backdrop.state.on(\"disposed\", () => dest.complete())\n\n floatingRef.state.on(\"disposing\", () => backdrop.dispose())\n\n dest.add(backdrop.show().subscribe())\n dest.next(backdrop)\n })\n }\n}\n\nexport function backdrop(options: BackdropTraitOptions) {\n return new BackdropTrait(options)\n}\n","import {\n distinctUntilChanged,\n exhaustMap,\n filter,\n from,\n fromEvent,\n map,\n Observable,\n ObservableInput,\n of,\n race\n} from \"rxjs\"\n\nimport { KeystrokeService } from \"@ngutil/aria\"\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport interface ClickOutsideOptions {\n /**\n * If clicks happened on this element, that not trigger the close event\n */\n allowedElements?: ElementInput[]\n}\n\nexport interface CloseTriggerOptions {\n /**\n * Close floating when click outside of floating element\n */\n clickOutside?: boolean | ClickOutsideOptions\n\n /**\n * Only works when the floating element is focused\n */\n keystroke?: boolean\n\n /**\n * Close when emitting any value\n */\n trigger?: ObservableInput<any>\n}\n\nexport interface CloseTriggerEvent {\n source: \"click\" | \"keystroke\" | \"backbutton\" | \"trigger\"\n}\n\nclass CloseTriggerTrait implements FloatingTrait {\n readonly name = \"close-trigger\"\n\n constructor(readonly options: CloseTriggerOptions = {}) {}\n\n connect(floatingRef: FloatingRef): Observable<CloseTriggerEvent | void> {\n const { keystroke, clickOutside, trigger } = this.options\n\n const container = floatingRef.container.nativeElement\n const triggers: Array<Observable<any>> = []\n const selfUid = Number(floatingRef.uid)\n\n if (keystroke) {\n const ks = floatingRef.container.injector.get(KeystrokeService)\n\n triggers.push(\n ks.watch(container, { key: \"Escape\", state: \"up\" }).pipe(\n map(() => {\n return { source: \"keystroke\" as const }\n })\n )\n )\n\n // TODO: angular auxiliary route\n }\n\n if (clickOutside) {\n const allowedElements =\n typeof clickOutside === \"boolean\" ? [] : clickOutside.allowedElements?.map(coerceElement) || []\n\n triggers.push(\n fromEvent(document, \"click\", { capture: true, passive: true }).pipe(\n filter(event => {\n if (!(event.target instanceof HTMLElement)) {\n return false\n }\n const target = event.target\n\n for (const allowed of allowedElements) {\n if (target === allowed || allowed.contains(target)) {\n return false\n }\n }\n\n const floatingUid = getFloatingUid(target, \"data-floating\", \"floating\")\n const backdropUid = getFloatingUid(target, \"data-floating-backdrop\", \"floatingBackdrop\")\n const otherBackdropUid =\n floatingUid != null && floatingUid !== selfUid\n ? getFloatingUid(\n document.querySelector(`[data-floating-backdrop=\"${floatingUid}\"]`),\n \"data-floating-backdrop\",\n \"floatingBackdrop\"\n )\n : undefined\n\n // console.log({ floatingUid, backdropUid, otherBackdropUid, self: selfUid })\n\n if (floatingUid == null && backdropUid == null) {\n return true\n } else {\n return (\n // click on self or erlier backdrop\n (backdropUid != null && backdropUid <= selfUid) ||\n // click on other floating element, whitout backdrop\n (floatingUid != null && otherBackdropUid == null && floatingUid < selfUid) ||\n // click on other floating element that opened erlier\n (floatingUid != null && floatingUid < selfUid)\n )\n }\n }),\n map(() => {\n return { source: \"click\" as const }\n })\n )\n )\n }\n\n if (trigger) {\n triggers.push(\n from(trigger).pipe(\n map(() => {\n return { source: \"trigger\" as const }\n })\n )\n )\n }\n\n if (triggers.length === 0) {\n return of()\n } else {\n return new Observable(dst =>\n floatingRef.state.on(\"shown\", () => {\n race(...triggers)\n .pipe(\n exhaustMap(event =>\n floatingRef.close().pipe(\n map(() => event),\n distinctUntilChanged()\n )\n )\n )\n .subscribe(dst)\n })\n )\n }\n }\n}\n\nexport function closeTrigger(options: CloseTriggerOptions = { clickOutside: true, keystroke: true }) {\n return new CloseTriggerTrait(options)\n}\n\nfunction getFloatingUid(el: HTMLElement | null, attr: string, dataset: string): number | undefined {\n if (el == null) {\n return undefined\n }\n\n if (el.matches(`[${attr}]`)) {\n return Number(el.dataset[dataset]) || undefined\n } else {\n const parent = el.closest(`[${attr}]`) as HTMLElement\n if (parent) {\n return Number(parent.dataset[dataset]) || undefined\n }\n }\n return undefined\n}\n","import { Observable } from \"rxjs\"\n\nimport { Focusable, FocusService, FocusState } from \"@ngutil/aria\"\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport interface FocusOptions {\n trap?: boolean\n connect?: Focusable | FocusState\n tabindex?: number\n focusOnClose?: ElementInput\n}\n\nexport class FocusTrait implements FloatingTrait<unknown> {\n readonly name = \"focus\"\n\n constructor(readonly options: FocusOptions) {}\n\n connect(floatingRef: FloatingRef): Observable<unknown> {\n return new Observable(dest => {\n const originallyFocused = document.activeElement as HTMLElement\n const svc = floatingRef.container.injector.get(FocusService)\n\n if (this.options.connect) {\n const tabindex = this.options.tabindex == null ? 0 : this.options.tabindex\n floatingRef.container.nativeElement.setAttribute(\"tabindex\", tabindex.toString())\n dest.add(this.options.connect.connect(floatingRef.container).subscribe())\n }\n\n if (this.options.trap) {\n dest.add(this.#trap(floatingRef, svc).subscribe())\n }\n\n floatingRef.state.on(\"disposing\", () => {\n const active = document.activeElement\n const floating = floatingRef.container.nativeElement\n if (active === floating || floating.contains(active)) {\n originallyFocused && document.contains(originallyFocused) && svc.focus(originallyFocused, \"program\")\n }\n dest.complete()\n })\n dest.next()\n })\n }\n\n #trap(floatingRef: FloatingRef, svc: FocusService) {\n return new Observable(() => {\n const trap = svc.focusTrap(floatingRef.container.nativeElement)\n\n floatingRef.state.on(\"shown\", () => {\n trap.focusInitialElement()\n })\n\n return () => {\n trap.destroy()\n }\n })\n }\n}\n\nexport function focus(options: FocusOptions) {\n return new FocusTrait(options)\n}\n","import {\n combineLatest,\n distinctUntilChanged,\n isObservable,\n map,\n Observable,\n of,\n Subscriber,\n switchMap,\n takeUntil\n} from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { ElementInput, isElementInput } from \"@ngutil/common\"\nimport {\n Dimension,\n DimensionWatcher,\n floatingPosition,\n FloatingPosition,\n FloatingPositionAltInput,\n FloatingPositionAnchorOptions,\n FloatingPositionContentOptions,\n FloatingPositionDims,\n FloatingPositionPlacementOptions,\n floatingPositionToStyle,\n Rect,\n RectWatcher\n} from \"@ngutil/style\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type PositionTraitElementRef = ElementInput | Window | \"layer\" | \"viewport\"\n\nexport type PositionTraitOptions = {\n content?: Omit<FloatingPositionContentOptions, \"constraints\"> & { constraints?: SizeConstraintsInput }\n anchor?: FloatingPositionAnchorOptions & { ref: PositionTraitElementRef }\n placement?: FloatingPositionPlacementOptions & { ref: PositionTraitElementRef }\n horizontalAlt?: FloatingPositionAltInput\n verticalAlt?: FloatingPositionAltInput\n}\n\n/**\n * Width ot height input values\n *\n * - `number`: excact value\n * - `ElementInput`: element reference, and take the dimension from it\n * - `link`: take the dimension from the anchor element and only apply on connection dimension.\n * eg.: `anchor.link = \"left bottom\"` and `content.link = \"left top\"`, in this case only width will be applied.\n */\ntype SizeInputConst = number | ElementInput\ntype SizeInput = SizeInputConst | Observable<SizeInputConst>\n\ninterface SizeConstraintsInput {\n minWidth?: SizeInput\n maxWidth?: SizeInput\n minHeight?: SizeInput\n maxHeight?: SizeInput\n}\n\ntype SizeConstraints = NonNullable<FloatingPositionDims[\"constraints\"]>\n\ntype Watches = {\n content: Observable<Dimension>\n anchor: Observable<Rect>\n placement: Observable<Rect>\n constraints: Observable<ConstraintsResult>\n}\n\ntype ConstraintWatches = { [K in keyof SizeConstraints]-?: Observable<NonNullable<SizeConstraints[K]>> }\ntype ConstraintsResult = Required<SizeConstraints>\n\nexport class PositionTrait implements FloatingTrait<FloatingPosition> {\n readonly name = \"position\"\n\n readonly options: Required<PositionTraitOptions>\n\n constructor(options: PositionTraitOptions) {\n const cloned = { ...options }\n\n if (!cloned.placement) {\n cloned.placement = { ref: \"viewport\" }\n }\n\n if (!cloned.anchor) {\n cloned.anchor = { ref: cloned.placement.ref, link: \"center middle\" }\n }\n\n if (!cloned.content) {\n cloned.content = { link: \"center middle\" }\n }\n\n this.options = cloned as any\n }\n\n connect(floatingRef: FloatingRef<any>): Observable<FloatingPosition> {\n return new Observable((dest: Subscriber<FloatingPosition>) => {\n const injector = floatingRef.container.injector\n const dimWatcher = injector.get(DimensionWatcher)\n const rectWatcher = injector.get(RectWatcher)\n\n const constraints = this.options.content.constraints || {}\n const constraintsWatches: ConstraintWatches = {\n minWidth: sizeWatcher(dimWatcher, \"width\", constraints.minWidth),\n maxWidth: sizeWatcher(dimWatcher, \"width\", constraints.maxWidth),\n minHeight: sizeWatcher(dimWatcher, \"height\", constraints.minHeight),\n maxHeight: sizeWatcher(dimWatcher, \"height\", constraints.maxHeight)\n }\n\n const watches: Watches = {\n content: dimWatcher.watch(floatingRef.container, \"border-box\"),\n anchor: refWatcher(rectWatcher, this.options.anchor.ref, floatingRef),\n placement: refWatcher(rectWatcher, this.options.placement.ref, floatingRef),\n constraints: combineLatest(constraintsWatches)\n }\n\n return combineLatest(watches)\n .pipe(distinctUntilChanged(isEqual))\n .subscribe(dims => {\n const pos = floatingPosition({ dims, options: this.options })\n const floatingEl = floatingRef.container.nativeElement\n Object.assign(floatingEl.style, floatingPositionToStyle(pos))\n Object.assign(floatingEl.style, constraintsToStyle(pos, dims.constraints))\n dest.next(pos)\n })\n }).pipe(takeUntil(floatingRef.state.onExecute(\"disposing\")))\n }\n}\n\nfunction refWatcher(rectWatcher: RectWatcher, ref: PositionTraitElementRef, floatingRef: FloatingRef<any>) {\n if (ref === \"layer\") {\n return rectWatcher.watch(floatingRef.layerSvc.root, \"border-box\")\n } else if (ref === \"viewport\" || ref instanceof Window) {\n return rectWatcher.watch(window, \"border-box\")\n } else {\n return rectWatcher.watch(ref, \"border-box\")\n }\n}\n\nfunction sizeWatcher(dimWatcher: DimensionWatcher, prop: \"width\" | \"height\", size?: SizeInput): Observable<number> {\n if (typeof size === \"number\") {\n return of(size)\n } else if (isElementInput(size)) {\n return dimWatcher.watch(size, \"border-box\").pipe(map(value => value[prop]))\n } else if (isObservable(size)) {\n return (size as Observable<number | ElementInput>).pipe(\n switchMap(value => sizeWatcher(dimWatcher, prop, value))\n )\n }\n return of(NaN)\n}\n\nfunction constraintsToStyle(pos: FloatingPosition, sizes: ConstraintsResult): Partial<CSSStyleDeclaration> {\n const { minWidth, maxWidth, minHeight, maxHeight } = sizes\n const { width, height } = pos.placement.area\n return {\n minWidth: isNaN(minWidth) ? \"auto\" : `${Math.min(width, minWidth)}px`,\n minHeight: isNaN(minHeight) ? \"auto\" : `${Math.min(height, minHeight)}px`,\n maxWidth: isNaN(maxWidth) ? `${width}px` : `${Math.min(width, maxWidth)}px`,\n maxHeight: isNaN(maxHeight) ? `${height}px` : `${Math.min(height, maxHeight)}px`\n }\n}\n\nexport function position(options: PositionTraitOptions) {\n return new PositionTrait(options)\n}\n","import { fallAnimation } from \"./animation\"\nimport { backdrop } from \"./backdrop\"\nimport { closeTrigger } from \"./close-trigger\"\nimport { focus } from \"./focus\"\nimport { position } from \"./position\"\n\nexport function modal() {\n return [\n position({\n anchor: {\n ref: \"viewport\",\n link: \"center middle\"\n },\n placement: {\n ref: \"viewport\",\n padding: \"16px\"\n }\n }),\n backdrop({ type: \"solid\", color: \"rgba(0, 0, 0, .3)\" }),\n focus({ trap: true }),\n closeTrigger(),\n fallAnimation()\n ]\n}\n","import { Observable, of } from \"rxjs\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport class StyleTrait implements FloatingTrait<Partial<CSSStyleDeclaration>> {\n readonly name = \"style\"\n\n constructor(readonly styles: Partial<CSSStyleDeclaration>) {}\n\n connect(floatingRef: FloatingRef): Observable<Partial<CSSStyleDeclaration>> {\n Object.assign(floatingRef.container.nativeElement.style, this.styles)\n return of(this.styles)\n }\n}\n\nexport function style(styles: Partial<CSSStyleDeclaration>) {\n return new StyleTrait(styles)\n}\n","import { Observable, of } from \"rxjs\"\n\nimport { Primitive } from \"utility-types\"\n\nimport { FloatingRef } from \"../floating-ref\"\nimport { FloatingTrait } from \"./_base\"\n\nexport type Attributes = { [key: string]: Primitive } | { dataset: { [key: string]: Primitive } }\n\nexport class AttributeTrait implements FloatingTrait<Attributes> {\n readonly name = \"attribute\"\n\n constructor(readonly attrs: Attributes) {}\n\n connect(floatingRef: FloatingRef): Observable<Attributes> {\n const el = floatingRef.container.nativeElement\n\n for (const [k, v] of Object.entries(this.attrs)) {\n if (k === \"dataset\") {\n v && Object.assign(el.dataset, v)\n } else if (v == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, v.toString())\n }\n }\n\n return of(this.attrs)\n }\n}\n\nexport function attribute(attrs: Attributes) {\n return new AttributeTrait(attrs)\n}\n","import { ElementRef } from \"@angular/core\"\n\nimport { filter, Observable, of, share, take } from \"rxjs\"\n\nimport { Lifecycle } from \"@ngutil/common\"\n\nexport type DisposeHandler<T> = (ref: T) => Observable<void>\n\nexport enum AlwaysOnTop {\n /**\n * Display as open order\n */\n None = 0,\n\n /**\n * Modals\n */\n Modal = 2,\n\n /**\n * User access control\n */\n UAC = 3,\n\n /**\n * Toast...\n */\n Toast = 4,\n\n /**\n * Like select drop down, tooltip, stb...\n */\n Control = 5\n}\n\n// TODO: disposing, disposed\n\nexport abstract class ChildRef<T extends HTMLElement = HTMLElement> extends ElementRef<T> {\n readonly state = new Lifecycle({\n showing: {},\n shown: {},\n disposing: { cancellable: false },\n disposed: { cancellable: false, order: \"sequential\" }\n })\n\n /**\n * @internal\n */\n set zIndex(val: number) {\n if (this._zIndex !== val) {\n this._zIndex = val\n this.nativeElement.style.zIndex = String(val)\n }\n }\n get zIndex(): number {\n return this._zIndex\n }\n private _zIndex: number = -1\n\n protected readonly disposed$ = this.state.current$.pipe(\n filter(state => state === \"disposed\"),\n take(1),\n share()\n )\n\n constructor(\n nativeElement: T,\n public readonly alwaysOnTop: AlwaysOnTop = AlwaysOnTop.None\n ) {\n super(nativeElement)\n this.state.on(\"disposed\", () => {\n this.nativeElement.parentElement?.removeChild(this.nativeElement)\n this.state.destroy()\n delete (this as any).state\n })\n }\n\n dispose() {\n if (this.state == null) {\n return of()\n }\n return this.state.run([\"disposing\", \"disposed\"])\n }\n}\n","import { Injector, Provider } from \"@angular/core\"\n\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\n\nexport interface ContainerOptions {\n alwaysOnTop?: AlwaysOnTop\n elevation?: number\n classes?: string[]\n attributes?: Record<string, string>\n injector?: Injector\n providers?: Provider[]\n}\n\nexport class ContainerRef extends ChildRef {\n public readonly injector: Injector\n\n protected injectorName = \"ContainerRef\"\n\n constructor(public readonly options: ContainerOptions) {\n super(createElement(options), options.alwaysOnTop || AlwaysOnTop.None)\n\n const providers = options.providers || []\n this.injector = Injector.create({\n providers: [...this.getProviders(), ...providers],\n parent: options.injector,\n name: this.injectorName\n })\n\n this.state.on(\"disposed\", () => {\n delete (this as any).options\n delete (this as any).injector\n })\n }\n\n protected getProviders(): Provider[] {\n return [\n { provide: ChildRef, useValue: this },\n { provide: ContainerRef, useValue: this }\n ]\n }\n}\n\nfunction createElement(options: ContainerOptions): HTMLDivElement {\n const div = document.createElement(\"div\")\n div.style.position = \"absolute\"\n div.style.top = \"0\"\n div.style.left = \"0\"\n div.style.width = \"max-content\"\n div.style.display = \"inline-flex\"\n div.style.flexDirection = \"column\"\n div.style.alignItems = \"stretch\"\n div.style.justifyContent = \"stretch\"\n div.style.boxSizing = \"border-box\"\n\n if (options.classes) {\n div.classList.add(...options.classes)\n }\n\n return div\n}\n","import { takeUntil } from \"rxjs\"\n\nimport { CoverRef } from \"@ngutil/graphics\"\nimport { CoverOptions } from \"@ngutil/graphics\"\n\nimport { ChildRef } from \"./child-ref\"\n\nexport type BackdropOptions = CoverOptions\n\nexport class BackdropRef extends ChildRef {\n readonly group: string\n\n set visible(visible: boolean) {\n if (this.#visible !== visible) {\n this.#visible = visible\n this.nativeElement.style.visibility = visible ? \"visible\" : \"hidden\"\n }\n }\n\n get visible(): boolean {\n return this.#visible\n }\n #visible: boolean = false\n\n constructor(\n readonly coverRef: CoverRef<any>,\n readonly under: ChildRef,\n readonly options: CoverOptions\n ) {\n super(coverRef.nativeElement)\n\n this.group = `${options.color === \"transparent\" ? \"transparent\" : \"solid\"}`\n\n this.state.on(\"showing\", () => {\n this.coverRef\n .show()\n .pipe(takeUntil(this.state.onDone(\"disposed\")))\n .subscribe(() => {\n this.visible = true\n })\n })\n }\n\n show() {\n return this.state.run(\"showing\", \"shown\")\n }\n}\n","import { ChildRef } from \"./child-ref\"\n\nexport class ExternalRef extends ChildRef {}\n","import { DOCUMENT } from \"@angular/common\"\nimport { Directive, ElementRef, inject, Injectable, InjectionToken } from \"@angular/core\"\n\nimport { toSorted } from \"@ngutil/common\"\n\nimport { BackdropRef } from \"./backdrop-ref\"\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\n\nexport const LAYER_CONTAINER_ZINDEX_START = new InjectionToken<number>(\"LAYER_CONTAINER_ZINDEX_START\")\n\n@Directive()\nexport abstract class LayerContainer {\n abstract readonly root: HTMLElement\n\n readonly #children: Array<ChildRef> = []\n readonly zIndexStart: number = inject(LAYER_CONTAINER_ZINDEX_START)\n\n append<T extends ChildRef>(ref: T): T {\n if (!this.#children.includes(ref)) {\n this.#children.push(ref)\n this.#update()\n this.root.appendChild(ref.nativeElement)\n ref.state.on(\"disposing\", () => this.#remove(ref))\n }\n return ref\n }\n\n #remove(ref: ChildRef) {\n const idx = this.#children.indexOf(ref)\n if (idx > -1) {\n this.#children.splice(idx, 1)\n this.#update()\n }\n }\n\n #update() {\n const children = toSorted(this.#children, sortChildren2)\n\n let zIndex = this.zIndexStart\n for (const child of children) {\n child.zIndex = zIndex\n zIndex += 1\n }\n\n children.sort(sortByZIndexDesc)\n\n let hasBackdrop = false\n for (const child of children) {\n if (child instanceof BackdropRef && child.options.color !== \"transparent\") {\n child.visible = !hasBackdrop\n hasBackdrop = true\n }\n }\n }\n}\n\n@Injectable()\nexport class RootLayer extends LayerContainer {\n readonly root = inject(DOCUMENT).body\n}\n\n@Directive({\n standalone: true,\n providers: [{ provide: LayerContainer, useExisting: IndividualLayer }]\n})\nexport class IndividualLayer extends LayerContainer {\n readonly root = inject(ElementRef).nativeElement\n}\n\nfunction sortChildren2(a: ChildRef, b: ChildRef) {\n const alwaysOnTop = sortByAlwaysOnTop(a, b)\n if (alwaysOnTop === 0) {\n return sortByBackdrop(a, b)\n } else {\n return alwaysOnTop\n }\n}\n\nfunction sortByBackdrop(a: ChildRef, b: ChildRef) {\n if (a instanceof BackdropRef && a.under === b) {\n return -1\n } else if (b instanceof BackdropRef && b.under === a) {\n return 1\n }\n return 0\n}\n\nfunction sortByZIndexDesc(a: ChildRef, b: ChildRef) {\n return b.zIndex - a.zIndex\n}\n\nfunction sortByAlwaysOnTop(a: ChildRef, b: ChildRef) {\n return getAlwaysOnTop(a) - getAlwaysOnTop(b)\n}\n\nfunction getAlwaysOnTop(child: ChildRef): number {\n if (child instanceof BackdropRef) {\n return child.under.alwaysOnTop || AlwaysOnTop.None\n } else {\n return child.alwaysOnTop || AlwaysOnTop.None\n }\n}\n","import { ComponentPortal, ComponentType, DomPortalOutlet, PortalOutlet, TemplatePortal } from \"@angular/cdk/portal\"\nimport { ComponentFactoryResolver, Provider, TemplateRef, ViewContainerRef } from \"@angular/core\"\n\nimport { ContainerOptions, ContainerRef } from \"./container-ref\"\n\nexport interface PortalOptions extends ContainerOptions {}\n\nexport abstract class PortalRef extends ContainerRef {\n protected override injectorName = \"PortalRef\"\n protected outlet: PortalOutlet\n\n constructor(options: PortalOptions) {\n super(options)\n\n this.outlet = new DomPortalOutlet(this.nativeElement, undefined, undefined, this.injector)\n this.state.on(\"disposed\", () => {\n this.outlet.dispose()\n delete (this as any).outlet\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: PortalRef, useValue: this }]\n }\n}\n\nexport interface ComponentPortalOptions<T = any> extends PortalOptions {\n viewContainerRef?: ViewContainerRef\n}\n\nexport class ComponentPortalRef<T = any> extends PortalRef {\n protected override injectorName = \"ComponentPortalRef\"\n protected readonly portal: ComponentPortal<T>\n\n constructor(\n public readonly component: ComponentType<T>,\n options: ComponentPortalOptions<T>\n ) {\n super(options)\n\n const resolver = this.injector.get(ComponentFactoryResolver)\n const vcr = this.injector.get(ViewContainerRef)\n\n this.portal = new ComponentPortal(component, options.viewContainerRef || vcr, this.injector, resolver)\n this.outlet.attach(this.portal)\n\n this.state.on(\"disposed\", () => {\n this.portal.isAttached && this.portal.detach()\n delete (this as any).portal\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: ComponentPortalRef, useValue: this }]\n }\n}\n\nexport interface TemplatePortalOptions<T = any> extends PortalOptions {\n viewContainerRef: ViewContainerRef\n context?: T\n}\n\nexport class TemplatePortalRef<T = any> extends PortalRef {\n protected override injectorName = \"TemplatePortalRef\"\n protected readonly portal: TemplatePortal<T>\n\n constructor(\n public readonly template: TemplateRef<T>,\n options: TemplatePortalOptions<T>\n ) {\n super(options)\n this.portal = new TemplatePortal(template, options.viewContainerRef, options.context)\n this.outlet.attach(this.portal)\n\n this.state.on(\"disposed\", () => {\n this.portal.isAttached && this.portal.detach()\n delete (this as any).portal\n })\n }\n\n protected override getProviders(): Provider[] {\n return [...super.getProviders(), { provide: TemplatePortalRef, useValue: this }]\n }\n}\n","import { ComponentType } from \"@angular/cdk/portal\"\nimport { ApplicationRef, inject, Injectable, Injector, TemplateRef, ViewContainerRef } from \"@angular/core\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { CoverService } from \"@ngutil/graphics\"\n\nimport { BackdropOptions, BackdropRef } from \"./backdrop-ref\"\nimport { AlwaysOnTop, ChildRef } from \"./child-ref\"\nimport { ContainerOptions, ContainerRef } from \"./container-ref\"\nimport { ExternalRef } from \"./external-ref\"\nimport { LayerContainer } from \"./layer-container\"\nimport { ComponentPortalOptions, ComponentPortalRef, TemplatePortalOptions, TemplatePortalRef } from \"./portal-ref\"\n\n// TODO: ELEVATION_STEP config with injection\n// TODO: ELEVATION_START config with injection\n\n@Injectable()\nexport class LayerService {\n readonly #container = inject(LayerContainer)\n readonly #cover = inject(CoverService)\n readonly #injector = inject(Injector)\n readonly #appRef = inject(ApplicationRef)\n\n get root() {\n return this.#container.root\n }\n\n newComponentPortal<T>(component: ComponentType<T>, options: ComponentPortalOptions<T>): ComponentPortalRef<T> {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new ComponentPortalRef(component, options))\n }\n\n newTemplatePortal<T>(tpl: TemplateRef<T>, options: TemplatePortalOptions<T>): TemplatePortalRef<T> {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new TemplatePortalRef(tpl, options))\n }\n\n newContainer(options: ContainerOptions): ContainerRef {\n if (!options.injector) {\n options = { ...options, injector: this.#getInjector() }\n }\n return this.#container.append(new ContainerRef(options))\n }\n\n newBackdrop(under: ChildRef, options: BackdropOptions): BackdropRef {\n const coverRef = this.#cover.create(this.root, options)\n return this.#container.append(new BackdropRef(coverRef, under, options))\n }\n\n addExternal(element: ElementInput, alwaysOnTop: AlwaysOnTop = AlwaysOnTop.None) {\n return this.#container.append(new ExternalRef(coerceElement(element), alwaysOnTop))\n }\n\n #getInjector() {\n try {\n this.#injector.get(ViewContainerRef)\n return this.#injector\n // eslint-disable-next-line no-empty\n } catch (err) {}\n\n const root = this.#appRef.components[0]\n if (root == null) {\n throw new Error(\"Root component not found\")\n }\n\n return root.injector\n }\n}\n","import { Inject, Injectable, InjectionToken } from \"@angular/core\"\n\nimport {\n combineLatest,\n debounceTime,\n EMPTY,\n filter,\n map,\n Observable,\n ReplaySubject,\n shareReplay,\n startWith,\n take,\n takeUntil,\n takeWhile\n} from \"rxjs\"\n\nimport { Lifecycle } from \"@ngutil/common\"\n\nimport { ContainerRef } from \"../layer/container-ref\"\nimport { LayerService } from \"../layer/layer.service\"\nimport { FloatingTrait } from \"./traits/_base\"\n\nexport type Traits = { [key: string]: FloatingTrait }\n\nexport const TRAITS = new InjectionToken<Traits>(\"TRAITS\")\n\nexport interface FloatingChannel {\n floatingRef: FloatingRef\n type: string\n data?: any\n}\n\nexport interface FloatingTraitEvent {\n name: string\n data: object\n}\n\ntype TraitState = { [key: string]: FloatingTraitEvent | null }\n\nlet UID_COUNTER = 0\n\n@Injectable()\nexport class FloatingRef<C extends FloatingChannel = FloatingChannel, T extends HTMLElement = HTMLElement> {\n readonly channel = new ReplaySubject<FloatingChannel>(1)\n\n readonly state = new Lifecycle({\n init: {},\n showing: {},\n shown: {},\n closing: { cancellable: false, order: \"sequential\" },\n disposing: { cancellable: false },\n disposed: { cancellable: false, order: \"sequential\" },\n cleanup: { cancellable: false, order: \"sequential\" }\n })\n\n readonly #traits: Traits = {}\n readonly traitState$: Observable<TraitState>\n\n readonly #untilCleanup = this.state.onExecute(\"cleanup\")\n readonly #untilDisposed = this.state.onExecute(\"disposed\")\n\n readonly uid = `${++UID_COUNTER}`\n\n constructor(\n readonly layerSvc: LayerService,\n readonly container: ContainerRef,\n @Inject(TRAITS) traits: Traits\n ) {\n Object.assign(container.nativeElement.style, {\n overflow: \"hidden\",\n visibility: \"hidden\",\n pointerEvents: \"none\"\n })\n container.nativeElement.setAttribute(\"data-floating\", this.uid)\n\n this.#traits = traits\n this.traitState$ = this.#traitState().pipe(shareReplay(1))\n\n this.state.current$.pipe(takeWhile(state => state !== \"cleanup\", true)).subscribe(state => {\n this.emit({ type: state } as C)\n })\n this.state.on(\"init\", () => this.traitState$.pipe(takeUntil(this.#untilCleanup), debounceTime(5), take(1)))\n this.state.on(\"showing\", () => {\n container.nativeElement.style.visibility = \"visible\"\n })\n this.state.on(\"shown\", () => {\n container.nativeElement.style.pointerEvents = null as any\n })\n this.state.on(\"disposing\", () => {\n container.nativeElement.style.pointerEvents = \"none\"\n })\n\n this.state.control(container.state)\n }\n\n show() {\n return this.state.run(\"init\", \"showing\", \"shown\")\n }\n\n /**\n * @deprecated\n */\n hide() {\n return this.close(true)\n }\n\n close(force = false) {\n if (force) {\n return this.state.run(\"disposing\", \"disposed\", \"cleanup\")\n } else {\n return this.state.run(\"closing\", \"disposing\", \"disposed\", \"cleanup\")\n }\n }\n\n emit(event: Omit<C, \"floatingRef\">) {\n this.channel.next({ ...event, floatingRef: this } as any)\n }\n\n setResult(data: any) {\n this.emit({ type: \"result\", data } as C)\n this.close(true).subscribe()\n }\n\n watchTrait<T>(name: string): Observable<T> {\n return this.traitState$.pipe(\n takeUntil(this.#untilDisposed),\n map(state => state[name]),\n filter(value => value != null)\n ) as Observable<T>\n }\n\n #traitState(): Observable<TraitState> {\n const src: { [key: string]: Observable<FloatingTraitEvent | null> } = {}\n\n for (const [k, v] of Object.entries(this.#traits)) {\n src[k] = v.connect(this).pipe(takeUntil(this.#untilDisposed), startWith(null))\n }\n\n if (Object.keys(src).length === 0) {\n return EMPTY\n } else {\n return combineLatest(src).pipe(shareReplay(1))\n }\n }\n}\n","import { ComponentType } from \"@angular/cdk/portal\"\nimport { inject, Injectable, Provider, TemplateRef } from \"@angular/core\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { LayerService } from \"../layer/layer.service\"\nimport { ComponentPortalOptions, TemplatePortalOptions } from \"../layer/portal-ref\"\nimport { FloatingChannel, FloatingRef, TRAITS } from \"./floating-ref\"\nimport { type FloatingTrait } from \"./traits/_base\"\nimport { position, type PositionTraitOptions } from \"./traits/position\"\n\nexport type FloatingTraitInput = FloatingTrait | Array<FloatingTraitInput>\n\nexport abstract class FloatingFactory {\n protected readonly traits: { [key: string]: FloatingTrait } = {}\n\n #providers: Provider[] = []\n\n constructor(protected readonly floatingSvc: FloatingService) {}\n\n trait(...traits: Array<FloatingTraitInput>) {\n for (const trait of traits) {\n if (Array.isArray(trait)) {\n this.trait(...trait)\n } else {\n this.traits[trait.name] = trait\n }\n }\n\n return this\n }\n\n show(): Observable<FloatingChannel> {\n return new Observable((dest: Subscriber<FloatingChannel>) => {\n let disposing = false\n\n const ref = this.create()\n const channelSub = ref.channel.subscribe(event => {\n dest.next(event)\n if (event.type === \"disposing\") {\n disposing = true\n }\n if (event.type === \"cleanup\") {\n dest.complete()\n }\n })\n\n const showSub = ref.show().subscribe()\n\n return () => {\n showSub.unsubscribe()\n channelSub.unsubscribe()\n if (!disposing) {\n ref.hide().subscribe()\n }\n }\n })\n }\n\n subscribe: Observable<FloatingChannel>[\"subscribe\"] = (...args: any[]) => this.show().subscribe(...args)\n\n protected providers(providers?: Provider[]): Provider[] {\n if (!providers) {\n providers = []\n }\n\n providers = [\n ...providers,\n { provide: TRAITS, useValue: this.traits },\n { provide: LayerService, useValue: this.floatingSvc.layer },\n { provide: FloatingService, useValue: this.floatingSvc },\n FloatingRef,\n ...this.#providers\n ]\n\n return providers\n }\n\n protected abstract create(): FloatingRef<FloatingChannel>\n\n position(options: PositionTraitOptions) {\n return this.trait(position(options))\n }\n\n provides(providers: Provider | Provider[]) {\n if (Array.isArray(providers)) {\n this.#providers = [...this.#providers, ...providers]\n } else {\n this.#providers = [...this.#providers, providers]\n }\n return this\n }\n}\n\nexport class FloatingTemplateFactory<T extends object> extends FloatingFactory {\n constructor(\n floatingSvc: FloatingService,\n public readonly tpl: TemplateRef<T>,\n public readonly options: TemplatePortalOptions<T>\n ) {\n super(floatingSvc)\n }\n\n protected override create(): FloatingRef<FloatingChannel> {\n const options: TemplatePortalOptions<T> = { ...this.options }\n options.providers = this.providers(options.providers)\n const container = this.floatingSvc.layer.newTemplatePortal(this.tpl, options)\n return container.injector.get(FloatingRef)\n }\n}\n\nexport class FloatingComponentFactory<T extends ComponentType<any>> extends FloatingFactory {\n constructor(\n floatingSvc: FloatingService,\n public readonly component: T,\n public readonly options: ComponentPortalOptions<T>\n ) {\n super(floatingSvc)\n }\n\n protected override create(): FloatingRef<FloatingChannel> {\n const options: ComponentPortalOptions<T> = { ...this.options }\n options.providers = this.providers(options.providers)\n const container = this.floatingSvc.layer.newComponentPortal(this.component, options)\n return container.injector.get(FloatingRef)\n }\n}\n\n/**\n * @example\n * ```typescript\n * class SomeComponent {}\n *\n * class SomeList {\n * readonly floating = inject(FloatingService)\n *\n * showComponent() {\n * this.floating.from(SomeComponent).traits(position(), backdrop()).subscribe()\n * }\n * ```\n */\n@Injectable()\nexport class FloatingService {\n readonly layer = inject(LayerService)\n // readonly parent = inject(FloatingRef, { skipSelf: true, optional: true })\n\n from<T extends ComponentType<any>>(component: T, opts?: ComponentPortalOptions<T>): FloatingComponentFactory<T>\n\n from<T extends object>(tpl: TemplateRef<T>, opts?: TemplatePortalOptions<T>): FloatingTemplateFactory<T>\n\n from<T>(value: ComponentType<T> | TemplateRef<T>, opts: any): FloatingFactory {\n if (value instanceof TemplateRef) {\n return new FloatingTemplateFactory(this, value as any, opts)\n } else {\n return new FloatingComponentFactory(this, value as any, opts)\n }\n }\n}\n","import { Provider } from \"@angular/core\"\n\nimport { FloatingService } from \"./floating\"\nimport { LAYER_CONTAINER_ZINDEX_START, LayerContainer, LayerService, RootLayer } from \"./layer\"\n\nexport * from \"./floating\"\nexport * from \"./layer\"\n\nexport interface ProvideFloatingOptions {\n zIndexStart?: number\n}\n\nconst DEFAULTS: ProvideFloatingOptions = {\n zIndexStart: 10000\n}\n\nexport function provideFloating(options: ProvideFloatingOptions = {}): Provider[] {\n const opts = { ...DEFAULTS, ...options }\n return [\n { provide: LAYER_CONTAINER_ZINDEX_START, useValue: opts.zIndexStart },\n { provide: LayerContainer, useClass: RootLayer },\n LayerService,\n FloatingService\n ]\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["style"],"mappings":"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"}
@@ -1,21 +1,23 @@
1
- import { AnimationMetadata, AnimationOptions } from "@angular/animations";
1
+ import { AnimationMetadata } from "@angular/animations";
2
2
  import { Observable } from "rxjs";
3
+ import { FloatingPosition } from "@ngutil/style";
3
4
  import { FloatingRef } from "../floating-ref";
4
5
  import { FloatingTrait } from "./_base";
5
6
  export type AnimationSet = {
6
7
  show: AnimationMetadata[];
7
8
  hide: AnimationMetadata[];
8
9
  };
10
+ export type AnimationTraitParams = (position: FloatingPosition) => object;
9
11
  export declare class AnimationTrait implements FloatingTrait<unknown> {
10
12
  readonly animation: AnimationSet;
11
- readonly options?: AnimationOptions | undefined;
13
+ readonly params?: AnimationTraitParams | undefined;
12
14
  readonly name = "animation";
13
- constructor(animation: AnimationSet, options?: AnimationOptions | undefined);
15
+ constructor(animation: AnimationSet, params?: AnimationTraitParams | undefined);
14
16
  connect(floatingRef: FloatingRef): Observable<unknown>;
15
17
  }
16
18
  export declare const FallAnimation: AnimationSet;
17
- export declare function fallAnimation(options?: AnimationOptions): AnimationTrait;
19
+ export declare function fallAnimation(scale?: number): AnimationTrait;
18
20
  export declare const FadeAnimation: AnimationSet;
19
- export declare function fadeAnimation(options?: AnimationOptions): AnimationTrait;
20
- export declare const DropAnimation: AnimationSet;
21
- export declare function dropAnimation(options?: AnimationOptions): AnimationTrait;
21
+ export declare function fadeAnimation(): AnimationTrait;
22
+ export declare function slideNearAnimation(size?: number): AnimationTrait;
23
+ export declare function slideAwayAnimation(size?: number): AnimationTrait;
@@ -5,7 +5,9 @@ import { FloatingRef } from "../floating-ref";
5
5
  import { FloatingTrait } from "./_base";
6
6
  export type PositionTraitElementRef = ElementInput | Window | "layer" | "viewport";
7
7
  export type PositionTraitOptions = {
8
- content?: FloatingPositionContentOptions & MinMaxSizes;
8
+ content?: Omit<FloatingPositionContentOptions, "constraints"> & {
9
+ constraints?: SizeConstraintsInput;
10
+ };
9
11
  anchor?: FloatingPositionAnchorOptions & {
10
12
  ref: PositionTraitElementRef;
11
13
  };
@@ -15,8 +17,17 @@ export type PositionTraitOptions = {
15
17
  horizontalAlt?: FloatingPositionAltInput;
16
18
  verticalAlt?: FloatingPositionAltInput;
17
19
  };
18
- type SizeInput = number | ElementInput | Observable<number> | Observable<ElementInput>;
19
- interface MinMaxSizes {
20
+ /**
21
+ * Width ot height input values
22
+ *
23
+ * - `number`: excact value
24
+ * - `ElementInput`: element reference, and take the dimension from it
25
+ * - `link`: take the dimension from the anchor element and only apply on connection dimension.
26
+ * eg.: `anchor.link = "left bottom"` and `content.link = "left top"`, in this case only width will be applied.
27
+ */
28
+ type SizeInputConst = number | ElementInput;
29
+ type SizeInput = SizeInputConst | Observable<SizeInputConst>;
30
+ interface SizeConstraintsInput {
20
31
  minWidth?: SizeInput;
21
32
  maxWidth?: SizeInput;
22
33
  minHeight?: SizeInput;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/floating",
3
- "version": "0.0.65",
3
+ "version": "0.0.66",
4
4
  "dependencies": {
5
5
  "tslib": "^2.6.2"
6
6
  },
@@ -8,9 +8,9 @@
8
8
  "@angular/cdk": "18.2.6",
9
9
  "@angular/common": "18.2.6",
10
10
  "@angular/core": "18.2.6",
11
- "@ngutil/aria": "0.0.65",
12
- "@ngutil/style": "0.0.65",
13
- "@ngutil/common": "0.0.65"
11
+ "@ngutil/aria": "0.0.66",
12
+ "@ngutil/common": "0.0.66",
13
+ "@ngutil/style": "0.0.66"
14
14
  },
15
15
  "publishConfig": {
16
16
  "access": "public",