ngx-tethys 18.0.2 → 18.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/anchor/anchor.component.d.ts +2 -3
- package/esm2022/anchor/anchor.component.mjs +5 -6
- package/esm2022/tree-select/tree-select.component.mjs +3 -3
- package/esm2022/version.mjs +2 -2
- package/fesm2022/ngx-tethys-anchor.mjs +4 -5
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +2 -2
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [18.0.3](https://github.com/atinc/ngx-tethys/compare/18.0.2...18.0.3) (2024-09-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **anchor:** warnings should not be displayed when the thy anchor link is not nested under horizontal layout #TINFR-480 ([#3185](https://github.com/atinc/ngx-tethys/issues/3185)) ([cef3de1](https://github.com/atinc/ngx-tethys/commit/cef3de19ba5fea70a96354ca62f586dc708b06d9)), closes [#TINFR-480](https://github.com/atinc/ngx-tethys/issues/TINFR-480) [#TINFR-480](https://github.com/atinc/ngx-tethys/issues/TINFR-480) [#TINFR-480](https://github.com/atinc/ngx-tethys/issues/TINFR-480)
|
|
11
|
+
* **treeSelect:** #TINFR-403 fix ngClass error ([#3194](https://github.com/atinc/ngx-tethys/issues/3194)) ([6688095](https://github.com/atinc/ngx-tethys/commit/6688095dc6eb59e5545509d8b21bdaf2ffd5fbe3))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
5
15
|
## [18.0.2](https://github.com/atinc/ngx-tethys/compare/18.0.0...18.0.2) (2024-08-28)
|
|
6
16
|
|
|
7
17
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Platform } from '@angular/cdk/platform';
|
|
2
|
-
import { AfterViewInit, ChangeDetectorRef,
|
|
2
|
+
import { AfterViewInit, ChangeDetectorRef, EventEmitter, NgZone, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';
|
|
3
3
|
import { ThyScrollService } from 'ngx-tethys/core';
|
|
4
4
|
import { ThyAnchorLink } from './anchor-link.component';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -14,7 +14,6 @@ export declare class ThyAnchor implements OnDestroy, AfterViewInit, OnChanges {
|
|
|
14
14
|
private zone;
|
|
15
15
|
private renderer;
|
|
16
16
|
private scrollService;
|
|
17
|
-
private elementRef;
|
|
18
17
|
private ink;
|
|
19
18
|
/**
|
|
20
19
|
* 固定模式
|
|
@@ -55,7 +54,7 @@ export declare class ThyAnchor implements OnDestroy, AfterViewInit, OnChanges {
|
|
|
55
54
|
private animating;
|
|
56
55
|
private destroy$;
|
|
57
56
|
private handleScrollTimeoutID;
|
|
58
|
-
constructor(document: any, cdr: ChangeDetectorRef, platform: Platform, zone: NgZone, renderer: Renderer2, scrollService: ThyScrollService
|
|
57
|
+
constructor(document: any, cdr: ChangeDetectorRef, platform: Platform, zone: NgZone, renderer: Renderer2, scrollService: ThyScrollService);
|
|
59
58
|
registerLink(link: ThyAnchorLink): void;
|
|
60
59
|
unregisterLink(link: ThyAnchorLink): void;
|
|
61
60
|
private getContainer;
|
|
@@ -15,14 +15,13 @@ const sharpMatcherRegx = /#([^#]+)$/;
|
|
|
15
15
|
* @name thy-anchor
|
|
16
16
|
*/
|
|
17
17
|
export class ThyAnchor {
|
|
18
|
-
constructor(document, cdr, platform, zone, renderer, scrollService
|
|
18
|
+
constructor(document, cdr, platform, zone, renderer, scrollService) {
|
|
19
19
|
this.document = document;
|
|
20
20
|
this.cdr = cdr;
|
|
21
21
|
this.platform = platform;
|
|
22
22
|
this.zone = zone;
|
|
23
23
|
this.renderer = renderer;
|
|
24
24
|
this.scrollService = scrollService;
|
|
25
|
-
this.elementRef = elementRef;
|
|
26
25
|
/**
|
|
27
26
|
* 固定模式
|
|
28
27
|
*/
|
|
@@ -75,7 +74,7 @@ export class ThyAnchor {
|
|
|
75
74
|
}
|
|
76
75
|
warningPrompt() {
|
|
77
76
|
if (this.thyDirection === 'horizontal') {
|
|
78
|
-
const hasChildren = this.links.some(link => Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item) => item?.
|
|
77
|
+
const hasChildren = this.links.some(link => Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item) => item?.nodeName === 'THY-ANCHOR-LINK'));
|
|
79
78
|
if (hasChildren) {
|
|
80
79
|
console.warn("Anchor link nesting is not supported when 'Anchor' direction is horizontal.");
|
|
81
80
|
}
|
|
@@ -188,7 +187,7 @@ export class ThyAnchor {
|
|
|
188
187
|
this.registerScrollEvent();
|
|
189
188
|
}
|
|
190
189
|
}
|
|
191
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyAnchor, deps: [{ token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ThyScrollService }
|
|
190
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyAnchor, deps: [{ token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ThyScrollService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
192
191
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: ThyAnchor, isStandalone: true, selector: "thy-anchor", inputs: { thyAffix: ["thyAffix", "thyAffix", coerceBooleanProperty], thyBounds: ["thyBounds", "thyBounds", numberAttribute], thyOffsetTop: ["thyOffsetTop", "thyOffsetTop", numberAttribute], thyContainer: "thyContainer", thyDirection: "thyDirection" }, outputs: { thyClick: "thyClick", thyScroll: "thyScroll" }, viewQueries: [{ propertyName: "ink", first: true, predicate: ["ink"], descendants: true }], exportAs: ["thyAnchor"], usesOnChanges: true, ngImport: i0, template: `
|
|
193
192
|
<thy-affix *ngIf="thyAffix; else content" [thyOffsetTop]="thyOffsetTop" [thyContainer]="container">
|
|
194
193
|
<ng-template [ngTemplateOutlet]="content"></ng-template>
|
|
@@ -240,7 +239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
240
239
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
241
240
|
type: Inject,
|
|
242
241
|
args: [DOCUMENT]
|
|
243
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ThyScrollService }
|
|
242
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ThyScrollService }], propDecorators: { ink: [{
|
|
244
243
|
type: ViewChild,
|
|
245
244
|
args: ['ink']
|
|
246
245
|
}], thyAffix: [{
|
|
@@ -261,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
261
260
|
}], thyScroll: [{
|
|
262
261
|
type: Output
|
|
263
262
|
}] } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmNob3IvYW5jaG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVFuRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUVyQzs7O0dBR0c7QUE0QkgsTUFBTSxPQUFPLFNBQVM7SUF3RGxCLFlBQzhCLFFBQWEsRUFDL0IsR0FBc0IsRUFDdEIsUUFBa0IsRUFDbEIsSUFBWSxFQUNaLFFBQW1CLEVBQ25CLGFBQStCLEVBQy9CLFVBQXNCO1FBTkosYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0Qixh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TyxDQUFDO2lCQUNoRTs7MEJBMERRLE1BQU07MkJBQUMsUUFBUTtxTUF4RE0sR0FBRztzQkFBNUIsU0FBUzt1QkFBQyxLQUFLO2dCQUs2QixRQUFRO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQU0zQyxTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU9yQyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU81QixZQUFZO3NCQUFwQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS2EsUUFBUTtzQkFBMUIsTUFBTTtnQkFLWSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcywgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUaHlBZmZpeCB9IGZyb20gJ25neC10ZXRoeXMvYWZmaXgnO1xuaW1wb3J0IHsgVGh5U2Nyb2xsU2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGdldE9mZnNldCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBUaHlBbmNob3JMaW5rIH0gZnJvbSAnLi9hbmNob3ItbGluay5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgU2VjdGlvbiB7XG4gICAgbGlua0NvbXBvbmVudDogVGh5QW5jaG9yTGluaztcbiAgICB0b3A6IG51bWJlcjtcbn1cblxuY29uc3Qgc2hhcnBNYXRjaGVyUmVneCA9IC8jKFteI10rKSQvO1xuXG4vKipcbiAqIOmUmueCuee7hOS7tlxuICogQG5hbWUgdGh5LWFuY2hvclxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1hbmNob3InLFxuICAgIGV4cG9ydEFzOiAndGh5QW5jaG9yJyxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dGh5LWFmZml4ICpuZ0lmPVwidGh5QWZmaXg7IGVsc2UgY29udGVudFwiIFt0aHlPZmZzZXRUb3BdPVwidGh5T2Zmc2V0VG9wXCIgW3RoeUNvbnRhaW5lcl09XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90aHktYWZmaXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRoeS1hbmNob3Itd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGh5LWFuY2hvci13cmFwcGVyLWhvcml6b250YWwnOiB0aHlEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ3cmFwcGVyU3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWFuY2hvclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWFuY2hvci1pbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHktYW5jaG9yLWluay1mdWxsXCIgI2luaz48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlBZmZpeCwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgVGh5QW5jaG9yIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ2luaycpIHByaXZhdGUgaW5rITogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIOWbuuWumuaooeW8j1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFmZml4ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOmUmueCueWMuuWfn+i+ueeVjO+8jOWNleS9je+8mnB4XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICB0aHlCb3VuZHMgPSA1O1xuXG4gICAgLyoqXG4gICAgICog57yT5Yay55qE5YGP56e76YeP6ZiI5YC8XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICB0aHlPZmZzZXRUb3A/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiDmjIflrprmu5rliqjnmoTlrrnlmahcbiAgICAgKiBAdHlwZSBzdHJpbmcgfCBIVE1MRWxlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNvbnRhaW5lcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a+86Iiq5pa55ZCRXG4gICAgICogQHR5cGUgJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeURpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyA9ICd2ZXJ0aWNhbCc7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vpobnop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeUFuY2hvckxpbms+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmu5rliqjliLDmn5DplJrngrnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5U2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlBbmNob3JMaW5rPigpO1xuXG4gICAgdmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgd3JhcHBlclN0eWxlID0geyAnbWF4LWhlaWdodCc6ICcxMDB2aCcgfTtcblxuICAgIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgV2luZG93O1xuXG4gICAgcHJpdmF0ZSBsaW5rczogVGh5QW5jaG9yTGlua1tdID0gW107XG5cbiAgICBwcml2YXRlIGFuaW1hdGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGhhbmRsZVNjcm9sbFRpbWVvdXRJRDogYW55ID0gLTE7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHNjcm9sbFNlcnZpY2U6IFRoeVNjcm9sbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICAgICkge31cblxuICAgIHJlZ2lzdGVyTGluayhsaW5rOiBUaHlBbmNob3JMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlua3MucHVzaChsaW5rKTtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyTGluayhsaW5rOiBUaHlBbmNob3JMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlua3Muc3BsaWNlKHRoaXMubGlua3MuaW5kZXhPZihsaW5rKSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBXaW5kb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIgfHwgd2luZG93O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53YXJuaW5nUHJvbXB0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTY3JvbGxFdmVudCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5oYW5kbGVTY3JvbGxUaW1lb3V0SUQpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2FybmluZ1Byb21wdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gdGhpcy5saW5rcy5zb21lKGxpbmsgPT5cbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGxpbms/LmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNoaWxkTm9kZXMpPy5zb21lKChpdGVtOiBIVE1MRWxlbWVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uY2xhc3NOYW1lLmluY2x1ZGVzKCd0aHktYW5jaG9yLWxpbmsnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJBbmNob3IgbGluayBuZXN0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiAnQW5jaG9yJyBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU2Nyb2xsRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmdldENvbnRhaW5lcigpLCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oYW5kbGVTY3JvbGwoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBCcm93c2VyIHdvdWxkIG1haW50YWluIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24gd2hlbiByZWZyZXNoaW5nLlxuICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGRlbGF5IGNhbGN1bGF0aW9uIGluIGF2b2lkIG9mIGdldHRpbmcgYSBpbmNvcnJlY3QgcmVzdWx0LlxuICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbFRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVTY3JvbGwoKSk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmFuaW1hdGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gdGhpcy5jb250YWluZXIgOiB0aGlzLmRvY3VtZW50O1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zOiBTZWN0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSAodGhpcy50aHlPZmZzZXRUb3AgfHwgMCkgKyB0aGlzLnRoeUJvdW5kcztcbiAgICAgICAgdGhpcy5saW5rcy5mb3JFYWNoKGxpbmtDb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hhcnBMaW5rTWF0Y2ggPSBzaGFycE1hdGNoZXJSZWd4LmV4ZWMobGlua0NvbXBvbmVudC50aHlIcmVmLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKCFzaGFycExpbmtNYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtzaGFycExpbmtNYXRjaFsxXX1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSBnZXRPZmZzZXQodGFyZ2V0LCB0aGlzLmdldENvbnRhaW5lcigpKS50b3A7XG4gICAgICAgICAgICAgICAgaWYgKHRvcCA8IHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlua0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlzaWJsZSA9ICEhc2VjdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF4U2VjdGlvbiA9IHNlY3Rpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gKGN1cnIudG9wID4gcHJldi50b3AgPyBjdXJyIDogcHJldikpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3RpdmUobWF4U2VjdGlvbi5saW5rQ29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2libGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbmtzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpLnVuc2V0QWN0aXZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQWN0aXZlKGxpbmtDb21wb25lbnQ6IFRoeUFuY2hvckxpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgICBsaW5rQ29tcG9uZW50LnNldEFjdGl2ZSgpO1xuICAgICAgICBjb25zdCBsaW5rTm9kZSA9IGxpbmtDb21wb25lbnQuZ2V0TGlua1RpdGxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQW5jaG9yID0gdGhpcy50aHlEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICB0aGlzLmluay5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGhvcml6b250YWxBbmNob3IgPyAnJyA6IGAke2xpbmtOb2RlLm9mZnNldFRvcH1weGA7XG4gICAgICAgIHRoaXMuaW5rLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaG9yaXpvbnRhbEFuY2hvciA/ICcnIDogYCR7bGlua05vZGUuY2xpZW50SGVpZ2h0fXB4YDtcbiAgICAgICAgdGhpcy5pbmsubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gaG9yaXpvbnRhbEFuY2hvciA/IGAke2xpbmtOb2RlLm9mZnNldExlZnR9cHhgIDogJyc7XG4gICAgICAgIHRoaXMuaW5rLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBob3Jpem9udGFsQW5jaG9yID8gYCR7bGlua05vZGUuY2xpZW50V2lkdGh9cHhgIDogJyc7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZSgpO1xuICAgICAgICB0aGlzLnRoeVNjcm9sbC5lbWl0KGxpbmtDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmlzaWJsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMudmlzaWJsZTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNsYXNzbmFtZSA9ICd2aXNpYmxlJztcbiAgICAgICAgaWYgKHRoaXMuaW5rKSB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbmsubmF0aXZlRWxlbWVudCwgdmlzaWJsZUNsYXNzbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbmsubmF0aXZlRWxlbWVudCwgdmlzaWJsZUNsYXNzbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGxUbyhsaW5rQ29tcG9uZW50OiBUaHlBbmNob3JMaW5rKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gdGhpcy5jb250YWluZXIgOiB0aGlzLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBsaW5rRWxlbWVudDogSFRNTEVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihsaW5rQ29tcG9uZW50LnRoeUhyZWYpO1xuICAgICAgICBpZiAoIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsU2VydmljZS5nZXRTY3JvbGwodGhpcy5nZXRDb250YWluZXIoKSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRUb3AgPSBnZXRPZmZzZXQobGlua0VsZW1lbnQsIHRoaXMuZ2V0Q29udGFpbmVyKCkpLnRvcDtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY29udGFpbmVyU2Nyb2xsVG9wICsgZWxlbWVudE9mZnNldFRvcCAtICh0aGlzLnRoeU9mZnNldFRvcCB8fCAwKTtcbiAgICAgICAgdGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbFRvKHRoaXMuZ2V0Q29udGFpbmVyKCksIHRhcmdldFNjcm9sbFRvcCwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYW5kbGVBY3RpdmUobGlua0NvbXBvbmVudCk7XG4gICAgICAgIHRoaXMudGh5Q2xpY2suZW1pdChsaW5rQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5T2Zmc2V0VG9wLCB0aHlDb250YWluZXIgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmICh0aHlPZmZzZXRUb3ApIHtcbiAgICAgICAgICAgIHRoaXMud3JhcHBlclN0eWxlID0ge1xuICAgICAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogYGNhbGMoMTAwdmggLSAke3RoaXMudGh5T2Zmc2V0VG9wfXB4KWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoeUNvbnRhaW5lciAmJiB0aGlzLnRoeUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy50aHlDb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnID8gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcikgOiBjb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU2Nyb2xsRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmNob3IvYW5jaG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVFuRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUVyQzs7O0dBR0c7QUE0QkgsTUFBTSxPQUFPLFNBQVM7SUF3RGxCLFlBQzhCLFFBQWEsRUFDL0IsR0FBc0IsRUFDdEIsUUFBa0IsRUFDbEIsSUFBWSxFQUNaLFFBQW1CLEVBQ25CLGFBQStCO1FBTGIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQTNEM0M7O1dBRUc7UUFDMEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQUU3RDs7V0FFRztRQUVILGNBQVMsR0FBRyxDQUFDLENBQUM7UUFFZDs7V0FFRztRQUVILGlCQUFZLEdBQVksU0FBUyxDQUFDO1FBUWxDOzs7V0FHRztRQUNNLGlCQUFZLEdBQThCLFVBQVUsQ0FBQztRQUU5RDs7V0FFRztRQUNnQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFaEU7O1dBRUc7UUFDZ0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpFLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsaUJBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUlqQyxVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUU1QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLDBCQUFxQixHQUFRLENBQUMsQ0FBQyxDQUFDO0lBU3JDLENBQUM7SUFFSixZQUFZLENBQUMsSUFBbUI7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFtQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1AsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxLQUFLLGlCQUFpQixDQUFDLENBQzdILENBQUM7WUFDRixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2hELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNILGlFQUFpRTtRQUNqRSwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRCxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFnQixJQUFJLENBQUMsU0FBUyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV0RyxNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU87WUFDWCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFnQixDQUFDO1lBQy9FLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZELElBQUksR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO29CQUNkLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1YsR0FBRzt3QkFDSCxhQUFhO3FCQUNoQixDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWSxDQUFDLGFBQTRCO1FBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQztRQUU1RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUM7UUFDM0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sVUFBVTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDckUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDeEUsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLGFBQTRCO1FBQ3ZDLE1BQU0sU0FBUyxHQUFnQixJQUFJLENBQUMsU0FBUyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN0RyxNQUFNLFdBQVcsR0FBZ0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDekUsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUM5RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMvQyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRztnQkFDaEIsWUFBWSxFQUFFLGdCQUFnQixJQUFJLENBQUMsWUFBWSxLQUFLO2FBQ3ZELENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDcEcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7OEdBck5RLFNBQVMsa0JBeUROLFFBQVE7a0dBekRYLFNBQVMsMkZBTUUscUJBQXFCLHlDQUtyQixlQUFlLGtEQU1mLGVBQWUsOFJBeEN6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQsNERBSVMsSUFBSSw2RkFBRSxRQUFRLG1LQUFFLGdCQUFnQixvSkFBRSxPQUFPLDJFQUFFLE9BQU87OzJGQUVuRCxTQUFTO2tCQTNCckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQ7b0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO2lCQUNoRTs7MEJBMERRLE1BQU07MkJBQUMsUUFBUTs0S0F4RE0sR0FBRztzQkFBNUIsU0FBUzt1QkFBQyxLQUFLO2dCQUs2QixRQUFRO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQU0zQyxTQUFTO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU9yQyxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU81QixZQUFZO3NCQUFwQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS2EsUUFBUTtzQkFBMUIsTUFBTTtnQkFLWSxTQUFTO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBudW1iZXJBdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcywgTmdJZiwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUaHlBZmZpeCB9IGZyb20gJ25neC10ZXRoeXMvYWZmaXgnO1xuaW1wb3J0IHsgVGh5U2Nyb2xsU2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGdldE9mZnNldCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBUaHlBbmNob3JMaW5rIH0gZnJvbSAnLi9hbmNob3ItbGluay5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgU2VjdGlvbiB7XG4gICAgbGlua0NvbXBvbmVudDogVGh5QW5jaG9yTGluaztcbiAgICB0b3A6IG51bWJlcjtcbn1cblxuY29uc3Qgc2hhcnBNYXRjaGVyUmVneCA9IC8jKFteI10rKSQvO1xuXG4vKipcbiAqIOmUmueCuee7hOS7tlxuICogQG5hbWUgdGh5LWFuY2hvclxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1hbmNob3InLFxuICAgIGV4cG9ydEFzOiAndGh5QW5jaG9yJyxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dGh5LWFmZml4ICpuZ0lmPVwidGh5QWZmaXg7IGVsc2UgY29udGVudFwiIFt0aHlPZmZzZXRUb3BdPVwidGh5T2Zmc2V0VG9wXCIgW3RoeUNvbnRhaW5lcl09XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90aHktYWZmaXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRoeS1hbmNob3Itd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGh5LWFuY2hvci13cmFwcGVyLWhvcml6b250YWwnOiB0aHlEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ3cmFwcGVyU3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWFuY2hvclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh5LWFuY2hvci1pbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHktYW5jaG9yLWluay1mdWxsXCIgI2luaz48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlBZmZpeCwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgVGh5QW5jaG9yIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ2luaycpIHByaXZhdGUgaW5rITogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIOWbuuWumuaooeW8j1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFmZml4ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOmUmueCueWMuuWfn+i+ueeVjO+8jOWNleS9je+8mnB4XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICB0aHlCb3VuZHMgPSA1O1xuXG4gICAgLyoqXG4gICAgICog57yT5Yay55qE5YGP56e76YeP6ZiI5YC8XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICB0aHlPZmZzZXRUb3A/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiDmjIflrprmu5rliqjnmoTlrrnlmahcbiAgICAgKiBAdHlwZSBzdHJpbmcgfCBIVE1MRWxlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNvbnRhaW5lcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5a+86Iiq5pa55ZCRXG4gICAgICogQHR5cGUgJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeURpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyA9ICd2ZXJ0aWNhbCc7XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vpobnop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeUFuY2hvckxpbms+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmu5rliqjliLDmn5DplJrngrnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5U2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlBbmNob3JMaW5rPigpO1xuXG4gICAgdmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgd3JhcHBlclN0eWxlID0geyAnbWF4LWhlaWdodCc6ICcxMDB2aCcgfTtcblxuICAgIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgV2luZG93O1xuXG4gICAgcHJpdmF0ZSBsaW5rczogVGh5QW5jaG9yTGlua1tdID0gW107XG5cbiAgICBwcml2YXRlIGFuaW1hdGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGhhbmRsZVNjcm9sbFRpbWVvdXRJRDogYW55ID0gLTE7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHNjcm9sbFNlcnZpY2U6IFRoeVNjcm9sbFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICByZWdpc3RlckxpbmsobGluazogVGh5QW5jaG9yTGluayk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgdW5yZWdpc3RlckxpbmsobGluazogVGh5QW5jaG9yTGluayk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbmtzLnNwbGljZSh0aGlzLmxpbmtzLmluZGV4T2YobGluayksIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgV2luZG93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyIHx8IHdpbmRvdztcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FybmluZ1Byb21wdCgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU2Nyb2xsRXZlbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGFuZGxlU2Nyb2xsVGltZW91dElEKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdhcm5pbmdQcm9tcHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeURpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9IHRoaXMubGlua3Muc29tZShsaW5rID0+XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShsaW5rPy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5jaGlsZE5vZGVzKT8uc29tZSgoaXRlbTogSFRNTEVsZW1lbnQpID0+IGl0ZW0/Lm5vZGVOYW1lID09PSAnVEhZLUFOQ0hPUi1MSU5LJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJBbmNob3IgbGluayBuZXN0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiAnQW5jaG9yJyBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU2Nyb2xsRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmdldENvbnRhaW5lcigpLCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oYW5kbGVTY3JvbGwoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBCcm93c2VyIHdvdWxkIG1haW50YWluIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24gd2hlbiByZWZyZXNoaW5nLlxuICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGRlbGF5IGNhbGN1bGF0aW9uIGluIGF2b2lkIG9mIGdldHRpbmcgYSBpbmNvcnJlY3QgcmVzdWx0LlxuICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbFRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVTY3JvbGwoKSk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmFuaW1hdGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gdGhpcy5jb250YWluZXIgOiB0aGlzLmRvY3VtZW50O1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zOiBTZWN0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSAodGhpcy50aHlPZmZzZXRUb3AgfHwgMCkgKyB0aGlzLnRoeUJvdW5kcztcbiAgICAgICAgdGhpcy5saW5rcy5mb3JFYWNoKGxpbmtDb21wb25lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hhcnBMaW5rTWF0Y2ggPSBzaGFycE1hdGNoZXJSZWd4LmV4ZWMobGlua0NvbXBvbmVudC50aHlIcmVmLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKCFzaGFycExpbmtNYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtzaGFycExpbmtNYXRjaFsxXX1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSBnZXRPZmZzZXQodGFyZ2V0LCB0aGlzLmdldENvbnRhaW5lcigpKS50b3A7XG4gICAgICAgICAgICAgICAgaWYgKHRvcCA8IHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlua0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlzaWJsZSA9ICEhc2VjdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF4U2VjdGlvbiA9IHNlY3Rpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gKGN1cnIudG9wID4gcHJldi50b3AgPyBjdXJyIDogcHJldikpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3RpdmUobWF4U2VjdGlvbi5saW5rQ29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2libGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbmtzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpLnVuc2V0QWN0aXZlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQWN0aXZlKGxpbmtDb21wb25lbnQ6IFRoeUFuY2hvckxpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgICAgICBsaW5rQ29tcG9uZW50LnNldEFjdGl2ZSgpO1xuICAgICAgICBjb25zdCBsaW5rTm9kZSA9IGxpbmtDb21wb25lbnQuZ2V0TGlua1RpdGxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQW5jaG9yID0gdGhpcy50aHlEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICB0aGlzLmluay5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGhvcml6b250YWxBbmNob3IgPyAnJyA6IGAke2xpbmtOb2RlLm9mZnNldFRvcH1weGA7XG4gICAgICAgIHRoaXMuaW5rLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaG9yaXpvbnRhbEFuY2hvciA/ICcnIDogYCR7bGlua05vZGUuY2xpZW50SGVpZ2h0fXB4YDtcbiAgICAgICAgdGhpcy5pbmsubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gaG9yaXpvbnRhbEFuY2hvciA/IGAke2xpbmtOb2RlLm9mZnNldExlZnR9cHhgIDogJyc7XG4gICAgICAgIHRoaXMuaW5rLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBob3Jpem9udGFsQW5jaG9yID8gYCR7bGlua05vZGUuY2xpZW50V2lkdGh9cHhgIDogJyc7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZSgpO1xuICAgICAgICB0aGlzLnRoeVNjcm9sbC5lbWl0KGxpbmtDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmlzaWJsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMudmlzaWJsZTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNsYXNzbmFtZSA9ICd2aXNpYmxlJztcbiAgICAgICAgaWYgKHRoaXMuaW5rKSB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbmsubmF0aXZlRWxlbWVudCwgdmlzaWJsZUNsYXNzbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbmsubmF0aXZlRWxlbWVudCwgdmlzaWJsZUNsYXNzbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGxUbyhsaW5rQ29tcG9uZW50OiBUaHlBbmNob3JMaW5rKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gdGhpcy5jb250YWluZXIgOiB0aGlzLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBsaW5rRWxlbWVudDogSFRNTEVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihsaW5rQ29tcG9uZW50LnRoeUhyZWYpO1xuICAgICAgICBpZiAoIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsU2VydmljZS5nZXRTY3JvbGwodGhpcy5nZXRDb250YWluZXIoKSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRUb3AgPSBnZXRPZmZzZXQobGlua0VsZW1lbnQsIHRoaXMuZ2V0Q29udGFpbmVyKCkpLnRvcDtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY29udGFpbmVyU2Nyb2xsVG9wICsgZWxlbWVudE9mZnNldFRvcCAtICh0aGlzLnRoeU9mZnNldFRvcCB8fCAwKTtcbiAgICAgICAgdGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbFRvKHRoaXMuZ2V0Q29udGFpbmVyKCksIHRhcmdldFNjcm9sbFRvcCwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYW5kbGVBY3RpdmUobGlua0NvbXBvbmVudCk7XG4gICAgICAgIHRoaXMudGh5Q2xpY2suZW1pdChsaW5rQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5T2Zmc2V0VG9wLCB0aHlDb250YWluZXIgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmICh0aHlPZmZzZXRUb3ApIHtcbiAgICAgICAgICAgIHRoaXMud3JhcHBlclN0eWxlID0ge1xuICAgICAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogYGNhbGMoMTAwdmggLSAke3RoaXMudGh5T2Zmc2V0VG9wfXB4KWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoeUNvbnRhaW5lciAmJiB0aGlzLnRoeUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy50aHlDb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnID8gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcikgOiBjb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU2Nyb2xsRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -628,7 +628,7 @@ export class ThyTreeSelectNodes {
|
|
|
628
628
|
return index;
|
|
629
629
|
}
|
|
630
630
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, deps: [{ token: ThyTreeSelect }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
631
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container
|
|
631
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container\n *ngFor=\"let node of nodeList\"\n [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\"\n *ngIf=\"!treeNodeIsHidden(node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\" [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template\n *ngIf=\"treeNodeTemplateRef; else defaultNodeText\"\n [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }] }); }
|
|
632
632
|
}
|
|
633
633
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, decorators: [{
|
|
634
634
|
type: Component,
|
|
@@ -646,7 +646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
646
646
|
ThyFlexibleText
|
|
647
647
|
], host: {
|
|
648
648
|
'[attr.tabindex]': '-1'
|
|
649
|
-
}, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container
|
|
649
|
+
}, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container\n *ngFor=\"let node of nodeList\"\n [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\"\n *ngIf=\"!treeNodeIsHidden(node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\" [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template\n *ngIf=\"treeNodeTemplateRef; else defaultNodeText\"\n [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
|
|
650
650
|
}], ctorParameters: () => [{ type: ThyTreeSelect }], propDecorators: { class: [{
|
|
651
651
|
type: HostBinding,
|
|
652
652
|
args: ['class']
|
|
@@ -655,4 +655,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
655
655
|
}], thyVirtualScroll: [{
|
|
656
656
|
type: Input
|
|
657
657
|
}] } });
|
|
658
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUtc2VsZWN0L3RyZWUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC1ub2Rlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLHlDQUF5QyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0ksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFILE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFWFBBTkRFRF9EUk9QRE9XTl9QT1NJVElPTlMsIHNjYWxlWU1vdGlvbiwgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4sIFRoeUNsaWNrRGlzcGF0Y2hlciB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvZW1wdHknO1xuaW1wb3J0IHsgVGh5RmxleGlibGVUZXh0IH0gZnJvbSAnbmd4LXRldGh5cy9mbGV4aWJsZS10ZXh0JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5U2VsZWN0Q29udHJvbCwgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICduZ3gtdGV0aHlzL3RyZWUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBlbGVtZW50TWF0Y2hDbG9zZXN0LCBpc0FycmF5LCBpc09iamVjdCwgcHJvZHVjZSwgd2FybkRlcHJlY2F0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENka092ZXJsYXlPcmlnaW4sIFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUaHlUcmVlU2VsZWN0Tm9kZSwgVGh5VHJlZVNlbGVjdFR5cGUgfSBmcm9tICcuL3RyZWUtc2VsZWN0LmNsYXNzJztcblxudHlwZSBJbnB1dFNpemUgPSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJUcmVlRGF0YSh0cmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10sIHNlYXJjaFRleHQ6IHN0cmluZywgc2VhcmNoS2V5OiBzdHJpbmcgPSAnbmFtZScpIHtcbiAgICBjb25zdCBmaWx0ZXJOb2RlcyA9IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSwgcmVzdWx0OiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSA9PiB7XG4gICAgICAgIGlmIChub2RlW3NlYXJjaEtleV0gJiYgbm9kZVtzZWFyY2hLZXldLmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBmaWx0ZXJOb2RlcyhjdXJyZW50LCBwcmV2aW91cyksIFtdIGFzIFRoeVRyZWVTZWxlY3ROb2RlW10pO1xuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB7IC4uLm5vZGUsIGNoaWxkcmVuOiBub2RlcywgZXhwYW5kOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IHRyZWVEYXRhID0gdHJlZU5vZGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IGZpbHRlck5vZGVzKGN1cnJlbnQsIHByZXZpb3VzKSwgW10gYXMgVGh5VHJlZVNlbGVjdE5vZGVbXSk7XG4gICAgcmV0dXJuIHRyZWVEYXRhO1xufVxuXG4vKipcbiAqIOagkemAieaLqee7hOS7tlxuICogQG5hbWUgdGh5LXRyZWUtc2VsZWN0XG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZVNlbGVjdCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlU2VsZWN0Tm9kZXMpLFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJJbmRleCcsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbc2NhbGVZTW90aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0IGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXNlbGVjdC1jdXN0b20nKSB0cmVlU2VsZWN0Q2xhc3MgPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0JykgaXNUcmVlU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8vIOiPnOWNleaYr+WQpuWxleW8gFxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWVudS1pcy1vcGVuZWQnKSBleHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0LWN1c3RvbS0tbXVsdGlwbGUnKSBpc011bHRpID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdO1xuXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWU6IGFueTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICB2aXJ0dWFsVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICBwdWJsaWMgY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IDA7XG5cbiAgICBwdWJsaWMgZXhwYW5kZWREcm9wZG93blBvc2l0aW9ucyA9IEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUztcblxuICAgIHB1YmxpYyBpY29uczogeyBleHBhbmQ6IHN0cmluZzsgY29sbGFwc2U6IHN0cmluZzsgZ2FwPzogbnVtYmVyIH0gPSB7XG4gICAgICAgIGV4cGFuZDogJ2FuZ2xlLWRvd24nLFxuICAgICAgICBjb2xsYXBzZTogJ2FuZ2xlLXJpZ2h0JyxcbiAgICAgICAgZ2FwOiAxNVxuICAgIH07XG5cbiAgICBwcml2YXRlIGluaXRpYWxsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHZhbHVlSXNPYmplY3QgPSBmYWxzZTtcblxuICAgIG9yaWdpblRyZWVOb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3RoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheScpXG4gICAgdGh5VHJlZVNlbGVjdFRyaWdnZXJEaXNwbGF5UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScpXG4gICAgdHJlZU5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrT3ZlcmxheU9yaWdpbiwgeyBzdGF0aWM6IHRydWUgfSkgY2RrT3ZlcmxheU9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpbjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSwgeyBzdGF0aWM6IHRydWUgfSkgY2RrQ29ubmVjdGVkT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcblxuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbURpc3BsYXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGN1c3RvbURpc3BsYXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIHRyZWVOb2RlcyDmlbDmja5cbiAgICAgKiBAdHlwZSBUaHlUcmVlU2VsZWN0Tm9kZVtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHJlZU5vZGVzKHZhbHVlOiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSB7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKHRoaXMudHJlZU5vZGVzLCB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWROb2RlcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOWUr+S4gOagh+ivhlxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByaW1hcnlLZXkgPSAnX2lkJztcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOaYvuekuueahOWtl+autSBrZXlcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaG93S2V5ID0gJ25hbWUnO1xuXG4gICAgQElucHV0KCkgdGh5Q2hpbGRDb3VudEtleSA9ICdjaGlsZENvdW50JztcblxuICAgIC8qKlxuICAgICAqIOWNlemAieaXtu+8jOaYr+WQpuaYvuekuua4hemZpOaMiemSru+8jOW9k+S4uiB0cnVlIOaXtu+8jOaYvuekuua4hemZpOaMiemSrlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QWxsb3dDbGVhcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWkmumAiVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm56aB55So5qCR6YCJ5oup5Zmo77yM5b2T5Li6IHRydWUg56aB55So5qCR6YCJ5oup5ZmoXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeURpc2FibGUgPSBmYWxzZTtcblxuICAgIGdldCB0aHlEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5RGlzYWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoJHpgInmi6nmoYbpu5jorqTmloflrZdcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQbGFjZWhvbGRlciA9ICfor7fpgInmi6noioLngrknO1xuXG4gICAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlQbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLbmoJHpgInmi6nnmoTovpPlhaXmoYblpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBkZWZhdWx0IHwgbGdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaXplOiBJbnB1dFNpemU7XG5cbiAgICAvKipcbiAgICAgKiDmlLnlj5jnqbrpgInpobnnmoTmg4XlhrXkuIvnmoTmj5DnpLrmlofmnKxcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlFbXB0eU9wdGlvbnNUZXh0ID0gJ+aaguaXtuayoeacieaVsOaNruWPr+mAiSc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbpmpDol4/oioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlIaWRkZW5Ob2RlRm5cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlIaWRkZW5Ob2RlS2V5ID0gJ2hpZGRlbic7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbnpoHnlKjoioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlEaXNhYmxlTm9kZUZuXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RGlzYWJsZU5vZGVLZXkgPSAnZGlzYWJsZWQnO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byC5q2l5Yqg6L296IqC54K555qE5a2Q6IqC54K5KOaYvuekuuWKoOi9veeKtuaAgSnvvIzlvZPkuLogdHJ1ZSDml7bvvIzlvILmraXojrflj5ZcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXN5bmNOb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblsZXnpLrlhajlkI1cbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5U2hvd1dob2xlTmFtZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pCc57SiXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWbvuagh+exu+Wei++8jOaUr+aMgSBkZWZhdWx0IHwgZXNwZWNpYWzvvIzlt7Llup/lvINcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUljb25UeXBlKHR5cGU6IFRoeVRyZWVTZWxlY3RUeXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgIHdhcm5EZXByZWNhdGlvbignVGhpcyBwYXJhbWV0ZXIgaGFzIGJlZW4gZGVwcmVjYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAodHlwZSA9PT0gJ2VzcGVjaWFsJykge1xuICAgICAgICAvLyAgICAgdGhpcy5pY29ucyA9IHsgZXhwYW5kOiAnbWludXMtc3F1YXJlJywgY29sbGFwc2U6ICdwbHVzLXNxdWFyZScsIGdhcDogMjAgfTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaWNvbnMgPSB7IGV4cGFuZDogJ2NhcmV0LXJpZ2h0LWRvd24nLCBjb2xsYXBzZTogJ2NhcmV0LXJpZ2h0JywgZ2FwOiAxNSB9O1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm6ZqQ6JeP6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCks5LyY5YWI57qn5L2O5LqOIHRoeUhpZGRlbk5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SGlkZGVuTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm56aB55So6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCnvvIzkvJjlhYjnuqfkvY7kuo4gdGh5RGlzYWJsZU5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlEaXNhYmxlTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWQ7XG5cbiAgICAvKipcbiAgICAgKiDojrflj5boioLngrnnmoTlrZDoioLngrnvvIzov5Tlm54gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT7jgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IE9ic2VydmFibGU8VGh5VHJlZVNlbGVjdE5vZGU+ID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBvZihbXSlcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlHZXROb2RlQ2hpbGRyZW46IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkgPT4gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG9mKFtdKTtcblxuICAgIC8qKlxuICAgICAqIOagkemAieaLqee7hOS7tuWxleW8gOWSjOaKmOWPoOeKtuaAgeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlFeHBhbmRTdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2dldE5nTW9kZWxUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gIXRoaXMuc2VsZWN0ZWRWYWx1ZVswXSB8fCBpc09iamVjdCh0aGlzLnNlbGVjdGVkVmFsdWVbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gaXNPYmplY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZEZsYXR0ZW5UcmVlTm9kZXMoKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFRyZWVOb2RlcyA9IHRoaXMuZ2V0RmxhdHRlblRyZWVOb2Rlcyh0aGlzLnRyZWVOb2Rlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0dGVuVHJlZU5vZGVzKHJvb3RUcmVlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IHRoaXMudHJlZU5vZGVzKSB7XG4gICAgICAgIGNvbnN0IGZvckVhY2hUcmVlID0gKHRyZWU6IFRoeVRyZWVTZWxlY3ROb2RlW10sIGZuOiBhbnksIHJlc3VsdDogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0cmVlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgZm4oaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaFRyZWUoaXRlbS5jaGlsZHJlbiwgZm4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm9yRWFjaFRyZWUocm9vdFRyZWVzLCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+ICEhbm9kZS5leHBhbmQpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE5nTW9kZWxUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlcjogVGh5Q2xpY2tEaXNwYXRjaGVyLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pc011bHRpID0gdGhpcy50aHlNdWx0aXBsZTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy5mbGF0dGVuTm9kZXModGhpcy50cmVlTm9kZXMsIHRoaXMuZmxhdHRlblRyZWVOb2RlcywgW10pO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkTm9kZXMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsbGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2xpY2tEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLmNsaWNrZWQoMClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlld3BvcnRSdWxlclxuICAgICAgICAgICAgLmNoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRm9jdXMoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0RWxlbWVudD8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvbkJsdXIoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIC8vIDEuIFRhYiDogZrnhKblkI7oh6rliqjogZrnhKbliLAgaW5wdXQg6L6T5YWl5qGG77yM5q2k5YiG5pSv5LiL55u05o6l6L+U5Zue77yM5peg6ZyA6Kem5Y+RIG9uVG91Y2hlZEZuXG4gICAgICAgIC8vIDIuIOaJk+W8gOmAieaLqeahhuWQjuWmguaenOeCueWHu+W8ueahhuWGheWvvOiHtCBpbnB1dCDlpLHnhKbvvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgaWYgKGVsZW1lbnRNYXRjaENsb3Nlc3QoJGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJ3RoeS10cmVlLXNlbGVjdCcsICd0aHktdHJlZS1zZWxlY3Qtbm9kZXMnXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFZhbHVlT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWROb2RlcyA6IHRoaXMuc2VsZWN0ZWROb2RlO1xuICAgIH1cblxuICAgIHNlYXJjaFZhbHVlKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRyZWVOb2RlcyA9IGZpbHRlclRyZWVEYXRhKHRoaXMub3JpZ2luVHJlZU5vZGVzLCBzZWFyY2hUZXh0LnRyaW0oKSwgdGhpcy50aHlTaG93S2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLmNka0Nvbm5lY3RPdmVybGF5V2lkdGggPSB0aGlzLmNka092ZXJsYXlPcmlnaW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbk5vZGVzKFxuICAgICAgICBub2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdLFxuICAgICAgICByZXN1bHROb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdLFxuICAgICAgICBwYXJlbnRQcmltYXJ5VmFsdWU6IHN0cmluZ1tdID0gW11cbiAgICApOiBUaHlUcmVlU2VsZWN0Tm9kZVtdIHtcbiAgICAgICAgcmVzdWx0Tm9kZXMgPSByZXN1bHROb2Rlcy5jb25jYXQobm9kZXMpO1xuICAgICAgICBsZXQgbm9kZXNMZWFmczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdO1xuICAgICAgICAobm9kZXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnBhcmVudFZhbHVlcyA9IHBhcmVudFByaW1hcnlWYWx1ZTtcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBpdGVtLnBhcmVudFZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZUxlYWZzID0gdGhpcy5mbGF0dGVuTm9kZXMoaXRlbS5jaGlsZHJlbiwgcmVzdWx0Tm9kZXMsIFsuLi5wYXJlbnRQcmltYXJ5VmFsdWUsIGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XV0pO1xuICAgICAgICAgICAgICAgIG5vZGVzTGVhZnMgPSBbLi4ubm9kZXNMZWFmcywgLi4ubm9kZUxlYWZzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbLi4ubm9kZXMsIC4uLm5vZGVzTGVhZnNdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRUcmVlTm9kZSh2YWx1ZTogc3RyaW5nKTogVGh5VHJlZVNlbGVjdE5vZGUge1xuICAgICAgICByZXR1cm4gKHRoaXMuZmxhdHRlblRyZWVOb2RlcyB8fCBbXSkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgLy8g5aSa6YCJ5pWw5o2u5Yid5aeL5YyWXG4gICAgICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUlzT2JqZWN0ICYmIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRWYWx1ZVswXSkuaW5kZXhPZih0aGlzLnRoeVByaW1hcnlLZXkpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kVHJlZU5vZGUoaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRUcmVlTm9kZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyDljZXpgInmlbDmja7liJ3lp4vljJZcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUlzT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkVmFsdWUpLmluZGV4T2YodGhpcy50aHlQcmltYXJ5S2V5KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMuX2ZpbmRUcmVlTm9kZSh0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy50aHlQcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMuX2ZpbmRUcmVlTm9kZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlblNlbGVjdFBvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5RGlzYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IHRoaXMuY2RrT3ZlcmxheU9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSAhdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucztcbiAgICAgICAgdGhpcy50aHlFeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGVkVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVJc09iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWROb2RlcyA6IHRoaXMuc2VsZWN0ZWROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy50aHlNdWx0aXBsZVxuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZE5vZGVzLm1hcChpdGVtID0+IGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWROb2RlW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlTXVsdGlwbGVTZWxlY3RlZE5vZGUoZXZlbnQ6IHsgaXRlbTogVGh5VHJlZVNlbGVjdE5vZGU7ICRldmVudE9yaWdpbjogRXZlbnQgfSkge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkTm9kZShldmVudC5pdGVtLCBldmVudC4kZXZlbnRPcmlnaW4pO1xuICAgIH1cblxuICAgIC8vIHRoeU11bHRpcGxlID0gdHJ1ZSDml7bvvIznp7vpmaTmlbDmja7ml7bosIPnlKhcbiAgICByZW1vdmVTZWxlY3RlZE5vZGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aHlEaXNhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHByb2R1Y2UodGhpcy5zZWxlY3RlZE5vZGVzKS5yZW1vdmUoKGl0ZW06IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Tm9kZShub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RWYWx1ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldID09PSBub2RlW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBwcm9kdWNlKHRoaXMuc2VsZWN0ZWROb2RlcykuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdFZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROb2RlQ2hpbGRyZW4obm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy50aHlHZXROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnN1YnNjcmliZSkge1xuICAgICAgICAgICAgcmVzdWx0LnBpcGUoKS5zdWJzY3JpYmUoKGRhdGE6IFRoeVRyZWVTZWxlY3ROb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKGRhdGEsIHRoaXMuZmxhdHRlblRyZWVOb2RlcywgWy4uLm5vZGUucGFyZW50VmFsdWVzLCBub2RlW3RoaXMudGh5UHJpbWFyeUtleV1dKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlck5vZGVzID0gbm9kZXMuZmlsdGVyKChpdGVtOiBUaHlUcmVlTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZmxhdHRlblRyZWVOb2Rlcy5maW5kKGhhc0l0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0l0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSBbLi4udGhpcy5mbGF0dGVuVHJlZU5vZGVzLCAuLi5vdGhlck5vZGVzXTtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgREVGQVVMVF9JVEVNX1NJWkUgPSA0MDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlLXNlbGVjdC1ub2RlcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VsZWN0LW5vZGVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RmxleGlibGVUZXh0XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0Tm9kZXMgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzczogc3RyaW5nO1xuXG4gICAgbm9kZUxpc3Q6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCB0cmVlTm9kZXModmFsdWU6IFRoeVRyZWVTZWxlY3ROb2RlW10pIHtcbiAgICAgICAgY29uc3QgdHJlZVNlbGVjdEhlaWdodCA9IHRoaXMuZGVmYXVsdEl0ZW1TaXplICogdmFsdWUubGVuZ3RoO1xuICAgICAgICAvLyDniLbnuqforr7nva7kuoZtYXgtaGVpZ2h0OjMwMCAmIHBhZGRpbmc6MTAgMDsg5pWF5q2k5aSE5pyA5aSa6K6+572uMjgw77yM5ZCm5YiZ5bCG5Ye6546w5rua5Yqo5p2hXG4gICAgICAgIHRoaXMudGh5VmlydHVhbEhlaWdodCA9IHRyZWVTZWxlY3RIZWlnaHQgPiAzMDAgPyAnMjgwcHgnIDogYCR7dHJlZVNlbGVjdEhlaWdodH1weGA7XG4gICAgICAgIHRoaXMubm9kZUxpc3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNOb2RlQ2hpbGRyZW4gPSB0aGlzLm5vZGVMaXN0LmV2ZXJ5KFxuICAgICAgICAgICAgaXRlbSA9PiAhaXRlbS5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSB8fCAoIWl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggJiYgIWl0ZW0/LmNoaWxkQ291bnQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGh5VmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHByaW1hcnlLZXkgPSB0aGlzLnBhcmVudC50aHlQcmltYXJ5S2V5O1xuXG4gICAgcHVibGljIHNob3dLZXkgPSB0aGlzLnBhcmVudC50aHlTaG93S2V5O1xuXG4gICAgcHVibGljIGlzTXVsdGlwbGUgPSB0aGlzLnBhcmVudC50aHlNdWx0aXBsZTtcblxuICAgIHB1YmxpYyB2YWx1ZUlzT2JqZWN0ID0gdGhpcy5wYXJlbnQudmFsdWVJc09iamVjdDtcblxuICAgIHB1YmxpYyBzZWxlY3RlZFZhbHVlID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWRWYWx1ZTtcblxuICAgIHB1YmxpYyBjaGlsZENvdW50S2V5ID0gdGhpcy5wYXJlbnQudGh5Q2hpbGRDb3VudEtleTtcblxuICAgIHB1YmxpYyB0cmVlTm9kZVRlbXBsYXRlUmVmID0gdGhpcy5wYXJlbnQudHJlZU5vZGVUZW1wbGF0ZVJlZjtcblxuICAgIHB1YmxpYyBkZWZhdWx0SXRlbVNpemUgPSBERUZBVUxUX0lURU1fU0laRTtcblxuICAgIHB1YmxpYyB0aHlWaXJ0dWFsSGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhcmVudDogVGh5VHJlZVNlbGVjdCkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNsYXNzID0gdGhpcy5pc011bHRpcGxlID8gJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93biB0aHktdHJlZS1zZWxlY3QtZHJvcGRvd24tbXVsdGlwbGUnIDogJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93bic7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudC50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVzIHx8IFtdKS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMucHJpbWFyeUtleV0gPT09IG5vZGVbdGhpcy5wcmltYXJ5S2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZSAmJiB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVbdGhpcy5wcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnByaW1hcnlLZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0hpZGRlbihub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbdGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0Rpc2FibGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVt0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlRm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUZuKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzRXhwYW5kKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGxldCBpc1NlbGVjdGVkTm9kZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gISEodGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlcyB8fCBbXSkuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5wYXJlbnRWYWx1ZXMuaW5kZXhPZihub2RlW3RoaXMucHJpbWFyeUtleV0pID4gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGUucGFyZW50VmFsdWVzLmluZGV4T2Yobm9kZVt0aGlzLnByaW1hcnlLZXldKSA+IC0xXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0V4cGFuZCA9IG5vZGUuZXhwYW5kIHx8IChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA8IDAgJiYgaXNTZWxlY3RlZE5vZGVQYXJlbnQpO1xuICAgICAgICBub2RlLmV4cGFuZCA9IGlzRXhwYW5kO1xuICAgICAgICByZXR1cm4gaXNFeHBhbmQ7XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUNoaWxkcmVuKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0VHJlZU5vZGUoZXZlbnQ6IEV2ZW50LCBub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMudHJlZU5vZGVJc0Rpc2FibGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNlbGVjdE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlRXhwYW5kVG9nZ2xlKGV2ZW50OiBFdmVudCwgbm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA+IC0xKSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZCA9ICFub2RlLmV4cGFuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2RlSXNFeHBhbmQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5leHBhbmQgJiYgdGhpcy5wYXJlbnQudGh5QXN5bmNOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmdldE5vZGVDaGlsZHJlbihub2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLnBhcmVudC5zZXRQb3NpdGlvbigpO1xuICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRhYlRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2RrT3ZlcmxheU9yaWdpblxuICB0aHlTZWxlY3RDb250cm9sXG4gIChjbGljayk9XCJvcGVuU2VsZWN0UG9wKClcIlxuICAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gIFt0aHlQYW5lbE9wZW5lZF09XCJleHBhbmRUcmVlU2VsZWN0T3B0aW9uc1wiXG4gIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRWYWx1ZU9iamVjdFwiXG4gIFt0aHlJc011bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgW3RoeUFsbG93Q2xlYXJdPVwidGh5QWxsb3dDbGVhclwiXG4gIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICBbdGh5UGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbY3VzdG9tRGlzcGxheVRlbXBsYXRlXT1cImN1c3RvbURpc3BsYXlUZW1wbGF0ZVwiXG4gIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICBbdGh5RGlzYWJsZWRdPVwidGh5RGlzYWJsZVwiXG4gICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiXG4gICh0aHlPblJlbW92ZSk9XCJyZW1vdmVNdWx0aXBsZVNlbGVjdGVkTm9kZSgkZXZlbnQpXCJcbiAgKHRoeU9uU2VhcmNoKT1cInNlYXJjaFZhbHVlKCRldmVudClcIj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21EaXNwbGF5VGVtcGxhdGUgbGV0LW5vZGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheVJlZjsgZWxzZSBub25lVGVtcGxhdGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlUcmVlU2VsZWN0VHJpZ2dlckRpc3BsYXlSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub25lVGVtcGxhdGU+XG4gICAgICB7eyBub2RlW3RoeVNob3dLZXldIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cImZhbHNlXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJjZGtDb25uZWN0T3ZlcmxheVdpZHRoXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnNdPVwidHJ1ZVwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJleHBhbmRUcmVlU2VsZWN0T3B0aW9uc1wiXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5Pbj1cIi50aHktdHJlZS1zZWxlY3QtZHJvcGRvd25cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJleHBhbmRlZERyb3Bkb3duUG9zaXRpb25zXCJcbiAgKGRldGFjaCk9XCJjbG9zZSgpXCI+XG4gIDx0aHktdHJlZS1zZWxlY3Qtbm9kZXNcbiAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICBbdGh5VmlydHVhbFNjcm9sbF09XCJ0aHlWaXJ0dWFsU2Nyb2xsXCJcbiAgICBbdHJlZU5vZGVzXT1cInRoeVZpcnR1YWxTY3JvbGwgPyB2aXJ0dWFsVHJlZU5vZGVzIDogdHJlZU5vZGVzXCJcbiAgICBbQHNjYWxlWU1vdGlvbl09XCInZW50ZXInXCI+XG4gIDwvdGh5LXRyZWUtc2VsZWN0LW5vZGVzPlxuPC9uZy10ZW1wbGF0ZT5cbiIsIjxkaXYgY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtb3B0aW9uc1wiICpuZ0lmPVwibm9kZUxpc3Q/Lmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW5vZGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZUxpc3RcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICN2aWV3cG9ydCAqbmdJZj1cInRoeVZpcnR1YWxTY3JvbGxcIiBbaXRlbVNpemVdPVwiZGVmYXVsdEl0ZW1TaXplXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwidGh5VmlydHVhbEhlaWdodFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIG5vZGVMaXN0OyB0cmFja0J5OiB0YWJUcmFja0J5XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5UGxhY2Vob2xkZXI+XG4gIDx0aHktZW1wdHkgY2xhc3M9XCJ0aHktc2VsZWN0LWVtcHR5LWNvbnRlbnRcIiB0aHlTaXplPVwic21cIiBbdGh5TWVzc2FnZV09XCJwYXJlbnQudGh5RW1wdHlPcHRpb25zVGV4dFwiPjwvdGh5LWVtcHR5PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmVlU2VsZWN0Tm9kZSBsZXQtbm9kZT5cbiAgPG5nLWNvbnRhaW5lcj5cbiAgICA8YSBjbGFzcz1cInRoeS1vcHRpb24taXRlbVwiIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB0cmVlTm9kZUlzU2VsZWN0ZWQobm9kZSkgfVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidHJlZU5vZGVJc0Rpc2FibGUobm9kZSlcIiBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWxlZnQucHgnOiAyMCAqIG5vZGUubGV2ZWwgKyBwYXJlbnQuaWNvbnMuZ2FwIH1cIlxuICAgICAgW25nQ2xhc3NdPVwieyAncGwtMCc6IGhhc05vZGVDaGlsZHJlbiB9XCIgKGNsaWNrKT1cInNlbGVjdFRyZWVOb2RlKCRldmVudCwgbm9kZSlcIiAqbmdJZj1cIiF0cmVlTm9kZUlzSGlkZGVuKG5vZGUpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLXNlbGVjdC1vcHRpb24taWNvblwiXG4gICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIShub2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwIHx8IChub2RlW2NoaWxkQ291bnRLZXldICYmIG5vZGVbY2hpbGRDb3VudEtleV0gPiAwKSlcIlxuICAgICAgICAoY2xpY2spPVwibm9kZUV4cGFuZFRvZ2dsZSgkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgIDx0aHktaWNvbiBjbGFzcz1cIm5vZGUtZXhwYW5kLWljb25cIlxuICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJ0cmVlTm9kZUlzRXhwYW5kKG5vZGUpID8gcGFyZW50Lmljb25zLmV4cGFuZCA6IHBhcmVudC5pY29ucy5jb2xsYXBzZVwiPjwvdGh5LWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInRoeS10cmVlLXNlbGVjdC1vcHRpb24tdGV4dFwiIFtuZ0NsYXNzXT1cInsgJ21sLTEnOiBoYXNOb2RlQ2hpbGRyZW4gfVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0cmVlTm9kZVRlbXBsYXRlUmVmOyBlbHNlIGRlZmF1bHROb2RlVGV4dFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVOb2RlVGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Tm9kZVRleHQ+XG4gICAgICAgICAgPHNwYW4gdGh5RmxleGlibGVUZXh0IFt0aHlUb29sdGlwQ29udGVudF09XCJub2RlW3Nob3dLZXldXCI+e3sgbm9kZVtzaG93S2V5XSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDx0aHktaWNvbiBjbGFzcz1cImNoZWNrZWQtaWNvblwiICpuZ0lmPVwiaXNNdWx0aXBsZVwiIHRoeUljb25OYW1lPVwiY2hlY2tcIj48L3RoeS1pY29uPlxuICAgIDwvYT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGwgJiYgdHJlZU5vZGVJc0V4cGFuZChub2RlKSAmJiBub2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVTZWxlY3ROb2RlXCIgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZS5jaGlsZHJlblwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
658
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyZWUtc2VsZWN0L3RyZWUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uL3NyYy90cmVlLXNlbGVjdC90cmVlLXNlbGVjdC1ub2Rlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLHlDQUF5QyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0ksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFILE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFWFBBTkRFRF9EUk9QRE9XTl9QT1NJVElPTlMsIHNjYWxlWU1vdGlvbiwgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4sIFRoeUNsaWNrRGlzcGF0Y2hlciB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvZW1wdHknO1xuaW1wb3J0IHsgVGh5RmxleGlibGVUZXh0IH0gZnJvbSAnbmd4LXRldGh5cy9mbGV4aWJsZS10ZXh0JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5U2VsZWN0Q29udHJvbCwgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGUgfSBmcm9tICduZ3gtdGV0aHlzL3RyZWUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBlbGVtZW50TWF0Y2hDbG9zZXN0LCBpc0FycmF5LCBpc09iamVjdCwgcHJvZHVjZSwgd2FybkRlcHJlY2F0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENka092ZXJsYXlPcmlnaW4sIFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUaHlUcmVlU2VsZWN0Tm9kZSwgVGh5VHJlZVNlbGVjdFR5cGUgfSBmcm9tICcuL3RyZWUtc2VsZWN0LmNsYXNzJztcblxudHlwZSBJbnB1dFNpemUgPSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJUcmVlRGF0YSh0cmVlTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10sIHNlYXJjaFRleHQ6IHN0cmluZywgc2VhcmNoS2V5OiBzdHJpbmcgPSAnbmFtZScpIHtcbiAgICBjb25zdCBmaWx0ZXJOb2RlcyA9IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSwgcmVzdWx0OiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSA9PiB7XG4gICAgICAgIGlmIChub2RlW3NlYXJjaEtleV0gJiYgbm9kZVtzZWFyY2hLZXldLmluZGV4T2Yoc2VhcmNoVGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBmaWx0ZXJOb2RlcyhjdXJyZW50LCBwcmV2aW91cyksIFtdIGFzIFRoeVRyZWVTZWxlY3ROb2RlW10pO1xuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB7IC4uLm5vZGUsIGNoaWxkcmVuOiBub2RlcywgZXhwYW5kOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IHRyZWVEYXRhID0gdHJlZU5vZGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IGZpbHRlck5vZGVzKGN1cnJlbnQsIHByZXZpb3VzKSwgW10gYXMgVGh5VHJlZVNlbGVjdE5vZGVbXSk7XG4gICAgcmV0dXJuIHRyZWVEYXRhO1xufVxuXG4vKipcbiAqIOagkemAieaLqee7hOS7tlxuICogQG5hbWUgdGh5LXRyZWUtc2VsZWN0XG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdHJlZS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5VHJlZVNlbGVjdCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlU2VsZWN0Tm9kZXMpLFxuICAgICAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJJbmRleCcsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbc2NhbGVZTW90aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0IGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXNlbGVjdC1jdXN0b20nKSB0cmVlU2VsZWN0Q2xhc3MgPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0JykgaXNUcmVlU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8vIOiPnOWNleaYr+WQpuWxleW8gFxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWVudS1pcy1vcGVuZWQnKSBleHBhbmRUcmVlU2VsZWN0T3B0aW9ucyA9IGZhbHNlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0LWN1c3RvbS0tbXVsdGlwbGUnKSBpc011bHRpID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdO1xuXG4gICAgcHVibGljIHNlbGVjdGVkVmFsdWU6IGFueTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkTm9kZXM6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICB2aXJ0dWFsVHJlZU5vZGVzOiBUaHlUcmVlU2VsZWN0Tm9kZVtdID0gW107XG5cbiAgICBwdWJsaWMgY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IDA7XG5cbiAgICBwdWJsaWMgZXhwYW5kZWREcm9wZG93blBvc2l0aW9ucyA9IEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUztcblxuICAgIHB1YmxpYyBpY29uczogeyBleHBhbmQ6IHN0cmluZzsgY29sbGFwc2U6IHN0cmluZzsgZ2FwPzogbnVtYmVyIH0gPSB7XG4gICAgICAgIGV4cGFuZDogJ2FuZ2xlLWRvd24nLFxuICAgICAgICBjb2xsYXBzZTogJ2FuZ2xlLXJpZ2h0JyxcbiAgICAgICAgZ2FwOiAxNVxuICAgIH07XG5cbiAgICBwcml2YXRlIGluaXRpYWxsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHVibGljIHZhbHVlSXNPYmplY3QgPSBmYWxzZTtcblxuICAgIG9yaWdpblRyZWVOb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3RoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheScpXG4gICAgdGh5VHJlZVNlbGVjdFRyaWdnZXJEaXNwbGF5UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgndHJlZU5vZGVUZW1wbGF0ZScpXG4gICAgdHJlZU5vZGVUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrT3ZlcmxheU9yaWdpbiwgeyBzdGF0aWM6IHRydWUgfSkgY2RrT3ZlcmxheU9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpbjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSwgeyBzdGF0aWM6IHRydWUgfSkgY2RrQ29ubmVjdGVkT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcblxuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbURpc3BsYXlUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGN1c3RvbURpc3BsYXlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIHRyZWVOb2RlcyDmlbDmja5cbiAgICAgKiBAdHlwZSBUaHlUcmVlU2VsZWN0Tm9kZVtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHJlZU5vZGVzKHZhbHVlOiBUaHlUcmVlU2VsZWN0Tm9kZVtdKSB7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMub3JpZ2luVHJlZU5vZGVzID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKHRoaXMudHJlZU5vZGVzLCB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWROb2RlcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOWUr+S4gOagh+ivhlxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByaW1hcnlLZXkgPSAnX2lkJztcblxuICAgIC8qKlxuICAgICAqIOagkeiKgueCueeahOaYvuekuueahOWtl+autSBrZXlcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaG93S2V5ID0gJ25hbWUnO1xuXG4gICAgQElucHV0KCkgdGh5Q2hpbGRDb3VudEtleSA9ICdjaGlsZENvdW50JztcblxuICAgIC8qKlxuICAgICAqIOWNlemAieaXtu+8jOaYr+WQpuaYvuekuua4hemZpOaMiemSru+8jOW9k+S4uiB0cnVlIOaXtu+8jOaYvuekuua4hemZpOaMiemSrlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QWxsb3dDbGVhcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWkmumAiVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm56aB55So5qCR6YCJ5oup5Zmo77yM5b2T5Li6IHRydWUg56aB55So5qCR6YCJ5oup5ZmoXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeURpc2FibGUgPSBmYWxzZTtcblxuICAgIGdldCB0aHlEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5RGlzYWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoJHpgInmi6nmoYbpu5jorqTmloflrZdcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlQbGFjZWhvbGRlciA9ICfor7fpgInmi6noioLngrknO1xuXG4gICAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlQbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLbmoJHpgInmi6nnmoTovpPlhaXmoYblpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBkZWZhdWx0IHwgbGdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaXplOiBJbnB1dFNpemU7XG5cbiAgICAvKipcbiAgICAgKiDmlLnlj5jnqbrpgInpobnnmoTmg4XlhrXkuIvnmoTmj5DnpLrmlofmnKxcbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlFbXB0eU9wdGlvbnNUZXh0ID0gJ+aaguaXtuayoeacieaVsOaNruWPr+mAiSc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbpmpDol4/oioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlIaWRkZW5Ob2RlRm5cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlIaWRkZW5Ob2RlS2V5ID0gJ2hpZGRlbic7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mmK/lkKbnpoHnlKjoioLngrko5LiN5Y+v6L+b6KGM5Lu75L2V5pON5L2cKe+8jOS8mOWFiOe6p+mrmOS6jiB0aHlEaXNhYmxlTm9kZUZuXG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RGlzYWJsZU5vZGVLZXkgPSAnZGlzYWJsZWQnO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byC5q2l5Yqg6L296IqC54K555qE5a2Q6IqC54K5KOaYvuekuuWKoOi9veeKtuaAgSnvvIzlvZPkuLogdHJ1ZSDml7bvvIzlvILmraXojrflj5ZcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXN5bmNOb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblsZXnpLrlhajlkI1cbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5U2hvd1dob2xlTmFtZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5bGV56S65pCc57SiXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWbvuagh+exu+Wei++8jOaUr+aMgSBkZWZhdWx0IHwgZXNwZWNpYWzvvIzlt7Llup/lvINcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUljb25UeXBlKHR5cGU6IFRoeVRyZWVTZWxlY3RUeXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgIHdhcm5EZXByZWNhdGlvbignVGhpcyBwYXJhbWV0ZXIgaGFzIGJlZW4gZGVwcmVjYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAodHlwZSA9PT0gJ2VzcGVjaWFsJykge1xuICAgICAgICAvLyAgICAgdGhpcy5pY29ucyA9IHsgZXhwYW5kOiAnbWludXMtc3F1YXJlJywgY29sbGFwc2U6ICdwbHVzLXNxdWFyZScsIGdhcDogMjAgfTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaWNvbnMgPSB7IGV4cGFuZDogJ2NhcmV0LXJpZ2h0LWRvd24nLCBjb2xsYXBzZTogJ2NhcmV0LXJpZ2h0JywgZ2FwOiAxNSB9O1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm6ZqQ6JeP6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCks5LyY5YWI57qn5L2O5LqOIHRoeUhpZGRlbk5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5SGlkZGVuTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuaGlkZGVuO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm56aB55So6IqC54K5KOS4jeWPr+i/m+ihjOS7u+S9leaTjeS9nCnvvIzkvJjlhYjnuqfkvY7kuo4gdGh5RGlzYWJsZU5vZGVLZXnjgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlEaXNhYmxlTm9kZUZuOiAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IGJvb2xlYW4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG5vZGUuZGlzYWJsZWQ7XG5cbiAgICAvKipcbiAgICAgKiDojrflj5boioLngrnnmoTlrZDoioLngrnvvIzov5Tlm54gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT7jgIJcbiAgICAgKiBAZGVmYXVsdCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IE9ic2VydmFibGU8VGh5VHJlZVNlbGVjdE5vZGU+ID0gKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiBvZihbXSlcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlHZXROb2RlQ2hpbGRyZW46IChub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkgPT4gT2JzZXJ2YWJsZTxUaHlUcmVlU2VsZWN0Tm9kZT4gPSAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+IG9mKFtdKTtcblxuICAgIC8qKlxuICAgICAqIOagkemAieaLqee7hOS7tuWxleW8gOWSjOaKmOWPoOeKtuaAgeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlFeHBhbmRTdGF0dXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX2dldE5nTW9kZWxUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gIXRoaXMuc2VsZWN0ZWRWYWx1ZVswXSB8fCBpc09iamVjdCh0aGlzLnNlbGVjdGVkVmFsdWVbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUlzT2JqZWN0ID0gaXNPYmplY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZEZsYXR0ZW5UcmVlTm9kZXMoKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFRyZWVOb2RlcyA9IHRoaXMuZ2V0RmxhdHRlblRyZWVOb2Rlcyh0aGlzLnRyZWVOb2Rlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0dGVuVHJlZU5vZGVzKHJvb3RUcmVlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IHRoaXMudHJlZU5vZGVzKSB7XG4gICAgICAgIGNvbnN0IGZvckVhY2hUcmVlID0gKHRyZWU6IFRoeVRyZWVTZWxlY3ROb2RlW10sIGZuOiBhbnksIHJlc3VsdDogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0cmVlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgZm4oaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaFRyZWUoaXRlbS5jaGlsZHJlbiwgZm4sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm9yRWFjaFRyZWUocm9vdFRyZWVzLCAobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpID0+ICEhbm9kZS5leHBhbmQpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE5nTW9kZWxUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlcjogVGh5Q2xpY2tEaXNwYXRjaGVyLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pc011bHRpID0gdGhpcy50aHlNdWx0aXBsZTtcbiAgICAgICAgdGhpcy5mbGF0dGVuVHJlZU5vZGVzID0gdGhpcy5mbGF0dGVuTm9kZXModGhpcy50cmVlTm9kZXMsIHRoaXMuZmxhdHRlblRyZWVOb2RlcywgW10pO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkTm9kZXMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsbGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmxhdHRlblRyZWVOb2RlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2xpY2tEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLmNsaWNrZWQoMClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlld3BvcnRSdWxlclxuICAgICAgICAgICAgLmNoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRm9jdXMoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIGlucHV0RWxlbWVudD8uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvbkJsdXIoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIC8vIDEuIFRhYiDogZrnhKblkI7oh6rliqjogZrnhKbliLAgaW5wdXQg6L6T5YWl5qGG77yM5q2k5YiG5pSv5LiL55u05o6l6L+U5Zue77yM5peg6ZyA6Kem5Y+RIG9uVG91Y2hlZEZuXG4gICAgICAgIC8vIDIuIOaJk+W8gOmAieaLqeahhuWQjuWmguaenOeCueWHu+W8ueahhuWGheWvvOiHtCBpbnB1dCDlpLHnhKbvvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgaWYgKGVsZW1lbnRNYXRjaENsb3Nlc3QoJGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJ3RoeS10cmVlLXNlbGVjdCcsICd0aHktdHJlZS1zZWxlY3Qtbm9kZXMnXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFZhbHVlT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWROb2RlcyA6IHRoaXMuc2VsZWN0ZWROb2RlO1xuICAgIH1cblxuICAgIHNlYXJjaFZhbHVlKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRyZWVOb2RlcyA9IGZpbHRlclRyZWVEYXRhKHRoaXMub3JpZ2luVHJlZU5vZGVzLCBzZWFyY2hUZXh0LnRyaW0oKSwgdGhpcy50aHlTaG93S2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLmNka0Nvbm5lY3RPdmVybGF5V2lkdGggPSB0aGlzLmNka092ZXJsYXlPcmlnaW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbk5vZGVzKFxuICAgICAgICBub2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdLFxuICAgICAgICByZXN1bHROb2RlczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdLFxuICAgICAgICBwYXJlbnRQcmltYXJ5VmFsdWU6IHN0cmluZ1tdID0gW11cbiAgICApOiBUaHlUcmVlU2VsZWN0Tm9kZVtdIHtcbiAgICAgICAgcmVzdWx0Tm9kZXMgPSByZXN1bHROb2Rlcy5jb25jYXQobm9kZXMpO1xuICAgICAgICBsZXQgbm9kZXNMZWFmczogVGh5VHJlZVNlbGVjdE5vZGVbXSA9IFtdO1xuICAgICAgICAobm9kZXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnBhcmVudFZhbHVlcyA9IHBhcmVudFByaW1hcnlWYWx1ZTtcbiAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBpdGVtLnBhcmVudFZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZUxlYWZzID0gdGhpcy5mbGF0dGVuTm9kZXMoaXRlbS5jaGlsZHJlbiwgcmVzdWx0Tm9kZXMsIFsuLi5wYXJlbnRQcmltYXJ5VmFsdWUsIGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XV0pO1xuICAgICAgICAgICAgICAgIG5vZGVzTGVhZnMgPSBbLi4ubm9kZXNMZWFmcywgLi4ubm9kZUxlYWZzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbLi4ubm9kZXMsIC4uLm5vZGVzTGVhZnNdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRUcmVlTm9kZSh2YWx1ZTogc3RyaW5nKTogVGh5VHJlZVNlbGVjdE5vZGUge1xuICAgICAgICByZXR1cm4gKHRoaXMuZmxhdHRlblRyZWVOb2RlcyB8fCBbXSkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgLy8g5aSa6YCJ5pWw5o2u5Yid5aeL5YyWXG4gICAgICAgICAgICBpZiAodGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUlzT2JqZWN0ICYmIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRWYWx1ZVswXSkuaW5kZXhPZih0aGlzLnRoeVByaW1hcnlLZXkpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kVHJlZU5vZGUoaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRUcmVlTm9kZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyDljZXpgInmlbDmja7liJ3lp4vljJZcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUlzT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkVmFsdWUpLmluZGV4T2YodGhpcy50aHlQcmltYXJ5S2V5KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMuX2ZpbmRUcmVlTm9kZSh0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy50aHlQcmltYXJ5S2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMuX2ZpbmRUcmVlTm9kZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlblNlbGVjdFBvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5RGlzYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdE92ZXJsYXlXaWR0aCA9IHRoaXMuY2RrT3ZlcmxheU9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSAhdGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucztcbiAgICAgICAgdGhpcy50aHlFeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZFRyZWVTZWxlY3RPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGVkVmFsdWUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVJc09iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWROb2RlcyA6IHRoaXMuc2VsZWN0ZWROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy50aHlNdWx0aXBsZVxuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZE5vZGVzLm1hcChpdGVtID0+IGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWROb2RlW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlTXVsdGlwbGVTZWxlY3RlZE5vZGUoZXZlbnQ6IHsgaXRlbTogVGh5VHJlZVNlbGVjdE5vZGU7ICRldmVudE9yaWdpbjogRXZlbnQgfSkge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkTm9kZShldmVudC5pdGVtLCBldmVudC4kZXZlbnRPcmlnaW4pO1xuICAgIH1cblxuICAgIC8vIHRoeU11bHRpcGxlID0gdHJ1ZSDml7bvvIznp7vpmaTmlbDmja7ml7bosIPnlKhcbiAgICByZW1vdmVTZWxlY3RlZE5vZGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aHlEaXNhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHByb2R1Y2UodGhpcy5zZWxlY3RlZE5vZGVzKS5yZW1vdmUoKGl0ZW06IFRoeVRyZWVTZWxlY3ROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Tm9kZShub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZVNlbGVjdE9wdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGh5RXhwYW5kU3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRUcmVlU2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RWYWx1ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldID09PSBub2RlW3RoaXMudGh5UHJpbWFyeUtleV07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBwcm9kdWNlKHRoaXMuc2VsZWN0ZWROb2RlcykuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdFZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROb2RlQ2hpbGRyZW4obm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy50aHlHZXROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnN1YnNjcmliZSkge1xuICAgICAgICAgICAgcmVzdWx0LnBpcGUoKS5zdWJzY3JpYmUoKGRhdGE6IFRoeVRyZWVTZWxlY3ROb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmxhdHRlbk5vZGVzKGRhdGEsIHRoaXMuZmxhdHRlblRyZWVOb2RlcywgWy4uLm5vZGUucGFyZW50VmFsdWVzLCBub2RlW3RoaXMudGh5UHJpbWFyeUtleV1dKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlck5vZGVzID0gbm9kZXMuZmlsdGVyKChpdGVtOiBUaHlUcmVlTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZmxhdHRlblRyZWVOb2Rlcy5maW5kKGhhc0l0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0l0ZW1bdGhpcy50aHlQcmltYXJ5S2V5XSA9PT0gaXRlbVt0aGlzLnRoeVByaW1hcnlLZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXR0ZW5UcmVlTm9kZXMgPSBbLi4udGhpcy5mbGF0dGVuVHJlZU5vZGVzLCAuLi5vdGhlck5vZGVzXTtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgREVGQVVMVF9JVEVNX1NJWkUgPSA0MDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS10cmVlLXNlbGVjdC1ub2RlcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VsZWN0LW5vZGVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RmxleGlibGVUZXh0XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUaHlUcmVlU2VsZWN0Tm9kZXMgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzczogc3RyaW5nO1xuXG4gICAgbm9kZUxpc3Q6IFRoeVRyZWVTZWxlY3ROb2RlW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCB0cmVlTm9kZXModmFsdWU6IFRoeVRyZWVTZWxlY3ROb2RlW10pIHtcbiAgICAgICAgY29uc3QgdHJlZVNlbGVjdEhlaWdodCA9IHRoaXMuZGVmYXVsdEl0ZW1TaXplICogdmFsdWUubGVuZ3RoO1xuICAgICAgICAvLyDniLbnuqforr7nva7kuoZtYXgtaGVpZ2h0OjMwMCAmIHBhZGRpbmc6MTAgMDsg5pWF5q2k5aSE5pyA5aSa6K6+572uMjgw77yM5ZCm5YiZ5bCG5Ye6546w5rua5Yqo5p2hXG4gICAgICAgIHRoaXMudGh5VmlydHVhbEhlaWdodCA9IHRyZWVTZWxlY3RIZWlnaHQgPiAzMDAgPyAnMjgwcHgnIDogYCR7dHJlZVNlbGVjdEhlaWdodH1weGA7XG4gICAgICAgIHRoaXMubm9kZUxpc3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNOb2RlQ2hpbGRyZW4gPSB0aGlzLm5vZGVMaXN0LmV2ZXJ5KFxuICAgICAgICAgICAgaXRlbSA9PiAhaXRlbS5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSB8fCAoIWl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggJiYgIWl0ZW0/LmNoaWxkQ291bnQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGh5VmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHByaW1hcnlLZXkgPSB0aGlzLnBhcmVudC50aHlQcmltYXJ5S2V5O1xuXG4gICAgcHVibGljIHNob3dLZXkgPSB0aGlzLnBhcmVudC50aHlTaG93S2V5O1xuXG4gICAgcHVibGljIGlzTXVsdGlwbGUgPSB0aGlzLnBhcmVudC50aHlNdWx0aXBsZTtcblxuICAgIHB1YmxpYyB2YWx1ZUlzT2JqZWN0ID0gdGhpcy5wYXJlbnQudmFsdWVJc09iamVjdDtcblxuICAgIHB1YmxpYyBzZWxlY3RlZFZhbHVlID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWRWYWx1ZTtcblxuICAgIHB1YmxpYyBjaGlsZENvdW50S2V5ID0gdGhpcy5wYXJlbnQudGh5Q2hpbGRDb3VudEtleTtcblxuICAgIHB1YmxpYyB0cmVlTm9kZVRlbXBsYXRlUmVmID0gdGhpcy5wYXJlbnQudHJlZU5vZGVUZW1wbGF0ZVJlZjtcblxuICAgIHB1YmxpYyBkZWZhdWx0SXRlbVNpemUgPSBERUZBVUxUX0lURU1fU0laRTtcblxuICAgIHB1YmxpYyB0aHlWaXJ0dWFsSGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhcmVudDogVGh5VHJlZVNlbGVjdCkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNsYXNzID0gdGhpcy5pc011bHRpcGxlID8gJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93biB0aHktdHJlZS1zZWxlY3QtZHJvcGRvd24tbXVsdGlwbGUnIDogJ3RoeS10cmVlLXNlbGVjdC1kcm9wZG93bic7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudC50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVzIHx8IFtdKS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMucHJpbWFyeUtleV0gPT09IG5vZGVbdGhpcy5wcmltYXJ5S2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnNlbGVjdGVkTm9kZSAmJiB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGVbdGhpcy5wcmltYXJ5S2V5XSA9PT0gbm9kZVt0aGlzLnByaW1hcnlLZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0hpZGRlbihub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVbdGhpcy5wYXJlbnQudGh5SGlkZGVuTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LnRoeUhpZGRlbk5vZGVGbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJlZU5vZGVJc0Rpc2FibGUobm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVt0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUtleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50LnRoeURpc2FibGVOb2RlRm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC50aHlEaXNhYmxlTm9kZUZuKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cmVlTm9kZUlzRXhwYW5kKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIGxldCBpc1NlbGVjdGVkTm9kZVBhcmVudCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQudGh5TXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gISEodGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlcyB8fCBbXSkuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5wYXJlbnRWYWx1ZXMuaW5kZXhPZihub2RlW3RoaXMucHJpbWFyeUtleV0pID4gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlzU2VsZWN0ZWROb2RlUGFyZW50ID0gdGhpcy5wYXJlbnQuc2VsZWN0ZWROb2RlXG4gICAgICAgICAgICAgICAgPyB0aGlzLnBhcmVudC5zZWxlY3RlZE5vZGUucGFyZW50VmFsdWVzLmluZGV4T2Yobm9kZVt0aGlzLnByaW1hcnlLZXldKSA+IC0xXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0V4cGFuZCA9IG5vZGUuZXhwYW5kIHx8IChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA8IDAgJiYgaXNTZWxlY3RlZE5vZGVQYXJlbnQpO1xuICAgICAgICBub2RlLmV4cGFuZCA9IGlzRXhwYW5kO1xuICAgICAgICByZXR1cm4gaXNFeHBhbmQ7XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUNoaWxkcmVuKG5vZGU6IFRoeVRyZWVTZWxlY3ROb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0VHJlZU5vZGUoZXZlbnQ6IEV2ZW50LCBub2RlOiBUaHlUcmVlU2VsZWN0Tm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMudHJlZU5vZGVJc0Rpc2FibGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNlbGVjdE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlRXhwYW5kVG9nZ2xlKGV2ZW50OiBFdmVudCwgbm9kZTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhub2RlKS5pbmRleE9mKCdleHBhbmQnKSA+IC0xKSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZCA9ICFub2RlLmV4cGFuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2RlSXNFeHBhbmQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5leHBhbmQgJiYgdGhpcy5wYXJlbnQudGh5QXN5bmNOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmdldE5vZGVDaGlsZHJlbihub2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLnBhcmVudC5zZXRQb3NpdGlvbigpO1xuICAgICAgICBpZiAodGhpcy50aHlWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5idWlsZEZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRhYlRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogVGh5VHJlZVNlbGVjdE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2RrT3ZlcmxheU9yaWdpblxuICB0aHlTZWxlY3RDb250cm9sXG4gIChjbGljayk9XCJvcGVuU2VsZWN0UG9wKClcIlxuICAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gIFt0aHlQYW5lbE9wZW5lZF09XCJleHBhbmRUcmVlU2VsZWN0T3B0aW9uc1wiXG4gIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRWYWx1ZU9iamVjdFwiXG4gIFt0aHlJc011bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgW3RoeUFsbG93Q2xlYXJdPVwidGh5QWxsb3dDbGVhclwiXG4gIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICBbdGh5UGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbY3VzdG9tRGlzcGxheVRlbXBsYXRlXT1cImN1c3RvbURpc3BsYXlUZW1wbGF0ZVwiXG4gIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICBbdGh5RGlzYWJsZWRdPVwidGh5RGlzYWJsZVwiXG4gICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiXG4gICh0aHlPblJlbW92ZSk9XCJyZW1vdmVNdWx0aXBsZVNlbGVjdGVkTm9kZSgkZXZlbnQpXCJcbiAgKHRoeU9uU2VhcmNoKT1cInNlYXJjaFZhbHVlKCRldmVudClcIj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21EaXNwbGF5VGVtcGxhdGUgbGV0LW5vZGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoeVRyZWVTZWxlY3RUcmlnZ2VyRGlzcGxheVJlZjsgZWxzZSBub25lVGVtcGxhdGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlUcmVlU2VsZWN0VHJpZ2dlckRpc3BsYXlSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub25lVGVtcGxhdGU+XG4gICAgICB7eyBub2RlW3RoeVNob3dLZXldIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cImZhbHNlXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJjZGtDb25uZWN0T3ZlcmxheVdpZHRoXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnNdPVwidHJ1ZVwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJleHBhbmRUcmVlU2VsZWN0T3B0aW9uc1wiXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5Pbj1cIi50aHktdHJlZS1zZWxlY3QtZHJvcGRvd25cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJleHBhbmRlZERyb3Bkb3duUG9zaXRpb25zXCJcbiAgKGRldGFjaCk9XCJjbG9zZSgpXCI+XG4gIDx0aHktdHJlZS1zZWxlY3Qtbm9kZXNcbiAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICBbdGh5VmlydHVhbFNjcm9sbF09XCJ0aHlWaXJ0dWFsU2Nyb2xsXCJcbiAgICBbdHJlZU5vZGVzXT1cInRoeVZpcnR1YWxTY3JvbGwgPyB2aXJ0dWFsVHJlZU5vZGVzIDogdHJlZU5vZGVzXCJcbiAgICBbQHNjYWxlWU1vdGlvbl09XCInZW50ZXInXCI+XG4gIDwvdGh5LXRyZWUtc2VsZWN0LW5vZGVzPlxuPC9uZy10ZW1wbGF0ZT5cbiIsIjxkaXYgY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtb3B0aW9uc1wiICpuZ0lmPVwibm9kZUxpc3Q/Lmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW5vZGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZUxpc3RcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlU2VsZWN0Tm9kZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICN2aWV3cG9ydCAqbmdJZj1cInRoeVZpcnR1YWxTY3JvbGxcIiBbaXRlbVNpemVdPVwiZGVmYXVsdEl0ZW1TaXplXCIgW3N0eWxlLmhlaWdodF09XCJ0aHlWaXJ0dWFsSGVpZ2h0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IG5vZGUgb2Ygbm9kZUxpc3Q7IHRyYWNrQnk6IHRhYlRyYWNrQnlcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVTZWxlY3ROb2RlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlQbGFjZWhvbGRlcj5cbiAgPHRoeS1lbXB0eSBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiIHRoeVNpemU9XCJzbVwiIFt0aHlNZXNzYWdlXT1cInBhcmVudC50aHlFbXB0eU9wdGlvbnNUZXh0XCI+PC90aHktZW1wdHk+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyZWVTZWxlY3ROb2RlIGxldC1ub2RlPlxuICA8bmctY29udGFpbmVyPlxuICAgIDxhXG4gICAgICBjbGFzcz1cInRoeS1vcHRpb24taXRlbVwiXG4gICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdHJlZU5vZGVJc1NlbGVjdGVkKG5vZGUpLCAncGwtMCc6IGhhc05vZGVDaGlsZHJlbiB9XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0cmVlTm9kZUlzRGlzYWJsZShub2RlKVwiXG4gICAgICBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWxlZnQucHgnOiAyMCAqIG5vZGUubGV2ZWwgKyBwYXJlbnQuaWNvbnMuZ2FwIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFRyZWVOb2RlKCRldmVudCwgbm9kZSlcIlxuICAgICAgKm5nSWY9XCIhdHJlZU5vZGVJc0hpZGRlbihub2RlKVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJ0aHktdHJlZS1zZWxlY3Qtb3B0aW9uLWljb25cIlxuICAgICAgICBbY2xhc3MuaW52aXNpYmxlXT1cIiEobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCB8fCAobm9kZVtjaGlsZENvdW50S2V5XSAmJiBub2RlW2NoaWxkQ291bnRLZXldID4gMCkpXCJcbiAgICAgICAgKGNsaWNrKT1cIm5vZGVFeHBhbmRUb2dnbGUoJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJub2RlLWV4cGFuZC1pY29uXCIgW3RoeUljb25OYW1lXT1cInRyZWVOb2RlSXNFeHBhbmQobm9kZSkgPyBwYXJlbnQuaWNvbnMuZXhwYW5kIDogcGFyZW50Lmljb25zLmNvbGxhcHNlXCI+PC90aHktaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGh5LXRyZWUtc2VsZWN0LW9wdGlvbi10ZXh0XCIgW25nQ2xhc3NdPVwieyAnbWwtMSc6IGhhc05vZGVDaGlsZHJlbiB9XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0lmPVwidHJlZU5vZGVUZW1wbGF0ZVJlZjsgZWxzZSBkZWZhdWx0Tm9kZVRleHRcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVOb2RlVGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Tm9kZVRleHQ+XG4gICAgICAgICAgPHNwYW4gdGh5RmxleGlibGVUZXh0IFt0aHlUb29sdGlwQ29udGVudF09XCJub2RlW3Nob3dLZXldXCI+e3sgbm9kZVtzaG93S2V5XSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDx0aHktaWNvbiBjbGFzcz1cImNoZWNrZWQtaWNvblwiICpuZ0lmPVwiaXNNdWx0aXBsZVwiIHRoeUljb25OYW1lPVwiY2hlY2tcIj48L3RoeS1pY29uPlxuICAgIDwvYT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRoeVZpcnR1YWxTY3JvbGwgJiYgdHJlZU5vZGVJc0V4cGFuZChub2RlKSAmJiBub2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVTZWxlY3ROb2RlXCIgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZS5jaGlsZHJlblwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
package/esm2022/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('18.0.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('18.0.3');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4wLjMnKTtcbiJdfQ==
|
|
@@ -16,14 +16,13 @@ const sharpMatcherRegx = /#([^#]+)$/;
|
|
|
16
16
|
* @name thy-anchor
|
|
17
17
|
*/
|
|
18
18
|
class ThyAnchor {
|
|
19
|
-
constructor(document, cdr, platform, zone, renderer, scrollService
|
|
19
|
+
constructor(document, cdr, platform, zone, renderer, scrollService) {
|
|
20
20
|
this.document = document;
|
|
21
21
|
this.cdr = cdr;
|
|
22
22
|
this.platform = platform;
|
|
23
23
|
this.zone = zone;
|
|
24
24
|
this.renderer = renderer;
|
|
25
25
|
this.scrollService = scrollService;
|
|
26
|
-
this.elementRef = elementRef;
|
|
27
26
|
/**
|
|
28
27
|
* 固定模式
|
|
29
28
|
*/
|
|
@@ -76,7 +75,7 @@ class ThyAnchor {
|
|
|
76
75
|
}
|
|
77
76
|
warningPrompt() {
|
|
78
77
|
if (this.thyDirection === 'horizontal') {
|
|
79
|
-
const hasChildren = this.links.some(link => Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item) => item?.
|
|
78
|
+
const hasChildren = this.links.some(link => Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item) => item?.nodeName === 'THY-ANCHOR-LINK'));
|
|
80
79
|
if (hasChildren) {
|
|
81
80
|
console.warn("Anchor link nesting is not supported when 'Anchor' direction is horizontal.");
|
|
82
81
|
}
|
|
@@ -189,7 +188,7 @@ class ThyAnchor {
|
|
|
189
188
|
this.registerScrollEvent();
|
|
190
189
|
}
|
|
191
190
|
}
|
|
192
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyAnchor, deps: [{ token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ThyScrollService }
|
|
191
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyAnchor, deps: [{ token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ThyScrollService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
193
192
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: ThyAnchor, isStandalone: true, selector: "thy-anchor", inputs: { thyAffix: ["thyAffix", "thyAffix", coerceBooleanProperty], thyBounds: ["thyBounds", "thyBounds", numberAttribute], thyOffsetTop: ["thyOffsetTop", "thyOffsetTop", numberAttribute], thyContainer: "thyContainer", thyDirection: "thyDirection" }, outputs: { thyClick: "thyClick", thyScroll: "thyScroll" }, viewQueries: [{ propertyName: "ink", first: true, predicate: ["ink"], descendants: true }], exportAs: ["thyAnchor"], usesOnChanges: true, ngImport: i0, template: `
|
|
194
193
|
<thy-affix *ngIf="thyAffix; else content" [thyOffsetTop]="thyOffsetTop" [thyContainer]="container">
|
|
195
194
|
<ng-template [ngTemplateOutlet]="content"></ng-template>
|
|
@@ -241,7 +240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
241
240
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
242
241
|
type: Inject,
|
|
243
242
|
args: [DOCUMENT]
|
|
244
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ThyScrollService }
|
|
243
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ThyScrollService }], propDecorators: { ink: [{
|
|
245
244
|
type: ViewChild,
|
|
246
245
|
args: ['ink']
|
|
247
246
|
}], thyAffix: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-anchor.mjs","sources":["../../../src/anchor/anchor.component.ts","../../../src/anchor/anchor-link.component.ts","../../../src/anchor/anchor.module.ts","../../../src/anchor/ngx-tethys-anchor.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n numberAttribute\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { DOCUMENT, NgClass, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ThyAffix } from 'ngx-tethys/affix';\nimport { ThyScrollService } from 'ngx-tethys/core';\nimport { coerceBooleanProperty, getOffset } from 'ngx-tethys/util';\nimport { ThyAnchorLink } from './anchor-link.component';\n\ninterface Section {\n linkComponent: ThyAnchorLink;\n top: number;\n}\n\nconst sharpMatcherRegx = /#([^#]+)$/;\n\n/**\n * 锚点组件\n * @name thy-anchor\n */\n@Component({\n selector: 'thy-anchor',\n exportAs: 'thyAnchor',\n preserveWhitespaces: false,\n template: `\n <thy-affix *ngIf=\"thyAffix; else content\" [thyOffsetTop]=\"thyOffsetTop\" [thyContainer]=\"container\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </thy-affix>\n <ng-template #content>\n <div\n class=\"thy-anchor-wrapper\"\n [ngClass]=\"{ 'thy-anchor-wrapper-horizontal': thyDirection === 'horizontal' }\"\n [ngStyle]=\"wrapperStyle\">\n <div class=\"thy-anchor\">\n <div class=\"thy-anchor-ink\">\n <div class=\"thy-anchor-ink-full\" #ink></div>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf, ThyAffix, NgTemplateOutlet, NgStyle, NgClass]\n})\nexport class ThyAnchor implements OnDestroy, AfterViewInit, OnChanges {\n @ViewChild('ink') private ink!: ElementRef;\n\n /**\n * 固定模式\n */\n @Input({ transform: coerceBooleanProperty }) thyAffix = true;\n\n /**\n * 锚点区域边界,单位:px\n */\n @Input({ transform: numberAttribute })\n thyBounds = 5;\n\n /**\n * 缓冲的偏移量阈值\n */\n @Input({ transform: numberAttribute })\n thyOffsetTop?: number = undefined;\n\n /**\n * 指定滚动的容器\n * @type string | HTMLElement\n */\n @Input() thyContainer?: string | HTMLElement;\n\n /**\n * 设置导航方向\n * @type 'vertical' | 'horizontal'\n */\n @Input() thyDirection: 'vertical' | 'horizontal' = 'vertical';\n\n /**\n * 点击项触发\n */\n @Output() readonly thyClick = new EventEmitter<ThyAnchorLink>();\n\n /**\n * 滚动到某锚点时触发\n */\n @Output() readonly thyScroll = new EventEmitter<ThyAnchorLink>();\n\n visible = false;\n\n wrapperStyle = { 'max-height': '100vh' };\n\n container?: HTMLElement | Window;\n\n private links: ThyAnchorLink[] = [];\n\n private animating = false;\n\n private destroy$ = new Subject<void>();\n\n private handleScrollTimeoutID: any = -1;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private cdr: ChangeDetectorRef,\n private platform: Platform,\n private zone: NgZone,\n private renderer: Renderer2,\n private scrollService: ThyScrollService,\n private elementRef: ElementRef\n ) {}\n\n registerLink(link: ThyAnchorLink): void {\n this.links.push(link);\n }\n\n unregisterLink(link: ThyAnchorLink): void {\n this.links.splice(this.links.indexOf(link), 1);\n }\n\n private getContainer(): HTMLElement | Window {\n return this.container || window;\n }\n\n ngAfterViewInit(): void {\n this.warningPrompt();\n this.registerScrollEvent();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.handleScrollTimeoutID);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private warningPrompt() {\n if (this.thyDirection === 'horizontal') {\n const hasChildren = this.links.some(link =>\n Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item: HTMLElement) =>\n item?.className.includes('thy-anchor-link')\n )\n );\n if (hasChildren) {\n console.warn(\"Anchor link nesting is not supported when 'Anchor' direction is horizontal.\");\n }\n }\n }\n\n private registerScrollEvent(): void {\n if (!this.platform.isBrowser) {\n return;\n }\n this.destroy$.next();\n this.zone.runOutsideAngular(() => {\n fromEvent(this.getContainer(), 'scroll', { passive: true })\n .pipe(throttleTime(50), takeUntil(this.destroy$))\n .subscribe(() => this.handleScroll());\n });\n // Browser would maintain the scrolling position when refreshing.\n // So we have to delay calculation in avoid of getting a incorrect result.\n this.handleScrollTimeoutID = setTimeout(() => this.handleScroll());\n }\n\n handleScroll(): void {\n if (typeof document === 'undefined' || this.animating) {\n return;\n }\n const container: HTMLElement = this.container instanceof HTMLElement ? this.container : this.document;\n\n const sections: Section[] = [];\n const scope = (this.thyOffsetTop || 0) + this.thyBounds;\n this.links.forEach(linkComponent => {\n const sharpLinkMatch = sharpMatcherRegx.exec(linkComponent.thyHref.toString());\n if (!sharpLinkMatch) {\n return;\n }\n const target = container.querySelector(`#${sharpLinkMatch[1]}`) as HTMLElement;\n if (target) {\n const top = getOffset(target, this.getContainer()).top;\n if (top < scope) {\n sections.push({\n top,\n linkComponent\n });\n }\n }\n });\n\n this.visible = !!sections.length;\n if (!this.visible) {\n this.clearActive();\n this.cdr.detectChanges();\n } else {\n const maxSection = sections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev));\n this.handleActive(maxSection.linkComponent);\n }\n this.setVisible();\n }\n\n private clearActive(): void {\n this.links.forEach(i => {\n i.unsetActive();\n });\n }\n\n private handleActive(linkComponent: ThyAnchorLink): void {\n this.clearActive();\n linkComponent.setActive();\n const linkNode = linkComponent.getLinkTitleElement();\n const horizontalAnchor = this.thyDirection === 'horizontal';\n\n this.ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkNode.offsetTop}px`;\n this.ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkNode.clientHeight}px`;\n this.ink.nativeElement.style.left = horizontalAnchor ? `${linkNode.offsetLeft}px` : '';\n this.ink.nativeElement.style.width = horizontalAnchor ? `${linkNode.clientWidth}px` : '';\n this.visible = true;\n this.setVisible();\n this.thyScroll.emit(linkComponent);\n }\n\n private setVisible(): void {\n const visible = this.visible;\n const visibleClassname = 'visible';\n if (this.ink) {\n if (visible) {\n this.renderer.addClass(this.ink.nativeElement, visibleClassname);\n } else {\n this.renderer.removeClass(this.ink.nativeElement, visibleClassname);\n }\n }\n }\n\n handleScrollTo(linkComponent: ThyAnchorLink): void {\n const container: HTMLElement = this.container instanceof HTMLElement ? this.container : this.document;\n const linkElement: HTMLElement = container.querySelector(linkComponent.thyHref);\n if (!linkElement) {\n return;\n }\n\n this.animating = true;\n const containerScrollTop = this.scrollService.getScroll(this.getContainer());\n const elementOffsetTop = getOffset(linkElement, this.getContainer()).top;\n const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop || 0);\n this.scrollService.scrollTo(this.getContainer(), targetScrollTop, undefined, () => {\n this.animating = false;\n });\n this.handleActive(linkComponent);\n this.thyClick.emit(linkComponent);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyOffsetTop, thyContainer } = changes;\n if (thyOffsetTop) {\n this.wrapperStyle = {\n 'max-height': `calc(100vh - ${this.thyOffsetTop}px)`\n };\n }\n if (thyContainer && this.thyContainer) {\n const container = this.thyContainer;\n this.container = typeof container === 'string' ? this.document.querySelector(container) : container;\n this.registerScrollEvent();\n }\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { ThyAnchor } from './anchor.component';\nimport { NgIf } from '@angular/common';\n\n/**\n * 锚点链接组件,可供锚点跳转\n * @name thy-anchor-link,thyAnchorLink\n */\n@Component({\n selector: 'thy-link,thy-anchor-link',\n exportAs: 'thyLink,thyAnchorLink',\n preserveWhitespaces: false,\n template: `\n <a #linkTitle (click)=\"goToClick($event)\" href=\"{{ thyHref }}\" class=\"thy-anchor-link-title\" title=\"{{ title }}\">\n <span *ngIf=\"title; else titleTemplate || thyTemplate\">{{ title }}</span>\n </a>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf]\n})\nexport class ThyAnchorLink implements OnInit, OnDestroy {\n title: string | null = '';\n\n titleTemplate?: TemplateRef<any>;\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 锚点链接\n */\n @Input() thyHref = '#';\n\n /**\n * 文字内容\n */\n @Input()\n set thyTitle(value: string | TemplateRef<void>) {\n if (value instanceof TemplateRef) {\n this.title = null;\n this.titleTemplate = value;\n } else {\n this.title = value;\n }\n }\n\n @ContentChild('thyTemplate') thyTemplate!: TemplateRef<void>;\n\n @ViewChild('linkTitle', { static: true }) linkTitle!: ElementRef<HTMLAnchorElement>;\n\n constructor(\n public elementRef: ElementRef,\n private anchorComponent: ThyAnchor,\n private platform: Platform\n ) {\n this.hostRenderer.addClass('thy-anchor-link');\n if (elementRef.nativeElement.tagName.toLowerCase() === 'thy-link') {\n console.warn(`'thy-link' and 'thyLink' are deprecated, please use 'thy-anchor-link' and 'thyAnchorLink' instead.`);\n }\n }\n\n ngOnInit(): void {\n this.anchorComponent.registerLink(this);\n }\n\n getLinkTitleElement(): HTMLAnchorElement {\n return this.linkTitle.nativeElement;\n }\n\n setActive(): void {\n this.hostRenderer.addClass('thy-anchor-link-active');\n }\n\n unsetActive(): void {\n this.hostRenderer.removeClass('thy-anchor-link-active');\n }\n\n goToClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n if (this.platform.isBrowser) {\n this.anchorComponent.handleScrollTo(this);\n }\n }\n\n ngOnDestroy(): void {\n this.anchorComponent.unregisterLink(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { ThyAnchor } from './anchor.component';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { ThyAffixModule } from 'ngx-tethys/affix';\n\n@NgModule({\n exports: [ThyAnchor, ThyAnchorLink],\n imports: [CommonModule, PlatformModule, ThyAffixModule, ThyAnchor, ThyAnchorLink]\n})\nexport class ThyAnchorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyAnchor","i2"],"mappings":";;;;;;;;;;;;AAkCA,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC;;;AAGG;MA4BU,SAAS,CAAA;AAwDlB,IAAA,WAAA,CAC8B,QAAa,EAC/B,GAAsB,EACtB,QAAkB,EAClB,IAAY,EACZ,QAAmB,EACnB,aAA+B,EAC/B,UAAsB,EAAA;QANJ,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAK;QAC/B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACZ,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkB;QAC/B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AA5DlC;;AAEG;QAC0C,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAE7D;;AAEG;QAEH,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;AAEd;;AAEG;QAEH,IAAY,CAAA,YAAA,GAAY,SAAS,CAAC;AAQlC;;;AAGG;QACM,IAAY,CAAA,YAAA,GAA8B,UAAU,CAAC;AAE9D;;AAEG;AACgB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAiB,CAAC;AAEhE;;AAEG;AACgB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;QAEjE,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAA,CAAA,YAAY,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAIjC,IAAK,CAAA,KAAA,GAAoB,EAAE,CAAC;QAE5B,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAE/B,IAAqB,CAAA,qBAAA,GAAQ,CAAC,CAAC,CAAC;KAUpC;AAEJ,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;AAED,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD;IAEO,YAAY,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;KACnC;IAED,eAAe,GAAA;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;AACP,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC5B;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE;AACpC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IACpC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,IAAiB,KAC5E,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAC9C,CACJ,CAAC;YACF,IAAI,WAAW,EAAE;AACb,gBAAA,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;aAC/F;SACJ;KACJ;IAEO,mBAAmB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC1B,OAAO;SACV;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC7B,YAAA,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACtD,iBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAChD,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;;;AAGH,QAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KACtE;IAED,YAAY,GAAA;QACR,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YACnD,OAAO;SACV;AACD,QAAA,MAAM,SAAS,GAAgB,IAAI,CAAC,SAAS,YAAY,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEtG,MAAM,QAAQ,GAAc,EAAE,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,IAAG;AAC/B,YAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,IAAI,CAAC,cAAc,EAAE;gBACjB,OAAO;aACV;AACD,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,cAAc,CAAC,CAAC,CAAC,CAAA,CAAE,CAAgB,CAAC;YAC/E,IAAI,MAAM,EAAE;AACR,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC;AACvD,gBAAA,IAAI,GAAG,GAAG,KAAK,EAAE;oBACb,QAAQ,CAAC,IAAI,CAAC;wBACV,GAAG;wBACH,aAAa;AAChB,qBAAA,CAAC,CAAC;iBACN;aACJ;AACL,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC5B;aAAM;AACH,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACxF,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEO,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;YACnB,CAAC,CAAC,WAAW,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,YAAY,CAAC,aAA4B,EAAA;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,aAAa,CAAC,SAAS,EAAE,CAAC;AAC1B,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAC;AACrD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC;QAE5D,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC;QACrF,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,GAAG,CAAA,EAAG,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QACvF,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,gBAAgB,GAAG,CAAA,EAAG,QAAQ,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC;AACzF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtC;IAEO,UAAU,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;aACpE;iBAAM;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;aACvE;SACJ;KACJ;AAED,IAAA,cAAc,CAAC,aAA4B,EAAA;AACvC,QAAA,MAAM,SAAS,GAAgB,IAAI,CAAC,SAAS,YAAY,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtG,MAAM,WAAW,GAAgB,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE;YACd,OAAO;SACV;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC7E,QAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC;AACzE,QAAA,MAAM,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,MAAK;AAC9E,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACrC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAC/C,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,YAAY,GAAG;AAChB,gBAAA,YAAY,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,YAAY,CAAK,GAAA,CAAA;aACvD,CAAC;SACL;AACD,QAAA,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;YACpG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;KACJ;AAxNQ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,kBAyDN,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAzDX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,2FAME,qBAAqB,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAKrB,eAAe,CAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAMf,eAAe,CAxCzB,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;KAiBT,EAIS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,6FAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAEnD,SAAS,EAAA,UAAA,EAAA,CAAA;kBA3BrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;AAiBT,IAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC;AAChE,iBAAA,CAAA;;0BA0DQ,MAAM;2BAAC,QAAQ,CAAA;qMAxDM,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK,CAAA;gBAK6B,QAAQ,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAA;gBAM3C,SAAS,EAAA,CAAA;sBADR,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAOrC,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAO5B,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAMG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKa,QAAQ,EAAA,CAAA;sBAA1B,MAAM;gBAKY,SAAS,EAAA,CAAA;sBAA3B,MAAM;;;ACzFX;;;AAGG;MAgBU,aAAa,CAAA;AAYtB;;AAEG;IACH,IACI,QAAQ,CAAC,KAAiC,EAAA;AAC1C,QAAA,IAAI,KAAK,YAAY,WAAW,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9B;aAAM;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;KACJ;AAMD,IAAA,WAAA,CACW,UAAsB,EACrB,eAA0B,EAC1B,QAAkB,EAAA;QAFnB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACrB,IAAe,CAAA,eAAA,GAAf,eAAe,CAAW;QAC1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QA/B9B,IAAK,CAAA,KAAA,GAAkB,EAAE,CAAC;QAIlB,IAAY,CAAA,YAAA,GAAG,eAAe,EAAE,CAAC;AAEzC;;AAEG;QACM,IAAO,CAAA,OAAA,GAAG,GAAG,CAAC;AAwBnB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AAC/D,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,kGAAA,CAAoG,CAAC,CAAC;SACtH;KACJ;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAC3C;IAED,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;KACvC;IAED,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;KACxD;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;KAC3D;AAED,IAAA,SAAS,CAAC,CAAQ,EAAA;QACd,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC7C;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC7C;8GAlEQ,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAXZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIS,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAEL,aAAa,EAAA,UAAA,EAAA,CAAA;kBAfzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,mBAAmB,EAAE,KAAK;AAC1B,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,IAAA,CAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,IAAI,CAAC;AAClB,iBAAA,CAAA;2HAWY,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAMF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAUuB,WAAW,EAAA,CAAA;sBAAvC,YAAY;uBAAC,aAAa,CAAA;gBAEe,SAAS,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MCrD/B,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAFd,OAAA,EAAA,CAAA,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CADtE,EAAA,OAAA,EAAA,CAAA,SAAS,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;AAGzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAFd,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAExD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;oBACnC,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC;AACpF,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-anchor.mjs","sources":["../../../src/anchor/anchor.component.ts","../../../src/anchor/anchor-link.component.ts","../../../src/anchor/anchor.module.ts","../../../src/anchor/ngx-tethys-anchor.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n numberAttribute\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { DOCUMENT, NgClass, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ThyAffix } from 'ngx-tethys/affix';\nimport { ThyScrollService } from 'ngx-tethys/core';\nimport { coerceBooleanProperty, getOffset } from 'ngx-tethys/util';\nimport { ThyAnchorLink } from './anchor-link.component';\n\ninterface Section {\n linkComponent: ThyAnchorLink;\n top: number;\n}\n\nconst sharpMatcherRegx = /#([^#]+)$/;\n\n/**\n * 锚点组件\n * @name thy-anchor\n */\n@Component({\n selector: 'thy-anchor',\n exportAs: 'thyAnchor',\n preserveWhitespaces: false,\n template: `\n <thy-affix *ngIf=\"thyAffix; else content\" [thyOffsetTop]=\"thyOffsetTop\" [thyContainer]=\"container\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </thy-affix>\n <ng-template #content>\n <div\n class=\"thy-anchor-wrapper\"\n [ngClass]=\"{ 'thy-anchor-wrapper-horizontal': thyDirection === 'horizontal' }\"\n [ngStyle]=\"wrapperStyle\">\n <div class=\"thy-anchor\">\n <div class=\"thy-anchor-ink\">\n <div class=\"thy-anchor-ink-full\" #ink></div>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf, ThyAffix, NgTemplateOutlet, NgStyle, NgClass]\n})\nexport class ThyAnchor implements OnDestroy, AfterViewInit, OnChanges {\n @ViewChild('ink') private ink!: ElementRef;\n\n /**\n * 固定模式\n */\n @Input({ transform: coerceBooleanProperty }) thyAffix = true;\n\n /**\n * 锚点区域边界,单位:px\n */\n @Input({ transform: numberAttribute })\n thyBounds = 5;\n\n /**\n * 缓冲的偏移量阈值\n */\n @Input({ transform: numberAttribute })\n thyOffsetTop?: number = undefined;\n\n /**\n * 指定滚动的容器\n * @type string | HTMLElement\n */\n @Input() thyContainer?: string | HTMLElement;\n\n /**\n * 设置导航方向\n * @type 'vertical' | 'horizontal'\n */\n @Input() thyDirection: 'vertical' | 'horizontal' = 'vertical';\n\n /**\n * 点击项触发\n */\n @Output() readonly thyClick = new EventEmitter<ThyAnchorLink>();\n\n /**\n * 滚动到某锚点时触发\n */\n @Output() readonly thyScroll = new EventEmitter<ThyAnchorLink>();\n\n visible = false;\n\n wrapperStyle = { 'max-height': '100vh' };\n\n container?: HTMLElement | Window;\n\n private links: ThyAnchorLink[] = [];\n\n private animating = false;\n\n private destroy$ = new Subject<void>();\n\n private handleScrollTimeoutID: any = -1;\n\n constructor(\n @Inject(DOCUMENT) private document: any,\n private cdr: ChangeDetectorRef,\n private platform: Platform,\n private zone: NgZone,\n private renderer: Renderer2,\n private scrollService: ThyScrollService\n ) {}\n\n registerLink(link: ThyAnchorLink): void {\n this.links.push(link);\n }\n\n unregisterLink(link: ThyAnchorLink): void {\n this.links.splice(this.links.indexOf(link), 1);\n }\n\n private getContainer(): HTMLElement | Window {\n return this.container || window;\n }\n\n ngAfterViewInit(): void {\n this.warningPrompt();\n this.registerScrollEvent();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.handleScrollTimeoutID);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private warningPrompt() {\n if (this.thyDirection === 'horizontal') {\n const hasChildren = this.links.some(link =>\n Array.from(link?.elementRef?.nativeElement?.childNodes)?.some((item: HTMLElement) => item?.nodeName === 'THY-ANCHOR-LINK')\n );\n if (hasChildren) {\n console.warn(\"Anchor link nesting is not supported when 'Anchor' direction is horizontal.\");\n }\n }\n }\n\n private registerScrollEvent(): void {\n if (!this.platform.isBrowser) {\n return;\n }\n this.destroy$.next();\n this.zone.runOutsideAngular(() => {\n fromEvent(this.getContainer(), 'scroll', { passive: true })\n .pipe(throttleTime(50), takeUntil(this.destroy$))\n .subscribe(() => this.handleScroll());\n });\n // Browser would maintain the scrolling position when refreshing.\n // So we have to delay calculation in avoid of getting a incorrect result.\n this.handleScrollTimeoutID = setTimeout(() => this.handleScroll());\n }\n\n handleScroll(): void {\n if (typeof document === 'undefined' || this.animating) {\n return;\n }\n const container: HTMLElement = this.container instanceof HTMLElement ? this.container : this.document;\n\n const sections: Section[] = [];\n const scope = (this.thyOffsetTop || 0) + this.thyBounds;\n this.links.forEach(linkComponent => {\n const sharpLinkMatch = sharpMatcherRegx.exec(linkComponent.thyHref.toString());\n if (!sharpLinkMatch) {\n return;\n }\n const target = container.querySelector(`#${sharpLinkMatch[1]}`) as HTMLElement;\n if (target) {\n const top = getOffset(target, this.getContainer()).top;\n if (top < scope) {\n sections.push({\n top,\n linkComponent\n });\n }\n }\n });\n\n this.visible = !!sections.length;\n if (!this.visible) {\n this.clearActive();\n this.cdr.detectChanges();\n } else {\n const maxSection = sections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev));\n this.handleActive(maxSection.linkComponent);\n }\n this.setVisible();\n }\n\n private clearActive(): void {\n this.links.forEach(i => {\n i.unsetActive();\n });\n }\n\n private handleActive(linkComponent: ThyAnchorLink): void {\n this.clearActive();\n linkComponent.setActive();\n const linkNode = linkComponent.getLinkTitleElement();\n const horizontalAnchor = this.thyDirection === 'horizontal';\n\n this.ink.nativeElement.style.top = horizontalAnchor ? '' : `${linkNode.offsetTop}px`;\n this.ink.nativeElement.style.height = horizontalAnchor ? '' : `${linkNode.clientHeight}px`;\n this.ink.nativeElement.style.left = horizontalAnchor ? `${linkNode.offsetLeft}px` : '';\n this.ink.nativeElement.style.width = horizontalAnchor ? `${linkNode.clientWidth}px` : '';\n this.visible = true;\n this.setVisible();\n this.thyScroll.emit(linkComponent);\n }\n\n private setVisible(): void {\n const visible = this.visible;\n const visibleClassname = 'visible';\n if (this.ink) {\n if (visible) {\n this.renderer.addClass(this.ink.nativeElement, visibleClassname);\n } else {\n this.renderer.removeClass(this.ink.nativeElement, visibleClassname);\n }\n }\n }\n\n handleScrollTo(linkComponent: ThyAnchorLink): void {\n const container: HTMLElement = this.container instanceof HTMLElement ? this.container : this.document;\n const linkElement: HTMLElement = container.querySelector(linkComponent.thyHref);\n if (!linkElement) {\n return;\n }\n\n this.animating = true;\n const containerScrollTop = this.scrollService.getScroll(this.getContainer());\n const elementOffsetTop = getOffset(linkElement, this.getContainer()).top;\n const targetScrollTop = containerScrollTop + elementOffsetTop - (this.thyOffsetTop || 0);\n this.scrollService.scrollTo(this.getContainer(), targetScrollTop, undefined, () => {\n this.animating = false;\n });\n this.handleActive(linkComponent);\n this.thyClick.emit(linkComponent);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { thyOffsetTop, thyContainer } = changes;\n if (thyOffsetTop) {\n this.wrapperStyle = {\n 'max-height': `calc(100vh - ${this.thyOffsetTop}px)`\n };\n }\n if (thyContainer && this.thyContainer) {\n const container = this.thyContainer;\n this.container = typeof container === 'string' ? this.document.querySelector(container) : container;\n this.registerScrollEvent();\n }\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { ThyAnchor } from './anchor.component';\nimport { NgIf } from '@angular/common';\n\n/**\n * 锚点链接组件,可供锚点跳转\n * @name thy-anchor-link,thyAnchorLink\n */\n@Component({\n selector: 'thy-link,thy-anchor-link',\n exportAs: 'thyLink,thyAnchorLink',\n preserveWhitespaces: false,\n template: `\n <a #linkTitle (click)=\"goToClick($event)\" href=\"{{ thyHref }}\" class=\"thy-anchor-link-title\" title=\"{{ title }}\">\n <span *ngIf=\"title; else titleTemplate || thyTemplate\">{{ title }}</span>\n </a>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgIf]\n})\nexport class ThyAnchorLink implements OnInit, OnDestroy {\n title: string | null = '';\n\n titleTemplate?: TemplateRef<any>;\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 锚点链接\n */\n @Input() thyHref = '#';\n\n /**\n * 文字内容\n */\n @Input()\n set thyTitle(value: string | TemplateRef<void>) {\n if (value instanceof TemplateRef) {\n this.title = null;\n this.titleTemplate = value;\n } else {\n this.title = value;\n }\n }\n\n @ContentChild('thyTemplate') thyTemplate!: TemplateRef<void>;\n\n @ViewChild('linkTitle', { static: true }) linkTitle!: ElementRef<HTMLAnchorElement>;\n\n constructor(\n public elementRef: ElementRef,\n private anchorComponent: ThyAnchor,\n private platform: Platform\n ) {\n this.hostRenderer.addClass('thy-anchor-link');\n if (elementRef.nativeElement.tagName.toLowerCase() === 'thy-link') {\n console.warn(`'thy-link' and 'thyLink' are deprecated, please use 'thy-anchor-link' and 'thyAnchorLink' instead.`);\n }\n }\n\n ngOnInit(): void {\n this.anchorComponent.registerLink(this);\n }\n\n getLinkTitleElement(): HTMLAnchorElement {\n return this.linkTitle.nativeElement;\n }\n\n setActive(): void {\n this.hostRenderer.addClass('thy-anchor-link-active');\n }\n\n unsetActive(): void {\n this.hostRenderer.removeClass('thy-anchor-link-active');\n }\n\n goToClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n if (this.platform.isBrowser) {\n this.anchorComponent.handleScrollTo(this);\n }\n }\n\n ngOnDestroy(): void {\n this.anchorComponent.unregisterLink(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { ThyAnchor } from './anchor.component';\nimport { ThyAnchorLink } from './anchor-link.component';\nimport { ThyAffixModule } from 'ngx-tethys/affix';\n\n@NgModule({\n exports: [ThyAnchor, ThyAnchorLink],\n imports: [CommonModule, PlatformModule, ThyAffixModule, ThyAnchor, ThyAnchorLink]\n})\nexport class ThyAnchorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ThyAnchor","i2"],"mappings":"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"}
|
|
@@ -630,7 +630,7 @@ class ThyTreeSelectNodes {
|
|
|
630
630
|
return index;
|
|
631
631
|
}
|
|
632
632
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, deps: [{ token: ThyTreeSelect }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
633
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container
|
|
633
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyTreeSelectNodes, isStandalone: true, selector: "thy-tree-select-nodes", inputs: { treeNodes: "treeNodes", thyVirtualScroll: "thyVirtualScroll" }, host: { properties: { "attr.tabindex": "-1", "class": "this.class" } }, ngImport: i0, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container\n *ngFor=\"let node of nodeList\"\n [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\"\n *ngIf=\"!treeNodeIsHidden(node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\" [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template\n *ngIf=\"treeNodeTemplateRef; else defaultNodeText\"\n [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }] }); }
|
|
634
634
|
}
|
|
635
635
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyTreeSelectNodes, decorators: [{
|
|
636
636
|
type: Component,
|
|
@@ -648,7 +648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
648
648
|
ThyFlexibleText
|
|
649
649
|
], host: {
|
|
650
650
|
'[attr.tabindex]': '-1'
|
|
651
|
-
}, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container
|
|
651
|
+
}, template: "<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container\n *ngFor=\"let node of nodeList\"\n [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\"\n *ngIf=\"!treeNodeIsHidden(node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\" [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template\n *ngIf=\"treeNodeTemplateRef; else defaultNodeText\"\n [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
|
|
652
652
|
}], ctorParameters: () => [{ type: ThyTreeSelect }], propDecorators: { class: [{
|
|
653
653
|
type: HostBinding,
|
|
654
654
|
args: ['class']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-tree-select.mjs","sources":["../../../src/tree-select/tree-select.component.ts","../../../src/tree-select/tree-select.component.html","../../../src/tree-select/tree-select-nodes.component.html","../../../src/tree-select/module.ts","../../../src/tree-select/ngx-tethys-tree-select.ts"],"sourcesContent":["import { EXPANDED_DROPDOWN_POSITIONS, scaleYMotion, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelectControl, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTreeNode } from 'ngx-tethys/tree';\nimport { coerceBooleanProperty, elementMatchClosest, isArray, isObject, produce, warnDeprecation } from 'ngx-tethys/util';\nimport { Observable, of, Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ViewportRuler } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ThyTreeSelectNode, ThyTreeSelectType } from './tree-select.class';\n\ntype InputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nexport function filterTreeData(treeNodes: ThyTreeSelectNode[], searchText: string, searchKey: string = 'name') {\n const filterNodes = (node: ThyTreeSelectNode, result: ThyTreeSelectNode[]) => {\n if (node[searchKey] && node[searchKey].indexOf(searchText) !== -1) {\n result.push(node);\n return result;\n }\n if (Array.isArray(node.children)) {\n const nodes = node.children.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n if (nodes.length) {\n const parentNode = { ...node, children: nodes, expand: true };\n result.push(parentNode);\n }\n }\n return result;\n };\n const treeData = treeNodes.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n return treeData;\n}\n\n/**\n * 树选择组件\n * @name thy-tree-select\n * @order 10\n */\n@Component({\n selector: 'thy-tree-select',\n templateUrl: './tree-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTreeSelect),\n multi: true\n }\n ],\n standalone: true,\n imports: [\n CdkOverlayOrigin,\n ThySelectControl,\n NgIf,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n forwardRef(() => ThyTreeSelectNodes),\n ThyStopPropagationDirective\n ],\n host: {\n '[attr.tabindex]': 'tabIndex',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n animations: [scaleYMotion]\n})\nexport class ThyTreeSelect extends TabIndexDisabledControlValueAccessorMixin implements OnInit, OnDestroy, ControlValueAccessor {\n @HostBinding('class.thy-select-custom') treeSelectClass = true;\n\n @HostBinding('class.thy-select') isTreeSelect = true;\n\n // 菜单是否展开\n @HostBinding('class.menu-is-opened') expandTreeSelectOptions = false;\n\n @HostBinding('class.thy-select-custom--multiple') isMulti = false;\n\n public treeNodes: ThyTreeSelectNode[];\n\n public selectedValue: any;\n\n public selectedNode: ThyTreeSelectNode;\n\n public selectedNodes: ThyTreeSelectNode[] = [];\n\n public flattenTreeNodes: ThyTreeSelectNode[] = [];\n\n virtualTreeNodes: ThyTreeSelectNode[] = [];\n\n public cdkConnectOverlayWidth = 0;\n\n public expandedDropdownPositions = EXPANDED_DROPDOWN_POSITIONS;\n\n public icons: { expand: string; collapse: string; gap?: number } = {\n expand: 'angle-down',\n collapse: 'angle-right',\n gap: 15\n };\n\n private initialled = false;\n\n private destroy$ = new Subject<void>();\n\n public valueIsObject = false;\n\n originTreeNodes: ThyTreeSelectNode[];\n\n @ContentChild('thyTreeSelectTriggerDisplay')\n thyTreeSelectTriggerDisplayRef: TemplateRef<any>;\n\n @ContentChild('treeNodeTemplate')\n treeNodeTemplateRef: TemplateRef<any>;\n\n @ViewChild(CdkOverlayOrigin, { static: true }) cdkOverlayOrigin: CdkOverlayOrigin;\n\n @ViewChild(CdkConnectedOverlay, { static: true }) cdkConnectedOverlay: CdkConnectedOverlay;\n\n @ViewChild('customDisplayTemplate', { static: true }) customDisplayTemplate: TemplateRef<any>;\n\n /**\n * treeNodes 数据\n * @type ThyTreeSelectNode[]\n */\n @Input()\n set thyTreeNodes(value: ThyTreeSelectNode[]) {\n this.treeNodes = value;\n this.originTreeNodes = value;\n if (this.initialled) {\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n }\n }\n\n /**\n * 开启虚拟滚动\n */\n @Input({ transform: coerceBooleanProperty }) thyVirtualScroll: boolean = false;\n\n /**\n * 树节点的唯一标识\n * @type string\n */\n @Input() thyPrimaryKey = '_id';\n\n /**\n * 树节点的显示的字段 key\n * @type string\n */\n @Input() thyShowKey = 'name';\n\n @Input() thyChildCountKey = 'childCount';\n\n /**\n * 单选时,是否显示清除按钮,当为 true 时,显示清除按钮\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyAllowClear: boolean;\n\n /**\n * 是否多选\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyMultiple = false;\n\n /**\n * 是否禁用树选择器,当为 true 禁用树选择器\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyDisable = false;\n\n get thyDisabled(): boolean {\n return this.thyDisable;\n }\n\n /**\n * 树选择框默认文字\n * @type string\n */\n @Input() thyPlaceholder = '请选择节点';\n\n get placeholder() {\n return this.thyPlaceholder;\n }\n\n /**\n * 控制树选择的输入框大小\n * @type xs | sm | md | default | lg\n */\n @Input() thySize: InputSize;\n\n /**\n * 改变空选项的情况下的提示文本\n * @type string\n */\n @Input() thyEmptyOptionsText = '暂时没有数据可选';\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级高于 thyHiddenNodeFn\n * @type string\n */\n @Input() thyHiddenNodeKey = 'hidden';\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级高于 thyDisableNodeFn\n * @type string\n */\n @Input() thyDisableNodeKey = 'disabled';\n\n /**\n * 是否异步加载节点的子节点(显示加载状态),当为 true 时,异步获取\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyAsyncNode = false;\n\n /**\n * 是否展示全名\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowWholeName = false;\n\n /**\n * 是否展示搜索\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowSearch = false;\n\n /**\n * 图标类型,支持 default | especial,已废弃\n * @deprecated\n */\n @Input()\n set thyIconType(type: ThyTreeSelectType) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('This parameter has been deprecation');\n }\n // if (type === 'especial') {\n // this.icons = { expand: 'minus-square', collapse: 'plus-square', gap: 20 };\n // } else {\n // this.icons = { expand: 'caret-right-down', collapse: 'caret-right', gap: 15 };\n // }\n }\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级低于 thyHiddenNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden\n */\n @Input() thyHiddenNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden;\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级低于 thyDisableNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled\n */\n @Input() thyDisableNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled;\n\n /**\n * 获取节点的子节点,返回 Observable<ThyTreeSelectNode>。\n * @default (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([])\n */\n @Input() thyGetNodeChildren: (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([]);\n\n /**\n * 树选择组件展开和折叠状态事件\n */\n @Output() thyExpandStatusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _getNgModelType() {\n if (this.thyMultiple) {\n this.valueIsObject = !this.selectedValue[0] || isObject(this.selectedValue[0]);\n } else {\n this.valueIsObject = isObject(this.selectedValue);\n }\n }\n\n public buildFlattenTreeNodes() {\n this.virtualTreeNodes = this.getFlattenTreeNodes(this.treeNodes);\n }\n\n private getFlattenTreeNodes(rootTrees: ThyTreeSelectNode[] = this.treeNodes) {\n const forEachTree = (tree: ThyTreeSelectNode[], fn: any, result: ThyTreeSelectNode[] = []) => {\n tree.forEach(item => {\n result.push(item);\n if (item.children && fn(item)) {\n forEachTree(item.children, fn, result);\n }\n });\n return result;\n };\n return forEachTree(rootTrees, (node: ThyTreeSelectNode) => !!node.expand);\n }\n\n writeValue(value: any): void {\n this.selectedValue = value;\n\n if (value) {\n this._getNgModelType();\n }\n this.setSelectedNodes();\n }\n\n constructor(\n public elementRef: ElementRef,\n private ngZone: NgZone,\n private ref: ChangeDetectorRef,\n @Inject(PLATFORM_ID) private platformId: string,\n private thyClickDispatcher: ThyClickDispatcher,\n private viewportRuler: ViewportRuler\n ) {\n super();\n }\n\n ngOnInit() {\n this.isMulti = this.thyMultiple;\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n this.initialled = true;\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n event.stopPropagation();\n if (!this.elementRef.nativeElement.contains(event.target) && this.expandTreeSelectOptions) {\n this.ngZone.run(() => {\n this.close();\n this.ref.markForCheck();\n });\n }\n });\n }\n this.viewportRuler\n .change()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.init();\n });\n }\n\n onFocus($event: FocusEvent) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement?.focus();\n }\n\n onBlur($event: FocusEvent) {\n // 1. Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n // 2. 打开选择框后如果点击弹框内导致 input 失焦,无需触发 onTouchedFn\n if (elementMatchClosest($event?.relatedTarget as HTMLElement, ['thy-tree-select', 'thy-tree-select-nodes'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n get selectedValueObject() {\n return this.thyMultiple ? this.selectedNodes : this.selectedNode;\n }\n\n searchValue(searchText: string) {\n this.treeNodes = filterTreeData(this.originTreeNodes, searchText.trim(), this.thyShowKey);\n }\n\n public setPosition() {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n });\n }\n\n private init() {\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n private flattenNodes(\n nodes: ThyTreeSelectNode[] = [],\n resultNodes: ThyTreeSelectNode[] = [],\n parentPrimaryValue: string[] = []\n ): ThyTreeSelectNode[] {\n resultNodes = resultNodes.concat(nodes);\n let nodesLeafs: ThyTreeSelectNode[] = [];\n (nodes || []).forEach(item => {\n item.parentValues = parentPrimaryValue;\n item.level = item.parentValues.length;\n if (item.children && isArray(item.children)) {\n const nodeLeafs = this.flattenNodes(item.children, resultNodes, [...parentPrimaryValue, item[this.thyPrimaryKey]]);\n nodesLeafs = [...nodesLeafs, ...nodeLeafs];\n }\n });\n return [...nodes, ...nodesLeafs];\n }\n\n private _findTreeNode(value: string): ThyTreeSelectNode {\n return (this.flattenTreeNodes || []).find(item => item[this.thyPrimaryKey] === value);\n }\n\n private setSelectedNodes() {\n if (this.selectedValue) {\n // 多选数据初始化\n if (this.thyMultiple) {\n if (this.selectedValue.length > 0) {\n if (this.valueIsObject && Object.keys(this.selectedValue[0]).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item[this.thyPrimaryKey]);\n });\n } else {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item);\n });\n }\n }\n } else {\n // 单选数据初始化\n if (this.valueIsObject) {\n if (Object.keys(this.selectedValue).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNode = this._findTreeNode(this.selectedValue[this.thyPrimaryKey]);\n }\n } else {\n this.selectedNode = this._findTreeNode(this.selectedValue);\n }\n }\n } else {\n this.selectedNodes = [];\n this.selectedNode = null;\n }\n }\n\n openSelectPop() {\n if (this.thyDisable) {\n return;\n }\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n this.expandTreeSelectOptions = !this.expandTreeSelectOptions;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n }\n\n close() {\n if (this.expandTreeSelectOptions) {\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this.onTouchedFn();\n }\n }\n\n clearSelectedValue(event: Event) {\n event.stopPropagation();\n this.selectedValue = null;\n this.selectedNode = null;\n this.selectedNodes = [];\n this.onChangeFn(this.selectedValue);\n }\n\n private _changeSelectValue() {\n if (this.valueIsObject) {\n this.selectedValue = this.thyMultiple ? this.selectedNodes : this.selectedNode;\n } else {\n this.selectedValue = this.thyMultiple\n ? this.selectedNodes.map(item => item[this.thyPrimaryKey])\n : this.selectedNode[this.thyPrimaryKey];\n }\n this.onChangeFn(this.selectedValue);\n if (!this.thyMultiple) {\n this.onTouchedFn();\n }\n }\n\n removeMultipleSelectedNode(event: { item: ThyTreeSelectNode; $eventOrigin: Event }) {\n this.removeSelectedNode(event.item, event.$eventOrigin);\n }\n\n // thyMultiple = true 时,移除数据时调用\n removeSelectedNode(node: ThyTreeSelectNode, event?: Event) {\n if (event) {\n event.stopPropagation();\n }\n if (this.thyDisable) {\n return;\n }\n if (this.thyMultiple) {\n this.selectedNodes = produce(this.selectedNodes).remove((item: ThyTreeSelectNode) => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n });\n this._changeSelectValue();\n }\n }\n\n selectNode(node: ThyTreeSelectNode) {\n if (!this.thyMultiple) {\n this.selectedNode = node;\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this._changeSelectValue();\n } else {\n if (\n this.selectedNodes.find(item => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n })\n ) {\n this.removeSelectedNode(node);\n } else {\n this.selectedNodes = produce(this.selectedNodes).add(node);\n this._changeSelectValue();\n }\n }\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n const result = this.thyGetNodeChildren(node);\n if (result && result.subscribe) {\n result.pipe().subscribe((data: ThyTreeSelectNode[]) => {\n const nodes = this.flattenNodes(data, this.flattenTreeNodes, [...node.parentValues, node[this.thyPrimaryKey]]);\n const otherNodes = nodes.filter((item: ThyTreeNode) => {\n return !this.flattenTreeNodes.find(hasItem => {\n return hasItem[this.thyPrimaryKey] === item[this.thyPrimaryKey];\n });\n });\n this.flattenTreeNodes = [...this.flattenTreeNodes, ...otherNodes];\n node.children = data;\n });\n return result;\n }\n }\n}\n\nconst DEFAULT_ITEM_SIZE = 40;\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-tree-select-nodes',\n templateUrl: './tree-select-nodes.component.html',\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyEmpty,\n NgClass,\n NgStyle,\n ThyIcon,\n ThyFlexibleText\n ],\n host: {\n '[attr.tabindex]': '-1'\n }\n})\nexport class ThyTreeSelectNodes implements OnInit {\n @HostBinding('class') class: string;\n\n nodeList: ThyTreeSelectNode[] = [];\n\n @Input() set treeNodes(value: ThyTreeSelectNode[]) {\n const treeSelectHeight = this.defaultItemSize * value.length;\n // 父级设置了max-height:300 & padding:10 0; 故此处最多设置280,否则将出现滚动条\n this.thyVirtualHeight = treeSelectHeight > 300 ? '280px' : `${treeSelectHeight}px`;\n this.nodeList = value;\n this.hasNodeChildren = this.nodeList.every(\n item => !item.hasOwnProperty('children') || (!item?.children?.length && !item?.childCount)\n );\n }\n\n @Input() thyVirtualScroll: boolean = false;\n\n public primaryKey = this.parent.thyPrimaryKey;\n\n public showKey = this.parent.thyShowKey;\n\n public isMultiple = this.parent.thyMultiple;\n\n public valueIsObject = this.parent.valueIsObject;\n\n public selectedValue = this.parent.selectedValue;\n\n public childCountKey = this.parent.thyChildCountKey;\n\n public treeNodeTemplateRef = this.parent.treeNodeTemplateRef;\n\n public defaultItemSize = DEFAULT_ITEM_SIZE;\n\n public thyVirtualHeight: string = null;\n\n public hasNodeChildren: boolean = false;\n\n constructor(public parent: ThyTreeSelect) {}\n\n ngOnInit() {\n this.class = this.isMultiple ? 'thy-tree-select-dropdown thy-tree-select-dropdown-multiple' : 'thy-tree-select-dropdown';\n }\n\n treeNodeIsSelected(node: ThyTreeSelectNode) {\n if (this.parent.thyMultiple) {\n return (this.parent.selectedNodes || []).find(item => {\n return item[this.primaryKey] === node[this.primaryKey];\n });\n } else {\n return this.parent.selectedNode && this.parent.selectedNode[this.primaryKey] === node[this.primaryKey];\n }\n }\n\n treeNodeIsHidden(node: ThyTreeSelectNode) {\n if (this.parent.thyHiddenNodeKey) {\n return node[this.parent.thyHiddenNodeKey];\n }\n if (this.parent.thyHiddenNodeFn) {\n return this.parent.thyHiddenNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsDisable(node: ThyTreeSelectNode) {\n if (this.parent.thyDisableNodeKey) {\n return node[this.parent.thyDisableNodeKey];\n }\n if (this.parent.thyDisableNodeFn) {\n return this.parent.thyDisableNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsExpand(node: ThyTreeSelectNode) {\n let isSelectedNodeParent = false;\n if (this.parent.thyMultiple) {\n isSelectedNodeParent = !!(this.parent.selectedNodes || []).find(item => {\n return item.parentValues.indexOf(node[this.primaryKey]) > -1;\n });\n } else {\n isSelectedNodeParent = this.parent.selectedNode\n ? this.parent.selectedNode.parentValues.indexOf(node[this.primaryKey]) > -1\n : false;\n }\n const isExpand = node.expand || (Object.keys(node).indexOf('expand') < 0 && isSelectedNodeParent);\n node.expand = isExpand;\n return isExpand;\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n return this.parent.getNodeChildren(node);\n }\n\n selectTreeNode(event: Event, node: ThyTreeSelectNode) {\n if (!this.treeNodeIsDisable(node)) {\n this.parent.selectNode(node);\n }\n }\n\n nodeExpandToggle(event: Event, node: ThyTreeSelectNode) {\n event.stopPropagation();\n if (Object.keys(node).indexOf('expand') > -1) {\n node.expand = !node.expand;\n } else {\n if (this.treeNodeIsExpand(node)) {\n node.expand = false;\n } else {\n node.expand = true;\n }\n }\n\n if (node.expand && this.parent.thyAsyncNode) {\n this.getNodeChildren(node).subscribe(() => {\n this.parent.setPosition();\n });\n }\n // this.parent.setPosition();\n if (this.thyVirtualScroll) {\n this.parent.buildFlattenTreeNodes();\n }\n }\n\n tabTrackBy(index: number, item: ThyTreeSelectNode) {\n return index;\n }\n}\n","<div\n cdkOverlayOrigin\n thySelectControl\n (click)=\"openSelectPop()\"\n #origin=\"cdkOverlayOrigin\"\n [thyPanelOpened]=\"expandTreeSelectOptions\"\n [thySelectedOptions]=\"selectedValueObject\"\n [thyIsMultiple]=\"thyMultiple\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"placeholder\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyDisabled]=\"thyDisable\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnClear)=\"clearSelectedValue($event)\"\n (thyOnRemove)=\"removeMultipleSelectedNode($event)\"\n (thyOnSearch)=\"searchValue($event)\">\n <ng-template #customDisplayTemplate let-node>\n <ng-container *ngIf=\"thyTreeSelectTriggerDisplayRef; else noneTemplate\">\n <ng-template [ngTemplateOutlet]=\"thyTreeSelectTriggerDisplayRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n <ng-template #noneTemplate>\n {{ node[thyShowKey] }}\n </ng-template>\n </ng-template>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayMinWidth]=\"cdkConnectOverlayWidth\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayOpen]=\"expandTreeSelectOptions\"\n cdkConnectedOverlayTransformOriginOn=\".thy-tree-select-dropdown\"\n [cdkConnectedOverlayPositions]=\"expandedDropdownPositions\"\n (detach)=\"close()\">\n <thy-tree-select-nodes\n thyStopPropagation\n [thyVirtualScroll]=\"thyVirtualScroll\"\n [treeNodes]=\"thyVirtualScroll ? virtualTreeNodes : treeNodes\"\n [@scaleYMotion]=\"'enter'\">\n </thy-tree-select-nodes>\n</ng-template>\n","<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container *ngFor=\"let node of nodeList\" [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\"\n [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a class=\"thy-option-item\" [ngClass]=\"{ active: treeNodeIsSelected(node) }\"\n [class.disabled]=\"treeNodeIsDisable(node)\" [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n [ngClass]=\"{ 'pl-0': hasNodeChildren }\" (click)=\"selectTreeNode($event, node)\" *ngIf=\"!treeNodeIsHidden(node)\">\n <span class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\"\n [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template *ngIf=\"treeNodeTemplateRef; else defaultNodeText\" [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThySelectCommonModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyTreeSelect, ThyTreeSelectNodes } from './tree-select.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyListModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThySharedModule,\n ThyTreeSelect,\n ThyTreeSelectNodes\n ],\n exports: [ThyTreeSelect, ThyTreeSelectNodes]\n})\nexport class ThyTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-tree-select.mjs","sources":["../../../src/tree-select/tree-select.component.ts","../../../src/tree-select/tree-select.component.html","../../../src/tree-select/tree-select-nodes.component.html","../../../src/tree-select/module.ts","../../../src/tree-select/ngx-tethys-tree-select.ts"],"sourcesContent":["import { EXPANDED_DROPDOWN_POSITIONS, scaleYMotion, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelectControl, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTreeNode } from 'ngx-tethys/tree';\nimport { coerceBooleanProperty, elementMatchClosest, isArray, isObject, produce, warnDeprecation } from 'ngx-tethys/util';\nimport { Observable, of, Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ViewportRuler } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ThyTreeSelectNode, ThyTreeSelectType } from './tree-select.class';\n\ntype InputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nexport function filterTreeData(treeNodes: ThyTreeSelectNode[], searchText: string, searchKey: string = 'name') {\n const filterNodes = (node: ThyTreeSelectNode, result: ThyTreeSelectNode[]) => {\n if (node[searchKey] && node[searchKey].indexOf(searchText) !== -1) {\n result.push(node);\n return result;\n }\n if (Array.isArray(node.children)) {\n const nodes = node.children.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n if (nodes.length) {\n const parentNode = { ...node, children: nodes, expand: true };\n result.push(parentNode);\n }\n }\n return result;\n };\n const treeData = treeNodes.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n return treeData;\n}\n\n/**\n * 树选择组件\n * @name thy-tree-select\n * @order 10\n */\n@Component({\n selector: 'thy-tree-select',\n templateUrl: './tree-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTreeSelect),\n multi: true\n }\n ],\n standalone: true,\n imports: [\n CdkOverlayOrigin,\n ThySelectControl,\n NgIf,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n forwardRef(() => ThyTreeSelectNodes),\n ThyStopPropagationDirective\n ],\n host: {\n '[attr.tabindex]': 'tabIndex',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n animations: [scaleYMotion]\n})\nexport class ThyTreeSelect extends TabIndexDisabledControlValueAccessorMixin implements OnInit, OnDestroy, ControlValueAccessor {\n @HostBinding('class.thy-select-custom') treeSelectClass = true;\n\n @HostBinding('class.thy-select') isTreeSelect = true;\n\n // 菜单是否展开\n @HostBinding('class.menu-is-opened') expandTreeSelectOptions = false;\n\n @HostBinding('class.thy-select-custom--multiple') isMulti = false;\n\n public treeNodes: ThyTreeSelectNode[];\n\n public selectedValue: any;\n\n public selectedNode: ThyTreeSelectNode;\n\n public selectedNodes: ThyTreeSelectNode[] = [];\n\n public flattenTreeNodes: ThyTreeSelectNode[] = [];\n\n virtualTreeNodes: ThyTreeSelectNode[] = [];\n\n public cdkConnectOverlayWidth = 0;\n\n public expandedDropdownPositions = EXPANDED_DROPDOWN_POSITIONS;\n\n public icons: { expand: string; collapse: string; gap?: number } = {\n expand: 'angle-down',\n collapse: 'angle-right',\n gap: 15\n };\n\n private initialled = false;\n\n private destroy$ = new Subject<void>();\n\n public valueIsObject = false;\n\n originTreeNodes: ThyTreeSelectNode[];\n\n @ContentChild('thyTreeSelectTriggerDisplay')\n thyTreeSelectTriggerDisplayRef: TemplateRef<any>;\n\n @ContentChild('treeNodeTemplate')\n treeNodeTemplateRef: TemplateRef<any>;\n\n @ViewChild(CdkOverlayOrigin, { static: true }) cdkOverlayOrigin: CdkOverlayOrigin;\n\n @ViewChild(CdkConnectedOverlay, { static: true }) cdkConnectedOverlay: CdkConnectedOverlay;\n\n @ViewChild('customDisplayTemplate', { static: true }) customDisplayTemplate: TemplateRef<any>;\n\n /**\n * treeNodes 数据\n * @type ThyTreeSelectNode[]\n */\n @Input()\n set thyTreeNodes(value: ThyTreeSelectNode[]) {\n this.treeNodes = value;\n this.originTreeNodes = value;\n if (this.initialled) {\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n }\n }\n\n /**\n * 开启虚拟滚动\n */\n @Input({ transform: coerceBooleanProperty }) thyVirtualScroll: boolean = false;\n\n /**\n * 树节点的唯一标识\n * @type string\n */\n @Input() thyPrimaryKey = '_id';\n\n /**\n * 树节点的显示的字段 key\n * @type string\n */\n @Input() thyShowKey = 'name';\n\n @Input() thyChildCountKey = 'childCount';\n\n /**\n * 单选时,是否显示清除按钮,当为 true 时,显示清除按钮\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyAllowClear: boolean;\n\n /**\n * 是否多选\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyMultiple = false;\n\n /**\n * 是否禁用树选择器,当为 true 禁用树选择器\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyDisable = false;\n\n get thyDisabled(): boolean {\n return this.thyDisable;\n }\n\n /**\n * 树选择框默认文字\n * @type string\n */\n @Input() thyPlaceholder = '请选择节点';\n\n get placeholder() {\n return this.thyPlaceholder;\n }\n\n /**\n * 控制树选择的输入框大小\n * @type xs | sm | md | default | lg\n */\n @Input() thySize: InputSize;\n\n /**\n * 改变空选项的情况下的提示文本\n * @type string\n */\n @Input() thyEmptyOptionsText = '暂时没有数据可选';\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级高于 thyHiddenNodeFn\n * @type string\n */\n @Input() thyHiddenNodeKey = 'hidden';\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级高于 thyDisableNodeFn\n * @type string\n */\n @Input() thyDisableNodeKey = 'disabled';\n\n /**\n * 是否异步加载节点的子节点(显示加载状态),当为 true 时,异步获取\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyAsyncNode = false;\n\n /**\n * 是否展示全名\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowWholeName = false;\n\n /**\n * 是否展示搜索\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowSearch = false;\n\n /**\n * 图标类型,支持 default | especial,已废弃\n * @deprecated\n */\n @Input()\n set thyIconType(type: ThyTreeSelectType) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('This parameter has been deprecation');\n }\n // if (type === 'especial') {\n // this.icons = { expand: 'minus-square', collapse: 'plus-square', gap: 20 };\n // } else {\n // this.icons = { expand: 'caret-right-down', collapse: 'caret-right', gap: 15 };\n // }\n }\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级低于 thyHiddenNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden\n */\n @Input() thyHiddenNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden;\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级低于 thyDisableNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled\n */\n @Input() thyDisableNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled;\n\n /**\n * 获取节点的子节点,返回 Observable<ThyTreeSelectNode>。\n * @default (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([])\n */\n @Input() thyGetNodeChildren: (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([]);\n\n /**\n * 树选择组件展开和折叠状态事件\n */\n @Output() thyExpandStatusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _getNgModelType() {\n if (this.thyMultiple) {\n this.valueIsObject = !this.selectedValue[0] || isObject(this.selectedValue[0]);\n } else {\n this.valueIsObject = isObject(this.selectedValue);\n }\n }\n\n public buildFlattenTreeNodes() {\n this.virtualTreeNodes = this.getFlattenTreeNodes(this.treeNodes);\n }\n\n private getFlattenTreeNodes(rootTrees: ThyTreeSelectNode[] = this.treeNodes) {\n const forEachTree = (tree: ThyTreeSelectNode[], fn: any, result: ThyTreeSelectNode[] = []) => {\n tree.forEach(item => {\n result.push(item);\n if (item.children && fn(item)) {\n forEachTree(item.children, fn, result);\n }\n });\n return result;\n };\n return forEachTree(rootTrees, (node: ThyTreeSelectNode) => !!node.expand);\n }\n\n writeValue(value: any): void {\n this.selectedValue = value;\n\n if (value) {\n this._getNgModelType();\n }\n this.setSelectedNodes();\n }\n\n constructor(\n public elementRef: ElementRef,\n private ngZone: NgZone,\n private ref: ChangeDetectorRef,\n @Inject(PLATFORM_ID) private platformId: string,\n private thyClickDispatcher: ThyClickDispatcher,\n private viewportRuler: ViewportRuler\n ) {\n super();\n }\n\n ngOnInit() {\n this.isMulti = this.thyMultiple;\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n this.initialled = true;\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n event.stopPropagation();\n if (!this.elementRef.nativeElement.contains(event.target) && this.expandTreeSelectOptions) {\n this.ngZone.run(() => {\n this.close();\n this.ref.markForCheck();\n });\n }\n });\n }\n this.viewportRuler\n .change()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.init();\n });\n }\n\n onFocus($event: FocusEvent) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement?.focus();\n }\n\n onBlur($event: FocusEvent) {\n // 1. Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n // 2. 打开选择框后如果点击弹框内导致 input 失焦,无需触发 onTouchedFn\n if (elementMatchClosest($event?.relatedTarget as HTMLElement, ['thy-tree-select', 'thy-tree-select-nodes'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n get selectedValueObject() {\n return this.thyMultiple ? this.selectedNodes : this.selectedNode;\n }\n\n searchValue(searchText: string) {\n this.treeNodes = filterTreeData(this.originTreeNodes, searchText.trim(), this.thyShowKey);\n }\n\n public setPosition() {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n });\n }\n\n private init() {\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n private flattenNodes(\n nodes: ThyTreeSelectNode[] = [],\n resultNodes: ThyTreeSelectNode[] = [],\n parentPrimaryValue: string[] = []\n ): ThyTreeSelectNode[] {\n resultNodes = resultNodes.concat(nodes);\n let nodesLeafs: ThyTreeSelectNode[] = [];\n (nodes || []).forEach(item => {\n item.parentValues = parentPrimaryValue;\n item.level = item.parentValues.length;\n if (item.children && isArray(item.children)) {\n const nodeLeafs = this.flattenNodes(item.children, resultNodes, [...parentPrimaryValue, item[this.thyPrimaryKey]]);\n nodesLeafs = [...nodesLeafs, ...nodeLeafs];\n }\n });\n return [...nodes, ...nodesLeafs];\n }\n\n private _findTreeNode(value: string): ThyTreeSelectNode {\n return (this.flattenTreeNodes || []).find(item => item[this.thyPrimaryKey] === value);\n }\n\n private setSelectedNodes() {\n if (this.selectedValue) {\n // 多选数据初始化\n if (this.thyMultiple) {\n if (this.selectedValue.length > 0) {\n if (this.valueIsObject && Object.keys(this.selectedValue[0]).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item[this.thyPrimaryKey]);\n });\n } else {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item);\n });\n }\n }\n } else {\n // 单选数据初始化\n if (this.valueIsObject) {\n if (Object.keys(this.selectedValue).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNode = this._findTreeNode(this.selectedValue[this.thyPrimaryKey]);\n }\n } else {\n this.selectedNode = this._findTreeNode(this.selectedValue);\n }\n }\n } else {\n this.selectedNodes = [];\n this.selectedNode = null;\n }\n }\n\n openSelectPop() {\n if (this.thyDisable) {\n return;\n }\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n this.expandTreeSelectOptions = !this.expandTreeSelectOptions;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n }\n\n close() {\n if (this.expandTreeSelectOptions) {\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this.onTouchedFn();\n }\n }\n\n clearSelectedValue(event: Event) {\n event.stopPropagation();\n this.selectedValue = null;\n this.selectedNode = null;\n this.selectedNodes = [];\n this.onChangeFn(this.selectedValue);\n }\n\n private _changeSelectValue() {\n if (this.valueIsObject) {\n this.selectedValue = this.thyMultiple ? this.selectedNodes : this.selectedNode;\n } else {\n this.selectedValue = this.thyMultiple\n ? this.selectedNodes.map(item => item[this.thyPrimaryKey])\n : this.selectedNode[this.thyPrimaryKey];\n }\n this.onChangeFn(this.selectedValue);\n if (!this.thyMultiple) {\n this.onTouchedFn();\n }\n }\n\n removeMultipleSelectedNode(event: { item: ThyTreeSelectNode; $eventOrigin: Event }) {\n this.removeSelectedNode(event.item, event.$eventOrigin);\n }\n\n // thyMultiple = true 时,移除数据时调用\n removeSelectedNode(node: ThyTreeSelectNode, event?: Event) {\n if (event) {\n event.stopPropagation();\n }\n if (this.thyDisable) {\n return;\n }\n if (this.thyMultiple) {\n this.selectedNodes = produce(this.selectedNodes).remove((item: ThyTreeSelectNode) => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n });\n this._changeSelectValue();\n }\n }\n\n selectNode(node: ThyTreeSelectNode) {\n if (!this.thyMultiple) {\n this.selectedNode = node;\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this._changeSelectValue();\n } else {\n if (\n this.selectedNodes.find(item => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n })\n ) {\n this.removeSelectedNode(node);\n } else {\n this.selectedNodes = produce(this.selectedNodes).add(node);\n this._changeSelectValue();\n }\n }\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n const result = this.thyGetNodeChildren(node);\n if (result && result.subscribe) {\n result.pipe().subscribe((data: ThyTreeSelectNode[]) => {\n const nodes = this.flattenNodes(data, this.flattenTreeNodes, [...node.parentValues, node[this.thyPrimaryKey]]);\n const otherNodes = nodes.filter((item: ThyTreeNode) => {\n return !this.flattenTreeNodes.find(hasItem => {\n return hasItem[this.thyPrimaryKey] === item[this.thyPrimaryKey];\n });\n });\n this.flattenTreeNodes = [...this.flattenTreeNodes, ...otherNodes];\n node.children = data;\n });\n return result;\n }\n }\n}\n\nconst DEFAULT_ITEM_SIZE = 40;\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-tree-select-nodes',\n templateUrl: './tree-select-nodes.component.html',\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyEmpty,\n NgClass,\n NgStyle,\n ThyIcon,\n ThyFlexibleText\n ],\n host: {\n '[attr.tabindex]': '-1'\n }\n})\nexport class ThyTreeSelectNodes implements OnInit {\n @HostBinding('class') class: string;\n\n nodeList: ThyTreeSelectNode[] = [];\n\n @Input() set treeNodes(value: ThyTreeSelectNode[]) {\n const treeSelectHeight = this.defaultItemSize * value.length;\n // 父级设置了max-height:300 & padding:10 0; 故此处最多设置280,否则将出现滚动条\n this.thyVirtualHeight = treeSelectHeight > 300 ? '280px' : `${treeSelectHeight}px`;\n this.nodeList = value;\n this.hasNodeChildren = this.nodeList.every(\n item => !item.hasOwnProperty('children') || (!item?.children?.length && !item?.childCount)\n );\n }\n\n @Input() thyVirtualScroll: boolean = false;\n\n public primaryKey = this.parent.thyPrimaryKey;\n\n public showKey = this.parent.thyShowKey;\n\n public isMultiple = this.parent.thyMultiple;\n\n public valueIsObject = this.parent.valueIsObject;\n\n public selectedValue = this.parent.selectedValue;\n\n public childCountKey = this.parent.thyChildCountKey;\n\n public treeNodeTemplateRef = this.parent.treeNodeTemplateRef;\n\n public defaultItemSize = DEFAULT_ITEM_SIZE;\n\n public thyVirtualHeight: string = null;\n\n public hasNodeChildren: boolean = false;\n\n constructor(public parent: ThyTreeSelect) {}\n\n ngOnInit() {\n this.class = this.isMultiple ? 'thy-tree-select-dropdown thy-tree-select-dropdown-multiple' : 'thy-tree-select-dropdown';\n }\n\n treeNodeIsSelected(node: ThyTreeSelectNode) {\n if (this.parent.thyMultiple) {\n return (this.parent.selectedNodes || []).find(item => {\n return item[this.primaryKey] === node[this.primaryKey];\n });\n } else {\n return this.parent.selectedNode && this.parent.selectedNode[this.primaryKey] === node[this.primaryKey];\n }\n }\n\n treeNodeIsHidden(node: ThyTreeSelectNode) {\n if (this.parent.thyHiddenNodeKey) {\n return node[this.parent.thyHiddenNodeKey];\n }\n if (this.parent.thyHiddenNodeFn) {\n return this.parent.thyHiddenNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsDisable(node: ThyTreeSelectNode) {\n if (this.parent.thyDisableNodeKey) {\n return node[this.parent.thyDisableNodeKey];\n }\n if (this.parent.thyDisableNodeFn) {\n return this.parent.thyDisableNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsExpand(node: ThyTreeSelectNode) {\n let isSelectedNodeParent = false;\n if (this.parent.thyMultiple) {\n isSelectedNodeParent = !!(this.parent.selectedNodes || []).find(item => {\n return item.parentValues.indexOf(node[this.primaryKey]) > -1;\n });\n } else {\n isSelectedNodeParent = this.parent.selectedNode\n ? this.parent.selectedNode.parentValues.indexOf(node[this.primaryKey]) > -1\n : false;\n }\n const isExpand = node.expand || (Object.keys(node).indexOf('expand') < 0 && isSelectedNodeParent);\n node.expand = isExpand;\n return isExpand;\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n return this.parent.getNodeChildren(node);\n }\n\n selectTreeNode(event: Event, node: ThyTreeSelectNode) {\n if (!this.treeNodeIsDisable(node)) {\n this.parent.selectNode(node);\n }\n }\n\n nodeExpandToggle(event: Event, node: ThyTreeSelectNode) {\n event.stopPropagation();\n if (Object.keys(node).indexOf('expand') > -1) {\n node.expand = !node.expand;\n } else {\n if (this.treeNodeIsExpand(node)) {\n node.expand = false;\n } else {\n node.expand = true;\n }\n }\n\n if (node.expand && this.parent.thyAsyncNode) {\n this.getNodeChildren(node).subscribe(() => {\n this.parent.setPosition();\n });\n }\n // this.parent.setPosition();\n if (this.thyVirtualScroll) {\n this.parent.buildFlattenTreeNodes();\n }\n }\n\n tabTrackBy(index: number, item: ThyTreeSelectNode) {\n return index;\n }\n}\n","<div\n cdkOverlayOrigin\n thySelectControl\n (click)=\"openSelectPop()\"\n #origin=\"cdkOverlayOrigin\"\n [thyPanelOpened]=\"expandTreeSelectOptions\"\n [thySelectedOptions]=\"selectedValueObject\"\n [thyIsMultiple]=\"thyMultiple\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"placeholder\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyDisabled]=\"thyDisable\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnClear)=\"clearSelectedValue($event)\"\n (thyOnRemove)=\"removeMultipleSelectedNode($event)\"\n (thyOnSearch)=\"searchValue($event)\">\n <ng-template #customDisplayTemplate let-node>\n <ng-container *ngIf=\"thyTreeSelectTriggerDisplayRef; else noneTemplate\">\n <ng-template [ngTemplateOutlet]=\"thyTreeSelectTriggerDisplayRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n <ng-template #noneTemplate>\n {{ node[thyShowKey] }}\n </ng-template>\n </ng-template>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayMinWidth]=\"cdkConnectOverlayWidth\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayOpen]=\"expandTreeSelectOptions\"\n cdkConnectedOverlayTransformOriginOn=\".thy-tree-select-dropdown\"\n [cdkConnectedOverlayPositions]=\"expandedDropdownPositions\"\n (detach)=\"close()\">\n <thy-tree-select-nodes\n thyStopPropagation\n [thyVirtualScroll]=\"thyVirtualScroll\"\n [treeNodes]=\"thyVirtualScroll ? virtualTreeNodes : treeNodes\"\n [@scaleYMotion]=\"'enter'\">\n </thy-tree-select-nodes>\n</ng-template>\n","<div class=\"thy-tree-select-options\" *ngIf=\"nodeList?.length > 0; else emptyPlaceholder\">\n <div class=\"thy-tree-select-node\">\n <ng-container *ngIf=\"!thyVirtualScroll\">\n <ng-container\n *ngFor=\"let node of nodeList\"\n [ngTemplateOutlet]=\"treeSelectNode\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n </ng-container>\n\n <cdk-virtual-scroll-viewport #viewport *ngIf=\"thyVirtualScroll\" [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n\n<ng-template #emptyPlaceholder>\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"parent.thyEmptyOptionsText\"></thy-empty>\n</ng-template>\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\"\n *ngIf=\"!treeNodeIsHidden(node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon class=\"node-expand-icon\" [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n <ng-template\n *ngIf=\"treeNodeTemplateRef; else defaultNodeText\"\n [ngTemplateOutlet]=\"treeNodeTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n <ng-template #defaultNodeText>\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n </ng-template>\n </span>\n <thy-icon class=\"checked-icon\" *ngIf=\"isMultiple\" thyIconName=\"check\"></thy-icon>\n </a>\n <ng-container *ngIf=\"!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0\">\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" *ngFor=\"let node of node.children\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThySelectCommonModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyTreeSelect, ThyTreeSelectNodes } from './tree-select.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyListModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThySharedModule,\n ThyTreeSelect,\n ThyTreeSelectNodes\n ],\n exports: [ThyTreeSelect, ThyTreeSelectNodes]\n})\nexport class ThyTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.0.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('18.0.3');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
|
package/package.json
CHANGED
package/schematics/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "18.0.
|
|
1
|
+
export declare const VERSION = "18.0.3";
|
package/schematics/version.js
CHANGED