@sarasanalytics-com/design-system 0.0.149 → 0.0.151

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.
@@ -113,9 +113,11 @@ export class CategoryDropdownComponent extends FieldType {
113
113
  this.cdr.detectChanges();
114
114
  if (this.categoryContainer && this.dropdownPanel) {
115
115
  const containerWidth = this.categoryContainer.nativeElement.offsetWidth;
116
- const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);
117
- const minWidthInRem = (containerWidth + this.props?.['panelWidthOffset'] || 160) / rootFontSize;
118
- this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${minWidthInRem}rem`);
116
+ const offset = this.props?.['panelWidthOffset'] ?? 160; // fallback if undefined
117
+ // Use explicit pixel width to avoid reflows caused by fit-content
118
+ const panelWidthPx = containerWidth + offset;
119
+ this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${panelWidthPx}px`);
120
+ this.renderer.setStyle(this.dropdownPanel.nativeElement, 'width', `${panelWidthPx}px`);
119
121
  }
120
122
  // 🔑 Sync selectedAttributes from formControl on every open
121
123
  if (this.props?.['multiple']) {
@@ -236,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
236
238
  type: HostListener,
237
239
  args: ['document:click', ['$event']]
238
240
  }] } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9kcm9wZG93bi9jYXRlZ29yeS1kcm9wZG93bi9jYXRlZ29yeS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL2NhdGVnb3J5LWRyb3Bkb3duL2NhdGVnb3J5LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5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OlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHtmaXJzdCBhcyBfZmlyc3R9IGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NhLWNhdGVnb3J5LWRyb3Bkb3duJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbSWNvblNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vY2F0ZWdvcnktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2F0ZWdvcnktZHJvcGRvd24uY29tcG9uZW50LmNzcydcbn0pXG5cbmV4cG9ydCBjbGFzcyBDYXRlZ29yeURyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGdldCBiaW5kTGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucHJvcHNbJ2JpbmRMYWJlbCddIHx8ICdsYWJlbCc7IH1cbiAgZ2V0IGJpbmRWYWx1ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5wcm9wc1snYmluZFZhbHVlJ10gfHwgJ3ZhbHVlJzsgfVxuICBnZXQgYmluZEF0dHJpYnV0ZXMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucHJvcHNbJ2JpbmRBdHRyaWJ1dGVzJ10gfHwgJ2F0dHJpYnV0ZXMnOyB9XG4gIF9jYXRlZ29yaWVzID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHNlbGVjdGVkQ2F0ZWdvcnkgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBzZWxlY3RlZEF0dHJpYnV0ZXMgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgc2VhcmNoVGVybSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgdXNlclNlbGVjdGVkQ2F0ZWdvcnkgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpOyAvLyBUbyBob2xkIHRoZSB1c2VyJ3MgZXhwbGljaXQgc2VsZWN0aW9uXG5cbiAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2F0ZWdvcnlDb250YWluZXInKSBjYXRlZ29yeUNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25QYW5lbCcpIGRyb3Bkb3duUGFuZWw6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICBzdXBlcigpO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzKCk7XG4gICAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCk7XG4gICAgXG4gICAgICBpZiAodGVybSAmJiBmaWx0ZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQoX2ZpcnN0KGZpbHRlcmVkKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBcbiAgICAgIC8vIElmIGF0dHJpYnV0ZXMgZXhpc3QsIHN0aWNrIHdpdGggdGhlaXIgY2F0ZWdvcnlcbiAgICAgIGNvbnN0IGF0dHJDYXRlZ29yeSA9IHRoaXMuZ2V0U2VsZWN0ZWRBdHRyaWJ1dGVzQ2F0ZWdvcnkoKTtcbiAgICAgIGlmIChhdHRyQ2F0ZWdvcnkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldChhdHRyQ2F0ZWdvcnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgXG4gICAgICAvLyBFbHNlIGZhbGxiYWNrIHRvIHVzZXItc2VsZWN0ZWQgb3IgZmlyc3RcbiAgICAgIGlmICh0aGlzLnVzZXJTZWxlY3RlZENhdGVnb3J5KCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldCh0aGlzLnVzZXJTZWxlY3RlZENhdGVnb3J5KCkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9jYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KF9maXJzdCh0aGlzLl9jYXRlZ29yaWVzKCkpKTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHM/LlsnbXVsdGlwbGUnXSkge1xuICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzLnNldChBcnJheS5pc0FycmF5KGluaXRpYWxWYWx1ZSkgPyBpbml0aWFsVmFsdWUgOiBbXSk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnByb3BzLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5wcm9wcy5vcHRpb25zLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgIHRoaXMuX2NhdGVnb3JpZXMuc2V0KEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogW10pO1xuICAgICAgICBpZiAodGhpcy5fY2F0ZWdvcmllcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQodGhpcy5fY2F0ZWdvcmllcygpWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jYXRlZ29yaWVzLnNldChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgPyB0aGlzLnByb3BzLm9wdGlvbnMgOiBbXSk7XG4gICAgICBpZiAodGhpcy5fY2F0ZWdvcmllcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KHRoaXMuX2NhdGVnb3JpZXMoKVswXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICBjb25zdCBpc09wZW5pbmcgPSAhdGhpcy5pc09wZW4oKTtcbiAgICB0aGlzLmlzT3Blbi5zZXQoaXNPcGVuaW5nKTtcbiAgXG4gICAgaWYgKGlzT3BlbmluZykge1xuICAgICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgXG4gICAgICBpZiAodGhpcy5jYXRlZ29yeUNvbnRhaW5lciAmJiB0aGlzLmRyb3Bkb3duUGFuZWwpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNhdGVnb3J5Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHJvb3RGb250U2l6ZSA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmZvbnRTaXplKTtcbiAgICAgICAgY29uc3QgbWluV2lkdGhJblJlbSA9IChjb250YWluZXJXaWR0aCArIHRoaXMucHJvcHM/LlsncGFuZWxXaWR0aE9mZnNldCddIHx8IDE2MCkgLyByb290Rm9udFNpemU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93blBhbmVsLm5hdGl2ZUVsZW1lbnQsICdtaW4td2lkdGgnLCBgJHttaW5XaWR0aEluUmVtfXJlbWApO1xuICAgICAgfVxuICBcbiAgICAgIC8vIPCflJEgU3luYyBzZWxlY3RlZEF0dHJpYnV0ZXMgZnJvbSBmb3JtQ29udHJvbCBvbiBldmVyeSBvcGVuXG4gICAgICBpZiAodGhpcy5wcm9wcz8uWydtdWx0aXBsZSddKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzLnNldChBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgPyBjdXJyZW50VmFsdWUgOiBbXSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMuc2V0KFt0aGlzLmZvcm1Db250cm9sLnZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlcy5zZXQoW10pO1xuICAgICAgfVxuICBcbiAgICAgIC8vIPCfkYcgTm93IHRoaXMgd29ya3MsIGJlY2F1c2Ugc2VsZWN0ZWRBdHRyaWJ1dGVzIGlzbuKAmXQgZW1wdHkgYW55bW9yZVxuICAgICAgY29uc3QgYXR0ckNhdGVnb3J5ID0gdGhpcy5nZXRTZWxlY3RlZEF0dHJpYnV0ZXNDYXRlZ29yeSgpO1xuICAgICAgaWYgKGF0dHJDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGF0dHJDYXRlZ29yeSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KHRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NhdGVnb3JpZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQodGhpcy5fY2F0ZWdvcmllcygpWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldChjYXRlZ29yeSk7XG4gICAgLy8gT25seSB1cGRhdGUgdXNlclNlbGVjdGVkQ2F0ZWdvcnkgaWYgdGhlcmUgYXJlIE5PIGF0dHJpYnV0ZXMgc2VsZWN0ZWRcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGNhdGVnb3J5KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzLnVwZGF0ZShhdHRyaWJ1dGVzID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gYXR0cmlidXRlcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RoaXMuYmluZFZhbHVlXSA9PT0gdmFsW3RoaXMuYmluZFZhbHVlXSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBhdHRyaWJ1dGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSgpO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHsgLi4udmFsLCBjYXRlZ29yeUlkOiBjYXRlZ29yeVt0aGlzLmJpbmRWYWx1ZV0sIGNhdGVnb3J5TGFiZWw6IGNhdGVnb3J5W3RoaXMuYmluZExhYmVsXSB9O1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2gobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShbLi4uYXR0cmlidXRlc10pO1xuICAgICAgcmV0dXJuIFsuLi5hdHRyaWJ1dGVzXTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRBdHRyaWJ1dGVzQ2F0ZWdvcnkoKTogYW55IHtcbiAgICBjb25zdCBhdHRycyA9IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgaWYgKGF0dHJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGFsd2F5cyBwcmVmZXIgY2F0ZWdvcnkgb2YgbGFzdCBzZWxlY3RlZCBhdHRyaWJ1dGVcbiAgICAgIGNvbnN0IGxhc3RBdHRyID0gYXR0cnNbYXR0cnMubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllcygpLmZpbmQoYyA9PiBjW3RoaXMuYmluZFZhbHVlXSA9PT0gbGFzdEF0dHIuY2F0ZWdvcnlJZCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMoKS5zb21lKGl0ZW0gPT4gaXRlbVt0aGlzLmJpbmRWYWx1ZV0gPT09IHZhbFt0aGlzLmJpbmRWYWx1ZV0pO1xuICB9XG5cbiAgcmVtb3ZlVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlcy51cGRhdGUoYXR0cmlidXRlcyA9PiB7XG4gICAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5maWx0ZXIoaXRlbSA9PiBpdGVtW3RoaXMuYmluZFZhbHVlXSAhPT0gdmFsW3RoaXMuYmluZFZhbHVlXSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld0F0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIG5ld0F0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RTaW5nbGVWYWx1ZSh2YWw6IGFueSkge1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5zZWxlY3RlZENhdGVnb3J5KCk7XG4gICAgLy8gY29uc3QgbmV3VmFsdWUgPSB7IC4uLnZhbCwgY2F0ZWdvcnlJZDogY2F0ZWdvcnlbdGhpcy5iaW5kVmFsdWVdLCBjYXRlZ29yeUxhYmVsOiBjYXRlZ29yeVt0aGlzLmJpbmRMYWJlbF0gfTtcbiAgICAvLyB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgfVxuXG4gIG9uU2VhcmNoKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBmaWx0ZXJlZEF0dHJpYnV0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkoKTtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNhdGVnb3J5W3RoaXMuYmluZEF0dHJpYnV0ZXNdIHx8IFtdKS5maWx0ZXIoKHZhbDogYW55KSA9PiAodmFsW3RoaXMuYmluZExhYmVsXSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSk7XG4gIH0pO1xuXG4gIGZpbHRlcmVkQ2F0ZWdvcmllcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5fY2F0ZWdvcmllcygpO1xuICAgIGlmICghdGVybSkge1xuICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgfVxuICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXRlZ29yeSA9PlxuICAgICAgKGNhdGVnb3J5W3RoaXMuYmluZEF0dHJpYnV0ZXNdIHx8IFtdKS5zb21lKCh2YWw6IGFueSkgPT4gKHZhbFt0aGlzLmJpbmRMYWJlbF0gfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkpXG4gICAgKTtcbiAgfSk7XG59IiwiPGRpdiBjbGFzcz1cImN1c3RvbS1jYXRlZ29yeS1kcm9wZG93biByZWxhdGl2ZVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCI+XG4gICAgPCEtLSBEcm9wZG93biBUcmlnZ2VyIC8gRGlzcGxheSAtLT5cbiAgICA8ZGl2ICNjYXRlZ29yeUNvbnRhaW5lciBjbGFzcz1cImN1c3RvbS1jYXRlZ29yeS1jb250YWluZXJcIiBbY2xhc3Mub3Blbl09XCJpc09wZW4oKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWF0dHJpYnV0ZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIEBpZihwcm9wcz8uWydtdWx0aXBsZSddKXtcbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRBdHRyaWJ1dGVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWxlY3RlZEF0dHJpYnV0ZXMoKTsgdHJhY2sgaXRlbVtiaW5kVmFsdWVdKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWF0dHJpYnV0ZSBjdXN0b20tY2F0ZWdvcnktY3VzdG9tLWNoaXBcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXR0cmlidXRlLWxhYmVsXCI+e3sgaXRlbVtiaW5kTGFiZWxdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWF0dHJpYnV0ZS1pY29uIHJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCIgKGNsaWNrKT1cInJlbW92ZVZhbHVlKGl0ZW0pXCIgc2l6ZT1cIjExXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+U2VsZWN0IGl0ZW1zPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYoZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWF0dHJpYnV0ZS1sYWJlbFwiPnt7IGZvcm1Db250cm9sLnZhbHVlW2JpbmRMYWJlbF0gfX08L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5TZWxlY3QgaXRlbTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXJyb3ctd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cInVwRG93bkNoZXZyb25PdXRsaW5lZFwiIHNpemU9XCIxMVwiPjwvc2EtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERyb3Bkb3duIFBhbmVsIC0tPlxuICAgIEBpZiAoaXNPcGVuKCkpIHtcbiAgICA8ZGl2ICNkcm9wZG93blBhbmVsIGNsYXNzPVwiZHJvcGRvd24tcGFuZWxcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyIG1hdC1mb3JtLWZpZWxkLWRlbnNpdHktNVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cInByb3BzWydhcHBlYXJhbmNlJ10gfHwgJ291dGxpbmUnXCIgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJzZWFyY2hJY29uXCIgc2l6ZT1cIjIwXCIgbWF0UHJlZml4Pjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI3NlYXJjaElucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm1lbnUtc2VhcmNoLWJhclwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwicHJvcHM/Llsnc2VhcmNoUGxhY2Vob2xkZXInXSB8fCAnU2VhcmNoJ1wiIC8+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gY2xhc3M9XCJwb2ludGVyXCIgaWNvbj1cImNsb3NlT3V0bGluZWRcIiBzaXplPVwiMTFcIiBtYXRTdWZmaXggKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudClcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKGZpbHRlcmVkQ2F0ZWdvcmllcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInR3by1wYW5lbC1kcm9wZG93blwiPlxuICAgICAgICAgICAgPCEtLSBMZWZ0IFBhbmVsOiBDYXRlZ29yaWVzIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2F0IG9mIGZpbHRlcmVkQ2F0ZWdvcmllcygpOyB0cmFjayBjYXRbYmluZFZhbHVlXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1pdGVtXCIgW2NsYXNzLmFjdGl2ZV09XCJjYXRbYmluZFZhbHVlXSA9PT0gc2VsZWN0ZWRDYXRlZ29yeSgpPy5bYmluZFZhbHVlXVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDYXRlZ29yeShjYXQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeS1sYWJlbFwiPnt7IGNhdFtiaW5kTGFiZWxdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYocHJvcHM/Llsnc2hvd0F0dHJpYnV0ZXNDb3VudCddKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXR0cmlidXRlcy1jb3VudFwiPih7eyBjYXQ/LltiaW5kQXR0cmlidXRlc10/Lmxlbmd0aCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUmlnaHQgUGFuZWw6IEF0dHJpYnV0ZXMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlcy1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIEBpZihmaWx0ZXJlZEF0dHJpYnV0ZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgQGZvciAodmFsIG9mIGZpbHRlcmVkQXR0cmlidXRlcygpOyB0cmFjayB2YWxbYmluZFZhbHVlXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGUtaXRlbSBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJwcm9wcz8uWydtdWx0aXBsZSddID8gaXNJdGVtU2VsZWN0ZWQodmFsKSA6IGZvcm1Db250cm9sLnZhbHVlPy5bYmluZFZhbHVlXSA9PT0gdmFsW2JpbmRWYWx1ZV1cIiAoY2xpY2spPVwicHJvcHM/LlsnbXVsdGlwbGUnXSA/IHRvZ2dsZVZhbHVlKHZhbCkgOiBzZWxlY3RTaW5nbGVWYWx1ZSh2YWwpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmKHByb3BzPy5bJ211bHRpcGxlJ10pe1xuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY2hlY2tib3gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzSXRlbVNlbGVjdGVkKHZhbClcIiAoY2hhbmdlKT1cInRvZ2dsZVZhbHVlKHZhbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtbGFiZWxcIj57eyB2YWxbYmluZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtbGFiZWxcIj57eyB2YWxbYmluZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZih2YWw/LnRvb2x0aXAgfHwgdmFsPy5kZXNjcmlwdGlvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwicHJvcHM/LlsndG9vbHRpcEljb24nXSB8fCAnaW5mb0NpcmNsZU91dGxpbmVkJ1wiIGN1c3RvbUNsYXNzPVwiaW5mby1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsPy50b29sdGlwIHx8IHZhbD8uZGVzY3JpcHRpb25cIiBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9vbHRpcC1pY29uXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1AZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtNCB0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNTAwIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBObyBpdGVtcyBmb3VuZC5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicC00IHRleHQtY2VudGVyIHRleHQtZ3JheS01MDAgdy1mdWxsXCI+XG4gICAgICAgICAgICBObyBpdGVtcyBmb3VuZC5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9kcm9wZG93bi9jYXRlZ29yeS1kcm9wZG93bi9jYXRlZ29yeS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL2NhdGVnb3J5LWRyb3Bkb3duL2NhdGVnb3J5LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5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LFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgc2lnbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQge2ZpcnN0IGFzIF9maXJzdH0gZnJvbSAnbG9kYXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2EtY2F0ZWdvcnktZHJvcGRvd24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtJY29uU2VydmljZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXRlZ29yeS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jYXRlZ29yeS1kcm9wZG93bi5jb21wb25lbnQuY3NzJ1xufSlcblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5RHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZ2V0IGJpbmRMYWJlbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5wcm9wc1snYmluZExhYmVsJ10gfHwgJ2xhYmVsJzsgfVxuICBnZXQgYmluZFZhbHVlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnByb3BzWydiaW5kVmFsdWUnXSB8fCAndmFsdWUnOyB9XG4gIGdldCBiaW5kQXR0cmlidXRlcygpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5wcm9wc1snYmluZEF0dHJpYnV0ZXMnXSB8fCAnYXR0cmlidXRlcyc7IH1cbiAgX2NhdGVnb3JpZXMgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgc2VsZWN0ZWRDYXRlZ29yeSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XG4gIHNlbGVjdGVkQXR0cmlidXRlcyA9IHNpZ25hbDxhbnlbXT4oW10pO1xuICBzZWFyY2hUZXJtID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICB1c2VyU2VsZWN0ZWRDYXRlZ29yeSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7IC8vIFRvIGhvbGQgdGhlIHVzZXIncyBleHBsaWNpdCBzZWxlY3Rpb25cblxuICBwcml2YXRlIGVsOiBFbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjYXRlZ29yeUNvbnRhaW5lcicpIGNhdGVnb3J5Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93blBhbmVsJykgZHJvcGRvd25QYW5lbDogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHN1cGVyKCk7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMoKTtcbiAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKTtcbiAgICBcbiAgICAgIGlmICh0ZXJtICYmIGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldChfZmlyc3QoZmlsdGVyZWQpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIFxuICAgICAgLy8gSWYgYXR0cmlidXRlcyBleGlzdCwgc3RpY2sgd2l0aCB0aGVpciBjYXRlZ29yeVxuICAgICAgY29uc3QgYXR0ckNhdGVnb3J5ID0gdGhpcy5nZXRTZWxlY3RlZEF0dHJpYnV0ZXNDYXRlZ29yeSgpO1xuICAgICAgaWYgKGF0dHJDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGF0dHJDYXRlZ29yeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICBcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gdXNlci1zZWxlY3RlZCBvciBmaXJzdFxuICAgICAgaWYgKHRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KHRoaXMudXNlclNlbGVjdGVkQ2F0ZWdvcnkoKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NhdGVnb3JpZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQoX2ZpcnN0KHRoaXMuX2NhdGVnb3JpZXMoKSkpO1xuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcz8uWydtdWx0aXBsZSddKSB7XG4gICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMuc2V0KEFycmF5LmlzQXJyYXkoaW5pdGlhbFZhbHVlKSA/IGluaXRpYWxWYWx1ZSA6IFtdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYnNlcnZhYmxlKHRoaXMucHJvcHMub3B0aW9ucykpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnByb3BzLm9wdGlvbnMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy5zZXQoQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBbXSk7XG4gICAgICAgIGlmICh0aGlzLl9jYXRlZ29yaWVzKCkubGVuZ3RoID4gMCAmJiAhdGhpcy51c2VyU2VsZWN0ZWRDYXRlZ29yeSgpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldCh0aGlzLl9jYXRlZ29yaWVzKClbMF0pO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NhdGVnb3JpZXMuc2V0KEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSA/IHRoaXMucHJvcHMub3B0aW9ucyA6IFtdKTtcbiAgICAgIGlmICh0aGlzLl9jYXRlZ29yaWVzKCkubGVuZ3RoID4gMCAmJiAhdGhpcy51c2VyU2VsZWN0ZWRDYXRlZ29yeSgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQodGhpcy5fY2F0ZWdvcmllcygpWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKCkge1xuICAgIGNvbnN0IGlzT3BlbmluZyA9ICF0aGlzLmlzT3BlbigpO1xuICAgIHRoaXMuaXNPcGVuLnNldChpc09wZW5pbmcpO1xuICBcbiAgICBpZiAoaXNPcGVuaW5nKSB7XG4gICAgICB0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICBcbiAgICAgIGlmICh0aGlzLmNhdGVnb3J5Q29udGFpbmVyICYmIHRoaXMuZHJvcGRvd25QYW5lbCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuY2F0ZWdvcnlDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5wcm9wcz8uWydwYW5lbFdpZHRoT2Zmc2V0J10gPz8gMTYwOyAvLyBmYWxsYmFjayBpZiB1bmRlZmluZWRcblxuICAgICAgICAvLyBVc2UgZXhwbGljaXQgcGl4ZWwgd2lkdGggdG8gYXZvaWQgcmVmbG93cyBjYXVzZWQgYnkgZml0LWNvbnRlbnRcbiAgICAgICAgY29uc3QgcGFuZWxXaWR0aFB4ID0gY29udGFpbmVyV2lkdGggKyBvZmZzZXQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93blBhbmVsLm5hdGl2ZUVsZW1lbnQsICdtaW4td2lkdGgnLCBgJHtwYW5lbFdpZHRoUHh9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyb3Bkb3duUGFuZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgYCR7cGFuZWxXaWR0aFB4fXB4YCk7XG4gICAgICB9XG4gIFxuICAgICAgLy8g8J+UkSBTeW5jIHNlbGVjdGVkQXR0cmlidXRlcyBmcm9tIGZvcm1Db250cm9sIG9uIGV2ZXJ5IG9wZW5cbiAgICAgIGlmICh0aGlzLnByb3BzPy5bJ211bHRpcGxlJ10pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMuc2V0KEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZSA6IFtdKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlcy5zZXQoW3RoaXMuZm9ybUNvbnRyb2wudmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzLnNldChbXSk7XG4gICAgICB9XG4gIFxuICAgICAgLy8g8J+RhyBOb3cgdGhpcyB3b3JrcywgYmVjYXVzZSBzZWxlY3RlZEF0dHJpYnV0ZXMgaXNu4oCZdCBlbXB0eSBhbnltb3JlXG4gICAgICBjb25zdCBhdHRyQ2F0ZWdvcnkgPSB0aGlzLmdldFNlbGVjdGVkQXR0cmlidXRlc0NhdGVnb3J5KCk7XG4gICAgICBpZiAoYXR0ckNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQoYXR0ckNhdGVnb3J5KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VyU2VsZWN0ZWRDYXRlZ29yeSgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeS5zZXQodGhpcy51c2VyU2VsZWN0ZWRDYXRlZ29yeSgpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2F0ZWdvcmllcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5LnNldCh0aGlzLl9jYXRlZ29yaWVzKClbMF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdENhdGVnb3J5KGNhdGVnb3J5OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGNhdGVnb3J5KTtcbiAgICAvLyBPbmx5IHVwZGF0ZSB1c2VyU2VsZWN0ZWRDYXRlZ29yeSBpZiB0aGVyZSBhcmUgTk8gYXR0cmlidXRlcyBzZWxlY3RlZFxuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51c2VyU2VsZWN0ZWRDYXRlZ29yeS5zZXQoY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMudXBkYXRlKGF0dHJpYnV0ZXMgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBhdHRyaWJ1dGVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdGhpcy5iaW5kVmFsdWVdID09PSB2YWxbdGhpcy5iaW5kVmFsdWVdKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5zZWxlY3RlZENhdGVnb3J5KCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0geyAuLi52YWwsIGNhdGVnb3J5SWQ6IGNhdGVnb3J5W3RoaXMuYmluZFZhbHVlXSwgY2F0ZWdvcnlMYWJlbDogY2F0ZWdvcnlbdGhpcy5iaW5kTGFiZWxdIH07XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKFsuLi5hdHRyaWJ1dGVzXSk7XG4gICAgICByZXR1cm4gWy4uLmF0dHJpYnV0ZXNdO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEF0dHJpYnV0ZXNDYXRlZ29yeSgpOiBhbnkge1xuICAgIGNvbnN0IGF0dHJzID0gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZXMoKTtcbiAgICBpZiAoYXR0cnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gYWx3YXlzIHByZWZlciBjYXRlZ29yeSBvZiBsYXN0IHNlbGVjdGVkIGF0dHJpYnV0ZVxuICAgICAgY29uc3QgbGFzdEF0dHIgPSBhdHRyc1thdHRycy5sZW5ndGggLSAxXTtcbiAgICAgIHJldHVybiB0aGlzLl9jYXRlZ29yaWVzKCkuZmluZChjID0+IGNbdGhpcy5iaW5kVmFsdWVdID09PSBsYXN0QXR0ci5jYXRlZ29yeUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlcygpLnNvbWUoaXRlbSA9PiBpdGVtW3RoaXMuYmluZFZhbHVlXSA9PT0gdmFsW3RoaXMuYmluZFZhbHVlXSk7XG4gIH1cblxuICByZW1vdmVWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVzLnVwZGF0ZShhdHRyaWJ1dGVzID0+IHtcbiAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmZpbHRlcihpdGVtID0+IGl0ZW1bdGhpcy5iaW5kVmFsdWVdICE9PSB2YWxbdGhpcy5iaW5kVmFsdWVdKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3QXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gbmV3QXR0cmlidXRlcztcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdFNpbmdsZVZhbHVlKHZhbDogYW55KSB7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkoKTtcbiAgICAvLyBjb25zdCBuZXdWYWx1ZSA9IHsgLi4udmFsLCBjYXRlZ29yeUlkOiBjYXRlZ29yeVt0aGlzLmJpbmRWYWx1ZV0sIGNhdGVnb3J5TGFiZWw6IGNhdGVnb3J5W3RoaXMuYmluZExhYmVsXSB9O1xuICAgIC8vIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsKTtcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICB9XG5cbiAgb25TZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQodmFsdWUpO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGZpbHRlcmVkQXR0cmlidXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSgpO1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiAoY2F0ZWdvcnlbdGhpcy5iaW5kQXR0cmlidXRlc10gfHwgW10pLmZpbHRlcigodmFsOiBhbnkpID0+ICh2YWxbdGhpcy5iaW5kTGFiZWxdIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKTtcbiAgfSk7XG5cbiAgZmlsdGVyZWRDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSB0aGlzLl9jYXRlZ29yaWVzKCk7XG4gICAgaWYgKCF0ZXJtKSB7XG4gICAgICByZXR1cm4gY2F0ZWdvcmllcztcbiAgICB9XG4gICAgcmV0dXJuIGNhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+XG4gICAgICAoY2F0ZWdvcnlbdGhpcy5iaW5kQXR0cmlidXRlc10gfHwgW10pLnNvbWUoKHZhbDogYW55KSA9PiAodmFsW3RoaXMuYmluZExhYmVsXSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSlcbiAgICApO1xuICB9KTtcbn0iLCI8ZGl2IGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWRyb3Bkb3duIHJlbGF0aXZlXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIj5cbiAgICA8IS0tIERyb3Bkb3duIFRyaWdnZXIgLyBEaXNwbGF5IC0tPlxuICAgIDxkaXYgI2NhdGVnb3J5Q29udGFpbmVyIGNsYXNzPVwiY3VzdG9tLWNhdGVnb3J5LWNvbnRhaW5lclwiIFtjbGFzcy5vcGVuXT1cImlzT3BlbigpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXR0cmlidXRlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgQGlmKHByb3BzPy5bJ211bHRpcGxlJ10pe1xuICAgICAgICAgICAgQGlmIChzZWxlY3RlZEF0dHJpYnV0ZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlbGVjdGVkQXR0cmlidXRlcygpOyB0cmFjayBpdGVtW2JpbmRWYWx1ZV0pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXR0cmlidXRlIGN1c3RvbS1jYXRlZ29yeS1jdXN0b20tY2hpcFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1jYXRlZ29yeS1hdHRyaWJ1dGUtbGFiZWxcIj57eyBpdGVtW2JpbmRMYWJlbF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXR0cmlidXRlLWljb24gcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cImNsb3NlT3V0bGluZWRcIiAoY2xpY2spPVwicmVtb3ZlVmFsdWUoaXRlbSlcIiBzaXplPVwiMTFcIj48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXJcIj5TZWxlY3QgaXRlbXM8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZihmb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tY2F0ZWdvcnktYXR0cmlidXRlLWxhYmVsXCI+e3sgZm9ybUNvbnRyb2wudmFsdWVbYmluZExhYmVsXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiPlNlbGVjdCBpdGVtPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jYXRlZ29yeS1hcnJvdy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2EtaWNvbiBpY29uPVwidXBEb3duQ2hldnJvbk91dGxpbmVkXCIgc2l6ZT1cIjExXCI+PC9zYS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRHJvcGRvd24gUGFuZWwgLS0+XG4gICAgQGlmIChpc09wZW4oKSkge1xuICAgIDxkaXYgI2Ryb3Bkb3duUGFuZWwgY2xhc3M9XCJkcm9wZG93bi1wYW5lbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQtZGVuc2l0eS01XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwicHJvcHNbJ2FwcGVhcmFuY2UnXSB8fCAnb3V0bGluZSdcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cInNlYXJjaEljb25cIiBzaXplPVwiMjBcIiBtYXRQcmVmaXg+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibWVudS1zZWFyY2gtYmFyXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25TZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJwcm9wcz8uWydzZWFyY2hQbGFjZWhvbGRlciddIHx8ICdTZWFyY2gnXCIgLz5cbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cInBvaW50ZXJcIiBpY29uPVwiY2xvc2VPdXRsaW5lZFwiIHNpemU9XCIxMVwiIG1hdFN1ZmZpeCAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KVwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoZmlsdGVyZWRDYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidHdvLXBhbmVsLWRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8IS0tIExlZnQgUGFuZWw6IENhdGVnb3JpZXMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktcGFuZWxcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjYXQgb2YgZmlsdGVyZWRDYXRlZ29yaWVzKCk7IHRyYWNrIGNhdFtiaW5kVmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cImNhdFtiaW5kVmFsdWVdID09PSBzZWxlY3RlZENhdGVnb3J5KCk/LltiaW5kVmFsdWVdXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENhdGVnb3J5KGNhdCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5LWxhYmVsXCI+e3sgY2F0W2JpbmRMYWJlbF0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihwcm9wcz8uWydzaG93QXR0cmlidXRlc0NvdW50J10pe1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGVzLWNvdW50XCI+KHt7IGNhdD8uW2JpbmRBdHRyaWJ1dGVzXT8ubGVuZ3RoIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSaWdodCBQYW5lbDogQXR0cmlidXRlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRyaWJ1dGVzLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgQGlmKGZpbHRlcmVkQXR0cmlidXRlcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBAZm9yICh2YWwgb2YgZmlsdGVyZWRBdHRyaWJ1dGVzKCk7IHRyYWNrIHZhbFtiaW5kVmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dHJpYnV0ZS1pdGVtIHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInByb3BzPy5bJ211bHRpcGxlJ10gPyBpc0l0ZW1TZWxlY3RlZCh2YWwpIDogZm9ybUNvbnRyb2wudmFsdWU/LltiaW5kVmFsdWVdID09PSB2YWxbYmluZFZhbHVlXVwiIChjbGljayk9XCJwcm9wcz8uWydtdWx0aXBsZSddID8gdG9nZ2xlVmFsdWUodmFsKSA6IHNlbGVjdFNpbmdsZVZhbHVlKHZhbCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYocHJvcHM/LlsnbXVsdGlwbGUnXSl7XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNJdGVtU2VsZWN0ZWQodmFsKVwiIChjaGFuZ2UpPVwidG9nZ2xlVmFsdWUodmFsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja21hcmtcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZS1sYWJlbFwiPnt7IHZhbFtiaW5kTGFiZWxdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBlbHNle1xuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0dHJpYnV0ZS1sYWJlbFwiPnt7IHZhbFtiaW5kTGFiZWxdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHZhbD8udG9vbHRpcCB8fCB2YWw/LmRlc2NyaXB0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWw/LnRvb2x0aXAgfHwgdmFsPy5kZXNjcmlwdGlvblwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b29sdGlwLWljb25cIj48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfUBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC00IHRleHQtY2VudGVyIHRleHQtZ3JheS01MDAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIE5vIGl0ZW1zIGZvdW5kLlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTQgdGV4dC1jZW50ZXIgdGV4dC1ncmF5LTUwMCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIE5vIGl0ZW1zIGZvdW5kLlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PiJdfQ==
@@ -3277,9 +3277,11 @@ class CategoryDropdownComponent extends FieldType {
3277
3277
  this.cdr.detectChanges();
3278
3278
  if (this.categoryContainer && this.dropdownPanel) {
3279
3279
  const containerWidth = this.categoryContainer.nativeElement.offsetWidth;
3280
- const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);
3281
- const minWidthInRem = (containerWidth + this.props?.['panelWidthOffset'] || 160) / rootFontSize;
3282
- this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${minWidthInRem}rem`);
3280
+ const offset = this.props?.['panelWidthOffset'] ?? 160; // fallback if undefined
3281
+ // Use explicit pixel width to avoid reflows caused by fit-content
3282
+ const panelWidthPx = containerWidth + offset;
3283
+ this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${panelWidthPx}px`);
3284
+ this.renderer.setStyle(this.dropdownPanel.nativeElement, 'width', `${panelWidthPx}px`);
3283
3285
  }
3284
3286
  // 🔑 Sync selectedAttributes from formControl on every open
3285
3287
  if (this.props?.['multiple']) {