@ngutil/floating 0.0.61 → 0.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,23 +1,38 @@
1
1
  # floating
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ ## Usage
4
4
 
5
- ## Running unit tests
5
+ ### Configure
6
6
 
7
- Run `nx test floating` to execute the unit tests.
7
+ ```typescript
8
+ import { provideAnimations } from "@angular/platform-browser/animations"
9
+ import { provideFloating } from "@ngutil/floating"
8
10
 
11
+ export const appConfig: ApplicationConfig = {
12
+ providers: [
13
+ provideAnimations(),
14
+ provideFloating()
15
+ ]
16
+ }
17
+ ```
9
18
 
10
- ## Plan
19
+ ### Create floating from component
11
20
 
12
21
  ```typescript
13
- floating.showComponent(Component, new Modal({
14
- backdrop: {click: "close | hide", cut: element},
15
- escape: "close | hide",
16
- }));
17
- floating.showComponent(Component, new Toast({}));
18
- floating.showComponent(Component, new Tip({anchor: {ref: element}})).subscribe(event => {
19
- if (event === "done") {
20
- // ...
21
- }
22
+ @Component({
23
+ selector: 'app-modal',
24
+ template: `...`
22
25
  })
26
+ export class ModalComponent {}
27
+
28
+ @Component({
29
+ selector: `app-user-list`,
30
+ })
31
+ export class UserListComponent {
32
+ readonly #floating = inject(FloatingService)
33
+
34
+ confirm() {
35
+ this.#floating.from(ModalComponent).trait(modal()).subscribe()
36
+ }
37
+ }
23
38
  ```
package/esm2022/index.mjs CHANGED
@@ -1,4 +1,17 @@
1
+ import { FloatingService } from "./floating";
2
+ import { LAYER_CONTAINER_ZINDEX_START, LayerContainer, LayerService, RootLayer } from "./layer";
1
3
  export * from "./floating";
2
4
  export * from "./layer";
3
- export * from "./floating.module";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Zsb2F0aW5nXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xheWVyXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zsb2F0aW5nLm1vZHVsZVwiXG4iXX0=
5
+ const DEFAULTS = {
6
+ zIndexStart: 10000
7
+ };
8
+ export function provideFloating(options = {}) {
9
+ const opts = { ...DEFAULTS, ...options };
10
+ return [
11
+ { provide: LAYER_CONTAINER_ZINDEX_START, useValue: opts.zIndexStart },
12
+ { provide: LayerContainer, useClass: RootLayer },
13
+ LayerService,
14
+ FloatingService
15
+ ];
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFL0YsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxTQUFTLENBQUE7QUFNdkIsTUFBTSxRQUFRLEdBQTJCO0lBQ3JDLFdBQVcsRUFBRSxLQUFLO0NBQ3JCLENBQUE7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQWtDLEVBQUU7SUFDaEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO0lBQ3hDLE9BQU87UUFDSCxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNyRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtRQUNoRCxZQUFZO1FBQ1osZUFBZTtLQUNsQixDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBGbG9hdGluZ1NlcnZpY2UgfSBmcm9tIFwiLi9mbG9hdGluZ1wiXG5pbXBvcnQgeyBMQVlFUl9DT05UQUlORVJfWklOREVYX1NUQVJULCBMYXllckNvbnRhaW5lciwgTGF5ZXJTZXJ2aWNlLCBSb290TGF5ZXIgfSBmcm9tIFwiLi9sYXllclwiXG5cbmV4cG9ydCAqIGZyb20gXCIuL2Zsb2F0aW5nXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xheWVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlRmxvYXRpbmdPcHRpb25zIHtcbiAgICB6SW5kZXhTdGFydD86IG51bWJlclxufVxuXG5jb25zdCBERUZBVUxUUzogUHJvdmlkZUZsb2F0aW5nT3B0aW9ucyA9IHtcbiAgICB6SW5kZXhTdGFydDogMTAwMDBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVGbG9hdGluZyhvcHRpb25zOiBQcm92aWRlRmxvYXRpbmdPcHRpb25zID0ge30pOiBQcm92aWRlcltdIHtcbiAgICBjb25zdCBvcHRzID0geyAuLi5ERUZBVUxUUywgLi4ub3B0aW9ucyB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgeyBwcm92aWRlOiBMQVlFUl9DT05UQUlORVJfWklOREVYX1NUQVJULCB1c2VWYWx1ZTogb3B0cy56SW5kZXhTdGFydCB9LFxuICAgICAgICB7IHByb3ZpZGU6IExheWVyQ29udGFpbmVyLCB1c2VDbGFzczogUm9vdExheWVyIH0sXG4gICAgICAgIExheWVyU2VydmljZSxcbiAgICAgICAgRmxvYXRpbmdTZXJ2aWNlXG4gICAgXVxufVxuIl19
@@ -3,11 +3,26 @@ import { filter, of, share, take } from "rxjs";
3
3
  import { Lifecycle } from "@ngutil/common";
4
4
  export var AlwaysOnTop;
5
5
  (function (AlwaysOnTop) {
6
+ /**
7
+ * Display as open order
8
+ */
6
9
  AlwaysOnTop[AlwaysOnTop["None"] = 0] = "None";
7
- AlwaysOnTop[AlwaysOnTop["Normal"] = 1] = "Normal";
10
+ /**
11
+ * Modals
12
+ */
8
13
  AlwaysOnTop[AlwaysOnTop["Modal"] = 2] = "Modal";
9
- AlwaysOnTop[AlwaysOnTop["Toast"] = 3] = "Toast";
10
- AlwaysOnTop[AlwaysOnTop["UAC"] = 100] = "UAC";
14
+ /**
15
+ * User access control
16
+ */
17
+ AlwaysOnTop[AlwaysOnTop["UAC"] = 3] = "UAC";
18
+ /**
19
+ * Toast...
20
+ */
21
+ AlwaysOnTop[AlwaysOnTop["Toast"] = 4] = "Toast";
22
+ /**
23
+ * Like select drop down, tooltip, stb...
24
+ */
25
+ AlwaysOnTop[AlwaysOnTop["Control"] = 5] = "Control";
11
26
  })(AlwaysOnTop || (AlwaysOnTop = {}));
12
27
  // TODO: disposing, disposed
13
28
  export class ChildRef extends ElementRef {
@@ -39,12 +54,6 @@ export class ChildRef extends ElementRef {
39
54
  this.state.destroy();
40
55
  delete this.state;
41
56
  });
42
- // this.state.current$.subscribe(state => {
43
- // console.log(this, state)
44
- // })
45
- // this.state.status$.subscribe(status => {
46
- // console.log(this.nativeElement, status)
47
- // })
48
57
  }
