@dotglitch/ngx-common 1.1.49 → 1.1.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,10 +1,11 @@
1
- import { ElementRef, EventEmitter, TemplateRef } from '@angular/core';
1
+ import { ElementRef, EventEmitter, NgZone, TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  type CSSUnitString = 'px' | '%' | 'em' | 'in' | '';
4
4
  type CSSUnit = `${number}${CSSUnitString}` | `var(--${string})`;
5
5
  type CSSString = CSSUnit | `calc(${CSSUnit | ''}${'' | ' '}${'+' | '-' | '/' | '*'}${'' | ' '}${CSSUnit | ''})`;
6
6
  export declare class ParallaxCardComponent {
7
7
  private readonly element;
8
+ private readonly ngZone;
8
9
  content: TemplateRef<ElementRef>;
9
10
  background: TemplateRef<ElementRef>;
10
11
  backContent: TemplateRef<ElementRef>;
@@ -30,7 +31,7 @@ export declare class ParallaxCardComponent {
30
31
  bgInset: number;
31
32
  /**
32
33
  * Duration for the flip animation in ms
33
- * @default 80
34
+ * @default 1200
34
35
  */
35
36
  flipAnimationDuration: number;
36
37
  renderCardFront: boolean;
@@ -44,7 +45,7 @@ export declare class ParallaxCardComponent {
44
45
  private pointerX;
45
46
  private pointerY;
46
47
  private pointerLeave;
47
- constructor(element: ElementRef);
48
+ constructor(element: ElementRef, ngZone: NgZone);
48
49
  ngAfterViewInit(): void;
49
50
  onPointerMove(e: PointerEvent): void;
50
51
  onPointerEnter(): void;
@@ -27,7 +27,7 @@ export declare class ReactMagicWrapperComponent implements OnChanges, OnDestroy,
27
27
  * @param _outputs
28
28
  * @returns
29
29
  */
30
- static WrapAngularComponent: ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings }: {
30
+ static WrapAngularComponent: ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings, rootElementName, containerElementName }: {
31
31
  component: Type<any>;
32
32
  appRef: Omit<ApplicationRef, '_runningTick'>;
33
33
  injector: Injector;
@@ -39,6 +39,8 @@ export declare class ReactMagicWrapperComponent implements OnChanges, OnDestroy,
39
39
  [key: string]: Function;
40
40
  };
41
41
  additionalChildren?: React.ReactNode[];
42
+ rootElementName?: string;
43
+ containerElementName?: string;
42
44
  }) => React.NamedExoticComponent<object>;
43
45
  /**
44
46
  * The react component to be wrapped.
@@ -7,8 +7,9 @@ export class ParallaxCardComponent {
7
7
  get cardBack() { return this.wrapper.querySelector('.card.backface'); }
8
8
  get backgroundElement() { return this.cardFront.querySelector('.card-bg'); }
9
9
  get backfaceBackgroundElement() { return this.cardBack.querySelector('.card-bg'); }
10
- constructor(element) {
10
+ constructor(element, ngZone) {
11
11
  this.element = element;
12
+ this.ngZone = ngZone;
12
13
  /**
13
14
  *
14
15
  */
@@ -30,9 +31,9 @@ export class ParallaxCardComponent {
30
31
  this.bgInset = 80;
31
32
  /**
32
33
  * Duration for the flip animation in ms
33
- * @default 80
34
+ * @default 1200
34
35
  */
35
- this.flipAnimationDuration = 1600;
36
+ this.flipAnimationDuration = 1200;
36
37
  this.renderCardFront = true;
37
38
  this.renderCardBack = true;
38
39
  this.showBackOfCard = false;
@@ -67,10 +68,12 @@ export class ParallaxCardComponent {
67
68
  }
68
69
  ngAfterViewInit() {
69
70
  const el = this.wrapper;
70
- // Directly attach events to the wrapper
71
- el.onpointermove = (e) => this.onPointerMove(e);
72
- el.onpointerenter = () => this.onPointerEnter();
73
- el.onpointerleave = () => this.onPointerLeave();
71
+ this.ngZone.runOutsideAngular(() => {
72
+ // Directly attach events to the wrapper
73
+ el.onpointermove = (e) => this.onPointerMove(e);
74
+ el.onpointerenter = () => this.onPointerEnter();
75
+ el.onpointerleave = () => this.onPointerLeave();
76
+ });
74
77
  el.onclick = () => this.onClick();
75
78
  this.loaded.emit();
76
79
  }
@@ -95,8 +98,8 @@ export class ParallaxCardComponent {
95
98
  this.showBackOfCard = !this.showBackOfCard;
96
99
  this.render();
97
100
  }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ParallaxCardComponent, isStandalone: true, selector: "ngx-parallax-card", inputs: { width: "width", height: "height", bgInset: "bgInset", flipAnimationDuration: "flipAnimationDuration" }, outputs: { loaded: "loaded" }, host: { properties: { "style.width": "width", "style.height": "height", "style.--card-bg-inset": "-bgInset+\"px\"", "style.--flip-animation-duration": "flipAnimationDuration+\"ms\"", "class.flip": "showBackOfCard" } }, queries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: TemplateRef }, { propertyName: "background", first: true, predicate: ["background"], descendants: true, read: TemplateRef }, { propertyName: "backContent", first: true, predicate: ["backContent"], descendants: true, read: TemplateRef }, { propertyName: "backBackground", first: true, predicate: ["backBackground"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ParallaxCardComponent, isStandalone: true, selector: "ngx-parallax-card", inputs: { width: "width", height: "height", bgInset: "bgInset", flipAnimationDuration: "flipAnimationDuration" }, outputs: { loaded: "loaded" }, host: { properties: { "style.width": "width", "style.height": "height", "style.--card-bg-inset": "-bgInset+\"px\"", "style.--flip-animation-duration": "flipAnimationDuration+\"ms\"", "class.flip": "showBackOfCard" } }, queries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: TemplateRef }, { propertyName: "background", first: true, predicate: ["background"], descendants: true, read: TemplateRef }, { propertyName: "backContent", first: true, predicate: ["backContent"], descendants: true, read: TemplateRef }, { propertyName: "backBackground", first: true, predicate: ["backBackground"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d;will-change:transform}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
100
103
  }
101
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, decorators: [{
102
105
  type: Component,
@@ -108,8 +111,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
108
111
  '[style.--card-bg-inset]': '-bgInset+"px"',
109
112
  '[style.--flip-animation-duration]': 'flipAnimationDuration+"ms"',
110
113
  '[class.flip]': 'showBackOfCard'
111
- }, standalone: true, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"] }]
112
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { content: [{
114
+ }, standalone: true, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d;will-change:transform}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"] }]
115
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { content: [{
113
116
  type: ContentChild,
114
117
  args: ['content', { read: TemplateRef }]
115
118
  }], background: [{
@@ -132,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
132
135
  }], flipAnimationDuration: [{
133
136
  type: Input
134
137
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsYXgtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcGFyYWxsYXgtY2FyZC9wYXJhbGxheC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9wYXJhbGxheC1jYXJkL3BhcmFsbGF4LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXVCOUcsTUFBTSxPQUFPLHFCQUFxQjtJQXdDOUIsSUFBWSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQTRCLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQVksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1RixJQUFZLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFnQixDQUFDLENBQUMsQ0FBQztJQUM5RixJQUFZLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFtQixDQUFDLENBQUMsQ0FBQztJQUN0RyxJQUFZLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFtQixDQUFDLENBQUMsQ0FBQztJQU03RyxZQUNxQixPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBekN4Qzs7V0FFRztR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ZlEsZ0JBQWdCOzsyRkFXWCxxQkFBcUI7a0JBaEJqQyxTQUFTOytCQUNJLG1CQUFtQixXQUdwQjt3QkFDTCxnQkFBZ0I7cUJBQ25CLFFBQ0s7d0JBQ0YsZUFBZSxFQUFFLE9BQU87d0JBQ3hCLGdCQUFnQixFQUFFLFFBQVE7d0JBQzFCLHlCQUF5QixFQUFFLGVBQWU7d0JBQzFDLG1DQUFtQyxFQUFFLDRCQUE0Qjt3QkFDakUsY0FBYyxFQUFFLGdCQUFnQjtxQkFDbkMsY0FDVyxJQUFJOytFQUtnQyxPQUFPO3NCQUF0RCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ0ssVUFBVTtzQkFBNUQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUdHLFdBQVc7c0JBQTlELFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDSyxjQUFjO3NCQUFwRSxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLM0MsTUFBTTtzQkFBZixNQUFNO2dCQU1FLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLHFCQUFxQjtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBDU1NVbml0U3RyaW5nID0gJ3B4JyB8ICclJyB8ICdlbScgfCAnaW4nIHwgJyc7XG50eXBlIENTU1VuaXQgPSBgJHtudW1iZXJ9JHtDU1NVbml0U3RyaW5nfWAgfCBgdmFyKC0tJHtzdHJpbmd9KWA7XG50eXBlIENTU1N0cmluZyA9IENTU1VuaXQgfFxuICAgIGBjYWxjKCR7Q1NTVW5pdHwnJ30keycnfCcgJ30keycrJ3wnLSd8Jy8nfCcqJ30keycnfCcgJ30ke0NTU1VuaXR8Jyd9KWBcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtcGFyYWxsYXgtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhcmFsbGF4LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3BhcmFsbGF4LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXRcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tzdHlsZS53aWR0aF0nOiAnd2lkdGgnLFxuICAgICAgICAnW3N0eWxlLmhlaWdodF0nOiAnaGVpZ2h0JyxcbiAgICAgICAgJ1tzdHlsZS4tLWNhcmQtYmctaW5zZXRdJzogJy1iZ0luc2V0K1wicHhcIicsXG4gICAgICAgICdbc3R5bGUuLS1mbGlwLWFuaW1hdGlvbi1kdXJhdGlvbl0nOiAnZmxpcEFuaW1hdGlvbkR1cmF0aW9uK1wibXNcIicsXG4gICAgICAgICdbY2xhc3MuZmxpcF0nOiAnc2hvd0JhY2tPZkNhcmQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFBhcmFsbGF4Q2FyZENvbXBvbmVudCB7XG5cbiAgICAvLyBGcm9udCBvZiBjYXJkXG4gICAgQENvbnRlbnRDaGlsZCgnY29udGVudCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgY29udGVudDogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG4gICAgQENvbnRlbnRDaGlsZCgnYmFja2dyb3VuZCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgYmFja2dyb3VuZDogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG5cbiAgICAvLyBCYWNrIG9mIGNhcmRcbiAgICBAQ29udGVudENoaWxkKCdiYWNrQ29udGVudCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgYmFja0NvbnRlbnQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2JhY2tCYWNrZ3JvdW5kJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBiYWNrQmFja2dyb3VuZDogVGVtcGxhdGVSZWY8RWxlbWVudFJlZj47XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgY2FyZFxuICAgICAqIEBkZWZhdWx0IGAyNDBweGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSB3aWR0aDogIENTU1N0cmluZyA9ICcyNDBweCc7XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSBjYXJkXG4gICAgICogQGRlZmF1bHQgYDMyMHB4YFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhlaWdodDogQ1NTU3RyaW5nID0gJzMyMHB4JztcbiAgICAvKipcbiAgICAgKiBJbnNldCBwYWRkaW5nIG9mIHRoZSBwYXJhbGxheFxuICAgICAqIEBkZWZhdWx0IDgwXG4gICAgICovXG4gICAgQElucHV0KCkgYmdJbnNldDogIG51bWJlciA9IDgwO1xuICAgIC8qKlxuICAgICAqIER1cmF0aW9uIGZvciB0aGUgZmxpcCBhbmltYXRpb24gaW4gbXNcbiAgICAgKiBAZGVmYXVsdCA4MFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZsaXBBbmltYXRpb25EdXJhdGlvbjogIG51bWJlciA9IDE2MDA7XG5cbiAgICByZW5kZXJDYXJkRnJvbnQgPSB0cnVlO1xuICAgIHJlbmRlckNhcmRCYWNrID0gdHJ1ZTtcbiAgICBzaG93QmFja09mQ2FyZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBnZXQgd3JhcHBlcigpIHsgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgY2FyZEZyb250KCkgeyByZXR1cm4gdGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkLmZyb250JykgYXMgSFRNTEVsZW1lbnQ7IH1cbiAgICBwcml2YXRlIGdldCBjYXJkQmFjaygpIHsgcmV0dXJuIHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuY2FyZC5iYWNrZmFjZScpIGFzIEhUTUxFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgYmFja2dyb3VuZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLmNhcmRGcm9udC5xdWVyeVNlbGVjdG9yKCcuY2FyZC1iZycpIGFzIEhUTUxEaXZFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgYmFja2ZhY2VCYWNrZ3JvdW5kRWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuY2FyZEJhY2sucXVlcnlTZWxlY3RvcignLmNhcmQtYmcnKSBhcyBIVE1MRGl2RWxlbWVudDsgfVxuXG4gICAgcHJpdmF0ZSBwb2ludGVyWCA9IDA7XG4gICAgcHJpdmF0ZSBwb2ludGVyWSA9IDA7XG4gICAgcHJpdmF0ZSBwb2ludGVyTGVhdmUgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZlxuICAgICkgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy53cmFwcGVyO1xuXG4gICAgICAgIC8vIERpcmVjdGx5IGF0dGFjaCBldmVudHMgdG8gdGhlIHdyYXBwZXJcbiAgICAgICAgZWwub25wb2ludGVybW92ZSA9IChlKSA9PiB0aGlzLm9uUG9pbnRlck1vdmUoZSk7XG4gICAgICAgIGVsLm9ucG9pbnRlcmVudGVyID0gKCkgPT4gdGhpcy5vblBvaW50ZXJFbnRlcigpO1xuICAgICAgICBlbC5vbnBvaW50ZXJsZWF2ZSA9ICgpID0+IHRoaXMub25Qb2ludGVyTGVhdmUoKTtcbiAgICAgICAgZWwub25jbGljayA9ICgpID0+IHRoaXMub25DbGljaygpO1xuXG4gICAgICAgIHRoaXMubG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJNb3ZlKGU6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9ID0gdGhpcy53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLnBvaW50ZXJYID0gZS5wYWdlWCAtIGxlZnQgLSAod2lkdGggLyAyKTtcbiAgICAgICAgdGhpcy5wb2ludGVyWSA9IGUucGFnZVkgLSB0b3AgLSAoaGVpZ2h0IC8gMik7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJFbnRlcigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucG9pbnRlckxlYXZlKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5wb2ludGVyTGVhdmUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclggPSAwO1xuICAgICAgICAgICAgdGhpcy5wb2ludGVyWSA9IDA7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LCA2MDApIGFzIGFueTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUaGlzIGNhbiBnZXQgaW50ZXJjZXB0ZWQgaW4gc29tZSBzdGF0ZXNcbiAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnNob3dCYWNrT2ZDYXJkID0gIXRoaXMuc2hvd0JhY2tPZkNhcmQ7XG4gICAgICAgIHRoaXMucmVuZGVyKClcbiAgICB9XG5cbiAgICByZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBtb3VzZVBYID0gdGhpcy5wb2ludGVyWCAvIHdpZHRoO1xuICAgICAgICBjb25zdCBtb3VzZVBZID0gdGhpcy5wb2ludGVyWSAvIGhlaWdodDtcblxuICAgICAgICAvLyBSb3RhdGlvbiBmYWN0b3JzXG4gICAgICAgIGNvbnN0IHJYID0gbW91c2VQWCAqIHRoaXMuYmdJbnNldCAvIDEuNzU7XG4gICAgICAgIGNvbnN0IHJZID0gbW91c2VQWSAqIC10aGlzLmJnSW5zZXQgLyAxLjc1O1xuXG4gICAgICAgIC8vIFRyYW5zbGF0aW9uIGZhY3RvcnNcbiAgICAgICAgY29uc3QgdFggPSBtb3VzZVBYICogLXRoaXMuYmdJbnNldCAqIDI7XG4gICAgICAgIGNvbnN0IHRZID0gbW91c2VQWSAqIC10aGlzLmJnSW5zZXQgKiAyO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbmRlckNhcmRGcm9udCkge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke3RYfXB4KSB0cmFuc2xhdGVZKCR7dFl9cHgpYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJDYXJkQmFjaykge1xuICAgICAgICAgICAgdGhpcy5iYWNrZmFjZUJhY2tncm91bmRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7dFh9cHgpIHRyYW5zbGF0ZVkoJHt0WX1weClgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0JhY2tPZkNhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZEZyb250LnN0eWxlLnRyYW5zZm9ybSA9IGByb3RhdGVZKDE4MGRlZykgcm90YXRlWCgkey1yWX1kZWcpYDtcbiAgICAgICAgICAgIHRoaXMuY2FyZEJhY2suc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoJHstclh9ZGVnKSByb3RhdGVYKCR7LXJZfWRlZylgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJkRnJvbnQuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoJHtyWH1kZWcpIHJvdGF0ZVgoJHtyWX1kZWcpYDtcbiAgICAgICAgICAgIHRoaXMuY2FyZEJhY2suc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoMTgwZGVnKSByb3RhdGVYKCR7LXJZfWRlZylgO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChyZW5kZXJDYXJkQmFjaykge1xuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJhY2tmYWNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJnXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWSgwKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhY2tCYWNrZ3JvdW5kXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJiYWNrQ29udGVudFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuXG5AaWYgKHJlbmRlckNhcmRGcm9udCkge1xuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGZyb250XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJnXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWSgwKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhY2tncm91bmRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgQGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIi8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cblxuXG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsYXgtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcGFyYWxsYXgtY2FyZC9wYXJhbGxheC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9wYXJhbGxheC1jYXJkL3BhcmFsbGF4LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXVCdEgsTUFBTSxPQUFPLHFCQUFxQjtJQXdDOUIsSUFBWSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQTRCLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQVksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1RixJQUFZLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFnQixDQUFDLENBQUMsQ0FBQztJQUM5RixJQUFZLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFtQixDQUFDLENBQUMsQ0FBQztJQUN0RyxJQUFZLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFtQixDQUFDLENBQUMsQ0FBQztJQU03RyxZQUNxQixPQUFtQixFQUNuQixNQUFjO1FBRGQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNu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SUFDakIsQ0FBQzs4R0E3RlEscUJBQXFCO2tHQUFyQixxQkFBcUIsb2dCQUdHLFdBQVcsbUdBQ1IsV0FBVyxxR0FHVixXQUFXLDJHQUNSLFdBQVcsNkJDaEN2RCwwekJBNEJBLHFpQ0RmUSxnQkFBZ0I7OzJGQVdYLHFCQUFxQjtrQkFoQmpDLFNBQVM7K0JBQ0ksbUJBQW1CLFdBR3BCO3dCQUNMLGdCQUFnQjtxQkFDbkIsUUFDSzt3QkFDRixlQUFlLEVBQUUsT0FBTzt3QkFDeEIsZ0JBQWdCLEVBQUUsUUFBUTt3QkFDMUIseUJBQXlCLEVBQUUsZUFBZTt3QkFDMUMsbUNBQW1DLEVBQUUsNEJBQTRCO3dCQUNqRSxjQUFjLEVBQUUsZ0JBQWdCO3FCQUNuQyxjQUNXLElBQUk7b0dBS2dDLE9BQU87c0JBQXRELFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDSyxVQUFVO3NCQUE1RCxZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBR0csV0FBVztzQkFBOUQsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUNLLGNBQWM7c0JBQXBFLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUszQyxNQUFNO3NCQUFmLE1BQU07Z0JBTUUsS0FBSztzQkFBYixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0cscUJBQXFCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgQ1NTVW5pdFN0cmluZyA9ICdweCcgfCAnJScgfCAnZW0nIHwgJ2luJyB8ICcnO1xudHlwZSBDU1NVbml0ID0gYCR7bnVtYmVyfSR7Q1NTVW5pdFN0cmluZ31gIHwgYHZhcigtLSR7c3RyaW5nfSlgO1xudHlwZSBDU1NTdHJpbmcgPSBDU1NVbml0IHxcbiAgICBgY2FsYygke0NTU1VuaXR8Jyd9JHsnJ3wnICd9JHsnKyd8Jy0nfCcvJ3wnKid9JHsnJ3wnICd9JHtDU1NVbml0fCcnfSlgXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LXBhcmFsbGF4LWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXJhbGxheC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wYXJhbGxheC1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJyxcbiAgICAgICAgJ1tzdHlsZS5oZWlnaHRdJzogJ2hlaWdodCcsXG4gICAgICAgICdbc3R5bGUuLS1jYXJkLWJnLWluc2V0XSc6ICctYmdJbnNldCtcInB4XCInLFxuICAgICAgICAnW3N0eWxlLi0tZmxpcC1hbmltYXRpb24tZHVyYXRpb25dJzogJ2ZsaXBBbmltYXRpb25EdXJhdGlvbitcIm1zXCInLFxuICAgICAgICAnW2NsYXNzLmZsaXBdJzogJ3Nob3dCYWNrT2ZDYXJkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQYXJhbGxheENhcmRDb21wb25lbnQge1xuXG4gICAgLy8gRnJvbnQgb2YgY2FyZFxuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2JhY2tncm91bmQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGJhY2tncm91bmQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuXG4gICAgLy8gQmFjayBvZiBjYXJkXG4gICAgQENvbnRlbnRDaGlsZCgnYmFja0NvbnRlbnQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGJhY2tDb250ZW50OiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAQ29udGVudENoaWxkKCdiYWNrQmFja2dyb3VuZCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgYmFja0JhY2tncm91bmQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIGNhcmRcbiAgICAgKiBAZGVmYXVsdCBgMjQwcHhgXG4gICAgICovXG4gICAgQElucHV0KCkgd2lkdGg6ICBDU1NTdHJpbmcgPSAnMjQwcHgnO1xuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgY2FyZFxuICAgICAqIEBkZWZhdWx0IGAzMjBweGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoZWlnaHQ6IENTU1N0cmluZyA9ICczMjBweCc7XG4gICAgLyoqXG4gICAgICogSW5zZXQgcGFkZGluZyBvZiB0aGUgcGFyYWxsYXhcbiAgICAgKiBAZGVmYXVsdCA4MFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGJnSW5zZXQ6ICBudW1iZXIgPSA4MDtcbiAgICAvKipcbiAgICAgKiBEdXJhdGlvbiBmb3IgdGhlIGZsaXAgYW5pbWF0aW9uIGluIG1zXG4gICAgICogQGRlZmF1bHQgMTIwMFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZsaXBBbmltYXRpb25EdXJhdGlvbjogIG51bWJlciA9IDEyMDA7XG5cbiAgICByZW5kZXJDYXJkRnJvbnQgPSB0cnVlO1xuICAgIHJlbmRlckNhcmRCYWNrID0gdHJ1ZTtcbiAgICBzaG93QmFja09mQ2FyZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBnZXQgd3JhcHBlcigpIHsgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgY2FyZEZyb250KCkgeyByZXR1cm4gdGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5jYXJkLmZyb250JykgYXMgSFRNTEVsZW1lbnQ7IH1cbiAgICBwcml2YXRlIGdldCBjYXJkQmFjaygpIHsgcmV0dXJuIHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuY2FyZC5iYWNrZmFjZScpIGFzIEhUTUxFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgYmFja2dyb3VuZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLmNhcmRGcm9udC5xdWVyeVNlbGVjdG9yKCcuY2FyZC1iZycpIGFzIEhUTUxEaXZFbGVtZW50OyB9XG4gICAgcHJpdmF0ZSBnZXQgYmFja2ZhY2VCYWNrZ3JvdW5kRWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuY2FyZEJhY2sucXVlcnlTZWxlY3RvcignLmNhcmQtYmcnKSBhcyBIVE1MRGl2RWxlbWVudDsgfVxuXG4gICAgcHJpdmF0ZSBwb2ludGVyWCA9IDA7XG4gICAgcHJpdmF0ZSBwb2ludGVyWSA9IDA7XG4gICAgcHJpdmF0ZSBwb2ludGVyTGVhdmUgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZVxuICAgICkgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy53cmFwcGVyO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIERpcmVjdGx5IGF0dGFjaCBldmVudHMgdG8gdGhlIHdyYXBwZXJcbiAgICAgICAgICAgIGVsLm9ucG9pbnRlcm1vdmUgPSAoZSkgPT4gdGhpcy5vblBvaW50ZXJNb3ZlKGUpO1xuICAgICAgICAgICAgZWwub25wb2ludGVyZW50ZXIgPSAoKSA9PiB0aGlzLm9uUG9pbnRlckVudGVyKCk7XG4gICAgICAgICAgICBlbC5vbnBvaW50ZXJsZWF2ZSA9ICgpID0+IHRoaXMub25Qb2ludGVyTGVhdmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgZWwub25jbGljayA9ICgpID0+IHRoaXMub25DbGljaygpO1xuXG4gICAgICAgIHRoaXMubG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJNb3ZlKGU6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9ID0gdGhpcy53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLnBvaW50ZXJYID0gZS5wYWdlWCAtIGxlZnQgLSAod2lkdGggLyAyKTtcbiAgICAgICAgdGhpcy5wb2ludGVyWSA9IGUucGFnZVkgLSB0b3AgLSAoaGVpZ2h0IC8gMik7XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJFbnRlcigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucG9pbnRlckxlYXZlKTtcbiAgICB9XG5cbiAgICBvblBvaW50ZXJMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5wb2ludGVyTGVhdmUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclggPSAwO1xuICAgICAgICAgICAgdGhpcy5wb2ludGVyWSA9IDA7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LCA2MDApIGFzIGFueTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUaGlzIGNhbiBnZXQgaW50ZXJjZXB0ZWQgaW4gc29tZSBzdGF0ZXNcbiAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnNob3dCYWNrT2ZDYXJkID0gIXRoaXMuc2hvd0JhY2tPZkNhcmQ7XG4gICAgICAgIHRoaXMucmVuZGVyKClcbiAgICB9XG5cbiAgICByZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBtb3VzZVBYID0gdGhpcy5wb2ludGVyWCAvIHdpZHRoO1xuICAgICAgICBjb25zdCBtb3VzZVBZID0gdGhpcy5wb2ludGVyWSAvIGhlaWdodDtcblxuICAgICAgICAvLyBSb3RhdGlvbiBmYWN0b3JzXG4gICAgICAgIGNvbnN0IHJYID0gbW91c2VQWCAqIHRoaXMuYmdJbnNldCAvIDEuNzU7XG4gICAgICAgIGNvbnN0IHJZID0gbW91c2VQWSAqIC10aGlzLmJnSW5zZXQgLyAxLjc1O1xuXG4gICAgICAgIC8vIFRyYW5zbGF0aW9uIGZhY3RvcnNcbiAgICAgICAgY29uc3QgdFggPSBtb3VzZVBYICogLXRoaXMuYmdJbnNldCAqIDI7XG4gICAgICAgIGNvbnN0IHRZID0gbW91c2VQWSAqIC10aGlzLmJnSW5zZXQgKiAyO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbmRlckNhcmRGcm9udCkge1xuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke3RYfXB4KSB0cmFuc2xhdGVZKCR7dFl9cHgpYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJDYXJkQmFjaykge1xuICAgICAgICAgICAgdGhpcy5iYWNrZmFjZUJhY2tncm91bmRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7dFh9cHgpIHRyYW5zbGF0ZVkoJHt0WX1weClgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0JhY2tPZkNhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZEZyb250LnN0eWxlLnRyYW5zZm9ybSA9IGByb3RhdGVZKDE4MGRlZykgcm90YXRlWCgkey1yWX1kZWcpYDtcbiAgICAgICAgICAgIHRoaXMuY2FyZEJhY2suc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoJHstclh9ZGVnKSByb3RhdGVYKCR7LXJZfWRlZylgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJkRnJvbnQuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoJHtyWH1kZWcpIHJvdGF0ZVgoJHtyWX1kZWcpYDtcbiAgICAgICAgICAgIHRoaXMuY2FyZEJhY2suc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZVkoMTgwZGVnKSByb3RhdGVYKCR7LXJZfWRlZylgO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChyZW5kZXJDYXJkQmFjaykge1xuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJhY2tmYWNlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJnXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWSgwKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhY2tCYWNrZ3JvdW5kXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJiYWNrQ29udGVudFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuXG5AaWYgKHJlbmRlckNhcmRGcm9udCkge1xuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGZyb250XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJnXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWSgwKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJhY2tncm91bmRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgQGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIi8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cblxuXG4iXX0=
@@ -26,7 +26,7 @@ export class ReactMagicWrapperComponent {
26
26
  * @param _outputs
27
27
  * @returns
28
28
  */
29
- static { this.WrapAngularComponent = ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings }) => React.memo((args) => {
29
+ static { this.WrapAngularComponent = ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings, rootElementName, containerElementName }) => React.memo((args) => {
30
30
  const id = ulid();
31
31
  React.useEffect(() => {
32
32
  try {
@@ -80,7 +80,7 @@ export class ReactMagicWrapperComponent {
80
80
  console.error(err);
81
81
  }
82
82
  }, []);
83
- return React.createElement("div", {}, React.createElement("div", { id }), ...siblings);
83
+ return React.createElement(rootElementName || "div", {}, React.createElement(containerElementName || "div", { id }), ...(siblings || []));
84
84
  }); }
85
85
  constructor(ngContainer, ngTheme, ngZone) {
86
86
  this.ngContainer = ngContainer;
@@ -95,7 +95,6 @@ export class ReactMagicWrapperComponent {
95
95
  }
96
96
  ngOnInit() {
97
97
  if (!this.ngReactComponent) {
98
- console.error("NO");
99
98
  throw new Error("ReactMagicWrapperComponent cannot start without a provided ngReactComponent!");
100
99
  }
101
100
  }
@@ -106,7 +105,7 @@ export class ReactMagicWrapperComponent {
106
105
  this._render();
107
106
  }
108
107
  ngOnDestroy() {
109
- this._root.unmount();
108
+ this._root?.unmount();
110
109
  this.ngSubscriptions.forEach(s => s.unsubscribe());
111
110
  }
112
111
  _render() {
@@ -117,9 +116,7 @@ export class ReactMagicWrapperComponent {
117
116
  ;
118
117
  this.ngZone.runOutsideAngular(() => {
119
118
  try {
120
- if (!this._root) {
121
- this._root = createRoot(this.ngContainer.element.nativeElement);
122
- }
119
+ this._root ??= createRoot(this.ngContainer.element.nativeElement);
123
120
  // List all keys that do not start with `_` nor `ng`
124
121
  const keys = Object.keys(this).filter(k => !/^(?:_|ng)/.test(k));
125
122
  // Get all property keys from the class
@@ -154,4 +151,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
154
151
  standalone: true
155
152
  }]
156
153
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.ThemeService }, { type: i0.NgZone }] });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtbWFnaWMtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcmVhY3QtbWFnaWMtd3JhcHBlci9yZWFjdC1tYWdpYy13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFNBQVMsRUFBdUosZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9PLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7QUFHN0I7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFFbkM7Ozs7Ozs7Ozs7OztPQVlHO2FBQ0kseUJBQW9CLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFROUgsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBRXRCLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQztnQkFFRCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pELG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUNwQyxlQUFlLEVBQUUsUUFBUTtvQkFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2lCQUMzQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFR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QXNDO29CQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckUsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNGLENBQUM7WUFDRCxPQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdEIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0FuTFEsMEJBQTBCO2tHQUExQiwwQkFBMEIsd0dBSHpCLEVBQUU7OzJGQUdILDBCQUEwQjtrQkFMdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEVudmlyb25tZW50SW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFR5cGUsIFZpZXdDb250YWluZXJSZWYsIFZpZXdSZWYsIGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCwgUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IHVsaWQgfSBmcm9tICd1bGlkeCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBFeHRlbmQgdGhpcyBjb21wb25lbnQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICogYmluZGluZ3MgdG8gYSBSZWFjdCBjb21wb25lbnQuXG4gKlxuICogISBZb3UgX211c3RfIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBgbmdSZWFjdENvbXBvbmVudGBcbiAqIEZhaWx1cmUgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gZXJyb3JzXG4gKiBgb3ZlcnJpZGUgcmVhZG9ubHkgbmdSZWFjdENvbXBvbmVudCA9IFJlYWN0Rmxvd1dyYXBwYWJsZUNvbXBvbmVudDtgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXJlYWN0LW1hZ2ljLXdyYXBwZXInLFxuICAgIHRlbXBsYXRlOiBgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlYWN0TWFnaWNXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gICAgLyoqXG4gICAgICogV3JhcCBhbiBhbmd1bGFyIGNvbXBvbmVudCBpbnNpZGUgb2YgYSBSZWFjdCBtZW1vIG9iamVjdC5cbiAgICAgKiBXaWxsIGF0dGVtcHQgdG8gYmluZCBASW5wdXQgYW5kIEBPdXRwdXQgcHJvcGVydGllcyBpZiBwcm92aWRlZCxcbiAgICAgKiBhbmQgd2lsbCBiaW5kIHRoZSByZWFjdCBhcmd1bWVudHMgZGlyZWN0bHkgYXMgQElucHV0IHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICogQHBhcmFtIGNvbXBvbmVudENsYXNzIEFuZ3VsYXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGVudkluamVjdG9yICAgIEFuIGBFbnZpcm9ubWVudEluamVjdG9yYCBpbnN0YW5jZSB0byBiZSB1c2VkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGluamVjdG9yICAgICAgIEFuIGBFbGVtZW50SW5qZWN0b3JgIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9pbnB1dHNcbiAgICAgKiBAcGFyYW0gX291dHB1dHNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBXcmFwQW5ndWxhckNvbXBvbmVudCA9ICh7IGNvbXBvbmVudCwgYXBwUmVmLCBpbmplY3Rvciwgbmdab25lLCBzdGF0aWNJbnB1dHMsIHN0YXRpY091dHB1dHMsIGFkZGl0aW9uYWxDaGlsZHJlbjogc2libGluZ3N9OiB7XG4gICAgICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgICAgICBhcHBSZWY6IE9taXQ8QXBwbGljYXRpb25SZWYsICdfcnVubmluZ1RpY2snPixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgc3RhdGljSW5wdXRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgc3RhdGljT3V0cHV0cz86IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfSxcbiAgICAgICAgYWRkaXRpb25hbENoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlW11cbiAgICB9KSA9PiBSZWFjdC5tZW1vKChhcmdzKSA9PiB7XG5cbiAgICAgICAgY29uc3QgaWQgPSB1bGlkKCk7XG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGFwcFJlZi5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50SW5zdGFuY2UuaG9zdFZpZXcpO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQuaG9zdFZpZXcgPSBob3N0VmlldztcblxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGljSW5wdXRzLCBhcmdzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzIH0gPSBjb21wb25lbnRbJ8m1Y21wJ107XG5cbiAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIGEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgbmVlZCB0byBiZSBzZXRcbiAgICAgICAgICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgdW5uZWNlc3Nhcnkgc2V0dGVycyBhcmUgbm90IGludm9rZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IE9iamVjdC5lbnRyaWVzKGlucHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2NoaWxkS2V5XSAhPSBzdGF0aWNJbnB1dHNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZWQuZm9yRWFjaCgoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNJbnB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2NoaWxkS2V5XSA9IHN0YXRpY0lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0U3Vic2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfSA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2YgdW5yZWdpc3RlcmVkIG91dHB1dHNcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPdXRwdXRzID0gT2JqZWN0LmVudHJpZXMob3V0cHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFvdXRwdXRTdWJzY3JpcHRpb25zW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIGJpbmQgdmlhIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIG5ld091dHB1dHMuZm9yRWFjaCgoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljT3V0cHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiBFdmVudEVtaXR0ZXI8dW5rbm93bj4gPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtjaGlsZEtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSBzdGF0aWNPdXRwdXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRhcmdldC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1biB0aGUgY2FsbGJhY2sgaW4gdGhlIHByb3ZpZGVkIHpvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHNbcGFyZW50S2V5XSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pOyAvLyBTdWJzY3JpcHRpb25cblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRTdWJzY3JpcHRpb25zW3BhcmVudEtleV0gPSBzdWI7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBXcmFwIHRoZSBkZXN0cm95IG1ldGhvZCB0byBzYWZlbHkgcmVsZWFzZSB0aGUgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGNvbXBvbmVudEluc3RhbmNlLm9uRGVzdHJveT8uYmluZChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2Uub25EZXN0cm95ID0gKGNiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMob3V0cHV0U3Vic2NyaXB0aW9ucykuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzdHJveT8uKGNiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBpZCB9KSxcbiAgICAgICAgICAgIC4uLnNpYmxpbmdzXG4gICAgICAgIClcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFjdCBjb21wb25lbnQgdG8gYmUgd3JhcHBlZC5cbiAgICAgKiAhIE11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgdGhpcyB3cmFwcGVyIHRvIHdvcmtcbiAgICAgKi9cbiAgICBuZ1JlYWN0Q29tcG9uZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxhbnk+IHwgUmVhY3QuQ29tcG9uZW50Q2xhc3M8YW55PiB8IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Jvb3Q6IFJvb3Q7XG4gICAgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBuZ1N1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgIHRoaXMubmdUaGVtZS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gdDtcbiAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdUaGVtZTogVGhlbWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLm5nUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOT1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3RNYWdpY1dyYXBwZXJDb21wb25lbnQgY2Fubm90IHN0YXJ0IHdpdGhvdXQgYSBwcm92aWRlZCBuZ1JlYWN0Q29tcG9uZW50IVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Jvb3QudW5tb3VudCgpO1xuICAgICAgICB0aGlzLm5nU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5uZ1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlbmRlciBubyBjb21wb25lbnQuIE1heSBiZSBjb250ZXh0IGlzc3VlXCIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yb290KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBjcmVhdGVSb290KHRoaXMubmdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBMaXN0IGFsbCBrZXlzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggYF9gIG5vciBgbmdgXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLmZpbHRlcihrID0+ICEvXig/Ol98bmcpLy50ZXN0KGspKTtcblxuICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgcHJvcGVydHkga2V5cyBmcm9tIHRoZSBjbGFzc1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BLZXlzID0ga2V5cy5maWx0ZXIoayA9PiAhay5zdGFydHNXaXRoKFwib25cIikpO1xuICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgZXZlbnQgaGFuZGxlciBrZXlzIGZyb20gdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgZXZ0S2V5cyA9IGtleXMuZmlsdGVyKGsgPT4gay5zdGFydHNXaXRoKFwib25cIikpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBQcm9qZWN0IGFsbCBrZXkgcHJvcGVydGllcyBvbnRvIGBwcm9wc2BcbiAgICAgICAgICAgICAgICBwcm9wS2V5cy5mb3JFYWNoKGsgPT4gcHJvcHNba10gPSB0aGlzW2tdKTtcblxuICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZW5zdXJlIG5vIHpvbmUgaXMgbG9zdCBkdXJpbmcgdGhlIGV2ZW50IGVtaXR0ZXIgZmlyZXNcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQmluZCBhbGwgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgICAgIC8vICEgaW1wb3J0YW50IEFuZ3VsYXIgdXNlcyBFdmVudEVtaXR0ZXIsIFJlYWN0IHVzZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGV2ZW50IGJpbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgZXZ0S2V5cy5mb3JFYWNoKGsgPT4gcHJvcHNba10gPSAoLi4uYXJncykgPT4gdGhpc1trXS5uZXh0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fcm9vdC5yZW5kZXIoUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLm5nUmVhY3RDb21wb25lbnQsIHsgcHJvcHM6IHByb3BzIGFzIGFueSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtbWFnaWMtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcmVhY3QtbWFnaWMtd3JhcHBlci9yZWFjdC1tYWdpYy13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFNBQVMsRUFBdUosZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9PLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7QUFHN0I7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFFbkM7Ozs7Ozs7Ozs7OztPQVlHO2FBQ0kseUJBQW9CLEdBQUcsQ0FBQyxFQUMzQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFBRSxRQUFRLEVBQzVCLGVBQWUsRUFDZixvQkFBb0IsRUFXdkIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBRXRCLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQztnQkFFRCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7b0JBQ2pELG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUNwQyxlQUFlLEVBQUUsUUFBUTtvQkFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2lCQUMzQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLFVB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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQ0QsT0FBTSxHQUFHLEVBQUUsQ0FBQztnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3RCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7OEdBMUxRLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHdHQUh6QixFQUFFOzsyRkFHSCwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQXBwbGljYXRpb25SZWYsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3UmVmLCBjcmVhdGVDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJvb3QsIFJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcblxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSAndWxpZHgnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogRXh0ZW5kIHRoaXMgY29tcG9uZW50IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVcbiAqIGJpbmRpbmdzIHRvIGEgUmVhY3QgY29tcG9uZW50LlxuICpcbiAqICEgWW91IF9tdXN0XyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYG5nUmVhY3RDb21wb25lbnRgXG4gKiBGYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGVycm9yc1xuICogYG92ZXJyaWRlIHJlYWRvbmx5IG5nUmVhY3RDb21wb25lbnQgPSBSZWFjdEZsb3dXcmFwcGFibGVDb21wb25lbnQ7YFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1yZWFjdC1tYWdpYy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBSZWFjdE1hZ2ljV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFdyYXAgYW4gYW5ndWxhciBjb21wb25lbnQgaW5zaWRlIG9mIGEgUmVhY3QgbWVtbyBvYmplY3QuXG4gICAgICogV2lsbCBhdHRlbXB0IHRvIGJpbmQgQElucHV0IGFuZCBAT3V0cHV0IHByb3BlcnRpZXMgaWYgcHJvdmlkZWQsXG4gICAgICogYW5kIHdpbGwgYmluZCB0aGUgcmVhY3QgYXJndW1lbnRzIGRpcmVjdGx5IGFzIEBJbnB1dCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqIEBwYXJhbSBjb21wb25lbnRDbGFzcyBBbmd1bGFyIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBlbnZJbmplY3RvciAgICBBbiBgRW52aXJvbm1lbnRJbmplY3RvcmAgaW5zdGFuY2UgdG8gYmUgdXNlZCBmb3IgdGhlIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBpbmplY3RvciAgICAgICBBbiBgRWxlbWVudEluamVjdG9yYCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfaW5wdXRzXG4gICAgICogQHBhcmFtIF9vdXRwdXRzXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgV3JhcEFuZ3VsYXJDb21wb25lbnQgPSAoe1xuICAgICAgICBjb21wb25lbnQsXG4gICAgICAgIGFwcFJlZixcbiAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgIG5nWm9uZSxcbiAgICAgICAgc3RhdGljSW5wdXRzLFxuICAgICAgICBzdGF0aWNPdXRwdXRzLFxuICAgICAgICBhZGRpdGlvbmFsQ2hpbGRyZW46IHNpYmxpbmdzLFxuICAgICAgICByb290RWxlbWVudE5hbWUsXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnROYW1lXG4gICAgfToge1xuICAgICAgICBjb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICAgICAgYXBwUmVmOiBPbWl0PEFwcGxpY2F0aW9uUmVmLCAnX3J1bm5pbmdUaWNrJz4sXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHN0YXRpY0lucHV0cz86IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgICAgIHN0YXRpY091dHB1dHM/OiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0sXG4gICAgICAgIGFkZGl0aW9uYWxDaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVtdLFxuICAgICAgICByb290RWxlbWVudE5hbWU/OiBzdHJpbmcsXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnROYW1lPzogc3RyaW5nXG4gICAgfSkgPT4gUmVhY3QubWVtbygoYXJncykgPT4ge1xuXG4gICAgICAgIGNvbnN0IGlkID0gdWxpZCgpO1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBhcHBSZWYuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbmplY3RvcjogaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGhvc3RFbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudEluc3RhbmNlLmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50Lmhvc3RWaWV3ID0gaG9zdFZpZXc7XG5cbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRpY0lucHV0cywgYXJncyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gY29tcG9uZW50WyfJtWNtcCddO1xuXG4gICAgICAgICAgICAgICAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgZW50cmllcyB0aGF0IG5lZWQgdG8gYmUgc2V0XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBzbyB0aGF0IHVubmVjZXNzYXJ5IHNldHRlcnMgYXJlIG5vdCBpbnZva2VkLlxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtjaGlsZEtleV0gIT0gc3RhdGljSW5wdXRzW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVkLmZvckVhY2goKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljSW5wdXRzLmhhc093blByb3BlcnR5KHBhcmVudEtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtjaGlsZEtleV0gPSBzdGF0aWNJbnB1dHNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dFN1YnNjcmlwdGlvbnM6IHsgW2tleTogc3RyaW5nXTogU3Vic2NyaXB0aW9uIH0gPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBsaXN0IG9mIHVucmVnaXN0ZXJlZCBvdXRwdXRzXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0cyA9IE9iamVjdC5lbnRyaWVzKG91dHB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBiaW5kIHZpYSBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXRzLmZvckVhY2goKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY091dHB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldDogRXZlbnRFbWl0dGVyPHVua25vd24+ID0gY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRzID0gc3RhdGljT3V0cHV0cztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB0YXJnZXQuc3Vic2NyaWJlKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGluIHRoZSBwcm92aWRlZCB6b25lXG4gICAgICAgICAgICAgICAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzW3BhcmVudEtleV0oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KTsgLy8gU3Vic2NyaXB0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldID0gc3ViO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gV3JhcCB0aGUgZGVzdHJveSBtZXRob2QgdG8gc2FmZWx5IHJlbGVhc2UgdGhlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm9uRGVzdHJveSA9IChjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKG91dHB1dFN1YnNjcmlwdGlvbnMpLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc3Ryb3k/LihjYik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChyb290RWxlbWVudE5hbWUgfHwgXCJkaXZcIiwgeyB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChjb250YWluZXJFbGVtZW50TmFtZSB8fCBcImRpdlwiLCB7IGlkIH0pLFxuICAgICAgICAgICAgLi4uKHNpYmxpbmdzIHx8IFtdKVxuICAgICAgICApXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVhY3QgY29tcG9uZW50IHRvIGJlIHdyYXBwZWQuXG4gICAgICogISBNdXN0IGJlIG92ZXJyaWRkZW4gZm9yIHRoaXMgd3JhcHBlciB0byB3b3JrXG4gICAgICovXG4gICAgbmdSZWFjdENvbXBvbmVudDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8YW55PiB8IFJlYWN0LkNvbXBvbmVudENsYXNzPGFueT4gfCBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9yb290OiBSb290O1xuICAgIHB1YmxpYyB0aGVtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgbmdTdWJzY3JpcHRpb25zID0gW1xuICAgICAgICB0aGlzLm5nVGhlbWUuc3Vic2NyaWJlKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy50aGVtZSA9IHQ7XG4gICAgICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgICAgIH0pXG4gICAgXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG5nVGhlbWU6IFRoZW1lU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZVxuICAgICkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3RNYWdpY1dyYXBwZXJDb21wb25lbnQgY2Fubm90IHN0YXJ0IHdpdGhvdXQgYSBwcm92aWRlZCBuZ1JlYWN0Q29tcG9uZW50IVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Jvb3Q/LnVubW91bnQoKTtcbiAgICAgICAgdGhpcy5uZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW5kZXIgbm8gY29tcG9uZW50LiBNYXkgYmUgY29udGV4dCBpc3N1ZVwiKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290ID8/PSBjcmVhdGVSb290KHRoaXMubmdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIExpc3QgYWxsIGtleXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBgX2Agbm9yIGBuZ2BcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcykuZmlsdGVyKGsgPT4gIS9eKD86X3xuZykvLnRlc3QoaykpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBwcm9wZXJ0eSBrZXlzIGZyb20gdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcEtleXMgPSBrZXlzLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBldmVudCBoYW5kbGVyIGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBldnRLZXlzID0ga2V5cy5maWx0ZXIoayA9PiBrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFByb2plY3QgYWxsIGtleSBwcm9wZXJ0aWVzIG9udG8gYHByb3BzYFxuICAgICAgICAgICAgICAgIHByb3BLZXlzLmZvckVhY2goayA9PiBwcm9wc1trXSA9IHRoaXNba10pO1xuXG4gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBlbnN1cmUgbm8gem9uZSBpcyBsb3N0IGR1cmluZyB0aGUgZXZlbnQgZW1pdHRlciBmaXJlc1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bkd1YXJkZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBCaW5kIGFsbCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICAgICAgLy8gISBpbXBvcnRhbnQgQW5ndWxhciB1c2VzIEV2ZW50RW1pdHRlciwgUmVhY3QgdXNlc1xuICAgICAgICAgICAgICAgICAgICAvLyBhIGRpZmZlcmVudCBtZXRob2Qgb2YgZXZlbnQgYmluZGluZ1xuICAgICAgICAgICAgICAgICAgICBldnRLZXlzLmZvckVhY2goayA9PiBwcm9wc1trXSA9ICguLi5hcmdzKSA9PiB0aGlzW2tdLm5leHQoYXJncykpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yb290LnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMubmdSZWFjdENvbXBvbmVudCwgeyBwcm9wczogcHJvcHMgYXMgYW55IH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiJdfQ==
@@ -11511,8 +11511,9 @@ class ParallaxCardComponent {
11511
11511
  get cardBack() { return this.wrapper.querySelector('.card.backface'); }
11512
11512
  get backgroundElement() { return this.cardFront.querySelector('.card-bg'); }
11513
11513
  get backfaceBackgroundElement() { return this.cardBack.querySelector('.card-bg'); }
11514
- constructor(element) {
11514
+ constructor(element, ngZone) {
11515
11515
  this.element = element;
11516
+ this.ngZone = ngZone;
11516
11517
  /**
11517
11518
  *
11518
11519
  */
@@ -11534,9 +11535,9 @@ class ParallaxCardComponent {
11534
11535
  this.bgInset = 80;
11535
11536
  /**
11536
11537
  * Duration for the flip animation in ms
11537
- * @default 80
11538
+ * @default 1200
11538
11539
  */
11539
- this.flipAnimationDuration = 1600;
11540
+ this.flipAnimationDuration = 1200;
11540
11541
  this.renderCardFront = true;
11541
11542
  this.renderCardBack = true;
11542
11543
  this.showBackOfCard = false;
@@ -11571,10 +11572,12 @@ class ParallaxCardComponent {
11571
11572
  }
11572
11573
  ngAfterViewInit() {
11573
11574
  const el = this.wrapper;
11574
- // Directly attach events to the wrapper
11575
- el.onpointermove = (e) => this.onPointerMove(e);
11576
- el.onpointerenter = () => this.onPointerEnter();
11577
- el.onpointerleave = () => this.onPointerLeave();
11575
+ this.ngZone.runOutsideAngular(() => {
11576
+ // Directly attach events to the wrapper
11577
+ el.onpointermove = (e) => this.onPointerMove(e);
11578
+ el.onpointerenter = () => this.onPointerEnter();
11579
+ el.onpointerleave = () => this.onPointerLeave();
11580
+ });
11578
11581
  el.onclick = () => this.onClick();
11579
11582
  this.loaded.emit();
11580
11583
  }
@@ -11599,8 +11602,8 @@ class ParallaxCardComponent {
11599
11602
  this.showBackOfCard = !this.showBackOfCard;
11600
11603
  this.render();
11601
11604
  }
11602
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
11603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ParallaxCardComponent, isStandalone: true, selector: "ngx-parallax-card", inputs: { width: "width", height: "height", bgInset: "bgInset", flipAnimationDuration: "flipAnimationDuration" }, outputs: { loaded: "loaded" }, host: { properties: { "style.width": "width", "style.height": "height", "style.--card-bg-inset": "-bgInset+\"px\"", "style.--flip-animation-duration": "flipAnimationDuration+\"ms\"", "class.flip": "showBackOfCard" } }, queries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: TemplateRef }, { propertyName: "background", first: true, predicate: ["background"], descendants: true, read: TemplateRef }, { propertyName: "backContent", first: true, predicate: ["backContent"], descendants: true, read: TemplateRef }, { propertyName: "backBackground", first: true, predicate: ["backBackground"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
11605
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
11606
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ParallaxCardComponent, isStandalone: true, selector: "ngx-parallax-card", inputs: { width: "width", height: "height", bgInset: "bgInset", flipAnimationDuration: "flipAnimationDuration" }, outputs: { loaded: "loaded" }, host: { properties: { "style.width": "width", "style.height": "height", "style.--card-bg-inset": "-bgInset+\"px\"", "style.--flip-animation-duration": "flipAnimationDuration+\"ms\"", "class.flip": "showBackOfCard" } }, queries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, read: TemplateRef }, { propertyName: "background", first: true, predicate: ["background"], descendants: true, read: TemplateRef }, { propertyName: "backContent", first: true, predicate: ["backContent"], descendants: true, read: TemplateRef }, { propertyName: "backBackground", first: true, predicate: ["backBackground"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d;will-change:transform}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
11604
11607
  }
11605
11608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ParallaxCardComponent, decorators: [{
11606
11609
  type: Component,
@@ -11612,8 +11615,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
11612
11615
  '[style.--card-bg-inset]': '-bgInset+"px"',
11613
11616
  '[style.--flip-animation-duration]': 'flipAnimationDuration+"ms"',
11614
11617
  '[class.flip]': 'showBackOfCard'
11615
- }, standalone: true, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"] }]
11616
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { content: [{
11618
+ }, standalone: true, template: "@if (renderCardBack) {\n <div class=\"card backface\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"backBackground\" />\n </div>\n <div class=\"card-content\">\n <ng-template [ngTemplateOutlet]=\"backContent\" />\n </div>\n </div>\n}\n\n@if (renderCardFront) {\n <div class=\"card front\">\n <div class=\"card-bg\" style=\"transform: translateX(0) translateY(0)\">\n <ng-template [ngTemplateOutlet]=\"background\" />\n </div>\n <div class=\"card-content\">\n @if (content) {\n <ng-template [ngTemplateOutlet]=\"content\"/>\n }\n @else {\n <ng-content/>\n }\n </div>\n </div>\n}\n\n\n", styles: [":host{display:block;position:relative;cursor:pointer;--easing-function: cubic-bezier(.23, 1, .32, 1);--border-radius: 9px}.card{position:absolute;height:100%;width:100%;background-color:#333;backface-visibility:hidden;overflow:hidden;box-shadow:#0000 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px;border-radius:var(--border-radius);transition:transform var(--flip-animation-duration) var(--easing-function),box-shadow 2s var(--easing-function);transform-style:preserve-3d;will-change:transform}.card:hover{box-shadow:#fff6 0 0 40px 5px,#000000a8 0 30px 60px,inset #333 0 0 0 5px}.card:hover .card-content{border:2px solid #fff}.card-bg{inset:var(--card-bg-inset);position:absolute;pointer-events:none;transition:transform .6s var(--easing-function)}.card-content{position:absolute;top:0;color:#fff;height:100%;width:100%;z-index:1;border:2px solid rgba(255,255,255,0);border-radius:var(--border-radius);transition:transform .6s var(--easing-function),border-color .6s var(--easing-function)}\n"] }]
11619
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { content: [{
11617
11620
  type: ContentChild,
11618
11621
  args: ['content', { read: TemplateRef }]
11619
11622
  }], background: [{
@@ -11659,7 +11662,7 @@ class ReactMagicWrapperComponent {
11659
11662
  * @param _outputs
11660
11663
  * @returns
11661
11664
  */
11662
- static { this.WrapAngularComponent = ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings }) => React.memo((args) => {
11665
+ static { this.WrapAngularComponent = ({ component, appRef, injector, ngZone, staticInputs, staticOutputs, additionalChildren: siblings, rootElementName, containerElementName }) => React.memo((args) => {
11663
11666
  const id = ulid();
11664
11667
  React.useEffect(() => {
11665
11668
  try {
@@ -11713,7 +11716,7 @@ class ReactMagicWrapperComponent {
11713
11716
  console.error(err);
11714
11717
  }
11715
11718
  }, []);
11716
- return React.createElement("div", {}, React.createElement("div", { id }), ...siblings);
11719
+ return React.createElement(rootElementName || "div", {}, React.createElement(containerElementName || "div", { id }), ...(siblings || []));
11717
11720
  }); }
11718
11721
  constructor(ngContainer, ngTheme, ngZone) {
11719
11722
  this.ngContainer = ngContainer;
@@ -11728,7 +11731,6 @@ class ReactMagicWrapperComponent {
11728
11731
  }
11729
11732
  ngOnInit() {
11730
11733
  if (!this.ngReactComponent) {
11731
- console.error("NO");
11732
11734
  throw new Error("ReactMagicWrapperComponent cannot start without a provided ngReactComponent!");
11733
11735
  }
11734
11736
  }
@@ -11739,7 +11741,7 @@ class ReactMagicWrapperComponent {
11739
11741
  this._render();
11740
11742
  }
11741
11743
  ngOnDestroy() {
11742
- this._root.unmount();
11744
+ this._root?.unmount();
11743
11745
  this.ngSubscriptions.forEach(s => s.unsubscribe());
11744
11746
  }
11745
11747
  _render() {
@@ -11750,9 +11752,7 @@ class ReactMagicWrapperComponent {
11750
11752
  ;
11751
11753
  this.ngZone.runOutsideAngular(() => {
11752
11754
  try {
11753
- if (!this._root) {
11754
- this._root = createRoot(this.ngContainer.element.nativeElement);
11755
- }
11755
+ this._root ??= createRoot(this.ngContainer.element.nativeElement);
11756
11756
  // List all keys that do not start with `_` nor `ng`
11757
11757
  const keys = Object.keys(this).filter(k => !/^(?:_|ng)/.test(k));
11758
11758
  // Get all property keys from the class