@ngutil/floating 0.0.48 → 0.0.50

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,6 +1,14 @@
1
1
  import { ElementRef } from "@angular/core";
2
- import { of } from "rxjs";
3
- import { StateChain } from "@ngutil/common";
2
+ import { filter, of, share, take } from "rxjs";
3
+ import { Lifecycle } from "@ngutil/common";
4
+ export var AlwaysOnTop;
5
+ (function (AlwaysOnTop) {
6
+ AlwaysOnTop[AlwaysOnTop["None"] = 0] = "None";
7
+ AlwaysOnTop[AlwaysOnTop["Normal"] = 1] = "Normal";
8
+ AlwaysOnTop[AlwaysOnTop["Modal"] = 2] = "Modal";
9
+ AlwaysOnTop[AlwaysOnTop["Toast"] = 3] = "Toast";
10
+ AlwaysOnTop[AlwaysOnTop["UAC"] = 100] = "UAC";
11
+ })(AlwaysOnTop || (AlwaysOnTop = {}));
4
12
  // TODO: disposing, disposed
5
13
  export class ChildRef extends ElementRef {
6
14
  /**
@@ -15,30 +23,34 @@ export class ChildRef extends ElementRef {
15
23
  get zIndex() {
16
24
  return this._zIndex;
17
25
  }
18
- constructor(nativeElement) {
26
+ constructor(nativeElement, alwaysOnTop = AlwaysOnTop.None) {
19
27
  super(nativeElement);
20
- this.state = new StateChain({
28
+ this.alwaysOnTop = alwaysOnTop;
29
+ this.state = new Lifecycle({
21
30
  showing: {},
22
31
  shown: {},
23
32
  disposing: { cancellable: false },
24
33
  disposed: { cancellable: false, order: "sequential" }
25
34
  });
26
35
  this._zIndex = -1;
27
- this.state.on("disposed", () => this.destroy());
36
+ this.disposed$ = this.state.current$.pipe(filter(state => state === "disposed"), take(1), share());
37
+ this.state.on("disposed", () => {
38
+ this.nativeElement.parentElement?.removeChild(this.nativeElement);
39
+ this.state.destroy();
40
+ delete this.state;
41
+ });
28
42
  // this.state.current$.subscribe(state => {
29
43
  // console.log(this, state)
30
44
  // })
45
+ // this.state.status$.subscribe(status => {
46
+ // console.log(this.nativeElement, status)
47
+ // })
31
48
  }
32
49
  dispose() {
33
50
  if (this.state == null) {
34
- return of(null);
51
+ return of();
35
52
  }
36
53
  return this.state.run(["disposing", "disposed"]);
37
54
  }
38
- destroy() {
39
- this.nativeElement.parentElement?.removeChild(this.nativeElement);
40
- this.state.destroy();
41
- delete this.state;
42
- }
43
55
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2NoaWxkLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTNDLDRCQUE0QjtBQUU1QixNQUFNLE9BQWdCLFFBQThDLFNBQVEsVUFBYTtJQVFyRjs7T0FFRztJQUNILElBQUksTUFBTSxDQUFDLEdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFBO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQUdELFlBQVksYUFBZ0I7UUFDeEIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBdEJmLFVBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUM1QixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUNqQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7U0FDeEQsQ0FBQyxDQUFBO1FBY00sWUFBTyxHQUFXLENBQUMsQ0FBQyxDQUFBO1FBSXhCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUUvQywyQ0FBMkM7UUFDM0MsK0JBQStCO1FBQy9CLEtBQUs7SUFDVCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFUyxPQUFPO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3BCLE9BQVEsSUFBWSxDQUFDLEtBQUssQ0FBQTtJQUM5QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgU3RhdGVDaGFpbiB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmV4cG9ydCB0eXBlIERpc3Bvc2VIYW5kbGVyPFQ+ID0gKHJlZjogVCkgPT4gT2JzZXJ2YWJsZTx2b2lkPlxuXG4vLyBUT0RPOiBkaXNwb3NpbmcsIGRpc3Bvc2VkXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGlsZFJlZjxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4gZXh0ZW5kcyBFbGVtZW50UmVmPFQ+IHtcbiAgICByZWFkb25seSBzdGF0ZSA9IG5ldyBTdGF0ZUNoYWluKHtcbiAgICAgICAgc2hvd2luZzoge30sXG4gICAgICAgIHNob3duOiB7fSxcbiAgICAgICAgZGlzcG9zaW5nOiB7IGNhbmNlbGxhYmxlOiBmYWxzZSB9LFxuICAgICAgICBkaXNwb3NlZDogeyBjYW5jZWxsYWJsZTogZmFsc2UsIG9yZGVyOiBcInNlcXVlbnRpYWxcIiB9XG4gICAgfSlcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNldCB6SW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3pJbmRleCAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLl96SW5kZXggPSB2YWxcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZS56SW5kZXggPSBTdHJpbmcodmFsKVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB6SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pJbmRleFxuICAgIH1cbiAgICBwcml2YXRlIF96SW5kZXg6IG51bWJlciA9IC0xXG5cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmVFbGVtZW50OiBUKSB7XG4gICAgICAgIHN1cGVyKG5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB0aGlzLmRlc3Ryb3koKSlcblxuICAgICAgICAvLyB0aGlzLnN0YXRlLmN1cnJlbnQkLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLCBzdGF0ZSlcbiAgICAgICAgLy8gfSlcbiAgICB9XG5cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5ydW4oW1wiZGlzcG9zaW5nXCIsIFwiZGlzcG9zZWRcIl0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZCh0aGlzLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGUuZGVzdHJveSgpXG4gICAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLnN0YXRlXG4gICAgfVxufVxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2NoaWxkLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTFDLE1BQU0sQ0FBTixJQUFZLFdBTVg7QUFORCxXQUFZLFdBQVc7SUFDbkIsNkNBQVEsQ0FBQTtJQUNSLGlEQUFVLENBQUE7SUFDViwrQ0FBUyxDQUFBO0lBQ1QsK0NBQVMsQ0FBQTtJQUNULDZDQUFTLENBQUE7QUFDYixDQUFDLEVBTlcsV0FBVyxLQUFYLFdBQVcsUUFNdEI7QUFFRCw0QkFBNEI7QUFFNUIsTUFBTSxPQUFnQixRQUE4QyxTQUFRLFVBQWE7SUFRckY7O09BRUc7SUFDSCxJQUFJLE1BQU0sQ0FBQyxHQUFXO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFTRCxZQUNJLGFBQWdCLEVBQ0EsY0FBMkIsV0FBVyxDQUFDLElBQUk7UUFFM0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRkosZ0JBQVcsR0FBWCxXQUFXLENBQWdDO1FBN0J0RCxVQUFLLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDM0IsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFDakMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1NBQ3hELENBQUMsQ0FBQTtRQWNNLFlBQU8sR0FBVyxDQUFDLENBQUMsQ0FBQTtRQUVULGNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsRUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEtBQUssRUFBRSxDQUNWLENBQUE7UUFPRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNwQixPQUFRLElBQVksQ0FBQyxLQUFLLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFRiwyQ0FBMkM7UUFDM0MsK0JBQStCO1FBQy9CLEtBQUs7UUFDTCwyQ0FBMkM7UUFDM0MsOENBQThDO1FBQzlDLEtBQUs7SUFDVCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsRUFBRSxDQUFBO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgdGFrZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTGlmZWN5Y2xlIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuZXhwb3J0IHR5cGUgRGlzcG9zZUhhbmRsZXI8VD4gPSAocmVmOiBUKSA9PiBPYnNlcnZhYmxlPHZvaWQ+XG5cbmV4cG9ydCBlbnVtIEFsd2F5c09uVG9wIHtcbiAgICBOb25lID0gMCxcbiAgICBOb3JtYWwgPSAxLFxuICAgIE1vZGFsID0gMixcbiAgICBUb2FzdCA9IDMsXG4gICAgVUFDID0gMTAwXG59XG5cbi8vIFRPRE86IGRpc3Bvc2luZywgZGlzcG9zZWRcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENoaWxkUmVmPFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50PiBleHRlbmRzIEVsZW1lbnRSZWY8VD4ge1xuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IExpZmVjeWNsZSh7XG4gICAgICAgIHNob3dpbmc6IHt9LFxuICAgICAgICBzaG93bjoge30sXG4gICAgICAgIGRpc3Bvc2luZzogeyBjYW5jZWxsYWJsZTogZmFsc2UgfSxcbiAgICAgICAgZGlzcG9zZWQ6IHsgY2FuY2VsbGFibGU6IGZhbHNlLCBvcmRlcjogXCJzZXF1ZW50aWFsXCIgfVxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzZXQgekluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl96SW5kZXggIT09IHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fekluZGV4ID0gdmFsXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuekluZGV4ID0gU3RyaW5nKHZhbClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgekluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl96SW5kZXhcbiAgICB9XG4gICAgcHJpdmF0ZSBfekluZGV4OiBudW1iZXIgPSAtMVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc3Bvc2VkJCA9IHRoaXMuc3RhdGUuY3VycmVudCQucGlwZShcbiAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID09PSBcImRpc3Bvc2VkXCIpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzaGFyZSgpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG5hdGl2ZUVsZW1lbnQ6IFQsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBhbHdheXNPblRvcDogQWx3YXlzT25Ub3AgPSBBbHdheXNPblRvcC5Ob25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKG5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQodGhpcy5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kZXN0cm95KClcbiAgICAgICAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLnN0YXRlXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gdGhpcy5zdGF0ZS5jdXJyZW50JC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcywgc3RhdGUpXG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIHRoaXMuc3RhdGUuc3RhdHVzJC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubmF0aXZlRWxlbWVudCwgc3RhdHVzKVxuICAgICAgICAvLyB9KVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBvZigpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucnVuKFtcImRpc3Bvc2luZ1wiLCBcImRpc3Bvc2VkXCJdKVxuICAgIH1cbn1cbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  import { Injector } from "@angular/core";
2
- import { ChildRef } from "./child-ref";
2
+ import { AlwaysOnTop, ChildRef } from "./child-ref";
3
3
  export class ContainerRef extends ChildRef {
4
4
  constructor(options) {
5
- super(createElement(options));
5
+ super(createElement(options), options.alwaysOnTop || AlwaysOnTop.None);
6
6
  this.options = options;
7
7
  this.injectorName = "ContainerRef";
8
8
  const providers = options.providers || [];
@@ -38,4 +38,4 @@ function createElement(options) {
38
38
  }
39
39
  return div;
40
40
  }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9jb250YWluZXItcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQVd0QyxNQUFNLE9BQU8sWUFBYSxTQUFRLFFBQVE7SUFLdEMsWUFBNEIsT0FBeUI7UUFDakQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBREwsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFGM0MsaUJBQVksR0FBRyxjQUFjLENBQUE7UUFLbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUE7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUTtZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUMzQixPQUFRLElBQVksQ0FBQyxPQUFPLENBQUE7WUFDNUIsT0FBUSxJQUFZLENBQUMsUUFBUSxDQUFBO1FBQ2pDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLFlBQVk7UUFDbEIsT0FBTztZQUNILEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzVDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUF5QjtJQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtJQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtJQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUE7SUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQ2xDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtJQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7SUFFcEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgQ2hpbGRSZWYgfSBmcm9tIFwiLi9jaGlsZC1yZWZcIlxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lck9wdGlvbnMge1xuICAgIGFsd2F5c09uVG9wPzogYm9vbGVhblxuICAgIGVsZXZhdGlvbj86IG51bWJlclxuICAgIGNsYXNzZXM/OiBzdHJpbmdbXVxuICAgIGF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgaW5qZWN0b3I/OiBJbmplY3RvclxuICAgIHByb3ZpZGVycz86IFByb3ZpZGVyW11cbn1cblxuZXhwb3J0IGNsYXNzIENvbnRhaW5lclJlZiBleHRlbmRzIENoaWxkUmVmIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yXG5cbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3JOYW1lID0gXCJDb250YWluZXJSZWZcIlxuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IENvbnRhaW5lck9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoY3JlYXRlRWxlbWVudChvcHRpb25zKSlcblxuICAgICAgICBjb25zdCBwcm92aWRlcnMgPSBvcHRpb25zLnByb3ZpZGVycyB8fCBbXVxuICAgICAgICB0aGlzLmluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogWy4uLnRoaXMuZ2V0UHJvdmlkZXJzKCksIC4uLnByb3ZpZGVyc10sXG4gICAgICAgICAgICBwYXJlbnQ6IG9wdGlvbnMuaW5qZWN0b3IsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmluamVjdG9yTmFtZVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgKHRoaXMgYXMgYW55KS5vcHRpb25zXG4gICAgICAgICAgICBkZWxldGUgKHRoaXMgYXMgYW55KS5pbmplY3RvclxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQcm92aWRlcnMoKTogUHJvdmlkZXJbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IHByb3ZpZGU6IENoaWxkUmVmLCB1c2VWYWx1ZTogdGhpcyB9LFxuICAgICAgICAgICAgeyBwcm92aWRlOiBDb250YWluZXJSZWYsIHVzZVZhbHVlOiB0aGlzIH1cbiAgICAgICAgXVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChvcHRpb25zOiBDb250YWluZXJPcHRpb25zKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCJcbiAgICBkaXYuc3R5bGUudG9wID0gXCIwXCJcbiAgICBkaXYuc3R5bGUubGVmdCA9IFwiMFwiXG4gICAgZGl2LnN0eWxlLndpZHRoID0gXCJtYXgtY29udGVudFwiXG4gICAgZGl2LnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1mbGV4XCJcbiAgICBkaXYuc3R5bGUuZmxleERpcmVjdGlvbiA9IFwiY29sdW1uXCJcbiAgICBkaXYuc3R5bGUuYWxpZ25JdGVtcyA9IFwic3RyZXRjaFwiXG4gICAgZGl2LnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJzdHJldGNoXCJcblxuICAgIGlmIChvcHRpb25zLmNsYXNzZXMpIHtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoLi4ub3B0aW9ucy5jbGFzc2VzKVxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbn1cbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9jb250YWluZXItcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFXbkQsTUFBTSxPQUFPLFlBQWEsU0FBUSxRQUFRO0lBS3RDLFlBQTRCLE9BQXlCO1FBQ2pELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFEOUMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFGM0MsaUJBQVksR0FBRyxjQUFjLENBQUE7UUFLbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUE7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzVCLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQ2pELE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUTtZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUMzQixPQUFRLElBQVksQ0FBQyxPQUFPLENBQUE7WUFDNUIsT0FBUSxJQUFZLENBQUMsUUFBUSxDQUFBO1FBQ2pDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLFlBQVk7UUFDbEIsT0FBTztZQUNILEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQzVDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUF5QjtJQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtJQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQTtJQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUE7SUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQ2xDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtJQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7SUFFcEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgQWx3YXlzT25Ub3AsIENoaWxkUmVmIH0gZnJvbSBcIi4vY2hpbGQtcmVmXCJcblxuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJPcHRpb25zIHtcbiAgICBhbHdheXNPblRvcD86IEFsd2F5c09uVG9wXG4gICAgZWxldmF0aW9uPzogbnVtYmVyXG4gICAgY2xhc3Nlcz86IHN0cmluZ1tdXG4gICAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICBpbmplY3Rvcj86IEluamVjdG9yXG4gICAgcHJvdmlkZXJzPzogUHJvdmlkZXJbXVxufVxuXG5leHBvcnQgY2xhc3MgQ29udGFpbmVyUmVmIGV4dGVuZHMgQ2hpbGRSZWYge1xuICAgIHB1YmxpYyByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcblxuICAgIHByb3RlY3RlZCBpbmplY3Rvck5hbWUgPSBcIkNvbnRhaW5lclJlZlwiXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogQ29udGFpbmVyT3B0aW9ucykge1xuICAgICAgICBzdXBlcihjcmVhdGVFbGVtZW50KG9wdGlvbnMpLCBvcHRpb25zLmFsd2F5c09uVG9wIHx8IEFsd2F5c09uVG9wLk5vbmUpXG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gb3B0aW9ucy5wcm92aWRlcnMgfHwgW11cbiAgICAgICAgdGhpcy5pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFsuLi50aGlzLmdldFByb3ZpZGVycygpLCAuLi5wcm92aWRlcnNdLFxuICAgICAgICAgICAgcGFyZW50OiBvcHRpb25zLmluamVjdG9yLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5pbmplY3Rvck5hbWVcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLnN0YXRlLm9uKFwiZGlzcG9zZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkub3B0aW9uc1xuICAgICAgICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuaW5qZWN0b3JcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UHJvdmlkZXJzKCk6IFByb3ZpZGVyW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBwcm92aWRlOiBDaGlsZFJlZiwgdXNlVmFsdWU6IHRoaXMgfSxcbiAgICAgICAgICAgIHsgcHJvdmlkZTogQ29udGFpbmVyUmVmLCB1c2VWYWx1ZTogdGhpcyB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQob3B0aW9uczogQ29udGFpbmVyT3B0aW9ucyk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiXG4gICAgZGl2LnN0eWxlLnRvcCA9IFwiMFwiXG4gICAgZGl2LnN0eWxlLmxlZnQgPSBcIjBcIlxuICAgIGRpdi5zdHlsZS53aWR0aCA9IFwibWF4LWNvbnRlbnRcIlxuICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtZmxleFwiXG4gICAgZGl2LnN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcImNvbHVtblwiXG4gICAgZGl2LnN0eWxlLmFsaWduSXRlbXMgPSBcInN0cmV0Y2hcIlxuICAgIGRpdi5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwic3RyZXRjaFwiXG5cbiAgICBpZiAob3B0aW9ucy5jbGFzc2VzKSB7XG4gICAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKC4uLm9wdGlvbnMuY2xhc3NlcylcbiAgICB9XG5cbiAgICByZXR1cm4gZGl2XG59XG4iXX0=
@@ -2,4 +2,5 @@ export * from "./backdrop-ref";
2
2
  export * from "./child-ref";
3
3
  export * from "./layer.service";
4
4
  export * from "./portal-ref";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvbGF5ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYmFja2Ryb3AtcmVmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NoaWxkLXJlZlwiXG5leHBvcnQgKiBmcm9tIFwiLi9sYXllci5zZXJ2aWNlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BvcnRhbC1yZWZcIlxuIl19
5
+ export * from "./container-ref";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvbGF5ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsaUJBQWlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9iYWNrZHJvcC1yZWZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2hpbGQtcmVmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xheWVyLnNlcnZpY2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vcG9ydGFsLXJlZlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb250YWluZXItcmVmXCJcbiJdfQ==
@@ -2,6 +2,7 @@ import { Directive, ElementRef, inject, Inject, InjectionToken, Injector, Option
2
2
  import { toSorted } from "@ngutil/common";
3
3
  import { CoverService } from "@ngutil/graphics";
4
4
  import { BackdropRef } from "./backdrop-ref";
5
+ import { AlwaysOnTop } from "./child-ref";
5
6
  import { ContainerRef } from "./container-ref";
6
7
  import { ComponentPortalRef, TemplatePortalRef } from "./portal-ref";
7
8
  import * as i0 from "@angular/core";
@@ -66,7 +67,7 @@ export class LayerService {
66
67
  }
67
68
  }
68
69
  #update() {
69
- const children = toSorted(this.#children, sortByBackdrop);
70
+ const children = toSorted(this.#children, sortChildren2);
70
71
  let zIndex = this.#zIndexStart;
71
72
  for (const child of children) {
72
73
  child.zIndex = zIndex;
@@ -115,6 +116,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
115
116
  providers: [{ provide: LayerService, useExisting: IndividualLayer }]
116
117
  }]
117
118
  }] });
119
+ function sortChildren2(a, b) {
120
+ const alwaysOnTop = sortByAlwaysOnTop(a, b);
121
+ if (alwaysOnTop === 0) {
122
+ return sortByBackdrop(a, b);
123
+ }
124
+ else {
125
+ return alwaysOnTop;
126
+ }
127
+ }
118
128
  function sortByBackdrop(a, b) {
119
129
  if (a instanceof BackdropRef && a.under === b) {
120
130
  return -1;
@@ -127,4 +137,15 @@ function sortByBackdrop(a, b) {
127
137
  function sortByZIndexDesc(a, b) {
128
138
  return b.zIndex - a.zIndex;
129
139
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9sYXllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWUsTUFBTSxlQUFlLENBQUE7QUFFdEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUUvQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTdELE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUEwQixrQkFBa0IsRUFBeUIsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7O0FBRW5ILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFTLG9CQUFvQixDQUFDLENBQUE7QUFFbEYsNkNBQTZDO0FBQzdDLDhDQUE4QztBQUc5QyxNQUFNLE9BQWdCLFlBQVk7SUFDckIsTUFBTSxDQUF1QjtJQUM3QixTQUFTLENBQW1CO0lBR3JDLHlDQUF5QztJQUVoQyxTQUFTLENBQXNCO0lBQy9CLFlBQVksQ0FBUTtJQUM3Qiw0QkFBNEI7SUFFNUIsWUFBb0QsV0FBb0I7UUFWL0QsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3QixjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTVCLFNBQUksR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFBO1FBQzNELHlDQUF5QztRQUVoQyxjQUFTLEdBQW9CLEVBQUUsQ0FBQTtRQUtwQyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVB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QWlCLEVBQUUsQ0FBQztpQkFDdkU7O0FBR0QsU0FBUyxjQUFjLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDNUMsSUFBSSxDQUFDLFlBQVksV0FBVyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNiLENBQUM7U0FBTSxJQUFJLENBQUMsWUFBWSxXQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxPQUFPLENBQUMsQ0FBQTtJQUNaLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQTtBQUNaLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLENBQVcsRUFBRSxDQUFXO0lBQzlDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIlxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPcHRpb25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IHRvU29ydGVkIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcbmltcG9ydCB7IENvdmVyU2VydmljZSB9IGZyb20gXCJAbmd1dGlsL2dyYXBoaWNzXCJcblxuaW1wb3J0IHsgQmFja2Ryb3BPcHRpb25zLCBCYWNrZHJvcFJlZiB9IGZyb20gXCIuL2JhY2tkcm9wLXJlZlwiXG5pbXBvcnQgeyBDaGlsZFJlZiB9IGZyb20gXCIuL2NoaWxkLXJlZlwiXG5pbXBvcnQgeyBDb250YWluZXJPcHRpb25zLCBDb250YWluZXJSZWYgfSBmcm9tIFwiLi9jb250YWluZXItcmVmXCJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbE9wdGlvbnMsIENvbXBvbmVudFBvcnRhbFJlZiwgVGVtcGxhdGVQb3J0YWxPcHRpb25zLCBUZW1wbGF0ZVBvcnRhbFJlZiB9IGZyb20gXCIuL3BvcnRhbC1yZWZcIlxuXG5leHBvcnQgY29uc3QgTEFZRVJfWklOREVYX1NUQVJUID0gbmV3IEluamVjdGlvblRva2VuPG51bWJlcj4oXCJMQVlFUl9aSU5ERVhfU1RBUlRcIilcblxuLy8gVE9ETzogRUxFVkFUSU9OX1NURVAgY29uZmlnIHdpdGggaW5qZWN0aW9uXG4vLyBUT0RPOiBFTEVWQVRJT05fU1RBUlQgY29uZmlnIHdpdGggaW5qZWN0aW9uXG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExheWVyU2VydmljZSB7XG4gICAgcmVhZG9ubHkgI2NvdmVyID0gaW5qZWN0KENvdmVyU2VydmljZSlcbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG5cbiAgICByZWFkb25seSByb290ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKVxuICAgIC8vIHJlYWRvbmx5ICNlbCA9IHRoaXMucm9vdC5uYXRpdmVFbGVtZW50XG5cbiAgICByZWFkb25seSAjY2hpbGRyZW46IEFycmF5PENoaWxkUmVmPiA9IFtdXG4gICAgcmVhZG9ubHkgI3pJbmRleFN0YXJ0OiBudW1iZXJcbiAgICAvLyByZWFkb25seSAjYmFja2Ryb3A6IE1hcDw+XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KExBWUVSX1pJTkRFWF9TVEFSVCkgQE9wdGlvbmFsKCkgekluZGV4U3RhcnQ/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHpJbmRleFN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI3pJbmRleFN0YXJ0ID0gekluZGV4U3RhcnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3pJbmRleFN0YXJ0ID0gMTAwMDBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ld0NvbXBvbmVudFBvcnRhbDxUPihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IENvbXBvbmVudFBvcnRhbE9wdGlvbnM8VD4pOiBDb21wb25lbnRQb3J0YWxSZWY8VD4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGluamVjdG9yOiB0aGlzLiNpbmplY3RvciB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kKG5ldyBDb21wb25lbnRQb3J0YWxSZWYoY29tcG9uZW50LCBvcHRpb25zKSlcbiAgICB9XG5cbiAgICBuZXdUZW1wbGF0ZVBvcnRhbDxUPih0cGw6IFRlbXBsYXRlUmVmPFQ+LCBvcHRpb25zOiBUZW1wbGF0ZVBvcnRhbE9wdGlvbnM8VD4pOiBUZW1wbGF0ZVBvcnRhbFJlZjxUPiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQobmV3IFRlbXBsYXRlUG9ydGFsUmVmKHRwbCwgb3B0aW9ucykpXG4gICAgfVxuXG4gICAgbmV3Q29udGFpbmVyKG9wdGlvbnM6IENvbnRhaW5lck9wdGlvbnMpOiBDb250YWluZXJSZWYge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGluamVjdG9yOiB0aGlzLiNpbmplY3RvciB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kKG5ldyBDb250YWluZXJSZWYob3B0aW9ucykpXG4gICAgfVxuXG4gICAgbmV3QmFja2Ryb3Aob3B0aW9uczogQmFja2Ryb3BPcHRpb25zKTogQmFja2Ryb3BSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQoQmFja2Ryb3BSZWYuZnJvbSh0aGlzLiNjb3ZlciwgdGhpcy4jaW5qZWN0b3IsIG9wdGlvbnMpKVxuICAgIH1cblxuICAgIGFwcGVuZDxUIGV4dGVuZHMgQ2hpbGRSZWY+KHJlZjogVCk6IFQge1xuICAgICAgICBpZiAoIXRoaXMuI2NoaWxkcmVuLmluY2x1ZGVzKHJlZikpIHtcbiAgICAgICAgICAgIHRoaXMuI2NoaWxkcmVuLnB1c2gocmVmKVxuICAgICAgICAgICAgdGhpcy4jdXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgcmVmLnN0YXRlLm9uKFwiZGlzcG9zZWRcIiwgKCkgPT4gdGhpcy4jcmVtb3ZlKHJlZikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZlxuICAgIH1cblxuICAgICNyZW1vdmUocmVmOiBDaGlsZFJlZikge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLiNjaGlsZHJlbi5pbmRleE9mKHJlZilcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLiNjaGlsZHJlbi5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgdGhpcy4jdXBkYXRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN1cGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdG9Tb3J0ZWQodGhpcy4jY2hpbGRyZW4sIHNvcnRCeUJhY2tkcm9wKVxuXG4gICAgICAgIGxldCB6SW5kZXggPSB0aGlzLiN6SW5kZXhTdGFydFxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjaGlsZC56SW5kZXggPSB6SW5kZXhcbiAgICAgICAgICAgIHpJbmRleCArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbi5zb3J0KHNvcnRCeVpJbmRleERlc2MpXG5cbiAgICAgICAgbGV0IGhhc0JhY2tkcm9wID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgQmFja2Ryb3BSZWYgJiYgY2hpbGQub3B0aW9ucy50eXBlID09PSBcInNvbGlkXCIpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC52aXNpYmxlID0gIWhhc0JhY2tkcm9wXG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3AgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcImJvZHlcIixcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTGF5ZXJTZXJ2aWNlLCB1c2VFeGlzdGluZzogUm9vdExheWVyIH1dXG59KVxuZXhwb3J0IGNsYXNzIFJvb3RMYXllciBleHRlbmRzIExheWVyU2VydmljZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTGF5ZXJTZXJ2aWNlLCB1c2VFeGlzdGluZzogSW5kaXZpZHVhbExheWVyIH1dXG59KVxuZXhwb3J0IGNsYXNzIEluZGl2aWR1YWxMYXllciBleHRlbmRzIExheWVyU2VydmljZSB7fVxuXG5mdW5jdGlvbiBzb3J0QnlCYWNrZHJvcChhOiBDaGlsZFJlZiwgYjogQ2hpbGRSZWYpIHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmICYmIGEudW5kZXIgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmIChiIGluc3RhbmNlb2YgQmFja2Ryb3BSZWYgJiYgYi51bmRlciA9PT0gYSkge1xuICAgICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gMFxufVxuXG5mdW5jdGlvbiBzb3J0QnlaSW5kZXhEZXNjKGE6IENoaWxkUmVmLCBiOiBDaGlsZFJlZikge1xuICAgIHJldHVybiBiLnpJbmRleCAtIGEuekluZGV4XG59XG4iXX0=
140
+ function sortByAlwaysOnTop(a, b) {
141
+ return getAlwaysOnTop(a) - getAlwaysOnTop(b);
142
+ }
143
+ function getAlwaysOnTop(child) {
144
+ if (child instanceof BackdropRef) {
145
+ return child.under.alwaysOnTop || AlwaysOnTop.None;
146
+ }
147
+ else {
148
+ return child.alwaysOnTop || AlwaysOnTop.None;
149
+ }
150
+ }
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9sYXllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQWUsTUFBTSxlQUFlLENBQUE7QUFFdEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUUvQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxhQUFhLENBQUE7QUFDbkQsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNoRSxPQUFPLEVBQTBCLGtCQUFrQixFQUF5QixpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTs7QUFFbkgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQVMsb0JBQW9CLENBQUMsQ0FBQTtBQUVsRiw2Q0FBNkM7QUFDN0MsOENBQThDO0FBRzlDLE1BQU0sT0FBZ0IsWUFBWTtJQUNyQixNQUFNLENBQXVCO0lBQzdCLFNBQVMsQ0FBbUI7SUFHckMseUNBQXlDO0lBRWhDLFNBQVMsQ0FBc0I7SUFDL0IsWUFBWSxDQUFRO0lBQzdCLDRCQUE0QjtJQUU1QixZQUFvRCxXQUFvQjtRQVYvRCxXQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFNUIsU0FBSSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUE7UUFDM0QseUNBQXlDO1FBRWhDLGNBQVMsR0FB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QUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFBO0lBQ2hELENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBJbmplY3RvciwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyB0b1NvcnRlZCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBDb3ZlclNlcnZpY2UgfSBmcm9tIFwiQG5ndXRpbC9ncmFwaGljc1wiXG5cbmltcG9ydCB7IEJhY2tkcm9wT3B0aW9ucywgQmFja2Ryb3BSZWYgfSBmcm9tIFwiLi9iYWNrZHJvcC1yZWZcIlxuaW1wb3J0IHsgQWx3YXlzT25Ub3AsIENoaWxkUmVmIH0gZnJvbSBcIi4vY2hpbGQtcmVmXCJcbmltcG9ydCB7IENvbnRhaW5lck9wdGlvbnMsIENvbnRhaW5lclJlZiB9IGZyb20gXCIuL2NvbnRhaW5lci1yZWZcIlxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsT3B0aW9ucywgQ29tcG9uZW50UG9ydGFsUmVmLCBUZW1wbGF0ZVBvcnRhbE9wdGlvbnMsIFRlbXBsYXRlUG9ydGFsUmVmIH0gZnJvbSBcIi4vcG9ydGFsLXJlZlwiXG5cbmV4cG9ydCBjb25zdCBMQVlFUl9aSU5ERVhfU1RBUlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcIkxBWUVSX1pJTkRFWF9TVEFSVFwiKVxuXG4vLyBUT0RPOiBFTEVWQVRJT05fU1RFUCBjb25maWcgd2l0aCBpbmplY3Rpb25cbi8vIFRPRE86IEVMRVZBVElPTl9TVEFSVCBjb25maWcgd2l0aCBpbmplY3Rpb25cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGF5ZXJTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjY292ZXIgPSBpbmplY3QoQ292ZXJTZXJ2aWNlKVxuICAgIHJlYWRvbmx5ICNpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICAgIHJlYWRvbmx5IHJvb3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpXG4gICAgLy8gcmVhZG9ubHkgI2VsID0gdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnRcblxuICAgIHJlYWRvbmx5ICNjaGlsZHJlbjogQXJyYXk8Q2hpbGRSZWY+ID0gW11cbiAgICByZWFkb25seSAjekluZGV4U3RhcnQ6IG51bWJlclxuICAgIC8vIHJlYWRvbmx5ICNiYWNrZHJvcDogTWFwPD5cblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTEFZRVJfWklOREVYX1NUQVJUKSBAT3B0aW9uYWwoKSB6SW5kZXhTdGFydD86IG51bWJlcikge1xuICAgICAgICBpZiAoekluZGV4U3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4jekluZGV4U3RhcnQgPSB6SW5kZXhTdGFydFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jekluZGV4U3RhcnQgPSAxMDAwMFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV3Q29tcG9uZW50UG9ydGFsPFQ+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczogQ29tcG9uZW50UG9ydGFsT3B0aW9uczxUPik6IENvbXBvbmVudFBvcnRhbFJlZjxUPiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQobmV3IENvbXBvbmVudFBvcnRhbFJlZihjb21wb25lbnQsIG9wdGlvbnMpKVxuICAgIH1cblxuICAgIG5ld1RlbXBsYXRlUG9ydGFsPFQ+KHRwbDogVGVtcGxhdGVSZWY8VD4sIG9wdGlvbnM6IFRlbXBsYXRlUG9ydGFsT3B0aW9uczxUPik6IFRlbXBsYXRlUG9ydGFsUmVmPFQ+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCBpbmplY3RvcjogdGhpcy4jaW5qZWN0b3IgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChuZXcgVGVtcGxhdGVQb3J0YWxSZWYodHBsLCBvcHRpb25zKSlcbiAgICB9XG5cbiAgICBuZXdDb250YWluZXIob3B0aW9uczogQ29udGFpbmVyT3B0aW9ucyk6IENvbnRhaW5lclJlZiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmQobmV3IENvbnRhaW5lclJlZihvcHRpb25zKSlcbiAgICB9XG5cbiAgICBuZXdCYWNrZHJvcChvcHRpb25zOiBCYWNrZHJvcE9wdGlvbnMpOiBCYWNrZHJvcFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChCYWNrZHJvcFJlZi5mcm9tKHRoaXMuI2NvdmVyLCB0aGlzLiNpbmplY3Rvciwgb3B0aW9ucykpXG4gICAgfVxuXG4gICAgYXBwZW5kPFQgZXh0ZW5kcyBDaGlsZFJlZj4ocmVmOiBUKTogVCB7XG4gICAgICAgIGlmICghdGhpcy4jY2hpbGRyZW4uaW5jbHVkZXMocmVmKSkge1xuICAgICAgICAgICAgdGhpcy4jY2hpbGRyZW4ucHVzaChyZWYpXG4gICAgICAgICAgICB0aGlzLiN1cGRhdGUoKVxuICAgICAgICAgICAgdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQocmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICByZWYuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB0aGlzLiNyZW1vdmUocmVmKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmXG4gICAgfVxuXG4gICAgI3JlbW92ZShyZWY6IENoaWxkUmVmKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuI2NoaWxkcmVuLmluZGV4T2YocmVmKVxuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuI2NoaWxkcmVuLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgICB0aGlzLiN1cGRhdGUoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3VwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0b1NvcnRlZCh0aGlzLiNjaGlsZHJlbiwgc29ydENoaWxkcmVuMilcblxuICAgICAgICBsZXQgekluZGV4ID0gdGhpcy4jekluZGV4U3RhcnRcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY2hpbGQuekluZGV4ID0gekluZGV4XG4gICAgICAgICAgICB6SW5kZXggKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW4uc29ydChzb3J0QnlaSW5kZXhEZXNjKVxuXG4gICAgICAgIGxldCBoYXNCYWNrZHJvcCA9IGZhbHNlXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmICYmIGNoaWxkLm9wdGlvbnMudHlwZSA9PT0gXCJzb2xpZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQudmlzaWJsZSA9ICFoYXNCYWNrZHJvcFxuICAgICAgICAgICAgICAgIGhhc0JhY2tkcm9wID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJib2R5XCIsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExheWVyU2VydmljZSwgdXNlRXhpc3Rpbmc6IFJvb3RMYXllciB9XVxufSlcbmV4cG9ydCBjbGFzcyBSb290TGF5ZXIgZXh0ZW5kcyBMYXllclNlcnZpY2Uge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExheWVyU2VydmljZSwgdXNlRXhpc3Rpbmc6IEluZGl2aWR1YWxMYXllciB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbmRpdmlkdWFsTGF5ZXIgZXh0ZW5kcyBMYXllclNlcnZpY2Uge31cblxuZnVuY3Rpb24gc29ydENoaWxkcmVuMihhOiBDaGlsZFJlZiwgYjogQ2hpbGRSZWYpIHtcbiAgICBjb25zdCBhbHdheXNPblRvcCA9IHNvcnRCeUFsd2F5c09uVG9wKGEsIGIpXG4gICAgaWYgKGFsd2F5c09uVG9wID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzb3J0QnlCYWNrZHJvcChhLCBiKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbHdheXNPblRvcFxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ydEJ5QmFja2Ryb3AoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBCYWNrZHJvcFJlZiAmJiBhLnVuZGVyID09PSBiKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoYiBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmICYmIGIudW5kZXIgPT09IGEpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICB9XG4gICAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gc29ydEJ5WkluZGV4RGVzYyhhOiBDaGlsZFJlZiwgYjogQ2hpbGRSZWYpIHtcbiAgICByZXR1cm4gYi56SW5kZXggLSBhLnpJbmRleFxufVxuXG5mdW5jdGlvbiBzb3J0QnlBbHdheXNPblRvcChhOiBDaGlsZFJlZiwgYjogQ2hpbGRSZWYpIHtcbiAgICByZXR1cm4gZ2V0QWx3YXlzT25Ub3AoYSkgLSBnZXRBbHdheXNPblRvcChiKVxufVxuXG5mdW5jdGlvbiBnZXRBbHdheXNPblRvcChjaGlsZDogQ2hpbGRSZWYpOiBudW1iZXIge1xuICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmKSB7XG4gICAgICAgIHJldHVybiBjaGlsZC51bmRlci5hbHdheXNPblRvcCB8fCBBbHdheXNPblRvcC5Ob25lXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLmFsd2F5c09uVG9wIHx8IEFsd2F5c09uVG9wLk5vbmVcbiAgICB9XG59XG4iXX0=
@@ -1,9 +1,9 @@
1
1
  import { AnimationBuilder, style as style$1, animate } from '@angular/animations';
2
- import { Observable, Subject, map, exhaustMap, combineLatest, distinctUntilChanged, tap, Subscription, of, ReplaySubject, filter, shareReplay, takeUntil, debounceTime, EMPTY, merge } from 'rxjs';
2
+ import { Observable, tap, Subject, map, exhaustMap, combineLatest, takeUntil, distinctUntilChanged, of, filter, take, share, ReplaySubject, shareReplay, takeWhile, debounceTime, EMPTY, merge } from 'rxjs';
3
3
  import { animationObservable, CoverService } from '@ngutil/graphics';
4
4
  import { Duration, Ease, DimensionWatcher, rectExpand, rectOrigin, rectMoveOrigin, rectContract, RectWatcher } from '@ngutil/style';
5
5
  import { clamp } from 'lodash';
6
- import { isElementInput, StateChain, toSorted } from '@ngutil/common';
6
+ import { isElementInput, Lifecycle, toSorted } from '@ngutil/common';
7
7
  import { FocusService, KeystrokeService } from '@ngutil/aria';
8
8
  import * as i0 from '@angular/core';
9
9
  import { ElementRef, Injector, ComponentFactoryResolver, ViewContainerRef, InjectionToken, inject, Directive, Inject, Optional, Injectable, TemplateRef, NgModule } from '@angular/core';
@@ -21,7 +21,8 @@ class AnimationTrait {
21
21
  const builder = floatingRef.container.injector.get(AnimationBuilder);
22
22
  const element = floatingRef.container.nativeElement;
23
23
  floatingRef.state.on("showing", () => animationObservable({ builder, element, animation: this.animation.show }));
24
- floatingRef.state.on("disposing", () => animationObservable({ builder, element, animation: this.animation.hide }));
24
+ floatingRef.state.on("disposing", () => animationObservable({ builder, element, animation: this.animation.hide }).pipe(tap(() => (element.style.display = "none"))));
25
+ floatingRef.state.on("disposing", () => dst.complete());
25
26
  dst.next();
26
27
  });
27
28
  }
@@ -29,7 +30,6 @@ class AnimationTrait {
29
30
  const FallAnimation = {
30
31
  show: [
31
32
  style$1({
32
- // "perspective:": "1300px",
33
33
  transform: "scale(1.5)",
34
34
  visibility: "visible",
35
35
  opacity: "0"
@@ -84,12 +84,10 @@ class BackdropTrait {
84
84
  }
85
85
  const state = new BackdropState();
86
86
  const backdrop = floatingRef.layerSvc.newBackdrop(options);
87
- const removeOnClick = this.options.closeOnClick
88
- ? this.#installClickHandler(floatingRef, backdrop, state)
89
- : null;
90
- const onClickSub = this.options.closeOnClick
91
- ? state.onClick.pipe(exhaustMap(() => floatingRef.close())).subscribe()
92
- : null;
87
+ if (this.options.closeOnClick) {
88
+ dest.add(this.#installClickHandler(floatingRef, backdrop, state));
89
+ dest.add(state.onClick.pipe(exhaustMap(() => floatingRef.close())).subscribe());
90
+ }
93
91
  backdrop.state.on("showing", () => animationObservable({
94
92
  builder: animationBuilder,
95
93
  element: backdrop.nativeElement,
@@ -100,14 +98,10 @@ class BackdropTrait {
100
98
  element: backdrop.nativeElement,
101
99
  animation: FadeAnimation.hide
102
100
  }));
101
+ backdrop.state.on("disposed", () => dest.complete());
103
102
  floatingRef.state.on("disposing", () => backdrop.dispose());
104
- const backdropShowSub = backdrop.show().subscribe();
103
+ dest.add(backdrop.show().subscribe());
105
104
  dest.next(state);
106
- return () => {
107
- removeOnClick && removeOnClick();
108
- onClickSub?.unsubscribe();
109
- backdropShowSub.unsubscribe();
110
- };
111
105
  });
112
106
  }
113
107
  #installClickHandler(floatingRef, backdrop, state) {
@@ -173,7 +167,7 @@ class DimensionConstraintTrait {
173
167
  }
174
168
  });
175
169
  }
176
- }).pipe(distinctUntilChanged(), tap(value => {
170
+ }).pipe(takeUntil(floatingRef.state.onExecute("disposing")), distinctUntilChanged(), tap(value => {
177
171
  const floatingEl = floatingRef.container.nativeElement;
178
172
  floatingEl.style[this.name] = `${value}px`;
179
173
  }));
@@ -198,17 +192,16 @@ class FocusTrait {
198
192
  this.name = "focus";
199
193
  }
200
194
  connect(floatingRef) {
201
- return new Observable(() => {
202
- const subs = new Subscription();
195
+ return new Observable(dest => {
203
196
  const originallyFocused = document.activeElement;
204
197
  const svc = floatingRef.container.injector.get(FocusService);
205
198
  if (this.options.connect) {
206
199
  const tabindex = this.options.tabindex == null ? 0 : this.options.tabindex;
207
200
  floatingRef.container.nativeElement.setAttribute("tabindex", tabindex.toString());
208
- subs.add(this.options.connect.connect(floatingRef.container).subscribe());
201
+ dest.add(this.options.connect.connect(floatingRef.container).subscribe());
209
202
  }
210
203
  if (this.options.trap) {
211
- subs.add(this.#trap(floatingRef, svc).subscribe());
204
+ dest.add(this.#trap(floatingRef, svc).subscribe());
212
205
  }
213
206
  floatingRef.state.on("disposing", () => {
214
207
  const active = document.activeElement;
@@ -216,10 +209,9 @@ class FocusTrait {
216
209
  if (active === floating || floating.contains(active)) {
217
210
  originallyFocused && document.contains(originallyFocused) && svc.focus(originallyFocused, "program");
218
211
  }
212
+ dest.complete();
219
213
  });
220
- return () => {
221
- subs.unsubscribe();
222
- };
214
+ dest.next();
223
215
  });
224
216
  }
225
217
  #trap(floatingRef, svc) {
@@ -307,7 +299,7 @@ class PositionTrait {
307
299
  res.apply(floatingRef);
308
300
  dest.next(res);
309
301
  });
310
- });
302
+ }).pipe(takeUntil(floatingRef.state.onExecute("disposing")));
311
303
  }
312
304
  }
313
305
  function refWatcher(rectWatcher, ref, floatingRef) {
@@ -401,6 +393,14 @@ function attribute(attrs) {
401
393
  return new AttributeTrait(attrs);
402
394
  }
403
395
 
396
+ var AlwaysOnTop;
397
+ (function (AlwaysOnTop) {
398
+ AlwaysOnTop[AlwaysOnTop["None"] = 0] = "None";
399
+ AlwaysOnTop[AlwaysOnTop["Normal"] = 1] = "Normal";
400
+ AlwaysOnTop[AlwaysOnTop["Modal"] = 2] = "Modal";
401
+ AlwaysOnTop[AlwaysOnTop["Toast"] = 3] = "Toast";
402
+ AlwaysOnTop[AlwaysOnTop["UAC"] = 100] = "UAC";
403
+ })(AlwaysOnTop || (AlwaysOnTop = {}));
404
404
  // TODO: disposing, disposed
405
405
  class ChildRef extends ElementRef {
406
406
  /**
@@ -415,36 +415,40 @@ class ChildRef extends ElementRef {
415
415
  get zIndex() {
416
416
  return this._zIndex;
417
417
  }
418
- constructor(nativeElement) {
418
+ constructor(nativeElement, alwaysOnTop = AlwaysOnTop.None) {
419
419
  super(nativeElement);
420
- this.state = new StateChain({
420
+ this.alwaysOnTop = alwaysOnTop;
421
+ this.state = new Lifecycle({
421
422
  showing: {},
422
423
  shown: {},
423
424
  disposing: { cancellable: false },
424
425
  disposed: { cancellable: false, order: "sequential" }
425
426
  });
426
427
  this._zIndex = -1;
427
- this.state.on("disposed", () => this.destroy());
428
+ this.disposed$ = this.state.current$.pipe(filter(state => state === "disposed"), take(1), share());
429
+ this.state.on("disposed", () => {
430
+ this.nativeElement.parentElement?.removeChild(this.nativeElement);
431
+ this.state.destroy();
432
+ delete this.state;
433
+ });
428
434
  // this.state.current$.subscribe(state => {
429
435
  // console.log(this, state)
430
436
  // })
437
+ // this.state.status$.subscribe(status => {
438
+ // console.log(this.nativeElement, status)
439
+ // })
431
440
  }
432
441
  dispose() {
433
442
  if (this.state == null) {
434
- return of(null);
443
+ return of();
435
444
  }
436
445
  return this.state.run(["disposing", "disposed"]);
437
446
  }
438
- destroy() {
439
- this.nativeElement.parentElement?.removeChild(this.nativeElement);
440
- this.state.destroy();
441
- delete this.state;
442
- }
443
447
  }
444
448
 
445
449
  class ContainerRef extends ChildRef {
446
450
  constructor(options) {
447
- super(createElement(options));
451
+ super(createElement(options), options.alwaysOnTop || AlwaysOnTop.None);
448
452
  this.options = options;
449
453
  this.injectorName = "ContainerRef";
450
454
  const providers = options.providers || [];
@@ -488,7 +492,6 @@ class BackdropRef extends ChildRef {
488
492
  // options.under.state.control(ref.state)
489
493
  return ref;
490
494
  }
491
- #coverSub;
492
495
  set visible(visible) {
493
496
  if (this.#visible !== visible) {
494
497
  this.#visible = visible;
@@ -512,21 +515,21 @@ class BackdropRef extends ChildRef {
512
515
  "0px";
513
516
  this.under = options.under;
514
517
  if (options.type === "solid") {
515
- this.#coverSub = this.coverSvc.solid({ container: nativeElement, color: options.color }).subscribe();
518
+ this.coverSvc
519
+ .solid({ container: nativeElement, color: options.color })
520
+ .pipe(takeUntil(this.disposed$))
521
+ .subscribe();
516
522
  this.group = `${options.color === "transparent" ? "transparent" : "solid"}`;
517
523
  }
518
524
  else if (options.type === "crop") {
519
- this.#coverSub = this.coverSvc
525
+ this.coverSvc
520
526
  .crop({ container: nativeElement, color: options.color, crop: options.crop })
527
+ .pipe(takeUntil(this.disposed$))
521
528
  .subscribe();
522
529
  }
523
530
  }
524
531
  show() {
525
- return this.state.run(["showing", "shown"]);
526
- }
527
- destroy() {
528
- this.#coverSub?.unsubscribe();
529
- super.destroy();
532
+ return this.state.run("showing", "shown");
530
533
  }
531
534
  }
532
535
 
@@ -640,7 +643,7 @@ class LayerService {
640
643
  }
641
644
  }
642
645
  #update() {
643
- const children = toSorted(this.#children, sortByBackdrop);
646
+ const children = toSorted(this.#children, sortChildren2);
644
647
  let zIndex = this.#zIndexStart;
645
648
  for (const child of children) {
646
649
  child.zIndex = zIndex;
@@ -689,6 +692,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
689
692
  providers: [{ provide: LayerService, useExisting: IndividualLayer }]
690
693
  }]
691
694
  }] });
695
+ function sortChildren2(a, b) {
696
+ const alwaysOnTop = sortByAlwaysOnTop(a, b);
697
+ if (alwaysOnTop === 0) {
698
+ return sortByBackdrop(a, b);
699
+ }
700
+ else {
701
+ return alwaysOnTop;
702
+ }
703
+ }
692
704
  function sortByBackdrop(a, b) {
693
705
  if (a instanceof BackdropRef && a.under === b) {
694
706
  return -1;
@@ -701,6 +713,17 @@ function sortByBackdrop(a, b) {
701
713
  function sortByZIndexDesc(a, b) {
702
714
  return b.zIndex - a.zIndex;
703
715
  }
716
+ function sortByAlwaysOnTop(a, b) {
717
+ return getAlwaysOnTop(a) - getAlwaysOnTop(b);
718
+ }
719
+ function getAlwaysOnTop(child) {
720
+ if (child instanceof BackdropRef) {
721
+ return child.under.alwaysOnTop || AlwaysOnTop.None;
722
+ }
723
+ else {
724
+ return child.alwaysOnTop || AlwaysOnTop.None;
725
+ }
726
+ }
704
727
 
705
728
  const TRAITS = new InjectionToken("TRAITS");
706
729
  class FloatingRef {
@@ -711,7 +734,7 @@ class FloatingRef {
711
734
  this.layerSvc = layerSvc;
712
735
  this.container = container;
713
736
  this.channel = new ReplaySubject(1);
714
- this.state = new StateChain({
737
+ this.state = new Lifecycle({
715
738
  init: {},
716
739
  showing: {},
717
740
  shown: {},
@@ -721,47 +744,51 @@ class FloatingRef {
721
744
  cleanup: { cancellable: false, order: "sequential" }
722
745
  });
723
746
  this.#traits = {};
724
- this.#untilCleanup = this.state.current$.pipe(filter(state => state === "cleanup"), shareReplay(1));
725
- this.#untilDisposed = this.state.current$.pipe(filter(state => state === "cleanup"), shareReplay(1));
747
+ this.#untilCleanup = this.state.onExecute("cleanup");
748
+ this.#untilDisposed = this.state.onExecute("disposed");
726
749
  container.nativeElement.style.overflow = "hidden";
727
750
  container.nativeElement.style.visibility = "hidden";
728
751
  this.#traits = traits;
729
752
  this.traitState$ = this.#traitState().pipe(shareReplay(1));
730
- const sub = this.state.current$.subscribe(state => {
753
+ this.state.current$.pipe(takeWhile(state => state !== "cleanup", true)).subscribe(state => {
731
754
  this.emit({ type: state });
732
755
  });
733
- this.state.on("init", () => new Observable(dst => {
734
- // TODO: angular render is stabilized
735
- this.traitState$.pipe(takeUntil(this.#untilCleanup), debounceTime(5)).subscribe(() => {
736
- dst.complete();
737
- });
738
- }));
756
+ this.state.on("init", () => this.traitState$.pipe(takeUntil(this.#untilCleanup), debounceTime(5), take(1)));
739
757
  this.state.on("showing", () => {
740
758
  container.nativeElement.style.visibility = "visible";
741
759
  });
742
760
  this.state.on("disposing", () => {
743
761
  container.nativeElement.style.pointerEvents = "none";
744
762
  });
745
- this.state.on("disposed", () => {
746
- sub.unsubscribe();
747
- });
748
763
  this.state.control(container.state);
764
+ // TODO: remove
765
+ // this.state.status$.subscribe(status => {
766
+ // console.log("floating", status)
767
+ // })
749
768
  }
750
769
  show() {
751
- return this.state.run(["init", "showing", "shown"]);
770
+ return this.state.run("init", "showing", "shown");
752
771
  }
772
+ /**
773
+ * @deprecated
774
+ */
753
775
  hide() {
754
- return this.state.run(["disposing", "disposed", "cleanup"]);
776
+ return this.close(true);
755
777
  }
756
- close() {
757
- return this.state.run(["closing", "disposing", "disposed", "cleanup"]);
778
+ close(force = false) {
779
+ if (force) {
780
+ return this.state.run("disposing", "disposed", "cleanup");
781
+ }
782
+ else {
783
+ return this.state.run("closing", "disposing", "disposed", "cleanup");
784
+ }
758
785
  }
759
786
  emit(event) {
760
787
  this.channel.next({ ...event, floatingRef: this });
761
788
  }
762
789
  setResult(data) {
763
790
  this.emit({ type: "result", data });
764
- this.hide().subscribe();
791
+ this.close(true).subscribe();
765
792
  }
766
793
  watchTrait(name) {
767
794
  return this.traitState$.pipe(takeUntil(this.#untilDisposed), filter(event => event.name === name), map(event => event.data), shareReplay(1));
@@ -938,5 +965,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
938
965
  * Generated bundle index. Do not edit.
939
966
  */
940
967
 
941
- export { AnimationTrait, AttributeTrait, BackdropRef, BackdropState, BackdropTrait, ChildRef, ComponentPortalRef, DimensionConstraintTrait, FadeAnimation, FallAnimation, FloatingAnchorRef, FloatingComponentFactory, FloatingFactory, FloatingPlacementRef, FloatingPosition, FloatingRef, FloatingService, FloatingTemplateFactory, FocusTrait, IndividualLayer, KeystrokeTrait, LAYER_ZINDEX_START, LayerService, NuFloating, PortalRef, PositionTrait, RootLayer, StyleTrait, TRAITS, TemplatePortalRef, attribute, backdrop, computePosition, fadeAnimation, fallAnimation, focus, keystroke, maxHeight, maxWidth, minHeight, minWidth, modal, position, style };
968
+ export { AlwaysOnTop, AnimationTrait, AttributeTrait, BackdropRef, BackdropState, BackdropTrait, ChildRef, ComponentPortalRef, ContainerRef, DimensionConstraintTrait, FadeAnimation, FallAnimation, FloatingAnchorRef, FloatingComponentFactory, FloatingFactory, FloatingPlacementRef, FloatingPosition, FloatingRef, FloatingService, FloatingTemplateFactory, FocusTrait, IndividualLayer, KeystrokeTrait, LAYER_ZINDEX_START, LayerService, NuFloating, PortalRef, PositionTrait, RootLayer, StyleTrait, TRAITS, TemplatePortalRef, attribute, backdrop, computePosition, fadeAnimation, fallAnimation, focus, keystroke, maxHeight, maxWidth, minHeight, minWidth, modal, position, style };
942
969
  //# sourceMappingURL=ngutil-floating.mjs.map