@plait/angular-board 0.73.0 → 0.75.0-next.0
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.
|
@@ -342,7 +342,7 @@ export class PlaitBoardComponent {
|
|
|
342
342
|
-sign *
|
|
343
343
|
// reduced amplification for small deltas (small movements on a trackpad)
|
|
344
344
|
Math.min(1, absDelta / 20);
|
|
345
|
-
BoardTransforms.updateZoom(this.board, newZoom,
|
|
345
|
+
BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));
|
|
346
346
|
}
|
|
347
347
|
});
|
|
348
348
|
}
|
|
@@ -366,8 +366,8 @@ export class PlaitBoardComponent {
|
|
|
366
366
|
this.updateIslands();
|
|
367
367
|
});
|
|
368
368
|
}
|
|
369
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
370
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.
|
|
369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
370
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PlaitBoardComponent, isStandalone: true, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitOptions: "plaitOptions", plaitTheme: "plaitTheme" }, outputs: { onChange: "onChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.readonly": "this.readonly", "class.focused": "this.isFocused", "class.disabled-scroll": "this.disabledScrollOnNonFocus" } }, queries: [{ propertyName: "islands", predicate: PlaitIslandBaseComponent, descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
371
371
|
<div class="viewport-container" #viewportContainer>
|
|
372
372
|
<svg #svg width="100%" height="100%" style="position: relative;" class="board-host-svg">
|
|
373
373
|
<g class="element-lower-host"></g>
|
|
@@ -379,7 +379,7 @@ export class PlaitBoardComponent {
|
|
|
379
379
|
<ng-content></ng-content>
|
|
380
380
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
381
381
|
}
|
|
382
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
382
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitBoardComponent, decorators: [{
|
|
383
383
|
type: Component,
|
|
384
384
|
args: [{
|
|
385
385
|
selector: 'plait-board',
|
|
@@ -433,4 +433,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
433
433
|
type: ContentChildren,
|
|
434
434
|
args: [PlaitIslandBaseComponent, { descendants: true }]
|
|
435
435
|
}] } });
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1ib2FyZC9zcmMvYm9hcmQvYm9hcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxLQUFLLEVBS0wsTUFBTSxFQUdOLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQiw4QkFBOEIsRUFDOUIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2QsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixVQUFVLEVBQ1YsaUJBQWlCLEVBT2pCLDhCQUE4QixFQUM5QixTQUFTLEVBQ1QsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxjQUFjLEVBQ2QseUJBQXlCLEVBQ3pCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxVQUFVLEVBQ1YsVUFBVSxFQUNW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Qix3QkFBd0I7c0JBRDNCLFdBQVc7dUJBQUMsdUJBQXVCO2dCQVVwQyxHQUFHO3NCQURGLFNBQVM7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEMsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdBLE9BQU87c0JBQXhFLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHJvdWdoIGZyb20gJ3JvdWdoanMvYmluL3JvdWdoJztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ib2FyZC5jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgQk9BUkRfVE9fQUZURVJfQ0hBTkdFLFxuICAgIEJPQVJEX1RPX0NPTlRFWFQsXG4gICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULFxuICAgIEJPQVJEX1RPX0hPU1QsXG4gICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULFxuICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRCxcbiAgICBCT0FSRF9UT19PTl9DSEFOR0UsXG4gICAgQk9BUkRfVE9fUk9VR0hfU1ZHLFxuICAgIEJvYXJkVHJhbnNmb3JtcyxcbiAgICBGTFVTSElORyxcbiAgICBIT1NUX0NMQVNTX05BTUUsXG4gICAgSVNfQk9BUkRfQUxJVkUsXG4gICAgSVNfQ0hST01FLFxuICAgIElTX0ZJUkVGT1gsXG4gICAgSVNfU0FGQVJJLFxuICAgIEtFWV9UT19FTEVNRU5UX01BUCxcbiAgICBMaXN0UmVuZGVyLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRCb2FyZENvbnRleHQsXG4gICAgUGxhaXRCb2FyZE9wdGlvbnMsXG4gICAgUGxhaXRDaGlsZHJlbkNvbnRleHQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UGx1Z2luLFxuICAgIFBsYWl0VGhlbWUsXG4gICAgVmlld3BvcnQsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLFxuICAgIFpPT01fU1RFUCxcbiAgICBjcmVhdGVCb2FyZCxcbiAgICBkZWxldGVGcmFnbWVudCxcbiAgICBnZXRDbGlwYm9hcmREYXRhLFxuICAgIGhhc0lucHV0T3JUZXh0YXJlYVRhcmdldCxcbiAgICBpbml0aWFsaXplVmlld0JveCxcbiAgICBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIsXG4gICAgaW5pdGlhbGl6ZVZpZXdwb3J0T2Zmc2V0LFxuICAgIGlzRnJvbVZpZXdwb3J0Q2hhbmdlLFxuICAgIHNldEZyYWdtZW50LFxuICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcsXG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQsXG4gICAgd2l0aEJvYXJkLFxuICAgIHdpdGhIYW5kUG9pbnRlcixcbiAgICB3aXRoSGlzdG9yeSxcbiAgICB3aXRoSG90a2V5LFxuICAgIHdpdGhNb3ZpbmcsXG4gICAgd2l0aE9wdGlvbnMsXG4gICAgd2l0aFJlbGF0ZWRGcmFnbWVudCxcbiAgICB3aXRoU2VsZWN0aW9uLFxuICAgIHdpdGhWaWV3cG9ydFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdElzbGFuZEJhc2VDb21wb25lbnQsIGhhc09uQm9hcmRDaGFuZ2UgfSBmcm9tICcuLi9pc2xhbmQvaXNsYW5kLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJPQVJEX1RPX0NPTVBPTkVOVCB9IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyB3aXRoQW5ndWxhciB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1hbmd1bGFyJztcbmltcG9ydCB7IHdpdGhJbWFnZSwgd2l0aFRleHQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IE9uQ2hhbmdlRGF0YSB9IGZyb20gJy4uL3BsdWdpbnMvYW5ndWxhci1ib2FyZCc7XG5cbmNvbnN0IEVsZW1lbnRMb3dlckhvc3RDbGFzcyA9ICdlbGVtZW50LWxvd2VyLWhvc3QnO1xuY29uc3QgRWxlbWVudEhvc3RDbGFzcyA9ICdlbGVtZW50LWhvc3QnO1xuY29uc3QgRWxlbWVudFVwcGVySG9zdENsYXNzID0gJ2VsZW1lbnQtdXBwZXItaG9zdCc7XG5jb25zdCBFbGVtZW50QWN0aXZlSG9zdENsYXNzID0gJ2VsZW1lbnQtYWN0aXZlLWhvc3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWJvYXJkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwidmlld3BvcnQtY29udGFpbmVyXCIgI3ZpZXdwb3J0Q29udGFpbmVyPlxuICAgICAgICAgICAgPHN2ZyAjc3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIiBjbGFzcz1cImJvYXJkLWhvc3Qtc3ZnXCI+XG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJlbGVtZW50LWxvd2VyLWhvc3RcIj48L2c+XG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJlbGVtZW50LWhvc3RcIj48L2c+XG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJlbGVtZW50LXVwcGVyLWhvc3RcIj48L2c+XG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJlbGVtZW50LWFjdGl2ZS1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFBsYWl0Qm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBCb2FyZENvbXBvbmVudEludGVyZmFjZSwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIHJvdWdoU1ZHITogUm91Z2hTVkc7XG5cbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBASW5wdXQoKSBwbGFpdFZhbHVlOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRWaWV3cG9ydCE6IFZpZXdwb3J0O1xuXG4gICAgQElucHV0KCkgcGxhaXRQbHVnaW5zOiBQbGFpdFBsdWdpbltdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdE9wdGlvbnM/OiBQbGFpdEJvYXJkT3B0aW9ucztcblxuICAgIEBJbnB1dCgpIHBsYWl0VGhlbWU/OiBQbGFpdFRoZW1lO1xuXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8T25DaGFuZ2VEYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdEJvYXJkSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGdldCBob3N0KCk6IFNWR1NWR0VsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdmcubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgaG9zdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gYCR7SE9TVF9DTEFTU19OQU1FfSB0aGVtZS0ke3RoaXMuYm9hcmQudGhlbWUudGhlbWVDb2xvck1vZGV9ICR7dGhpcy5nZXRCcm93c2VyQ2xhc3NOYW1lKCl9IHBvaW50ZXItJHt0aGlzLmJvYXJkLnBvaW50ZXJ9YDtcbiAgICB9XG5cbiAgICBnZXRCcm93c2VyQ2xhc3NOYW1lKCkge1xuICAgICAgICBpZiAoSVNfU0FGQVJJKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3NhZmFyaSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0NIUk9NRSkge1xuICAgICAgICAgICAgcmV0dXJuICdjaHJvbWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19GSVJFRk9YKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2ZpcmVmb3gnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJlYWRvbmx5JylcbiAgICBnZXQgcmVhZG9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkLm9wdGlvbnMucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJylcbiAgICBnZXQgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gUGxhaXRCb2FyZC5pc0ZvY3VzKHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQtc2Nyb2xsJylcbiAgICBnZXQgZGlzYWJsZWRTY3JvbGxPbk5vbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5vcHRpb25zLmRpc2FibGVkU2Nyb2xsT25Ob25Gb2N1cyAmJiAhUGxhaXRCb2FyZC5pc0ZvY3VzKHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ3N2ZycsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgc3ZnITogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0Q29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICB2aWV3cG9ydENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBpc2xhbmRzPzogUXVlcnlMaXN0PFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudD47XG5cbiAgICBsaXN0UmVuZGVyITogTGlzdFJlbmRlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudExvd2VySG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50TG93ZXJIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRIb3N0ID0gdGhpcy5ob3N0LnF1ZXJ5U2VsZWN0b3IoYC4ke0VsZW1lbnRIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRVcHBlckhvc3QgPSB0aGlzLmhvc3QucXVlcnlTZWxlY3RvcihgLiR7RWxlbWVudFVwcGVySG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50QWN0aXZlSG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50QWN0aXZlSG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwge1xuICAgICAgICAgICAgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91Z2hTVkcgPSByb3VnaFNWRztcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVIb29rTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmlld3BvcnRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy53aGVlbFpvb21MaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQ09NUE9ORU5ULnNldCh0aGlzLmJvYXJkLCB0aGlzKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmJvYXJkLCByb3VnaFNWRyk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1Quc2V0KHRoaXMuYm9hcmQsIHRoaXMuaG9zdCk7XG4gICAgICAgIElTX0JPQVJEX0FMSVZFLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULnNldCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICBsb3dlckhvc3Q6IGVsZW1lbnRMb3dlckhvc3QsXG4gICAgICAgICAgICBob3N0OiBlbGVtZW50SG9zdCxcbiAgICAgICAgICAgIHVwcGVySG9zdDogZWxlbWVudFVwcGVySG9zdCxcbiAgICAgICAgICAgIGFjdGl2ZUhvc3Q6IGVsZW1lbnRBY3RpdmVIb3N0LFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIHZpZXdwb3J0Q29udGFpbmVyOiB0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQUZURVJfQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9uQ2hhbmdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYm9hcmQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5ib2FyZC5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiB0aGlzLmJvYXJkLnRoZW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlzbGFuZHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGxhaXRCb2FyZENvbnRleHQoKTtcbiAgICAgICAgQk9BUkRfVE9fQ09OVEVYVC5zZXQodGhpcy5ib2FyZCwgY29udGV4dCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5oYXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVJc2xhbmRzKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5oYXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydwbGFpdFZhbHVlJ107XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gY2hhbmdlc1sncGxhaXRPcHRpb25zJ107XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVzZWxlc3MgdXBkYXRpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib2FyZC5jaGlsZHJlbiAhPT0gdmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlICYmICFGTFVTSElORy5nZXQodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5jaGlsZHJlbiA9IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm9wdGlvbnMgPSBvcHRpb25zLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIodGhpcy5ib2FyZCk7XG4gICAgICAgIGluaXRpYWxpemVWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUGx1Z2lucygpIHtcbiAgICAgICAgbGV0IGJvYXJkID0gd2l0aFJlbGF0ZWRGcmFnbWVudChcbiAgICAgICAgICAgIHdpdGhIb3RrZXkoXG4gICAgICAgICAgICAgICAgd2l0aEhhbmRQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGlzdG9yeShcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE1vdmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEJvYXJkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFZpZXdwb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhPcHRpb25zKHdpdGhBbmd1bGFyKHdpdGhJbWFnZSh3aXRoVGV4dChjcmVhdGVCb2FyZCh0aGlzLnBsYWl0VmFsdWUsIHRoaXMucGxhaXRPcHRpb25zKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICAgICAgYm9hcmQgPSBwbHVnaW4oYm9hcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ib2FyZCA9IGJvYXJkO1xuXG4gICAgICAgIGlmICh0aGlzLnBsYWl0Vmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudmlld3BvcnQgPSB0aGlzLnBsYWl0Vmlld3BvcnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wbGFpdFRoZW1lKSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLnRoZW1lID0gdGhpcy5wbGFpdFRoZW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgS0VZX1RPX0VMRU1FTlRfTUFQLnNldChib2FyZCwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVIb29rTGlzdGVuZXIoKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmhvc3QsICdwb2ludGVyZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5wb2ludGVyRG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELnNldCh0aGlzLmJvYXJkLCBbZXZlbnQueCwgZXZlbnQueV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vtb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KHRoaXMuaG9zdCwgJ3BvaW50ZXJtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5wb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2VsZWF2ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZWxlYXZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KHRoaXMuaG9zdCwgJ3BvaW50ZXJsZWF2ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJMZWF2ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxNb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4oZG9jdW1lbnQsICdwb2ludGVybW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULnNldCh0aGlzLmJvYXJkLCBbZXZlbnQueCwgZXZlbnQueV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcnVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJVcChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxNb3VzZXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KGRvY3VtZW50LCAncG9pbnRlcnVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnZGJsY2xpY2snKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9jdXNlZCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZGJsQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgdGFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxLZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpICYmICFoYXNJbnB1dE9yVGV4dGFyZWFUYXJnZXQoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5rZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXlVcChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY29weScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmNvcHksIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ3Bhc3RlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaXNSZWFkb25seSh0aGlzLmJvYXJkKSAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChjbGlwYm9hcmRFdmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZVBvaW50ID0gUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdXNlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0b1ZpZXdCb3hQb2ludCh0aGlzLmJvYXJkLCB0b0hvc3RQb2ludCh0aGlzLmJvYXJkLCBtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBhd2FpdCBnZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZEV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUucGFzdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9jdXNlZCAmJiAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KHRoaXMuYm9hcmQpICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmN1dCwgZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlRnJhZ21lbnQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVMaXN0UmVuZGVyKCkge1xuICAgICAgICB0aGlzLmxpc3RSZW5kZXIgPSBuZXcgTGlzdFJlbmRlcih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLmluaXRpYWxpemUodGhpcy5ib2FyZC5jaGlsZHJlbiwgdGhpcy5pbml0aWFsaXplQ2hpbGRyZW5Db250ZXh0KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdFJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLnVwZGF0ZSh0aGlzLmJvYXJkLmNoaWxkcmVuLCB0aGlzLmluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKSk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250ZXh0KHRoaXMuYm9hcmQpLm5leHRTdGFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKTogUGxhaXRDaGlsZHJlbkNvbnRleHQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm9hcmQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnRHOiBQbGFpdEJvYXJkLmdldEVsZW1lbnRIb3N0KHRoaXMuYm9hcmQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3cG9ydFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy52aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICB1cGRhdGVWaWV3cG9ydEJ5U2Nyb2xsaW5nKHRoaXMuYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldCh0aGlzLmJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUlzbGFuZHMoKSB7XG4gICAgICAgIHRoaXMuaXNsYW5kcz8uZm9yRWFjaChpc2xhbmQgPT4ge1xuICAgICAgICAgICAgaXNsYW5kLmluaXRpYWxpemUodGhpcy5ib2FyZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSXNsYW5kcygpIHtcbiAgICAgICAgdGhpcy5pc2xhbmRzPy5mb3JFYWNoKGlzbGFuZCA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzT25Cb2FyZENoYW5nZShpc2xhbmQpKSB7XG4gICAgICAgICAgICAgICAgaXNsYW5kLm9uQm9hcmRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzbGFuZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aGVlbFpvb21MaXN0ZW5lcigpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuaG9zdCwgJ3doZWVsJywgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDcmVkaXRzIHRvIGV4Y2FsaWRyYXdcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L2Jsb2IvYjdkN2NjYzkyOTY5NmNjMTdiNGNjMzQ0NTJlNGFmZDg0NmQ1OWY0Zi9zcmMvY29tcG9uZW50cy9BcHAudHN4I0w5MDYwXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRlbHRhWCwgZGVsdGFZIH0gPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbiA9IE1hdGguc2lnbihkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBNQVhfU1RFUCA9IFpPT01fU1RFUCAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzRGVsdGEgPSBNYXRoLmFicyhkZWx0YVkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGVsdGEgPSBkZWx0YVk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhYnNEZWx0YSA+IE1BWF9TVEVQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IE1BWF9TVEVQICogc2lnbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3Wm9vbSA9IHpvb20gLSBkZWx0YSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2Ugem9vbSBzdGVwcyB0aGUgbW9yZSB6b29tZWQtaW4gd2UgYXJlIChhcHBsaWVzIHRvID4xMDAlIG9ubHkpXG4gICAgICAgICAgICAgICAgICAgIG5ld1pvb20gKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubG9nMTAoTWF0aC5tYXgoMSwgem9vbSkpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIC1zaWduICpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZHVjZWQgYW1wbGlmaWNhdGlvbiBmb3Igc21hbGwgZGVsdGFzIChzbWFsbCBtb3ZlbWVudHMgb24gYSB0cmFja3BhZClcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKDEsIGFic0RlbHRhIC8gMjApO1xuICAgICAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlWm9vbSh0aGlzLmJvYXJkLCBuZXdab29tLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuaWQ7XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyICYmIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fQ09NUE9ORU5ULmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fSE9TVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIElTX0JPQVJEX0FMSVZFLnNldCh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0FGVEVSX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge30pO1xuICAgICAgICBLRVlfVE9fRUxFTUVOVF9NQVAuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIG1hcmtGb3JDaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlzbGFuZHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1ib2FyZC9zcmMvYm9hcmQvYm9hcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxLQUFLLEVBS0wsTUFBTSxFQUdOLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLHFCQUFxQixFQUNyQiw4QkFBOEIsRUFDOUIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2QsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixVQUFVLEVBQ1YsaUJBQWlCLEVBT2pCLDhCQUE4QixFQUM5QixTQUFTLEVBQ1QsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxjQUFjLEVBQ2QseUJBQXlCLEVBQ3pCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxVQUFVLEVBQ1YsVUFBVSxFQUNW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QU16QixTQUFTO3NCQURaLFdBQVc7dUJBQUMsZUFBZTtnQkFNeEIsd0JBQXdCO3NCQUQzQixXQUFXO3VCQUFDLHVCQUF1QjtnQkFVcEMsR0FBRztzQkFERixTQUFTO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWxDLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHQSxPQUFPO3NCQUF4RSxlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCByb3VnaCBmcm9tICdyb3VnaGpzL2Jpbi9yb3VnaCc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCb2FyZENvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4vYm9hcmQuY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICAgIEJPQVJEX1RPX0FGVEVSX0NIQU5HRSxcbiAgICBCT0FSRF9UT19DT05URVhULFxuICAgIEJPQVJEX1RPX0VMRU1FTlRfSE9TVCxcbiAgICBCT0FSRF9UT19IT1NULFxuICAgIEJPQVJEX1RPX01PVklOR19QT0lOVCxcbiAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQsXG4gICAgQk9BUkRfVE9fT05fQ0hBTkdFLFxuICAgIEJPQVJEX1RPX1JPVUdIX1NWRyxcbiAgICBCb2FyZFRyYW5zZm9ybXMsXG4gICAgRkxVU0hJTkcsXG4gICAgSE9TVF9DTEFTU19OQU1FLFxuICAgIElTX0JPQVJEX0FMSVZFLFxuICAgIElTX0NIUk9NRSxcbiAgICBJU19GSVJFRk9YLFxuICAgIElTX1NBRkFSSSxcbiAgICBLRVlfVE9fRUxFTUVOVF9NQVAsXG4gICAgTGlzdFJlbmRlcixcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0Qm9hcmRDb250ZXh0LFxuICAgIFBsYWl0Qm9hcmRPcHRpb25zLFxuICAgIFBsYWl0Q2hpbGRyZW5Db250ZXh0LFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBsdWdpbixcbiAgICBQbGFpdFRoZW1lLFxuICAgIFZpZXdwb3J0LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSxcbiAgICBaT09NX1NURVAsXG4gICAgY3JlYXRlQm9hcmQsXG4gICAgZGVsZXRlRnJhZ21lbnQsXG4gICAgZ2V0Q2xpcGJvYXJkRGF0YSxcbiAgICBoYXNJbnB1dE9yVGV4dGFyZWFUYXJnZXQsXG4gICAgaW5pdGlhbGl6ZVZpZXdCb3gsXG4gICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyLFxuICAgIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldCxcbiAgICBpc0Zyb21WaWV3cG9ydENoYW5nZSxcbiAgICBzZXRGcmFnbWVudCxcbiAgICBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZSxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICB1cGRhdGVWaWV3cG9ydEJ5U2Nyb2xsaW5nLFxuICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0LFxuICAgIHdpdGhCb2FyZCxcbiAgICB3aXRoSGFuZFBvaW50ZXIsXG4gICAgd2l0aEhpc3RvcnksXG4gICAgd2l0aEhvdGtleSxcbiAgICB3aXRoTW92aW5nLFxuICAgIHdpdGhPcHRpb25zLFxuICAgIHdpdGhSZWxhdGVkRnJhZ21lbnQsXG4gICAgd2l0aFNlbGVjdGlvbixcbiAgICB3aXRoVmlld3BvcnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRJc2xhbmRCYXNlQ29tcG9uZW50LCBoYXNPbkJvYXJkQ2hhbmdlIH0gZnJvbSAnLi4vaXNsYW5kL2lzbGFuZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCT0FSRF9UT19DT01QT05FTlQgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgd2l0aEFuZ3VsYXIgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtYW5ndWxhcic7XG5pbXBvcnQgeyB3aXRoSW1hZ2UsIHdpdGhUZXh0IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPbkNoYW5nZURhdGEgfSBmcm9tICcuLi9wbHVnaW5zL2FuZ3VsYXItYm9hcmQnO1xuXG5jb25zdCBFbGVtZW50TG93ZXJIb3N0Q2xhc3MgPSAnZWxlbWVudC1sb3dlci1ob3N0JztcbmNvbnN0IEVsZW1lbnRIb3N0Q2xhc3MgPSAnZWxlbWVudC1ob3N0JztcbmNvbnN0IEVsZW1lbnRVcHBlckhvc3RDbGFzcyA9ICdlbGVtZW50LXVwcGVyLWhvc3QnO1xuY29uc3QgRWxlbWVudEFjdGl2ZUhvc3RDbGFzcyA9ICdlbGVtZW50LWFjdGl2ZS1ob3N0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdwb3J0LWNvbnRhaW5lclwiICN2aWV3cG9ydENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgY2xhc3M9XCJib2FyZC1ob3N0LXN2Z1wiPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1sb3dlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC11cHBlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1hY3RpdmUtaG9zdFwiPjwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQbGFpdEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIGhhc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBib2FyZCE6IFBsYWl0Qm9hcmQ7XG5cbiAgICByb3VnaFNWRyE6IFJvdWdoU1ZHO1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gICAgQElucHV0KCkgcGxhaXRWYWx1ZTogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0Vmlld3BvcnQhOiBWaWV3cG9ydDtcblxuICAgIEBJbnB1dCgpIHBsYWl0UGx1Z2luczogUGxhaXRQbHVnaW5bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRPcHRpb25zPzogUGxhaXRCb2FyZE9wdGlvbnM7XG5cbiAgICBASW5wdXQoKSBwbGFpdFRoZW1lPzogUGxhaXRUaGVtZTtcblxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGAke0hPU1RfQ0xBU1NfTkFNRX0gdGhlbWUtJHt0aGlzLmJvYXJkLnRoZW1lLnRoZW1lQ29sb3JNb2RlfSAke3RoaXMuZ2V0QnJvd3NlckNsYXNzTmFtZSgpfSBwb2ludGVyLSR7dGhpcy5ib2FyZC5wb2ludGVyfWA7XG4gICAgfVxuXG4gICAgZ2V0QnJvd3NlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1NBRkFSSSkge1xuICAgICAgICAgICAgcmV0dXJuICdzYWZhcmknO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19DSFJPTUUpIHtcbiAgICAgICAgICAgIHJldHVybiAnY2hyb21lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfRklSRUZPWCkge1xuICAgICAgICAgICAgcmV0dXJuICdmaXJlZm94JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZWFkb25seScpXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZm9jdXNlZCcpXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkLXNjcm9sbCcpXG4gICAgZ2V0IGRpc2FibGVkU2Nyb2xsT25Ob25Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQub3B0aW9ucy5kaXNhYmxlZFNjcm9sbE9uTm9uRm9jdXMgJiYgIVBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdzdmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHN2ZyE6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCd2aWV3cG9ydENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgdmlld3BvcnRDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQbGFpdElzbGFuZEJhc2VDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgaXNsYW5kcz86IFF1ZXJ5TGlzdDxQbGFpdElzbGFuZEJhc2VDb21wb25lbnQ+O1xuXG4gICAgbGlzdFJlbmRlciE6IExpc3RSZW5kZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRMb3dlckhvc3QgPSB0aGlzLmhvc3QucXVlcnlTZWxlY3RvcihgLiR7RWxlbWVudExvd2VySG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50SG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50SG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50VXBwZXJIb3N0ID0gdGhpcy5ob3N0LnF1ZXJ5U2VsZWN0b3IoYC4ke0VsZW1lbnRVcHBlckhvc3RDbGFzc31gKSBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgY29uc3QgZWxlbWVudEFjdGl2ZUhvc3QgPSB0aGlzLmhvc3QucXVlcnlTZWxlY3RvcihgLiR7RWxlbWVudEFjdGl2ZUhvc3RDbGFzc31gKSBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm91Z2hTVkcgPSByb3VnaC5zdmcodGhpcy5ob3N0IGFzIFNWR1NWR0VsZW1lbnQsIHtcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgcm91Z2huZXNzOiAwLCBzdHJva2VXaWR0aDogMSB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvdWdoU1ZHID0gcm91Z2hTVkc7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBsdWdpbnMoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplSG9va0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXdwb3J0U2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMud2hlZWxab29tTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIEJPQVJEX1RPX0NPTVBPTkVOVC5zZXQodGhpcy5ib2FyZCwgdGhpcyk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5zZXQodGhpcy5ib2FyZCwgcm91Z2hTVkcpO1xuICAgICAgICBCT0FSRF9UT19IT1NULnNldCh0aGlzLmJvYXJkLCB0aGlzLmhvc3QpO1xuICAgICAgICBJU19CT0FSRF9BTElWRS5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5zZXQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgbG93ZXJIb3N0OiBlbGVtZW50TG93ZXJIb3N0LFxuICAgICAgICAgICAgaG9zdDogZWxlbWVudEhvc3QsXG4gICAgICAgICAgICB1cHBlckhvc3Q6IGVsZW1lbnRVcHBlckhvc3QsXG4gICAgICAgICAgICBhY3RpdmVIb3N0OiBlbGVtZW50QWN0aXZlSG9zdCxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICB2aWV3cG9ydENvbnRhaW5lcjogdGhpcy52aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIEJPQVJEX1RPX0FGVEVSX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBPbkNoYW5nZURhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmJvYXJkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB0aGlzLmJvYXJkLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuYm9hcmQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogdGhpcy5ib2FyZC50aGVtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJc2xhbmRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IFBsYWl0Qm9hcmRDb250ZXh0KCk7XG4gICAgICAgIEJPQVJEX1RPX0NPTlRFWFQuc2V0KHRoaXMuYm9hcmQsIGNvbnRleHQpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVMaXN0UmVuZGVyKCk7XG4gICAgICAgIHRoaXMuaGFzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplSXNsYW5kcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlID0gY2hhbmdlc1sncGxhaXRWYWx1ZSddO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNoYW5nZXNbJ3BsYWl0T3B0aW9ucyddO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBhdm9pZCB1c2VsZXNzIHVwZGF0aW5nXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYm9hcmQuY2hpbGRyZW4gIT09IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZSAmJiAhRkxVU0hJTkcuZ2V0KHRoaXMuYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuY2hpbGRyZW4gPSB2YWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGlzdFJlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5vcHRpb25zID0gb3B0aW9ucy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLmJvYXJkKTtcbiAgICAgICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld0JveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgaW5pdGlhbGl6ZVZpZXdwb3J0T2Zmc2V0KHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVBsdWdpbnMoKSB7XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhSZWxhdGVkRnJhZ21lbnQoXG4gICAgICAgICAgICB3aXRoSG90a2V5KFxuICAgICAgICAgICAgICAgIHdpdGhIYW5kUG9pbnRlcihcbiAgICAgICAgICAgICAgICAgICAgd2l0aEhpc3RvcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoU2VsZWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhNb3ZpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhCb2FyZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhWaWV3cG9ydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoT3B0aW9ucyh3aXRoQW5ndWxhcih3aXRoSW1hZ2Uod2l0aFRleHQoY3JlYXRlQm9hcmQodGhpcy5wbGFpdFZhbHVlLCB0aGlzLnBsYWl0T3B0aW9ucykpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGxhaXRQbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgICAgIGJvYXJkID0gcGx1Z2luKGJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcblxuICAgICAgICBpZiAodGhpcy5wbGFpdFZpZXdwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLnZpZXdwb3J0ID0gdGhpcy5wbGFpdFZpZXdwb3J0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGxhaXRUaGVtZSkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC50aGVtZSA9IHRoaXMucGxhaXRUaGVtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEtFWV9UT19FTEVNRU5UX01BUC5zZXQoYm9hcmQsIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplSG9va0xpc3RlbmVyKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcmRvd24nKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlckRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlbW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmhvc3QsICdwb2ludGVybW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELnNldCh0aGlzLmJvYXJkLCBbZXZlbnQueCwgZXZlbnQueV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2VsZWF2ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmhvc3QsICdwb2ludGVybGVhdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5wb2ludGVyTGVhdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULnNldCh0aGlzLmJvYXJkLCBbZXZlbnQueCwgZXZlbnQueV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsTW91c2Vtb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KGRvY3VtZW50LCAncG9pbnRlcm1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KHRoaXMuaG9zdCwgJ3BvaW50ZXJ1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5wb2ludGVyVXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsTW91c2V1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pihkb2N1bWVudCwgJ3BvaW50ZXJ1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ2RibGNsaWNrJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmRibENsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIHRhcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSAmJiAhaGFzSW5wdXRPclRleHRhcmVhVGFyZ2V0KGV2ZW50LnRhcmdldCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQua2V5RG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5VXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2NvcHknKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9jdXNlZCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNldEZyYWdtZW50KHRoaXMuYm9hcmQsIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZS5jb3B5LCBldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdwYXN0ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoY2xpcGJvYXJkRXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VQb2ludCA9IFBsYWl0Qm9hcmQuZ2V0TW92aW5nUG9pbnRJbkJvYXJkKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIGlmIChtb3VzZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdG9WaWV3Qm94UG9pbnQodGhpcy5ib2FyZCwgdG9Ib3N0UG9pbnQodGhpcy5ib2FyZCwgbW91c2VQb2ludFswXSwgbW91c2VQb2ludFsxXSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gYXdhaXQgZ2V0Q2xpcGJvYXJkRGF0YShjbGlwYm9hcmRFdmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5pbnNlcnRGcmFnbWVudChjbGlwYm9hcmREYXRhLCB0YXJnZXRQb2ludCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLnBhc3RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY3V0JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaXNSZWFkb25seSh0aGlzLmJvYXJkKSAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNldEZyYWdtZW50KHRoaXMuYm9hcmQsIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZS5jdXQsIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZUZyYWdtZW50KHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdFJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyID0gbmV3IExpc3RSZW5kZXIodGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMubGlzdFJlbmRlci5pbml0aWFsaXplKHRoaXMuYm9hcmQuY2hpbGRyZW4sIHRoaXMuaW5pdGlhbGl6ZUNoaWxkcmVuQ29udGV4dCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxpc3RSZW5kZXIoKSB7XG4gICAgICAgIHRoaXMubGlzdFJlbmRlci51cGRhdGUodGhpcy5ib2FyZC5jaGlsZHJlbiwgdGhpcy5pbml0aWFsaXplQ2hpbGRyZW5Db250ZXh0KCkpO1xuICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGV4dCh0aGlzLmJvYXJkKS5uZXh0U3RhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2hpbGRyZW5Db250ZXh0KCk6IFBsYWl0Q2hpbGRyZW5Db250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvYXJkOiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgcGFyZW50RzogUGxhaXRCb2FyZC5nZXRFbGVtZW50SG9zdCh0aGlzLmJvYXJkKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdmlld3BvcnRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnJvbVZpZXdwb3J0Q2hhbmdlKHRoaXMuYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZSh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRCeVNjcm9sbGluZyh0aGlzLmJvYXJkLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0b3VjaHN0YXJ0JywgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZWxlbWVudFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIGluaXRpYWxpemVWaWV3cG9ydENvbnRhaW5lcih0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgIGluaXRpYWxpemVWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVJc2xhbmRzKCkge1xuICAgICAgICB0aGlzLmlzbGFuZHM/LmZvckVhY2goaXNsYW5kID0+IHtcbiAgICAgICAgICAgIGlzbGFuZC5pbml0aWFsaXplKHRoaXMuYm9hcmQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUlzbGFuZHMoKSB7XG4gICAgICAgIHRoaXMuaXNsYW5kcz8uZm9yRWFjaChpc2xhbmQgPT4ge1xuICAgICAgICAgICAgaWYgKGhhc09uQm9hcmRDaGFuZ2UoaXNsYW5kKSkge1xuICAgICAgICAgICAgICAgIGlzbGFuZC5vbkJvYXJkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc2xhbmQubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2hlZWxab29tTGlzdGVuZXIoKSB7XG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvc3QsICd3aGVlbCcsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlZGl0cyB0byBleGNhbGlkcmF3XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9ibG9iL2I3ZDdjY2M5Mjk2OTZjYzE3YjRjYzM0NDUyZTRhZmQ4NDZkNTlmNGYvc3JjL2NvbXBvbmVudHMvQXBwLnRzeCNMOTA2MFxuICAgICAgICAgICAgICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSB9ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBNYXRoLnNpZ24oZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTUFYX1NURVAgPSBaT09NX1NURVAgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic0RlbHRhID0gTWF0aC5hYnMoZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbHRhID0gZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzRGVsdGEgPiBNQVhfU1RFUCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBNQVhfU1RFUCAqIHNpZ247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1pvb20gPSB6b29tIC0gZGVsdGEgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHpvb20gc3RlcHMgdGhlIG1vcmUgem9vbWVkLWluIHdlIGFyZSAoYXBwbGllcyB0byA+MTAwJSBvbmx5KVxuICAgICAgICAgICAgICAgICAgICBuZXdab29tICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZzEwKE1hdGgubWF4KDEsIHpvb20pKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAtc2lnbiAqXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWR1Y2VkIGFtcGxpZmljYXRpb24gZm9yIHNtYWxsIGRlbHRhcyAoc21hbGwgbW92ZW1lbnRzIG9uIGEgdHJhY2twYWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbigxLCBhYnNEZWx0YSAvIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVpvb20odGhpcy5ib2FyZCwgbmV3Wm9vbSwgUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmlkO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0NPTVBPTkVOVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBJU19CT0FSRF9BTElWRS5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0UuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19BRlRFUl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHt9KTtcbiAgICAgICAgS0VZX1RPX0VMRU1FTlRfTUFQLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc2xhbmRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -12,10 +12,10 @@ export class PlaitIslandBaseComponent {
|
|
|
12
12
|
markForCheck() {
|
|
13
13
|
this.cdr.markForCheck();
|
|
14
14
|
}
|
|
15
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
16
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
16
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PlaitIslandBaseComponent, host: { classAttribute: "plait-island-container" }, ngImport: i0 }); }
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandBaseComponent, decorators: [{
|
|
19
19
|
type: Directive,
|
|
20
20
|
args: [{
|
|
21
21
|
host: {
|
|
@@ -48,10 +48,10 @@ export class PlaitIslandPopoverBaseComponent {
|
|
|
48
48
|
this.subscription?.unsubscribe();
|
|
49
49
|
this.islandOnDestroy();
|
|
50
50
|
}
|
|
51
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
52
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandPopoverBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
52
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PlaitIslandPopoverBaseComponent, inputs: { board: "board" }, host: { classAttribute: "plait-island-popover-container" }, ngImport: i0 }); }
|
|
53
53
|
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandPopoverBaseComponent, decorators: [{
|
|
55
55
|
type: Directive,
|
|
56
56
|
args: [{
|
|
57
57
|
host: {
|
|
@@ -69,4 +69,4 @@ export const hasOnBoardChange = (value) => {
|
|
|
69
69
|
return false;
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNsYW5kLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1ib2FyZC9zcmMvaXNsYW5kL2lzbGFuZC1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVF4RCxNQUFNLE9BQWdCLHdCQUF3QjtJQUcxQyxZQUFzQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFaEQsVUFBVSxDQUFDLEtBQWlCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0FaaUIsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBTDdDLFNBQVM7bUJBQUM7b0JBQ1AsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSx3QkFBd0I7cUJBQ2xDO2lCQUNKOztBQXFCRCxNQUFNLE9BQWdCLCtCQUErQjtJQUtqRCxZQUFtQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFN0MsVUFBVSxDQUFDLEtBQWlCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQTRCLENBQUM7UUFDaEYsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBN0JpQiwrQkFBK0I7bUdBQS9CLCtCQUErQjs7NEZBQS9CLCtCQUErQjtrQkFMcEQsU0FBUzttQkFBQztvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLGdDQUFnQztxQkFDMUM7aUJBQ0o7c0ZBRVksS0FBSztzQkFBYixLQUFLOztBQTZDVixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQVUsRUFBMEIsRUFBRTtJQUNuRSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJPQVJEX1RPX0NPTVBPTkVOVCB9IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBCb2FyZENvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4uL2JvYXJkL2JvYXJkLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncGxhaXQtaXNsYW5kLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCB7XG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBpbml0aWFsaXplKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3BsYWl0LWlzbGFuZC1wb3BvdmVyLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsYWl0SXNsYW5kUG9wb3ZlckJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIGluaXRpYWxpemUoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgdGhpcy5ib2FyZCA9IGJvYXJkO1xuICAgICAgICBjb25zdCBib2FyZENvbXBvbmVudCA9IEJPQVJEX1RPX0NPTVBPTkVOVC5nZXQoYm9hcmQpIGFzIEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGJvYXJkQ29tcG9uZW50Lm9uQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzT25Cb2FyZENoYW5nZSh0aGlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Cb2FyZENoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYm9hcmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBmaW5kIGJvYXJkIGluc3RhbmNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0aWFsaXplKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmlzbGFuZE9uSW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc2xhbmRPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2UgaXNsYW5kT25Jbml0IHJlcGxhY2UgbmdPbkluaXQgdG8gYXZvaWQgbmdPbkluaXQgYmVpbmcgb3ZlcnJpZGRlblxuICAgICAqL1xuICAgIGFic3RyYWN0IGlzbGFuZE9uSW5pdCgpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogdXNlIGlzbGFuZE9uRGVzdHJveSByZXBsYWNlIG5nT25EZXN0cm95IHRvIGF2b2lkIG5nT25EZXN0cm95IGJlaW5nIG92ZXJyaWRkZW5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBpc2xhbmRPbkRlc3Ryb3koKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbkJvYXJkQ2hhbmdlIHtcbiAgICBvbkJvYXJkQ2hhbmdlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgaGFzT25Cb2FyZENoYW5nZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgT25Cb2FyZENoYW5nZSA9PiB7XG4gICAgaWYgKHZhbHVlLm9uQm9hcmRDaGFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG4iXX0=
|
|
@@ -21,10 +21,10 @@ class PlaitIslandBaseComponent {
|
|
|
21
21
|
markForCheck() {
|
|
22
22
|
this.cdr.markForCheck();
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
25
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PlaitIslandBaseComponent, host: { classAttribute: "plait-island-container" }, ngImport: i0 }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandBaseComponent, decorators: [{
|
|
28
28
|
type: Directive,
|
|
29
29
|
args: [{
|
|
30
30
|
host: {
|
|
@@ -57,10 +57,10 @@ class PlaitIslandPopoverBaseComponent {
|
|
|
57
57
|
this.subscription?.unsubscribe();
|
|
58
58
|
this.islandOnDestroy();
|
|
59
59
|
}
|
|
60
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
61
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.
|
|
60
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandPopoverBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
61
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: PlaitIslandPopoverBaseComponent, inputs: { board: "board" }, host: { classAttribute: "plait-island-popover-container" }, ngImport: i0 }); }
|
|
62
62
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitIslandPopoverBaseComponent, decorators: [{
|
|
64
64
|
type: Directive,
|
|
65
65
|
args: [{
|
|
66
66
|
host: {
|
|
@@ -460,7 +460,7 @@ class PlaitBoardComponent {
|
|
|
460
460
|
-sign *
|
|
461
461
|
// reduced amplification for small deltas (small movements on a trackpad)
|
|
462
462
|
Math.min(1, absDelta / 20);
|
|
463
|
-
BoardTransforms.updateZoom(this.board, newZoom,
|
|
463
|
+
BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));
|
|
464
464
|
}
|
|
465
465
|
});
|
|
466
466
|
}
|
|
@@ -484,8 +484,8 @@ class PlaitBoardComponent {
|
|
|
484
484
|
this.updateIslands();
|
|
485
485
|
});
|
|
486
486
|
}
|
|
487
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
488
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.
|
|
487
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
488
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PlaitBoardComponent, isStandalone: true, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitOptions: "plaitOptions", plaitTheme: "plaitTheme" }, outputs: { onChange: "onChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.readonly": "this.readonly", "class.focused": "this.isFocused", "class.disabled-scroll": "this.disabledScrollOnNonFocus" } }, queries: [{ propertyName: "islands", predicate: PlaitIslandBaseComponent, descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
489
489
|
<div class="viewport-container" #viewportContainer>
|
|
490
490
|
<svg #svg width="100%" height="100%" style="position: relative;" class="board-host-svg">
|
|
491
491
|
<g class="element-lower-host"></g>
|
|
@@ -497,7 +497,7 @@ class PlaitBoardComponent {
|
|
|
497
497
|
<ng-content></ng-content>
|
|
498
498
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
499
499
|
}
|
|
500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
500
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaitBoardComponent, decorators: [{
|
|
501
501
|
type: Component,
|
|
502
502
|
args: [{
|
|
503
503
|
selector: 'plait-board',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromViewportChange,\n setFragment,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection,\n withViewport\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementActiveHostClass = 'element-active-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-active-host\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementActiveHost = this.host.querySelector(`.${ElementActiveHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n activeHost: elementActiveHost,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.updateListRender();\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withViewport(\n withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions)))))\n )\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap(event => {\n this.board.globalKeyDown(event);\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n PlaitBoard.getBoardContext(this.board).nextStable();\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchstart', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n event.preventDefault();\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, false);\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromViewportChange,\n setFragment,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection,\n withViewport\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementActiveHostClass = 'element-active-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-active-host\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementActiveHost = this.host.querySelector(`.${ElementActiveHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n activeHost: elementActiveHost,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.updateListRender();\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withViewport(\n withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions)))))\n )\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap(event => {\n this.board.globalKeyDown(event);\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n PlaitBoard.getBoardContext(this.board).nextStable();\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchstart', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n event.preventDefault();\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|