angular-toolbox 1.4.1 → 1.4.2

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
@@ -2,7 +2,7 @@
2
2
 
3
3
  A library that provides useful tools for Angular apps development.
4
4
 
5
- [![Angular Toolbox version](https://img.shields.io/badge/Angular%20Toolbox:1.4.1%231E90FF.svg)]()
5
+ [![Angular Toolbox version](https://img.shields.io/badge/Angular%20Toolbox:1.4.2%231E90FF.svg)]()
6
6
 
7
7
  ## License
8
8
 
@@ -5,11 +5,12 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be found in
6
6
  * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license
7
7
  */
8
- import { Component, ContentChildren, ViewChild, HostListener, EventEmitter, Output } from '@angular/core';
8
+ import { Component, ContentChildren, ViewChild, HostListener, EventEmitter, Output, Inject } from '@angular/core';
9
9
  import { BorderLayoutContainer } from '../border-layout-container/border-layout-container.component';
10
10
  import { LayoutDragEventType } from '../../../model';
11
11
  import { BorderLayoutRenderer } from './util/border-layout-renderer';
12
12
  import { IdentifiableComponent } from '../../../core';
13
+ import { DOCUMENT } from '@angular/common';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "../../../model";
15
16
  /**
@@ -34,22 +35,22 @@ export class BorderLayout extends IdentifiableComponent {
34
35
  /**
35
36
  * @private
36
37
  */
37
- constructor(subscribeSvc) {
38
+ constructor(subscribeSvc, document) {
38
39
  super();
39
40
  this.subscribeSvc = subscribeSvc;
40
41
  /**
41
42
  * Emits events each time the user starts dragging a region handle.
42
43
  */
43
- this.dragStart = new EventEmitter(false);
44
+ this.dragStart = new EventEmitter();
44
45
  /**
45
46
  * Emits events each time the user stops dragging a region handle.
46
47
  */
47
- this.dragStop = new EventEmitter(false);
48
+ this.dragStop = new EventEmitter();
48
49
  /**
49
50
  * Emits events each time the user is dragging a region handle.
50
51
  */
51
- this.dragging = new EventEmitter(false);
52
- this.renderer = new BorderLayoutRenderer(subscribeSvc);
52
+ this.dragging = new EventEmitter();
53
+ this.renderer = new BorderLayoutRenderer(subscribeSvc, document);
53
54
  subscribeSvc.register(this, this.renderer.userAction.subscribe((event) => {
54
55
  event.layout = this;
55
56
  if (event.type === LayoutDragEventType.DRAGGING) {
@@ -101,13 +102,16 @@ export class BorderLayout extends IdentifiableComponent {
101
102
  resizeRegion(region, size) {
102
103
  this.renderer.resizeRegion(region, size);
103
104
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: BorderLayout, deps: [{ token: i1.SubscriptionService }], target: i0.ɵɵFactoryTarget.Component }); }
105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: BorderLayout, isStandalone: true, selector: "atx-border-layout", outputs: { dragStart: "dragStart", dragStop: "dragStop", dragging: "dragging" }, host: { listeners: { "window:resize": "onResize()" } }, queries: [{ propertyName: "__containers__", predicate: BorderLayoutContainer }], viewQueries: [{ propertyName: "layoutContainer", first: true, predicate: ["atxLayoutContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>", styles: [".atx-border-layout{position:relative;height:100%;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden}.atx-border-layout,.atx-border-layout *{box-sizing:border-box}.atx-border-layout .content{height:100%;width:100%;overflow:auto}.atx-border-layout .drag{position:absolute;border:2px solid black}:host ::ng-deep .atx-handle{position:absolute}:host ::ng-deep .atx-handle:hover,:host ::ng-deep .atx-handle.atx-handle-selected{background-color:var(--atx-handle-color, #469afa)}:host ::ng-deep .north{position:absolute;z-index:10;top:0;left:0;right:0}:host ::ng-deep .north .atx-handle{left:0;right:0;bottom:0;height:4px;cursor:ns-resize}:host ::ng-deep .west{position:absolute;z-index:5;left:0;height:unset!important}:host ::ng-deep .west .atx-handle{right:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host ::ng-deep .east{position:absolute;z-index:5;right:0;height:unset!important}:host ::ng-deep .east .atx-handle{left:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host ::ng-deep .south{position:absolute;z-index:10;bottom:0;left:0;right:0}:host ::ng-deep .south .atx-handle{left:0;right:0;top:0;height:4px;cursor:ns-resize}:host ::ng-deep .center{position:absolute}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }); }
105
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: BorderLayout, deps: [{ token: i1.SubscriptionService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
106
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: BorderLayout, isStandalone: true, selector: "atx-border-layout", outputs: { dragStart: "dragStart", dragStop: "dragStop", dragging: "dragging" }, host: { listeners: { "window:resize": "onResize()" } }, queries: [{ propertyName: "__containers__", predicate: BorderLayoutContainer }], viewQueries: [{ propertyName: "layoutContainer", first: true, predicate: ["atxLayoutContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>", styles: [".atx-border-layout{position:relative;height:100%;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden}.atx-border-layout{box-sizing:border-box}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }); }
106
107
  }
107
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: BorderLayout, decorators: [{
108
109
  type: Component,
109
- args: [{ selector: 'atx-border-layout', standalone: true, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>", styles: [".atx-border-layout{position:relative;height:100%;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden}.atx-border-layout,.atx-border-layout *{box-sizing:border-box}.atx-border-layout .content{height:100%;width:100%;overflow:auto}.atx-border-layout .drag{position:absolute;border:2px solid black}:host ::ng-deep .atx-handle{position:absolute}:host ::ng-deep .atx-handle:hover,:host ::ng-deep .atx-handle.atx-handle-selected{background-color:var(--atx-handle-color, #469afa)}:host ::ng-deep .north{position:absolute;z-index:10;top:0;left:0;right:0}:host ::ng-deep .north .atx-handle{left:0;right:0;bottom:0;height:4px;cursor:ns-resize}:host ::ng-deep .west{position:absolute;z-index:5;left:0;height:unset!important}:host ::ng-deep .west .atx-handle{right:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host ::ng-deep .east{position:absolute;z-index:5;right:0;height:unset!important}:host ::ng-deep .east .atx-handle{left:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host ::ng-deep .south{position:absolute;z-index:10;bottom:0;left:0;right:0}:host ::ng-deep .south .atx-handle{left:0;right:0;top:0;height:4px;cursor:ns-resize}:host ::ng-deep .center{position:absolute}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
110
- }], ctorParameters: () => [{ type: i1.SubscriptionService }], propDecorators: { dragStart: [{
110
+ args: [{ selector: 'atx-border-layout', standalone: true, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<div #atxLayoutContainer class=\"atx-border-layout\">\n <ng-content></ng-content>\n</div>", styles: [".atx-border-layout{position:relative;height:100%;width:100%;-webkit-user-select:none;user-select:none;overflow:hidden}.atx-border-layout{box-sizing:border-box}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
111
+ }], ctorParameters: () => [{ type: i1.SubscriptionService }, { type: Document, decorators: [{
112
+ type: Inject,
113
+ args: [DOCUMENT]
114
+ }] }], propDecorators: { dragStart: [{
111
115
  type: Output
112
116
  }], dragStop: [{
113
117
  type: Output
@@ -123,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
123
127
  type: ContentChildren,
124
128
  args: [BorderLayoutContainer]
125
129
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9jb21wb25lbnQvbGF5b3V0L2JvcmRlci1sYXlvdXQvYm9yZGVyLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9jb21wb25lbnQvbGF5b3V0L2JvcmRlci1sYXlvdXQvYm9yZGVyLWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxlQUFlLEVBQXlCLFNBQVMsRUFBRSxZQUFZLEVBQWEsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNyRyxPQUFPLEVBQW1CLG1CQUFtQixFQUF1RCxNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXREOzs7O0dBSUc7QUFPSCxNQUFNLE9BQU8sWUFBYSxTQUFRLHFCQUFxQjtJQW9CckQ7O09BRUc7SUFFSyxRQUFRO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQWFEOztPQUVHO0lBQ0gsSUFDWSxjQUFjLENBQUMsVUFBNEM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFBLENBQUM7SUFFRjs7T0FFRztJQUNILFlBQW9CLFlBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBaERyRDs7V0FFRztRQUVhLGNBQVMsR0FBa0MsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkY7O1dBRUc7UUFFYSxhQUFRLEdBQWtDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxGOztXQUVHO1FBRWEsYUFBUSxHQUFrQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQWtDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFzQixFQUFDLEVBQUU7WUFDM0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUFDLE1BQXVDLEVBQUUsSUFBWTtRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBOUdVLFlBQVk7a0dBQVosWUFBWSxxUEEwQ04scUJBQXFCLDJLQ25FeEMseVZBVU07OzJGRGVPLFlBQVk7a0JBTnhCLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLElBQUk7d0ZBUUEsU0FBUztzQkFEeEIsTUFBTTtnQkFPUyxRQUFRO3NCQUR2QixNQUFNO2dCQU9TLFFBQVE7c0JBRHZCLE1BQU07Z0JBT0MsUUFBUTtzQkFEZixZQUFZO3VCQUFDLGVBQWU7Z0JBU3JCLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQVluQixjQUFjO3NCQUR6QixlQUFlO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxyXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyLCBRdWVyeUxpc3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJvcmRlckxheW91dENvbnRhaW5lciB9IGZyb20gJy4uL2JvcmRlci1sYXlvdXQtY29udGFpbmVyL2JvcmRlci1sYXlvdXQtY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dERyYWdFdmVudCwgTGF5b3V0RHJhZ0V2ZW50VHlwZSwgTGF5b3V0UmVnaW9uLCBMYXlvdXRSZWdpb25UeXBlLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQgeyBCb3JkZXJMYXlvdXRSZW5kZXJlciB9IGZyb20gJy4vdXRpbC9ib3JkZXItbGF5b3V0LXJlbmRlcmVyJztcclxuaW1wb3J0IHsgSWRlbnRpZmlhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XHJcblxyXG4vKipcclxuICogQSBib3JkZXIgbGF5b3V0IGxheXMgb3V0IGEgY29udGFpbmVyLCBhcnJhbmdpbmcgYW5kIHJlc2l6aW5nIGl0cyBjb21wb25lbnRzIHRvIGZpdCBpbiBmaXZlIHJlZ2lvbnM6IG5vcnRoLCBzb3V0aCwgZWFzdCwgd2VzdCwgYW5kIGNlbnRlci5cclxuICogRWFjaCByZWdpb24gaXMgZGVmaW5lZCBieSBhIGBCb3JkZXJMYXlvdXRDb250YWluZXJgIGluc3RhbmNlLCBhbmQgaXMgaWRlbnRpZmllZCBieSBhIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQ6IGBOT1JUSGAsIGBTT1VUSGAsIGBFQVNUYCwgYFdFU1RgLCBhbmQgYENFTlRFUmAuXHJcbiAqIFRoaXMgY29tcG9uZW50IGlzIHBhcnQgb2YgdGhlIExBRi1sZXNzIEFQSS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXR4LWJvcmRlci1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ib3JkZXItbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ib3JkZXItbGF5b3V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQm9yZGVyTGF5b3V0IGV4dGVuZHMgSWRlbnRpZmlhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgZXZlbnRzIGVhY2ggdGltZSB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgYSByZWdpb24gaGFuZGxlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBkcmFnU3RhcnQ6IEV2ZW50RW1pdHRlcjxMYXlvdXREcmFnRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGV2ZW50cyBlYWNoIHRpbWUgdGhlIHVzZXIgc3RvcHMgZHJhZ2dpbmcgYSByZWdpb24gaGFuZGxlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBkcmFnU3RvcDogRXZlbnRFbWl0dGVyPExheW91dERyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgZXZlbnRzIGVhY2ggdGltZSB0aGUgdXNlciBpcyBkcmFnZ2luZyBhIHJlZ2lvbiBoYW5kbGUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGRyYWdnaW5nOiBFdmVudEVtaXR0ZXI8TGF5b3V0RHJhZ0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIilcclxuICBwcml2YXRlIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWludCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwiYXR4TGF5b3V0Q29udGFpbmVyXCIpXHJcbiAgcHJpdmF0ZSBsYXlvdXRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHJlbmRlcmVyOiBCb3JkZXJMYXlvdXRSZW5kZXJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBAQ29udGVudENoaWxkcmVuKEJvcmRlckxheW91dENvbnRhaW5lcilcclxuICBwcml2YXRlIHNldCBfX2NvbnRhaW5lcnNfXyhjb250YWluZXJzOiBRdWVyeUxpc3Q8Qm9yZGVyTGF5b3V0Q29udGFpbmVyPikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDb250YWluZXJzKGNvbnRhaW5lcnMpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdWJzY3JpYmVTdmM6IFN1YnNjcmlwdGlvblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IEJvcmRlckxheW91dFJlbmRlcmVyKHN1YnNjcmliZVN2Yyk7XHJcbiAgICBzdWJzY3JpYmVTdmMucmVnaXN0ZXIodGhpcyxcclxuICAgICAgdGhpcy5yZW5kZXJlci51c2VyQWN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IExheW91dERyYWdFdmVudCk9PiB7XHJcbiAgICAgICAgZXZlbnQubGF5b3V0ID0gdGhpcztcclxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gTGF5b3V0RHJhZ0V2ZW50VHlwZS5EUkFHR0lORykge1xyXG4gICAgICAgICAgdGhpcy5kcmFnZ2luZy5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IExheW91dERyYWdFdmVudFR5cGUuRFJBR19TVEFSVCkge1xyXG4gICAgICAgICAgdGhpcy5kcmFnU3RhcnQuZW1pdChldmVudCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHJhZ1N0b3AuZW1pdChldmVudCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBGb3IgdGVzdCBwdXJwb3NlIG9ubHkuXHJcbiAgICovXHJcbiAgcHVibGljIGdldFJlbmRlcmVyKCk6IEJvcmRlckxheW91dFJlbmRlcmVyIHtcclxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVN2Yy5jbGVhckFsbCh0aGlzKTtcclxuICAgIHRoaXMucmVuZGVyZXIuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRMYXlvdXRDb250YWluZXIodGhpcy5sYXlvdXRDb250YWluZXIubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLnBhaW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZXMgdGhlIGNvbnRhaW5lciB0byBiZSByZWRyYXduLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYWludCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIucGFpbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2l6ZXMgdGhlIHNwZWNpZmllZCByZWdpb24uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uIHRvIHJlc2l6ZS5cclxuICAgKiBAcGFyYW0gc2l6ZSBUaGUgbmV3IHNpemUgb2YgdGhlIHJlZ2lvbiB0byByZXNpemUuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgYHRydWVgIHdoZXRoZXIgdGhlIHNwZWNpZmllZCByZWdpb24gaGFzIGJlZW4gcmVzaXplZDsgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIHJlc2l6ZVJlZ2lvbihyZWdpb246IExheW91dFJlZ2lvbiB8IExheW91dFJlZ2lvblR5cGUsIHNpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZXNpemVSZWdpb24ocmVnaW9uIGFzIExheW91dFJlZ2lvbiwgc2l6ZSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS1cbiAqIExJQ0VOU0VcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXG4tLT5cblxuPGRpdiAjYXR4TGF5b3V0Q29udGFpbmVyIGNsYXNzPVwiYXR4LWJvcmRlci1sYXlvdXRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9jb21wb25lbnQvbGF5b3V0L2JvcmRlci1sYXlvdXQvYm9yZGVyLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRvb2xib3gvc3JjL2xpYi9jb21wb25lbnQvbGF5b3V0L2JvcmRlci1sYXlvdXQvYm9yZGVyLWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxlQUFlLEVBQXlCLFNBQVMsRUFBRSxZQUFZLEVBQWEsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkssT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDckcsT0FBTyxFQUFtQixtQkFBbUIsRUFBdUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFFM0M7Ozs7R0FJRztBQU9ILE1BQU0sT0FBTyxZQUFhLFNBQVEscUJBQXFCO0lBb0JyRDs7T0FFRztJQUVLLFFBQVE7UUFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBYUQ7O09BRUc7SUFDSCxJQUNZLGNBQWMsQ0FBQyxVQUE0QztRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUEsQ0FBQztJQUVGOztPQUVHO0lBQ0gsWUFBb0IsWUFBaUMsRUFDdkIsUUFBa0I7UUFDOUMsS0FBSyxFQUFFLENBQUM7UUFGVSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFoRHJEOztXQUVHO1FBRWEsY0FBUyxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTlFOztXQUVHO1FBRWEsYUFBUSxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTdFOztXQUVHO1FBRWEsYUFBUSxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBbUMzRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksb0JBQW9CLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFzQixFQUFDLEVBQUU7WUFDM0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUFDLE1BQXVDLEVBQUUsSUFBWTtRQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBL0dVLFlBQVkscURBbURILFFBQVE7a0dBbkRqQixZQUFZLHFQQTBDTixxQkFBcUIsMktDcEV4Qyx5VkFVTTs7MkZEZ0JPLFlBQVk7a0JBTnhCLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLElBQUk7OzBCQXFESCxNQUFNOzJCQUFDLFFBQVE7eUNBN0NaLFNBQVM7c0JBRHhCLE1BQU07Z0JBT1MsUUFBUTtzQkFEdkIsTUFBTTtnQkFPUyxRQUFRO3NCQUR2QixNQUFNO2dCQU9DLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlO2dCQVNyQixlQUFlO3NCQUR0QixTQUFTO3VCQUFDLG9CQUFvQjtnQkFZbkIsY0FBYztzQkFEekIsZUFBZTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cclxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgUXVlcnlMaXN0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJvcmRlckxheW91dENvbnRhaW5lciB9IGZyb20gJy4uL2JvcmRlci1sYXlvdXQtY29udGFpbmVyL2JvcmRlci1sYXlvdXQtY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExheW91dERyYWdFdmVudCwgTGF5b3V0RHJhZ0V2ZW50VHlwZSwgTGF5b3V0UmVnaW9uLCBMYXlvdXRSZWdpb25UeXBlLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQgeyBCb3JkZXJMYXlvdXRSZW5kZXJlciB9IGZyb20gJy4vdXRpbC9ib3JkZXItbGF5b3V0LXJlbmRlcmVyJztcclxuaW1wb3J0IHsgSWRlbnRpZmlhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBBIGJvcmRlciBsYXlvdXQgbGF5cyBvdXQgYSBjb250YWluZXIsIGFycmFuZ2luZyBhbmQgcmVzaXppbmcgaXRzIGNvbXBvbmVudHMgdG8gZml0IGluIGZpdmUgcmVnaW9uczogbm9ydGgsIHNvdXRoLCBlYXN0LCB3ZXN0LCBhbmQgY2VudGVyLlxyXG4gKiBFYWNoIHJlZ2lvbiBpcyBkZWZpbmVkIGJ5IGEgYEJvcmRlckxheW91dENvbnRhaW5lcmAgaW5zdGFuY2UsIGFuZCBpcyBpZGVudGlmaWVkIGJ5IGEgY29ycmVzcG9uZGluZyBjb25zdGFudDogYE5PUlRIYCwgYFNPVVRIYCwgYEVBU1RgLCBgV0VTVGAsIGFuZCBgQ0VOVEVSYC5cclxuICogVGhpcyBjb21wb25lbnQgaXMgcGFydCBvZiB0aGUgTEFGLWxlc3MgQVBJLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHgtYm9yZGVyLWxheW91dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2JvcmRlci1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JvcmRlci1sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb3JkZXJMYXlvdXQgZXh0ZW5kcyBJZGVudGlmaWFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBldmVudHMgZWFjaCB0aW1lIHRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhIHJlZ2lvbiBoYW5kbGUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGRyYWdTdGFydDogRXZlbnRFbWl0dGVyPExheW91dERyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGV2ZW50cyBlYWNoIHRpbWUgdGhlIHVzZXIgc3RvcHMgZHJhZ2dpbmcgYSByZWdpb24gaGFuZGxlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBkcmFnU3RvcDogRXZlbnRFbWl0dGVyPExheW91dERyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGV2ZW50cyBlYWNoIHRpbWUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcgYSByZWdpb24gaGFuZGxlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBkcmFnZ2luZzogRXZlbnRFbWl0dGVyPExheW91dERyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIHByaXZhdGUgb25SZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhaW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJhdHhMYXlvdXRDb250YWluZXJcIilcclxuICBwcml2YXRlIGxheW91dENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVuZGVyZXI6IEJvcmRlckxheW91dFJlbmRlcmVyO1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oQm9yZGVyTGF5b3V0Q29udGFpbmVyKVxyXG4gIHByaXZhdGUgc2V0IF9fY29udGFpbmVyc19fKGNvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxCb3JkZXJMYXlvdXRDb250YWluZXI+KSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENvbnRhaW5lcnMoY29udGFpbmVycyk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN1YnNjcmliZVN2YzogU3Vic2NyaXB0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogRG9jdW1lbnQpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IEJvcmRlckxheW91dFJlbmRlcmVyKHN1YnNjcmliZVN2YywgZG9jdW1lbnQpO1xyXG4gICAgc3Vic2NyaWJlU3ZjLnJlZ2lzdGVyKHRoaXMsXHJcbiAgICAgIHRoaXMucmVuZGVyZXIudXNlckFjdGlvbi5zdWJzY3JpYmUoKGV2ZW50OiBMYXlvdXREcmFnRXZlbnQpPT4ge1xyXG4gICAgICAgIGV2ZW50LmxheW91dCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IExheW91dERyYWdFdmVudFR5cGUuRFJBR0dJTkcpIHtcclxuICAgICAgICAgIHRoaXMuZHJhZ2dpbmcuZW1pdChldmVudCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBMYXlvdXREcmFnRXZlbnRUeXBlLkRSQUdfU1RBUlQpIHtcclxuICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRyYWdTdG9wLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogRm9yIHRlc3QgcHVycG9zZSBvbmx5LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRSZW5kZXJlcigpOiBCb3JkZXJMYXlvdXRSZW5kZXJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVTdmMuY2xlYXJBbGwodGhpcyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0TGF5b3V0Q29udGFpbmVyKHRoaXMubGF5b3V0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5wYWludCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2VzIHRoZSBjb250YWluZXIgdG8gYmUgcmVkcmF3bi5cclxuICAgKi9cclxuICBwdWJsaWMgcGFpbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnBhaW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNpemVzIHRoZSBzcGVjaWZpZWQgcmVnaW9uLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvbiB0byByZXNpemUuXHJcbiAgICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaXplIG9mIHRoZSByZWdpb24gdG8gcmVzaXplLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGhhcyBiZWVuIHJlc2l6ZWQ7IGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXNpemVSZWdpb24ocmVnaW9uOiBMYXlvdXRSZWdpb24gfCBMYXlvdXRSZWdpb25UeXBlLCBzaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVzaXplUmVnaW9uKHJlZ2lvbiBhcyBMYXlvdXRSZWdpb24sIHNpemUpO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tXG4gKiBMSUNFTlNFXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxuLS0+XG5cbjxkaXYgI2F0eExheW91dENvbnRhaW5lciBjbGFzcz1cImF0eC1ib3JkZXItbGF5b3V0XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+Il19
@@ -34,17 +34,26 @@ export class BorderLayoutRenderer extends IdentifiableComponent {
34
34
  /**
35
35
  * @private
36
36
  */
37
- constructor(subscribeSvc) {
37
+ constructor(subscribeSvc, document) {
38
38
  super();
39
39
  this.subscribeSvc = subscribeSvc;
40
+ this.document = document;
40
41
  /**
41
42
  * Emits events each time the user starts, or stops dragging handle.
42
43
  */
43
- this.userAction = new EventEmitter(false);
44
+ this.userAction = new EventEmitter();
44
45
  /**
45
46
  * @private
46
47
  */
47
48
  this.containerList = [];
49
+ /**
50
+ * @private
51
+ */
52
+ this.storedStopHandler = null;
53
+ /**
54
+ * @private
55
+ */
56
+ this.storedMoveHandler = null;
48
57
  this.boundsManager = new BorderLayoutBoundsManager();
49
58
  }
50
59
  /**
@@ -91,12 +100,17 @@ export class BorderLayoutRenderer extends IdentifiableComponent {
91
100
  * Makes this object elligible for garbage collection.
92
101
  */
93
102
  destroy() {
103
+ if (this.storedStopHandler) {
104
+ this.document.removeEventListener(MOUSEMOVE, this.storedMoveHandler);
105
+ this.document.removeEventListener(MOUSEUP, this.storedStopHandler);
106
+ this.deleteStoredHandlers();
107
+ }
94
108
  this.subscribeSvc.clearAll(this);
95
- this.containerList.length = 0;
96
- this.containerList = null;
97
109
  this.lytContainerElm = null;
98
110
  this.boundsManager.destroy();
99
111
  this.boundsManager = null;
112
+ this.containerList.length = 0;
113
+ this.containerList = null;
100
114
  }
101
115
  /**
102
116
  * Forces the layout of all `BorderLayoutContainer` objects associated with the main container.
@@ -139,32 +153,36 @@ export class BorderLayoutRenderer extends IdentifiableComponent {
139
153
  const region = constraints.region;
140
154
  const minSize = constraints.minSize;
141
155
  const maxSize = constraints.maxSize;
156
+ const doc = this.document;
142
157
  let size = 0;
143
158
  this.boundsManager.setOrigin(bounds.x, bounds.y);
144
159
  let resizeMethod = this.boundsManager.getResizeMethod(region);
145
160
  container.selected = true;
146
161
  const onMoveHandler = (event) => {
147
- event.preventDefault();
148
162
  event.stopPropagation();
163
+ event.preventDefault();
149
164
  size = resizeMethod(event, width, height, minSize, maxSize);
150
165
  container.setSize(size);
151
166
  this.render(width);
152
167
  this.fireEvent(container, LayoutDragEventType.DRAGGING);
153
168
  };
154
169
  const onStopHandler = (event) => {
155
- event.preventDefault();
156
170
  event.stopPropagation();
157
- lytNativeElm.removeEventListener(MOUSEMOVE, onMoveHandler);
158
- lytNativeElm.removeEventListener(MOUSEUP, onStopHandler);
171
+ event.preventDefault();
172
+ doc.removeEventListener(MOUSEMOVE, onMoveHandler);
173
+ doc.removeEventListener(MOUSEUP, onStopHandler);
174
+ this.deleteStoredHandlers();
159
175
  container.selected = false;
160
176
  size = resizeMethod(event, width, height, minSize, maxSize);
161
177
  container.setSize(size);
162
178
  this.render(width);
163
179
  this.fireEvent(container, LayoutDragEventType.DRAG_STOP);
164
180
  };
165
- lytNativeElm.addEventListener(MOUSEMOVE, onMoveHandler);
166
- lytNativeElm.addEventListener(MOUSEUP, onStopHandler);
181
+ this.storedMoveHandler = onMoveHandler;
182
+ this.storedStopHandler = onStopHandler;
167
183
  this.fireEvent(container, LayoutDragEventType.DRAG_START);
184
+ doc.addEventListener(MOUSEMOVE, onMoveHandler);
185
+ doc.addEventListener(MOUSEUP, onStopHandler);
168
186
  }
169
187
  /**
170
188
  * @private
@@ -182,31 +200,46 @@ export class BorderLayoutRenderer extends IdentifiableComponent {
182
200
  const bottom = bounds.bottom;
183
201
  const left = bounds.left;
184
202
  const right = bounds.right;
185
- this.containerList.forEach((cont) => {
203
+ const cList = this.containerList;
204
+ let cursor = cList.length - 1;
205
+ while (cursor >= 0) {
206
+ const cont = cList[cursor];
186
207
  const r = cont.constraints.region;
208
+ cursor--;
187
209
  if (r === LayoutRegion.WEST) {
188
210
  cont.setTopPos(top);
189
211
  cont.setRightPos(width - left);
190
212
  cont.setBottomPos(bottom - top);
191
- return;
213
+ continue;
192
214
  }
193
215
  if (r === LayoutRegion.CENTER) {
194
216
  cont.setTopPos(top);
195
217
  cont.setLeftPos(left);
196
218
  cont.setRightPos(right - left);
197
219
  cont.setBottomPos(bottom - top);
198
- return;
220
+ continue;
199
221
  }
200
222
  if (r === LayoutRegion.EAST) {
201
223
  cont.setTopPos(top);
202
224
  cont.setLeftPos(width - (right - left));
203
225
  cont.setBottomPos(bottom - top);
226
+ continue;
204
227
  }
205
- });
228
+ }
229
+ ;
206
230
  }
231
+ /**
232
+ * @private
233
+ */
207
234
  checkLytContainer() {
208
235
  if (!this.lytContainerElm)
209
236
  throw new ReferenceError(LAYOUT_ERR_MSG);
210
237
  }
238
+ /**
239
+ * @private
240
+ */
241
+ deleteStoredHandlers() {
242
+ this.storedMoveHandler = this.storedStopHandler = null;
243
+ }
211
244
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWxheW91dC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2NvbXBvbmVudC9sYXlvdXQvYm9yZGVyLWxheW91dC91dGlsL2JvcmRlci1sYXlvdXQtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFrQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQzVJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzNFOztHQUVHO0FBQ0gsTUFBTSxTQUFTLEdBQVEsV0FBVyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQVEsU0FBUyxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQVcsb0VBQW9FLENBQUM7QUFFcEc7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBVywwQ0FBMEMsQ0FBQztBQUUxRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXFCO0lBc0I3RDs7T0FFRztJQUNILFlBQW9CLFlBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBdkJyRDs7V0FFRztRQUNhLGVBQVUsR0FBa0MsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFPcEY7O1dBRUc7UUFDSyxrQkFBYSxHQUE0QixFQUFFLENBQUM7UUFZbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJ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QVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxNQUFNLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvcmRlckxheW91dENvbnRhaW5lciB9IGZyb20gJy4uLy4uL2JvcmRlci1sYXlvdXQtY29udGFpbmVyL2JvcmRlci1sYXlvdXQtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsJztcbmltcG9ydCB7IERlc3Ryb3lhYmxlLCBMYXlvdXRDb25zdHJhaW50cywgTGF5b3V0RHJhZ0V2ZW50LCBMYXlvdXREcmFnRXZlbnRUeXBlLCBMYXlvdXRSZWdpb24sIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbCc7XG5pbXBvcnQgeyBJZGVudGlmaWFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IEJvcmRlckxheW91dEJvdW5kc01hbmFnZXIgfSBmcm9tICcuL2JvcmRlci1sYXlvdXQtYm91bmRzLW1hbmFnZXInO1xuaW1wb3J0IHsgUmVzaXplTWV0aG9kIH0gZnJvbSAnLi9yZXNpemUtbWV0aG9kJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBNT1VTRU1PVkU6IGFueSA9IFwibW91c2Vtb3ZlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgTU9VU0VVUDogYW55ID0gXCJtb3VzZXVwXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgUkVHSU9OX0VSUl9NU0c6IHN0cmluZyA9IFwiQSBjb250YWluZXIgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZDogXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgTEFZT1VUX0VSUl9NU0c6IHN0cmluZyA9IFwiTm8gbGF5b3V0IGNvbnRhaW5lciBoYXMgYmVlbiByZWdpc3RlcmVkLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIGNvbnRyb2xsZXIgb2JqZWN0IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB1c2VyIGFjdGlvbnMgb24gYSBgQm9yZGVyTGF5b3V0YCBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCb3JkZXJMYXlvdXRSZW5kZXJlciBleHRlbmRzIElkZW50aWZpYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIERlc3Ryb3lhYmxlIHtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnRzIGVhY2ggdGltZSB0aGUgdXNlciBzdGFydHMsIG9yIHN0b3BzIGRyYWdnaW5nIGhhbmRsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyQWN0aW9uOiBFdmVudEVtaXR0ZXI8TGF5b3V0RHJhZ0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBseXRDb250YWluZXJFbG0hOiBIVE1MRGl2RWxlbWVudDtcbiAgXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjb250YWluZXJMaXN0OiBCb3JkZXJMYXlvdXRDb250YWluZXJbXSA9IFtdO1xuICBcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJvdW5kc01hbmFnZXI6IEJvcmRlckxheW91dEJvdW5kc01hbmFnZXI7IFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdWJzY3JpYmVTdmM6IFN1YnNjcmlwdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYm91bmRzTWFuYWdlciA9IG5ldyBCb3JkZXJMYXlvdXRCb3VuZHNNYW5hZ2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBsaXN0IGBCb3JkZXJMYXlvdXRDb250YWluZXJgIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGNvbnRhaW5lciB0byB0aGlzIGNvbnRyb2xsZXIuXG4gICAqIFxuICAgKiBAcGFyYW0gY29udGFpbmVycyB0aGUgbGlzdCBgQm9yZGVyTGF5b3V0Q29udGFpbmVyYCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBjb250YWluZXIuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29udGFpbmVycyhjb250YWluZXJzOiBRdWVyeUxpc3Q8Qm9yZGVyTGF5b3V0Q29udGFpbmVyPik6IHZvaWQge1xuICAgIGxldCByZWdpb25WYWxpZGF0b3I6IHN0cmluZyA9IEVNUFRZX1NUUklORztcbiAgICBjb250YWluZXJzLmZvckVhY2goY29udGFpbmVyID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBMYXlvdXRDb25zdHJhaW50cyA9IGNvbnRhaW5lci5jb25zdHJhaW50cztcbiAgICAgIGNvbnN0IHI6IHN0cmluZyA9IGNvbnN0cmFpbnRzLnJlZ2lvbiBhcyBzdHJpbmc7XG4gICAgICBpZiAocmVnaW9uVmFsaWRhdG9yLmluZGV4T2YocikgIT09IC0xKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoUkVHSU9OX0VSUl9NU0cgKyByKTtcbiAgICAgIHJlZ2lvblZhbGlkYXRvciArPSByO1xuICAgICAgaWYgKGNvbnN0cmFpbnRzLnJlc2l6YWJsZSkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVN2Yy5yZWdpc3Rlcih0aGlzLFxuICAgICAgICAgIGNvbnRhaW5lci5yZXNpemVTdGFydC5zdWJzY3JpYmUoY29udGFpbmVyPT4gdGhpcy5yZXNpemVFbnRlcihjb250YWluZXIpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5ib3VuZHNNYW5hZ2VyLmluaXRCb3VuZHMoY29udGFpbmVyKTtcbiAgICAgIGlmIChyID09PSBMYXlvdXRSZWdpb24uTk9SVEggfHwgciA9PT0gTGF5b3V0UmVnaW9uLlNPVVRIKSByZXR1cm47XG4gICAgICB0aGlzLmNvbnRhaW5lckxpc3QucHVzaChjb250YWluZXIpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZWZlcmVuY2UgdG8gdGhlIEhUTUwgY29udGFpbmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBjb250YWluZXIuXG4gICAqIFxuICAgKiBAcGFyYW0gbHl0Q29udGFpbmVyIFRoZSByZWZlcmVuY2UgdG8gdGhlIEhUTUwgY29udGFpbmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBjb250YWluZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0TGF5b3V0Q29udGFpbmVyKGx5dENvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmx5dENvbnRhaW5lckVsbSA9IGx5dENvbnRhaW5lcjtcbiAgfTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRm9yIHRlc3QgcHVycG9zZSBvbmx5LlxuICAgKiBSZXR1cm5zIHRoZSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIGBCb3JkZXJMYXlvdXRCb3VuZHNNYW5hZ2VyYCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBnZXRCb3VuZHNNYW5hZ2VyKCk6IEJvcmRlckxheW91dEJvdW5kc01hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLmJvdW5kc01hbmFnZXI7IFxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoaXMgb2JqZWN0IGVsbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVTdmMuY2xlYXJBbGwodGhpcyk7XG4gICAgdGhpcy5jb250YWluZXJMaXN0Lmxlbmd0aCA9IDA7XG4gICAgdGhpcy5jb250YWluZXJMaXN0ID0gbnVsbCBhcyBhbnk7XG4gICAgdGhpcy5seXRDb250YWluZXJFbG0gPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLmJvdW5kc01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuYm91bmRzTWFuYWdlciA9IG51bGwgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgbGF5b3V0IG9mIGFsbCBgQm9yZGVyTGF5b3V0Q29udGFpbmVyYCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBjb250YWluZXIuXG4gICAqL1xuICBwdWJsaWMgcGFpbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0x5dENvbnRhaW5lcigpO1xuICAgIHRoaXMucmVuZGVyKHRoaXMubHl0Q29udGFpbmVyRWxtLm9mZnNldFdpZHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemVzIHRoZSBzcGVjaWZpZWQgcmVnaW9uIG9mIHRoZSBhc3NvY2lhdGVkIGNvbnRhaW5lci5cbiAgICogXG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvbiB0byByZXNpemUuXG4gICAqIEBwYXJhbSBzaXplIFRoZSBuZXcgc2l6ZSBvZiB0aGUgcmVnaW9uIHRvIHJlc2l6ZS5cbiAgICogXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGhhcyBiZWVuIHJlc2l6ZWQ7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIHJlc2l6ZVJlZ2lvbihyZWdpb246IExheW91dFJlZ2lvbiwgc2l6ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHJlZ2lvbiA9PT0gTGF5b3V0UmVnaW9uLkNFTlRFUikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogQm9yZGVyTGF5b3V0Q29udGFpbmVyIHwgdW5kZWZpbmVkID0gdGhpcy5jb250YWluZXJMaXN0LmZpbmQoKGM6IEJvcmRlckxheW91dENvbnRhaW5lcik9PiB7XG4gICAgICByZXR1cm4gYy5jb25zdHJhaW50cy5yZWdpb24gPT09IHJlZ2lvbjtcbiAgICB9KTtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnRhaW5lci5zZXRTaXplKHNpemUpO1xuICAgIHRoaXMuYm91bmRzTWFuYWdlci5pbml0Qm91bmRzKGNvbnRhaW5lcik7XG4gICAgdGhpcy5wYWludCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlc2l6ZUVudGVyKGNvbnRhaW5lcjogQm9yZGVyTGF5b3V0Q29udGFpbmVyKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0x5dENvbnRhaW5lcigpO1xuICAgIGNvbnN0IGx5dE5hdGl2ZUVsbTogSFRNTERpdkVsZW1lbnQgPSB0aGlzLmx5dENvbnRhaW5lckVsbTtcbiAgICBjb25zdCB3aWR0aDogbnVtYmVyID0gbHl0TmF0aXZlRWxtLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodDogbnVtYmVyID0gbHl0TmF0aXZlRWxtLm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBib3VuZHM6IERPTVJlY3QgPSBseXROYXRpdmVFbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29uc3RyYWludHM6IExheW91dENvbnN0cmFpbnRzID0gY29udGFpbmVyLmNvbnN0cmFpbnRzO1xuICAgIGNvbnN0IHJlZ2lvbjogTGF5b3V0UmVnaW9uID0gY29uc3RyYWludHMucmVnaW9uIGFzIExheW91dFJlZ2lvbjtcbiAgICBjb25zdCBtaW5TaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjb25zdHJhaW50cy5taW5TaXplO1xuICAgIGNvbnN0IG1heFNpemU6IG51bWJlciB8IHVuZGVmaW5lZCA9IGNvbnN0cmFpbnRzLm1heFNpemU7XG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XG4gICAgdGhpcy5ib3VuZHNNYW5hZ2VyLnNldE9yaWdpbihib3VuZHMueCwgYm91bmRzLnkpO1xuICAgIGxldCByZXNpemVNZXRob2Q6IFJlc2l6ZU1ldGhvZCA9IHRoaXMuYm91bmRzTWFuYWdlci5nZXRSZXNpemVNZXRob2QocmVnaW9uKTtcbiAgICBjb250YWluZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IG9uTW92ZUhhbmRsZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgc2l6ZSA9IHJlc2l6ZU1ldGhvZChldmVudCwgd2lkdGgsIGhlaWdodCwgbWluU2l6ZSwgbWF4U2l6ZSk7XG4gICAgICBjb250YWluZXIuc2V0U2l6ZShzaXplKTtcbiAgICAgIHRoaXMucmVuZGVyKHdpZHRoKTtcbiAgICAgIHRoaXMuZmlyZUV2ZW50KGNvbnRhaW5lciwgTGF5b3V0RHJhZ0V2ZW50VHlwZS5EUkFHR0lORyk7XG4gICAgfTtcbiAgICBjb25zdCBvblN0b3BIYW5kbGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGx5dE5hdGl2ZUVsbS5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFTU9WRSwgb25Nb3ZlSGFuZGxlcik7XG4gICAgICBseXROYXRpdmVFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihNT1VTRVVQLCBvblN0b3BIYW5kbGVyKTtcbiAgICAgIGNvbnRhaW5lci5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgc2l6ZSA9IHJlc2l6ZU1ldGhvZChldmVudCwgd2lkdGgsIGhlaWdodCwgbWluU2l6ZSwgbWF4U2l6ZSk7XG4gICAgICBjb250YWluZXIuc2V0U2l6ZShzaXplKTtcbiAgICAgIHRoaXMucmVuZGVyKHdpZHRoKTtcbiAgICAgIHRoaXMuZmlyZUV2ZW50KGNvbnRhaW5lciwgTGF5b3V0RHJhZ0V2ZW50VHlwZS5EUkFHX1NUT1ApO1xuICAgIH07XG4gICAgbHl0TmF0aXZlRWxtLmFkZEV2ZW50TGlzdGVuZXIoTU9VU0VNT1ZFLCBvbk1vdmVIYW5kbGVyKTtcbiAgICBseXROYXRpdmVFbG0uYWRkRXZlbnRMaXN0ZW5lcihNT1VTRVVQLCBvblN0b3BIYW5kbGVyKTtcbiAgICB0aGlzLmZpcmVFdmVudChjb250YWluZXIsIExheW91dERyYWdFdmVudFR5cGUuRFJBR19TVEFSVCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZmlyZUV2ZW50KHRhcmdldDogQm9yZGVyTGF5b3V0Q29udGFpbmVyLCB0eXBlOiBMYXlvdXREcmFnRXZlbnRUeXBlKTogdm9pZCB7XG4gICAgY29uc3QgZXZ0OiBMYXlvdXREcmFnRXZlbnQgPSBuZXcgTGF5b3V0RHJhZ0V2ZW50KHRhcmdldCwgdHlwZSk7XG4gICAgdGhpcy51c2VyQWN0aW9uLmVtaXQoZXZ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXIod2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGJvdW5kczogRE9NUmVjdCA9IHRoaXMuYm91bmRzTWFuYWdlci5nZXRCb3VuZHMoKTtcbiAgICBjb25zdCB0b3A6IG51bWJlciA9IGJvdW5kcy50b3A7XG4gICAgY29uc3QgYm90dG9tOiBudW1iZXIgPSBib3VuZHMuYm90dG9tO1xuICAgIGNvbnN0IGxlZnQ6IG51bWJlciA9IGJvdW5kcy5sZWZ0O1xuICAgIGNvbnN0IHJpZ2h0OiBudW1iZXIgPSBib3VuZHMucmlnaHQ7XG4gICAgdGhpcy5jb250YWluZXJMaXN0LmZvckVhY2goKGNvbnQ6IEJvcmRlckxheW91dENvbnRhaW5lcikgPT4ge1xuICAgICAgY29uc3QgcjogTGF5b3V0UmVnaW9uID0gY29udC5jb25zdHJhaW50cy5yZWdpb24gYXMgTGF5b3V0UmVnaW9uO1xuICAgICAgaWYgKHIgPT09IExheW91dFJlZ2lvbi5XRVNUKSB7XG4gICAgICAgIGNvbnQuc2V0VG9wUG9zKHRvcCk7XG4gICAgICAgIGNvbnQuc2V0UmlnaHRQb3Mod2lkdGggLSBsZWZ0KTtcbiAgICAgICAgY29udC5zZXRCb3R0b21Qb3MoYm90dG9tIC0gdG9wKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHIgPT09IExheW91dFJlZ2lvbi5DRU5URVIpIHtcbiAgICAgICAgY29udC5zZXRUb3BQb3ModG9wKTtcbiAgICAgICAgY29udC5zZXRMZWZ0UG9zKGxlZnQpO1xuICAgICAgICBjb250LnNldFJpZ2h0UG9zKHJpZ2h0IC0gbGVmdCk7XG4gICAgICAgIGNvbnQuc2V0Qm90dG9tUG9zKGJvdHRvbSAtIHRvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyID09PSBMYXlvdXRSZWdpb24uRUFTVCkge1xuICAgICAgICBjb250LnNldFRvcFBvcyh0b3ApO1xuICAgICAgICBjb250LnNldExlZnRQb3Mod2lkdGggLSAocmlnaHQgLSBsZWZ0KSk7XG4gICAgICAgIGNvbnQuc2V0Qm90dG9tUG9zKGJvdHRvbSAtIHRvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTHl0Q29udGFpbmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5seXRDb250YWluZXJFbG0pIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihMQVlPVVRfRVJSX01TRyk7XG4gIH1cbn1cbiJdfQ==
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9yZGVyLWxheW91dC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL2NvbXBvbmVudC9sYXlvdXQvYm9yZGVyLWxheW91dC91dGlsL2JvcmRlci1sYXlvdXQtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFrQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQzVJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzNFOztHQUVHO0FBQ0gsTUFBTSxTQUFTLEdBQVEsV0FBVyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQVEsU0FBUyxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQVcsb0VBQW9FLENBQUM7QUFFcEc7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBVywwQ0FBMEMsQ0FBQztBQUUxRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXFCO0lBZ0M3RDs7T0FFRztJQUNILFlBQW9CLFlBQWlDLEVBQ2pDLFFBQWtCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBRlUsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFsQ3RDOztXQUVHO1FBQ2EsZUFBVSxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBTy9FOztXQUVHO1FBQ0ssa0JBQWEsR0FBNEIsRUFBRSxDQUFDO1FB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QUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgUGFzY2FsIEVDSEVNQU5OLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcGFzY2FsZWNoZW1hbm4uY29tL2FuZ3VsYXItdG9vbGJveC9yZXNvdXJjZXMvbGljZW5zZVxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb3JkZXJMYXlvdXRDb250YWluZXIgfSBmcm9tICcuLi8uLi9ib3JkZXItbGF5b3V0LWNvbnRhaW5lci9ib3JkZXItbGF5b3V0LWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBEZXN0cm95YWJsZSwgTGF5b3V0Q29uc3RyYWludHMsIExheW91dERyYWdFdmVudCwgTGF5b3V0RHJhZ0V2ZW50VHlwZSwgTGF5b3V0UmVnaW9uLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgSWRlbnRpZmlhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBCb3JkZXJMYXlvdXRCb3VuZHNNYW5hZ2VyIH0gZnJvbSAnLi9ib3JkZXItbGF5b3V0LWJvdW5kcy1tYW5hZ2VyJztcbmltcG9ydCB7IFJlc2l6ZU1ldGhvZCB9IGZyb20gJy4vcmVzaXplLW1ldGhvZCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgTU9VU0VNT1ZFOiBhbnkgPSBcIm1vdXNlbW92ZVwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IE1PVVNFVVA6IGFueSA9IFwibW91c2V1cFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFJFR0lPTl9FUlJfTVNHOiBzdHJpbmcgPSBcIkEgY29udGFpbmVyIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllciBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQ6IFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IExBWU9VVF9FUlJfTVNHOiBzdHJpbmcgPSBcIk5vIGxheW91dCBjb250YWluZXIgaGFzIGJlZW4gcmVnaXN0ZXJlZC5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSBjb250cm9sbGVyIG9iamVjdCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdXNlciBhY3Rpb25zIG9uIGEgYEJvcmRlckxheW91dGAgY29udGFpbmVyLlxuICovXG5leHBvcnQgY2xhc3MgQm9yZGVyTGF5b3V0UmVuZGVyZXIgZXh0ZW5kcyBJZGVudGlmaWFibGVDb21wb25lbnQgaW1wbGVtZW50cyBEZXN0cm95YWJsZSB7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50cyBlYWNoIHRpbWUgdGhlIHVzZXIgc3RhcnRzLCBvciBzdG9wcyBkcmFnZ2luZyBoYW5kbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckFjdGlvbjogRXZlbnRFbWl0dGVyPExheW91dERyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGx5dENvbnRhaW5lckVsbSE6IEhUTUxEaXZFbGVtZW50O1xuICBcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNvbnRhaW5lckxpc3Q6IEJvcmRlckxheW91dENvbnRhaW5lcltdID0gW107XG4gIFxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYm91bmRzTWFuYWdlcjogQm9yZGVyTGF5b3V0Qm91bmRzTWFuYWdlcjsgXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0b3JlZFN0b3BIYW5kbGVyOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdG9yZWRNb3ZlSGFuZGxlcjogYW55ID0gbnVsbDtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3Vic2NyaWJlU3ZjOiBTdWJzY3JpcHRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3VuZHNNYW5hZ2VyID0gbmV3IEJvcmRlckxheW91dEJvdW5kc01hbmFnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGxpc3QgYEJvcmRlckxheW91dENvbnRhaW5lcmAgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gY29udGFpbmVyIHRvIHRoaXMgY29udHJvbGxlci5cbiAgICogXG4gICAqIEBwYXJhbSBjb250YWluZXJzIHRoZSBsaXN0IGBCb3JkZXJMYXlvdXRDb250YWluZXJgIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGNvbnRhaW5lci5cbiAgICovXG4gIHB1YmxpYyBhZGRDb250YWluZXJzKGNvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxCb3JkZXJMYXlvdXRDb250YWluZXI+KTogdm9pZCB7XG4gICAgbGV0IHJlZ2lvblZhbGlkYXRvcjogc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuICAgIGNvbnRhaW5lcnMuZm9yRWFjaChjb250YWluZXIgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludHM6IExheW91dENvbnN0cmFpbnRzID0gY29udGFpbmVyLmNvbnN0cmFpbnRzO1xuICAgICAgY29uc3Qgcjogc3RyaW5nID0gY29uc3RyYWludHMucmVnaW9uIGFzIHN0cmluZztcbiAgICAgIGlmIChyZWdpb25WYWxpZGF0b3IuaW5kZXhPZihyKSAhPT0gLTEpIHRocm93IG5ldyBTeW50YXhFcnJvcihSRUdJT05fRVJSX01TRyArIHIpO1xuICAgICAgcmVnaW9uVmFsaWRhdG9yICs9IHI7XG4gICAgICBpZiAoY29uc3RyYWludHMucmVzaXphYmxlKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlU3ZjLnJlZ2lzdGVyKHRoaXMsXG4gICAgICAgICAgY29udGFpbmVyLnJlc2l6ZVN0YXJ0LnN1YnNjcmliZShjb250YWluZXI9PiB0aGlzLnJlc2l6ZUVudGVyKGNvbnRhaW5lcikpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmJvdW5kc01hbmFnZXIuaW5pdEJvdW5kcyhjb250YWluZXIpO1xuICAgICAgaWYgKHIgPT09IExheW91dFJlZ2lvbi5OT1JUSCB8fCByID09PSBMYXlvdXRSZWdpb24uU09VVEgpIHJldHVybjtcbiAgICAgIHRoaXMuY29udGFpbmVyTGlzdC5wdXNoKGNvbnRhaW5lcik7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJlZmVyZW5jZSB0byB0aGUgSFRNTCBjb250YWluZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGNvbnRhaW5lci5cbiAgICogXG4gICAqIEBwYXJhbSBseXRDb250YWluZXIgVGhlIHJlZmVyZW5jZSB0byB0aGUgSFRNTCBjb250YWluZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGNvbnRhaW5lci5cbiAgICovXG4gIHB1YmxpYyBzZXRMYXlvdXRDb250YWluZXIobHl0Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMubHl0Q29udGFpbmVyRWxtID0gbHl0Q29udGFpbmVyO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBGb3IgdGVzdCBwdXJwb3NlIG9ubHkuXG4gICAqIFJldHVybnMgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgYEJvcmRlckxheW91dEJvdW5kc01hbmFnZXJgIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGdldEJvdW5kc01hbmFnZXIoKTogQm9yZGVyTGF5b3V0Qm91bmRzTWFuYWdlciB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzTWFuYWdlcjsgXG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgdGhpcyBvYmplY3QgZWxsaWdpYmxlIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdG9yZWRTdG9wSGFuZGxlcikge1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFTU9WRSwgdGhpcy5zdG9yZWRNb3ZlSGFuZGxlcik7XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTU9VU0VVUCwgdGhpcy5zdG9yZWRTdG9wSGFuZGxlcik7XG4gICAgICB0aGlzLmRlbGV0ZVN0b3JlZEhhbmRsZXJzKCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlU3ZjLmNsZWFyQWxsKHRoaXMpO1xuICAgIHRoaXMubHl0Q29udGFpbmVyRWxtID0gbnVsbCBhcyBhbnk7XG4gICAgdGhpcy5ib3VuZHNNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmJvdW5kc01hbmFnZXIgPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLmNvbnRhaW5lckxpc3QubGVuZ3RoID0gMDtcbiAgICB0aGlzLmNvbnRhaW5lckxpc3QgPSBudWxsIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIGxheW91dCBvZiBhbGwgYEJvcmRlckxheW91dENvbnRhaW5lcmAgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gY29udGFpbmVyLlxuICAgKi9cbiAgcHVibGljIHBhaW50KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tMeXRDb250YWluZXIoKTtcbiAgICB0aGlzLnJlbmRlcih0aGlzLmx5dENvbnRhaW5lckVsbS5vZmZzZXRXaWR0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzaXplcyB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBvZiB0aGUgYXNzb2NpYXRlZCBjb250YWluZXIuXG4gICAqIFxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb24gdG8gcmVzaXplLlxuICAgKiBAcGFyYW0gc2l6ZSBUaGUgbmV3IHNpemUgb2YgdGhlIHJlZ2lvbiB0byByZXNpemUuXG4gICAqIFxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hldGhlciB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBoYXMgYmVlbiByZXNpemVkOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyByZXNpemVSZWdpb24ocmVnaW9uOiBMYXlvdXRSZWdpb24sIHNpemU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChyZWdpb24gPT09IExheW91dFJlZ2lvbi5DRU5URVIpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb250YWluZXI6IEJvcmRlckxheW91dENvbnRhaW5lciB8IHVuZGVmaW5lZCA9IHRoaXMuY29udGFpbmVyTGlzdC5maW5kKChjOiBCb3JkZXJMYXlvdXRDb250YWluZXIpPT4ge1xuICAgICAgcmV0dXJuIGMuY29uc3RyYWludHMucmVnaW9uID09PSByZWdpb247XG4gICAgfSk7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcbiAgICBjb250YWluZXIuc2V0U2l6ZShzaXplKTtcbiAgICB0aGlzLmJvdW5kc01hbmFnZXIuaW5pdEJvdW5kcyhjb250YWluZXIpO1xuICAgIHRoaXMucGFpbnQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZXNpemVFbnRlcihjb250YWluZXI6IEJvcmRlckxheW91dENvbnRhaW5lcik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tMeXRDb250YWluZXIoKTtcbiAgICBjb25zdCBseXROYXRpdmVFbG06IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5seXRDb250YWluZXJFbG07XG4gICAgY29uc3Qgd2lkdGg6IG51bWJlciA9IGx5dE5hdGl2ZUVsbS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQ6IG51bWJlciA9IGx5dE5hdGl2ZUVsbS5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgYm91bmRzOiBET01SZWN0ID0gbHl0TmF0aXZlRWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBMYXlvdXRDb25zdHJhaW50cyA9IGNvbnRhaW5lci5jb25zdHJhaW50cztcbiAgICBjb25zdCByZWdpb246IExheW91dFJlZ2lvbiA9IGNvbnN0cmFpbnRzLnJlZ2lvbiBhcyBMYXlvdXRSZWdpb247XG4gICAgY29uc3QgbWluU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gY29uc3RyYWludHMubWluU2l6ZTtcbiAgICBjb25zdCBtYXhTaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjb25zdHJhaW50cy5tYXhTaXplO1xuICAgIGNvbnN0IGRvYzogRG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50O1xuICAgIGxldCBzaXplOiBudW1iZXIgPSAwO1xuICAgIHRoaXMuYm91bmRzTWFuYWdlci5zZXRPcmlnaW4oYm91bmRzLngsIGJvdW5kcy55KTtcbiAgICBsZXQgcmVzaXplTWV0aG9kOiBSZXNpemVNZXRob2QgPSB0aGlzLmJvdW5kc01hbmFnZXIuZ2V0UmVzaXplTWV0aG9kKHJlZ2lvbik7XG4gICAgY29udGFpbmVyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICBjb25zdCBvbk1vdmVIYW5kbGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNpemUgPSByZXNpemVNZXRob2QoZXZlbnQsIHdpZHRoLCBoZWlnaHQsIG1pblNpemUsIG1heFNpemUpO1xuICAgICAgY29udGFpbmVyLnNldFNpemUoc2l6ZSk7XG4gICAgICB0aGlzLnJlbmRlcih3aWR0aCk7XG4gICAgICB0aGlzLmZpcmVFdmVudChjb250YWluZXIsIExheW91dERyYWdFdmVudFR5cGUuRFJBR0dJTkcpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdG9wSGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCk9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihNT1VTRU1PVkUsIG9uTW92ZUhhbmRsZXIpO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoTU9VU0VVUCwgb25TdG9wSGFuZGxlcik7XG4gICAgICB0aGlzLmRlbGV0ZVN0b3JlZEhhbmRsZXJzKCk7XG4gICAgICBjb250YWluZXIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHNpemUgPSByZXNpemVNZXRob2QoZXZlbnQsIHdpZHRoLCBoZWlnaHQsIG1pblNpemUsIG1heFNpemUpO1xuICAgICAgY29udGFpbmVyLnNldFNpemUoc2l6ZSk7XG4gICAgICB0aGlzLnJlbmRlcih3aWR0aCk7XG4gICAgICB0aGlzLmZpcmVFdmVudChjb250YWluZXIsIExheW91dERyYWdFdmVudFR5cGUuRFJBR19TVE9QKTtcbiAgICB9O1xuICAgIHRoaXMuc3RvcmVkTW92ZUhhbmRsZXIgPSBvbk1vdmVIYW5kbGVyO1xuICAgIHRoaXMuc3RvcmVkU3RvcEhhbmRsZXIgPSBvblN0b3BIYW5kbGVyO1xuICAgIHRoaXMuZmlyZUV2ZW50KGNvbnRhaW5lciwgTGF5b3V0RHJhZ0V2ZW50VHlwZS5EUkFHX1NUQVJUKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRU1PVkUsIG9uTW92ZUhhbmRsZXIpO1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKE1PVVNFVVAsIG9uU3RvcEhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGZpcmVFdmVudCh0YXJnZXQ6IEJvcmRlckxheW91dENvbnRhaW5lciwgdHlwZTogTGF5b3V0RHJhZ0V2ZW50VHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IGV2dDogTGF5b3V0RHJhZ0V2ZW50ID0gbmV3IExheW91dERyYWdFdmVudCh0YXJnZXQsIHR5cGUpO1xuICAgIHRoaXMudXNlckFjdGlvbi5lbWl0KGV2dCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyKHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBib3VuZHM6IERPTVJlY3QgPSB0aGlzLmJvdW5kc01hbmFnZXIuZ2V0Qm91bmRzKCk7XG4gICAgY29uc3QgdG9wOiBudW1iZXIgPSBib3VuZHMudG9wO1xuICAgIGNvbnN0IGJvdHRvbTogbnVtYmVyID0gYm91bmRzLmJvdHRvbTtcbiAgICBjb25zdCBsZWZ0OiBudW1iZXIgPSBib3VuZHMubGVmdDtcbiAgICBjb25zdCByaWdodDogbnVtYmVyID0gYm91bmRzLnJpZ2h0O1xuICAgIGNvbnN0IGNMaXN0OiBCb3JkZXJMYXlvdXRDb250YWluZXJbXSA9IHRoaXMuY29udGFpbmVyTGlzdDtcbiAgICBsZXQgY3Vyc29yOiBudW1iZXIgPSBjTGlzdC5sZW5ndGggLSAxO1xuICAgIHdoaWxlKGN1cnNvciA+PSAwKSB7XG4gICAgICBjb25zdCBjb250OiBCb3JkZXJMYXlvdXRDb250YWluZXIgPSBjTGlzdFtjdXJzb3JdO1xuICAgICAgY29uc3QgcjogTGF5b3V0UmVnaW9uID0gY29udC5jb25zdHJhaW50cy5yZWdpb24gYXMgTGF5b3V0UmVnaW9uO1xuICAgICAgY3Vyc29yLS07XG4gICAgICBpZiAociA9PT0gTGF5b3V0UmVnaW9uLldFU1QpIHtcbiAgICAgICAgY29udC5zZXRUb3BQb3ModG9wKTtcbiAgICAgICAgY29udC5zZXRSaWdodFBvcyh3aWR0aCAtIGxlZnQpO1xuICAgICAgICBjb250LnNldEJvdHRvbVBvcyhib3R0b20gLSB0b3ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyID09PSBMYXlvdXRSZWdpb24uQ0VOVEVSKSB7XG4gICAgICAgIGNvbnQuc2V0VG9wUG9zKHRvcCk7XG4gICAgICAgIGNvbnQuc2V0TGVmdFBvcyhsZWZ0KTtcbiAgICAgICAgY29udC5zZXRSaWdodFBvcyhyaWdodCAtIGxlZnQpO1xuICAgICAgICBjb250LnNldEJvdHRvbVBvcyhib3R0b20gLSB0b3ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyID09PSBMYXlvdXRSZWdpb24uRUFTVCkge1xuICAgICAgICBjb250LnNldFRvcFBvcyh0b3ApO1xuICAgICAgICBjb250LnNldExlZnRQb3Mod2lkdGggLSAocmlnaHQgLSBsZWZ0KSk7XG4gICAgICAgIGNvbnQuc2V0Qm90dG9tUG9zKGJvdHRvbSAtIHRvcCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY2hlY2tMeXRDb250YWluZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmx5dENvbnRhaW5lckVsbSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKExBWU9VVF9FUlJfTVNHKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGRlbGV0ZVN0b3JlZEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmVkTW92ZUhhbmRsZXIgPSB0aGlzLnN0b3JlZFN0b3BIYW5kbGVyID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -129,11 +129,11 @@ export class BorderLayoutContainer {
129
129
  this.resizable = true;
130
130
  }
131
131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: BorderLayoutContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: BorderLayoutContainer, isStandalone: true, selector: "atx-border-layout-container", inputs: { constraints: "constraints" }, host: { properties: { "class": "this.class" } }, ngImport: i0, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n", styles: [":host{box-sizing:border-box;padding:0;margin:0}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: BorderLayoutContainer, isStandalone: true, selector: "atx-border-layout-container", inputs: { constraints: "constraints" }, host: { properties: { "class": "this.class" } }, ngImport: i0, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n", styles: [":host{box-sizing:border-box;padding:0;margin:0}:host.north{position:absolute;z-index:10;top:0;left:0;right:0}:host.north>.atx-handle{left:0;right:0;bottom:0;height:4px;cursor:ns-resize}:host.west{position:absolute;z-index:5;left:0;height:unset!important}:host.west>.atx-handle{right:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host.east{position:absolute;z-index:5;right:0;height:unset!important}:host.east>.atx-handle{left:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host.south{position:absolute;z-index:10;bottom:0;left:0;right:0}:host.south>.atx-handle{left:0;right:0;top:0;height:4px;cursor:ns-resize}:host.center{position:absolute}.atx-handle{position:absolute}.atx-handle:hover,.atx-handle.atx-handle-selected{background-color:var(--atx-handle-color, #469afa)}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }); }
133
133
  }
134
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: BorderLayoutContainer, decorators: [{
135
135
  type: Component,
136
- args: [{ selector: 'atx-border-layout-container', standalone: true, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n", styles: [":host{box-sizing:border-box;padding:0;margin:0}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
136
+ args: [{ selector: 'atx-border-layout-container', standalone: true, template: "<!--\n * LICENSE\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n-->\n\n<ng-content></ng-content>\n@if (resizable) {\n <div class=\"atx-handle\" [class.atx-handle-selected]=\"selected\" (mousedown)=\"resizetart()\"></div>\n}\n", styles: [":host{box-sizing:border-box;padding:0;margin:0}:host.north{position:absolute;z-index:10;top:0;left:0;right:0}:host.north>.atx-handle{left:0;right:0;bottom:0;height:4px;cursor:ns-resize}:host.west{position:absolute;z-index:5;left:0;height:unset!important}:host.west>.atx-handle{right:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host.east{position:absolute;z-index:5;right:0;height:unset!important}:host.east>.atx-handle{left:0;bottom:0;top:0;width:4px;cursor:ew-resize}:host.south{position:absolute;z-index:10;bottom:0;left:0;right:0}:host.south>.atx-handle{left:0;right:0;top:0;height:4px;cursor:ns-resize}:host.center{position:absolute}.atx-handle{position:absolute}.atx-handle:hover,.atx-handle.atx-handle-selected{background-color:var(--atx-handle-color, #469afa)}\n/**\n * @license\n * Copyright Pascal ECHEMANN. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be found in\n * the LICENSE file at https://pascalechemann.com/angular-toolbox/resources/license\n */\n"] }]
137
137
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { class: [{
138
138
  type: HostBinding,
139
139
  args: ['class']
@@ -15,8 +15,8 @@ import * as i0 from "@angular/core";
15
15
  const ATX_VERSION_CONFIG = {
16
16
  major: 1,
17
17
  minor: 4,
18
- patch: 1,
19
- buildTimestamp: 1727868693957
18
+ patch: 2,
19
+ buildTimestamp: 1728546812271
20
20
  };
21
21
  /**
22
22
  * The public service that exposes the current version of the Angular Toolbox library.
@@ -34,4 +34,4 @@ export class AngularToolboxVersionService extends AbstractVersionManager {
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AngularToolboxVersionService, decorators: [{
35
35
  type: Injectable
36
36
  }], ctorParameters: () => [] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10b29sYm94LXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL21vZGVsL3NlcnZpY2UvdmVyc2lvbi9hbmd1bGFyLXRvb2xib3gtdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd2RDs7O0dBR0c7QUFDSCxNQUFNLGtCQUFrQixHQUFrQjtJQUN4QyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLENBQUM7SUFDUixjQUFjLEVBQUUsYUFBYTtDQUM5QixDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsc0JBQXNCO0lBRXRFOztPQUVHO0lBQ0g7UUFDRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQVBVLDRCQUE0QjtrSEFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XHJcbmltcG9ydCB7IFZlcnNpb25Db25maWcgfSBmcm9tICcuLi8uLi9idXNpbmVzcyc7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgQW5ndWxhciBUb29sYm94IGxpYnJhcnkuXHJcbiAqL1xyXG5jb25zdCBBVFhfVkVSU0lPTl9DT05GSUc6IFZlcnNpb25Db25maWcgPSB7XHJcbiAgbWFqb3I6IDEsXHJcbiAgbWlub3I6IDQsXHJcbiAgcGF0Y2g6IDEsXHJcbiAgYnVpbGRUaW1lc3RhbXA6IDE3Mjc4Njg2OTM5NTdcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgcHVibGljIHNlcnZpY2UgdGhhdCBleHBvc2VzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEFuZ3VsYXIgVG9vbGJveCBsaWJyYXJ5LlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5ndWxhclRvb2xib3hWZXJzaW9uU2VydmljZSBleHRlbmRzIEFic3RyYWN0VmVyc2lvbk1hbmFnZXIge1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoQVRYX1ZFUlNJT05fQ09ORklHKTtcclxuICB9XHJcbn1cclxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10b29sYm94LXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL21vZGVsL3NlcnZpY2UvdmVyc2lvbi9hbmd1bGFyLXRvb2xib3gtdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd2RDs7O0dBR0c7QUFDSCxNQUFNLGtCQUFrQixHQUFrQjtJQUN4QyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLENBQUM7SUFDUixjQUFjLEVBQUUsYUFBYTtDQUM5QixDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsc0JBQXNCO0lBRXRFOztPQUVHO0lBQ0g7UUFDRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQVBVLDRCQUE0QjtrSEFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XHJcbmltcG9ydCB7IFZlcnNpb25Db25maWcgfSBmcm9tICcuLi8uLi9idXNpbmVzcyc7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgQW5ndWxhciBUb29sYm94IGxpYnJhcnkuXHJcbiAqL1xyXG5jb25zdCBBVFhfVkVSU0lPTl9DT05GSUc6IFZlcnNpb25Db25maWcgPSB7XHJcbiAgbWFqb3I6IDEsXHJcbiAgbWlub3I6IDQsXHJcbiAgcGF0Y2g6IDIsXHJcbiAgYnVpbGRUaW1lc3RhbXA6IDE3Mjg1NDY4MTIyNzFcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgcHVibGljIHNlcnZpY2UgdGhhdCBleHBvc2VzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEFuZ3VsYXIgVG9vbGJveCBsaWJyYXJ5LlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQW5ndWxhclRvb2xib3hWZXJzaW9uU2VydmljZSBleHRlbmRzIEFic3RyYWN0VmVyc2lvbk1hbmFnZXIge1xyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoQVRYX1ZFUlNJT05fQ09ORklHKTtcclxuICB9XHJcbn1cclxuIl19