novo-elements 10.6.0-next.3 → 10.6.0-next.4

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.
@@ -169,6 +169,8 @@ export class NovoTabbedGroupPickerElement {
169
169
  if (event) {
170
170
  this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);
171
171
  this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));
172
+ // Emit a fake scroll event so the rendered items update
173
+ this.scrollableInstance.getElementRef().nativeElement.dispatchEvent(new Event('scroll'));
172
174
  }
173
175
  }
174
176
  activateItem(item) {
@@ -346,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
346
348
  }], applyChange: [{
347
349
  type: Output
348
350
  }] } });
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFiYmVkR3JvdXBQaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy90YWJiZWQtZ3JvdXAtcGlja2VyL1RhYmJlZEdyb3VwUGlja2VyLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvdGFiYmVkLWdyb3VwLXBpY2tlci9UYWJiZWRHcm91cFBpY2tlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQXVEdEUsTUFBTSxPQUFPLDRCQUE0QjtJQXNDdkMsWUFBbUIsWUFBOEIsRUFBVSxHQUFzQjtRQUE5RCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTlCakYsYUFBUSxHQUFHLElBQUksQ0FBQztRQUtQLGVBQVUsR0FBRyxLQUFLLENB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QUduQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyw4QkFBOEIsRUFBRSxDQUFDO3FIQUl6RixrQkFBa0I7c0JBRHpCLFNBQVM7dUJBQUMsd0NBQXdDO2dCQUczQyxZQUFZO3NCQURuQixTQUFTO3VCQUFDLGNBQWM7Z0JBR2xCLFFBQVE7c0JBRGQsU0FBUzt1QkFBQyxVQUFVO2dCQUtaLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJ25vdm8tZWxlbWVudHMvc2VydmljZXMnO1xuaW1wb3J0IHsgYmluYXJ5U2VhcmNoLCBCb29sZWFuSW5wdXQsIEhlbHBlcnMgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3V0aWxzJztcbmltcG9ydCB7IE5PVk9fT1BUSU9OX1BBUkVOVF9DT01QT05FTlQgfSBmcm9tICdub3ZvLWVsZW1lbnRzL2VsZW1lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBOb3ZvRHJvcGRvd25FbGVtZW50IH0gZnJvbSAnbm92by1lbGVtZW50cy9lbGVtZW50cy9kcm9wZG93bic7XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyVGFiID0ge1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICB0eXBlTGFiZWw6IHN0cmluZztcbiAgdmFsdWVGaWVsZDogc3RyaW5nO1xuICBsYWJlbEZpZWxkOiBzdHJpbmc7XG4gIHNjcm9sbE9mZnNldD86IG51bWJlcjtcbiAgaWNvbj86IHN0cmluZztcbn0gJiAoUGFyZW50VGFiIHwgQ2hpbGRUYWIpO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRUYWIgPSB7XG4gIGNoaWxkVHlwZU5hbWU6IHN0cmluZztcbiAgZGF0YTogQXJyYXk8UGFyZW50T3B0aW9uPjtcbn07XG5cbnR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbn0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG50eXBlIFBhcmVudE9wdGlvbiA9IEJhc2VPcHRpb24gJiB7XG4gIGNoaWxkcmVuOiBPcHRpb25bXTtcbn07XG5cbnR5cGUgT3B0aW9uID0gQmFzZU9wdGlvbiB8IFBhcmVudE9wdGlvbjtcblxuZXhwb3J0IHR5cGUgQ2hpbGRUYWIgPSB7XG4gIGRhdGE6IEFycmF5PHsgc2VsZWN0ZWQ/OiBib29sZWFuIH0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyUXVpY2tTZWxlY3QgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgY2hpbGRUeXBlTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiAoKHsgc2VsZWN0ZWQ/OiBib29sZWFuIH0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB8IG51bWJlcilbXTtcbiAgYWxsPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1aWNrU2VsZWN0Q29uZmlnID0geyBsYWJlbDogc3RyaW5nOyBpdGVtczogVGFiYmVkR3JvdXBQaWNrZXJRdWlja1NlbGVjdFtdIH07XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyQnV0dG9uQ29uZmlnID0ge1xuICB0aGVtZTogc3RyaW5nO1xuICBzaWRlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tdGFiYmVkLWdyb3VwLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9UYWJiZWRHcm91cFBpY2tlci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vVGFiYmVkR3JvdXBQaWNrZXIuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOT1ZPX09QVElPTl9QQVJFTlRfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogTm92b1RhYmJlZEdyb3VwUGlja2VyRWxlbWVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgTm92b1RhYmJlZEdyb3VwUGlja2VyRWxlbWVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgndGFiYmVkR3JvdXBQaWNrZXJWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnKVxuICBwcml2YXRlIHNjcm9sbGFibGVJbnN0YW5jZTogQ2RrU2Nyb2xsYWJsZTtcbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JylcbiAgcHJpdmF0ZSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgcHVibGljIGRyb3Bkb3duOiBOb3ZvRHJvcGRvd25FbGVtZW50O1xuXG4gIG11bHRpcGxlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBidXR0b25Db25maWc6IFRhYmJlZEdyb3VwUGlja2VyQnV0dG9uQ29uZmlnO1xuICBASW5wdXQoKSB0YWJzOiBUYWJiZWRHcm91cFBpY2tlclRhYltdO1xuICBASW5wdXQoKSBxdWlja1NlbGVjdENvbmZpZzogUXVpY2tTZWxlY3RDb25maWc7XG4gIEBJbnB1dCgpIHNob3dGb290ZXIgPSBmYWxzZTtcblxuICAvLyBJbiBhY3RpdmF0aW9uIG1vZGUsIG5vIGNoZWNrYm94ZXMgYXJlIGRpc3BsYXllZCwgYW5kIG9ubHkgdGhlIHNlbGVjdGlvbkFjdGl2YXRlZCBldmVudCBvY2N1cnMuXG4gIEBCb29sZWFuSW5wdXQoKVxuICBASW5wdXQoKSBzZWxlY3Rpb25FbmFibGVkID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgYWN0aXZhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJiZWRHcm91cFBpY2tlclRhYltdPigpO1xuICBAT3V0cHV0KCkgYXBwbHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZGlzcGxheVRhYnM6IFRhYmJlZEdyb3VwUGlja2VyVGFiW107XG4gIGRpc3BsYXlUYWJJbmRleDogbnVtYmVyID0gMDtcblxuICBmaWx0ZXJUZXh0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBmaWx0ZXJUZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIHNob3dDbGVhckFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGFwcGxpZWRTdGF0ZTogVGFiYmVkR3JvdXBQaWNrZXJUYWJbXTtcblxuICAvLyBJbml0aWFsIGhlaWdodCBiYXNlZCBvbiAxMyBweCBmb250IHJlbmRlcmVkIGluIGNocm9tZS4gQWN0dWFsIGhlaWdodCByZXRyaWV2ZWQgb25Ecm9wZG93blRvZ2dsZWQuXG4gIHNjcm9sbFZpZXdwb3J0SGVpZ2h0OiBudW1iZXIgPSAzNTE7XG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZTogbnVtYmVyID0gMzk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGxhYmVsU2VydmljZTogTm92b0xhYmVsU2VydmljZSwgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBkaXNwbGF5VGFiKCk6IFRhYmJlZEdyb3VwUGlja2VyVGFiIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5VGFic1t0aGlzLmRpc3BsYXlUYWJJbmRleF07XG4gIH1cbiAgc2V0IGRpc3BsYXlUYWIodGFiOiBUYWJiZWRHcm91cFBpY2tlclRhYikge1xuICAgIHRoaXMuZGlzcGxheVRhYkluZGV4ID0gdGhpcy50YWJzLm1hcCgoeyB0eXBlTmFtZSB9KSA9PiB0eXBlTmFtZSkuaW5kZXhPZih0YWIudHlwZU5hbWUpO1xuICB9XG5cbiAgZ2V0IG1pbkJ1ZmZlclB4KCkge1xuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0SGVpZ2h0OyAvLyByZW5kZXIgYXQgbGVhc3QgMnggdGhlIG51bWJlciBvZiBpdGVtcyB2aXNpYmxlICh2aWV3cG9ydCArIG1pbiBidWZmZXIpXG4gIH1cblxuICBnZXQgbWF4QnVmZmVyUHgoKSB7XG4gICAgcmV0dXJuIDIgKiB0aGlzLnNjcm9sbFZpZXdwb3J0SGVpZ2h0OyAvLyByZW5kZXIgYXQgbW9zdCAzeCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHZpc2libGUgKHZpZXdwb3J0ICsgbWF4IGJ1ZmZlcilcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFZhbHVlcygpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyVGV4dFN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyVGV4dC5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogdGhpcy5maWx0ZXIsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJUZXh0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclRleHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkVmFsdWVzKCkge1xuICAgIHRoaXMuc2V0dXBEaXNwbGF5RGF0YSgpO1xuICAgIHRoaXMuY3JlYXRlQ2hpbGRyZW5SZWZlcmVuY2VzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRGVzY2VuZGFudFNlbGVjdGlvbigpO1xuICAgIHRoaXMudXBkYXRlUGFyZW50c0FuZFF1aWNrU2VsZWN0KCk7XG4gICAgdGhpcy51cGRhdGVDbGVhckFsbCgpO1xuICB9XG5cbiAgY2hhbmdlVGFiKHRhYjogVGFiYmVkR3JvdXBQaWNrZXJUYWIpIHtcbiAgICB0aGlzLmRpc3BsYXlUYWIgPSB0YWI7XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnNjcm9sbGFibGVJbnN0YW5jZS5zY3JvbGxUbyh7IGJlaGF2aW9yOiAnYXV0bycsIHRvcDogMCB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRQaXhlbEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAnJykuaGVpZ2h0Lm1hdGNoKC8oXFxkKyhcXC5cXGQrKT8pcHgkLylbMV0pO1xuICB9XG5cbiAgc2V0dXBEaXNwbGF5RGF0YSgpOiB2b2lkIHtcbiAgICAvLyBzaGFsbG93IGNvcHkgaGVyZSBzbyB0aGF0IHJlYXNzaWduaW5nIGRpc3BsYXlUYWJzW2ldLmRhdGEgZG9lc24ndCBtdXRhdGUgdGFic1tpXS5kYXRhXG4gICAgLy8gYnV0IGJvdGggZGF0YSB2YWx1ZXMgcG9pbnQgdG8gdGhlIHNhbWUgaXRlbXNcbiAgICB0aGlzLmRpc3BsYXlUYWJzID0gdGhpcy50YWJzLm1hcCgodGFiKSA9PiAoeyAuLi50YWIgfSkpO1xuICAgIHRoaXMuZGlzcGxheVRhYiA9IHRoaXMudGFic1swXTtcbiAgICB0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuICB9XG5cbiAgLy8gUmVwbGFjZSBlYWNoIHBhcmVudCdzIGNoaWxkIG9iamVjdCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCB0byBhdm9pZFxuICAvLyBhIGNoaWxkIGxvb2t1cCBmb3Igc2VsZWN0ZWQgc3RhdHVzOyBsaW5raW5nIHJlZmVyZW5jZXMgYWxsb3dzIE0geCBOXG4gIC8vIHRpbWUgY29tcGxleGl0eSBpbnN0ZWFkIG9mIE0geCBOXjJcbiAgY3JlYXRlQ2hpbGRyZW5SZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgIC8vIHdvdWxkIHJhdGhlciBmaWx0ZXIgYnV0IFR5cGVTY3JpcHQgc3RpbGwgd2FudHMgYSB0eXBlIG5hcnJvd2luZyBoZXJlXG4gICAgICBpZiAoJ2NoaWxkVHlwZU5hbWUnIGluIHRhYikge1xuICAgICAgICBjb25zdCBjaGlsZFRhYiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHR5cGVOYW1lID09PSB0YWIuY2hpbGRUeXBlTmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGdW5jdGlvbiA9IHRoaXMubWFrZUNvbXBhcmVGdW5jdGlvbihjaGlsZFRhYi52YWx1ZUZpZWxkKTtcbiAgICAgICAgY29uc3Qgd2FybkZ1bmN0aW9uID0gdGhpcy5tYWtlV2FybmluZ0Z1bmN0aW9uKHRhYi50eXBlTmFtZSwgY2hpbGRUYWIudHlwZU5hbWUsIGNoaWxkVGFiLnZhbHVlRmllbGQpO1xuICAgICAgICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IGNoaWxkVGFiLmRhdGEuc2xpY2UoKS5zb3J0KGNvbXBhcmVGdW5jdGlvbik7XG5cbiAgICAgICAgdGFiLmRhdGFcbiAgICAgICAgICAuZmlsdGVyKCh7IGNoaWxkcmVuIH0pID0+IGNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgICAgLmZvckVhY2goKHBhcmVudDogeyBjaGlsZHJlbj86IGFueVtdIH0pID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDaGlsZHJlbldpdGhSZWZlcmVuY2VzKHBhcmVudCBhcyBQYXJlbnRPcHRpb24sIHNvcnRlZENoaWxkcmVuLCBjb21wYXJlRnVuY3Rpb24sIHdhcm5GdW5jdGlvbiksXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5xdWlja1NlbGVjdENvbmZpZykge1xuICAgICAgdGhpcy5xdWlja1NlbGVjdENvbmZpZy5pdGVtc1xuICAgICAgICAuZmlsdGVyKChwYXJlbnQpID0+ICdhbGwnIGluIHBhcmVudClcbiAgICAgICAgLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgIHBhcmVudC5jaGlsZHJlbiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHBhcmVudC5jaGlsZFR5cGVOYW1lID09PSB0eXBlTmFtZSkuZGF0YTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMucXVpY2tTZWxlY3RDb25maWcuaXRlbXNcbiAgICAgICAgLmZpbHRlcigocGFyZW50KSA9PiAhKCdhbGwnIGluIHBhcmVudCkpXG4gICAgICAgIC5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZFRhYiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHR5cGVOYW1lID09PSBwYXJlbnQuY2hpbGRUeXBlTmFtZSk7XG4gICAgICAgICAgY29uc3QgY29tcGFyZUZ1bmN0aW9uID0gdGhpcy5tYWtlQ29tcGFyZUZ1bmN0aW9uKGNoaWxkVGFiLnZhbHVlRmllbGQpO1xuICAgICAgICAgIGNvbnN0IHdhcm5GdW5jdGlvbiA9IHRoaXMubWFrZVdhcm5pbmdGdW5jdGlvbihwYXJlbnQubGFiZWwsIGNoaWxkVGFiLnR5cGVOYW1lLCBjaGlsZFRhYi52YWx1ZUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IGNoaWxkVGFiLmRhdGEuc2xpY2UoKS5zb3J0KGNvbXBhcmVGdW5jdGlvbik7XG5cbiAgICAgICAgICB0aGlzLnJlcGxhY2VDaGlsZHJlbldpdGhSZWZlcmVuY2VzKHBhcmVudCBhcyBQYXJlbnRPcHRpb24sIHNvcnRlZENoaWxkcmVuLCBjb21wYXJlRnVuY3Rpb24sIHdhcm5GdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VDb21wYXJlRnVuY3Rpb248VD4oa2V5OiBzdHJpbmcpOiAoYTogVCB8IHsgW2tleTogc3RyaW5nXTogVCB9LCBiOiBUIHwgeyBba2V5OiBzdHJpbmddOiBUIH0pID0+IDEgfCAtMSB8IDAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoYTogVCB8IHsgW2tleTogc3RyaW5nXTogVCB9LCBiOiBUIHwgeyBba2V5OiBzdHJpbmddOiBUIH0pID0+IHtcbiAgICAgIGNvbnN0IGFWYWx1ZTogVCA9IChhICYmIGFba2V5XSkgfHwgYTtcbiAgICAgIGNvbnN0IGJWYWx1ZTogVCA9IChiICYmIGJba2V5XSkgfHwgYjtcblxuICAgICAgaWYgKGFWYWx1ZSA8IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGFWYWx1ZSA+IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXBsYWNlQ2hpbGRyZW5XaXRoUmVmZXJlbmNlcyhcbiAgICBwYXJlbnQ6IHsgY2hpbGRyZW46IGFueVtdIH0sXG4gICAgc29ydGVkRGF0YTogQ2hpbGRUYWJbJ2RhdGEnXSxcbiAgICBjb21wYXJlRnVuY3Rpb246IChhLCBiKSA9PiAxIHwgLTEgfCAwLFxuICAgIHdhcm5GdW5jdGlvbjogKGNoaWxkKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBwYXJlbnQuY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW5cbiAgICAgIC5tYXAoKGNoaWxkKSA9PiBiaW5hcnlTZWFyY2goY2hpbGQsIHNvcnRlZERhdGEsIGNvbXBhcmVGdW5jdGlvbikgfHwgd2FybkZ1bmN0aW9uKGNoaWxkKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIHNpbmNlIG1hcCBjYW4gcmV0dXJuIHVuZGVmaW5lZCwgcmVtb3ZlIHVuZGVmaW5lZCBlbGVtZW50c1xuICB9XG5cbiAgbWFrZVdhcm5pbmdGdW5jdGlvbihwYXJlbnRMYWJlbDogc3RyaW5nLCBjaGlsZExhYmVsOiBzdHJpbmcsIGNoaWxkVmFsdWVGaWVsZCk6IChjaGlsZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGNoaWxkW2NoaWxkVmFsdWVGaWVsZF0gfHwgY2hpbGQ7XG4gICAgICBjb25zb2xlLndhcm4oYE5vICR7Y2hpbGRMYWJlbH0gZm91bmQgd2l0aCB2YWx1ZSAke2NoaWxkVmFsdWV9IGZvciBwYXJlbnQgJHtwYXJlbnRMYWJlbH1gKTtcbiAgICB9O1xuICB9XG5cbiAgb25Ecm9wZG93blRvZ2dsZShldmVudCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dC5uZXh0KCcnKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydEhlaWdodCA9IHRoaXMuZ2V0UGl4ZWxIZWlnaHQodGhpcy5zY3JvbGxhYmxlSW5zdGFuY2UuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0aGlzLmdldFBpeGVsSGVpZ2h0KHRoaXMuc2Nyb2xsYWJsZUluc3RhbmNlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ25vdm8tb3B0aW9uJykpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlSXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XG4gICAgICB0aGlzLm9uSXRlbVRvZ2dsZWQoaXRlbSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZhdGlvbi5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgb25JdGVtVG9nZ2xlZChpdGVtOiBPcHRpb24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgdGhpcy51cGRhdGVEZXNjZW5kYW50cyhpdGVtLnNlbGVjdGVkLCBpdGVtLmNoaWxkcmVuKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVQYXJlbnRzQW5kUXVpY2tTZWxlY3QoKTtcbiAgICB0aGlzLnVwZGF0ZUNsZWFyQWxsKGl0ZW0uc2VsZWN0ZWQpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGVkVmFsdWVzKCk7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpbml0aWFsaXplRGVzY2VuZGFudFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICBpZiAoJ2NoaWxkVHlwZU5hbWUnIGluIHRhYiAmJiB0YWIuZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIHRhYi5kYXRhLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgIGlmIChwYXJlbnQuc2VsZWN0ZWQgJiYgcGFyZW50LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGVzY2VuZGFudHMocGFyZW50SXNTZWxlY3RlZDogYm9vbGVhbiwgY2hpbGRyZW46IE9wdGlvbltdKTogdm9pZCB7XG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKHBhcmVudElzU2VsZWN0ZWQpIHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgaXRlbS5zZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGVzY2VuZGFudHMoaXRlbS5zZWxlY3RlZCwgaXRlbS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDbGVhckFsbChpdGVtV2FzSnVzdFNlbGVjdGVkPzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICB0aGlzLnNob3dDbGVhckFsbCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgdGhpcy5zaG93Q2xlYXJBbGwgPSBpdGVtV2FzSnVzdFNlbGVjdGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogdGhpcy50YWJzLnNvbWUoKHRhYikgPT4ge1xuICAgICAgICAgIGlmICgodGFiIGFzIFBhcmVudFRhYikuY2hpbGRUeXBlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYi5kYXRhLnNvbWUoKHsgc2VsZWN0ZWQsIGluZGV0ZXJtaW5hdGUgfSkgPT4gc2VsZWN0ZWQgfHwgaW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YWIuZGF0YS5zb21lKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVBhcmVudHNBbmRRdWlja1NlbGVjdCgpOiB2b2lkIHtcbiAgICAvLyBtdXRhdGUgaGVyZSB0byBhdm9pZCBkZXJlZmVyZW5jaW5nIHRoZSBvYmplY3RzIGluIGRpc3BsYXlUYWJzXG4gICAgdGhpcy50YWJzXG4gICAgICAuZmlsdGVyKCh0YWIpID0+ICdjaGlsZFR5cGVOYW1lJyBpbiB0YWIgJiYgISF0YWIuY2hpbGRUeXBlTmFtZSlcbiAgICAgIC5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IHRhYi5kYXRhLmZpbHRlcigoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogYW55W10gfSkgPT4gY2hpbGRyZW4/Lmxlbmd0aCk7XG5cbiAgICAgICAgcGFyZW50cy5mb3JFYWNoKChwYXJlbnQ6IFBhcmVudE9wdGlvbikgPT4ge1xuICAgICAgICAgIFsnaW5kZXRlcm1pbmF0ZScsICdzZWxlY3RlZCddLmZvckVhY2goKHNlbGVjdGVkU3RhdGVPcHRpb24pID0+IGRlbGV0ZSBwYXJlbnRbc2VsZWN0ZWRTdGF0ZU9wdGlvbl0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdGF0ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRTdGF0ZShwYXJlbnQuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChzZWxlY3RlZFN0YXRlKSB7XG4gICAgICAgICAgICBwYXJlbnRbc2VsZWN0ZWRTdGF0ZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnF1aWNrU2VsZWN0Q29uZmlnKSB7XG4gICAgICB0aGlzLnF1aWNrU2VsZWN0Q29uZmlnLml0ZW1zLmZvckVhY2goKHF1aWNrU2VsZWN0KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBxdWlja1NlbGVjdC5zZWxlY3RlZDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdGF0ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRTdGF0ZShxdWlja1NlbGVjdC5jaGlsZHJlbiBhcyAoT3B0aW9uKVtdKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkU3RhdGUpIHtcbiAgICAgICAgICBxdWlja1NlbGVjdFtzZWxlY3RlZFN0YXRlXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkU3RhdGUgPSAoY2hpbGRBcnJheTogT3B0aW9uW10pOiAnc2VsZWN0ZWQnIHwgJ2luZGV0ZXJtaW5hdGUnIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBudW1iZXJPZlNlbGVjdGVkSXRlbXMgPSBjaGlsZEFycmF5LmZpbHRlcigoeyBzZWxlY3RlZCB9KSA9PiBzZWxlY3RlZCkubGVuZ3RoO1xuICAgIGlmICghbnVtYmVyT2ZTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVtYmVyT2ZTZWxlY3RlZEl0ZW1zID09PSBjaGlsZEFycmF5Lmxlbmd0aCA/ICdzZWxlY3RlZCcgOiAnaW5kZXRlcm1pbmF0ZSc7XG4gIH07XG5cbiAgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogVGFiYmVkR3JvdXBQaWNrZXJUYWJbXSB7XG4gICAgcmV0dXJuIHRoaXMudGFicy5tYXAoKHRhYikgPT4gKHtcbiAgICAgIC4uLnRhYixcbiAgICAgIGRhdGE6IHRhYi5kYXRhLmZpbHRlcigoeyBzZWxlY3RlZCB9KSA9PiBzZWxlY3RlZCksXG4gICAgfSkpO1xuICB9XG5cbiAgZW1pdFNlbGVjdGVkVmFsdWVzKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5nZXRTZWxlY3RlZFZhbHVlcygpKTtcbiAgfVxuXG4gIHVwZGF0ZUFwcGxpZWRTdGF0ZSgpIHtcbiAgICB0aGlzLmFwcGxpZWRTdGF0ZSA9IEhlbHBlcnMuZGVlcENsb25lKHRoaXMuZGlzcGxheVRhYnMpO1xuICB9XG5cbiAgYXBwbHkoKSB7XG4gICAgdGhpcy51cGRhdGVBcHBsaWVkU3RhdGUoKTtcbiAgICB0aGlzLmFwcGx5Q2hhbmdlLmVtaXQodGhpcy5nZXRTZWxlY3RlZFZhbHVlcygpKTtcbiAgICB0aGlzLmRyb3Bkb3duLmNsb3NlUGFuZWwoKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnJldmVydFN0YXRlKCk7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5kcm9wZG93bi5jbG9zZVBhbmVsKCk7XG4gIH1cblxuICByZXZlcnRTdGF0ZSgpIHtcbiAgICB0aGlzLnRhYnMgPSBIZWxwZXJzLmRlZXBDbG9uZSh0aGlzLmFwcGxpZWRTdGF0ZSk7XG4gICAgdGhpcy5sb2FkVmFsdWVzKCk7XG4gIH1cblxuICBkZXNlbGVjdEV2ZXJ5dGhpbmcoZXZlbnQpIHtcbiAgICBIZWxwZXJzLnN3YWxsb3dFdmVudChldmVudCk7XG4gICAgdGhpcy5zaG93Q2xlYXJBbGwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5xdWlja1NlbGVjdENvbmZpZykge1xuICAgICAgdGhpcy5xdWlja1NlbGVjdENvbmZpZy5pdGVtcy5mb3JFYWNoKChxdWlja1NlbGVjdCkgPT4ge1xuICAgICAgICBkZWxldGUgcXVpY2tTZWxlY3Quc2VsZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgaWYgKCh0YWIgYXMgUGFyZW50VGFiKS5jaGlsZFR5cGVOYW1lKSB7XG4gICAgICAgIHRhYi5kYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBkZWxldGUgaXRlbS5zZWxlY3RlZDtcbiAgICAgICAgICBkZWxldGUgaXRlbS5pbmRldGVybWluYXRlO1xuICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IGRlbGV0ZSBjaGlsZC5zZWxlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHRhYiBhcyBDaGlsZFRhYikuZGF0YS5mb3JFYWNoKChpdGVtKSA9PiBkZWxldGUgaXRlbS5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2xlYXJGaWx0ZXIoZXZlbnQpIHtcbiAgICBIZWxwZXJzLnN3YWxsb3dFdmVudChldmVudCk7XG4gICAgdGhpcy5maWx0ZXJUZXh0Lm5leHQoJycpO1xuICB9XG5cbiAgb25GaWx0ZXIoZXZlbnQ6IHsgdGFyZ2V0OiB7IHZhbHVlOiBzdHJpbmcgfSB9KSB7XG4gICAgdGhpcy5maWx0ZXJUZXh0Lm5leHQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxuXG4gIGZpbHRlciA9IChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLmRpc3BsYXlUYWJzLmZvckVhY2goXG4gICAgICAoZGlzcGxheVRhYiwgaSkgPT5cbiAgICAgICAgKGRpc3BsYXlUYWIuZGF0YSA9IHRoaXMudGFic1tpXS5kYXRhLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtW2Rpc3BsYXlUYWIubGFiZWxGaWVsZF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgaXRlbVtkaXNwbGF5VGFiLnZhbHVlRmllbGRdPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgKSksXG4gICAgKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfTtcbn1cbiIsIjxub3ZvLWRyb3Bkb3duICh0b2dnbGVkKT1cIm9uRHJvcGRvd25Ub2dnbGUoJGV2ZW50KVwiIG11bHRpcGxlICNkcm9wZG93bj5cbiAgPG5vdm8tYnV0dG9uXG4gICAgY2xhc3M9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLWJ1dHRvblwiXG4gICAgW3RoZW1lXT1cImJ1dHRvbkNvbmZpZy50aGVtZVwiXG4gICAgW3NpZGVdPVwiYnV0dG9uQ29uZmlnLnNpZGVcIlxuICAgIFtpY29uXT1cImJ1dHRvbkNvbmZpZy5pY29uXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLWJ1dHRvbi1sYWJlbFwiPnt7IGJ1dHRvbkNvbmZpZy5sYWJlbCB9fTwvZGl2PlxuICA8L25vdm8tYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwidGFiYmVkLWdyb3VwLXBpY2tlci1zZWFyY2hcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLXNlYXJjaFwiIChrZXlkb3duKT1cImRyb3Bkb3duLl9oYW5kbGVLZXlkb3duKCRldmVudClcIj5cbiAgICA8aW5wdXQgI2lucHV0RWxlbWVudCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJsYWJlbFNlcnZpY2Uuc2VhcmNoXCIgW3ZhbHVlXT1cImZpbHRlclRleHQgfCBhc3luY1wiIChpbnB1dCk9XCJvbkZpbHRlcigkZXZlbnQpXCIgLz5cbiAgICA8aSBjbGFzcz1cImJoaS1zZWFyY2hcIiAqbmdJZj1cIiEoZmlsdGVyVGV4dCB8IGFzeW5jKVwiPjwvaT5cbiAgICA8aSBjbGFzcz1cImJoaS10aW1lc1wiICpuZ0lmPVwiKGZpbHRlclRleHQgfCBhc3luYylcIiAoY2xpY2spPVwib25DbGVhckZpbHRlcigkZXZlbnQpXCIgKGtleWRvd24uc3BhY2UpPVwib25DbGVhckZpbHRlcigkZXZlbnQpXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYmJlZC1ncm91cC1waWNrZXItY29sdW1uLWNvbnRhaW5lclwiIChrZXlkb3duKT1cImRyb3Bkb3duLl9oYW5kbGVLZXlkb3duKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFiYmVkLWdyb3VwLXBpY2tlci1jb2x1bW4gbGVmdFwiPlxuICAgICAgPG5vdm8tbmF2IHRoZW1lPVwid2hpdGVcIiBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiPlxuICAgICAgICA8bm92by10YWIgKm5nRm9yPVwibGV0IHRhYiBvZiBkaXNwbGF5VGFic1wiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJ0YWIudHlwZU5hbWVcIlxuICAgICAgICAgIChhY3RpdmVDaGFuZ2UpPVwiY2hhbmdlVGFiKHRhYilcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0YWIudHlwZUxhYmVsIH19ICh7eyB0YWIuZGF0YS5sZW5ndGggfX0pPC9zcGFuPjxpIGNsYXNzPVwiYmhpLW5leHRcIj48L2k+XG4gICAgICAgIDwvbm92by10YWI+XG4gICAgICA8L25vdm8tbmF2PlxuICAgICAgPG5vdm8tYnV0dG9uICpuZ0lmPVwic2hvd0NsZWFyQWxsICYmICFzaG93Rm9vdGVyXCIgY2xhc3M9XCJjbGVhci1hbGwtYnV0dG9uXCIgdGhlbWU9XCJkaWFsb2d1ZVwiIGljb249XCJ0aW1lc1wiIHNpZGU9XCJyaWdodFwiXG4gICAgICAgIGNvbG9yPVwiZ3JhcGVmcnVpdFwiIChjbGljayk9XCJkZXNlbGVjdEV2ZXJ5dGhpbmcoJGV2ZW50KVwiIChrZXlkb3duLnNwYWNlKT1cImRlc2VsZWN0RXZlcnl0aGluZygkZXZlbnQpXCI+e3sgbGFiZWxTZXJ2aWNlLmNsZWFyIH19PC9ub3ZvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGFiYmVkLWdyb3VwLXBpY2tlci1jb2x1bW4gcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJxdWljay1zZWxlY3RcIiAqbmdJZj1cInF1aWNrU2VsZWN0Q29uZmlnICYmICEoZmlsdGVyVGV4dCB8IGFzeW5jKVwiPlxuICAgICAgICA8bm92by1vcHRncm91cCBjbGFzcz1cInF1aWNrLXNlbGVjdC1saXN0XCIgW2xhYmVsXT1cInF1aWNrU2VsZWN0Q29uZmlnLmxhYmVsXCI+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uXG4gICAgICAgICAgICBjbGFzcz1cInF1aWNrLXNlbGVjdC1pdGVtXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWlja1NlbGVjdCBvZiBxdWlja1NlbGVjdENvbmZpZy5pdGVtc1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicXVpY2tTZWxlY3QubGFiZWxcIlxuICAgICAgICAgICAgW2FsbG93U2VsZWN0aW9uXT1cInNlbGVjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cInF1aWNrU2VsZWN0LnNlbGVjdGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUl0ZW0ocXVpY2tTZWxlY3QpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImFjdGl2YXRlSXRlbShxdWlja1NlbGVjdClcIlxuICAgICAgICAgICAgbm92b0luZXJ0PlxuICAgICAgICAgICAge3txdWlja1NlbGVjdC5sYWJlbH19XG4gICAgICAgICAgPC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgPC9ub3ZvLW9wdGdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8bm92by1vcHRncm91cCAqbmdJZj1cImRpc3BsYXlUYWIuZGF0YS5sZW5ndGhcIj5cbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIlxuICAgICAgICAgIFttYXhCdWZmZXJQeF09XCJtYXhCdWZmZXJQeFwiXG4gICAgICAgICAgW21pbkJ1ZmZlclB4XT1cIm1pbkJ1ZmZlclB4XCJcbiAgICAgICAgICAjdGFiYmVkR3JvdXBQaWNrZXJWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uXG4gICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXlUYWIuZGF0YVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiaXRlbVtkaXNwbGF5VGFiLmxhYmVsRmllbGRdXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi12YWx1ZV09XCJpdGVtW2Rpc3BsYXlUYWIudmFsdWVGaWVsZF1cIlxuICAgICAgICAgICAgW2FsbG93U2VsZWN0aW9uXT1cInNlbGVjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlSXRlbShpdGVtKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJhY3RpdmF0ZUl0ZW0oaXRlbSlcIlxuICAgICAgICAgICAgbm92b0luZXJ0PlxuICAgICAgICAgICAge3tpdGVtW2Rpc3BsYXlUYWIubGFiZWxGaWVsZF19fVxuICAgICAgICAgIDwvbm92by1vcHRpb24+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgPC9ub3ZvLW9wdGdyb3VwPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmJlZC1ncm91cC1waWNrZXItZW1wdHktaXRlbVwiICpuZ0lmPVwiIWRpc3BsYXlUYWIuZGF0YS5sZW5ndGggJiYgKGZpbHRlclRleHQgfCBhc3luYylcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJ7eyBkaXNwbGF5VGFiLmljb24gfHwgJ2JoaS1zZWFyY2gnIH19XCI+PC9pPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaXRlbS1tYWluLW1lc3NhZ2VcIj57eyBsYWJlbFNlcnZpY2UudGFiYmVkR3JvdXBQaWNrZXJFbXB0eSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaXRlbS1zdWItbWVzc2FnZVwiPnt7IGxhYmVsU2VydmljZS50YWJiZWRHcm91cENsZWFyU3VnZ2VzdGlvbihkaXNwbGF5VGFiLnR5cGVMYWJlbCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmb290ZXJcIiAqbmdJZj1cInNob3dGb290ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZS1jYW5jZWwtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgPG5vdm8tYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY2xlYXItYWxsLWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwic2hvd0NsZWFyQWxsXCJcbiAgICAgICAgdGhlbWU9XCJkaWFsb2d1ZVwiXG4gICAgICAgIGljb249XCJ0aW1lc1wiXG4gICAgICAgIHNpZGU9XCJyaWdodFwiXG4gICAgICAgIGNvbG9yPVwiZ3JhcGVmcnVpdFwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdEV2ZXJ5dGhpbmcoJGV2ZW50KVwiPnt7IGxhYmVsU2VydmljZS5jbGVhciB9fTwvbm92by1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNhdmUtY2FuY2VsLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgIDxub3ZvLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImNhbmNlbC1idXR0b25cIlxuICAgICAgICBtYXJnaW5SaWdodD1cIjFyZW1cIlxuICAgICAgICB0aGVtZT1cImRpYWxvZ3VlXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCI+e3sgbGFiZWxTZXJ2aWNlLmNhbmNlbCB9fTwvbm92by1idXR0b24+XG4gICAgICA8bm92by1idXR0b25cbiAgICAgICAgY2xhc3M9XCJzYXZlLWJ1dHRvblwiXG4gICAgICAgIHRoZW1lPVwicHJpbWFyeVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseSgpXCI+e3sgbGFiZWxTZXJ2aWNlLmFwcGx5IH19PC9ub3ZvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25vdm8tZHJvcGRvd24+Il19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFiYmVkR3JvdXBQaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy90YWJiZWQtZ3JvdXAtcGlja2VyL1RhYmJlZEdyb3VwUGlja2VyLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvdGFiYmVkLWdyb3VwLXBpY2tlci9UYWJiZWRHcm91cFBpY2tlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQXVEdEUsTUFBTSxPQUFPLDRCQUE0QjtJQXNDdkMsWUFBbUIsWUFBOEIsRUFBVSxHQUFzQjtRQUE5RCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTlCakYsYUFBUSxHQUFHLElBQUksQ0FBQztRQUtQLGVBQVUsR0FBRyxLQUFLLENB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LEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyw4VkN4RW5HLDY5SUE2RmdCOztBREZMO0lBRFIsWUFBWSxFQUFFOztzRUFDa0I7MkZBakJ0Qiw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyw4QkFBOEIsRUFBRSxDQUFDO3FIQUl6RixrQkFBa0I7c0JBRHpCLFNBQVM7dUJBQUMsd0NBQXdDO2dCQUczQyxZQUFZO3NCQURuQixTQUFTO3VCQUFDLGNBQWM7Z0JBR2xCLFFBQVE7c0JBRGQsU0FBUzt1QkFBQyxVQUFVO2dCQUtaLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJ25vdm8tZWxlbWVudHMvc2VydmljZXMnO1xuaW1wb3J0IHsgYmluYXJ5U2VhcmNoLCBCb29sZWFuSW5wdXQsIEhlbHBlcnMgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3V0aWxzJztcbmltcG9ydCB7IE5PVk9fT1BUSU9OX1BBUkVOVF9DT01QT05FTlQgfSBmcm9tICdub3ZvLWVsZW1lbnRzL2VsZW1lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBOb3ZvRHJvcGRvd25FbGVtZW50IH0gZnJvbSAnbm92by1lbGVtZW50cy9lbGVtZW50cy9kcm9wZG93bic7XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyVGFiID0ge1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICB0eXBlTGFiZWw6IHN0cmluZztcbiAgdmFsdWVGaWVsZDogc3RyaW5nO1xuICBsYWJlbEZpZWxkOiBzdHJpbmc7XG4gIHNjcm9sbE9mZnNldD86IG51bWJlcjtcbiAgaWNvbj86IHN0cmluZztcbn0gJiAoUGFyZW50VGFiIHwgQ2hpbGRUYWIpO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRUYWIgPSB7XG4gIGNoaWxkVHlwZU5hbWU6IHN0cmluZztcbiAgZGF0YTogQXJyYXk8UGFyZW50T3B0aW9uPjtcbn07XG5cbnR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbn0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG50eXBlIFBhcmVudE9wdGlvbiA9IEJhc2VPcHRpb24gJiB7XG4gIGNoaWxkcmVuOiBPcHRpb25bXTtcbn07XG5cbnR5cGUgT3B0aW9uID0gQmFzZU9wdGlvbiB8IFBhcmVudE9wdGlvbjtcblxuZXhwb3J0IHR5cGUgQ2hpbGRUYWIgPSB7XG4gIGRhdGE6IEFycmF5PHsgc2VsZWN0ZWQ/OiBib29sZWFuIH0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyUXVpY2tTZWxlY3QgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgY2hpbGRUeXBlTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiAoKHsgc2VsZWN0ZWQ/OiBib29sZWFuIH0gJiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB8IG51bWJlcilbXTtcbiAgYWxsPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1aWNrU2VsZWN0Q29uZmlnID0geyBsYWJlbDogc3RyaW5nOyBpdGVtczogVGFiYmVkR3JvdXBQaWNrZXJRdWlja1NlbGVjdFtdIH07XG5cbmV4cG9ydCB0eXBlIFRhYmJlZEdyb3VwUGlja2VyQnV0dG9uQ29uZmlnID0ge1xuICB0aGVtZTogc3RyaW5nO1xuICBzaWRlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tdGFiYmVkLWdyb3VwLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9UYWJiZWRHcm91cFBpY2tlci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vVGFiYmVkR3JvdXBQaWNrZXIuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOT1ZPX09QVElPTl9QQVJFTlRfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogTm92b1RhYmJlZEdyb3VwUGlja2VyRWxlbWVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgTm92b1RhYmJlZEdyb3VwUGlja2VyRWxlbWVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgndGFiYmVkR3JvdXBQaWNrZXJWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnKVxuICBwcml2YXRlIHNjcm9sbGFibGVJbnN0YW5jZTogQ2RrU2Nyb2xsYWJsZTtcbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JylcbiAgcHJpdmF0ZSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgcHVibGljIGRyb3Bkb3duOiBOb3ZvRHJvcGRvd25FbGVtZW50O1xuXG4gIG11bHRpcGxlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBidXR0b25Db25maWc6IFRhYmJlZEdyb3VwUGlja2VyQnV0dG9uQ29uZmlnO1xuICBASW5wdXQoKSB0YWJzOiBUYWJiZWRHcm91cFBpY2tlclRhYltdO1xuICBASW5wdXQoKSBxdWlja1NlbGVjdENvbmZpZzogUXVpY2tTZWxlY3RDb25maWc7XG4gIEBJbnB1dCgpIHNob3dGb290ZXIgPSBmYWxzZTtcblxuICAvLyBJbiBhY3RpdmF0aW9uIG1vZGUsIG5vIGNoZWNrYm94ZXMgYXJlIGRpc3BsYXllZCwgYW5kIG9ubHkgdGhlIHNlbGVjdGlvbkFjdGl2YXRlZCBldmVudCBvY2N1cnMuXG4gIEBCb29sZWFuSW5wdXQoKVxuICBASW5wdXQoKSBzZWxlY3Rpb25FbmFibGVkID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgYWN0aXZhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJiZWRHcm91cFBpY2tlclRhYltdPigpO1xuICBAT3V0cHV0KCkgYXBwbHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZGlzcGxheVRhYnM6IFRhYmJlZEdyb3VwUGlja2VyVGFiW107XG4gIGRpc3BsYXlUYWJJbmRleDogbnVtYmVyID0gMDtcblxuICBmaWx0ZXJUZXh0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBmaWx0ZXJUZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIHNob3dDbGVhckFsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGFwcGxpZWRTdGF0ZTogVGFiYmVkR3JvdXBQaWNrZXJUYWJbXTtcblxuICAvLyBJbml0aWFsIGhlaWdodCBiYXNlZCBvbiAxMyBweCBmb250IHJlbmRlcmVkIGluIGNocm9tZS4gQWN0dWFsIGhlaWdodCByZXRyaWV2ZWQgb25Ecm9wZG93blRvZ2dsZWQuXG4gIHNjcm9sbFZpZXdwb3J0SGVpZ2h0OiBudW1iZXIgPSAzNTE7XG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZTogbnVtYmVyID0gMzk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGxhYmVsU2VydmljZTogTm92b0xhYmVsU2VydmljZSwgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBkaXNwbGF5VGFiKCk6IFRhYmJlZEdyb3VwUGlja2VyVGFiIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5VGFic1t0aGlzLmRpc3BsYXlUYWJJbmRleF07XG4gIH1cbiAgc2V0IGRpc3BsYXlUYWIodGFiOiBUYWJiZWRHcm91cFBpY2tlclRhYikge1xuICAgIHRoaXMuZGlzcGxheVRhYkluZGV4ID0gdGhpcy50YWJzLm1hcCgoeyB0eXBlTmFtZSB9KSA9PiB0eXBlTmFtZSkuaW5kZXhPZih0YWIudHlwZU5hbWUpO1xuICB9XG5cbiAgZ2V0IG1pbkJ1ZmZlclB4KCkge1xuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0SGVpZ2h0OyAvLyByZW5kZXIgYXQgbGVhc3QgMnggdGhlIG51bWJlciBvZiBpdGVtcyB2aXNpYmxlICh2aWV3cG9ydCArIG1pbiBidWZmZXIpXG4gIH1cblxuICBnZXQgbWF4QnVmZmVyUHgoKSB7XG4gICAgcmV0dXJuIDIgKiB0aGlzLnNjcm9sbFZpZXdwb3J0SGVpZ2h0OyAvLyByZW5kZXIgYXQgbW9zdCAzeCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHZpc2libGUgKHZpZXdwb3J0ICsgbWF4IGJ1ZmZlcilcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZFZhbHVlcygpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyVGV4dFN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyVGV4dC5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogdGhpcy5maWx0ZXIsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJUZXh0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclRleHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkVmFsdWVzKCkge1xuICAgIHRoaXMuc2V0dXBEaXNwbGF5RGF0YSgpO1xuICAgIHRoaXMuY3JlYXRlQ2hpbGRyZW5SZWZlcmVuY2VzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRGVzY2VuZGFudFNlbGVjdGlvbigpO1xuICAgIHRoaXMudXBkYXRlUGFyZW50c0FuZFF1aWNrU2VsZWN0KCk7XG4gICAgdGhpcy51cGRhdGVDbGVhckFsbCgpO1xuICB9XG5cbiAgY2hhbmdlVGFiKHRhYjogVGFiYmVkR3JvdXBQaWNrZXJUYWIpIHtcbiAgICB0aGlzLmRpc3BsYXlUYWIgPSB0YWI7XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnNjcm9sbGFibGVJbnN0YW5jZS5zY3JvbGxUbyh7IGJlaGF2aW9yOiAnYXV0bycsIHRvcDogMCB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRQaXhlbEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCAnJykuaGVpZ2h0Lm1hdGNoKC8oXFxkKyhcXC5cXGQrKT8pcHgkLylbMV0pO1xuICB9XG5cbiAgc2V0dXBEaXNwbGF5RGF0YSgpOiB2b2lkIHtcbiAgICAvLyBzaGFsbG93IGNvcHkgaGVyZSBzbyB0aGF0IHJlYXNzaWduaW5nIGRpc3BsYXlUYWJzW2ldLmRhdGEgZG9lc24ndCBtdXRhdGUgdGFic1tpXS5kYXRhXG4gICAgLy8gYnV0IGJvdGggZGF0YSB2YWx1ZXMgcG9pbnQgdG8gdGhlIHNhbWUgaXRlbXNcbiAgICB0aGlzLmRpc3BsYXlUYWJzID0gdGhpcy50YWJzLm1hcCgodGFiKSA9PiAoeyAuLi50YWIgfSkpO1xuICAgIHRoaXMuZGlzcGxheVRhYiA9IHRoaXMudGFic1swXTtcbiAgICB0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuICB9XG5cbiAgLy8gUmVwbGFjZSBlYWNoIHBhcmVudCdzIGNoaWxkIG9iamVjdCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCB0byBhdm9pZFxuICAvLyBhIGNoaWxkIGxvb2t1cCBmb3Igc2VsZWN0ZWQgc3RhdHVzOyBsaW5raW5nIHJlZmVyZW5jZXMgYWxsb3dzIE0geCBOXG4gIC8vIHRpbWUgY29tcGxleGl0eSBpbnN0ZWFkIG9mIE0geCBOXjJcbiAgY3JlYXRlQ2hpbGRyZW5SZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgIC8vIHdvdWxkIHJhdGhlciBmaWx0ZXIgYnV0IFR5cGVTY3JpcHQgc3RpbGwgd2FudHMgYSB0eXBlIG5hcnJvd2luZyBoZXJlXG4gICAgICBpZiAoJ2NoaWxkVHlwZU5hbWUnIGluIHRhYikge1xuICAgICAgICBjb25zdCBjaGlsZFRhYiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHR5cGVOYW1lID09PSB0YWIuY2hpbGRUeXBlTmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVGdW5jdGlvbiA9IHRoaXMubWFrZUNvbXBhcmVGdW5jdGlvbihjaGlsZFRhYi52YWx1ZUZpZWxkKTtcbiAgICAgICAgY29uc3Qgd2FybkZ1bmN0aW9uID0gdGhpcy5tYWtlV2FybmluZ0Z1bmN0aW9uKHRhYi50eXBlTmFtZSwgY2hpbGRUYWIudHlwZU5hbWUsIGNoaWxkVGFiLnZhbHVlRmllbGQpO1xuICAgICAgICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IGNoaWxkVGFiLmRhdGEuc2xpY2UoKS5zb3J0KGNvbXBhcmVGdW5jdGlvbik7XG5cbiAgICAgICAgdGFiLmRhdGFcbiAgICAgICAgICAuZmlsdGVyKCh7IGNoaWxkcmVuIH0pID0+IGNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgICAgLmZvckVhY2goKHBhcmVudDogeyBjaGlsZHJlbj86IGFueVtdIH0pID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDaGlsZHJlbldpdGhSZWZlcmVuY2VzKHBhcmVudCBhcyBQYXJlbnRPcHRpb24sIHNvcnRlZENoaWxkcmVuLCBjb21wYXJlRnVuY3Rpb24sIHdhcm5GdW5jdGlvbiksXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5xdWlja1NlbGVjdENvbmZpZykge1xuICAgICAgdGhpcy5xdWlja1NlbGVjdENvbmZpZy5pdGVtc1xuICAgICAgICAuZmlsdGVyKChwYXJlbnQpID0+ICdhbGwnIGluIHBhcmVudClcbiAgICAgICAgLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgIHBhcmVudC5jaGlsZHJlbiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHBhcmVudC5jaGlsZFR5cGVOYW1lID09PSB0eXBlTmFtZSkuZGF0YTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMucXVpY2tTZWxlY3RDb25maWcuaXRlbXNcbiAgICAgICAgLmZpbHRlcigocGFyZW50KSA9PiAhKCdhbGwnIGluIHBhcmVudCkpXG4gICAgICAgIC5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZFRhYiA9IHRoaXMudGFicy5maW5kKCh7IHR5cGVOYW1lIH0pID0+IHR5cGVOYW1lID09PSBwYXJlbnQuY2hpbGRUeXBlTmFtZSk7XG4gICAgICAgICAgY29uc3QgY29tcGFyZUZ1bmN0aW9uID0gdGhpcy5tYWtlQ29tcGFyZUZ1bmN0aW9uKGNoaWxkVGFiLnZhbHVlRmllbGQpO1xuICAgICAgICAgIGNvbnN0IHdhcm5GdW5jdGlvbiA9IHRoaXMubWFrZVdhcm5pbmdGdW5jdGlvbihwYXJlbnQubGFiZWwsIGNoaWxkVGFiLnR5cGVOYW1lLCBjaGlsZFRhYi52YWx1ZUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWRDaGlsZHJlbiA9IGNoaWxkVGFiLmRhdGEuc2xpY2UoKS5zb3J0KGNvbXBhcmVGdW5jdGlvbik7XG5cbiAgICAgICAgICB0aGlzLnJlcGxhY2VDaGlsZHJlbldpdGhSZWZlcmVuY2VzKHBhcmVudCBhcyBQYXJlbnRPcHRpb24sIHNvcnRlZENoaWxkcmVuLCBjb21wYXJlRnVuY3Rpb24sIHdhcm5GdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VDb21wYXJlRnVuY3Rpb248VD4oa2V5OiBzdHJpbmcpOiAoYTogVCB8IHsgW2tleTogc3RyaW5nXTogVCB9LCBiOiBUIHwgeyBba2V5OiBzdHJpbmddOiBUIH0pID0+IDEgfCAtMSB8IDAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoYTogVCB8IHsgW2tleTogc3RyaW5nXTogVCB9LCBiOiBUIHwgeyBba2V5OiBzdHJpbmddOiBUIH0pID0+IHtcbiAgICAgIGNvbnN0IGFWYWx1ZTogVCA9IChhICYmIGFba2V5XSkgfHwgYTtcbiAgICAgIGNvbnN0IGJWYWx1ZTogVCA9IChiICYmIGJba2V5XSkgfHwgYjtcblxuICAgICAgaWYgKGFWYWx1ZSA8IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGFWYWx1ZSA+IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYVZhbHVlID09PSBiVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXBsYWNlQ2hpbGRyZW5XaXRoUmVmZXJlbmNlcyhcbiAgICBwYXJlbnQ6IHsgY2hpbGRyZW46IGFueVtdIH0sXG4gICAgc29ydGVkRGF0YTogQ2hpbGRUYWJbJ2RhdGEnXSxcbiAgICBjb21wYXJlRnVuY3Rpb246IChhLCBiKSA9PiAxIHwgLTEgfCAwLFxuICAgIHdhcm5GdW5jdGlvbjogKGNoaWxkKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBwYXJlbnQuY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW5cbiAgICAgIC5tYXAoKGNoaWxkKSA9PiBiaW5hcnlTZWFyY2goY2hpbGQsIHNvcnRlZERhdGEsIGNvbXBhcmVGdW5jdGlvbikgfHwgd2FybkZ1bmN0aW9uKGNoaWxkKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIHNpbmNlIG1hcCBjYW4gcmV0dXJuIHVuZGVmaW5lZCwgcmVtb3ZlIHVuZGVmaW5lZCBlbGVtZW50c1xuICB9XG5cbiAgbWFrZVdhcm5pbmdGdW5jdGlvbihwYXJlbnRMYWJlbDogc3RyaW5nLCBjaGlsZExhYmVsOiBzdHJpbmcsIGNoaWxkVmFsdWVGaWVsZCk6IChjaGlsZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGNoaWxkW2NoaWxkVmFsdWVGaWVsZF0gfHwgY2hpbGQ7XG4gICAgICBjb25zb2xlLndhcm4oYE5vICR7Y2hpbGRMYWJlbH0gZm91bmQgd2l0aCB2YWx1ZSAke2NoaWxkVmFsdWV9IGZvciBwYXJlbnQgJHtwYXJlbnRMYWJlbH1gKTtcbiAgICB9O1xuICB9XG5cbiAgb25Ecm9wZG93blRvZ2dsZShldmVudCkge1xuICAgIHRoaXMuZmlsdGVyVGV4dC5uZXh0KCcnKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydEhlaWdodCA9IHRoaXMuZ2V0UGl4ZWxIZWlnaHQodGhpcy5zY3JvbGxhYmxlSW5zdGFuY2UuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0aGlzLmdldFBpeGVsSGVpZ2h0KHRoaXMuc2Nyb2xsYWJsZUluc3RhbmNlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ25vdm8tb3B0aW9uJykpO1xuICAgICAgLy8gRW1pdCBhIGZha2Ugc2Nyb2xsIGV2ZW50IHNvIHRoZSByZW5kZXJlZCBpdGVtcyB1cGRhdGVcbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUluc3RhbmNlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzY3JvbGwnKSk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZhdGVJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZDtcbiAgICAgIHRoaXMub25JdGVtVG9nZ2xlZChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmF0aW9uLmVtaXQoaXRlbSk7XG4gIH1cblxuICBvbkl0ZW1Ub2dnbGVkKGl0ZW06IE9wdGlvbikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICB0aGlzLnVwZGF0ZURlc2NlbmRhbnRzKGl0ZW0uc2VsZWN0ZWQsIGl0ZW0uY2hpbGRyZW4pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVBhcmVudHNBbmRRdWlja1NlbGVjdCgpO1xuICAgIHRoaXMudXBkYXRlQ2xlYXJBbGwoaXRlbS5zZWxlY3RlZCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGluaXRpYWxpemVEZXNjZW5kYW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgIGlmICgnY2hpbGRUeXBlTmFtZScgaW4gdGFiICYmIHRhYi5kYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgdGFiLmRhdGEuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmVudC5zZWxlY3RlZCAmJiBwYXJlbnQuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEZXNjZW5kYW50cyhwYXJlbnRJc1NlbGVjdGVkOiBib29sZWFuLCBjaGlsZHJlbjogT3B0aW9uW10pOiB2b2lkIHtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAocGFyZW50SXNTZWxlY3RlZCkge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBpdGVtLnNlbGVjdGVkO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEZXNjZW5kYW50cyhpdGVtLnNlbGVjdGVkLCBpdGVtLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNsZWFyQWxsKGl0ZW1XYXNKdXN0U2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2hvd0NsZWFyQWxsID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICB0aGlzLnNob3dDbGVhckFsbCA9IGl0ZW1XYXNKdXN0U2VsZWN0ZWRcbiAgICAgID8gdHJ1ZVxuICAgICAgOiB0aGlzLnRhYnMuc29tZSgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCh0YWIgYXMgUGFyZW50VGFiKS5jaGlsZFR5cGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiLmRhdGEuc29tZSgoeyBzZWxlY3RlZCwgaW5kZXRlcm1pbmF0ZSB9KSA9PiBzZWxlY3RlZCB8fCBpbmRldGVybWluYXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhYi5kYXRhLnNvbWUoKHsgc2VsZWN0ZWQgfSkgPT4gc2VsZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUGFyZW50c0FuZFF1aWNrU2VsZWN0KCk6IHZvaWQge1xuICAgIC8vIG11dGF0ZSBoZXJlIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgdGhlIG9iamVjdHMgaW4gZGlzcGxheVRhYnNcbiAgICB0aGlzLnRhYnNcbiAgICAgIC5maWx0ZXIoKHRhYikgPT4gJ2NoaWxkVHlwZU5hbWUnIGluIHRhYiAmJiAhIXRhYi5jaGlsZFR5cGVOYW1lKVxuICAgICAgLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gdGFiLmRhdGEuZmlsdGVyKCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBhbnlbXSB9KSA9PiBjaGlsZHJlbj8ubGVuZ3RoKTtcblxuICAgICAgICBwYXJlbnRzLmZvckVhY2goKHBhcmVudDogUGFyZW50T3B0aW9uKSA9PiB7XG4gICAgICAgICAgWydpbmRldGVybWluYXRlJywgJ3NlbGVjdGVkJ10uZm9yRWFjaCgoc2VsZWN0ZWRTdGF0ZU9wdGlvbikgPT4gZGVsZXRlIHBhcmVudFtzZWxlY3RlZFN0YXRlT3B0aW9uXSk7XG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdGhpcy5nZXRTZWxlY3RlZFN0YXRlKHBhcmVudC5jaGlsZHJlbik7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkU3RhdGUpIHtcbiAgICAgICAgICAgIHBhcmVudFtzZWxlY3RlZFN0YXRlXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucXVpY2tTZWxlY3RDb25maWcpIHtcbiAgICAgIHRoaXMucXVpY2tTZWxlY3RDb25maWcuaXRlbXMuZm9yRWFjaCgocXVpY2tTZWxlY3QpID0+IHtcbiAgICAgICAgZGVsZXRlIHF1aWNrU2VsZWN0LnNlbGVjdGVkO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdGhpcy5nZXRTZWxlY3RlZFN0YXRlKHF1aWNrU2VsZWN0LmNoaWxkcmVuIGFzIChPcHRpb24pW10pO1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdGF0ZSkge1xuICAgICAgICAgIHF1aWNrU2VsZWN0W3NlbGVjdGVkU3RhdGVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWRTdGF0ZSA9IChjaGlsZEFycmF5OiBPcHRpb25bXSk6ICdzZWxlY3RlZCcgfCAnaW5kZXRlcm1pbmF0ZScgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IG51bWJlck9mU2VsZWN0ZWRJdGVtcyA9IGNoaWxkQXJyYXkuZmlsdGVyKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKS5sZW5ndGg7XG4gICAgaWYgKCFudW1iZXJPZlNlbGVjdGVkSXRlbXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBudW1iZXJPZlNlbGVjdGVkSXRlbXMgPT09IGNoaWxkQXJyYXkubGVuZ3RoID8gJ3NlbGVjdGVkJyA6ICdpbmRldGVybWluYXRlJztcbiAgfTtcblxuICBnZXRTZWxlY3RlZFZhbHVlcygpOiBUYWJiZWRHcm91cFBpY2tlclRhYltdIHtcbiAgICByZXR1cm4gdGhpcy50YWJzLm1hcCgodGFiKSA9PiAoe1xuICAgICAgLi4udGFiLFxuICAgICAgZGF0YTogdGFiLmRhdGEuZmlsdGVyKCh7IHNlbGVjdGVkIH0pID0+IHNlbGVjdGVkKSxcbiAgICB9KSk7XG4gIH1cblxuICBlbWl0U2VsZWN0ZWRWYWx1ZXMoKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmdldFNlbGVjdGVkVmFsdWVzKCkpO1xuICB9XG5cbiAgdXBkYXRlQXBwbGllZFN0YXRlKCkge1xuICAgIHRoaXMuYXBwbGllZFN0YXRlID0gSGVscGVycy5kZWVwQ2xvbmUodGhpcy5kaXNwbGF5VGFicyk7XG4gIH1cblxuICBhcHBseSgpIHtcbiAgICB0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuICAgIHRoaXMuYXBwbHlDaGFuZ2UuZW1pdCh0aGlzLmdldFNlbGVjdGVkVmFsdWVzKCkpO1xuICAgIHRoaXMuZHJvcGRvd24uY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMucmV2ZXJ0U3RhdGUoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmRyb3Bkb3duLmNsb3NlUGFuZWwoKTtcbiAgfVxuXG4gIHJldmVydFN0YXRlKCkge1xuICAgIHRoaXMudGFicyA9IEhlbHBlcnMuZGVlcENsb25lKHRoaXMuYXBwbGllZFN0YXRlKTtcbiAgICB0aGlzLmxvYWRWYWx1ZXMoKTtcbiAgfVxuXG4gIGRlc2VsZWN0RXZlcnl0aGluZyhldmVudCkge1xuICAgIEhlbHBlcnMuc3dhbGxvd0V2ZW50KGV2ZW50KTtcbiAgICB0aGlzLnNob3dDbGVhckFsbCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnF1aWNrU2VsZWN0Q29uZmlnKSB7XG4gICAgICB0aGlzLnF1aWNrU2VsZWN0Q29uZmlnLml0ZW1zLmZvckVhY2goKHF1aWNrU2VsZWN0KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBxdWlja1NlbGVjdC5zZWxlY3RlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICBpZiAoKHRhYiBhcyBQYXJlbnRUYWIpLmNoaWxkVHlwZU5hbWUpIHtcbiAgICAgICAgdGFiLmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBpdGVtLnNlbGVjdGVkO1xuICAgICAgICAgIGRlbGV0ZSBpdGVtLmluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gZGVsZXRlIGNoaWxkLnNlbGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAodGFiIGFzIENoaWxkVGFiKS5kYXRhLmZvckVhY2goKGl0ZW0pID0+IGRlbGV0ZSBpdGVtLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFZhbHVlcygpO1xuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DbGVhckZpbHRlcihldmVudCkge1xuICAgIEhlbHBlcnMuc3dhbGxvd0V2ZW50KGV2ZW50KTtcbiAgICB0aGlzLmZpbHRlclRleHQubmV4dCgnJyk7XG4gIH1cblxuICBvbkZpbHRlcihldmVudDogeyB0YXJnZXQ6IHsgdmFsdWU6IHN0cmluZyB9IH0pIHtcbiAgICB0aGlzLmZpbHRlclRleHQubmV4dChldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyID0gKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgIHRoaXMuZGlzcGxheVRhYnMuZm9yRWFjaChcbiAgICAgIChkaXNwbGF5VGFiLCBpKSA9PlxuICAgICAgICAoZGlzcGxheVRhYi5kYXRhID0gdGhpcy50YWJzW2ldLmRhdGEuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgIGl0ZW1bZGlzcGxheVRhYi5sYWJlbEZpZWxkXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICBpdGVtW2Rpc3BsYXlUYWIudmFsdWVGaWVsZF0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICApKSxcbiAgICApO1xuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICB9O1xufVxuIiwiPG5vdm8tZHJvcGRvd24gKHRvZ2dsZWQpPVwib25Ecm9wZG93blRvZ2dsZSgkZXZlbnQpXCIgbXVsdGlwbGUgI2Ryb3Bkb3duPlxuICA8bm92by1idXR0b25cbiAgICBjbGFzcz1cInRhYmJlZC1ncm91cC1waWNrZXItYnV0dG9uXCJcbiAgICBbdGhlbWVdPVwiYnV0dG9uQ29uZmlnLnRoZW1lXCJcbiAgICBbc2lkZV09XCJidXR0b25Db25maWcuc2lkZVwiXG4gICAgW2ljb25dPVwiYnV0dG9uQ29uZmlnLmljb25cIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cInRhYmJlZC1ncm91cC1waWNrZXItYnV0dG9uLWxhYmVsXCI+e3sgYnV0dG9uQ29uZmlnLmxhYmVsIH19PC9kaXY+XG4gIDwvbm92by1idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLXNlYXJjaFwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInRhYmJlZC1ncm91cC1waWNrZXItc2VhcmNoXCIgKGtleWRvd24pPVwiZHJvcGRvd24uX2hhbmRsZUtleWRvd24oJGV2ZW50KVwiPlxuICAgIDxpbnB1dCAjaW5wdXRFbGVtZW50IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cImxhYmVsU2VydmljZS5zZWFyY2hcIiBbdmFsdWVdPVwiZmlsdGVyVGV4dCB8IGFzeW5jXCIgKGlucHV0KT1cIm9uRmlsdGVyKCRldmVudClcIiAvPlxuICAgIDxpIGNsYXNzPVwiYmhpLXNlYXJjaFwiICpuZ0lmPVwiIShmaWx0ZXJUZXh0IHwgYXN5bmMpXCI+PC9pPlxuICAgIDxpIGNsYXNzPVwiYmhpLXRpbWVzXCIgKm5nSWY9XCIoZmlsdGVyVGV4dCB8IGFzeW5jKVwiIChjbGljayk9XCJvbkNsZWFyRmlsdGVyKCRldmVudClcIiAoa2V5ZG93bi5zcGFjZSk9XCJvbkNsZWFyRmlsdGVyKCRldmVudClcIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidGFiYmVkLWdyb3VwLXBpY2tlci1jb2x1bW4tY29udGFpbmVyXCIgKGtleWRvd24pPVwiZHJvcGRvd24uX2hhbmRsZUtleWRvd24oJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLWNvbHVtbiBsZWZ0XCI+XG4gICAgICA8bm92by1uYXYgdGhlbWU9XCJ3aGl0ZVwiIGRpcmVjdGlvbj1cInZlcnRpY2FsXCI+XG4gICAgICAgIDxub3ZvLXRhYiAqbmdGb3I9XCJsZXQgdGFiIG9mIGRpc3BsYXlUYWJzXCIgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cInRhYi50eXBlTmFtZVwiXG4gICAgICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJjaGFuZ2VUYWIodGFiKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IHRhYi50eXBlTGFiZWwgfX0gKHt7IHRhYi5kYXRhLmxlbmd0aCB9fSk8L3NwYW4+PGkgY2xhc3M9XCJiaGktbmV4dFwiPjwvaT5cbiAgICAgICAgPC9ub3ZvLXRhYj5cbiAgICAgIDwvbm92by1uYXY+XG4gICAgICA8bm92by1idXR0b24gKm5nSWY9XCJzaG93Q2xlYXJBbGwgJiYgIXNob3dGb290ZXJcIiBjbGFzcz1cImNsZWFyLWFsbC1idXR0b25cIiB0aGVtZT1cImRpYWxvZ3VlXCIgaWNvbj1cInRpbWVzXCIgc2lkZT1cInJpZ2h0XCJcbiAgICAgICAgY29sb3I9XCJncmFwZWZydWl0XCIgKGNsaWNrKT1cImRlc2VsZWN0RXZlcnl0aGluZygkZXZlbnQpXCIgKGtleWRvd24uc3BhY2UpPVwiZGVzZWxlY3RFdmVyeXRoaW5nKCRldmVudClcIj57eyBsYWJlbFNlcnZpY2UuY2xlYXIgfX08L25vdm8tYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJiZWQtZ3JvdXAtcGlja2VyLWNvbHVtbiByaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLXNlbGVjdFwiICpuZ0lmPVwicXVpY2tTZWxlY3RDb25maWcgJiYgIShmaWx0ZXJUZXh0IHwgYXN5bmMpXCI+XG4gICAgICAgIDxub3ZvLW9wdGdyb3VwIGNsYXNzPVwicXVpY2stc2VsZWN0LWxpc3RcIiBbbGFiZWxdPVwicXVpY2tTZWxlY3RDb25maWcubGFiZWxcIj5cbiAgICAgICAgICA8bm92by1vcHRpb25cbiAgICAgICAgICAgIGNsYXNzPVwicXVpY2stc2VsZWN0LWl0ZW1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1aWNrU2VsZWN0IG9mIHF1aWNrU2VsZWN0Q29uZmlnLml0ZW1zXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJxdWlja1NlbGVjdC5sYWJlbFwiXG4gICAgICAgICAgICBbYWxsb3dTZWxlY3Rpb25dPVwic2VsZWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwicXVpY2tTZWxlY3Quc2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlSXRlbShxdWlja1NlbGVjdClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiYWN0aXZhdGVJdGVtKHF1aWNrU2VsZWN0KVwiXG4gICAgICAgICAgICBub3ZvSW5lcnQ+XG4gICAgICAgICAgICB7e3F1aWNrU2VsZWN0LmxhYmVsfX1cbiAgICAgICAgICA8L25vdm8tb3B0aW9uPlxuICAgICAgICA8L25vdm8tb3B0Z3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxub3ZvLW9wdGdyb3VwICpuZ0lmPVwiZGlzcGxheVRhYi5kYXRhLmxlbmd0aFwiPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgW2l0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG4gICAgICAgICAgW21heEJ1ZmZlclB4XT1cIm1heEJ1ZmZlclB4XCJcbiAgICAgICAgICBbbWluQnVmZmVyUHhdPVwibWluQnVmZmVyUHhcIlxuICAgICAgICAgICN0YWJiZWRHcm91cFBpY2tlclZpcnR1YWxTY3JvbGxWaWV3cG9ydD5cbiAgICAgICAgICA8bm92by1vcHRpb25cbiAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheVRhYi5kYXRhXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJpdGVtW2Rpc3BsYXlUYWIubGFiZWxGaWVsZF1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLXZhbHVlXT1cIml0ZW1bZGlzcGxheVRhYi52YWx1ZUZpZWxkXVwiXG4gICAgICAgICAgICBbYWxsb3dTZWxlY3Rpb25dPVwic2VsZWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImFjdGl2YXRlSXRlbShpdGVtKVwiXG4gICAgICAgICAgICBub3ZvSW5lcnQ+XG4gICAgICAgICAgICB7e2l0ZW1bZGlzcGxheVRhYi5sYWJlbEZpZWxkXX19XG4gICAgICAgICAgPC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICA8L25vdm8tb3B0Z3JvdXA+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFiYmVkLWdyb3VwLXBpY2tlci1lbXB0eS1pdGVtXCIgKm5nSWY9XCIhZGlzcGxheVRhYi5kYXRhLmxlbmd0aCAmJiAoZmlsdGVyVGV4dCB8IGFzeW5jKVwiPlxuICAgICAgICA8aSBjbGFzcz1cInt7IGRpc3BsYXlUYWIuaWNvbiB8fCAnYmhpLXNlYXJjaCcgfX1cIj48L2k+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pdGVtLW1haW4tbWVzc2FnZVwiPnt7IGxhYmVsU2VydmljZS50YWJiZWRHcm91cFBpY2tlckVtcHR5IH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pdGVtLXN1Yi1tZXNzYWdlXCI+e3sgbGFiZWxTZXJ2aWNlLnRhYmJlZEdyb3VwQ2xlYXJTdWdnZXN0aW9uKGRpc3BsYXlUYWIudHlwZUxhYmVsKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZvb3RlclwiICpuZ0lmPVwic2hvd0Zvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYXZlLWNhbmNlbC1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICA8bm92by1idXR0b25cbiAgICAgICAgY2xhc3M9XCJjbGVhci1hbGwtYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJzaG93Q2xlYXJBbGxcIlxuICAgICAgICB0aGVtZT1cImRpYWxvZ3VlXCJcbiAgICAgICAgaWNvbj1cInRpbWVzXCJcbiAgICAgICAgc2lkZT1cInJpZ2h0XCJcbiAgICAgICAgY29sb3I9XCJncmFwZWZydWl0XCJcbiAgICAgICAgKGNsaWNrKT1cImRlc2VsZWN0RXZlcnl0aGluZygkZXZlbnQpXCI+e3sgbGFiZWxTZXJ2aWNlLmNsZWFyIH19PC9ub3ZvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2F2ZS1jYW5jZWwtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgPG5vdm8tYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgIG1hcmdpblJpZ2h0PVwiMXJlbVwiXG4gICAgICAgIHRoZW1lPVwiZGlhbG9ndWVcIlxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj57eyBsYWJlbFNlcnZpY2UuY2FuY2VsIH19PC9ub3ZvLWJ1dHRvbj5cbiAgICAgIDxub3ZvLWJ1dHRvblxuICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgdGhlbWU9XCJwcmltYXJ5XCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5KClcIj57eyBsYWJlbFNlcnZpY2UuYXBwbHkgfX08L25vdm8tYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbm92by1kcm9wZG93bj4iXX0=
@@ -177,6 +177,8 @@ class NovoTabbedGroupPickerElement {
177
177
  if (event) {
178
178
  this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);
179
179
  this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));