49
58
  dispose() {
50
59
  if (this.state == null) {
@@ -53,4 +62,4 @@ export class ChildRef extends ElementRef {
53
62
  return this.state.run(["disposing", "disposed"]);
54
63
  }
55
64
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2NoaWxkLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTFDLE1BQU0sQ0FBTixJQUFZLFdBTVg7QUFORCxXQUFZLFdBQVc7SUFDbkIsNkNBQVEsQ0FBQTtJQUNSLGlEQUFVLENBQUE7SUFDViwrQ0FBUyxDQUFBO0lBQ1QsK0NBQVMsQ0FBQTtJQUNULDZDQUFTLENBQUE7QUFDYixDQUFDLEVBTlcsV0FBVyxLQUFYLFdBQVcsUUFNdEI7QUFFRCw0QkFBNEI7QUFFNUIsTUFBTSxPQUFnQixRQUE4QyxTQUFRLFVBQWE7SUFRckY7O09BRUc7SUFDSCxJQUFJLE1BQU0sQ0FBQyxHQUFXO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFTRCxZQUNJLGFBQWdCLEVBQ0EsY0FBMkIsV0FBVyxDQUFDLElBQUk7UUFFM0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRkosZ0JBQVcsR0FBWCxXQUFXLENBQWdDO1FBN0J0RCxVQUFLLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDM0IsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFDakMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1NBQ3hELENBQUMsQ0FBQTtRQWNNLFlBQU8sR0FBVyxDQUFDLENBQUMsQ0FBQTtRQUVULGNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ25ELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsRUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEtBQUssRUFBRSxDQUNWLENBQUE7UUFPRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNwQixPQUFRLElBQVksQ0FBQyxLQUFLLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFRiwyQ0FBMkM7UUFDM0MsK0JBQStCO1FBQy9CLEtBQUs7UUFDTCwyQ0FBMkM7UUFDM0MsOENBQThDO1FBQzlDLEtBQUs7SUFDVCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsRUFBRSxDQUFBO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgdGFrZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTGlmZWN5Y2xlIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuZXhwb3J0IHR5cGUgRGlzcG9zZUhhbmRsZXI8VD4gPSAocmVmOiBUKSA9PiBPYnNlcnZhYmxlPHZvaWQ+XG5cbmV4cG9ydCBlbnVtIEFsd2F5c09uVG9wIHtcbiAgICBOb25lID0gMCxcbiAgICBOb3JtYWwgPSAxLFxuICAgIE1vZGFsID0gMixcbiAgICBUb2FzdCA9IDMsXG4gICAgVUFDID0gMTAwXG59XG5cbi8vIFRPRE86IGRpc3Bvc2luZywgZGlzcG9zZWRcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENoaWxkUmVmPFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50PiBleHRlbmRzIEVsZW1lbnRSZWY8VD4ge1xuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IExpZmVjeWNsZSh7XG4gICAgICAgIHNob3dpbmc6IHt9LFxuICAgICAgICBzaG93bjoge30sXG4gICAgICAgIGRpc3Bvc2luZzogeyBjYW5jZWxsYWJsZTogZmFsc2UgfSxcbiAgICAgICAgZGlzcG9zZWQ6IHsgY2FuY2VsbGFibGU6IGZhbHNlLCBvcmRlcjogXCJzZXF1ZW50aWFsXCIgfVxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzZXQgekluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl96SW5kZXggIT09IHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fekluZGV4ID0gdmFsXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuekluZGV4ID0gU3RyaW5nKHZhbClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgekluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl96SW5kZXhcbiAgICB9XG4gICAgcHJpdmF0ZSBfekluZGV4OiBudW1iZXIgPSAtMVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc3Bvc2VkJCA9IHRoaXMuc3RhdGUuY3VycmVudCQucGlwZShcbiAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID09PSBcImRpc3Bvc2VkXCIpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzaGFyZSgpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG5hdGl2ZUVsZW1lbnQ6IFQsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBhbHdheXNPblRvcDogQWx3YXlzT25Ub3AgPSBBbHdheXNPblRvcC5Ob25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKG5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQodGhpcy5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kZXN0cm95KClcbiAgICAgICAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLnN0YXRlXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gdGhpcy5zdGF0ZS5jdXJyZW50JC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcywgc3RhdGUpXG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIHRoaXMuc3RhdGUuc3RhdHVzJC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubmF0aXZlRWxlbWVudCwgc3RhdHVzKVxuICAgICAgICAvLyB9KVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBvZigpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucnVuKFtcImRpc3Bvc2luZ1wiLCBcImRpc3Bvc2VkXCJdKVxuICAgIH1cbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2NoaWxkLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTFDLE1BQU0sQ0FBTixJQUFZLFdBeUJYO0FBekJELFdBQVksV0FBVztJQUNuQjs7T0FFRztJQUNILDZDQUFRLENBQUE7SUFFUjs7T0FFRztJQUNILCtDQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDJDQUFPLENBQUE7SUFFUDs7T0FFRztJQUNILCtDQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILG1EQUFXLENBQUE7QUFDZixDQUFDLEVBekJXLFdBQVcsS0FBWCxXQUFXLFFBeUJ0QjtBQUVELDRCQUE0QjtBQUU1QixNQUFNLE9BQWdCLFFBQThDLFNBQVEsVUFBYTtJQVFyRjs7T0FFRztJQUNILElBQUksTUFBTSxDQUFDLEdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFBO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQVNELFlBQ0ksYUFBZ0IsRUFDQSxjQUEyQixXQUFXLENBQUMsSUFBSTtRQUUzRCxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFGSixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0M7UUE3QnRELFVBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUMzQixPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUNqQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7U0FDeEQsQ0FBQyxDQUFBO1FBY00sWUFBTyxHQUFXLENBQUMsQ0FBQyxDQUFBO1FBRVQsY0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsS0FBSyxFQUFFLENBQ1YsQ0FBQTtRQU9HLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ3BCLE9BQVEsSUFBWSxDQUFDLEtBQUssQ0FBQTtRQUM5QixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IGZpbHRlciwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCB0YWtlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBMaWZlY3ljbGUgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5leHBvcnQgdHlwZSBEaXNwb3NlSGFuZGxlcjxUPiA9IChyZWY6IFQpID0+IE9ic2VydmFibGU8dm9pZD5cblxuZXhwb3J0IGVudW0gQWx3YXlzT25Ub3Age1xuICAgIC8qKlxuICAgICAqIERpc3BsYXkgYXMgb3BlbiBvcmRlclxuICAgICAqL1xuICAgIE5vbmUgPSAwLFxuXG4gICAgLyoqXG4gICAgICogTW9kYWxzXG4gICAgICovXG4gICAgTW9kYWwgPSAyLFxuXG4gICAgLyoqXG4gICAgICogVXNlciBhY2Nlc3MgY29udHJvbFxuICAgICAqL1xuICAgIFVBQyA9IDMsXG5cbiAgICAvKipcbiAgICAgKiBUb2FzdC4uLlxuICAgICAqL1xuICAgIFRvYXN0ID0gNCxcblxuICAgIC8qKlxuICAgICAqIExpa2Ugc2VsZWN0IGRyb3AgZG93biwgdG9vbHRpcCwgc3RiLi4uXG4gICAgICovXG4gICAgQ29udHJvbCA9IDVcbn1cblxuLy8gVE9ETzogZGlzcG9zaW5nLCBkaXNwb3NlZFxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2hpbGRSZWY8VCBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+IGV4dGVuZHMgRWxlbWVudFJlZjxUPiB7XG4gICAgcmVhZG9ubHkgc3RhdGUgPSBuZXcgTGlmZWN5Y2xlKHtcbiAgICAgICAgc2hvd2luZzoge30sXG4gICAgICAgIHNob3duOiB7fSxcbiAgICAgICAgZGlzcG9zaW5nOiB7IGNhbmNlbGxhYmxlOiBmYWxzZSB9LFxuICAgICAgICBkaXNwb3NlZDogeyBjYW5jZWxsYWJsZTogZmFsc2UsIG9yZGVyOiBcInNlcXVlbnRpYWxcIiB9XG4gICAgfSlcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHNldCB6SW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3pJbmRleCAhPT0gdmFsKSB7XG4gICAgICAgICAgICB0aGlzLl96SW5kZXggPSB2YWxcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZS56SW5kZXggPSBTdHJpbmcodmFsKVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB6SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pJbmRleFxuICAgIH1cbiAgICBwcml2YXRlIF96SW5kZXg6IG51bWJlciA9IC0xXG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzcG9zZWQkID0gdGhpcy5zdGF0ZS5jdXJyZW50JC5waXBlKFxuICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPT09IFwiZGlzcG9zZWRcIiksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHNoYXJlKClcbiAgICApXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbmF0aXZlRWxlbWVudDogVCxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGFsd2F5c09uVG9wOiBBbHdheXNPblRvcCA9IEFsd2F5c09uVG9wLk5vbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIobmF0aXZlRWxlbWVudClcbiAgICAgICAgdGhpcy5zdGF0ZS5vbihcImRpc3Bvc2VkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZCh0aGlzLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmRlc3Ryb3koKVxuICAgICAgICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuc3RhdGVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBkaXNwb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnJ1bihbXCJkaXNwb3NpbmdcIiwgXCJkaXNwb3NlZFwiXSlcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { ChildRef } from "./child-ref";
2
+ export class ExternalRef extends ChildRef {
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2V4dGVybmFsLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXRDLE1BQU0sT0FBTyxXQUFZLFNBQVEsUUFBUTtDQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRSZWYgfSBmcm9tIFwiLi9jaGlsZC1yZWZcIlxuXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxSZWYgZXh0ZW5kcyBDaGlsZFJlZiB7fVxuIl19
@@ -3,4 +3,5 @@ export * from "./child-ref";
3
3
  export * from "./layer.service";
4
4
  export * from "./portal-ref";
5
5
  export * from "./container-ref";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvbGF5ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsaUJBQWlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9iYWNrZHJvcC1yZWZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY2hpbGQtcmVmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2xheWVyLnNlcnZpY2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vcG9ydGFsLXJlZlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jb250YWluZXItcmVmXCJcbiJdfQ==
6
+ export * from "./layer-container";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvbGF5ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2JhY2tkcm9wLXJlZlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jaGlsZC1yZWZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbGF5ZXIuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9wb3J0YWwtcmVmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnRhaW5lci1yZWZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbGF5ZXItY29udGFpbmVyXCJcbiJdfQ==
@@ -0,0 +1,110 @@
1
+ import { DOCUMENT } from "@angular/common";
2
+ import { Directive, ElementRef, inject, Injectable, InjectionToken } from "@angular/core";
3
+ import { toSorted } from "@ngutil/common";
4
+ import { BackdropRef } from "./backdrop-ref";
5
+ import { AlwaysOnTop } from "./child-ref";
6
+ import * as i0 from "@angular/core";
7
+ export const LAYER_CONTAINER_ZINDEX_START = new InjectionToken("LAYER_CONTAINER_ZINDEX_START");
8
+ export class LayerContainer {
9
+ constructor() {
10
+ this.#children = [];
11
+ this.zIndexStart = inject(LAYER_CONTAINER_ZINDEX_START);
12
+ }
13
+ #children;
14
+ append(ref) {
15
+ if (!this.#children.includes(ref)) {
16
+ this.#children.push(ref);
17
+ this.#update();
18
+ this.root.appendChild(ref.nativeElement);
19
+ ref.state.on("disposing", () => this.#remove(ref));
20
+ }
21
+ return ref;
22
+ }
23
+ #remove(ref) {
24
+ const idx = this.#children.indexOf(ref);
25
+ if (idx > -1) {
26
+ this.#children.splice(idx, 1);
27
+ this.#update();
28
+ }
29
+ }
30
+ #update() {
31
+ const children = toSorted(this.#children, sortChildren2);
32
+ let zIndex = this.zIndexStart;
33
+ for (const child of children) {
34
+ child.zIndex = zIndex;
35
+ zIndex += 1;
36
+ }
37
+ children.sort(sortByZIndexDesc);
38
+ let hasBackdrop = false;
39
+ for (const child of children) {
40
+ if (child instanceof BackdropRef && child.options.color !== "transparent") {
41
+ child.visible = !hasBackdrop;
42
+ hasBackdrop = true;
43
+ }
44
+ }
45
+ }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
47
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: LayerContainer, ngImport: i0 }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerContainer, decorators: [{
50
+ type: Directive
51
+ }] });
52
+ export class RootLayer extends LayerContainer {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.root = inject(DOCUMENT).body;
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RootLayer, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
58
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RootLayer }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RootLayer, decorators: [{
61
+ type: Injectable
62
+ }] });
63
+ export class IndividualLayer extends LayerContainer {
64
+ constructor() {
65
+ super(...arguments);
66
+ this.root = inject(ElementRef).nativeElement;
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: IndividualLayer, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
69
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: IndividualLayer, isStandalone: true, providers: [{ provide: LayerContainer, useExisting: IndividualLayer }], usesInheritance: true, ngImport: i0 }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: IndividualLayer, decorators: [{
72
+ type: Directive,
73
+ args: [{
74
+ standalone: true,
75
+ providers: [{ provide: LayerContainer, useExisting: IndividualLayer }]
76
+ }]
77
+ }] });
78
+ function sortChildren2(a, b) {
79
+ const alwaysOnTop = sortByAlwaysOnTop(a, b);
80
+ if (alwaysOnTop === 0) {
81
+ return sortByBackdrop(a, b);
82
+ }
83
+ else {
84
+ return alwaysOnTop;
85
+ }
86
+ }
87
+ function sortByBackdrop(a, b) {
88
+ if (a instanceof BackdropRef && a.under === b) {
89
+ return -1;
90
+ }
91
+ else if (b instanceof BackdropRef && b.under === a) {
92
+ return 1;
93
+ }
94
+ return 0;
95
+ }
96
+ function sortByZIndexDesc(a, b) {
97
+ return b.zIndex - a.zIndex;
98
+ }
99
+ function sortByAlwaysOnTop(a, b) {
100
+ return getAlwaysOnTop(a) - getAlwaysOnTop(b);
101
+ }
102
+ function getAlwaysOnTop(child) {
103
+ if (child instanceof BackdropRef) {
104
+ return child.under.alwaysOnTop || AlwaysOnTop.None;
105
+ }
106
+ else {
107
+ return child.alwaysOnTop || AlwaysOnTop.None;
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2xheWVyL2xheWVyLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFekYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXpDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sYUFBYSxDQUFBOztBQUVuRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBUyw4QkFBOEIsQ0FBQyxDQUFBO0FBR3RHLE1BQU0sT0FBZ0IsY0FBYztJQURwQztRQUlhLGNBQVMsR0FBb0IsRUFBRSxDQUFBO1FBQy9CLGdCQUFXLEdBQVcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUE7S0F1Q3RFO0lBeENZLFNBQVMsQ0FBc0I7SUFHeEMsTUFBTSxDQUFxQixHQUFNO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN4QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8s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Q0FBQyxDQUFBO0FBQ1osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDOUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7QUFDOUIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsQ0FBVyxFQUFFLENBQVc7SUFDL0MsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxLQUFlO0lBQ25DLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFBO0lBQ2hELENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgdG9Tb3J0ZWQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBCYWNrZHJvcFJlZiB9IGZyb20gXCIuL2JhY2tkcm9wLXJlZlwiXG5pbXBvcnQgeyBBbHdheXNPblRvcCwgQ2hpbGRSZWYgfSBmcm9tIFwiLi9jaGlsZC1yZWZcIlxuXG5leHBvcnQgY29uc3QgTEFZRVJfQ09OVEFJTkVSX1pJTkRFWF9TVEFSVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxudW1iZXI+KFwiTEFZRVJfQ09OVEFJTkVSX1pJTkRFWF9TVEFSVFwiKVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMYXllckNvbnRhaW5lciB7XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgcm9vdDogSFRNTEVsZW1lbnRcblxuICAgIHJlYWRvbmx5ICNjaGlsZHJlbjogQXJyYXk8Q2hpbGRSZWY+ID0gW11cbiAgICByZWFkb25seSB6SW5kZXhTdGFydDogbnVtYmVyID0gaW5qZWN0KExBWUVSX0NPTlRBSU5FUl9aSU5ERVhfU1RBUlQpXG5cbiAgICBhcHBlbmQ8VCBleHRlbmRzIENoaWxkUmVmPihyZWY6IFQpOiBUIHtcbiAgICAgICAgaWYgKCF0aGlzLiNjaGlsZHJlbi5pbmNsdWRlcyhyZWYpKSB7XG4gICAgICAgICAgICB0aGlzLiNjaGlsZHJlbi5wdXNoKHJlZilcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQocmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICByZWYuc3RhdGUub24oXCJkaXNwb3NpbmdcIiwgKCkgPT4gdGhpcy4jcmVtb3ZlKHJlZikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZlxuICAgIH1cblxuICAgICNyZW1vdmUocmVmOiBDaGlsZFJlZikge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLiNjaGlsZHJlbi5pbmRleE9mKHJlZilcbiAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLiNjaGlsZHJlbi5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgdGhpcy4jdXBkYXRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN1cGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdG9Tb3J0ZWQodGhpcy4jY2hpbGRyZW4sIHNvcnRDaGlsZHJlbjIpXG5cbiAgICAgICAgbGV0IHpJbmRleCA9IHRoaXMuekluZGV4U3RhcnRcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY2hpbGQuekluZGV4ID0gekluZGV4XG4gICAgICAgICAgICB6SW5kZXggKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW4uc29ydChzb3J0QnlaSW5kZXhEZXNjKVxuXG4gICAgICAgIGxldCBoYXNCYWNrZHJvcCA9IGZhbHNlXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmICYmIGNoaWxkLm9wdGlvbnMuY29sb3IgIT09IFwidHJhbnNwYXJlbnRcIikge1xuICAgICAgICAgICAgICAgIGNoaWxkLnZpc2libGUgPSAhaGFzQmFja2Ryb3BcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJvb3RMYXllciBleHRlbmRzIExheWVyQ29udGFpbmVyIHtcbiAgICByZWFkb25seSByb290ID0gaW5qZWN0KERPQ1VNRU5UKS5ib2R5XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMYXllckNvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEluZGl2aWR1YWxMYXllciB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbmRpdmlkdWFsTGF5ZXIgZXh0ZW5kcyBMYXllckNvbnRhaW5lciB7XG4gICAgcmVhZG9ubHkgcm9vdCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50XG59XG5cbmZ1bmN0aW9uIHNvcnRDaGlsZHJlbjIoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgY29uc3QgYWx3YXlzT25Ub3AgPSBzb3J0QnlBbHdheXNPblRvcChhLCBiKVxuICAgIGlmIChhbHdheXNPblRvcCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc29ydEJ5QmFja2Ryb3AoYSwgYilcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWx3YXlzT25Ub3BcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNvcnRCeUJhY2tkcm9wKGE6IENoaWxkUmVmLCBiOiBDaGlsZFJlZikge1xuICAgIGlmIChhIGluc3RhbmNlb2YgQmFja2Ryb3BSZWYgJiYgYS51bmRlciA9PT0gYikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICB9IGVsc2UgaWYgKGIgaW5zdGFuY2VvZiBCYWNrZHJvcFJlZiAmJiBiLnVuZGVyID09PSBhKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHNvcnRCeVpJbmRleERlc2MoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgcmV0dXJuIGIuekluZGV4IC0gYS56SW5kZXhcbn1cblxuZnVuY3Rpb24gc29ydEJ5QWx3YXlzT25Ub3AoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgcmV0dXJuIGdldEFsd2F5c09uVG9wKGEpIC0gZ2V0QWx3YXlzT25Ub3AoYilcbn1cblxuZnVuY3Rpb24gZ2V0QWx3YXlzT25Ub3AoY2hpbGQ6IENoaWxkUmVmKTogbnVtYmVyIHtcbiAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBCYWNrZHJvcFJlZikge1xuICAgICAgICByZXR1cm4gY2hpbGQudW5kZXIuYWx3YXlzT25Ub3AgfHwgQWx3YXlzT25Ub3AuTm9uZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZC5hbHdheXNPblRvcCB8fCBBbHdheXNPblRvcC5Ob25lXG4gICAgfVxufVxuIl19
@@ -1,153 +1,67 @@
1
- import { DOCUMENT } from "@angular/common";
2
- import { Directive, ElementRef, inject, Inject, Injectable, InjectionToken, Injector, Optional } from "@angular/core";
3
- import { toSorted } from "@ngutil/common";
1
+ import { ApplicationRef, inject, Injectable, Injector, ViewContainerRef } from "@angular/core";
2
+ import { coerceElement } from "@ngutil/common";
4
3
  import { CoverService } from "@ngutil/graphics";
5
4
  import { BackdropRef } from "./backdrop-ref";
6
5
  import { AlwaysOnTop } from "./child-ref";
7
6
  import { ContainerRef } from "./container-ref";
7
+ import { ExternalRef } from "./external-ref";
8
+ import { LayerContainer } from "./layer-container";
8
9
  import { ComponentPortalRef, TemplatePortalRef } from "./portal-ref";
9
10
  import * as i0 from "@angular/core";
10
- export const LAYER_ZINDEX_START = new InjectionToken("LAYER_ZINDEX_START");
11
11
  // TODO: ELEVATION_STEP config with injection
12
12
  // TODO: ELEVATION_START config with injection
13
13
  export class LayerService {
14
+ #container = inject(LayerContainer);
14
15
  #cover = inject(CoverService);
15
16
  #injector = inject(Injector);
16
- #document = inject(DOCUMENT);
17
- #el = inject(ElementRef, { optional: true, self: true });
17
+ #appRef = inject(ApplicationRef);
18
18
  get root() {
19
- return (this.#el && this.#el.nativeElement) || this.#document.body;
19
+ return this.#container.root;
20
20
  }
21
- // readonly #el = this.root.nativeElement
22
- #children = [];
23
- #zIndexStart;
24
- // readonly #backdrop: Map<>
25
- constructor(zIndexStart) {
26
- if (zIndexStart != null) {
27
- this.#zIndexStart = zIndexStart;
28
- }
29
- else {
30
- this.#zIndexStart = 10000;
31
- }
21
+ constructor() {
22
+ console.log(this.#appRef);
23
+ // console.log(this.#appRef.)
32
24
  }
33
25
  newComponentPortal(component, options) {
26
+ // console.log(this.getRootViewContainerRef())
34
27
  if (!options.injector) {
35
- options = { ...options, injector: this.#injector };
28
+ options = { ...options, injector: this.#getInjector() };
36
29
  }
37
- return this.append(new ComponentPortalRef(component, options));
30
+ return this.#container.append(new ComponentPortalRef(component, options));
38
31
  }
39
32
  newTemplatePortal(tpl, options) {
40
33
  if (!options.injector) {
41
- options = { ...options, injector: this.#injector };
34
+ options = { ...options, injector: this.#getInjector() };
42
35
  }
43
- return this.append(new TemplatePortalRef(tpl, options));
36
+ return this.#container.append(new TemplatePortalRef(tpl, options));
44
37
  }
45
38
  newContainer(options) {
46
39
  if (!options.injector) {
47
- options = { ...options, injector: this.#injector };
40
+ options = { ...options, injector: this.#getInjector() };
48
41
  }
49
- return this.append(new ContainerRef(options));
42
+ return this.#container.append(new ContainerRef(options));
50
43
  }
51
44
  newBackdrop(under, options) {
52
45
  const coverRef = this.#cover.create(this.root, options);
53
- return this.append(new BackdropRef(coverRef, under, options));
46
+ return this.#container.append(new BackdropRef(coverRef, under, options));
54
47
  }
55
- append(ref) {
56
- if (!this.#children.includes(ref)) {
57
- this.#children.push(ref);
58
- this.#update();
59
- this.root.appendChild(ref.nativeElement);
60
- ref.state.on("disposed", () => this.#remove(ref));
61
- }
62
- return ref;
63
- }
64
- #remove(ref) {
65
- const idx = this.#children.indexOf(ref);
66
- if (idx > -1) {
67
- this.#children.splice(idx, 1);
68
- this.#update();
69
- }
48
+ addExternal(element, alwaysOnTop = AlwaysOnTop.None) {
49
+ return this.#container.append(new ExternalRef(coerceElement(element), alwaysOnTop));
70
50
  }
71
- #update() {
72
- const children = toSorted(this.#children, sortChildren2);
73
- let zIndex = this.#zIndexStart;
74
- for (const child of children) {
75
- child.zIndex = zIndex;
76
- zIndex += 1;
77
- }
78
- children.sort(sortByZIndexDesc);
79
- let hasBackdrop = false;
80
- for (const child of children) {
81
- if (child instanceof BackdropRef && child.options.color !== "transparent") {
82
- child.visible = !hasBackdrop;
83
- hasBackdrop = true;
84
- }
51
+ #getInjector() {
52
+ try {
53
+ this.#injector.get(ViewContainerRef);
54
+ return this.#injector;
55
+ // eslint-disable-next-line no-empty
85
56
  }
57
+ catch (err) { }
58
+ const root = this.#appRef.components[0];
59
+ return root.injector;
86
60
  }
87
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerService, deps: [{ token: LAYER_ZINDEX_START, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
88
62
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerService }); }
89
63
  }
90
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LayerService, decorators: [{
91
65
  type: Injectable
92
- }], ctorParameters: () => [{ type: undefined, decorators: [{
93
- type: Inject,
94
- args: [LAYER_ZINDEX_START]
95
- }, {
96
- type: Optional
97
- }] }] });
98
- export class RootLayer extends LayerService {
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RootLayer, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
100
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: RootLayer, isStandalone: true, selector: "body", providers: [{ provide: LayerService, useExisting: RootLayer }], usesInheritance: true, ngImport: i0 }); }
101
- }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RootLayer, decorators: [{
103
- type: Directive,
104
- args: [{
105
- selector: "body",
106
- standalone: true,
107
- providers: [{ provide: LayerService, useExisting: RootLayer }]
108
- }]
109
- }] });
110
- export class IndividualLayer extends LayerService {
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: IndividualLayer, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
112
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: IndividualLayer, isStandalone: true, providers: [{ provide: LayerService, useExisting: IndividualLayer }], usesInheritance: true, ngImport: i0 }); }
113
- }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: IndividualLayer, decorators: [{
115
- type: Directive,
116
- args: [{
117
- standalone: true,
118
- providers: [{ provide: LayerService, useExisting: IndividualLayer }]
119
- }]
120
- }] });
121
- function sortChildren2(a, b) {
122
- const alwaysOnTop = sortByAlwaysOnTop(a, b);
123
- if (alwaysOnTop === 0) {
124
- return sortByBackdrop(a, b);
125
- }
126
- else {
127
- return alwaysOnTop;
128
- }
129
- }
130
- function sortByBackdrop(a, b) {
131
- if (a instanceof BackdropRef && a.under === b) {
132
- return -1;
133
- }
134
- else if (b instanceof BackdropRef && b.under === a) {
135
- return 1;
136
- }
137
- return 0;
138
- }
139
- function sortByZIndexDesc(a, b) {
140
- return b.zIndex - a.zIndex;
141
- }
142
- function sortByAlwaysOnTop(a, b) {
143
- return getAlwaysOnTop(a) - getAlwaysOnTop(b);
144
- }
145
- function getAlwaysOnTop(child) {
146
- if (child instanceof BackdropRef) {
147
- return child.under.alwaysOnTop || AlwaysOnTop.None;
148
- }
149
- else {
150
- return child.alwaysOnTop || AlwaysOnTop.None;
151
- }
152
- }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9sYXllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUNSLFFBQVEsRUFFWCxNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRS9DLE9BQU8sRUFBbUIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBWSxNQUFNLGFBQWEsQ0FBQTtBQUNuRCxPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2hFLE9BQU8sRUFBMEIsa0JBQWtCLEVBQXlCLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBOztBQUVuSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBUyxvQkFBb0IsQ0FBQyxDQUFBO0FBRWxGLDZDQUE2QztBQUM3Qyw4Q0FBOEM7QUFHOUMsTUFBTSxPQUFnQixZQUFZO0lBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDN0IsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM1QixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLEdBQUcsR0FBRyxNQUFNLENBQTBCLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFD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QUFDLENBQUMsTUFBTSxDQUFBO0FBQzlCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLENBQVcsRUFBRSxDQUFXO0lBQy9DLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBZTtJQUNuQyxJQUFJLEtBQUssWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUE7SUFDdEQsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQTtJQUNoRCxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5qZWN0b3IsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyB0b1NvcnRlZCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBDb3ZlclNlcnZpY2UgfSBmcm9tIFwiQG5ndXRpbC9ncmFwaGljc1wiXG5cbmltcG9ydCB7IEJhY2tkcm9wT3B0aW9ucywgQmFja2Ryb3BSZWYgfSBmcm9tIFwiLi9iYWNrZHJvcC1yZWZcIlxuaW1wb3J0IHsgQWx3YXlzT25Ub3AsIENoaWxkUmVmIH0gZnJvbSBcIi4vY2hpbGQtcmVmXCJcbmltcG9ydCB7IENvbnRhaW5lck9wdGlvbnMsIENvbnRhaW5lclJlZiB9IGZyb20gXCIuL2NvbnRhaW5lci1yZWZcIlxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsT3B0aW9ucywgQ29tcG9uZW50UG9ydGFsUmVmLCBUZW1wbGF0ZVBvcnRhbE9wdGlvbnMsIFRlbXBsYXRlUG9ydGFsUmVmIH0gZnJvbSBcIi4vcG9ydGFsLXJlZlwiXG5cbmV4cG9ydCBjb25zdCBMQVlFUl9aSU5ERVhfU1RBUlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcIkxBWUVSX1pJTkRFWF9TVEFSVFwiKVxuXG4vLyBUT0RPOiBFTEVWQVRJT05fU1RFUCBjb25maWcgd2l0aCBpbmplY3Rpb25cbi8vIFRPRE86IEVMRVZBVElPTl9TVEFSVCBjb25maWcgd2l0aCBpbmplY3Rpb25cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExheWVyU2VydmljZSB7XG4gICAgcmVhZG9ubHkgI2NvdmVyID0gaW5qZWN0KENvdmVyU2VydmljZSlcbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gICAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuICAgIHJlYWRvbmx5ICNlbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZiwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KVxuXG4gICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZWwgJiYgdGhpcy4jZWwubmF0aXZlRWxlbWVudCkgfHwgdGhpcy4jZG9jdW1lbnQuYm9keVxuICAgIH1cbiAgICAvLyByZWFkb25seSAjZWwgPSB0aGlzLnJvb3QubmF0aXZlRWxlbWVudFxuXG4gICAgcmVhZG9ubHkgI2NoaWxkcmVuOiBBcnJheTxDaGlsZFJlZj4gPSBbXVxuICAgIHJlYWRvbmx5ICN6SW5kZXhTdGFydDogbnVtYmVyXG4gICAgLy8gcmVhZG9ubHkgI2JhY2tkcm9wOiBNYXA8PlxuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChMQVlFUl9aSU5ERVhfU1RBUlQpIEBPcHRpb25hbCgpIHpJbmRleFN0YXJ0PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh6SW5kZXhTdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiN6SW5kZXhTdGFydCA9IHpJbmRleFN0YXJ0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN6SW5kZXhTdGFydCA9IDEwMDAwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdDb21wb25lbnRQb3J0YWw8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiBDb21wb25lbnRQb3J0YWxPcHRpb25zPFQ+KTogQ29tcG9uZW50UG9ydGFsUmVmPFQ+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCBpbmplY3RvcjogdGhpcy4jaW5qZWN0b3IgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChuZXcgQ29tcG9uZW50UG9ydGFsUmVmKGNvbXBvbmVudCwgb3B0aW9ucykpXG4gICAgfVxuXG4gICAgbmV3VGVtcGxhdGVQb3J0YWw8VD4odHBsOiBUZW1wbGF0ZVJlZjxUPiwgb3B0aW9uczogVGVtcGxhdGVQb3J0YWxPcHRpb25zPFQ+KTogVGVtcGxhdGVQb3J0YWxSZWY8VD4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGluamVjdG9yOiB0aGlzLiNpbmplY3RvciB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kKG5ldyBUZW1wbGF0ZVBvcnRhbFJlZih0cGwsIG9wdGlvbnMpKVxuICAgIH1cblxuICAgIG5ld0NvbnRhaW5lcihvcHRpb25zOiBDb250YWluZXJPcHRpb25zKTogQ29udGFpbmVyUmVmIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCBpbmplY3RvcjogdGhpcy4jaW5qZWN0b3IgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChuZXcgQ29udGFpbmVyUmVmKG9wdGlvbnMpKVxuICAgIH1cblxuICAgIG5ld0JhY2tkcm9wKHVuZGVyOiBDaGlsZFJlZiwgb3B0aW9uczogQmFja2Ryb3BPcHRpb25zKTogQmFja2Ryb3BSZWYge1xuICAgICAgICBjb25zdCBjb3ZlclJlZiA9IHRoaXMuI2NvdmVyLmNyZWF0ZSh0aGlzLnJvb3QsIG9wdGlvbnMpXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGVuZChuZXcgQmFja2Ryb3BSZWYoY292ZXJSZWYsIHVuZGVyLCBvcHRpb25zKSlcbiAgICB9XG5cbiAgICBhcHBlbmQ8VCBleHRlbmRzIENoaWxkUmVmPihyZWY6IFQpOiBUIHtcbiAgICAgICAgaWYgKCF0aGlzLiNjaGlsZHJlbi5pbmNsdWRlcyhyZWYpKSB7XG4gICAgICAgICAgICB0aGlzLiNjaGlsZHJlbi5wdXNoKHJlZilcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQocmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICByZWYuc3RhdGUub24oXCJkaXNwb3NlZFwiLCAoKSA9PiB0aGlzLiNyZW1vdmUocmVmKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmXG4gICAgfVxuXG4gICAgI3JlbW92ZShyZWY6IENoaWxkUmVmKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuI2NoaWxkcmVuLmluZGV4T2YocmVmKVxuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuI2NoaWxkcmVuLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgICB0aGlzLiN1cGRhdGUoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3VwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0b1NvcnRlZCh0aGlzLiNjaGlsZHJlbiwgc29ydENoaWxkcmVuMilcblxuICAgICAgICBsZXQgekluZGV4ID0gdGhpcy4jekluZGV4U3RhcnRcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY2hpbGQuekluZGV4ID0gekluZGV4XG4gICAgICAgICAgICB6SW5kZXggKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW4uc29ydChzb3J0QnlaSW5kZXhEZXNjKVxuXG4gICAgICAgIGxldCBoYXNCYWNrZHJvcCA9IGZhbHNlXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIEJhY2tkcm9wUmVmICYmIGNoaWxkLm9wdGlvbnMuY29sb3IgIT09IFwidHJhbnNwYXJlbnRcIikge1xuICAgICAgICAgICAgICAgIGNoaWxkLnZpc2libGUgPSAhaGFzQmFja2Ryb3BcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IFwiYm9keVwiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMYXllclNlcnZpY2UsIHVzZUV4aXN0aW5nOiBSb290TGF5ZXIgfV1cbn0pXG5leHBvcnQgY2xhc3MgUm9vdExheWVyIGV4dGVuZHMgTGF5ZXJTZXJ2aWNlIHt9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMYXllclNlcnZpY2UsIHVzZUV4aXN0aW5nOiBJbmRpdmlkdWFsTGF5ZXIgfV1cbn0pXG5leHBvcnQgY2xhc3MgSW5kaXZpZHVhbExheWVyIGV4dGVuZHMgTGF5ZXJTZXJ2aWNlIHt9XG5cbmZ1bmN0aW9uIHNvcnRDaGlsZHJlbjIoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgY29uc3QgYWx3YXlzT25Ub3AgPSBzb3J0QnlBbHdheXNPblRvcChhLCBiKVxuICAgIGlmIChhbHdheXNPblRvcCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc29ydEJ5QmFja2Ryb3AoYSwgYilcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWx3YXlzT25Ub3BcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNvcnRCeUJhY2tkcm9wKGE6IENoaWxkUmVmLCBiOiBDaGlsZFJlZikge1xuICAgIGlmIChhIGluc3RhbmNlb2YgQmFja2Ryb3BSZWYgJiYgYS51bmRlciA9PT0gYikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICB9IGVsc2UgaWYgKGIgaW5zdGFuY2VvZiBCYWNrZHJvcFJlZiAmJiBiLnVuZGVyID09PSBhKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgfVxuICAgIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHNvcnRCeVpJbmRleERlc2MoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgcmV0dXJuIGIuekluZGV4IC0gYS56SW5kZXhcbn1cblxuZnVuY3Rpb24gc29ydEJ5QWx3YXlzT25Ub3AoYTogQ2hpbGRSZWYsIGI6IENoaWxkUmVmKSB7XG4gICAgcmV0dXJuIGdldEFsd2F5c09uVG9wKGEpIC0gZ2V0QWx3YXlzT25Ub3AoYilcbn1cblxuZnVuY3Rpb24gZ2V0QWx3YXlzT25Ub3AoY2hpbGQ6IENoaWxkUmVmKTogbnVtYmVyIHtcbiAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBCYWNrZHJvcFJlZikge1xuICAgICAgICByZXR1cm4gY2hpbGQudW5kZXIuYWx3YXlzT25Ub3AgfHwgQWx3YXlzT25Ub3AuTm9uZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZC5hbHdheXNPblRvcCB8fCBBbHdheXNPblRvcC5Ob25lXG4gICAgfVxufVxuIl19
66
+ }], ctorParameters: () => [] });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9sYXllci9sYXllci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFM0csT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFL0MsT0FBTyxFQUFtQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sYUFBYSxDQUFBO0FBQ25ELE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRCxPQUFPLEVBQTBCLGtCQUFrQixFQUF5QixpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTs7QUFFbkgsNkNBQTZDO0FBQzdDLDhDQUE4QztBQUc5QyxNQUFNLE9BQU8sWUFBWTtJQUNaLFVBQVUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDbkMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUM3QixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7SUFFekMsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBRUQ7UUFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV6Qiw2QkFBNkI7SUFDakMsQ0FBQztJQUVELGtCQUFrQixDQUFJLFNBQTJCLEVBQUUsT0FBa0M7UUFDakYsOENBQThDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFBO1FBQzNELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELGlCQUFpQixDQUFJLEdBQW1CLEVBQUUsT0FBaUM7UUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUE7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQXlCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFBO1FBQzNELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFlLEVBQUUsT0FBd0I7UUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXFCLEVBQUUsY0FBMkIsV0FBVyxDQUFDLElBQUk7UUFDMUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO1lBQ3JCLG9DQUFvQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFBLENBQUM7UUFFaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ3hCLENBQUM7OEdBeERRLFlBQVk7a0hBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiXG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBDb3ZlclNlcnZpY2UgfSBmcm9tIFwiQG5ndXRpbC9ncmFwaGljc1wiXG5cbmltcG9ydCB7IEJhY2tkcm9wT3B0aW9ucywgQmFja2Ryb3BSZWYgfSBmcm9tIFwiLi9iYWNrZHJvcC1yZWZcIlxuaW1wb3J0IHsgQWx3YXlzT25Ub3AsIENoaWxkUmVmIH0gZnJvbSBcIi4vY2hpbGQtcmVmXCJcbmltcG9ydCB7IENvbnRhaW5lck9wdGlvbnMsIENvbnRhaW5lclJlZiB9IGZyb20gXCIuL2NvbnRhaW5lci1yZWZcIlxuaW1wb3J0IHsgRXh0ZXJuYWxSZWYgfSBmcm9tIFwiLi9leHRlcm5hbC1yZWZcIlxuaW1wb3J0IHsgTGF5ZXJDb250YWluZXIgfSBmcm9tIFwiLi9sYXllci1jb250YWluZXJcIlxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsT3B0aW9ucywgQ29tcG9uZW50UG9ydGFsUmVmLCBUZW1wbGF0ZVBvcnRhbE9wdGlvbnMsIFRlbXBsYXRlUG9ydGFsUmVmIH0gZnJvbSBcIi4vcG9ydGFsLXJlZlwiXG5cbi8vIFRPRE86IEVMRVZBVElPTl9TVEVQIGNvbmZpZyB3aXRoIGluamVjdGlvblxuLy8gVE9ETzogRUxFVkFUSU9OX1NUQVJUIGNvbmZpZyB3aXRoIGluamVjdGlvblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGF5ZXJTZXJ2aWNlIHtcbiAgICByZWFkb25seSAjY29udGFpbmVyID0gaW5qZWN0KExheWVyQ29udGFpbmVyKVxuICAgIHJlYWRvbmx5ICNjb3ZlciA9IGluamVjdChDb3ZlclNlcnZpY2UpXG4gICAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuICAgIHJlYWRvbmx5ICNhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpXG5cbiAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRhaW5lci5yb290XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuI2FwcFJlZilcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLiNhcHBSZWYuKVxuICAgIH1cblxuICAgIG5ld0NvbXBvbmVudFBvcnRhbDxUPihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IENvbXBvbmVudFBvcnRhbE9wdGlvbnM8VD4pOiBDb21wb25lbnRQb3J0YWxSZWY8VD4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmdldFJvb3RWaWV3Q29udGFpbmVyUmVmKCkpXG4gICAgICAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgaW5qZWN0b3I6IHRoaXMuI2dldEluamVjdG9yKCkgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNjb250YWluZXIuYXBwZW5kKG5ldyBDb21wb25lbnRQb3J0YWxSZWYoY29tcG9uZW50LCBvcHRpb25zKSlcbiAgICB9XG5cbiAgICBuZXdUZW1wbGF0ZVBvcnRhbDxUPih0cGw6IFRlbXBsYXRlUmVmPFQ+LCBvcHRpb25zOiBUZW1wbGF0ZVBvcnRhbE9wdGlvbnM8VD4pOiBUZW1wbGF0ZVBvcnRhbFJlZjxUPiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pbmplY3Rvcikge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgaW5qZWN0b3I6IHRoaXMuI2dldEluamVjdG9yKCkgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNjb250YWluZXIuYXBwZW5kKG5ldyBUZW1wbGF0ZVBvcnRhbFJlZih0cGwsIG9wdGlvbnMpKVxuICAgIH1cblxuICAgIG5ld0NvbnRhaW5lcihvcHRpb25zOiBDb250YWluZXJPcHRpb25zKTogQ29udGFpbmVyUmVmIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCBpbmplY3RvcjogdGhpcy4jZ2V0SW5qZWN0b3IoKSB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRhaW5lci5hcHBlbmQobmV3IENvbnRhaW5lclJlZihvcHRpb25zKSlcbiAgICB9XG5cbiAgICBuZXdCYWNrZHJvcCh1bmRlcjogQ2hpbGRSZWYsIG9wdGlvbnM6IEJhY2tkcm9wT3B0aW9ucyk6IEJhY2tkcm9wUmVmIHtcbiAgICAgICAgY29uc3QgY292ZXJSZWYgPSB0aGlzLiNjb3Zlci5jcmVhdGUodGhpcy5yb290LCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gdGhpcy4jY29udGFpbmVyLmFwcGVuZChuZXcgQmFja2Ryb3BSZWYoY292ZXJSZWYsIHVuZGVyLCBvcHRpb25zKSlcbiAgICB9XG5cbiAgICBhZGRFeHRlcm5hbChlbGVtZW50OiBFbGVtZW50SW5wdXQsIGFsd2F5c09uVG9wOiBBbHdheXNPblRvcCA9IEFsd2F5c09uVG9wLk5vbmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRhaW5lci5hcHBlbmQobmV3IEV4dGVybmFsUmVmKGNvZXJjZUVsZW1lbnQoZWxlbWVudCksIGFsd2F5c09uVG9wKSlcbiAgICB9XG5cbiAgICAjZ2V0SW5qZWN0b3IoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLiNpbmplY3Rvci5nZXQoVmlld0NvbnRhaW5lclJlZilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNpbmplY3RvclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gY2F0Y2ggKGVycikge31cblxuICAgICAgICBjb25zdCByb290ID0gdGhpcy4jYXBwUmVmLmNvbXBvbmVudHNbMF1cbiAgICAgICAgcmV0dXJuIHJvb3QuaW5qZWN0b3JcbiAgICB9XG59XG4iXX0=