ngx-tethys 17.0.15 → 17.0.16
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 +9 -0
- package/esm2022/cascader/cascader.component.mjs +8 -1
- package/esm2022/version.mjs +2 -2
- package/fesm2022/ngx-tethys-cascader.mjs +7 -0
- package/fesm2022/ngx-tethys-cascader.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,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [17.0.16](https://github.com/atinc/ngx-tethys/compare/17.0.15...17.0.16) (2024-07-25)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **cascader:** update position when sub menu appears off screen #INFR-12988 ([#3126](https://github.com/atinc/ngx-tethys/issues/3126)) ([a3d568b](https://github.com/atinc/ngx-tethys/commit/a3d568b9c006cf37dc89db3d80008247fba485ad)), closes [#INFR-12988](https://github.com/atinc/ngx-tethys/issues/INFR-12988)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## [17.0.15](https://github.com/atinc/ngx-tethys/compare/17.0.14...17.0.15) (2024-07-24)
|
|
6
15
|
|
|
7
16
|
|
|
@@ -352,6 +352,13 @@ export class ThyCascader extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
352
352
|
clickOption(option, index, event) {
|
|
353
353
|
this.thyCascaderService.removeCustomOption();
|
|
354
354
|
this.thyCascaderService.clickOption(option, index, event, this.selectOption);
|
|
355
|
+
if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {
|
|
356
|
+
// Make sure to calculate and update the position after the submenu is opened
|
|
357
|
+
this.cdr.detectChanges();
|
|
358
|
+
// Update the position to prevent the submenu from appearing off-screen
|
|
359
|
+
this.cdkConnectedOverlay.overlayRef.updatePosition();
|
|
360
|
+
this.cdr.markForCheck();
|
|
361
|
+
}
|
|
355
362
|
}
|
|
356
363
|
mouseoverOption(option, index, event) {
|
|
357
364
|
if (event) {
|
|
@@ -762,4 +769,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
762
769
|
type: HostListener,
|
|
763
770
|
args: ['mouseleave', ['$event']]
|
|
764
771
|
}] } });
|
|
765
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZix5Q0FBeUMsRUFDekMsa0JBQWtCLEVBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXVDLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQTBELE1BQU0sc0JBQXNCLENBQUM7QUFDckksT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFl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LGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFLRyxTQUFTO3NCQUFsQixNQUFNO2dCQVFHLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsUUFBUTtzQkFBakIsTUFBTTtnQkFLRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBRWdELGVBQWU7c0JBQXJFLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUVXLHdCQUF3QjtzQkFBdkYsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRVosbUJBQW1CO3NCQUFwRSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFVSxPQUFPO3NCQUFoRSxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFcEMsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUVDLElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTTtnQkF5UlYsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVzFCLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVS9CLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQge1xuICAgIEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUyxcbiAgICBTY3JvbGxUb1NlcnZpY2UsXG4gICAgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4sXG4gICAgVGh5Q2xpY2tEaXNwYXRjaGVyXG59IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvZW1wdHknO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBTZWxlY3RDb250cm9sU2l6ZSwgU2VsZWN0T3B0aW9uQmFzZSwgVGh5U2VsZWN0Q29udHJvbCB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZWxlbWVudE1hdGNoQ2xvc2VzdCwgaXNFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLCBDb25uZWN0aW9uUG9zaXRpb25QYWlyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuXG5pbXBvcnQgeyBUaHlDYXNjYWRlck9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY2FzY2FkZXItbGkuY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jYXNjYWRlci1zZWFyY2gtb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXIsIFRoeUNhc2NhZGVyT3B0aW9uLCBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbiwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVGh5Q2FzY2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9jYXNjYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IHNjYWxlWU1vdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlEaXZpZGVyIH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcblxuLyoqXG4gKiDnuqfogZTpgInmi6noj5zljZVcbiAqIEBuYW1lIHRoeS1jYXNjYWRlclxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1jYXNjYWRlcixbdGh5LWNhc2NhZGVyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlDYXNjYWRlciksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBUaHlDYXNjYWRlclNlcnZpY2VcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6IGB0YWJJbmRleGAsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgTmdJZixcbiAgICAgICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIFRoeUNhc2NhZGVyT3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeURpdmlkZXJcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtzY2FsZVlNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIFRoeUNhc2NhZGVyXG4gICAgZXh0ZW5kcyBUYWJJbmRleERpc2FibGVkQ29udHJvbFZhbHVlQWNjZXNzb3JNaXhpblxuICAgIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXRcbntcbiAgICAvKipcbiAgICAgKiDpgInpobnnmoTlrp7pmYXlgLznmoTlsZ7mgKflkI1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlWYWx1ZVByb3BlcnR5ID0gJ3ZhbHVlJztcblxuICAgIC8qKlxuICAgICAqIOmAiemhueeahOaYvuekuuWAvOeahOWxnuaAp+WQjVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUxhYmVsUHJvcGVydHkgPSAnbGFiZWwnO1xuXG4gICAgLyoqXG4gICAgICog5o+P6L+w6L6T5YWl5a2X5q616aKE5pyf5YC855qE566A55+t55qE5o+Q56S65L+h5oGvXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5UGxhY2Vob2xkZXIgPSAn6K+36YCJ5oupJztcblxuICAgIC8qKlxuICAgICAqIOaOp+WItuWkp+Wwj++8iDTnp43vvIlcbiAgICAgKiBAdHlwZSAnc20nIHwgJ21kJyB8ICdsZycgfCAnJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNpemU6IFNlbGVjdENvbnRyb2xTaXplID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7poblcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlck9wdGlvbltdXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlPcHRpb25zKG9wdGlvbnM6IFRoeUNhc2NhZGVyT3B0aW9uW10gfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID8gW29wdGlvbnNdIDogW107XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmluaXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICBpZiAodGhpcy50aHlDYXNjYWRlclNlcnZpY2UuZGVmYXVsdFZhbHVlICYmIGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pbml0T3B0aW9ucygwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iemAiemhuVxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyT3B0aW9uW11cbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlDdXN0b21PcHRpb25zKG9wdGlvbnM6IFRoeUNhc2NhZGVyT3B0aW9uW10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmN1c3RvbU9wdGlvbnMgPSAob3B0aW9ucyB8fCBbXSkubWFwKGl0ZW0gPT4gKHsgLi4uaXRlbSB9KSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUN1c3RvbU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jdXN0b21PcHRpb25zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeCueWHu+eItue6p+iPnOWNlemAiemhueaXtu+8jOWPr+mAmui/h+ivpeWHveaVsOWIpOaWreaYr+WQpuWFgeiuuOWAvOeahOWPmOWMllxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNoYW5nZU9uOiAob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgbGV2ZWw6IG51bWJlcikgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOeCueWHu+mhueaXtu+8jOihqOWNleaYr+WQpuWKqOaAgeWxleekuuaVsOaNrumhuVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlDaGFuZ2VPblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5pi+56S66L6T5YWl5qGGXG4gICAgICogQHR5cGUgYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dJbnB1dCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDnlKjmiLfoh6rlrprkuYnpgInpobnmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeU9wdGlvblJlbmRlcjogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICAvKipcbiAgICAgKiDnlKjmiLfoh6rlrprkuYnmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUxhYmVsUmVuZGVyKHZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMubGFiZWxSZW5kZXJUcGwgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0xhYmVsUmVuZGVyVGVtcGxhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBpc0xhYmVsUmVuZGVyVGVtcGxhdGU6IHRoaXMuaXNMYWJlbFJlbmRlclRlbXBsYXRlIH0pO1xuICAgIH1cblxuICAgIGdldCB0aHlMYWJlbFJlbmRlcigpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxSZW5kZXJUcGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55So5LqO5Yqo5oCB5Yqg6L296YCJ6aG5XG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUxvYWREYXRhKHZhbHVlOiAobm9kZTogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4PzogbnVtYmVyKSA9PiBQcm9taXNlTGlrZTxhbnk+KSB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyh7IGxvYWREYXRhOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TG9hZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZT8uY2FzY2FkZXJPcHRpb25zPy5sb2FkRGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLbop6blj5HnirbmgIEsIOaUr+aMgSBgY2xpY2tgIHwgYGhvdmVyYFxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyVHJpZ2dlclR5cGUgfCBUaHlDYXNjYWRlclRyaWdnZXJUeXBlW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlUcmlnZ2VyQWN0aW9uOiBUaHlDYXNjYWRlclRyaWdnZXJUeXBlIHwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZVtdID0gWydjbGljayddO1xuXG4gICAgLyoqXG4gICAgICog6byg5qCH57uP6L+H5LiL5pa55YiX6KGo6aG55pe277yM5piv5ZCm6Ieq5Yqo5bGV5byA5YiX6KGo77yM5pSv5oyBIGBjbGlja2AgfCBgaG92ZXJgXG4gICAgICogQHR5cGUgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyIHwgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlFeHBhbmRUcmlnZ2VyQWN0aW9uOiBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXIgfCBUaHlDYXNjYWRlckV4cGFuZFRyaWdnZXJbXSA9IFsnY2xpY2snXTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeU1lbnVTdHlsZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5ieaQnOe0ouagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNlYXJjaExpc3RTdHlsZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguexu+WQjVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1lbnVDbGFzc05hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1lbnVDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q2xhc3MoKTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TWVudUNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tZW51Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiHquWumuS5iea1ruWxguWIl+exu+WQjVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNvbHVtbkNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29sdW1uQ2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUNvbHVtbkNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+q6K+7XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIG92ZXJyaWRlIHNldCB0aHlEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB0aHlEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOepuueKtuaAgeS4i+eahOWxleekuuaWh+Wtl1xuICAgICAqIEBkZWZhdWx0IOaaguaXoOWPr+mAiemhuVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5U3RhdGVUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbXB0eVN0YXRlVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWkmumAiVxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgc2V0IHRoeU11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBpc011bHRpcGxlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5aSa6YCJ5pe25pyA5aSn5pi+56S655qE5qCH562+5pWw6YeP77yMMCDooajnpLrkuI3pmZDliLZcbiAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlNYXhUYWdDb3VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbku4XlhYHorrjpgInmi6nlj7blrZDpoblcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlJc09ubHlTZWxlY3RMZWFmID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOWIneWni+WMluaXtu+8jOaYr+WQpuWxleW8gOmdouadv1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5QXV0b0V4cGFuZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaUr+aMgeaQnOe0olxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5U2hvd1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5aSa6YCJ6YCJ5Lit6aG555qE5bGV56S65pa55byP77yM6buY6K6k5Li656m677yM5riy5p+T5paH5a2X5qih5p2/77yM5Lyg5YWldGFn77yM5riy5p+T5bGV56S65qih5p2/LFxuICAgICAqIEBkZWZhdWx0ICcn772cdGFnXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5UHJlc2V0OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuacieW5leW4g1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUhhc0JhY2tkcm9wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOWAvOWPkeeUn+WPmOWMluaXtuinpuWPke+8jOi/lOWbnumAieaLqemhueeahOWAvFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxhbnlbXT5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIOWAvOWPkeeUn+WPmOWMluaXtuinpuWPke+8jOi/lOWbnumAieaLqemhueWIl+ihqFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxUaHlDYXNjYWRlck9wdGlvbltdPlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoeUNhc2NhZGVyT3B0aW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiDpgInmi6npgInpobnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgICAgIG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb247XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgfT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlIOaaguaXoOWunueOsFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlEZXNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmuIXnqbrpgInpobnml7bop6blj5FcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDkuIvmi4npgInpobnlsZXlvIDlkozmipjlj6DnirbmgIHkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RXhwYW5kU3RhdHVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjYXNjYWRlck9wdGlvbnMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FzY2FkZXJPcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjYXNjYWRlck9wdGlvbkNvbnRhaW5lcnMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2FzY2FkZXJPcHRpb25Db250YWluZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXksIHsgc3RhdGljOiB0cnVlIH0pIGNka0Nvbm5lY3RlZE92ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG5cbiAgICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgdHJpZ2dlcjogRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51OiBFbGVtZW50UmVmO1xuXG4gICAgcHVibGljIGRyb3BEb3duUG9zaXRpb24gPSAnYm90dG9tJztcblxuICAgIHB1YmxpYyBtZW51VmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGlzTGFiZWxSZW5kZXJUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHRyaWdnZXJSZWN0OiBET01SZWN0O1xuXG4gICAgcHVibGljIGVtcHR5U3RhdGVUZXh0ID0gJ+aaguaXoOWPr+mAiemhuSc7XG5cbiAgICBwcml2YXRlIHByZWZpeENscyA9ICd0aHktY2FzY2FkZXInO1xuXG4gICAgcHJpdmF0ZSBtZW51Q2xhc3NOYW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGNvbHVtbkNsYXNzTmFtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfbWVudUNvbHVtbkNsczogYW55O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIF9tZW51Q2xzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICAgIHByaXZhdGUgX2xhYmVsQ2xzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICAgIHByaXZhdGUgbGFiZWxSZW5kZXJUcGw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIGhvc3RSZW5kZXJlciA9IHVzZUhvc3RSZW5kZXJlcigpO1xuXG4gICAgcHVibGljIHBvc2l0aW9uczogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdO1xuXG4gICAgZ2V0IHNlbGVjdGVkKCk6IFNlbGVjdE9wdGlvbkJhc2UgfCBTZWxlY3RPcHRpb25CYXNlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlNdWx0aXBsZSA/IHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkIDogdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgfVxuICAgIHByaXZhdGUgaXNNdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG1lbnVNaW5XaWR0aCA9IDEyMjtcblxuICAgIHByaXZhdGUgc2VhcmNoVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0TGlzdCgpOiBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlYXJjaFJlc3VsdExpc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2hvd1NlYXJjaFBhbmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDop6PlhrPmkJzntKIm5aSa6YCJ55qE5oOF5Ya15LiL77yM54K55Ye75pCc57Si6aG55Lya5a+86Ie0IHBhbmVsIOmXqueDgVxuICAgICAqIOeUseS6jueCueWHu+WQju+8jHRoeVNlbGVjdGVkT3B0aW9uc+WPmOWMlu+8jOWvvOiHtCB0aHlTZWxlY3RDb250cm9sXG4gICAgICog5Y+I5Lya6Kem5Y+RIHNlYXJjaEZpbHRlciDlh73mlbDvvIzljbMgcmVzZXRTZWFyY2gg5Lya5omn6KGMXG4gICAgICog5Lya5a+86Ie05oGi5aSN57qn6IGU54q25oCB5YaN5Y+Y5Li65pCc57Si54q25oCBXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGluZ1NlYXJjaFN0YXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlPy5pc0xvYWRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyQ2hhbmdlRm46ICgpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIHJlc2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRNZW51Q29sdW1uQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRMYWJlbENsYXNzKCk7XG4gICAgICAgIHRoaXMuaW5pdFBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgbGFiZWxQcm9wZXJ0eTogdGhpcy50aHlMYWJlbFByb3BlcnR5LFxuICAgICAgICAgICAgdmFsdWVQcm9wZXJ0eTogdGhpcy50aHlWYWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgaXNNdWx0aXBsZTogdGhpcy5pc011bHRpcGxlLFxuICAgICAgICAgICAgaXNPbmx5U2VsZWN0TGVhZjogdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmLFxuICAgICAgICAgICAgaXNMYWJlbFJlbmRlclRlbXBsYXRlOiB0aGlzLmlzTGFiZWxSZW5kZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIGxvYWREYXRhOiB0aGlzLnRoeUxvYWREYXRhXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jYXNjYWRlclZhbHVlQ2hhbmdlKCkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlzVmFsdWVFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VGbihvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlbGVjdGlvbk1vZGVsRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aHlDbGVhci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudGh5U2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeUNoYW5nZS5lbWl0KG9wdGlvbnMudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyQ2hhbmdlRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VGbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy50aHlDbGlja0Rpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuY2xpY2tlZCgwKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLm1lbnU/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5QXV0b0V4cGFuZCkge1xuICAgICAgICAgICAgdGltZXIoMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0aHlJc09ubHlTZWxlY3RMZWFmJ10pIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldENhc2NhZGVyT3B0aW9ucyh7IGlzT25seVNlbGVjdExlYWY6IGNoYW5nZXNbJ3RoeUlzT25seVNlbGVjdExlYWYnXS5jdXJyZW50VmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgY2FzY2FkZXJQb3NpdGlvbjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdID0gRVhQQU5ERURfRFJPUERPV05fUE9TSVRJT05TLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gY2FzY2FkZXJQb3NpdGlvbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uud3JpdGVDYXNjYWRlclZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3NpdGlvbkNoYW5nZShwb3NpdGlvbjogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcG9zaXRpb24uY29ubmVjdGlvblBhaXIub3JpZ2luWSA9PT0gJ2JvdHRvbScgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICBpZiAodGhpcy5kcm9wRG93blBvc2l0aW9uICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wRG93blBvc2l0aW9uID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmF0ZWRPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaXNBY3RpdmF0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NlbGVjdGVkT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIGF0dGFjaGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbkNoYW5nZS5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWN0aXZlRWxlbWVudEludG9WaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsQWN0aXZlRWxlbWVudEludG9WaWV3KCkge1xuICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9ucyA9IHRoaXMuY2FzY2FkZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3RoeS1jYXNjYWRlci1tZW51LWl0ZW0tYWN0aXZlJykpXG4gICAgICAgICAgICAgICAgLy8gZm9yIG11bHRpcGxlIG1vZGVcbiAgICAgICAgICAgICAgICAuc2xpY2UoLXRoaXMuY2FzY2FkZXJPcHRpb25Db250YWluZXJzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZXJPcHRpb25Db250YWluZXJzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IGFjdGl2ZU9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBTY3JvbGxUb1NlcnZpY2Uuc2Nyb2xsVG9FbGVtZW50KGFjdGl2ZU9wdGlvbnNbaW5kZXhdLm5hdGl2ZUVsZW1lbnQsIGl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNZW51VmlzaWJsZShtZW51VmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZSAhPT0gbWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudVZpc2libGUgPSBtZW51VmlzaWJsZTtcblxuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaW5pdEFjdGl2YXRlZE9wdGlvbnModGhpcy5tZW51VmlzaWJsZSk7XG4gICAgICAgICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnNldE1lbnVDbGFzcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0ID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRoeUV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KG1lbnVWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUNscygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUNscztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1lbnVDbGFzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVudUNscyA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbWVudXNgXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbWVudXMtaGlkZGVuYF06ICF0aGlzLm1lbnVWaXNpYmxlLFxuICAgICAgICAgICAgW2Ake3RoaXMudGh5TWVudUNsYXNzTmFtZX1gXTogdGhpcy50aHlNZW51Q2xhc3NOYW1lLFxuICAgICAgICAgICAgW2B3LTEwMGBdOiB0aGlzLmNvbHVtbnMubGVuZ3RoID09PSAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51Q29sdW1uQ2xzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51Q29sdW1uQ2xzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TWVudUNvbHVtbkNsYXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZW51Q29sdW1uQ2xzID0ge1xuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1tZW51YF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy50aHlDb2x1bW5DbGFzc05hbWV9YF06IHRoaXMudGh5Q29sdW1uQ2xhc3NOYW1lXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENscygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYWJlbENsYXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sYWJlbENscyA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyLWxhYmVsYF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXNob3ctc2VhcmNoYF06IGZhbHNlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1mb2N1c2VkYF06IGZhbHNlLFxuICAgICAgICAgICAgJ3RleHQtdHJ1bmNhdGUnOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDbGFzc01hcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xhc3NNYXAgPSB7XG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9YF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlcmBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS0ke3RoaXMudGh5U2l6ZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tcGlja2VyLWRpc2FibGVkYF06IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlci1vcGVuYF06IHRoaXMubWVudVZpc2libGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIudXBkYXRlQ2xhc3NCeU1hcChjbGFzc01hcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NsaWNrVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnY2xpY2snO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24uaW5kZXhPZignY2xpY2snKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0hvdmVyVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyaWdnZXJBY3Rpb24uaW5kZXhPZignaG92ZXInKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0hvdmVyRXhwYW5kVHJpZ2dlckFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRoeUV4cGFuZFRyaWdnZXJBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aHlFeHBhbmRUcmlnZ2VyQWN0aW9uID09PSAnaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUV4cGFuZFRyaWdnZXJBY3Rpb24uaW5kZXhPZignaG92ZXInKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyB0b2dnbGVDbGljaygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNDbGlja1RyaWdnZXJBY3Rpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZSghdGhpcy5tZW51VmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgdG9nZ2xlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5pc0hvdmVyVHJpZ2dlckFjdGlvbigpIHx8IHRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIHRvZ2dsZU1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaXNIb3ZlclRyaWdnZXJBY3Rpb24oKSB8fCAhdGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhvc3RFbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBtb3VzZVRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvc3RFbC5jb250YWlucyhtb3VzZVRhcmdldCkgfHxcbiAgICAgICAgICAgIG1vdXNlVGFyZ2V0Py5jbGFzc0xpc3QuY29udGFpbnMoJ2Nkay1vdmVybGF5LXBhbmUnKSB8fFxuICAgICAgICAgICAgbW91c2VUYXJnZXQ/LmNsYXNzTGlzdC5jb250YWlucygnY2RrLW92ZXJsYXktYmFja2Ryb3AnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0N1c3RvbU9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGlja09wdGlvbihvcHRpb24sIGluZGV4LCBldmVudCwgdGhpcy5zZWxlY3RPcHRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja09wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnJlbW92ZUN1c3RvbU9wdGlvbigpO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jbGlja09wdGlvbihvcHRpb24sIGluZGV4LCBldmVudCwgdGhpcy5zZWxlY3RPcHRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBtb3VzZW92ZXJPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLmRpc2FibGVkICYmICF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0hvdmVyRXhwYW5kVHJpZ2dlckFjdGlvbigpICYmICEob3B0aW9uICYmIG9wdGlvbi5kaXNhYmxlZCAmJiB0aGlzLmlzTXVsdGlwbGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVPcHRpb24ob3B0aW9uLCBpbmRleCwgZmFsc2UpO1xuICAgIH1cblxuICAgIG9uQmx1cihldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy8gVGFiIOiBmueEpuWQjuiHquWKqOiBmueEpuWIsCBpbnB1dCDovpPlhaXmoYbvvIzmraTliIbmlK/kuIvnm7TmjqXov5Tlm57vvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgaWYgKGVsZW1lbnRNYXRjaENsb3Nlc3QoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsnLnRoeS1jYXNjYWRlci1tZW51cycsICd0aHktY2FzY2FkZXInXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50TWF0Y2hDbG9zZXN0KGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50LCBbJy50aHktY2FzY2FkZXItbWVudXMnLCAndGh5LWNhc2NhZGVyJ10pKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaFBhbmVsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hSZXN1bHRMaXN0ID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWN0aXZlT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIsIHNlbGVjdDogYm9vbGVhbiwgbG9hZENoaWxkcmVuOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRBY3RpdmVPcHRpb24ob3B0aW9uLCBpbmRleCwgc2VsZWN0LCBsb2FkQ2hpbGRyZW4sIHRoaXMuc2VsZWN0T3B0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE9wdGlvbiA9IChvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICgob3B0aW9uLmlzTGVhZiB8fCAhdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmKSAmJiAhdGhpcy50aHlNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlTZWxlY3QuZW1pdCh7IG9wdGlvbiwgaW5kZXggfSk7XG4gICAgICAgIGNvbnN0IGlzT3B0aW9uQ2FuU2VsZWN0ID0gdGhpcy50aHlDaGFuZ2VPblNlbGVjdCAmJiAhdGhpcy5pc011bHRpcGxlO1xuICAgICAgICBpZiAob3B0aW9uLmlzTGVhZiB8fCAhdGhpcy50aHlJc09ubHlTZWxlY3RMZWFmIHx8IGlzT3B0aW9uQ2FuU2VsZWN0IHx8IHRoaXMuc2hvdWxkUGVyZm9ybVNlbGVjdGlvbihvcHRpb24sIGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VsZWN0T3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW1vdmVTZWxlY3RlZEl0ZW0oZXZlbnQ6IHsgaXRlbTogU2VsZWN0T3B0aW9uQmFzZTsgJGV2ZW50T3JpZ2luOiBFdmVudCB9KSB7XG4gICAgICAgIGV2ZW50LiRldmVudE9yaWdpbi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UucmVtb3ZlU2VsZWN0ZWRJdGVtKGV2ZW50Py5pdGVtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3VsZFBlcmZvcm1TZWxlY3Rpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgbGV2ZWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMudGh5Q2hhbmdlT24gPT09ICdmdW5jdGlvbicgPyB0aGlzLnRoeUNoYW5nZU9uKG9wdGlvbiwgbGV2ZWwpID09PSB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZnRlckNoYW5nZUZuID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlcjogVGh5Q2xpY2tEaXNwYXRjaGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwdWJsaWMgdGh5Q2FzY2FkZXJTZXJ2aWNlOiBUaHlDYXNjYWRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IFRoeUNhc2NhZGVyT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBpdGVtPy52YWx1ZSB8fCBpdGVtPy5faWQgfHwgaW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEZpbHRlcihzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzZWFyY2hUZXh0ICYmICF0aGlzLmlzU2VsZWN0aW5nU2VhcmNoU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFRleHQkLm5leHQoc2VhcmNoVGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VhcmNoKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIodGV4dCA9PiB0ZXh0ICE9PSAnJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgc2VhcmNoXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hJbkxvY2FsKHNlYXJjaFRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UucmVzZXRTZWFyY2goKTtcbiAgICAgICAgdGhpcy5zY3JvbGxBY3RpdmVFbGVtZW50SW50b1ZpZXcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0U2VhcmNoUmVzdWx0KHNlbGVjdE9wdGlvbkRhdGE6IFRoeUNhc2NhZGVyU2VhcmNoT3B0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5Um93VmFsdWU6IHNlbGVjdGVkT3B0aW9ucyB9ID0gc2VsZWN0T3B0aW9uRGF0YTtcbiAgICAgICAgaWYgKHNlbGVjdE9wdGlvbkRhdGEuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlT3B0aW9uKGl0ZW0sIGluZGV4LCBpbmRleCA9PT0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGluZ1NlYXJjaFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbkRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luU2VhcmNoUmVzdWx0TGlzdCA9IHRoaXMuc2VhcmNoUmVzdWx0TGlzdDtcbiAgICAgICAgICAgIC8vIOS/neaMgeaQnOe0oumAiemhuVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dTZWFyY2hQYW5lbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2VhcmNoUmVzdWx0TGlzdCA9IG9yaWdpblNlYXJjaFJlc3VsdExpc3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGluZ1NlYXJjaFN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlc2l6ZS5vYnNlcnZlKHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5ICYmIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNka092ZXJsYXlPcmlnaW4gI29yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIiAjdHJpZ2dlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoeVNob3dJbnB1dFwiPlxuICAgIDxkaXZcbiAgICAgIHRoeVNlbGVjdENvbnRyb2xcbiAgICAgIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICAgICAgW3RoeVNpemVdPVwidGh5U2l6ZVwiXG4gICAgICBbdGh5QWxsb3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgIFt0aHlTZWxlY3RlZE9wdGlvbnNdPVwic2VsZWN0ZWRcIlxuICAgICAgW3RoeU1heFRhZ0NvdW50XT1cInRoeU1heFRhZ0NvdW50XCJcbiAgICAgICh0aHlPblJlbW92ZSk9XCJyZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KVwiXG4gICAgICAodGh5T25DbGVhcik9XCJjbGVhclNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICh0aHlPbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgKHRoeU9uU2VhcmNoKT1cInNlYXJjaEZpbHRlcigkZXZlbnQpXCJcbiAgICAgIFt0aHlEaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbdGh5SXNNdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICBbdGh5UGFuZWxPcGVuZWRdPVwibWVudVZpc2libGVcIlxuICAgICAgW3RoeVBsYWNlaG9sZGVyXT1cInRoeVBsYWNlaG9sZGVyXCJcbiAgICAgIFtjdXN0b21EaXNwbGF5VGVtcGxhdGVdPVwiY3VzdG9tRGlzcGxheVRlbXBsYXRlXCJcbiAgICAgIFt0aHlQcmVzZXRdPVwidGh5UHJlc2V0XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbURpc3BsYXlUZW1wbGF0ZSBsZXQtdmFsdWU+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImxhYmVsQ2xzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xhYmVsUmVuZGVyVGVtcGxhdGU7IGVsc2UgbGFiZWxUZW1wbGF0ZVwiPnt7IHZhbHVlLmxhYmVsVGV4dCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0aHlMYWJlbFJlbmRlclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ2YWx1ZS5sYWJlbFJlbmRlckNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BdPVwidGh5SGFzQmFja2Ryb3BcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cInRoeS1jYXNjYWRlci1iYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm9yaWdpblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cInBvc2l0aW9uc1wiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwibWVudU1pbldpZHRoXCJcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uPVwiLnRoeS1jYXNjYWRlci1tZW51c1wiXG4gIChiYWNrZHJvcENsaWNrKT1cImNsb3NlTWVudSgpXCJcbiAgKGRldGFjaCk9XCJjbG9zZU1lbnUoKVwiXG4gIChhdHRhY2gpPVwiYXR0YWNoZWQoKVwiXG4gIChwb3NpdGlvbkNoYW5nZSk9XCJwb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm1lbnVWaXNpYmxlXCI+XG4gIDxkaXZcbiAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgI21lbnVcbiAgICBbbmdDbGFzc109XCJtZW51Q2xzXCJcbiAgICBbbmdTdHlsZV09XCJ0aHlNZW51U3R5bGVcIlxuICAgIChtb3VzZWxlYXZlKT1cInRvZ2dsZU1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgW0BzY2FsZVlNb3Rpb25dPVwiJ2VudGVyJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTaG93U2VhcmNoUGFuZWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zLmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiPlxuICAgICAgICA8dWwgI2Nhc2NhZGVyT3B0aW9uQ29udGFpbmVycyAqbmdGb3I9XCJsZXQgb3B0aW9ucyBvZiBjb2x1bW5zOyBsZXQgaSA9IGluZGV4OyBsZXQgaXNGaXJzdCA9IGZpcnN0XCIgW25nQ2xhc3NdPVwibWVudUNvbHVtbkNsc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aHlDdXN0b21PcHRpb25zICYmIHRoeUN1c3RvbU9wdGlvbnMubGVuZ3RoID4gMCAmJiBpc0ZpcnN0XCI+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgI2Nhc2NhZGVyT3B0aW9uc1xuICAgICAgICAgICAgICB0aHktY2FzY2FkZXItb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21PcHQgb2YgdGh5Q3VzdG9tT3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgW29wdGlvbl09XCJjdXN0b21PcHRcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICAgICAgICBbaXNPbmx5U2VsZWN0TGVhZl09XCJ0aHlJc09ubHlTZWxlY3RMZWFmXCJcbiAgICAgICAgICAgICAgW2xhYmVsUHJvcGVydHldPVwidGh5TGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwiaXNBY3RpdmF0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgIFtoYWxmU2VsZWN0ZWRdPVwiaXNIYWxmU2VsZWN0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkT3B0aW9uKGN1c3RvbU9wdCwgMClcIlxuICAgICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cImNsaWNrQ3VzdG9tT3B0aW9uKGN1c3RvbU9wdCwgMCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0N1c3RvbU9wdGlvbihjdXN0b21PcHQsIDAsICRldmVudClcIlxuICAgICAgICAgICAgICAobW91c2VvdmVyKT1cIm1vdXNlb3Zlck9wdGlvbihjdXN0b21PcHQsIDAsICRldmVudClcIj48L2xpPlxuICAgICAgICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXktMSBteC00XCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgI2Nhc2NhZGVyT3B0aW9uc1xuICAgICAgICAgICAgdGh5LWNhc2NhZGVyLW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgICAgICAgIFtpc09ubHlTZWxlY3RMZWFmXT1cInRoeUlzT25seVNlbGVjdExlYWZcIlxuICAgICAgICAgICAgW2xhYmVsUHJvcGVydHldPVwidGh5TGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICBbYWN0aXZlXT1cImlzQWN0aXZhdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgW2hhbGZTZWxlY3RlZF09XCJpc0hhbGZTZWxlY3RlZE9wdGlvbihvcHRpb24sIGkpXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgW29wdGlvblJlbmRlcl09XCJ0aHlPcHRpb25SZW5kZXJcIlxuICAgICAgICAgICAgKHRvZ2dsZVNlbGVjdENoYW5nZSk9XCJjbGlja09wdGlvbihvcHRpb24sIGksICRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cIm1vdXNlb3Zlck9wdGlvbihvcHRpb24sIGksICRldmVudClcIj48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd1NlYXJjaFBhbmVsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoUmVzdWx0TGlzdC5sZW5ndGg7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJ0aHktY2FzY2FkZXItc2VhcmNoLWxpc3QgcHktM1wiIFtuZ1N0eWxlXT1cInRoeVNlYXJjaExpc3RTdHlsZVwiPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgdGh5LWNhc2NhZGVyLXNlYXJjaC1vcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlYXJjaFJlc3VsdExpc3RcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgICAgICAgIFtpc09ubHlTZWxlY3RMZWFmXT1cInRoeUlzT25seVNlbGVjdExlYWZcIlxuICAgICAgICAgICAgW29wdGlvbl09XCJpdGVtXCJcbiAgICAgICAgICAgIFthY3RpdmVdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbb3B0aW9uUmVuZGVyXT1cInRoeU9wdGlvblJlbmRlclwiXG4gICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cInNlbGVjdFNlYXJjaFJlc3VsdCgkZXZlbnQpXCI+PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlQbGFjZWhvbGRlcj5cbiAgPGRpdiBjbGFzcz1cInRoeS1jYXNjYWRlci1lbXB0eS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7ICd3aWR0aC5weCc6IHRyaWdnZXJSZWN0Py53aWR0aCB9XCI+XG4gICAgPHRoeS1lbXB0eSBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiIHRoeVNpemU9XCJzbVwiIFt0aHlNZXNzYWdlXT1cImVtcHR5U3RhdGVUZXh0XCI+PC90aHktZW1wdHk+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
772
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZix5Q0FBeUMsRUFDekMsa0JBQWtCLEVBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXVDLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQTBELE1BQU0sc0JBQXNCLENBQUM7QUFDckksT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFl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aW1wb3J0IHsgU2FmZUFueSB9IGZyb20gJ25neC10ZXRoeXMvdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBFWFBBTkRFRF9EUk9QRE9XTl9QT1NJVElPTlMsXG4gICAgU2Nyb2xsVG9TZXJ2aWNlLFxuICAgIFRhYkluZGV4RGlzYWJsZWRDb250cm9sVmFsdWVBY2Nlc3Nvck1peGluLFxuICAgIFRoeUNsaWNrRGlzcGF0Y2hlclxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgU2VsZWN0Q29udHJvbFNpemUsIFNlbGVjdE9wdGlvbkJhc2UsIFRoeVNlbGVjdENvbnRyb2wgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGVsZW1lbnRNYXRjaENsb3Nlc3QsIGlzRW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENka092ZXJsYXlPcmlnaW4sIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdXNlSG9zdFJlbmRlcmVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZG9tJztcblxuaW1wb3J0IHsgVGh5Q2FzY2FkZXJPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2Nhc2NhZGVyLWxpLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaHlDYXNjYWRlclNlYXJjaE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY2FzY2FkZXItc2VhcmNoLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyLCBUaHlDYXNjYWRlck9wdGlvbiwgVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb24sIFRoeUNhc2NhZGVyVHJpZ2dlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRoeUNhc2NhZGVyU2VydmljZSB9IGZyb20gJy4vY2FzY2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBzY2FsZVlNb3Rpb24gfSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5RGl2aWRlciB9IGZyb20gJ25neC10ZXRoeXMvZGl2aWRlcic7XG5cbi8qKlxuICog57qn6IGU6YCJ5oup6I+c5Y2VXG4gKiBAbmFtZSB0aHktY2FzY2FkZXJcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktY2FzY2FkZXIsW3RoeS1jYXNjYWRlcl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXNjYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5Q2FzY2FkZXIpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgVGh5Q2FzY2FkZXJTZXJ2aWNlXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiBgdGFiSW5kZXhgLFxuICAgICAgICAnKGZvY3VzKSc6ICdvbkZvY3VzKCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uQmx1cigkZXZlbnQpJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFRoeVNlbGVjdENvbnRyb2wsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUaHlDYXNjYWRlck9wdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb25Db21wb25lbnQsXG4gICAgICAgIFRoeUVtcHR5LFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlEaXZpZGVyXG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbc2NhbGVZTW90aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlDYXNjYWRlclxuICAgIGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW5cbiAgICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0XG57XG4gICAgLyoqXG4gICAgICog6YCJ6aG555qE5a6e6ZmF5YC855qE5bGe5oCn5ZCNXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5VmFsdWVQcm9wZXJ0eSA9ICd2YWx1ZSc7XG5cbiAgICAvKipcbiAgICAgKiDpgInpobnnmoTmmL7npLrlgLznmoTlsZ7mgKflkI1cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlMYWJlbFByb3BlcnR5ID0gJ2xhYmVsJztcblxuICAgIC8qKlxuICAgICAqIOaPj+i/sOi+k+WFpeWtl+autemihOacn+WAvOeahOeugOefreeahOaPkOekuuS/oeaBr1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVBsYWNlaG9sZGVyID0gJ+ivt+mAieaLqSc7XG5cbiAgICAvKipcbiAgICAgKiDmjqfliLblpKflsI/vvIg056eN77yJXG4gICAgICogQHR5cGUgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJydcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTaXplOiBTZWxlY3RDb250cm9sU2l6ZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog5pWw5o2u6aG5XG4gICAgICogQHR5cGUgVGh5Q2FzY2FkZXJPcHRpb25bXVxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5T3B0aW9ucyhvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IFtvcHRpb25zXSA6IFtdO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pbml0Q29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgaWYgKHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmRlZmF1bHRWYWx1ZSAmJiBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuaW5pdE9wdGlvbnMoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnpgInpoblcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlck9wdGlvbltdXG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5Q3VzdG9tT3B0aW9ucyhvcHRpb25zOiBUaHlDYXNjYWRlck9wdGlvbltdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5jdXN0b21PcHRpb25zID0gKG9wdGlvbnMgfHwgW10pLm1hcChpdGVtID0+ICh7IC4uLml0ZW0gfSkpO1xuICAgIH1cblxuICAgIGdldCB0aHlDdXN0b21PcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY3VzdG9tT3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vniLbnuqfoj5zljZXpgInpobnml7bvvIzlj6/pgJrov4for6Xlh73mlbDliKTmlq3mmK/lkKblhYHorrjlgLznmoTlj5jljJZcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlDaGFuZ2VPbjogKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDngrnlh7vpobnml7bvvIzooajljZXmmK/lkKbliqjmgIHlsZXnpLrmlbDmja7poblcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5Q2hhbmdlT25TZWxlY3QgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYvuekuui+k+WFpeahhlxuICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlTaG93SW5wdXQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog55So5oi36Ieq5a6a5LmJ6YCJ6aG55qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlPcHRpb25SZW5kZXI6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgLyoqXG4gICAgICog55So5oi36Ieq5a6a5LmJ5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMYWJlbFJlbmRlcih2YWx1ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLmxhYmVsUmVuZGVyVHBsID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNMYWJlbFJlbmRlclRlbXBsYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKHsgaXNMYWJlbFJlbmRlclRlbXBsYXRlOiB0aGlzLmlzTGFiZWxSZW5kZXJUZW1wbGF0ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TGFiZWxSZW5kZXIoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsUmVuZGVyVHBsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUqOS6juWKqOaAgeWKoOi9vemAiemhuVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlMb2FkRGF0YSh2YWx1ZTogKG5vZGU6IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleD86IG51bWJlcikgPT4gUHJvbWlzZUxpa2U8YW55Pikge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBsb2FkRGF0YTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeUxvYWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlDYXNjYWRlclNlcnZpY2U/LmNhc2NhZGVyT3B0aW9ucz8ubG9hZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o6n5Yi26Kem5Y+R54q25oCBLCDmlK/mjIEgYGNsaWNrYCB8IGBob3ZlcmBcbiAgICAgKiBAdHlwZSBUaHlDYXNjYWRlclRyaWdnZXJUeXBlIHwgVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5VHJpZ2dlckFjdGlvbjogVGh5Q2FzY2FkZXJUcmlnZ2VyVHlwZSB8IFRoeUNhc2NhZGVyVHJpZ2dlclR5cGVbXSA9IFsnY2xpY2snXTtcblxuICAgIC8qKlxuICAgICAqIOm8oOagh+e7j+i/h+S4i+aWueWIl+ihqOmhueaXtu+8jOaYr+WQpuiHquWKqOWxleW8gOWIl+ihqO+8jOaUr+aMgSBgY2xpY2tgIHwgYGhvdmVyYFxuICAgICAqIEB0eXBlIFRoeUNhc2NhZGVyRXhwYW5kVHJpZ2dlciB8IFRoeUNhc2NhZGVyRXhwYW5kVHJpZ2dlcltdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RXhwYW5kVHJpZ2dlckFjdGlvbjogVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyIHwgVGh5Q2FzY2FkZXJFeHBhbmRUcmlnZ2VyW10gPSBbJ2NsaWNrJ107XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlNZW51U3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmkJzntKLmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlTZWFyY2hMaXN0U3R5bGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLnsbvlkI1cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNZW51Q2xhc3NOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeU1lbnVDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYnmta7lsYLliJfnsbvlkI1cbiAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlDb2x1bW5DbGFzc05hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbHVtbkNsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldE1lbnVDbGFzcygpO1xuICAgIH1cblxuICAgIGdldCB0aHlDb2x1bW5DbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPquivu1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBvdmVycmlkZSBzZXQgdGh5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBvdmVycmlkZSBnZXQgdGh5RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDnqbrnirbmgIHkuIvnmoTlsZXnpLrmloflrZdcbiAgICAgKiBAZGVmYXVsdCDmmoLml6Dlj6/pgInpoblcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVN0YXRlVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblpJrpgIlcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHNldCB0aHlNdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzTXVsdGlwbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2Uuc2V0Q2FzY2FkZXJPcHRpb25zKHsgaXNNdWx0aXBsZTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRoeU11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWkmumAieaXtuacgOWkp+aYvuekuueahOagh+etvuaVsOmHj++8jDAg6KGo56S65LiN6ZmQ5Yi2XG4gICAgICogQHR5cGUgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGh5TWF4VGFnQ291bnQgPSAwO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5LuF5YWB6K646YCJ5oup5Y+25a2Q6aG5XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5SXNPbmx5U2VsZWN0TGVhZiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDliJ3lp4vljJbml7bvvIzmmK/lkKblsZXlvIDpnaLmnb9cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUF1dG9FeHBhbmQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmlK/mjIHmkJzntKJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeVNob3dTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOWkmumAiemAieS4remhueeahOWxleekuuaWueW8j++8jOm7mOiupOS4uuepuu+8jOa4suafk+aWh+Wtl+aooeadv++8jOS8oOWFpXRhZ++8jOa4suafk+WxleekuuaooeadvyxcbiAgICAgKiBAZGVmYXVsdCAnJ++9nHRhZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByZXNldDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmnInluZXluINcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlIYXNCYWNrZHJvcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlgLzlj5HnlJ/lj5jljJbml7bop6blj5HvvIzov5Tlm57pgInmi6npobnnmoTlgLxcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8YW55W10+XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlgLzlj5HnlJ/lj5jljJbml7bop6blj5HvvIzov5Tlm57pgInmi6npobnliJfooahcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8VGh5Q2FzY2FkZXJPcHRpb25bXT5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlDYXNjYWRlck9wdGlvbltdPigpO1xuXG4gICAgLyoqXG4gICAgICog6YCJ5oup6YCJ6aG55pe26Kem5Y+RXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgICAgICBvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZSDmmoLml6Dlrp7njrBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5RGVzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgb3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbjtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgLyoqXG4gICAgICog5riF56m66YCJ6aG55pe26Kem5Y+RXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ6YCJ6aG55bGV5byA5ZKM5oqY5Y+g54q25oCB5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeUV4cGFuZFN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZHJlbignY2FzY2FkZXJPcHRpb25zJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhc2NhZGVyT3B0aW9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZHJlbignY2FzY2FkZXJPcHRpb25Db250YWluZXJzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhc2NhZGVyT3B0aW9uQ29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5LCB7IHN0YXRpYzogdHJ1ZSB9KSBjZGtDb25uZWN0ZWRPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gICAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHRyaWdnZXI6IEVsZW1lbnRSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdtZW51JykgbWVudTogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBkcm9wRG93blBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICBwdWJsaWMgbWVudVZpc2libGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc0xhYmVsUmVuZGVyVGVtcGxhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB0cmlnZ2VyUmVjdDogRE9NUmVjdDtcblxuICAgIHB1YmxpYyBlbXB0eVN0YXRlVGV4dCA9ICfmmoLml6Dlj6/pgInpobknO1xuXG4gICAgcHJpdmF0ZSBwcmVmaXhDbHMgPSAndGh5LWNhc2NhZGVyJztcblxuICAgIHByaXZhdGUgbWVudUNsYXNzTmFtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjb2x1bW5DbGFzc05hbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgX21lbnVDb2x1bW5DbHM6IGFueTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSBfbWVudUNsczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG5cbiAgICBwcml2YXRlIF9sYWJlbENsczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG5cbiAgICBwcml2YXRlIGxhYmVsUmVuZGVyVHBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHB1YmxpYyBwb3NpdGlvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXTtcblxuICAgIGdldCBzZWxlY3RlZCgpOiBTZWxlY3RPcHRpb25CYXNlIHwgU2VsZWN0T3B0aW9uQmFzZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5TXVsdGlwbGUgPyB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdO1xuICAgIH1cbiAgICBwcml2YXRlIGlzTXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtZW51TWluV2lkdGggPSAxMjI7XG5cbiAgICBwcml2YXRlIHNlYXJjaFRleHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFJlc3VsdExpc3QoKTogVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hSZXN1bHRMaXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Nob3dTZWFyY2hQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6Kej5Yaz5pCc57SiJuWkmumAieeahOaDheWGteS4i++8jOeCueWHu+aQnOe0oumhueS8muWvvOiHtCBwYW5lbCDpl6rng4FcbiAgICAgKiDnlLHkuo7ngrnlh7vlkI7vvIx0aHlTZWxlY3RlZE9wdGlvbnPlj5jljJbvvIzlr7zoh7QgdGh5U2VsZWN0Q29udHJvbFxuICAgICAqIOWPiOS8muinpuWPkSBzZWFyY2hGaWx0ZXIg5Ye95pWw77yM5Y2zIHJlc2V0U2VhcmNoIOS8muaJp+ihjFxuICAgICAqIOS8muWvvOiHtOaBouWkjee6p+iBlOeKtuaAgeWGjeWPmOS4uuaQnOe0oueKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNTZWxlY3RpbmdTZWFyY2hTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZT8uaXNMb2FkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNvbHVtbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZnRlckNoYW5nZUZuOiAoKSA9PiB2b2lkO1xuXG4gICAgcHJpdmF0ZSByZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gICAgICAgIHRoaXMuc2V0TWVudUNsYXNzKCk7XG4gICAgICAgIHRoaXMuc2V0TWVudUNvbHVtbkNsYXNzKCk7XG4gICAgICAgIHRoaXMuc2V0TGFiZWxDbGFzcygpO1xuICAgICAgICB0aGlzLmluaXRQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmluaXRTZWFyY2goKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGxhYmVsUHJvcGVydHk6IHRoaXMudGh5TGFiZWxQcm9wZXJ0eSxcbiAgICAgICAgICAgIHZhbHVlUHJvcGVydHk6IHRoaXMudGh5VmFsdWVQcm9wZXJ0eSxcbiAgICAgICAgICAgIGlzTXVsdGlwbGU6IHRoaXMuaXNNdWx0aXBsZSxcbiAgICAgICAgICAgIGlzT25seVNlbGVjdExlYWY6IHRoaXMudGh5SXNPbmx5U2VsZWN0TGVhZixcbiAgICAgICAgICAgIGlzTGFiZWxSZW5kZXJUZW1wbGF0ZTogdGhpcy5pc0xhYmVsUmVuZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICBsb2FkRGF0YTogdGhpcy50aHlMb2FkRGF0YVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2FzY2FkZXJWYWx1ZUNoYW5nZSgpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5pc1ZhbHVlRXF1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRm4ob3B0aW9ucy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZWxlY3Rpb25Nb2RlbEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGh5Q2xlYXIuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRoeVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy50aHlDaGFuZ2UuZW1pdChvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hZnRlckNoYW5nZUZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2VGbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyQ2hhbmdlRm4gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2xpY2tEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLmNsaWNrZWQoMClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5tZW51Py5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51VmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRoeUF1dG9FeHBhbmQpIHtcbiAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1sndGh5SXNPbmx5U2VsZWN0TGVhZiddKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZXRDYXNjYWRlck9wdGlvbnMoeyBpc09ubHlTZWxlY3RMZWFmOiBjaGFuZ2VzWyd0aHlJc09ubHlTZWxlY3RMZWFmJ10uY3VycmVudFZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0UG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGNhc2NhZGVyUG9zaXRpb246IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSA9IEVYUEFOREVEX0RST1BET1dOX1BPU0lUSU9OUy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IGNhc2NhZGVyUG9zaXRpb247XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLndyaXRlQ2FzY2FkZXJWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9zaXRpb25DaGFuZ2UocG9zaXRpb246IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHBvc2l0aW9uLmNvbm5lY3Rpb25QYWlyLm9yaWdpblkgPT09ICdib3R0b20nID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgaWYgKHRoaXMuZHJvcERvd25Qb3NpdGlvbiAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcERvd25Qb3NpdGlvbiA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZhdGVkT3B0aW9uKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmlzQWN0aXZhdGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0hhbGZTZWxlY3RlZE9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pc0hhbGZTZWxlY3RlZE9wdGlvbihvcHRpb24sIGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTZWxlY3RlZE9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5pc1NlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhdHRhY2hlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkucG9zaXRpb25DaGFuZ2UucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFjdGl2ZUVsZW1lbnRJbnRvVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbEFjdGl2ZUVsZW1lbnRJbnRvVmlldygpIHtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSB0aGlzLmNhc2NhZGVyT3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aHktY2FzY2FkZXItbWVudS1pdGVtLWFjdGl2ZScpKVxuICAgICAgICAgICAgICAgIC8vIGZvciBtdWx0aXBsZSBtb2RlXG4gICAgICAgICAgICAgICAgLnNsaWNlKC10aGlzLmNhc2NhZGVyT3B0aW9uQ29udGFpbmVycy5sZW5ndGgpO1xuXG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVyT3B0aW9uQ29udGFpbmVycy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8PSBhY3RpdmVPcHRpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgU2Nyb2xsVG9TZXJ2aWNlLnNjcm9sbFRvRWxlbWVudChhY3RpdmVPcHRpb25zW2luZGV4XS5uYXRpdmVFbGVtZW50LCBpdGVtLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWVudVZpc2libGUobWVudVZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWVudVZpc2libGUgIT09IG1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlID0gbWVudVZpc2libGU7XG5cbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmluaXRBY3RpdmF0ZWRPcHRpb25zKHRoaXMubWVudVZpc2libGUpO1xuICAgICAgICAgICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRNZW51Q2xhc3MoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aHlFeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdChtZW51VmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVDbHMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVDbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNZW51Q2xhc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lbnVDbHMgPSB7XG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LW1lbnVzYF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LW1lbnVzLWhpZGRlbmBdOiAhdGhpcy5tZW51VmlzaWJsZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnRoeU1lbnVDbGFzc05hbWV9YF06IHRoaXMudGh5TWVudUNsYXNzTmFtZSxcbiAgICAgICAgICAgIFtgdy0xMDBgXTogdGhpcy5jb2x1bW5zLmxlbmd0aCA9PT0gMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUNvbHVtbkNscygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUNvbHVtbkNscztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1lbnVDb2x1bW5DbGFzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVudUNvbHVtbkNscyA9IHtcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbWVudWBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMudGh5Q29sdW1uQ2xhc3NOYW1lfWBdOiB0aGlzLnRoeUNvbHVtbkNsYXNzTmFtZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGFiZWxDbHMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQ2xzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFiZWxDbGFzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGFiZWxDbHMgPSB7XG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlci1sYWJlbGBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1zaG93LXNlYXJjaGBdOiBmYWxzZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZm9jdXNlZGBdOiBmYWxzZSxcbiAgICAgICAgICAgICd0ZXh0LXRydW5jYXRlJzogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2xhc3NNYXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsYXNzTWFwID0ge1xuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfWBdOiB0cnVlLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1waWNrZXJgXTogdHJ1ZSxcbiAgICAgICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tJHt0aGlzLnRoeVNpemV9YF06IHRydWUsXG4gICAgICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXBpY2tlci1kaXNhYmxlZGBdOiB0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1waWNrZXItb3BlbmBdOiB0aGlzLm1lbnVWaXNpYmxlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnVwZGF0ZUNsYXNzQnlNYXAoY2xhc3NNYXApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDbGlja1RyaWdnZXJBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJpZ2dlckFjdGlvbiA9PT0gJ2NsaWNrJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uLmluZGV4T2YoJ2NsaWNrJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNIb3ZlclRyaWdnZXJBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aHlUcmlnZ2VyQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJpZ2dlckFjdGlvbiA9PT0gJ2hvdmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmlnZ2VyQWN0aW9uLmluZGV4T2YoJ2hvdmVyJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNIb3ZlckV4cGFuZFRyaWdnZXJBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aHlFeHBhbmRUcmlnZ2VyQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGh5RXhwYW5kVHJpZ2dlckFjdGlvbiA9PT0gJ2hvdmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aHlFeHBhbmRUcmlnZ2VyQWN0aW9uLmluZGV4T2YoJ2hvdmVyJykgIT09IC0xO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgdG9nZ2xlQ2xpY2soJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUcmlnZ2VyQWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVudVZpc2libGUoIXRoaXMubWVudVZpc2libGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIHRvZ2dsZU1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaXNIb3ZlclRyaWdnZXJBY3Rpb24oKSB8fCB0aGlzLm1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKHRydWUpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyB0b2dnbGVNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmlzSG92ZXJUcmlnZ2VyQWN0aW9uKCkgfHwgIXRoaXMubWVudVZpc2libGUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBob3N0RWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbW91c2VUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob3N0RWwuY29udGFpbnMobW91c2VUYXJnZXQpIHx8XG4gICAgICAgICAgICBtb3VzZVRhcmdldD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjZGstb3ZlcmxheS1wYW5lJykgfHxcbiAgICAgICAgICAgIG1vdXNlVGFyZ2V0Py5jbGFzc0xpc3QuY29udGFpbnMoJ2Nkay1vdmVybGF5LWJhY2tkcm9wJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tDdXN0b21PcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50IHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2xpY2tPcHRpb24ob3B0aW9uLCBpbmRleCwgZXZlbnQsIHRoaXMuc2VsZWN0T3B0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50IHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5yZW1vdmVDdXN0b21PcHRpb24oKTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2xpY2tPcHRpb24ob3B0aW9uLCBpbmRleCwgZXZlbnQsIHRoaXMuc2VsZWN0T3B0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5ICYmIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBzdWJtZW51IGlzIG9wZW5lZFxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIHRvIHByZXZlbnQgdGhlIHN1Ym1lbnUgZnJvbSBhcHBlYXJpbmcgb2ZmLXNjcmVlblxuICAgICAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG1vdXNlb3Zlck9wdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uZGlzYWJsZWQgJiYgIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzSG92ZXJFeHBhbmRUcmlnZ2VyQWN0aW9uKCkgJiYgIShvcHRpb24gJiYgb3B0aW9uLmRpc2FibGVkICYmIHRoaXMuaXNNdWx0aXBsZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZU9wdGlvbihvcHRpb24sIGluZGV4LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50PzogRm9jdXNFdmVudCkge1xuICAgICAgICAvLyBUYWIg6IGa54Sm5ZCO6Ieq5Yqo6IGa54Sm5YiwIGlucHV0IOi+k+WFpeahhu+8jOatpOWIhuaUr+S4i+ebtOaOpei/lOWbnu+8jOaXoOmcgOinpuWPkSBvblRvdWNoZWRGblxuICAgICAgICBpZiAoZWxlbWVudE1hdGNoQ2xvc2VzdChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCwgWycudGh5LWNhc2NhZGVyLW1lbnVzJywgJ3RoeS1jYXNjYWRlciddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnRNYXRjaENsb3Nlc3QoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsnLnRoeS1jYXNjYWRlci1tZW51cycsICd0aHktY2FzY2FkZXInXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1lbnVWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93U2VhcmNoUGFuZWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlYXJjaFJlc3VsdExpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBY3RpdmVPcHRpb24ob3B0aW9uOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlciwgc2VsZWN0OiBib29sZWFuLCBsb2FkQ2hpbGRyZW46IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNldEFjdGl2ZU9wdGlvbihvcHRpb24sIGluZGV4LCBzZWxlY3QsIGxvYWRDaGlsZHJlbiwgdGhpcy5zZWxlY3RPcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0T3B0aW9uID0gKG9wdGlvbjogVGh5Q2FzY2FkZXJPcHRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKChvcHRpb24uaXNMZWFmIHx8ICF0aGlzLnRoeUlzT25seVNlbGVjdExlYWYpICYmICF0aGlzLnRoeU11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmFmdGVyQ2hhbmdlRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZW51VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeVNlbGVjdC5lbWl0KHsgb3B0aW9uLCBpbmRleCB9KTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25DYW5TZWxlY3QgPSB0aGlzLnRoeUNoYW5nZU9uU2VsZWN0ICYmICF0aGlzLmlzTXVsdGlwbGU7XG4gICAgICAgIGlmIChvcHRpb24uaXNMZWFmIHx8ICF0aGlzLnRoeUlzT25seVNlbGVjdExlYWYgfHwgaXNPcHRpb25DYW5TZWxlY3QgfHwgdGhpcy5zaG91bGRQZXJmb3JtU2VsZWN0aW9uKG9wdGlvbiwgaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWxlY3RPcHRpb24ob3B0aW9uLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIHJlbW92ZVNlbGVjdGVkSXRlbShldmVudDogeyBpdGVtOiBTZWxlY3RPcHRpb25CYXNlOyAkZXZlbnRPcmlnaW46IEV2ZW50IH0pIHtcbiAgICAgICAgZXZlbnQuJGV2ZW50T3JpZ2luLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5yZW1vdmVTZWxlY3RlZEl0ZW0oZXZlbnQ/Lml0ZW0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdWxkUGVyZm9ybVNlbGVjdGlvbihvcHRpb246IFRoeUNhc2NhZGVyT3B0aW9uLCBsZXZlbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy50aHlDaGFuZ2VPbiA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMudGh5Q2hhbmdlT24ob3B0aW9uLCBsZXZlbCkgPT09IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFmdGVyQ2hhbmdlRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE1lbnVWaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlDYXNjYWRlclNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdGh5Q2xpY2tEaXNwYXRjaGVyOiBUaHlDbGlja0Rpc3BhdGNoZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHB1YmxpYyB0aHlDYXNjYWRlclNlcnZpY2U6IFRoeUNhc2NhZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVGh5Q2FzY2FkZXJPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0/LnZhbHVlIHx8IGl0ZW0/Ll9pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoRmlsdGVyKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXNlYXJjaFRleHQgJiYgIXRoaXMuaXNTZWxlY3RpbmdTZWFyY2hTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCQubmV4dChzZWFyY2hUZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIGZpbHRlcih0ZXh0ID0+IHRleHQgIT09ICcnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBsb2NhbCBzZWFyY2hcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEluTG9jYWwoc2VhcmNoVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dTZWFyY2hQYW5lbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaEluTG9jYWwoc2VhcmNoVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGh5Q2FzY2FkZXJTZXJ2aWNlLnNlYXJjaEluTG9jYWwoc2VhcmNoVGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dTZWFyY2hQYW5lbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5yZXNldFNlYXJjaCgpO1xuICAgICAgICB0aGlzLnNjcm9sbEFjdGl2ZUVsZW1lbnRJbnRvVmlldygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RTZWFyY2hSZXN1bHQoc2VsZWN0T3B0aW9uRGF0YTogVGh5Q2FzY2FkZXJTZWFyY2hPcHRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0aHlSb3dWYWx1ZTogc2VsZWN0ZWRPcHRpb25zIH0gPSBzZWxlY3RPcHRpb25EYXRhO1xuICAgICAgICBpZiAoc2VsZWN0T3B0aW9uRGF0YS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKChpdGVtOiBUaHlDYXNjYWRlck9wdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVPcHRpb24oaXRlbSwgaW5kZXgsIGluZGV4ID09PSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0aW5nU2VhcmNoU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0T3B0aW9uRGF0YS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5TZWFyY2hSZXN1bHRMaXN0ID0gdGhpcy5zZWFyY2hSZXN1bHRMaXN0O1xuICAgICAgICAgICAgLy8g5L+d5oyB5pCc57Si6YCJ6aG5XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaFBhbmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeUNhc2NhZGVyU2VydmljZS5zZWFyY2hSZXN1bHRMaXN0ID0gb3JpZ2luU2VhcmNoUmVzdWx0TGlzdDtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0aW5nU2VhcmNoU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0ID0gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkgJiYgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiICN0cmlnZ2VyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGh5U2hvd0lucHV0XCI+XG4gICAgPGRpdlxuICAgICAgdGh5U2VsZWN0Q29udHJvbFxuICAgICAgW3RoeVNob3dTZWFyY2hdPVwidGh5U2hvd1NlYXJjaFwiXG4gICAgICBbdGh5U2l6ZV09XCJ0aHlTaXplXCJcbiAgICAgIFt0aHlBbGxvd0NsZWFyXT1cInRydWVcIlxuICAgICAgW3RoeVNlbGVjdGVkT3B0aW9uc109XCJzZWxlY3RlZFwiXG4gICAgICBbdGh5TWF4VGFnQ291bnRdPVwidGh5TWF4VGFnQ291bnRcIlxuICAgICAgKHRoeU9uUmVtb3ZlKT1cInJlbW92ZVNlbGVjdGVkSXRlbSgkZXZlbnQpXCJcbiAgICAgICh0aHlPbkNsZWFyKT1cImNsZWFyU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKHRoeU9uQmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAodGh5T25TZWFyY2gpPVwic2VhcmNoRmlsdGVyKCRldmVudClcIlxuICAgICAgW3RoeURpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFt0aHlJc011bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgIFt0aHlQYW5lbE9wZW5lZF09XCJtZW51VmlzaWJsZVwiXG4gICAgICBbdGh5UGxhY2Vob2xkZXJdPVwidGh5UGxhY2Vob2xkZXJcIlxuICAgICAgW2N1c3RvbURpc3BsYXlUZW1wbGF0ZV09XCJjdXN0b21EaXNwbGF5VGVtcGxhdGVcIlxuICAgICAgW3RoeVByZXNldF09XCJ0aHlQcmVzZXRcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tRGlzcGxheVRlbXBsYXRlIGxldC12YWx1ZT5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwibGFiZWxDbHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTGFiZWxSZW5kZXJUZW1wbGF0ZTsgZWxzZSBsYWJlbFRlbXBsYXRlXCI+e3sgdmFsdWUubGFiZWxUZXh0IH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeUxhYmVsUmVuZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInZhbHVlLmxhYmVsUmVuZGVyQ29udGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0aHlIYXNCYWNrZHJvcFwiXG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwidGh5LWNhc2NhZGVyLWJhY2tkcm9wXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwib3JpZ2luXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwicG9zaXRpb25zXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCJtZW51TWluV2lkdGhcIlxuICBjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT249XCIudGh5LWNhc2NhZGVyLW1lbnVzXCJcbiAgKGJhY2tkcm9wQ2xpY2spPVwiY2xvc2VNZW51KClcIlxuICAoZGV0YWNoKT1cImNsb3NlTWVudSgpXCJcbiAgKGF0dGFjaCk9XCJhdHRhY2hlZCgpXCJcbiAgKHBvc2l0aW9uQ2hhbmdlKT1cInBvc2l0aW9uQ2hhbmdlKCRldmVudClcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwibWVudVZpc2libGVcIj5cbiAgPGRpdlxuICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAjbWVudVxuICAgIFtuZ0NsYXNzXT1cIm1lbnVDbHNcIlxuICAgIFtuZ1N0eWxlXT1cInRoeU1lbnVTdHlsZVwiXG4gICAgKG1vdXNlbGVhdmUpPVwidG9nZ2xlTW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICBbQHNjYWxlWU1vdGlvbl09XCInZW50ZXInXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1Nob3dTZWFyY2hQYW5lbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnMubGVuZ3RoID4gMDsgZWxzZSBlbXB0eVBsYWNlaG9sZGVyXCI+XG4gICAgICAgIDx1bCAjY2FzY2FkZXJPcHRpb25Db250YWluZXJzICpuZ0Zvcj1cImxldCBvcHRpb25zIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXg7IGxldCBpc0ZpcnN0ID0gZmlyc3RcIiBbbmdDbGFzc109XCJtZW51Q29sdW1uQ2xzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoeUN1c3RvbU9wdGlvbnMgJiYgdGh5Q3VzdG9tT3B0aW9ucy5sZW5ndGggPiAwICYmIGlzRmlyc3RcIj5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAjY2FzY2FkZXJPcHRpb25zXG4gICAgICAgICAgICAgIHRoeS1jYXNjYWRlci1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbU9wdCBvZiB0aHlDdXN0b21PcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICBbb3B0aW9uXT1cImN1c3RvbU9wdFwiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0aHlNdWx0aXBsZVwiXG4gICAgICAgICAgICAgIFtpc09ubHlTZWxlY3RMZWFmXT1cInRoeUlzT25seVNlbGVjdExlYWZcIlxuICAgICAgICAgICAgICBbbGFiZWxQcm9wZXJ0eV09XCJ0aHlMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpc0FjdGl2YXRlZE9wdGlvbihjdXN0b21PcHQsIDApXCJcbiAgICAgICAgICAgICAgW2hhbGZTZWxlY3RlZF09XCJpc0hhbGZTZWxlY3RlZE9wdGlvbihjdXN0b21PcHQsIDApXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWRPcHRpb24oY3VzdG9tT3B0LCAwKVwiXG4gICAgICAgICAgICAgICh0b2dnbGVTZWxlY3RDaGFuZ2UpPVwiY2xpY2tDdXN0b21PcHRpb24oY3VzdG9tT3B0LCAwLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQ3VzdG9tT3B0aW9uKGN1c3RvbU9wdCwgMCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwibW91c2VvdmVyT3B0aW9uKGN1c3RvbU9wdCwgMCwgJGV2ZW50KVwiPjwvbGk+XG4gICAgICAgICAgICA8dGh5LWRpdmlkZXIgY2xhc3M9XCJteS0xIG14LTRcIj48L3RoeS1kaXZpZGVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICAjY2FzY2FkZXJPcHRpb25zXG4gICAgICAgICAgICB0aHktY2FzY2FkZXItb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICBbbXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICAgICAgW2lzT25seVNlbGVjdExlYWZdPVwidGh5SXNPbmx5U2VsZWN0TGVhZlwiXG4gICAgICAgICAgICBbbGFiZWxQcm9wZXJ0eV09XCJ0aHlMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgIFthY3RpdmVdPVwiaXNBY3RpdmF0ZWRPcHRpb24ob3B0aW9uLCBpKVwiXG4gICAgICAgICAgICBbaGFsZlNlbGVjdGVkXT1cImlzSGFsZlNlbGVjdGVkT3B0aW9uKG9wdGlvbiwgaSlcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWRPcHRpb24ob3B0aW9uLCBpKVwiXG4gICAgICAgICAgICBbb3B0aW9uUmVuZGVyXT1cInRoeU9wdGlvblJlbmRlclwiXG4gICAgICAgICAgICAodG9nZ2xlU2VsZWN0Q2hhbmdlKT1cImNsaWNrT3B0aW9uKG9wdGlvbiwgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tPcHRpb24ob3B0aW9uLCBpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZW92ZXIpPVwibW91c2VvdmVyT3B0aW9uKG9wdGlvbiwgaSwgJGV2ZW50KVwiPjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaG93U2VhcmNoUGFuZWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hSZXN1bHRMaXN0Lmxlbmd0aDsgZWxzZSBlbXB0eVBsYWNlaG9sZGVyXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cInRoeS1jYXNjYWRlci1zZWFyY2gtbGlzdCBweS0zXCIgW25nU3R5bGVdPVwidGh5U2VhcmNoTGlzdFN0eWxlXCI+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB0aHktY2FzY2FkZXItc2VhcmNoLW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VhcmNoUmVzdWx0TGlzdFwiXG4gICAgICAgICAgICBbbXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICAgICAgW2lzT25seVNlbGVjdExlYWZdPVwidGh5SXNPbmx5U2VsZWN0TGVhZlwiXG4gICAgICAgICAgICBbb3B0aW9uXT1cIml0ZW1cIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIFtvcHRpb25SZW5kZXJdPVwidGh5T3B0aW9uUmVuZGVyXCJcbiAgICAgICAgICAgICh0b2dnbGVTZWxlY3RDaGFuZ2UpPVwic2VsZWN0U2VhcmNoUmVzdWx0KCRldmVudClcIj48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVBsYWNlaG9sZGVyPlxuICA8ZGl2IGNsYXNzPVwidGh5LWNhc2NhZGVyLWVtcHR5LWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgJ3dpZHRoLnB4JzogdHJpZ2dlclJlY3Q/LndpZHRoIH1cIj5cbiAgICA8dGh5LWVtcHR5IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCIgdGh5U2l6ZT1cInNtXCIgW3RoeU1lc3NhZ2VdPVwiZW1wdHlTdGF0ZVRleHRcIj48L3RoeS1lbXB0eT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
package/esm2022/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('17.0.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('17.0.16');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNy4wLjE2Jyk7XG4iXX0=
|
|
@@ -1053,6 +1053,13 @@ class ThyCascader extends TabIndexDisabledControlValueAccessorMixin {
|
|
|
1053
1053
|
clickOption(option, index, event) {
|
|
1054
1054
|
this.thyCascaderService.removeCustomOption();
|
|
1055
1055
|
this.thyCascaderService.clickOption(option, index, event, this.selectOption);
|
|
1056
|
+
if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {
|
|
1057
|
+
// Make sure to calculate and update the position after the submenu is opened
|
|
1058
|
+
this.cdr.detectChanges();
|
|
1059
|
+
// Update the position to prevent the submenu from appearing off-screen
|
|
1060
|
+
this.cdkConnectedOverlay.overlayRef.updatePosition();
|
|
1061
|
+
this.cdr.markForCheck();
|
|
1062
|
+
}
|
|
1056
1063
|
}
|
|
1057
1064
|
mouseoverOption(option, index, event) {
|
|
1058
1065
|
if (event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-cascader.mjs","sources":["../../../src/cascader/cascader-li.component.ts","../../../src/cascader/cascader-li.component.html","../../../src/cascader/cascader-search-option.component.ts","../../../src/cascader/cascader-search-option.component.html","../../../src/cascader/cascader.service.ts","../../../src/cascader/cascader.component.ts","../../../src/cascader/cascader.component.html","../../../src/cascader/module.ts","../../../src/cascader/ngx-tethys-cascader.ts"],"sourcesContent":["import { ThyCheckbox } from 'ngx-tethys/checkbox';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyRadio } from 'ngx-tethys/radio';\nimport { ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyCascaderOption } from './types';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thy-cascader-option]',\n templateUrl: './cascader-li.component.html',\n standalone: true,\n imports: [NgIf, ThyFlexibleText, ThyCheckbox, ThyRadio, FormsModule, ThyStopPropagationDirective, NgTemplateOutlet]\n})\nexport class ThyCascaderOptionComponent implements OnInit {\n @Input() option: ThyCascaderOption;\n\n @Input({ transform: coerceBooleanProperty })\n multiple = false;\n\n @Input({ transform: coerceBooleanProperty })\n isOnlySelectLeaf = true;\n\n @Input()\n optionRender: TemplateRef<SafeAny>;\n\n @HostBinding('class') class = 'd-flex';\n\n @HostBinding('class.thy-cascader-menu-item') item = true;\n\n @HostBinding('class.thy-cascader-menu-item-active')\n @Input({ transform: coerceBooleanProperty })\n active: boolean = false;\n\n @Input({ transform: coerceBooleanProperty })\n halfSelected = false;\n\n @Input({ transform: coerceBooleanProperty })\n selected: boolean = false;\n\n @HostBinding('class.thy-cascader-menu-item-disabled')\n get disabled() {\n return this.option.disabled;\n }\n\n @HostBinding('class.thy-cascader-menu-item-expand')\n get expand() {\n return this.option && !this.option.isLeaf;\n }\n\n @Input() labelProperty: string = 'label';\n\n @Output() toggleSelectChange: EventEmitter<boolean> = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n public toggleOption(value: boolean) {\n this.toggleSelectChange.emit(value);\n }\n}\n","<div thyStopPropagation *ngIf=\"!option.readonly\">\n <label *ngIf=\"multiple\" class=\"mr-2\" thyCheckbox [disabled]=\"option.disabled\" [name]=\"option.value || option._id\"\n [thyIndeterminate]=\"halfSelected\" [(ngModel)]=\"selected\" (ngModelChange)=\"toggleOption($event)\"></label>\n\n <label *ngIf=\"!multiple && !isOnlySelectLeaf\" class=\"mr-2\" thyRadio [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\" [(ngModel)]=\"selected\" (ngModelChange)=\"toggleOption($event)\"></label>\n</div>\n\n\n<ng-container *ngIf=\"!optionRender; else optionTemplate\">\n <span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\"> {{ option[labelProperty] || '' }}</span>\n</ng-container>\n<ng-template #optionTemplate>\n <ng-template [ngTemplateOutlet]=\"optionRender\" [ngTemplateOutletContext]=\"{ option }\"></ng-template>\n</ng-template>\n\n<span *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n","import { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyBreadcrumb, ThyBreadcrumbItem } from 'ngx-tethys/breadcrumb';\nimport { ThyCheckbox } from 'ngx-tethys/checkbox';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyCascaderSearchOption } from './types';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thy-cascader-search-option]',\n templateUrl: './cascader-search-option.component.html',\n standalone: true,\n imports: [NgIf, NgFor, ThyFlexibleText, ThyCheckbox, ThyBreadcrumb, ThyBreadcrumbItem, ThyIcon, FormsModule, NgTemplateOutlet]\n})\nexport class ThyCascaderSearchOptionComponent implements OnInit {\n @Input() option: ThyCascaderSearchOption;\n\n @HostBinding('class.multiple')\n @Input({ transform: coerceBooleanProperty })\n multiple = false;\n\n @Input({ transform: coerceBooleanProperty })\n isOnlySelectLeaf = true;\n @HostBinding('class') className = 'thy-cascader-search-list-item px-4 d-flex align-items-center cursor-pointer';\n\n @HostBinding('class.active')\n @Input({ transform: coerceBooleanProperty })\n active: boolean = false;\n\n @Input()\n optionRender: TemplateRef<SafeAny>;\n\n @HostListener('click', ['$event'])\n public toggleClick($event: Event) {\n if (this.multiple) {\n return;\n }\n this.toggleSelectChange.emit(this.option);\n }\n\n @Output() toggleSelectChange: EventEmitter<ThyCascaderSearchOption> = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n public clickCheckbox(event: Event) {\n // 已选中的在搜索情况下不能取消选择\n if (this.active) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n public toggleOption(value: boolean) {\n this.toggleSelectChange.emit(this.option);\n }\n}\n","<label *ngIf=\"multiple\" class=\"mr-1\" thyCheckbox [disabled]=\"option.thyRowValue[option.thyRowValue.length - 1].disabled\"\n [ngModel]=\"active\" (click)=\"clickCheckbox($event)\" (ngModelChange)=\"toggleOption($event)\" [thyLabelText]=\"''\"></label>\n\n<thy-breadcrumb thySeparator=\"slash\">\n <ng-container *ngFor=\"let label of option.labelList; index as i\">\n <thy-breadcrumb-item [ngClass]=\"{ 'text-muted': !(option.thyRowValue[i].isLeaf && isOnlySelectLeaf) }\">\n <ng-container *ngIf=\"!optionRender; else optionTemplate\">\n <span class=\"option-label-item\" thyFlexibleText [thyTooltipContent]=\"label\">{{ label }}</span>\n </ng-container>\n <ng-template #optionTemplate>\n <ng-template [ngTemplateOutlet]=\"optionRender\" [ngTemplateOutletContext]=\"{ option: option.thyRowValue[i] }\">\n </ng-template>\n </ng-template>\n </thy-breadcrumb-item>\n </ng-container>\n</thy-breadcrumb>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Injectable } from '@angular/core';\nimport { Id } from '@tethys/cdk/immutable';\nimport { SelectOptionBase } from 'ngx-tethys/shared';\nimport { helpers, isArray, isEmpty, isUndefinedOrNull, set, get } from 'ngx-tethys/util';\nimport { Subject } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\nimport { ThyCascaderOption, ThyCascaderSearchOption } from './types';\nconst defaultDisplayRender = (label: any) => label.join(' / ');\n\n/**\n * @internal\n */\n@Injectable()\nexport class ThyCascaderService {\n public selectionModel: SelectionModel<SelectOptionBase>;\n\n public columns: ThyCascaderOption[][] = [];\n\n public customOptions: ThyCascaderOption[];\n\n public cascaderOptions: {\n labelProperty?: string;\n valueProperty?: string;\n isMultiple?: boolean;\n isOnlySelectLeaf?: boolean;\n isLabelRenderTemplate?: boolean;\n loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<any>;\n };\n\n public selectedOptions: ThyCascaderOption[] = [];\n\n public activatedOptions: ThyCascaderOption[] = [];\n\n public labelRenderText: string;\n\n public flattenOptions: ThyCascaderSearchOption[] = [];\n\n public leafNodes: ThyCascaderSearchOption[] = [];\n\n public isLoading = false;\n\n public searchResultList: ThyCascaderSearchOption[] = [];\n\n public defaultValue: any[];\n\n public value: any[];\n\n private prevSelectedOptions: Set<ThyCascaderOption> = new Set<ThyCascaderOption>();\n\n public valueChange$ = new Subject();\n\n public cascaderValueChange() {\n return this.valueChange$.pipe(\n map(() => {\n const valueChangeOptions = {\n value: this.getValues(),\n isValueEqual: this.arrayEquals(this.value, this.getValues()),\n isSelectionModelEmpty: this.selectionModel.isEmpty()\n };\n this.defaultValue = null;\n this.value = this.getValues();\n return valueChangeOptions;\n }),\n debounceTime(100)\n );\n }\n\n public setCascaderOptions(options: {\n labelProperty?: string;\n valueProperty?: string;\n isMultiple?: boolean;\n isOnlySelectLeaf?: boolean;\n isLabelRenderTemplate?: boolean;\n loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<any>;\n }) {\n this.cascaderOptions = { ...this.cascaderOptions, ...options };\n if (this.cascaderOptions.hasOwnProperty('isMultiple')) {\n this.initSelectionModel(this.cascaderOptions.isMultiple);\n }\n }\n\n public initSelectionModel(isMultiple?: boolean) {\n if (this.selectionModel) {\n this.selectionModel.clear();\n } else {\n this.selectionModel = new SelectionModel(isMultiple);\n }\n }\n\n public initColumns(columns: ThyCascaderOption[][]) {\n this.columns = columns;\n }\n\n public initActivatedOptions(menuVisible: boolean) {\n if (isEmpty(this.selectedOptions) || !menuVisible) {\n return;\n }\n this.activatedOptions = [...this.selectedOptions];\n this.activatedOptions.forEach((item, index) => {\n if (!isEmpty(item.children) && !item.isLeaf) {\n this.columns[index + 1] = item.children;\n }\n });\n }\n\n public initOptions(index: number) {\n const vs = this.defaultValue;\n const load = () => {\n this.activateOnInit(index, vs[index]);\n if (index < vs.length - 1) {\n this.initOptions(index + 1);\n }\n if (index === vs.length - 1) {\n this.afterWriteValue();\n }\n };\n\n if (this.columns[index]?.length || !this.cascaderOptions.loadData) {\n load();\n } else {\n const node = this.activatedOptions[index - 1] || {};\n this.loadChildren(node, index - 1, load, this.afterWriteValue.bind(this));\n }\n }\n\n public clickOption(\n option: ThyCascaderOption,\n index: number,\n event: Event | boolean,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ) {\n if (option?.disabled && !this.cascaderOptions.isMultiple) {\n return;\n }\n\n const isSelect = event instanceof Event ? !this.cascaderOptions.isMultiple && option.isLeaf : true;\n\n if (this.cascaderOptions.isMultiple && !option.isLeaf && this.cascaderOptions.isOnlySelectLeaf && isSelect) {\n this.toggleAllChildren(option, index, event as boolean, selectFn);\n } else {\n this.setActiveOption(option, index, isSelect, true, selectFn);\n }\n }\n\n public setActiveOption(\n option: ThyCascaderOption,\n index: number,\n select: boolean,\n loadChildren: boolean = true,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ): void {\n this.activatedOptions[index] = option;\n for (let i = index - 1; i >= 0; i--) {\n const originOption = this.activatedOptions[i + 1]?.parent;\n if (\n !this.activatedOptions[i] ||\n originOption?.[this.cascaderOptions.valueProperty] !== this.activatedOptions[i]?.[this.cascaderOptions.valueProperty]\n ) {\n this.activatedOptions[i] = originOption ?? this.activatedOptions[i];\n }\n }\n if (index < this.activatedOptions.length - 1) {\n this.activatedOptions = this.activatedOptions.slice(0, index + 1);\n }\n if (isArray(option.children) && option.children.length) {\n option.isLeaf = false;\n option.children.forEach(child => (child.parent = option));\n this.setColumnData(option.children, index + 1);\n } else if (!option.isLeaf && loadChildren) {\n this.loadChildren(option, index);\n } else if (index < this.columns.length - 1) {\n this.columns = this.columns.slice(0, index + 1);\n }\n\n if (select) {\n selectFn(option, index);\n }\n }\n\n private loadChildren(option: ThyCascaderOption, index: number, success?: () => void, failure?: () => void): void {\n if (!this.cascaderOptions?.loadData) {\n this.setColumnData(option.children || [], index + 1);\n return;\n }\n\n this.isLoading = true;\n\n this.cascaderOptions.loadData(option, index).then(\n () => this.handleLoadDataSuccess(option, index, success),\n () => this.handleLoadDataFailure(option, index, failure)\n );\n }\n\n private handleLoadDataSuccess(option: ThyCascaderOption, index: number, success?: () => void): void {\n option.loading = this.isLoading = false;\n\n if (option.children) {\n option.children.forEach(child => (child.parent = index < 0 ? undefined : option));\n this.setColumnData(option.children, index + 1);\n }\n\n if (success) {\n success();\n }\n }\n\n private handleLoadDataFailure(option: ThyCascaderOption, index: number, failure?: () => void): void {\n option.loading = this.isLoading = false;\n option.isLeaf = true;\n\n if (failure) {\n failure();\n }\n }\n\n private activateOnInit(index: number, value: any): void {\n let option: ThyCascaderOption;\n if (isArray(this.customOptions) && this.customOptions.length > 0) {\n option = this.customOptions.find(item => get(item, this.cascaderOptions.valueProperty) === value);\n }\n if (isUndefinedOrNull(option)) {\n option = this.findOption(value, index);\n }\n if (!option) {\n option =\n typeof value === 'object'\n ? value\n : {\n [`${this.cascaderOptions.valueProperty || 'value'}`]: value,\n [`${this.cascaderOptions.labelProperty || 'label'}`]: value\n };\n }\n this.updatePrevSelectedOptions(option, true);\n this.setActiveOption(option, index, false, false);\n }\n\n public isSelectedOption(option: ThyCascaderOption, index: number): boolean {\n if (this.cascaderOptions?.isOnlySelectLeaf) {\n if (option.isLeaf) {\n return option.selected;\n } else {\n return this.checkSelectedStatus(option, true);\n }\n } else {\n const selectedOpts = this.selectionModel.selected;\n const appearIndex = selectedOpts.findIndex(item => {\n if (item.thyRawValue.value.length - 1 === index) {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n } else {\n return false;\n }\n });\n return appearIndex >= 0;\n }\n }\n\n private toggleAllChildren(\n option: ThyCascaderOption,\n index: number,\n selected: boolean,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ): void {\n const allLeafs: {\n option: ThyCascaderOption;\n index: number;\n }[] = this.getAllLeafs(option, index, selected);\n option.selected = selected;\n\n while (allLeafs.length) {\n const { option, index } = allLeafs.shift();\n option.selected = !selected;\n this.setActiveOption(option, index, true, null, selectFn);\n }\n\n for (let i = 0; i < this.activatedOptions.length; i++) {\n const option = this.activatedOptions[i];\n if (isArray(option.children) && option.children.length) {\n this.setColumnData(option.children, i + 1);\n }\n }\n }\n\n private getAllLeafs(\n option: ThyCascaderOption,\n index: number,\n selected: boolean\n ): {\n option: ThyCascaderOption;\n index: number;\n }[] {\n let allLeafs: {\n option: ThyCascaderOption;\n index: number;\n }[] = [];\n if (option.children.length > 0) {\n for (const childOption of option.children) {\n childOption.parent = option;\n if (childOption.isLeaf && !childOption.selected === selected) {\n allLeafs.push({\n option: childOption,\n index: index + 1\n });\n } else if (!childOption.isLeaf) {\n allLeafs = allLeafs.concat(this.getAllLeafs(childOption, index + 1, selected));\n }\n }\n }\n return allLeafs;\n }\n\n public searchInLocal(searchText: string): void {\n this.forEachColumns();\n\n this.setSearchResultList(this.cascaderOptions.isOnlySelectLeaf ? this.leafNodes : this.flattenOptions, searchText);\n }\n\n private forEachColumns(\n currentLabel?: string[],\n currentValue: Id[] = [],\n currentRowValue: ThyCascaderOption[] = [],\n list = this.columns[0]\n ) {\n list.forEach(item => {\n const curOptionLabel = this.getOptionLabel(item);\n const curOptionValue = this.getOptionValue(item);\n const label: string[] = currentLabel ? [...currentLabel, curOptionLabel] : [curOptionLabel];\n const valueList: Id[] = [...currentValue, curOptionValue];\n const rowValueList: ThyCascaderOption[] = [...currentRowValue, item];\n const isSelected = this.isSelectedOption(item, valueList.length - 1);\n\n const node = {\n labelList: label,\n valueList,\n selected: isSelected,\n thyRowValue: rowValueList,\n isLeaf: item.isLeaf,\n disabled: item.disabled\n };\n\n this.flattenOptions.push(node);\n if (item?.children?.length) {\n this.forEachColumns(label, valueList, rowValueList, item.children);\n } else {\n this.leafNodes.push(node);\n }\n });\n }\n\n private setSearchResultList(listOfOption: ThyCascaderSearchOption[], searchText: string) {\n this.searchResultList = [];\n listOfOption.forEach(item => {\n if (!item.disabled && item.isLeaf && item.labelList.join().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {\n this.searchResultList.push(item);\n }\n });\n }\n\n /**\n * 检查所有所有子项的选择状态, 有一个不符合预期,就直接返回 false\n * @param option\n * @param trueOrFalse\n * @private\n */\n private checkSelectedStatus(option: ThyCascaderOption, isSelected: boolean): boolean {\n if (option.isLeaf) {\n return option.selected === isSelected;\n }\n if (helpers.isEmpty(option.children) && this.cascaderOptions?.isOnlySelectLeaf) {\n return false;\n }\n for (const childOption of option.children) {\n if (isArray(childOption.children) && childOption.children.length && !this.checkSelectedStatus(childOption, isSelected)) {\n return false;\n }\n if (!childOption.selected === isSelected) {\n return false;\n }\n }\n return true;\n }\n\n private findOption(option: any, index: number): ThyCascaderOption {\n const options: ThyCascaderOption[] = this.columns[index];\n if (options) {\n const value = typeof option === 'object' ? this.getOptionValue(option) : option;\n return options.find(o => value === this.getOptionValue(o));\n }\n return null;\n }\n\n private setColumnData(options: ThyCascaderOption[], index: number): void {\n if (!this.arrayEquals(this.columns[index], options)) {\n this.columns[index] = options;\n if (index < this.columns.length - 1) {\n this.columns = this.columns.slice(0, index + 1);\n }\n }\n }\n\n private getSubmitValue(originOptions: ThyCascaderOption[]): any[] {\n const values: any[] = [];\n (originOptions || []).forEach(option => {\n values.push(this.getOptionValue(option));\n });\n return values;\n }\n\n public removeSelectedItem(item: SelectOptionBase) {\n const selectedItems = this.selectionModel.selected;\n const currentItem = selectedItems.find(i => {\n return helpers.shallowEqual(i.thyValue, item.thyValue);\n });\n this.deselectOption(currentItem);\n this.selectionModel.deselect(currentItem);\n // update selectedOptions\n const updatedSelectedItems = this.selectionModel.selected;\n if (isArray(updatedSelectedItems) && updatedSelectedItems.length) {\n this.selectedOptions = updatedSelectedItems[updatedSelectedItems.length - 1].thyRawValue.value;\n }\n\n this.valueChange$.next();\n }\n\n public resetSearch() {\n this.searchResultList = [];\n this.leafNodes = [];\n this.flattenOptions = [];\n }\n\n public clearSelection() {\n this.labelRenderText = '';\n this.selectedOptions = [];\n this.activatedOptions = [];\n this.deselectAllSelected();\n }\n\n private deselectAllSelected() {\n const selectedOptions = this.selectionModel.selected;\n selectedOptions.forEach(item => this.deselectOption(item));\n this.selectionModel.clear();\n this.valueChange$.next();\n }\n\n private deselectOption(option: SelectOptionBase) {\n const value: ThyCascaderOption[] = option.thyRawValue.value;\n value.forEach(item => {\n if (item.isLeaf && item.selected) {\n set(item, 'selected', false);\n }\n });\n }\n\n public selectOption(option: ThyCascaderOption, index: number): void {\n this.selectedOptions = this.activatedOptions;\n this.updatePrevSelectedOptions(option, false, index);\n if (option.selected) {\n this.buildDisplayLabel();\n } else {\n const selectedItems = this.selectionModel.selected;\n const currentItem = selectedItems.find(item => {\n if (item.thyRawValue.value.length - 1 === index) {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n } else {\n return false;\n }\n });\n this.selectionModel.deselect(currentItem);\n }\n this.valueChange$.next();\n }\n\n private addSelectedState(selectOptions: ThyCascaderOption[]) {\n if (this.cascaderOptions.isMultiple && this.cascaderOptions.isOnlySelectLeaf) {\n selectOptions.forEach(opt => {\n if (opt.isLeaf) {\n opt.selected = true;\n set(opt, 'selected', true);\n }\n });\n this.addParentSelectedState(selectOptions);\n }\n }\n\n private addParentSelectedState(selectOptions: ThyCascaderOption[]) {\n selectOptions.forEach(opt => {\n if (opt?.children?.length && opt.children.every(i => i.selected)) {\n opt.selected = true;\n set(opt, 'selected', true);\n if (opt.parent) {\n this.addParentSelectedState([opt.parent]);\n }\n }\n });\n }\n\n private buildDisplayLabel(): void {\n const selectedOptions = [...this.selectedOptions];\n const labels: string[] = selectedOptions.map(o => this.getOptionLabel(o));\n\n if (labels.length === 0) {\n return;\n }\n\n let labelRenderContext;\n let labelRenderText;\n\n if (this.cascaderOptions.isLabelRenderTemplate) {\n labelRenderContext = { labels, selectedOptions };\n } else {\n labelRenderText = defaultDisplayRender.call(this, labels, selectedOptions);\n this.labelRenderText = labelRenderText;\n }\n\n if (this.labelRenderText || this.cascaderOptions.isLabelRenderTemplate) {\n const selectedData: SelectOptionBase = {\n thyRawValue: {\n value: selectedOptions,\n labelText: labelRenderText,\n labelRenderContext: labelRenderContext\n },\n thyValue: labels,\n thyLabelText: labelRenderText\n };\n this.selectionModel.select(selectedData);\n }\n }\n\n public writeCascaderValue(value: any): void {\n if (!this.selectionModel) {\n this.initSelectionModel(this.cascaderOptions.isMultiple);\n }\n if (!this.cascaderOptions.isMultiple) {\n const vs = (this.defaultValue = this.toArray(value));\n if (vs.length) {\n this.initOptions(0);\n } else {\n this.value = vs;\n this.activatedOptions = [];\n this.afterWriteValue();\n }\n } else {\n const values = this.toArray(value);\n this.selectionModel.clear();\n values.forEach(item => {\n const vs = (this.defaultValue = this.toArray(item));\n if (vs.length) {\n this.initOptions(0);\n } else {\n this.value = vs;\n this.activatedOptions = [];\n this.afterWriteValue();\n }\n });\n }\n }\n\n private afterWriteValue() {\n this.selectedOptions = this.activatedOptions;\n this.value = this.getSubmitValue(this.selectedOptions);\n this.addSelectedState(this.selectedOptions);\n this.buildDisplayLabel();\n }\n\n public isActivatedOption(option: ThyCascaderOption, index: number): boolean {\n if (!this.cascaderOptions?.isMultiple || this.cascaderOptions.isOnlySelectLeaf) {\n const activeOpt = this.activatedOptions[index];\n return activeOpt === option;\n } else if (option.isLeaf) {\n return option.selected;\n } else {\n const selectedOpts = this.selectionModel.selected;\n const appearIndex = selectedOpts.findIndex(item => {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n });\n return appearIndex >= 0;\n }\n }\n\n public isHalfSelectedOption(option: ThyCascaderOption, index: number): boolean {\n if (\n !option.selected &&\n this.cascaderOptions.isOnlySelectLeaf &&\n !option.isLeaf &&\n !this.checkSelectedStatus(option, false) &&\n !helpers.isEmpty(option.children)\n ) {\n return true;\n }\n return false;\n }\n\n public getValues() {\n let selectedItems: any[];\n const selected = this.selectionModel.selected;\n selectedItems = selected.map(item => this.getSubmitValue(item.thyRawValue.value));\n return this.cascaderOptions?.isMultiple ? selectedItems : selectedItems[0] ?? selectedItems;\n }\n\n private updatePrevSelectedOptions(option: ThyCascaderOption, isActivateInit: boolean, index?: number) {\n if (isActivateInit) {\n this.handleActivateInit(option);\n } else {\n if (!this.cascaderOptions.isMultiple) {\n this.clearPrevSelectedOptions();\n }\n\n set(option, 'selected', this.isSelected(option, index));\n\n if (this.cascaderOptions.isOnlySelectLeaf && this.cascaderOptions.isMultiple && option.parent) {\n this.updatePrevSelectedOptions(option.parent, false, index - 1);\n }\n }\n\n this.prevSelectedOptions.add(option);\n }\n\n private handleActivateInit(option: ThyCascaderOption): void {\n if (isArray(this.customOptions) && this.customOptions.length > 0) {\n const valueKey = this.cascaderOptions.valueProperty;\n this.customOptions.some(item => get(item, valueKey) == get(option, valueKey)) && set(option, 'selected', true);\n }\n if (this.cascaderOptions.isOnlySelectLeaf && option.isLeaf) {\n set(option, 'selected', true);\n }\n }\n\n private isSelected(option: ThyCascaderOption, index?: number) {\n return this.cascaderOptions.isOnlySelectLeaf && !option.isLeaf && this.cascaderOptions.isMultiple\n ? this.isSelectedOption(option, index)\n : !this.isSelectedOption(option, index);\n }\n\n private clearPrevSelectedOptions() {\n const prevSelectedOptions = Array.from(this.prevSelectedOptions);\n while (prevSelectedOptions.length) {\n set(prevSelectedOptions.pop(), 'selected', false);\n }\n this.prevSelectedOptions = new Set([]);\n }\n\n private getOptionLabel(option: ThyCascaderOption): any {\n return option[this.cascaderOptions.labelProperty || 'label'];\n }\n\n private getOptionValue(option: ThyCascaderOption): any {\n return option[this.cascaderOptions.valueProperty || 'value'];\n }\n\n public removeCustomOption() {\n if (!isArray(this.customOptions) || this.customOptions.length === 0) {\n return;\n }\n\n let selectedCustomOptions = this.getSelectedCustomOptions();\n selectedCustomOptions.forEach(item => {\n this.removeSelectedItem(item);\n });\n }\n\n private getSelectedCustomOptions() {\n const selected = this.cascaderOptions.isMultiple ? this.selectionModel.selected : this.selectionModel.selected[0];\n if (!isArray(selected)) {\n return [];\n }\n const valueKey = this.cascaderOptions.valueProperty;\n return selected.filter(item => {\n const selectedId = get(item, `thyRawValue.value.0.${valueKey}`);\n return this.customOptions.some(option => get(option, valueKey) === selectedId);\n });\n }\n\n toArray<T>(value: T | T[]): T[] {\n if (value == null) {\n return [];\n } else if (!Array.isArray(value)) {\n return [value];\n } else {\n return value;\n }\n }\n\n arrayEquals<T>(array1: T[], array2: T[]): boolean {\n if (!Array.isArray(array1) || !Array.isArray(array2) || array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((element, index) => element === array2[index]);\n }\n}\n","import { SafeAny } from 'ngx-tethys/types';\nimport {\n EXPANDED_DROPDOWN_POSITIONS,\n ScrollToService,\n TabIndexDisabledControlValueAccessorMixin,\n ThyClickDispatcher\n} from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { SelectControlSize, SelectOptionBase, ThySelectControl } from 'ngx-tethys/shared';\nimport { coerceBooleanProperty, elementMatchClosest, isEmpty } from 'ngx-tethys/util';\nimport { BehaviorSubject, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, take, takeUntil } from 'rxjs/operators';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { ThyCascaderOptionComponent } from './cascader-li.component';\nimport { ThyCascaderSearchOptionComponent } from './cascader-search-option.component';\nimport { ThyCascaderExpandTrigger, ThyCascaderOption, ThyCascaderSearchOption, ThyCascaderTriggerType } from './types';\nimport { ThyCascaderService } from './cascader.service';\nimport { scaleYMotion } from 'ngx-tethys/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\n\n/**\n * 级联选择菜单\n * @name thy-cascader\n */\n@Component({\n selector: 'thy-cascader,[thy-cascader]',\n templateUrl: './cascader.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyCascader),\n multi: true\n },\n ThyCascaderService\n ],\n host: {\n '[attr.tabindex]': `tabIndex`,\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n standalone: true,\n imports: [\n CdkOverlayOrigin,\n NgIf,\n ThySelectControl,\n NgClass,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n NgStyle,\n NgFor,\n ThyCascaderOptionComponent,\n ThyCascaderSearchOptionComponent,\n ThyEmpty,\n ThyIcon,\n ThyDivider\n ],\n animations: [scaleYMotion]\n})\nexport class ThyCascader\n extends TabIndexDisabledControlValueAccessorMixin\n implements ControlValueAccessor, OnInit, OnChanges, OnDestroy, AfterContentInit\n{\n /**\n * 选项的实际值的属性名\n */\n @Input() thyValueProperty = 'value';\n\n /**\n * 选项的显示值的属性名\n */\n @Input() thyLabelProperty = 'label';\n\n /**\n * 描述输入字段预期值的简短的提示信息\n */\n @Input() thyPlaceholder = '请选择';\n\n /**\n * 控制大小(4种)\n * @type 'sm' | 'md' | 'lg' | ''\n */\n @Input() thySize: SelectControlSize = '';\n\n /**\n * 数据项\n * @type ThyCascaderOption[]\n * @default []\n */\n @Input()\n set thyOptions(options: ThyCascaderOption[] | null) {\n const columns = options && options.length ? [options] : [];\n this.thyCascaderService.initColumns(columns);\n if (this.thyCascaderService.defaultValue && columns.length) {\n this.thyCascaderService.initOptions(0);\n }\n }\n\n /**\n * 自定义选项\n * @type ThyCascaderOption[]\n * @default []\n */\n @Input() set thyCustomOptions(options: ThyCascaderOption[] | null) {\n this.thyCascaderService.customOptions = (options || []).map(item => ({ ...item }));\n }\n\n get thyCustomOptions() {\n return this.thyCascaderService.customOptions;\n }\n\n /**\n * 点击父级菜单选项时,可通过该函数判断是否允许值的变化\n */\n @Input() thyChangeOn: (option: ThyCascaderOption, level: number) => boolean;\n\n /**\n * 点击项时,表单是否动态展示数据项\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyChangeOnSelect = false;\n\n /**\n * 显示输入框\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowInput = true;\n\n /**\n * 用户自定义选项模板\n * @type TemplateRef\n */\n @Input() thyOptionRender: TemplateRef<SafeAny>;\n\n /**\n * 用户自定义模板\n * @type TemplateRef\n */\n @Input()\n set thyLabelRender(value: TemplateRef<any>) {\n this.labelRenderTpl = value;\n this.isLabelRenderTemplate = value instanceof TemplateRef;\n this.thyCascaderService.setCascaderOptions({ isLabelRenderTemplate: this.isLabelRenderTemplate });\n }\n\n get thyLabelRender(): TemplateRef<any> {\n return this.labelRenderTpl;\n }\n\n /**\n * 用于动态加载选项\n */\n @Input() set thyLoadData(value: (node: ThyCascaderOption, index?: number) => PromiseLike<any>) {\n this.thyCascaderService.setCascaderOptions({ loadData: value });\n }\n\n get thyLoadData() {\n return this.thyCascaderService?.cascaderOptions?.loadData;\n }\n\n /**\n * 控制触发状态, 支持 `click` | `hover`\n * @type ThyCascaderTriggerType | ThyCascaderTriggerType[]\n */\n @Input() thyTriggerAction: ThyCascaderTriggerType | ThyCascaderTriggerType[] = ['click'];\n\n /**\n * 鼠标经过下方列表项时,是否自动展开列表,支持 `click` | `hover`\n * @type ThyCascaderExpandTrigger | ThyCascaderExpandTrigger[]\n */\n @Input() thyExpandTriggerAction: ThyCascaderExpandTrigger | ThyCascaderExpandTrigger[] = ['click'];\n\n /**\n * 自定义浮层样式\n */\n @Input() thyMenuStyle: { [key: string]: string };\n\n /**\n * 自定义搜索样式\n */\n @Input() thySearchListStyle: { [key: string]: string };\n\n /**\n * 自定义浮层类名\n * @type string\n */\n @Input()\n set thyMenuClassName(value: string) {\n this.menuClassName = value;\n this.setMenuClass();\n }\n\n get thyMenuClassName(): string {\n return this.menuClassName;\n }\n\n /**\n * 自定义浮层列类名\n * @type string\n */\n @Input()\n set thyColumnClassName(value: string) {\n this.columnClassName = value;\n this.setMenuClass();\n }\n\n get thyColumnClassName(): string {\n return this.columnClassName;\n }\n\n /**\n * 是否只读\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n override set thyDisabled(value: boolean) {\n this.disabled = value;\n }\n override get thyDisabled(): boolean {\n return this.disabled;\n }\n\n disabled = false;\n\n /**\n * 空状态下的展示文字\n * @default 暂无可选项\n */\n @Input()\n set thyEmptyStateText(value: string) {\n this.emptyStateText = value;\n }\n\n /**\n * 是否多选\n * @type boolean\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thyMultiple(value: boolean) {\n this.isMultiple = value;\n this.thyCascaderService.setCascaderOptions({ isMultiple: value });\n }\n\n get thyMultiple(): boolean {\n return this.isMultiple;\n }\n\n /**\n * 设置多选时最大显示的标签数量,0 表示不限制\n * @type number\n */\n @Input({ transform: numberAttribute }) thyMaxTagCount = 0;\n\n /**\n * 是否仅允许选择叶子项\n * @default true\n */\n @Input({ transform: coerceBooleanProperty })\n thyIsOnlySelectLeaf = true;\n\n /**\n * 初始化时,是否展开面板\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyAutoExpand: boolean;\n\n /**\n * 是否支持搜索\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyShowSearch: boolean = false;\n\n /**\n * 多选选中项的展示方式,默认为空,渲染文字模板,传入tag,渲染展示模板,\n * @default ''|tag\n */\n @Input() thyPreset: string = '';\n\n /**\n * 是否有幕布\n */\n @Input({ transform: coerceBooleanProperty }) thyHasBackdrop = true;\n\n /**\n * 值发生变化时触发,返回选择项的值\n * @type EventEmitter<any[]>\n */\n @Output() thyChange = new EventEmitter<any[]>();\n\n /**\n * 值发生变化时触发,返回选择项列表\n * @type EventEmitter<ThyCascaderOption[]>\n */\n @Output() thySelectionChange = new EventEmitter<ThyCascaderOption[]>();\n\n /**\n * 选择选项时触发\n */\n @Output() thySelect = new EventEmitter<{\n option: ThyCascaderOption;\n index: number;\n }>();\n\n /**\n * @private 暂无实现\n */\n @Output() thyDeselect = new EventEmitter<{\n option: ThyCascaderOption;\n index: number;\n }>();\n\n /**\n * 清空选项时触发\n */\n @Output() thyClear = new EventEmitter<void>();\n\n /**\n * 下拉选项展开和折叠状态事件\n */\n @Output() thyExpandStatusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChildren('cascaderOptions', { read: ElementRef }) cascaderOptions: QueryList<ElementRef>;\n\n @ViewChildren('cascaderOptionContainers', { read: ElementRef }) cascaderOptionContainers: QueryList<ElementRef>;\n\n @ViewChild(CdkConnectedOverlay, { static: true }) cdkConnectedOverlay: CdkConnectedOverlay;\n\n @ViewChild('trigger', { read: ElementRef, static: true }) trigger: ElementRef<any>;\n\n @ViewChild('input') input: ElementRef;\n\n @ViewChild('menu') menu: ElementRef;\n\n public dropDownPosition = 'bottom';\n\n public menuVisible = false;\n\n public isLabelRenderTemplate = false;\n\n public triggerRect: DOMRect;\n\n public emptyStateText = '暂无可选项';\n\n private prefixCls = 'thy-cascader';\n\n private menuClassName: string;\n\n private columnClassName: string;\n\n private _menuColumnCls: any;\n\n private readonly destroy$ = new Subject<void>();\n\n private _menuCls: { [name: string]: any };\n\n private _labelCls: { [name: string]: any };\n\n private labelRenderTpl: TemplateRef<any>;\n\n private hostRenderer = useHostRenderer();\n\n public positions: ConnectionPositionPair[];\n\n get selected(): SelectOptionBase | SelectOptionBase[] {\n return this.thyMultiple ? this.thyCascaderService.selectionModel.selected : this.thyCascaderService.selectionModel.selected[0];\n }\n private isMultiple = false;\n\n public menuMinWidth = 122;\n\n private searchText$ = new BehaviorSubject('');\n\n public get searchResultList(): ThyCascaderSearchOption[] {\n return this.thyCascaderService.searchResultList;\n }\n\n public isShowSearchPanel: boolean = false;\n\n /**\n * 解决搜索&多选的情况下,点击搜索项会导致 panel 闪烁\n * 由于点击后,thySelectedOptions变化,导致 thySelectControl\n * 又会触发 searchFilter 函数,即 resetSearch 会执行\n * 会导致恢复级联状态再变为搜索状态\n */\n private isSelectingSearchState: boolean = false;\n\n public get isLoading() {\n return this.thyCascaderService?.isLoading;\n }\n\n public get columns() {\n return this.thyCascaderService.columns;\n }\n\n private afterChangeFn: () => void;\n\n private resizeSubscription: Subscription;\n\n ngOnInit(): void {\n this.setClassMap();\n this.setMenuClass();\n this.setMenuColumnClass();\n this.setLabelClass();\n this.initPosition();\n this.initSearch();\n const options = {\n labelProperty: this.thyLabelProperty,\n valueProperty: this.thyValueProperty,\n isMultiple: this.isMultiple,\n isOnlySelectLeaf: this.thyIsOnlySelectLeaf,\n isLabelRenderTemplate: this.isLabelRenderTemplate,\n loadData: this.thyLoadData\n };\n this.thyCascaderService.setCascaderOptions(options);\n\n this.thyCascaderService.cascaderValueChange().subscribe(options => {\n if (!options.isValueEqual) {\n this.onChangeFn(options.value);\n if (options.isSelectionModelEmpty) {\n this.thyClear.emit();\n }\n this.thySelectionChange.emit(this.thyCascaderService.selectedOptions);\n this.thyChange.emit(options.value);\n if (this.afterChangeFn) {\n this.afterChangeFn();\n this.afterChangeFn = null;\n }\n }\n });\n\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n if (\n !this.elementRef.nativeElement.contains(event.target) &&\n !this.menu?.nativeElement.contains(event.target as Node) &&\n this.menuVisible\n ) {\n this.ngZone.run(() => {\n this.closeMenu();\n this.cdr.markForCheck();\n });\n }\n });\n }\n }\n\n ngAfterContentInit() {\n if (this.thyAutoExpand) {\n timer(0).subscribe(() => {\n this.cdr.markForCheck();\n this.setMenuVisible(true);\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['thyIsOnlySelectLeaf']) {\n this.thyCascaderService.setCascaderOptions({ isOnlySelectLeaf: changes['thyIsOnlySelectLeaf'].currentValue });\n }\n }\n\n private initPosition() {\n const cascaderPosition: ConnectionPositionPair[] = EXPANDED_DROPDOWN_POSITIONS.map(item => {\n return { ...item };\n });\n this.positions = cascaderPosition;\n }\n\n writeValue(value: any): void {\n this.thyCascaderService.writeCascaderValue(value);\n if (this.isMultiple) {\n this.cdr.detectChanges();\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public positionChange(position: ConnectedOverlayPositionChange): void {\n const newValue = position.connectionPair.originY === 'bottom' ? 'bottom' : 'top';\n if (this.dropDownPosition !== newValue) {\n this.dropDownPosition = newValue;\n this.cdr.detectChanges();\n }\n }\n\n public isActivatedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isActivatedOption(option, index);\n }\n\n public isHalfSelectedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isHalfSelectedOption(option, index);\n }\n\n public isSelectedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isSelectedOption(option, index);\n }\n\n public attached(): void {\n this.cdr.detectChanges();\n this.cdkConnectedOverlay.positionChange.pipe(take(1), takeUntil(this.destroy$)).subscribe(() => {\n this.scrollActiveElementIntoView();\n });\n }\n\n private scrollActiveElementIntoView() {\n if (!isEmpty(this.thyCascaderService.selectedOptions)) {\n const activeOptions = this.cascaderOptions\n .filter(item => item.nativeElement.classList.contains('thy-cascader-menu-item-active'))\n // for multiple mode\n .slice(-this.cascaderOptionContainers.length);\n\n this.cascaderOptionContainers.forEach((item, index) => {\n if (index <= activeOptions.length - 1) {\n ScrollToService.scrollToElement(activeOptions[index].nativeElement, item.nativeElement);\n this.cdr.detectChanges();\n }\n });\n }\n }\n\n public setMenuVisible(menuVisible: boolean): void {\n if (this.menuVisible !== menuVisible) {\n this.menuVisible = menuVisible;\n\n this.thyCascaderService.initActivatedOptions(this.menuVisible);\n this.setClassMap();\n this.setMenuClass();\n if (this.menuVisible) {\n this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n this.subscribeTriggerResize();\n } else {\n this.unsubscribeTriggerResize();\n }\n this.thyExpandStatusChange.emit(menuVisible);\n }\n }\n\n public get menuCls(): any {\n return this._menuCls;\n }\n\n private setMenuClass(): void {\n this._menuCls = {\n [`${this.prefixCls}-menus`]: true,\n [`${this.prefixCls}-menus-hidden`]: !this.menuVisible,\n [`${this.thyMenuClassName}`]: this.thyMenuClassName,\n [`w-100`]: this.columns.length === 0\n };\n }\n\n public get menuColumnCls(): any {\n return this._menuColumnCls;\n }\n\n private setMenuColumnClass(): void {\n this._menuColumnCls = {\n [`${this.prefixCls}-menu`]: true,\n [`${this.thyColumnClassName}`]: this.thyColumnClassName\n };\n }\n\n public get labelCls(): any {\n return this._labelCls;\n }\n\n private setLabelClass(): void {\n this._labelCls = {\n [`${this.prefixCls}-picker-label`]: true,\n [`${this.prefixCls}-show-search`]: false,\n [`${this.prefixCls}-focused`]: false,\n 'text-truncate': true\n };\n }\n\n private setClassMap(): void {\n const classMap = {\n [`${this.prefixCls}`]: true,\n [`${this.prefixCls}-picker`]: true,\n [`${this.prefixCls}-${this.thySize}`]: true,\n [`${this.prefixCls}-picker-disabled`]: this.disabled,\n [`${this.prefixCls}-picker-open`]: this.menuVisible\n };\n this.hostRenderer.updateClassByMap(classMap);\n }\n\n private isClickTriggerAction(): boolean {\n if (typeof this.thyTriggerAction === 'string') {\n return this.thyTriggerAction === 'click';\n }\n return this.thyTriggerAction.indexOf('click') !== -1;\n }\n\n private isHoverTriggerAction(): boolean {\n if (typeof this.thyTriggerAction === 'string') {\n return this.thyTriggerAction === 'hover';\n }\n return this.thyTriggerAction.indexOf('hover') !== -1;\n }\n\n private isHoverExpandTriggerAction(): boolean {\n if (typeof this.thyExpandTriggerAction === 'string') {\n return this.thyExpandTriggerAction === 'hover';\n }\n return this.thyExpandTriggerAction.indexOf('hover') !== -1;\n }\n\n @HostListener('click', ['$event'])\n public toggleClick($event: Event) {\n if (this.disabled) {\n return;\n }\n if (this.isClickTriggerAction()) {\n this.setMenuVisible(!this.menuVisible);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n public toggleMouseEnter(event: MouseEvent): void {\n if (this.disabled || !this.isHoverTriggerAction() || this.menuVisible) {\n return;\n }\n\n this.setMenuVisible(true);\n }\n\n @HostListener('mouseleave', ['$event'])\n public toggleMouseLeave(event: MouseEvent): void {\n if (this.disabled || !this.isHoverTriggerAction() || !this.menuVisible) {\n event.preventDefault();\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const mouseTarget = event.relatedTarget as HTMLElement;\n if (\n hostEl.contains(mouseTarget) ||\n mouseTarget?.classList.contains('cdk-overlay-pane') ||\n mouseTarget?.classList.contains('cdk-overlay-backdrop')\n ) {\n return;\n }\n\n this.setMenuVisible(false);\n }\n\n public clickCustomOption(option: ThyCascaderOption, index: number, event: Event | boolean): void {\n if (event === true) {\n this.thyCascaderService.clearSelection();\n }\n this.thyCascaderService.clickOption(option, index, event, this.selectOption);\n }\n\n public clickOption(option: ThyCascaderOption, index: number, event: Event | boolean): void {\n this.thyCascaderService.removeCustomOption();\n this.thyCascaderService.clickOption(option, index, event, this.selectOption);\n }\n\n public mouseoverOption(option: ThyCascaderOption, index: number, event: Event): void {\n if (event) {\n event.preventDefault();\n }\n\n if (option && option.disabled && !this.isMultiple) {\n return;\n }\n\n if (!this.isHoverExpandTriggerAction() && !(option && option.disabled && this.isMultiple)) {\n return;\n }\n this.setActiveOption(option, index, false);\n }\n\n onBlur(event?: FocusEvent) {\n // Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n if (elementMatchClosest(event?.relatedTarget as HTMLElement, ['.thy-cascader-menus', 'thy-cascader'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n onFocus(event?: FocusEvent) {\n if (!elementMatchClosest(event?.relatedTarget as HTMLElement, ['.thy-cascader-menus', 'thy-cascader'])) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement.focus();\n }\n }\n\n public closeMenu(): void {\n if (this.menuVisible) {\n this.setMenuVisible(false);\n this.onTouchedFn();\n this.isShowSearchPanel = false;\n this.thyCascaderService.searchResultList = [];\n }\n }\n\n public setActiveOption(option: ThyCascaderOption, index: number, select: boolean, loadChildren: boolean = true): void {\n this.thyCascaderService.setActiveOption(option, index, select, loadChildren, this.selectOption);\n }\n\n private selectOption = (option: ThyCascaderOption, index: number) => {\n if ((option.isLeaf || !this.thyIsOnlySelectLeaf) && !this.thyMultiple) {\n this.afterChangeFn = () => {\n this.setMenuVisible(false);\n this.onTouchedFn();\n };\n }\n this.thySelect.emit({ option, index });\n const isOptionCanSelect = this.thyChangeOnSelect && !this.isMultiple;\n if (option.isLeaf || !this.thyIsOnlySelectLeaf || isOptionCanSelect || this.shouldPerformSelection(option, index)) {\n this.thyCascaderService.selectOption(option, index);\n }\n };\n\n public removeSelectedItem(event: { item: SelectOptionBase; $eventOrigin: Event }) {\n event.$eventOrigin.stopPropagation();\n this.thyCascaderService.removeSelectedItem(event?.item);\n }\n\n private shouldPerformSelection(option: ThyCascaderOption, level: number): boolean {\n return typeof this.thyChangeOn === 'function' ? this.thyChangeOn(option, level) === true : false;\n }\n\n public clearSelection($event: Event): void {\n if ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n this.afterChangeFn = () => {\n this.setMenuVisible(false);\n };\n this.thyCascaderService.clearSelection();\n }\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: string,\n private cdr: ChangeDetectorRef,\n public elementRef: ElementRef,\n private thyClickDispatcher: ThyClickDispatcher,\n private ngZone: NgZone,\n public thyCascaderService: ThyCascaderService\n ) {\n super();\n }\n\n public trackByFn(index: number, item: ThyCascaderOption) {\n return item?.value || item?._id || index;\n }\n\n public searchFilter(searchText: string) {\n if (!searchText && !this.isSelectingSearchState) {\n this.resetSearch();\n }\n this.searchText$.next(searchText);\n }\n\n private initSearch() {\n this.searchText$\n .pipe(\n takeUntil(this.destroy$),\n debounceTime(200),\n distinctUntilChanged(),\n filter(text => text !== '')\n )\n .subscribe(searchText => {\n this.resetSearch();\n\n // local search\n this.searchInLocal(searchText);\n this.isShowSearchPanel = true;\n this.cdr.markForCheck();\n });\n }\n\n private searchInLocal(searchText: string): void {\n this.thyCascaderService.searchInLocal(searchText);\n }\n\n private resetSearch() {\n this.isShowSearchPanel = false;\n this.thyCascaderService.resetSearch();\n this.scrollActiveElementIntoView();\n }\n\n public selectSearchResult(selectOptionData: ThyCascaderSearchOption): void {\n const { thyRowValue: selectedOptions } = selectOptionData;\n if (selectOptionData.selected) {\n if (!this.isMultiple) {\n this.closeMenu();\n }\n return;\n }\n selectedOptions.forEach((item: ThyCascaderOption, index: number) => {\n this.setActiveOption(item, index, index === selectedOptions.length - 1);\n });\n if (this.isMultiple) {\n this.isSelectingSearchState = true;\n selectOptionData.selected = true;\n const originSearchResultList = this.searchResultList;\n // 保持搜索选项\n setTimeout(() => {\n this.isShowSearchPanel = true;\n this.thyCascaderService.searchResultList = originSearchResultList;\n this.isSelectingSearchState = false;\n });\n } else {\n this.resetSearch();\n }\n }\n\n private subscribeTriggerResize(): void {\n this.unsubscribeTriggerResize();\n this.ngZone.runOutsideAngular(() => {\n this.resizeSubscription = new Observable(observer => {\n const resize = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n observer.next();\n });\n resize.observe(this.trigger.nativeElement);\n }).subscribe(() => {\n this.ngZone.run(() => {\n this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n }\n this.cdr.markForCheck();\n });\n });\n });\n }\n\n private unsubscribeTriggerResize(): void {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n this.resizeSubscription = null;\n }\n }\n\n ngOnDestroy() {\n this.unsubscribeTriggerResize();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" #trigger>\n <ng-container *ngIf=\"thyShowInput\">\n <div\n thySelectControl\n [thyShowSearch]=\"thyShowSearch\"\n [thySize]=\"thySize\"\n [thyAllowClear]=\"true\"\n [thySelectedOptions]=\"selected\"\n [thyMaxTagCount]=\"thyMaxTagCount\"\n (thyOnRemove)=\"removeSelectedItem($event)\"\n (thyOnClear)=\"clearSelection($event)\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnSearch)=\"searchFilter($event)\"\n [thyDisabled]=\"disabled\"\n [thyIsMultiple]=\"thyMultiple\"\n [thyPanelOpened]=\"menuVisible\"\n [thyPlaceholder]=\"thyPlaceholder\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyPreset]=\"thyPreset\">\n <ng-template #customDisplayTemplate let-value>\n <span [ngClass]=\"labelCls\">\n <ng-container *ngIf=\"!isLabelRenderTemplate; else labelTemplate\">{{ value.labelText }}</ng-container>\n <ng-template #labelTemplate>\n <ng-template [ngTemplateOutlet]=\"thyLabelRender\" [ngTemplateOutletContext]=\"value.labelRenderContext\"></ng-template>\n </ng-template>\n </span>\n </ng-template>\n </div>\n </ng-container>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"thyHasBackdrop\"\n cdkConnectedOverlayBackdropClass=\"thy-cascader-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"menuMinWidth\"\n cdkConnectedOverlayTransformOriginOn=\".thy-cascader-menus\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"closeMenu()\"\n (attach)=\"attached()\"\n (positionChange)=\"positionChange($event)\"\n [cdkConnectedOverlayOpen]=\"menuVisible\">\n <div\n [attr.tabindex]=\"-1\"\n #menu\n [ngClass]=\"menuCls\"\n [ngStyle]=\"thyMenuStyle\"\n (mouseleave)=\"toggleMouseLeave($event)\"\n [@scaleYMotion]=\"'enter'\">\n <ng-container *ngIf=\"!isShowSearchPanel\">\n <ng-container *ngIf=\"columns.length > 0; else emptyPlaceholder\">\n <ul #cascaderOptionContainers *ngFor=\"let options of columns; let i = index; let isFirst = first\" [ngClass]=\"menuColumnCls\">\n <ng-container *ngIf=\"thyCustomOptions && thyCustomOptions.length > 0 && isFirst\">\n <li\n #cascaderOptions\n thy-cascader-option\n *ngFor=\"let customOpt of thyCustomOptions; trackBy: trackByFn\"\n [option]=\"customOpt\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [labelProperty]=\"thyLabelProperty\"\n [active]=\"isActivatedOption(customOpt, 0)\"\n [halfSelected]=\"isHalfSelectedOption(customOpt, 0)\"\n [selected]=\"isSelectedOption(customOpt, 0)\"\n (toggleSelectChange)=\"clickCustomOption(customOpt, 0, $event)\"\n (click)=\"clickCustomOption(customOpt, 0, $event)\"\n (mouseover)=\"mouseoverOption(customOpt, 0, $event)\"></li>\n <thy-divider class=\"my-1 mx-4\"></thy-divider>\n </ng-container>\n\n <li\n #cascaderOptions\n thy-cascader-option\n *ngFor=\"let option of options; trackBy: trackByFn\"\n [option]=\"option\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [labelProperty]=\"thyLabelProperty\"\n [active]=\"isActivatedOption(option, i)\"\n [halfSelected]=\"isHalfSelectedOption(option, i)\"\n [selected]=\"isSelectedOption(option, i)\"\n [optionRender]=\"thyOptionRender\"\n (toggleSelectChange)=\"clickOption(option, i, $event)\"\n (click)=\"clickOption(option, i, $event)\"\n (mouseover)=\"mouseoverOption(option, i, $event)\"></li>\n </ul>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isShowSearchPanel\">\n <ng-container *ngIf=\"searchResultList.length; else emptyPlaceholder\">\n <ul class=\"thy-cascader-search-list py-3\" [ngStyle]=\"thySearchListStyle\">\n <li\n thy-cascader-search-option\n *ngFor=\"let item of searchResultList\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [option]=\"item\"\n [active]=\"item.selected\"\n [optionRender]=\"thyOptionRender\"\n (toggleSelectChange)=\"selectSearchResult($event)\"></li>\n </ul>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #emptyPlaceholder>\n <div class=\"thy-cascader-empty-container\" [ngStyle]=\"{ 'width.px': triggerRect?.width }\">\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"emptyStateText\"></thy-empty>\n </div>\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 { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThySelectCommonModule } from 'ngx-tethys/shared';\nimport { ThyCascaderOptionComponent } from './cascader-li.component';\nimport { ThyCascaderSearchOptionComponent } from './cascader-search-option.component';\nimport { ThyCascader } from './cascader.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyInputModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThyCheckboxModule,\n ThyFlexibleTextModule,\n ThyCascader,\n ThyCascaderOptionComponent,\n ThyCascaderSearchOptionComponent\n ],\n exports: [ThyCascader]\n})\nexport class ThyCascaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ThyCascaderService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-cascader.mjs","sources":["../../../src/cascader/cascader-li.component.ts","../../../src/cascader/cascader-li.component.html","../../../src/cascader/cascader-search-option.component.ts","../../../src/cascader/cascader-search-option.component.html","../../../src/cascader/cascader.service.ts","../../../src/cascader/cascader.component.ts","../../../src/cascader/cascader.component.html","../../../src/cascader/module.ts","../../../src/cascader/ngx-tethys-cascader.ts"],"sourcesContent":["import { ThyCheckbox } from 'ngx-tethys/checkbox';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyRadio } from 'ngx-tethys/radio';\nimport { ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyCascaderOption } from './types';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thy-cascader-option]',\n templateUrl: './cascader-li.component.html',\n standalone: true,\n imports: [NgIf, ThyFlexibleText, ThyCheckbox, ThyRadio, FormsModule, ThyStopPropagationDirective, NgTemplateOutlet]\n})\nexport class ThyCascaderOptionComponent implements OnInit {\n @Input() option: ThyCascaderOption;\n\n @Input({ transform: coerceBooleanProperty })\n multiple = false;\n\n @Input({ transform: coerceBooleanProperty })\n isOnlySelectLeaf = true;\n\n @Input()\n optionRender: TemplateRef<SafeAny>;\n\n @HostBinding('class') class = 'd-flex';\n\n @HostBinding('class.thy-cascader-menu-item') item = true;\n\n @HostBinding('class.thy-cascader-menu-item-active')\n @Input({ transform: coerceBooleanProperty })\n active: boolean = false;\n\n @Input({ transform: coerceBooleanProperty })\n halfSelected = false;\n\n @Input({ transform: coerceBooleanProperty })\n selected: boolean = false;\n\n @HostBinding('class.thy-cascader-menu-item-disabled')\n get disabled() {\n return this.option.disabled;\n }\n\n @HostBinding('class.thy-cascader-menu-item-expand')\n get expand() {\n return this.option && !this.option.isLeaf;\n }\n\n @Input() labelProperty: string = 'label';\n\n @Output() toggleSelectChange: EventEmitter<boolean> = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n public toggleOption(value: boolean) {\n this.toggleSelectChange.emit(value);\n }\n}\n","<div thyStopPropagation *ngIf=\"!option.readonly\">\n <label *ngIf=\"multiple\" class=\"mr-2\" thyCheckbox [disabled]=\"option.disabled\" [name]=\"option.value || option._id\"\n [thyIndeterminate]=\"halfSelected\" [(ngModel)]=\"selected\" (ngModelChange)=\"toggleOption($event)\"></label>\n\n <label *ngIf=\"!multiple && !isOnlySelectLeaf\" class=\"mr-2\" thyRadio [disabled]=\"option.disabled\"\n [name]=\"option.value || option._id\" [(ngModel)]=\"selected\" (ngModelChange)=\"toggleOption($event)\"></label>\n</div>\n\n\n<ng-container *ngIf=\"!optionRender; else optionTemplate\">\n <span thyFlexibleText [thyTooltipContent]=\"option[labelProperty] || ''\"> {{ option[labelProperty] || '' }}</span>\n</ng-container>\n<ng-template #optionTemplate>\n <ng-template [ngTemplateOutlet]=\"optionRender\" [ngTemplateOutletContext]=\"{ option }\"></ng-template>\n</ng-template>\n\n<span *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>\n","import { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyBreadcrumb, ThyBreadcrumbItem } from 'ngx-tethys/breadcrumb';\nimport { ThyCheckbox } from 'ngx-tethys/checkbox';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyCascaderSearchOption } from './types';\nimport { SafeAny } from 'ngx-tethys/types';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thy-cascader-search-option]',\n templateUrl: './cascader-search-option.component.html',\n standalone: true,\n imports: [NgIf, NgFor, ThyFlexibleText, ThyCheckbox, ThyBreadcrumb, ThyBreadcrumbItem, ThyIcon, FormsModule, NgTemplateOutlet]\n})\nexport class ThyCascaderSearchOptionComponent implements OnInit {\n @Input() option: ThyCascaderSearchOption;\n\n @HostBinding('class.multiple')\n @Input({ transform: coerceBooleanProperty })\n multiple = false;\n\n @Input({ transform: coerceBooleanProperty })\n isOnlySelectLeaf = true;\n @HostBinding('class') className = 'thy-cascader-search-list-item px-4 d-flex align-items-center cursor-pointer';\n\n @HostBinding('class.active')\n @Input({ transform: coerceBooleanProperty })\n active: boolean = false;\n\n @Input()\n optionRender: TemplateRef<SafeAny>;\n\n @HostListener('click', ['$event'])\n public toggleClick($event: Event) {\n if (this.multiple) {\n return;\n }\n this.toggleSelectChange.emit(this.option);\n }\n\n @Output() toggleSelectChange: EventEmitter<ThyCascaderSearchOption> = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n public clickCheckbox(event: Event) {\n // 已选中的在搜索情况下不能取消选择\n if (this.active) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n public toggleOption(value: boolean) {\n this.toggleSelectChange.emit(this.option);\n }\n}\n","<label *ngIf=\"multiple\" class=\"mr-1\" thyCheckbox [disabled]=\"option.thyRowValue[option.thyRowValue.length - 1].disabled\"\n [ngModel]=\"active\" (click)=\"clickCheckbox($event)\" (ngModelChange)=\"toggleOption($event)\" [thyLabelText]=\"''\"></label>\n\n<thy-breadcrumb thySeparator=\"slash\">\n <ng-container *ngFor=\"let label of option.labelList; index as i\">\n <thy-breadcrumb-item [ngClass]=\"{ 'text-muted': !(option.thyRowValue[i].isLeaf && isOnlySelectLeaf) }\">\n <ng-container *ngIf=\"!optionRender; else optionTemplate\">\n <span class=\"option-label-item\" thyFlexibleText [thyTooltipContent]=\"label\">{{ label }}</span>\n </ng-container>\n <ng-template #optionTemplate>\n <ng-template [ngTemplateOutlet]=\"optionRender\" [ngTemplateOutletContext]=\"{ option: option.thyRowValue[i] }\">\n </ng-template>\n </ng-template>\n </thy-breadcrumb-item>\n </ng-container>\n</thy-breadcrumb>\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Injectable } from '@angular/core';\nimport { Id } from '@tethys/cdk/immutable';\nimport { SelectOptionBase } from 'ngx-tethys/shared';\nimport { helpers, isArray, isEmpty, isUndefinedOrNull, set, get } from 'ngx-tethys/util';\nimport { Subject } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\nimport { ThyCascaderOption, ThyCascaderSearchOption } from './types';\nconst defaultDisplayRender = (label: any) => label.join(' / ');\n\n/**\n * @internal\n */\n@Injectable()\nexport class ThyCascaderService {\n public selectionModel: SelectionModel<SelectOptionBase>;\n\n public columns: ThyCascaderOption[][] = [];\n\n public customOptions: ThyCascaderOption[];\n\n public cascaderOptions: {\n labelProperty?: string;\n valueProperty?: string;\n isMultiple?: boolean;\n isOnlySelectLeaf?: boolean;\n isLabelRenderTemplate?: boolean;\n loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<any>;\n };\n\n public selectedOptions: ThyCascaderOption[] = [];\n\n public activatedOptions: ThyCascaderOption[] = [];\n\n public labelRenderText: string;\n\n public flattenOptions: ThyCascaderSearchOption[] = [];\n\n public leafNodes: ThyCascaderSearchOption[] = [];\n\n public isLoading = false;\n\n public searchResultList: ThyCascaderSearchOption[] = [];\n\n public defaultValue: any[];\n\n public value: any[];\n\n private prevSelectedOptions: Set<ThyCascaderOption> = new Set<ThyCascaderOption>();\n\n public valueChange$ = new Subject();\n\n public cascaderValueChange() {\n return this.valueChange$.pipe(\n map(() => {\n const valueChangeOptions = {\n value: this.getValues(),\n isValueEqual: this.arrayEquals(this.value, this.getValues()),\n isSelectionModelEmpty: this.selectionModel.isEmpty()\n };\n this.defaultValue = null;\n this.value = this.getValues();\n return valueChangeOptions;\n }),\n debounceTime(100)\n );\n }\n\n public setCascaderOptions(options: {\n labelProperty?: string;\n valueProperty?: string;\n isMultiple?: boolean;\n isOnlySelectLeaf?: boolean;\n isLabelRenderTemplate?: boolean;\n loadData?: (node: ThyCascaderOption, index?: number) => PromiseLike<any>;\n }) {\n this.cascaderOptions = { ...this.cascaderOptions, ...options };\n if (this.cascaderOptions.hasOwnProperty('isMultiple')) {\n this.initSelectionModel(this.cascaderOptions.isMultiple);\n }\n }\n\n public initSelectionModel(isMultiple?: boolean) {\n if (this.selectionModel) {\n this.selectionModel.clear();\n } else {\n this.selectionModel = new SelectionModel(isMultiple);\n }\n }\n\n public initColumns(columns: ThyCascaderOption[][]) {\n this.columns = columns;\n }\n\n public initActivatedOptions(menuVisible: boolean) {\n if (isEmpty(this.selectedOptions) || !menuVisible) {\n return;\n }\n this.activatedOptions = [...this.selectedOptions];\n this.activatedOptions.forEach((item, index) => {\n if (!isEmpty(item.children) && !item.isLeaf) {\n this.columns[index + 1] = item.children;\n }\n });\n }\n\n public initOptions(index: number) {\n const vs = this.defaultValue;\n const load = () => {\n this.activateOnInit(index, vs[index]);\n if (index < vs.length - 1) {\n this.initOptions(index + 1);\n }\n if (index === vs.length - 1) {\n this.afterWriteValue();\n }\n };\n\n if (this.columns[index]?.length || !this.cascaderOptions.loadData) {\n load();\n } else {\n const node = this.activatedOptions[index - 1] || {};\n this.loadChildren(node, index - 1, load, this.afterWriteValue.bind(this));\n }\n }\n\n public clickOption(\n option: ThyCascaderOption,\n index: number,\n event: Event | boolean,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ) {\n if (option?.disabled && !this.cascaderOptions.isMultiple) {\n return;\n }\n\n const isSelect = event instanceof Event ? !this.cascaderOptions.isMultiple && option.isLeaf : true;\n\n if (this.cascaderOptions.isMultiple && !option.isLeaf && this.cascaderOptions.isOnlySelectLeaf && isSelect) {\n this.toggleAllChildren(option, index, event as boolean, selectFn);\n } else {\n this.setActiveOption(option, index, isSelect, true, selectFn);\n }\n }\n\n public setActiveOption(\n option: ThyCascaderOption,\n index: number,\n select: boolean,\n loadChildren: boolean = true,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ): void {\n this.activatedOptions[index] = option;\n for (let i = index - 1; i >= 0; i--) {\n const originOption = this.activatedOptions[i + 1]?.parent;\n if (\n !this.activatedOptions[i] ||\n originOption?.[this.cascaderOptions.valueProperty] !== this.activatedOptions[i]?.[this.cascaderOptions.valueProperty]\n ) {\n this.activatedOptions[i] = originOption ?? this.activatedOptions[i];\n }\n }\n if (index < this.activatedOptions.length - 1) {\n this.activatedOptions = this.activatedOptions.slice(0, index + 1);\n }\n if (isArray(option.children) && option.children.length) {\n option.isLeaf = false;\n option.children.forEach(child => (child.parent = option));\n this.setColumnData(option.children, index + 1);\n } else if (!option.isLeaf && loadChildren) {\n this.loadChildren(option, index);\n } else if (index < this.columns.length - 1) {\n this.columns = this.columns.slice(0, index + 1);\n }\n\n if (select) {\n selectFn(option, index);\n }\n }\n\n private loadChildren(option: ThyCascaderOption, index: number, success?: () => void, failure?: () => void): void {\n if (!this.cascaderOptions?.loadData) {\n this.setColumnData(option.children || [], index + 1);\n return;\n }\n\n this.isLoading = true;\n\n this.cascaderOptions.loadData(option, index).then(\n () => this.handleLoadDataSuccess(option, index, success),\n () => this.handleLoadDataFailure(option, index, failure)\n );\n }\n\n private handleLoadDataSuccess(option: ThyCascaderOption, index: number, success?: () => void): void {\n option.loading = this.isLoading = false;\n\n if (option.children) {\n option.children.forEach(child => (child.parent = index < 0 ? undefined : option));\n this.setColumnData(option.children, index + 1);\n }\n\n if (success) {\n success();\n }\n }\n\n private handleLoadDataFailure(option: ThyCascaderOption, index: number, failure?: () => void): void {\n option.loading = this.isLoading = false;\n option.isLeaf = true;\n\n if (failure) {\n failure();\n }\n }\n\n private activateOnInit(index: number, value: any): void {\n let option: ThyCascaderOption;\n if (isArray(this.customOptions) && this.customOptions.length > 0) {\n option = this.customOptions.find(item => get(item, this.cascaderOptions.valueProperty) === value);\n }\n if (isUndefinedOrNull(option)) {\n option = this.findOption(value, index);\n }\n if (!option) {\n option =\n typeof value === 'object'\n ? value\n : {\n [`${this.cascaderOptions.valueProperty || 'value'}`]: value,\n [`${this.cascaderOptions.labelProperty || 'label'}`]: value\n };\n }\n this.updatePrevSelectedOptions(option, true);\n this.setActiveOption(option, index, false, false);\n }\n\n public isSelectedOption(option: ThyCascaderOption, index: number): boolean {\n if (this.cascaderOptions?.isOnlySelectLeaf) {\n if (option.isLeaf) {\n return option.selected;\n } else {\n return this.checkSelectedStatus(option, true);\n }\n } else {\n const selectedOpts = this.selectionModel.selected;\n const appearIndex = selectedOpts.findIndex(item => {\n if (item.thyRawValue.value.length - 1 === index) {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n } else {\n return false;\n }\n });\n return appearIndex >= 0;\n }\n }\n\n private toggleAllChildren(\n option: ThyCascaderOption,\n index: number,\n selected: boolean,\n selectFn?: (option: ThyCascaderOption, index: number) => void\n ): void {\n const allLeafs: {\n option: ThyCascaderOption;\n index: number;\n }[] = this.getAllLeafs(option, index, selected);\n option.selected = selected;\n\n while (allLeafs.length) {\n const { option, index } = allLeafs.shift();\n option.selected = !selected;\n this.setActiveOption(option, index, true, null, selectFn);\n }\n\n for (let i = 0; i < this.activatedOptions.length; i++) {\n const option = this.activatedOptions[i];\n if (isArray(option.children) && option.children.length) {\n this.setColumnData(option.children, i + 1);\n }\n }\n }\n\n private getAllLeafs(\n option: ThyCascaderOption,\n index: number,\n selected: boolean\n ): {\n option: ThyCascaderOption;\n index: number;\n }[] {\n let allLeafs: {\n option: ThyCascaderOption;\n index: number;\n }[] = [];\n if (option.children.length > 0) {\n for (const childOption of option.children) {\n childOption.parent = option;\n if (childOption.isLeaf && !childOption.selected === selected) {\n allLeafs.push({\n option: childOption,\n index: index + 1\n });\n } else if (!childOption.isLeaf) {\n allLeafs = allLeafs.concat(this.getAllLeafs(childOption, index + 1, selected));\n }\n }\n }\n return allLeafs;\n }\n\n public searchInLocal(searchText: string): void {\n this.forEachColumns();\n\n this.setSearchResultList(this.cascaderOptions.isOnlySelectLeaf ? this.leafNodes : this.flattenOptions, searchText);\n }\n\n private forEachColumns(\n currentLabel?: string[],\n currentValue: Id[] = [],\n currentRowValue: ThyCascaderOption[] = [],\n list = this.columns[0]\n ) {\n list.forEach(item => {\n const curOptionLabel = this.getOptionLabel(item);\n const curOptionValue = this.getOptionValue(item);\n const label: string[] = currentLabel ? [...currentLabel, curOptionLabel] : [curOptionLabel];\n const valueList: Id[] = [...currentValue, curOptionValue];\n const rowValueList: ThyCascaderOption[] = [...currentRowValue, item];\n const isSelected = this.isSelectedOption(item, valueList.length - 1);\n\n const node = {\n labelList: label,\n valueList,\n selected: isSelected,\n thyRowValue: rowValueList,\n isLeaf: item.isLeaf,\n disabled: item.disabled\n };\n\n this.flattenOptions.push(node);\n if (item?.children?.length) {\n this.forEachColumns(label, valueList, rowValueList, item.children);\n } else {\n this.leafNodes.push(node);\n }\n });\n }\n\n private setSearchResultList(listOfOption: ThyCascaderSearchOption[], searchText: string) {\n this.searchResultList = [];\n listOfOption.forEach(item => {\n if (!item.disabled && item.isLeaf && item.labelList.join().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {\n this.searchResultList.push(item);\n }\n });\n }\n\n /**\n * 检查所有所有子项的选择状态, 有一个不符合预期,就直接返回 false\n * @param option\n * @param trueOrFalse\n * @private\n */\n private checkSelectedStatus(option: ThyCascaderOption, isSelected: boolean): boolean {\n if (option.isLeaf) {\n return option.selected === isSelected;\n }\n if (helpers.isEmpty(option.children) && this.cascaderOptions?.isOnlySelectLeaf) {\n return false;\n }\n for (const childOption of option.children) {\n if (isArray(childOption.children) && childOption.children.length && !this.checkSelectedStatus(childOption, isSelected)) {\n return false;\n }\n if (!childOption.selected === isSelected) {\n return false;\n }\n }\n return true;\n }\n\n private findOption(option: any, index: number): ThyCascaderOption {\n const options: ThyCascaderOption[] = this.columns[index];\n if (options) {\n const value = typeof option === 'object' ? this.getOptionValue(option) : option;\n return options.find(o => value === this.getOptionValue(o));\n }\n return null;\n }\n\n private setColumnData(options: ThyCascaderOption[], index: number): void {\n if (!this.arrayEquals(this.columns[index], options)) {\n this.columns[index] = options;\n if (index < this.columns.length - 1) {\n this.columns = this.columns.slice(0, index + 1);\n }\n }\n }\n\n private getSubmitValue(originOptions: ThyCascaderOption[]): any[] {\n const values: any[] = [];\n (originOptions || []).forEach(option => {\n values.push(this.getOptionValue(option));\n });\n return values;\n }\n\n public removeSelectedItem(item: SelectOptionBase) {\n const selectedItems = this.selectionModel.selected;\n const currentItem = selectedItems.find(i => {\n return helpers.shallowEqual(i.thyValue, item.thyValue);\n });\n this.deselectOption(currentItem);\n this.selectionModel.deselect(currentItem);\n // update selectedOptions\n const updatedSelectedItems = this.selectionModel.selected;\n if (isArray(updatedSelectedItems) && updatedSelectedItems.length) {\n this.selectedOptions = updatedSelectedItems[updatedSelectedItems.length - 1].thyRawValue.value;\n }\n\n this.valueChange$.next();\n }\n\n public resetSearch() {\n this.searchResultList = [];\n this.leafNodes = [];\n this.flattenOptions = [];\n }\n\n public clearSelection() {\n this.labelRenderText = '';\n this.selectedOptions = [];\n this.activatedOptions = [];\n this.deselectAllSelected();\n }\n\n private deselectAllSelected() {\n const selectedOptions = this.selectionModel.selected;\n selectedOptions.forEach(item => this.deselectOption(item));\n this.selectionModel.clear();\n this.valueChange$.next();\n }\n\n private deselectOption(option: SelectOptionBase) {\n const value: ThyCascaderOption[] = option.thyRawValue.value;\n value.forEach(item => {\n if (item.isLeaf && item.selected) {\n set(item, 'selected', false);\n }\n });\n }\n\n public selectOption(option: ThyCascaderOption, index: number): void {\n this.selectedOptions = this.activatedOptions;\n this.updatePrevSelectedOptions(option, false, index);\n if (option.selected) {\n this.buildDisplayLabel();\n } else {\n const selectedItems = this.selectionModel.selected;\n const currentItem = selectedItems.find(item => {\n if (item.thyRawValue.value.length - 1 === index) {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n } else {\n return false;\n }\n });\n this.selectionModel.deselect(currentItem);\n }\n this.valueChange$.next();\n }\n\n private addSelectedState(selectOptions: ThyCascaderOption[]) {\n if (this.cascaderOptions.isMultiple && this.cascaderOptions.isOnlySelectLeaf) {\n selectOptions.forEach(opt => {\n if (opt.isLeaf) {\n opt.selected = true;\n set(opt, 'selected', true);\n }\n });\n this.addParentSelectedState(selectOptions);\n }\n }\n\n private addParentSelectedState(selectOptions: ThyCascaderOption[]) {\n selectOptions.forEach(opt => {\n if (opt?.children?.length && opt.children.every(i => i.selected)) {\n opt.selected = true;\n set(opt, 'selected', true);\n if (opt.parent) {\n this.addParentSelectedState([opt.parent]);\n }\n }\n });\n }\n\n private buildDisplayLabel(): void {\n const selectedOptions = [...this.selectedOptions];\n const labels: string[] = selectedOptions.map(o => this.getOptionLabel(o));\n\n if (labels.length === 0) {\n return;\n }\n\n let labelRenderContext;\n let labelRenderText;\n\n if (this.cascaderOptions.isLabelRenderTemplate) {\n labelRenderContext = { labels, selectedOptions };\n } else {\n labelRenderText = defaultDisplayRender.call(this, labels, selectedOptions);\n this.labelRenderText = labelRenderText;\n }\n\n if (this.labelRenderText || this.cascaderOptions.isLabelRenderTemplate) {\n const selectedData: SelectOptionBase = {\n thyRawValue: {\n value: selectedOptions,\n labelText: labelRenderText,\n labelRenderContext: labelRenderContext\n },\n thyValue: labels,\n thyLabelText: labelRenderText\n };\n this.selectionModel.select(selectedData);\n }\n }\n\n public writeCascaderValue(value: any): void {\n if (!this.selectionModel) {\n this.initSelectionModel(this.cascaderOptions.isMultiple);\n }\n if (!this.cascaderOptions.isMultiple) {\n const vs = (this.defaultValue = this.toArray(value));\n if (vs.length) {\n this.initOptions(0);\n } else {\n this.value = vs;\n this.activatedOptions = [];\n this.afterWriteValue();\n }\n } else {\n const values = this.toArray(value);\n this.selectionModel.clear();\n values.forEach(item => {\n const vs = (this.defaultValue = this.toArray(item));\n if (vs.length) {\n this.initOptions(0);\n } else {\n this.value = vs;\n this.activatedOptions = [];\n this.afterWriteValue();\n }\n });\n }\n }\n\n private afterWriteValue() {\n this.selectedOptions = this.activatedOptions;\n this.value = this.getSubmitValue(this.selectedOptions);\n this.addSelectedState(this.selectedOptions);\n this.buildDisplayLabel();\n }\n\n public isActivatedOption(option: ThyCascaderOption, index: number): boolean {\n if (!this.cascaderOptions?.isMultiple || this.cascaderOptions.isOnlySelectLeaf) {\n const activeOpt = this.activatedOptions[index];\n return activeOpt === option;\n } else if (option.isLeaf) {\n return option.selected;\n } else {\n const selectedOpts = this.selectionModel.selected;\n const appearIndex = selectedOpts.findIndex(item => {\n const selectedItem = helpers.get(item, `thyRawValue.value.${index}`);\n return helpers.shallowEqual(selectedItem, option);\n });\n return appearIndex >= 0;\n }\n }\n\n public isHalfSelectedOption(option: ThyCascaderOption, index: number): boolean {\n if (\n !option.selected &&\n this.cascaderOptions.isOnlySelectLeaf &&\n !option.isLeaf &&\n !this.checkSelectedStatus(option, false) &&\n !helpers.isEmpty(option.children)\n ) {\n return true;\n }\n return false;\n }\n\n public getValues() {\n let selectedItems: any[];\n const selected = this.selectionModel.selected;\n selectedItems = selected.map(item => this.getSubmitValue(item.thyRawValue.value));\n return this.cascaderOptions?.isMultiple ? selectedItems : selectedItems[0] ?? selectedItems;\n }\n\n private updatePrevSelectedOptions(option: ThyCascaderOption, isActivateInit: boolean, index?: number) {\n if (isActivateInit) {\n this.handleActivateInit(option);\n } else {\n if (!this.cascaderOptions.isMultiple) {\n this.clearPrevSelectedOptions();\n }\n\n set(option, 'selected', this.isSelected(option, index));\n\n if (this.cascaderOptions.isOnlySelectLeaf && this.cascaderOptions.isMultiple && option.parent) {\n this.updatePrevSelectedOptions(option.parent, false, index - 1);\n }\n }\n\n this.prevSelectedOptions.add(option);\n }\n\n private handleActivateInit(option: ThyCascaderOption): void {\n if (isArray(this.customOptions) && this.customOptions.length > 0) {\n const valueKey = this.cascaderOptions.valueProperty;\n this.customOptions.some(item => get(item, valueKey) == get(option, valueKey)) && set(option, 'selected', true);\n }\n if (this.cascaderOptions.isOnlySelectLeaf && option.isLeaf) {\n set(option, 'selected', true);\n }\n }\n\n private isSelected(option: ThyCascaderOption, index?: number) {\n return this.cascaderOptions.isOnlySelectLeaf && !option.isLeaf && this.cascaderOptions.isMultiple\n ? this.isSelectedOption(option, index)\n : !this.isSelectedOption(option, index);\n }\n\n private clearPrevSelectedOptions() {\n const prevSelectedOptions = Array.from(this.prevSelectedOptions);\n while (prevSelectedOptions.length) {\n set(prevSelectedOptions.pop(), 'selected', false);\n }\n this.prevSelectedOptions = new Set([]);\n }\n\n private getOptionLabel(option: ThyCascaderOption): any {\n return option[this.cascaderOptions.labelProperty || 'label'];\n }\n\n private getOptionValue(option: ThyCascaderOption): any {\n return option[this.cascaderOptions.valueProperty || 'value'];\n }\n\n public removeCustomOption() {\n if (!isArray(this.customOptions) || this.customOptions.length === 0) {\n return;\n }\n\n let selectedCustomOptions = this.getSelectedCustomOptions();\n selectedCustomOptions.forEach(item => {\n this.removeSelectedItem(item);\n });\n }\n\n private getSelectedCustomOptions() {\n const selected = this.cascaderOptions.isMultiple ? this.selectionModel.selected : this.selectionModel.selected[0];\n if (!isArray(selected)) {\n return [];\n }\n const valueKey = this.cascaderOptions.valueProperty;\n return selected.filter(item => {\n const selectedId = get(item, `thyRawValue.value.0.${valueKey}`);\n return this.customOptions.some(option => get(option, valueKey) === selectedId);\n });\n }\n\n toArray<T>(value: T | T[]): T[] {\n if (value == null) {\n return [];\n } else if (!Array.isArray(value)) {\n return [value];\n } else {\n return value;\n }\n }\n\n arrayEquals<T>(array1: T[], array2: T[]): boolean {\n if (!Array.isArray(array1) || !Array.isArray(array2) || array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((element, index) => element === array2[index]);\n }\n}\n","import { SafeAny } from 'ngx-tethys/types';\nimport {\n EXPANDED_DROPDOWN_POSITIONS,\n ScrollToService,\n TabIndexDisabledControlValueAccessorMixin,\n ThyClickDispatcher\n} from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { SelectControlSize, SelectOptionBase, ThySelectControl } from 'ngx-tethys/shared';\nimport { coerceBooleanProperty, elementMatchClosest, isEmpty } from 'ngx-tethys/util';\nimport { BehaviorSubject, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, take, takeUntil } from 'rxjs/operators';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { NgClass, NgFor, NgIf, NgStyle, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { ThyCascaderOptionComponent } from './cascader-li.component';\nimport { ThyCascaderSearchOptionComponent } from './cascader-search-option.component';\nimport { ThyCascaderExpandTrigger, ThyCascaderOption, ThyCascaderSearchOption, ThyCascaderTriggerType } from './types';\nimport { ThyCascaderService } from './cascader.service';\nimport { scaleYMotion } from 'ngx-tethys/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\n\n/**\n * 级联选择菜单\n * @name thy-cascader\n */\n@Component({\n selector: 'thy-cascader,[thy-cascader]',\n templateUrl: './cascader.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyCascader),\n multi: true\n },\n ThyCascaderService\n ],\n host: {\n '[attr.tabindex]': `tabIndex`,\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n standalone: true,\n imports: [\n CdkOverlayOrigin,\n NgIf,\n ThySelectControl,\n NgClass,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n NgStyle,\n NgFor,\n ThyCascaderOptionComponent,\n ThyCascaderSearchOptionComponent,\n ThyEmpty,\n ThyIcon,\n ThyDivider\n ],\n animations: [scaleYMotion]\n})\nexport class ThyCascader\n extends TabIndexDisabledControlValueAccessorMixin\n implements ControlValueAccessor, OnInit, OnChanges, OnDestroy, AfterContentInit\n{\n /**\n * 选项的实际值的属性名\n */\n @Input() thyValueProperty = 'value';\n\n /**\n * 选项的显示值的属性名\n */\n @Input() thyLabelProperty = 'label';\n\n /**\n * 描述输入字段预期值的简短的提示信息\n */\n @Input() thyPlaceholder = '请选择';\n\n /**\n * 控制大小(4种)\n * @type 'sm' | 'md' | 'lg' | ''\n */\n @Input() thySize: SelectControlSize = '';\n\n /**\n * 数据项\n * @type ThyCascaderOption[]\n * @default []\n */\n @Input()\n set thyOptions(options: ThyCascaderOption[] | null) {\n const columns = options && options.length ? [options] : [];\n this.thyCascaderService.initColumns(columns);\n if (this.thyCascaderService.defaultValue && columns.length) {\n this.thyCascaderService.initOptions(0);\n }\n }\n\n /**\n * 自定义选项\n * @type ThyCascaderOption[]\n * @default []\n */\n @Input() set thyCustomOptions(options: ThyCascaderOption[] | null) {\n this.thyCascaderService.customOptions = (options || []).map(item => ({ ...item }));\n }\n\n get thyCustomOptions() {\n return this.thyCascaderService.customOptions;\n }\n\n /**\n * 点击父级菜单选项时,可通过该函数判断是否允许值的变化\n */\n @Input() thyChangeOn: (option: ThyCascaderOption, level: number) => boolean;\n\n /**\n * 点击项时,表单是否动态展示数据项\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyChangeOnSelect = false;\n\n /**\n * 显示输入框\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowInput = true;\n\n /**\n * 用户自定义选项模板\n * @type TemplateRef\n */\n @Input() thyOptionRender: TemplateRef<SafeAny>;\n\n /**\n * 用户自定义模板\n * @type TemplateRef\n */\n @Input()\n set thyLabelRender(value: TemplateRef<any>) {\n this.labelRenderTpl = value;\n this.isLabelRenderTemplate = value instanceof TemplateRef;\n this.thyCascaderService.setCascaderOptions({ isLabelRenderTemplate: this.isLabelRenderTemplate });\n }\n\n get thyLabelRender(): TemplateRef<any> {\n return this.labelRenderTpl;\n }\n\n /**\n * 用于动态加载选项\n */\n @Input() set thyLoadData(value: (node: ThyCascaderOption, index?: number) => PromiseLike<any>) {\n this.thyCascaderService.setCascaderOptions({ loadData: value });\n }\n\n get thyLoadData() {\n return this.thyCascaderService?.cascaderOptions?.loadData;\n }\n\n /**\n * 控制触发状态, 支持 `click` | `hover`\n * @type ThyCascaderTriggerType | ThyCascaderTriggerType[]\n */\n @Input() thyTriggerAction: ThyCascaderTriggerType | ThyCascaderTriggerType[] = ['click'];\n\n /**\n * 鼠标经过下方列表项时,是否自动展开列表,支持 `click` | `hover`\n * @type ThyCascaderExpandTrigger | ThyCascaderExpandTrigger[]\n */\n @Input() thyExpandTriggerAction: ThyCascaderExpandTrigger | ThyCascaderExpandTrigger[] = ['click'];\n\n /**\n * 自定义浮层样式\n */\n @Input() thyMenuStyle: { [key: string]: string };\n\n /**\n * 自定义搜索样式\n */\n @Input() thySearchListStyle: { [key: string]: string };\n\n /**\n * 自定义浮层类名\n * @type string\n */\n @Input()\n set thyMenuClassName(value: string) {\n this.menuClassName = value;\n this.setMenuClass();\n }\n\n get thyMenuClassName(): string {\n return this.menuClassName;\n }\n\n /**\n * 自定义浮层列类名\n * @type string\n */\n @Input()\n set thyColumnClassName(value: string) {\n this.columnClassName = value;\n this.setMenuClass();\n }\n\n get thyColumnClassName(): string {\n return this.columnClassName;\n }\n\n /**\n * 是否只读\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n override set thyDisabled(value: boolean) {\n this.disabled = value;\n }\n override get thyDisabled(): boolean {\n return this.disabled;\n }\n\n disabled = false;\n\n /**\n * 空状态下的展示文字\n * @default 暂无可选项\n */\n @Input()\n set thyEmptyStateText(value: string) {\n this.emptyStateText = value;\n }\n\n /**\n * 是否多选\n * @type boolean\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thyMultiple(value: boolean) {\n this.isMultiple = value;\n this.thyCascaderService.setCascaderOptions({ isMultiple: value });\n }\n\n get thyMultiple(): boolean {\n return this.isMultiple;\n }\n\n /**\n * 设置多选时最大显示的标签数量,0 表示不限制\n * @type number\n */\n @Input({ transform: numberAttribute }) thyMaxTagCount = 0;\n\n /**\n * 是否仅允许选择叶子项\n * @default true\n */\n @Input({ transform: coerceBooleanProperty })\n thyIsOnlySelectLeaf = true;\n\n /**\n * 初始化时,是否展开面板\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyAutoExpand: boolean;\n\n /**\n * 是否支持搜索\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyShowSearch: boolean = false;\n\n /**\n * 多选选中项的展示方式,默认为空,渲染文字模板,传入tag,渲染展示模板,\n * @default ''|tag\n */\n @Input() thyPreset: string = '';\n\n /**\n * 是否有幕布\n */\n @Input({ transform: coerceBooleanProperty }) thyHasBackdrop = true;\n\n /**\n * 值发生变化时触发,返回选择项的值\n * @type EventEmitter<any[]>\n */\n @Output() thyChange = new EventEmitter<any[]>();\n\n /**\n * 值发生变化时触发,返回选择项列表\n * @type EventEmitter<ThyCascaderOption[]>\n */\n @Output() thySelectionChange = new EventEmitter<ThyCascaderOption[]>();\n\n /**\n * 选择选项时触发\n */\n @Output() thySelect = new EventEmitter<{\n option: ThyCascaderOption;\n index: number;\n }>();\n\n /**\n * @private 暂无实现\n */\n @Output() thyDeselect = new EventEmitter<{\n option: ThyCascaderOption;\n index: number;\n }>();\n\n /**\n * 清空选项时触发\n */\n @Output() thyClear = new EventEmitter<void>();\n\n /**\n * 下拉选项展开和折叠状态事件\n */\n @Output() thyExpandStatusChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChildren('cascaderOptions', { read: ElementRef }) cascaderOptions: QueryList<ElementRef>;\n\n @ViewChildren('cascaderOptionContainers', { read: ElementRef }) cascaderOptionContainers: QueryList<ElementRef>;\n\n @ViewChild(CdkConnectedOverlay, { static: true }) cdkConnectedOverlay: CdkConnectedOverlay;\n\n @ViewChild('trigger', { read: ElementRef, static: true }) trigger: ElementRef<any>;\n\n @ViewChild('input') input: ElementRef;\n\n @ViewChild('menu') menu: ElementRef;\n\n public dropDownPosition = 'bottom';\n\n public menuVisible = false;\n\n public isLabelRenderTemplate = false;\n\n public triggerRect: DOMRect;\n\n public emptyStateText = '暂无可选项';\n\n private prefixCls = 'thy-cascader';\n\n private menuClassName: string;\n\n private columnClassName: string;\n\n private _menuColumnCls: any;\n\n private readonly destroy$ = new Subject<void>();\n\n private _menuCls: { [name: string]: any };\n\n private _labelCls: { [name: string]: any };\n\n private labelRenderTpl: TemplateRef<any>;\n\n private hostRenderer = useHostRenderer();\n\n public positions: ConnectionPositionPair[];\n\n get selected(): SelectOptionBase | SelectOptionBase[] {\n return this.thyMultiple ? this.thyCascaderService.selectionModel.selected : this.thyCascaderService.selectionModel.selected[0];\n }\n private isMultiple = false;\n\n public menuMinWidth = 122;\n\n private searchText$ = new BehaviorSubject('');\n\n public get searchResultList(): ThyCascaderSearchOption[] {\n return this.thyCascaderService.searchResultList;\n }\n\n public isShowSearchPanel: boolean = false;\n\n /**\n * 解决搜索&多选的情况下,点击搜索项会导致 panel 闪烁\n * 由于点击后,thySelectedOptions变化,导致 thySelectControl\n * 又会触发 searchFilter 函数,即 resetSearch 会执行\n * 会导致恢复级联状态再变为搜索状态\n */\n private isSelectingSearchState: boolean = false;\n\n public get isLoading() {\n return this.thyCascaderService?.isLoading;\n }\n\n public get columns() {\n return this.thyCascaderService.columns;\n }\n\n private afterChangeFn: () => void;\n\n private resizeSubscription: Subscription;\n\n ngOnInit(): void {\n this.setClassMap();\n this.setMenuClass();\n this.setMenuColumnClass();\n this.setLabelClass();\n this.initPosition();\n this.initSearch();\n const options = {\n labelProperty: this.thyLabelProperty,\n valueProperty: this.thyValueProperty,\n isMultiple: this.isMultiple,\n isOnlySelectLeaf: this.thyIsOnlySelectLeaf,\n isLabelRenderTemplate: this.isLabelRenderTemplate,\n loadData: this.thyLoadData\n };\n this.thyCascaderService.setCascaderOptions(options);\n\n this.thyCascaderService.cascaderValueChange().subscribe(options => {\n if (!options.isValueEqual) {\n this.onChangeFn(options.value);\n if (options.isSelectionModelEmpty) {\n this.thyClear.emit();\n }\n this.thySelectionChange.emit(this.thyCascaderService.selectedOptions);\n this.thyChange.emit(options.value);\n if (this.afterChangeFn) {\n this.afterChangeFn();\n this.afterChangeFn = null;\n }\n }\n });\n\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n if (\n !this.elementRef.nativeElement.contains(event.target) &&\n !this.menu?.nativeElement.contains(event.target as Node) &&\n this.menuVisible\n ) {\n this.ngZone.run(() => {\n this.closeMenu();\n this.cdr.markForCheck();\n });\n }\n });\n }\n }\n\n ngAfterContentInit() {\n if (this.thyAutoExpand) {\n timer(0).subscribe(() => {\n this.cdr.markForCheck();\n this.setMenuVisible(true);\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['thyIsOnlySelectLeaf']) {\n this.thyCascaderService.setCascaderOptions({ isOnlySelectLeaf: changes['thyIsOnlySelectLeaf'].currentValue });\n }\n }\n\n private initPosition() {\n const cascaderPosition: ConnectionPositionPair[] = EXPANDED_DROPDOWN_POSITIONS.map(item => {\n return { ...item };\n });\n this.positions = cascaderPosition;\n }\n\n writeValue(value: any): void {\n this.thyCascaderService.writeCascaderValue(value);\n if (this.isMultiple) {\n this.cdr.detectChanges();\n }\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public positionChange(position: ConnectedOverlayPositionChange): void {\n const newValue = position.connectionPair.originY === 'bottom' ? 'bottom' : 'top';\n if (this.dropDownPosition !== newValue) {\n this.dropDownPosition = newValue;\n this.cdr.detectChanges();\n }\n }\n\n public isActivatedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isActivatedOption(option, index);\n }\n\n public isHalfSelectedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isHalfSelectedOption(option, index);\n }\n\n public isSelectedOption(option: ThyCascaderOption, index: number): boolean {\n return this.thyCascaderService.isSelectedOption(option, index);\n }\n\n public attached(): void {\n this.cdr.detectChanges();\n this.cdkConnectedOverlay.positionChange.pipe(take(1), takeUntil(this.destroy$)).subscribe(() => {\n this.scrollActiveElementIntoView();\n });\n }\n\n private scrollActiveElementIntoView() {\n if (!isEmpty(this.thyCascaderService.selectedOptions)) {\n const activeOptions = this.cascaderOptions\n .filter(item => item.nativeElement.classList.contains('thy-cascader-menu-item-active'))\n // for multiple mode\n .slice(-this.cascaderOptionContainers.length);\n\n this.cascaderOptionContainers.forEach((item, index) => {\n if (index <= activeOptions.length - 1) {\n ScrollToService.scrollToElement(activeOptions[index].nativeElement, item.nativeElement);\n this.cdr.detectChanges();\n }\n });\n }\n }\n\n public setMenuVisible(menuVisible: boolean): void {\n if (this.menuVisible !== menuVisible) {\n this.menuVisible = menuVisible;\n\n this.thyCascaderService.initActivatedOptions(this.menuVisible);\n this.setClassMap();\n this.setMenuClass();\n if (this.menuVisible) {\n this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n this.subscribeTriggerResize();\n } else {\n this.unsubscribeTriggerResize();\n }\n this.thyExpandStatusChange.emit(menuVisible);\n }\n }\n\n public get menuCls(): any {\n return this._menuCls;\n }\n\n private setMenuClass(): void {\n this._menuCls = {\n [`${this.prefixCls}-menus`]: true,\n [`${this.prefixCls}-menus-hidden`]: !this.menuVisible,\n [`${this.thyMenuClassName}`]: this.thyMenuClassName,\n [`w-100`]: this.columns.length === 0\n };\n }\n\n public get menuColumnCls(): any {\n return this._menuColumnCls;\n }\n\n private setMenuColumnClass(): void {\n this._menuColumnCls = {\n [`${this.prefixCls}-menu`]: true,\n [`${this.thyColumnClassName}`]: this.thyColumnClassName\n };\n }\n\n public get labelCls(): any {\n return this._labelCls;\n }\n\n private setLabelClass(): void {\n this._labelCls = {\n [`${this.prefixCls}-picker-label`]: true,\n [`${this.prefixCls}-show-search`]: false,\n [`${this.prefixCls}-focused`]: false,\n 'text-truncate': true\n };\n }\n\n private setClassMap(): void {\n const classMap = {\n [`${this.prefixCls}`]: true,\n [`${this.prefixCls}-picker`]: true,\n [`${this.prefixCls}-${this.thySize}`]: true,\n [`${this.prefixCls}-picker-disabled`]: this.disabled,\n [`${this.prefixCls}-picker-open`]: this.menuVisible\n };\n this.hostRenderer.updateClassByMap(classMap);\n }\n\n private isClickTriggerAction(): boolean {\n if (typeof this.thyTriggerAction === 'string') {\n return this.thyTriggerAction === 'click';\n }\n return this.thyTriggerAction.indexOf('click') !== -1;\n }\n\n private isHoverTriggerAction(): boolean {\n if (typeof this.thyTriggerAction === 'string') {\n return this.thyTriggerAction === 'hover';\n }\n return this.thyTriggerAction.indexOf('hover') !== -1;\n }\n\n private isHoverExpandTriggerAction(): boolean {\n if (typeof this.thyExpandTriggerAction === 'string') {\n return this.thyExpandTriggerAction === 'hover';\n }\n return this.thyExpandTriggerAction.indexOf('hover') !== -1;\n }\n\n @HostListener('click', ['$event'])\n public toggleClick($event: Event) {\n if (this.disabled) {\n return;\n }\n if (this.isClickTriggerAction()) {\n this.setMenuVisible(!this.menuVisible);\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n public toggleMouseEnter(event: MouseEvent): void {\n if (this.disabled || !this.isHoverTriggerAction() || this.menuVisible) {\n return;\n }\n\n this.setMenuVisible(true);\n }\n\n @HostListener('mouseleave', ['$event'])\n public toggleMouseLeave(event: MouseEvent): void {\n if (this.disabled || !this.isHoverTriggerAction() || !this.menuVisible) {\n event.preventDefault();\n return;\n }\n\n const hostEl = this.elementRef.nativeElement;\n const mouseTarget = event.relatedTarget as HTMLElement;\n if (\n hostEl.contains(mouseTarget) ||\n mouseTarget?.classList.contains('cdk-overlay-pane') ||\n mouseTarget?.classList.contains('cdk-overlay-backdrop')\n ) {\n return;\n }\n\n this.setMenuVisible(false);\n }\n\n public clickCustomOption(option: ThyCascaderOption, index: number, event: Event | boolean): void {\n if (event === true) {\n this.thyCascaderService.clearSelection();\n }\n this.thyCascaderService.clickOption(option, index, event, this.selectOption);\n }\n\n public clickOption(option: ThyCascaderOption, index: number, event: Event | boolean): void {\n this.thyCascaderService.removeCustomOption();\n this.thyCascaderService.clickOption(option, index, event, this.selectOption);\n\n if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {\n // Make sure to calculate and update the position after the submenu is opened\n this.cdr.detectChanges();\n\n // Update the position to prevent the submenu from appearing off-screen\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n this.cdr.markForCheck();\n }\n }\n\n public mouseoverOption(option: ThyCascaderOption, index: number, event: Event): void {\n if (event) {\n event.preventDefault();\n }\n\n if (option && option.disabled && !this.isMultiple) {\n return;\n }\n\n if (!this.isHoverExpandTriggerAction() && !(option && option.disabled && this.isMultiple)) {\n return;\n }\n this.setActiveOption(option, index, false);\n }\n\n onBlur(event?: FocusEvent) {\n // Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n if (elementMatchClosest(event?.relatedTarget as HTMLElement, ['.thy-cascader-menus', 'thy-cascader'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n onFocus(event?: FocusEvent) {\n if (!elementMatchClosest(event?.relatedTarget as HTMLElement, ['.thy-cascader-menus', 'thy-cascader'])) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement.focus();\n }\n }\n\n public closeMenu(): void {\n if (this.menuVisible) {\n this.setMenuVisible(false);\n this.onTouchedFn();\n this.isShowSearchPanel = false;\n this.thyCascaderService.searchResultList = [];\n }\n }\n\n public setActiveOption(option: ThyCascaderOption, index: number, select: boolean, loadChildren: boolean = true): void {\n this.thyCascaderService.setActiveOption(option, index, select, loadChildren, this.selectOption);\n }\n\n private selectOption = (option: ThyCascaderOption, index: number) => {\n if ((option.isLeaf || !this.thyIsOnlySelectLeaf) && !this.thyMultiple) {\n this.afterChangeFn = () => {\n this.setMenuVisible(false);\n this.onTouchedFn();\n };\n }\n this.thySelect.emit({ option, index });\n const isOptionCanSelect = this.thyChangeOnSelect && !this.isMultiple;\n if (option.isLeaf || !this.thyIsOnlySelectLeaf || isOptionCanSelect || this.shouldPerformSelection(option, index)) {\n this.thyCascaderService.selectOption(option, index);\n }\n };\n\n public removeSelectedItem(event: { item: SelectOptionBase; $eventOrigin: Event }) {\n event.$eventOrigin.stopPropagation();\n this.thyCascaderService.removeSelectedItem(event?.item);\n }\n\n private shouldPerformSelection(option: ThyCascaderOption, level: number): boolean {\n return typeof this.thyChangeOn === 'function' ? this.thyChangeOn(option, level) === true : false;\n }\n\n public clearSelection($event: Event): void {\n if ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n this.afterChangeFn = () => {\n this.setMenuVisible(false);\n };\n this.thyCascaderService.clearSelection();\n }\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: string,\n private cdr: ChangeDetectorRef,\n public elementRef: ElementRef,\n private thyClickDispatcher: ThyClickDispatcher,\n private ngZone: NgZone,\n public thyCascaderService: ThyCascaderService\n ) {\n super();\n }\n\n public trackByFn(index: number, item: ThyCascaderOption) {\n return item?.value || item?._id || index;\n }\n\n public searchFilter(searchText: string) {\n if (!searchText && !this.isSelectingSearchState) {\n this.resetSearch();\n }\n this.searchText$.next(searchText);\n }\n\n private initSearch() {\n this.searchText$\n .pipe(\n takeUntil(this.destroy$),\n debounceTime(200),\n distinctUntilChanged(),\n filter(text => text !== '')\n )\n .subscribe(searchText => {\n this.resetSearch();\n\n // local search\n this.searchInLocal(searchText);\n this.isShowSearchPanel = true;\n this.cdr.markForCheck();\n });\n }\n\n private searchInLocal(searchText: string): void {\n this.thyCascaderService.searchInLocal(searchText);\n }\n\n private resetSearch() {\n this.isShowSearchPanel = false;\n this.thyCascaderService.resetSearch();\n this.scrollActiveElementIntoView();\n }\n\n public selectSearchResult(selectOptionData: ThyCascaderSearchOption): void {\n const { thyRowValue: selectedOptions } = selectOptionData;\n if (selectOptionData.selected) {\n if (!this.isMultiple) {\n this.closeMenu();\n }\n return;\n }\n selectedOptions.forEach((item: ThyCascaderOption, index: number) => {\n this.setActiveOption(item, index, index === selectedOptions.length - 1);\n });\n if (this.isMultiple) {\n this.isSelectingSearchState = true;\n selectOptionData.selected = true;\n const originSearchResultList = this.searchResultList;\n // 保持搜索选项\n setTimeout(() => {\n this.isShowSearchPanel = true;\n this.thyCascaderService.searchResultList = originSearchResultList;\n this.isSelectingSearchState = false;\n });\n } else {\n this.resetSearch();\n }\n }\n\n private subscribeTriggerResize(): void {\n this.unsubscribeTriggerResize();\n this.ngZone.runOutsideAngular(() => {\n this.resizeSubscription = new Observable(observer => {\n const resize = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n observer.next();\n });\n resize.observe(this.trigger.nativeElement);\n }).subscribe(() => {\n this.ngZone.run(() => {\n this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n }\n this.cdr.markForCheck();\n });\n });\n });\n }\n\n private unsubscribeTriggerResize(): void {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n this.resizeSubscription = null;\n }\n }\n\n ngOnDestroy() {\n this.unsubscribeTriggerResize();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" #trigger>\n <ng-container *ngIf=\"thyShowInput\">\n <div\n thySelectControl\n [thyShowSearch]=\"thyShowSearch\"\n [thySize]=\"thySize\"\n [thyAllowClear]=\"true\"\n [thySelectedOptions]=\"selected\"\n [thyMaxTagCount]=\"thyMaxTagCount\"\n (thyOnRemove)=\"removeSelectedItem($event)\"\n (thyOnClear)=\"clearSelection($event)\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnSearch)=\"searchFilter($event)\"\n [thyDisabled]=\"disabled\"\n [thyIsMultiple]=\"thyMultiple\"\n [thyPanelOpened]=\"menuVisible\"\n [thyPlaceholder]=\"thyPlaceholder\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyPreset]=\"thyPreset\">\n <ng-template #customDisplayTemplate let-value>\n <span [ngClass]=\"labelCls\">\n <ng-container *ngIf=\"!isLabelRenderTemplate; else labelTemplate\">{{ value.labelText }}</ng-container>\n <ng-template #labelTemplate>\n <ng-template [ngTemplateOutlet]=\"thyLabelRender\" [ngTemplateOutletContext]=\"value.labelRenderContext\"></ng-template>\n </ng-template>\n </span>\n </ng-template>\n </div>\n </ng-container>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"thyHasBackdrop\"\n cdkConnectedOverlayBackdropClass=\"thy-cascader-backdrop\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"menuMinWidth\"\n cdkConnectedOverlayTransformOriginOn=\".thy-cascader-menus\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"closeMenu()\"\n (attach)=\"attached()\"\n (positionChange)=\"positionChange($event)\"\n [cdkConnectedOverlayOpen]=\"menuVisible\">\n <div\n [attr.tabindex]=\"-1\"\n #menu\n [ngClass]=\"menuCls\"\n [ngStyle]=\"thyMenuStyle\"\n (mouseleave)=\"toggleMouseLeave($event)\"\n [@scaleYMotion]=\"'enter'\">\n <ng-container *ngIf=\"!isShowSearchPanel\">\n <ng-container *ngIf=\"columns.length > 0; else emptyPlaceholder\">\n <ul #cascaderOptionContainers *ngFor=\"let options of columns; let i = index; let isFirst = first\" [ngClass]=\"menuColumnCls\">\n <ng-container *ngIf=\"thyCustomOptions && thyCustomOptions.length > 0 && isFirst\">\n <li\n #cascaderOptions\n thy-cascader-option\n *ngFor=\"let customOpt of thyCustomOptions; trackBy: trackByFn\"\n [option]=\"customOpt\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [labelProperty]=\"thyLabelProperty\"\n [active]=\"isActivatedOption(customOpt, 0)\"\n [halfSelected]=\"isHalfSelectedOption(customOpt, 0)\"\n [selected]=\"isSelectedOption(customOpt, 0)\"\n (toggleSelectChange)=\"clickCustomOption(customOpt, 0, $event)\"\n (click)=\"clickCustomOption(customOpt, 0, $event)\"\n (mouseover)=\"mouseoverOption(customOpt, 0, $event)\"></li>\n <thy-divider class=\"my-1 mx-4\"></thy-divider>\n </ng-container>\n\n <li\n #cascaderOptions\n thy-cascader-option\n *ngFor=\"let option of options; trackBy: trackByFn\"\n [option]=\"option\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [labelProperty]=\"thyLabelProperty\"\n [active]=\"isActivatedOption(option, i)\"\n [halfSelected]=\"isHalfSelectedOption(option, i)\"\n [selected]=\"isSelectedOption(option, i)\"\n [optionRender]=\"thyOptionRender\"\n (toggleSelectChange)=\"clickOption(option, i, $event)\"\n (click)=\"clickOption(option, i, $event)\"\n (mouseover)=\"mouseoverOption(option, i, $event)\"></li>\n </ul>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isShowSearchPanel\">\n <ng-container *ngIf=\"searchResultList.length; else emptyPlaceholder\">\n <ul class=\"thy-cascader-search-list py-3\" [ngStyle]=\"thySearchListStyle\">\n <li\n thy-cascader-search-option\n *ngFor=\"let item of searchResultList\"\n [multiple]=\"thyMultiple\"\n [isOnlySelectLeaf]=\"thyIsOnlySelectLeaf\"\n [option]=\"item\"\n [active]=\"item.selected\"\n [optionRender]=\"thyOptionRender\"\n (toggleSelectChange)=\"selectSearchResult($event)\"></li>\n </ul>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #emptyPlaceholder>\n <div class=\"thy-cascader-empty-container\" [ngStyle]=\"{ 'width.px': triggerRect?.width }\">\n <thy-empty class=\"thy-select-empty-content\" thySize=\"sm\" [thyMessage]=\"emptyStateText\"></thy-empty>\n </div>\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 { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThySelectCommonModule } from 'ngx-tethys/shared';\nimport { ThyCascaderOptionComponent } from './cascader-li.component';\nimport { ThyCascaderSearchOptionComponent } from './cascader-search-option.component';\nimport { ThyCascader } from './cascader.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyInputModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThyCheckboxModule,\n ThyFlexibleTextModule,\n ThyCascader,\n ThyCascaderOptionComponent,\n ThyCascaderSearchOptionComponent\n ],\n exports: [ThyCascader]\n})\nexport class ThyCascaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ThyCascaderService"],"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('17.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('17.0.16');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS;;ACF5C;;AAEG;;;;"}
|
package/package.json
CHANGED
package/schematics/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "17.0.
|
|
1
|
+
export declare const VERSION = "17.0.16";
|
package/schematics/version.js
CHANGED