180
+ // Emit a fake scroll event so the rendered items update
181
+ this.scrollableInstance.getElementRef().nativeElement.dispatchEvent(new Event('scroll'));
180
182
  }
181
183
  }
182
184
  activateItem(item) {
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-tabbed-group-picker.mjs","sources":["../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.html","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.module.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/novo-elements-elements-tabbed-group-picker.ts"],"sourcesContent":["import { CdkScrollable } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n viewChild,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { binarySearch, BooleanInput, Helpers } from 'novo-elements/utils';\nimport { NOVO_OPTION_PARENT_COMPONENT } from 'novo-elements/elements/common';\nimport { NovoDropdownElement } from 'novo-elements/elements/dropdown';\n\nexport type TabbedGroupPickerTab = {\n typeName: string;\n typeLabel: string;\n valueField: string;\n labelField: string;\n scrollOffset?: number;\n icon?: string;\n} & (ParentTab | ChildTab);\n\nexport type ParentTab = {\n childTypeName: string;\n data: Array<ParentOption>;\n};\n\ntype BaseOption = {\n selected?: boolean;\n indeterminate?: boolean;\n} & { [key: string]: any };\n\ntype ParentOption = BaseOption & {\n children: Option[];\n};\n\ntype Option = BaseOption | ParentOption;\n\nexport type ChildTab = {\n data: Array<{ selected?: boolean } & { [key: string]: any }>;\n};\n\nexport type TabbedGroupPickerQuickSelect = {\n label: string;\n selected?: boolean;\n childTypeName?: string;\n children?: (({ selected?: boolean } & { [key: string]: any }) | number)[];\n all?: boolean;\n};\n\nexport type QuickSelectConfig = { label: string; items: TabbedGroupPickerQuickSelect[] };\n\nexport type TabbedGroupPickerButtonConfig = {\n theme: string;\n side: string;\n icon: string;\n label: string;\n};\n\n@Component({\n selector: 'novo-tabbed-group-picker',\n templateUrl: './TabbedGroupPicker.html',\n styleUrls: ['./TabbedGroupPicker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoTabbedGroupPickerElement }],\n})\nexport class NovoTabbedGroupPickerElement implements OnDestroy, OnInit {\n @ViewChild('tabbedGroupPickerVirtualScrollViewport')\n private scrollableInstance: CdkScrollable;\n @ViewChild('inputElement')\n private inputElement: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown')\n public dropdown: NovoDropdownElement;\n\n multiple = true;\n\n @Input() buttonConfig: TabbedGroupPickerButtonConfig;\n @Input() tabs: TabbedGroupPickerTab[];\n @Input() quickSelectConfig: QuickSelectConfig;\n @Input() showFooter = false;\n\n // In activation mode, no checkboxes are displayed, and only the selectionActivated event occurs.\n @BooleanInput()\n @Input() selectionEnabled = true;\n\n @Output() activation = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<TabbedGroupPickerTab[]>();\n @Output() applyChange: EventEmitter<any> = new EventEmitter<any>();\n\n displayTabs: TabbedGroupPickerTab[];\n displayTabIndex: number = 0;\n\n filterText: BehaviorSubject<string> = new BehaviorSubject('');\n filterTextSubscription: Subscription;\n\n loading = true;\n showClearAll: boolean = false;\n\n appliedState: TabbedGroupPickerTab[];\n\n // Initial height based on 13 px font rendered in chrome. Actual height retrieved onDropdownToggled.\n scrollViewportHeight: number = 351;\n virtualScrollItemSize: number = 39;\n\n constructor(public labelService: NovoLabelService, private ref: ChangeDetectorRef) {}\n\n get displayTab(): TabbedGroupPickerTab {\n return this.displayTabs[this.displayTabIndex];\n }\n set displayTab(tab: TabbedGroupPickerTab) {\n this.displayTabIndex = this.tabs.map(({ typeName }) => typeName).indexOf(tab.typeName);\n }\n\n get minBufferPx() {\n return this.scrollViewportHeight; // render at least 2x the number of items visible (viewport + min buffer)\n }\n\n get maxBufferPx() {\n return 2 * this.scrollViewportHeight; // render at most 3x the number of items visible (viewport + max buffer)\n }\n\n ngOnInit(): void {\n this.loadValues();\n this.loading = false;\n this.filterTextSubscription = this.filterText.pipe(debounceTime(300)).subscribe({\n next: this.filter,\n });\n }\n\n ngOnDestroy(): void {\n if (this.filterTextSubscription) {\n this.filterTextSubscription.unsubscribe();\n }\n }\n\n loadValues() {\n this.setupDisplayData();\n this.createChildrenReferences();\n this.initializeDescendantSelection();\n this.updateParentsAndQuickSelect();\n this.updateClearAll();\n }\n\n changeTab(tab: TabbedGroupPickerTab) {\n this.displayTab = tab;\n if (this.scrollableInstance) {\n this.scrollableInstance.scrollTo({ behavior: 'auto', top: 0 });\n }\n }\n\n getPixelHeight(element: HTMLElement) {\n return Number(getComputedStyle(element, '').height.match(/(\\d+(\\.\\d+)?)px$/)[1]);\n }\n\n setupDisplayData(): void {\n // shallow copy here so that reassigning displayTabs[i].data doesn't mutate tabs[i].data\n // but both data values point to the same items\n this.displayTabs = this.tabs.map((tab) => ({ ...tab }));\n this.displayTab = this.tabs[0];\n this.updateAppliedState();\n }\n\n // Replace each parent's child object with a reference to the child to avoid\n // a child lookup for selected status; linking references allows M x N\n // time complexity instead of M x N^2\n createChildrenReferences(): void {\n this.tabs.forEach((tab) => {\n // would rather filter but TypeScript still wants a type narrowing here\n if ('childTypeName' in tab) {\n const childTab = this.tabs.find(({ typeName }) => typeName === tab.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(tab.typeName, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n tab.data\n .filter(({ children }) => children?.length)\n .forEach((parent: { children?: any[] }) =>\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction),\n );\n }\n });\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items\n .filter((parent) => 'all' in parent)\n .forEach((parent) => {\n parent.children = this.tabs.find(({ typeName }) => parent.childTypeName === typeName).data;\n });\n\n this.quickSelectConfig.items\n .filter((parent) => !('all' in parent))\n .forEach((parent) => {\n const childTab = this.tabs.find(({ typeName }) => typeName === parent.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(parent.label, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction);\n });\n }\n }\n\n makeCompareFunction<T>(key: string): (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => 1 | -1 | 0 | undefined {\n return (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => {\n const aValue: T = (a && a[key]) || a;\n const bValue: T = (b && b[key]) || b;\n\n if (aValue < bValue) {\n return -1;\n } else if (aValue > bValue) {\n return 1;\n } else if (aValue === bValue) {\n return 0;\n } else {\n return undefined;\n }\n };\n }\n\n replaceChildrenWithReferences(\n parent: { children: any[] },\n sortedData: ChildTab['data'],\n compareFunction: (a, b) => 1 | -1 | 0,\n warnFunction: (child) => void,\n ): void {\n parent.children = parent.children\n .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))\n .filter(Boolean); // since map can return undefined, remove undefined elements\n }\n\n makeWarningFunction(parentLabel: string, childLabel: string, childValueField): (child) => void {\n return (child) => {\n const childValue = child[childValueField] || child;\n console.warn(`No ${childLabel} found with value ${childValue} for parent ${parentLabel}`);\n };\n }\n\n onDropdownToggle(event) {\n this.filterText.next('');\n this.inputElement.nativeElement?.focus();\n if (event) {\n this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);\n this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));\n }\n }\n\n activateItem(item: any): void {\n if (this.selectionEnabled) {\n item.selected = !item.selected;\n this.onItemToggled(item);\n }\n this.activation.emit(item);\n }\n\n onItemToggled(item: Option) {\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n this.updateParentsAndQuickSelect();\n this.updateClearAll(item.selected);\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n initializeDescendantSelection() {\n this.tabs.forEach((tab) => {\n if ('childTypeName' in tab && tab.data?.length) {\n tab.data.forEach((parent) => {\n if (parent.selected && parent.children?.length) {\n parent.children.forEach((child) => {\n child.selected = true;\n });\n }\n });\n }\n });\n }\n\n updateDescendants(parentIsSelected: boolean, children: Option[]): void {\n children.forEach((item) => {\n if (parentIsSelected) {\n item.selected = true;\n } else {\n delete item.selected;\n }\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n });\n }\n\n updateClearAll(itemWasJustSelected?: boolean) {\n if (!this.selectionEnabled) {\n this.showClearAll = false;\n } else {\n this.showClearAll = itemWasJustSelected\n ? true\n : this.tabs.some((tab) => {\n if ((tab as ParentTab).childTypeName) {\n return tab.data.some(({ selected, indeterminate }) => selected || indeterminate);\n } else {\n return tab.data.some(({ selected }) => selected);\n }\n });\n }\n }\n\n updateParentsAndQuickSelect(): void {\n // mutate here to avoid dereferencing the objects in displayTabs\n this.tabs\n .filter((tab) => 'childTypeName' in tab && !!tab.childTypeName)\n .forEach((tab) => {\n const parents = tab.data.filter(({ children }: { children?: any[] }) => children?.length);\n\n parents.forEach((parent: ParentOption) => {\n ['indeterminate', 'selected'].forEach((selectedStateOption) => delete parent[selectedStateOption]);\n\n const selectedState = this.getSelectedState(parent.children);\n if (selectedState) {\n parent[selectedState] = true;\n }\n });\n });\n\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n const selectedState = this.getSelectedState(quickSelect.children as (Option)[]);\n if (selectedState) {\n quickSelect[selectedState] = true;\n }\n });\n }\n }\n\n getSelectedState = (childArray: Option[]): 'selected' | 'indeterminate' | undefined => {\n const numberOfSelectedItems = childArray.filter(({ selected }) => selected).length;\n if (!numberOfSelectedItems) {\n return undefined;\n }\n return numberOfSelectedItems === childArray.length ? 'selected' : 'indeterminate';\n };\n\n getSelectedValues(): TabbedGroupPickerTab[] {\n return this.tabs.map((tab) => ({\n ...tab,\n data: tab.data.filter(({ selected }) => selected),\n }));\n }\n\n emitSelectedValues() {\n this.selectionChange.emit(this.getSelectedValues());\n }\n\n updateAppliedState() {\n this.appliedState = Helpers.deepClone(this.displayTabs);\n }\n\n apply() {\n this.updateAppliedState();\n this.applyChange.emit(this.getSelectedValues());\n this.dropdown.closePanel();\n }\n\n cancel() {\n this.revertState();\n this.ref.markForCheck();\n this.dropdown.closePanel();\n }\n\n revertState() {\n this.tabs = Helpers.deepClone(this.appliedState);\n this.loadValues();\n }\n\n deselectEverything(event) {\n Helpers.swallowEvent(event);\n this.showClearAll = false;\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n });\n }\n this.tabs.forEach((tab) => {\n if ((tab as ParentTab).childTypeName) {\n tab.data.forEach((item) => {\n delete item.selected;\n delete item.indeterminate;\n item.children.forEach((child) => delete child.selected);\n });\n } else {\n (tab as ChildTab).data.forEach((item) => delete item.selected);\n }\n });\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n onClearFilter(event) {\n Helpers.swallowEvent(event);\n this.filterText.next('');\n }\n\n onFilter(event: { target: { value: string } }) {\n this.filterText.next(event.target.value);\n }\n\n filter = (searchTerm: string) => {\n this.displayTabs.forEach(\n (displayTab, i) =>\n (displayTab.data = this.tabs[i].data.filter((item) =>\n item[displayTab.labelField].toLowerCase().includes(searchTerm.toLowerCase()) ||\n item[displayTab.valueField]?.toString().toLowerCase().includes(searchTerm.toLowerCase()),\n )),\n );\n this.ref.markForCheck();\n };\n}\n","<novo-dropdown (toggled)=\"onDropdownToggle($event)\" multiple #dropdown>\n <novo-button\n class=\"tabbed-group-picker-button\"\n [theme]=\"buttonConfig.theme\"\n [side]=\"buttonConfig.side\"\n [icon]=\"buttonConfig.icon\"\n [loading]=\"loading\">\n <ng-content></ng-content>\n <div class=\"tabbed-group-picker-button-label\">{{ buttonConfig.label }}</div>\n </novo-button>\n <div class=\"tabbed-group-picker-search\" data-automation-id=\"tabbed-group-picker-search\" (keydown)=\"dropdown._handleKeydown($event)\">\n <input #inputElement type=\"text\" [placeholder]=\"labelService.search\" [value]=\"filterText | async\" (input)=\"onFilter($event)\" />\n <i class=\"bhi-search\" *ngIf=\"!(filterText | async)\"></i>\n <i class=\"bhi-times\" *ngIf=\"(filterText | async)\" (click)=\"onClearFilter($event)\" (keydown.space)=\"onClearFilter($event)\"></i>\n </div>\n <div class=\"tabbed-group-picker-column-container\" (keydown)=\"dropdown._handleKeydown($event)\">\n <div class=\"tabbed-group-picker-column left\">\n <novo-nav theme=\"white\" direction=\"vertical\">\n <novo-tab *ngFor=\"let tab of displayTabs\" [attr.data-automation-id]=\"tab.typeName\"\n (activeChange)=\"changeTab(tab)\">\n <span>{{ tab.typeLabel }} ({{ tab.data.length }})</span><i class=\"bhi-next\"></i>\n </novo-tab>\n </novo-nav>\n <novo-button *ngIf=\"showClearAll && !showFooter\" class=\"clear-all-button\" theme=\"dialogue\" icon=\"times\" side=\"right\"\n color=\"grapefruit\" (click)=\"deselectEverything($event)\" (keydown.space)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"tabbed-group-picker-column right\">\n <div class=\"quick-select\" *ngIf=\"quickSelectConfig && !(filterText | async)\">\n <novo-optgroup class=\"quick-select-list\" [label]=\"quickSelectConfig.label\">\n <novo-option\n class=\"quick-select-item\"\n *ngFor=\"let quickSelect of quickSelectConfig.items\"\n [attr.data-automation-id]=\"quickSelect.label\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"quickSelect.selected\"\n (click)=\"activateItem(quickSelect)\"\n (keydown.space)=\"activateItem(quickSelect)\"\n novoInert>\n {{quickSelect.label}}\n </novo-option>\n </novo-optgroup>\n </div>\n <novo-optgroup *ngIf=\"displayTab.data.length\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [maxBufferPx]=\"maxBufferPx\"\n [minBufferPx]=\"minBufferPx\"\n #tabbedGroupPickerVirtualScrollViewport>\n <novo-option\n *cdkVirtualFor=\"let item of displayTab.data\"\n [attr.data-automation-id]=\"item[displayTab.labelField]\"\n [attr.data-automation-value]=\"item[displayTab.valueField]\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"item.selected\"\n (click)=\"activateItem(item)\"\n (keydown.space)=\"activateItem(item)\"\n novoInert>\n {{item[displayTab.labelField]}}\n </novo-option>\n </cdk-virtual-scroll-viewport>\n </novo-optgroup>\n <div class=\"tabbed-group-picker-empty-item\" *ngIf=\"!displayTab.data.length && (filterText | async)\">\n <i class=\"{{ displayTab.icon || 'bhi-search' }}\"></i>\n <div class=\"empty-item-main-message\">{{ labelService.tabbedGroupPickerEmpty }}</div>\n <div class=\"empty-item-sub-message\">{{ labelService.tabbedGroupClearSuggestion(displayTab.typeLabel) }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"footer\" *ngIf=\"showFooter\">\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"clear-all-button\"\n *ngIf=\"showClearAll\"\n theme=\"dialogue\"\n icon=\"times\"\n side=\"right\"\n color=\"grapefruit\"\n (click)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"cancel-button\"\n marginRight=\"1rem\"\n theme=\"dialogue\"\n (click)=\"cancel()\">{{ labelService.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n (click)=\"apply()\">{{ labelService.apply }}</novo-button>\n </div>\n </div>\n</novo-dropdown>","// NG2\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoOptionModule } from 'novo-elements/elements/common';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFormExtrasModule } from 'novo-elements/elements/form';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { NovoTabbedGroupPickerElement } from './TabbedGroupPicker';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n NovoTabModule,\n NovoListModule,\n NovoFormExtrasModule,\n NovoButtonModule,\n NovoDropdownModule,\n NovoOptionModule,\n NovoCheckboxModule,\n ],\n providers: [NovoLabelService],\n declarations: [NovoTabbedGroupPickerElement],\n exports: [NovoTabbedGroupPickerElement],\n})\nexport class NovoTabbedGroupPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-tabbed-group-picker.mjs","sources":["../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.html","../../../projects/novo-elements/src/elements/tabbed-group-picker/TabbedGroupPicker.module.ts","../../../projects/novo-elements/src/elements/tabbed-group-picker/novo-elements-elements-tabbed-group-picker.ts"],"sourcesContent":["import { CdkScrollable } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n viewChild,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { binarySearch, BooleanInput, Helpers } from 'novo-elements/utils';\nimport { NOVO_OPTION_PARENT_COMPONENT } from 'novo-elements/elements/common';\nimport { NovoDropdownElement } from 'novo-elements/elements/dropdown';\n\nexport type TabbedGroupPickerTab = {\n typeName: string;\n typeLabel: string;\n valueField: string;\n labelField: string;\n scrollOffset?: number;\n icon?: string;\n} & (ParentTab | ChildTab);\n\nexport type ParentTab = {\n childTypeName: string;\n data: Array<ParentOption>;\n};\n\ntype BaseOption = {\n selected?: boolean;\n indeterminate?: boolean;\n} & { [key: string]: any };\n\ntype ParentOption = BaseOption & {\n children: Option[];\n};\n\ntype Option = BaseOption | ParentOption;\n\nexport type ChildTab = {\n data: Array<{ selected?: boolean } & { [key: string]: any }>;\n};\n\nexport type TabbedGroupPickerQuickSelect = {\n label: string;\n selected?: boolean;\n childTypeName?: string;\n children?: (({ selected?: boolean } & { [key: string]: any }) | number)[];\n all?: boolean;\n};\n\nexport type QuickSelectConfig = { label: string; items: TabbedGroupPickerQuickSelect[] };\n\nexport type TabbedGroupPickerButtonConfig = {\n theme: string;\n side: string;\n icon: string;\n label: string;\n};\n\n@Component({\n selector: 'novo-tabbed-group-picker',\n templateUrl: './TabbedGroupPicker.html',\n styleUrls: ['./TabbedGroupPicker.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoTabbedGroupPickerElement }],\n})\nexport class NovoTabbedGroupPickerElement implements OnDestroy, OnInit {\n @ViewChild('tabbedGroupPickerVirtualScrollViewport')\n private scrollableInstance: CdkScrollable;\n @ViewChild('inputElement')\n private inputElement: ElementRef<HTMLInputElement>;\n @ViewChild('dropdown')\n public dropdown: NovoDropdownElement;\n\n multiple = true;\n\n @Input() buttonConfig: TabbedGroupPickerButtonConfig;\n @Input() tabs: TabbedGroupPickerTab[];\n @Input() quickSelectConfig: QuickSelectConfig;\n @Input() showFooter = false;\n\n // In activation mode, no checkboxes are displayed, and only the selectionActivated event occurs.\n @BooleanInput()\n @Input() selectionEnabled = true;\n\n @Output() activation = new EventEmitter<any>();\n @Output() selectionChange = new EventEmitter<TabbedGroupPickerTab[]>();\n @Output() applyChange: EventEmitter<any> = new EventEmitter<any>();\n\n displayTabs: TabbedGroupPickerTab[];\n displayTabIndex: number = 0;\n\n filterText: BehaviorSubject<string> = new BehaviorSubject('');\n filterTextSubscription: Subscription;\n\n loading = true;\n showClearAll: boolean = false;\n\n appliedState: TabbedGroupPickerTab[];\n\n // Initial height based on 13 px font rendered in chrome. Actual height retrieved onDropdownToggled.\n scrollViewportHeight: number = 351;\n virtualScrollItemSize: number = 39;\n\n constructor(public labelService: NovoLabelService, private ref: ChangeDetectorRef) {}\n\n get displayTab(): TabbedGroupPickerTab {\n return this.displayTabs[this.displayTabIndex];\n }\n set displayTab(tab: TabbedGroupPickerTab) {\n this.displayTabIndex = this.tabs.map(({ typeName }) => typeName).indexOf(tab.typeName);\n }\n\n get minBufferPx() {\n return this.scrollViewportHeight; // render at least 2x the number of items visible (viewport + min buffer)\n }\n\n get maxBufferPx() {\n return 2 * this.scrollViewportHeight; // render at most 3x the number of items visible (viewport + max buffer)\n }\n\n ngOnInit(): void {\n this.loadValues();\n this.loading = false;\n this.filterTextSubscription = this.filterText.pipe(debounceTime(300)).subscribe({\n next: this.filter,\n });\n }\n\n ngOnDestroy(): void {\n if (this.filterTextSubscription) {\n this.filterTextSubscription.unsubscribe();\n }\n }\n\n loadValues() {\n this.setupDisplayData();\n this.createChildrenReferences();\n this.initializeDescendantSelection();\n this.updateParentsAndQuickSelect();\n this.updateClearAll();\n }\n\n changeTab(tab: TabbedGroupPickerTab) {\n this.displayTab = tab;\n if (this.scrollableInstance) {\n this.scrollableInstance.scrollTo({ behavior: 'auto', top: 0 });\n }\n }\n\n getPixelHeight(element: HTMLElement) {\n return Number(getComputedStyle(element, '').height.match(/(\\d+(\\.\\d+)?)px$/)[1]);\n }\n\n setupDisplayData(): void {\n // shallow copy here so that reassigning displayTabs[i].data doesn't mutate tabs[i].data\n // but both data values point to the same items\n this.displayTabs = this.tabs.map((tab) => ({ ...tab }));\n this.displayTab = this.tabs[0];\n this.updateAppliedState();\n }\n\n // Replace each parent's child object with a reference to the child to avoid\n // a child lookup for selected status; linking references allows M x N\n // time complexity instead of M x N^2\n createChildrenReferences(): void {\n this.tabs.forEach((tab) => {\n // would rather filter but TypeScript still wants a type narrowing here\n if ('childTypeName' in tab) {\n const childTab = this.tabs.find(({ typeName }) => typeName === tab.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(tab.typeName, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n tab.data\n .filter(({ children }) => children?.length)\n .forEach((parent: { children?: any[] }) =>\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction),\n );\n }\n });\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items\n .filter((parent) => 'all' in parent)\n .forEach((parent) => {\n parent.children = this.tabs.find(({ typeName }) => parent.childTypeName === typeName).data;\n });\n\n this.quickSelectConfig.items\n .filter((parent) => !('all' in parent))\n .forEach((parent) => {\n const childTab = this.tabs.find(({ typeName }) => typeName === parent.childTypeName);\n const compareFunction = this.makeCompareFunction(childTab.valueField);\n const warnFunction = this.makeWarningFunction(parent.label, childTab.typeName, childTab.valueField);\n const sortedChildren = childTab.data.slice().sort(compareFunction);\n\n this.replaceChildrenWithReferences(parent as ParentOption, sortedChildren, compareFunction, warnFunction);\n });\n }\n }\n\n makeCompareFunction<T>(key: string): (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => 1 | -1 | 0 | undefined {\n return (a: T | { [key: string]: T }, b: T | { [key: string]: T }) => {\n const aValue: T = (a && a[key]) || a;\n const bValue: T = (b && b[key]) || b;\n\n if (aValue < bValue) {\n return -1;\n } else if (aValue > bValue) {\n return 1;\n } else if (aValue === bValue) {\n return 0;\n } else {\n return undefined;\n }\n };\n }\n\n replaceChildrenWithReferences(\n parent: { children: any[] },\n sortedData: ChildTab['data'],\n compareFunction: (a, b) => 1 | -1 | 0,\n warnFunction: (child) => void,\n ): void {\n parent.children = parent.children\n .map((child) => binarySearch(child, sortedData, compareFunction) || warnFunction(child))\n .filter(Boolean); // since map can return undefined, remove undefined elements\n }\n\n makeWarningFunction(parentLabel: string, childLabel: string, childValueField): (child) => void {\n return (child) => {\n const childValue = child[childValueField] || child;\n console.warn(`No ${childLabel} found with value ${childValue} for parent ${parentLabel}`);\n };\n }\n\n onDropdownToggle(event) {\n this.filterText.next('');\n this.inputElement.nativeElement?.focus();\n if (event) {\n this.scrollViewportHeight = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement);\n this.virtualScrollItemSize = this.getPixelHeight(this.scrollableInstance.getElementRef().nativeElement.querySelector('novo-option'));\n // Emit a fake scroll event so the rendered items update\n this.scrollableInstance.getElementRef().nativeElement.dispatchEvent(new Event('scroll'));\n }\n }\n\n activateItem(item: any): void {\n if (this.selectionEnabled) {\n item.selected = !item.selected;\n this.onItemToggled(item);\n }\n this.activation.emit(item);\n }\n\n onItemToggled(item: Option) {\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n this.updateParentsAndQuickSelect();\n this.updateClearAll(item.selected);\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n initializeDescendantSelection() {\n this.tabs.forEach((tab) => {\n if ('childTypeName' in tab && tab.data?.length) {\n tab.data.forEach((parent) => {\n if (parent.selected && parent.children?.length) {\n parent.children.forEach((child) => {\n child.selected = true;\n });\n }\n });\n }\n });\n }\n\n updateDescendants(parentIsSelected: boolean, children: Option[]): void {\n children.forEach((item) => {\n if (parentIsSelected) {\n item.selected = true;\n } else {\n delete item.selected;\n }\n if (Array.isArray(item.children)) {\n this.updateDescendants(item.selected, item.children);\n }\n });\n }\n\n updateClearAll(itemWasJustSelected?: boolean) {\n if (!this.selectionEnabled) {\n this.showClearAll = false;\n } else {\n this.showClearAll = itemWasJustSelected\n ? true\n : this.tabs.some((tab) => {\n if ((tab as ParentTab).childTypeName) {\n return tab.data.some(({ selected, indeterminate }) => selected || indeterminate);\n } else {\n return tab.data.some(({ selected }) => selected);\n }\n });\n }\n }\n\n updateParentsAndQuickSelect(): void {\n // mutate here to avoid dereferencing the objects in displayTabs\n this.tabs\n .filter((tab) => 'childTypeName' in tab && !!tab.childTypeName)\n .forEach((tab) => {\n const parents = tab.data.filter(({ children }: { children?: any[] }) => children?.length);\n\n parents.forEach((parent: ParentOption) => {\n ['indeterminate', 'selected'].forEach((selectedStateOption) => delete parent[selectedStateOption]);\n\n const selectedState = this.getSelectedState(parent.children);\n if (selectedState) {\n parent[selectedState] = true;\n }\n });\n });\n\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n const selectedState = this.getSelectedState(quickSelect.children as (Option)[]);\n if (selectedState) {\n quickSelect[selectedState] = true;\n }\n });\n }\n }\n\n getSelectedState = (childArray: Option[]): 'selected' | 'indeterminate' | undefined => {\n const numberOfSelectedItems = childArray.filter(({ selected }) => selected).length;\n if (!numberOfSelectedItems) {\n return undefined;\n }\n return numberOfSelectedItems === childArray.length ? 'selected' : 'indeterminate';\n };\n\n getSelectedValues(): TabbedGroupPickerTab[] {\n return this.tabs.map((tab) => ({\n ...tab,\n data: tab.data.filter(({ selected }) => selected),\n }));\n }\n\n emitSelectedValues() {\n this.selectionChange.emit(this.getSelectedValues());\n }\n\n updateAppliedState() {\n this.appliedState = Helpers.deepClone(this.displayTabs);\n }\n\n apply() {\n this.updateAppliedState();\n this.applyChange.emit(this.getSelectedValues());\n this.dropdown.closePanel();\n }\n\n cancel() {\n this.revertState();\n this.ref.markForCheck();\n this.dropdown.closePanel();\n }\n\n revertState() {\n this.tabs = Helpers.deepClone(this.appliedState);\n this.loadValues();\n }\n\n deselectEverything(event) {\n Helpers.swallowEvent(event);\n this.showClearAll = false;\n if (this.quickSelectConfig) {\n this.quickSelectConfig.items.forEach((quickSelect) => {\n delete quickSelect.selected;\n });\n }\n this.tabs.forEach((tab) => {\n if ((tab as ParentTab).childTypeName) {\n tab.data.forEach((item) => {\n delete item.selected;\n delete item.indeterminate;\n item.children.forEach((child) => delete child.selected);\n });\n } else {\n (tab as ChildTab).data.forEach((item) => delete item.selected);\n }\n });\n this.emitSelectedValues();\n this.ref.markForCheck();\n }\n\n onClearFilter(event) {\n Helpers.swallowEvent(event);\n this.filterText.next('');\n }\n\n onFilter(event: { target: { value: string } }) {\n this.filterText.next(event.target.value);\n }\n\n filter = (searchTerm: string) => {\n this.displayTabs.forEach(\n (displayTab, i) =>\n (displayTab.data = this.tabs[i].data.filter((item) =>\n item[displayTab.labelField].toLowerCase().includes(searchTerm.toLowerCase()) ||\n item[displayTab.valueField]?.toString().toLowerCase().includes(searchTerm.toLowerCase()),\n )),\n );\n this.ref.markForCheck();\n };\n}\n","<novo-dropdown (toggled)=\"onDropdownToggle($event)\" multiple #dropdown>\n <novo-button\n class=\"tabbed-group-picker-button\"\n [theme]=\"buttonConfig.theme\"\n [side]=\"buttonConfig.side\"\n [icon]=\"buttonConfig.icon\"\n [loading]=\"loading\">\n <ng-content></ng-content>\n <div class=\"tabbed-group-picker-button-label\">{{ buttonConfig.label }}</div>\n </novo-button>\n <div class=\"tabbed-group-picker-search\" data-automation-id=\"tabbed-group-picker-search\" (keydown)=\"dropdown._handleKeydown($event)\">\n <input #inputElement type=\"text\" [placeholder]=\"labelService.search\" [value]=\"filterText | async\" (input)=\"onFilter($event)\" />\n <i class=\"bhi-search\" *ngIf=\"!(filterText | async)\"></i>\n <i class=\"bhi-times\" *ngIf=\"(filterText | async)\" (click)=\"onClearFilter($event)\" (keydown.space)=\"onClearFilter($event)\"></i>\n </div>\n <div class=\"tabbed-group-picker-column-container\" (keydown)=\"dropdown._handleKeydown($event)\">\n <div class=\"tabbed-group-picker-column left\">\n <novo-nav theme=\"white\" direction=\"vertical\">\n <novo-tab *ngFor=\"let tab of displayTabs\" [attr.data-automation-id]=\"tab.typeName\"\n (activeChange)=\"changeTab(tab)\">\n <span>{{ tab.typeLabel }} ({{ tab.data.length }})</span><i class=\"bhi-next\"></i>\n </novo-tab>\n </novo-nav>\n <novo-button *ngIf=\"showClearAll && !showFooter\" class=\"clear-all-button\" theme=\"dialogue\" icon=\"times\" side=\"right\"\n color=\"grapefruit\" (click)=\"deselectEverything($event)\" (keydown.space)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"tabbed-group-picker-column right\">\n <div class=\"quick-select\" *ngIf=\"quickSelectConfig && !(filterText | async)\">\n <novo-optgroup class=\"quick-select-list\" [label]=\"quickSelectConfig.label\">\n <novo-option\n class=\"quick-select-item\"\n *ngFor=\"let quickSelect of quickSelectConfig.items\"\n [attr.data-automation-id]=\"quickSelect.label\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"quickSelect.selected\"\n (click)=\"activateItem(quickSelect)\"\n (keydown.space)=\"activateItem(quickSelect)\"\n novoInert>\n {{quickSelect.label}}\n </novo-option>\n </novo-optgroup>\n </div>\n <novo-optgroup *ngIf=\"displayTab.data.length\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize\"\n [maxBufferPx]=\"maxBufferPx\"\n [minBufferPx]=\"minBufferPx\"\n #tabbedGroupPickerVirtualScrollViewport>\n <novo-option\n *cdkVirtualFor=\"let item of displayTab.data\"\n [attr.data-automation-id]=\"item[displayTab.labelField]\"\n [attr.data-automation-value]=\"item[displayTab.valueField]\"\n [allowSelection]=\"selectionEnabled\"\n [selected]=\"item.selected\"\n (click)=\"activateItem(item)\"\n (keydown.space)=\"activateItem(item)\"\n novoInert>\n {{item[displayTab.labelField]}}\n </novo-option>\n </cdk-virtual-scroll-viewport>\n </novo-optgroup>\n <div class=\"tabbed-group-picker-empty-item\" *ngIf=\"!displayTab.data.length && (filterText | async)\">\n <i class=\"{{ displayTab.icon || 'bhi-search' }}\"></i>\n <div class=\"empty-item-main-message\">{{ labelService.tabbedGroupPickerEmpty }}</div>\n <div class=\"empty-item-sub-message\">{{ labelService.tabbedGroupClearSuggestion(displayTab.typeLabel) }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"footer\" *ngIf=\"showFooter\">\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"clear-all-button\"\n *ngIf=\"showClearAll\"\n theme=\"dialogue\"\n icon=\"times\"\n side=\"right\"\n color=\"grapefruit\"\n (click)=\"deselectEverything($event)\">{{ labelService.clear }}</novo-button>\n </div>\n <div class=\"save-cancel-button-container\">\n <novo-button\n class=\"cancel-button\"\n marginRight=\"1rem\"\n theme=\"dialogue\"\n (click)=\"cancel()\">{{ labelService.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n (click)=\"apply()\">{{ labelService.apply }}</novo-button>\n </div>\n </div>\n</novo-dropdown>","// NG2\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCheckboxModule } from 'novo-elements/elements/checkbox';\nimport { NovoOptionModule } from 'novo-elements/elements/common';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFormExtrasModule } from 'novo-elements/elements/form';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { NovoTabbedGroupPickerElement } from './TabbedGroupPicker';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ScrollingModule,\n NovoTabModule,\n NovoListModule,\n NovoFormExtrasModule,\n NovoButtonModule,\n NovoDropdownModule,\n NovoOptionModule,\n NovoCheckboxModule,\n ],\n providers: [NovoLabelService],\n declarations: [NovoTabbedGroupPickerElement],\n exports: [NovoTabbedGroupPickerElement],\n})\nexport class NovoTabbedGroupPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "novo-elements",
3
- "version": "10.6.0-next.3",
3
+ "version": "10.6.0-next.4",
4
4
  "sideEffects": true,
5
5
  "peerDependencies": {
6
6
  "@angular/animations": ">=10",