@elite.framework/ng.ui.core 1.0.72 → 1.0.73

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.
@@ -19,7 +19,7 @@ import { CheckboxModule } from 'primeng/checkbox';
19
19
  import * as i7 from 'primeng/button';
20
20
  import { ButtonModule } from 'primeng/button';
21
21
  import * as i1 from '@elite.framework/ng.core/services';
22
- import { BaseService } from '@elite.framework/ng.core/services';
22
+ import { QueryParser, BaseService } from '@elite.framework/ng.core/services';
23
23
  import { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';
24
24
  import * as i4 from 'primeng/api';
25
25
 
@@ -201,13 +201,26 @@ class GenericSelectorTypeComponent extends FieldType {
201
201
  }
202
202
  }
203
203
  onSelectionChange(val) {
204
- this.selectedItem = val;
205
204
  const vf = this.to['valueField'] || 'id';
206
- if (this.to['multiple']) {
207
- this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);
205
+ if (this.to['offline']) {
206
+ // this.selectedItem = val;
207
+ if (this.to['multiple'] && Array.isArray(val)) {
208
+ this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));
209
+ this.formControl.setValue(Array.isArray(this.selectedItem) ? this.selectedItem.map((c) => c[vf]) : []);
210
+ }
211
+ else {
212
+ this.selectedItem = this._offlineList.find(item => item[vf] === val);
213
+ this.formControl.setValue(this.selectedItem?.[vf] ?? null);
214
+ }
208
215
  }
209
216
  else {
210
- this.formControl.setValue(val?.[vf] ?? null);
217
+ this.selectedItem = val;
218
+ if (this.to['multiple']) {
219
+ this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);
220
+ }
221
+ else {
222
+ this.formControl.setValue(val?.[vf] ?? null);
223
+ }
211
224
  }
212
225
  }
213
226
  initOfflineSelection(withSetValue = true) {
@@ -303,20 +316,6 @@ class GenericSelectorTypeComponent extends FieldType {
303
316
  }
304
317
  return fixedFilters || {};
305
318
  }
306
- getFilters() {
307
- let filters = this.to['filters'];
308
- if (typeof filters === 'function') {
309
- filters = filters(this.model);
310
- }
311
- if (!filters)
312
- return [];
313
- // If it's an object, return its keys
314
- if (!Array.isArray(filters)) {
315
- return Object.keys(filters);
316
- }
317
- // Already an array
318
- return filters;
319
- }
320
319
  onArrowDown(event) {
321
320
  event.preventDefault();
322
321
  // this.autoComp.show();
@@ -349,7 +348,6 @@ class GenericSelectorTypeComponent extends FieldType {
349
348
  const q = event.query?.toString().toLowerCase() || '';
350
349
  const lf = this.optionLabel;
351
350
  const fixedFilters = this.getFixedFilters();
352
- const filters = this.getFilters();
353
351
  if (this.to['offline']) {
354
352
  this.options_ = this.to['offlineDataFn']
355
353
  ? this.to['offlineDataFn'](q)
@@ -359,20 +357,72 @@ class GenericSelectorTypeComponent extends FieldType {
359
357
  else {
360
358
  this.loading = true;
361
359
  this.options_ = [];
362
- const searchParams = {
363
- ...fixedFilters
360
+ // Build QueryParameters
361
+ const queryParams = {
362
+ filters: [],
363
+ orderBy: [],
364
+ groupBy: []
364
365
  };
365
- // Add query to main label
366
- searchParams[lf] = q;
367
- // Set all filter keys to the search query
368
- filters.forEach(key => {
369
- searchParams[key] = q;
366
+ // Handle main search and fixed filters
367
+ if (!this.to['filters']) {
368
+ // Create a group for main search condition
369
+ const mainGroup = {
370
+ logicalOperator: 'and',
371
+ conditions: [
372
+ {
373
+ field: lf,
374
+ operator: 'contains',
375
+ value: q
376
+ }
377
+ ]
378
+ };
379
+ // Add fixed filters to the same group
380
+ Object.keys(fixedFilters || {}).forEach(key => {
381
+ const value = fixedFilters[key];
382
+ if (value !== null && value !== undefined) {
383
+ mainGroup.conditions.push({
384
+ field: key,
385
+ operator: 'eq',
386
+ value: value
387
+ });
388
+ }
389
+ });
390
+ if (mainGroup.conditions.length > 0) {
391
+ queryParams.filters.push(mainGroup);
392
+ }
393
+ }
394
+ // Merge dynamic filters (function or array)
395
+ let dynamicFilters = [];
396
+ const filtersProp = this.to['filters'];
397
+ if (typeof filtersProp === 'function') {
398
+ dynamicFilters = filtersProp(q, this.field); // pass search text
399
+ }
400
+ else if (Array.isArray(filtersProp)) {
401
+ dynamicFilters = filtersProp;
402
+ }
403
+ // Add dynamic filters with proper groupLogicalOperator
404
+ dynamicFilters.forEach((filterGroup, index) => {
405
+ if (index === 0 && queryParams.filters.length === 0) {
406
+ // First filter group, no groupLogicalOperator needed
407
+ queryParams.filters.push(filterGroup);
408
+ }
409
+ else {
410
+ // Subsequent groups, ensure they have groupLogicalOperator
411
+ const groupWithOperator = {
412
+ ...filterGroup,
413
+ groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'
414
+ };
415
+ queryParams.filters.push(groupWithOperator);
416
+ }
370
417
  });
371
- // استخدام listEndpoint إذا كان موجودًا، وإلا العودة إلى الافتراضي
418
+ // Use listEndpoint if available, otherwise use default
372
419
  let listEndpoint = this.props.listEndpoint;
373
420
  if (typeof listEndpoint === 'function') {
374
421
  listEndpoint = listEndpoint(this.model);
375
422
  }
423
+ const searchParams = {
424
+ 'query': QueryParser.toString(queryParams)
425
+ };
376
426
  this.api.getList(searchParams, listEndpoint)
377
427
  .pipe(finalize(() => (this.loading = false)))
378
428
  .subscribe({
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-selector.mjs","sources":["../tmp-esm2022/generic-selector/lib/generic-selector-module.js","../tmp-esm2022/generic-selector/lib/generic-selector.component.js","../tmp-esm2022/generic-selector/elite.framework-ng.ui.core-generic-selector.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSelectorModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3ItbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8scUJBQXFCO3VHQUFyQixxQkFBcUI7d0dBQXJCLHFCQUFxQixZQUZ0QixZQUFZO3dHQUVYLHFCQUFxQixZQUZ0QixZQUFZOzsyRkFFWCxxQkFBcUI7a0JBSGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlbGVjdG9yTW9kdWxlIHt9XG4iXX0=","import { ChangeDetectorRef, Component, Injector, ViewChild, inject } from '@angular/core';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { forkJoin } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseService } from '@elite.framework/ng.core/services';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@elite.framework/ng.core/services\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/autocomplete\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputgroup\";\nimport * as i6 from \"primeng/inputgroupaddon\";\nimport * as i7 from \"primeng/button\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericSelectorTypeComponent extends FieldType {\n svc;\n injector;\n cdr;\n autoComp;\n dialog;\n options_ = [];\n selectedItem;\n loading = false;\n _offlineList = [];\n translateService = inject(TranslateService);\n api;\n valueChangeSubscription; // Add a subscription to manage the observable\n get optionLabel() {\n if (this.to.useMultiLang == true) {\n if (this.translateService.currentLang == 'en') {\n return this.to?.labelFieldEn || 'name';\n }\n return this.to?.labelField || 'name';\n }\n return this.to?.labelField || 'name';\n }\n isNullOrEmpty(val) {\n return val === null || val === undefined || val === '';\n }\n getPrimaryLabel(item) {\n const fields = [\n this.optionLabel, // resolved field name from getter\n this.to.labelField || 'name',\n this.to.labelFieldEn || 'name'\n ];\n for (const f of fields) {\n const v = item[f];\n if (!this.isNullOrEmpty(v)) {\n return v;\n }\n }\n return '';\n }\n constructor(svc, injector, cdr) {\n super();\n this.svc = svc;\n this.injector = injector;\n this.cdr = cdr;\n }\n ngOnInit() {\n this.api = this.svc;\n const to = this.props;\n this.api.apiName = to['serviceName'];\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection();\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection();\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection();\n }\n }\n else {\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\n const vf = this.to['valueField'] || 'id';\n const lf = this.optionLabel;\n this.selectedItem =\n {\n [vf]: this.formControl.value,\n [lf]: this.model[this.props.loadSavedField],\n };\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n else {\n this.initOnlineSelection();\n }\n }\n // Subscribe to formControl value changes\n this.valueChangeSubscription = this.formControl.valueChanges\n .subscribe(() => {\n // This tap operator is a good place to run side effects\n // like calling your change handler after a value changes.\n // this.selectedItem = this.formControl.value;\n if (this.props.change) {\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection(false);\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection(false);\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection(false);\n }\n }\n else {\n this.initOnlineSelection(false);\n }\n }\n });\n }\n // Remember to unsubscribe to prevent memory leaks!\n ngOnDestroy() {\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n loadDefaultValue() {\n this.loading = true;\n const vf = this.to['valueField'] || 'id';\n const fixedFilters = this.getFixedFilters();\n const lf = this.to['loadDefaultField'] || 'isDefault';\n const lfValue = this.to['loadDefaultValue'] || true;\n const searchParams = {\n [lf]: lfValue,\n ...fixedFilters,\n };\n this.api.getList(searchParams)\n .subscribe({\n next: (res) => {\n // Assuming the API returns a list and you want to select the first one\n if (res && res.items && res.items.length > 0) {\n if (this.to['multiple']) {\n this.formControl.setValue(res.items.map((c) => c[vf]));\n }\n else {\n const defaultValue = res.items[0];\n this.formControl.setValue(defaultValue?.[vf]);\n }\n }\n this.loading = false;\n // this.initOnlineSelection(); // Proceed with online selection after setting the value\n },\n error: (err) => {\n console.error(\"Failed to load default value from API:\", err);\n this.loading = false;\n // this.initOnlineSelection(); // Fallback to local selection if API fails\n }\n });\n }\n // New method to handle loading the default value from the API\n afterSave(event) {\n this.onSelectionChange(event.record);\n if (this.props.afterSave) {\n this.props.afterSave(this.field, { item: event.response });\n this.cdr.detectChanges();\n }\n }\n onSelect(event) {\n if (this.props.onSelect) {\n this.props.onSelect(this.field, { item: event.value });\n this.cdr.detectChanges();\n }\n }\n onSelectionChange(val) {\n this.selectedItem = val;\n const vf = this.to['valueField'] || 'id';\n if (this.to['multiple']) {\n this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);\n }\n else {\n this.formControl.setValue(val?.[vf] ?? null);\n }\n }\n initOfflineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null)\n return;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n }\n if (withSetValue == true) {\n this.formControl.setValue(this.to['multiple']\n ? this.selectedItem.map((c) => c[vf])\n : this.selectedItem?.[vf]);\n }\n else {\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n }\n initOnlineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null || (Array.isArray(val) && val.length === 0)) {\n this.selectedItem = this.to['multiple'] ? [] : null;\n if (this.props['loadDefault'] === true) {\n this.loadDefaultValue();\n }\n return;\n }\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n // 🔑 one getList call per id, but include fixedFilters in each\n const calls = val.map((id) => this.api.getList({ ...fixedFilters, [vf]: id }).pipe(map((res) => (res?.items?.length ? res.items[0] : null))));\n forkJoin(calls)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (items) => {\n this.selectedItem = items.filter(i => i != null);\n if (withSetValue) {\n this.formControl.setValue(this.selectedItem.map((c) => c[vf]));\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load multiple selections:', err);\n this.selectedItem = [];\n this.loading = false;\n },\n });\n }\n else {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n const searchParams = { ...fixedFilters, [vf]: val };\n this.api\n .getList(searchParams)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n const item = res?.items?.[0] || null;\n this.selectedItem = item;\n if (withSetValue) {\n this.formControl.setValue(item?.[vf]);\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load selection:', err);\n this.selectedItem = null;\n this.loading = false;\n },\n });\n }\n }\n getFixedFilters() {\n const fixedFilters = this.to['fixedFilters'];\n if (typeof fixedFilters === 'function') {\n // Call with current model (and optionally field)\n return fixedFilters(this.model);\n }\n return fixedFilters || {};\n }\n getFilters() {\n let filters = this.to['filters'];\n if (typeof filters === 'function') {\n filters = filters(this.model);\n }\n if (!filters)\n return [];\n // If it's an object, return its keys\n if (!Array.isArray(filters)) {\n return Object.keys(filters);\n }\n // Already an array\n return filters;\n }\n onArrowDown(event) {\n event.preventDefault();\n // this.autoComp.show();\n this.onDropdownButtonClick();\n }\n onEscape(event) {\n this.autoComp.hide();\n }\n onAddNewClick() {\n // your logic for adding a new item\n // e.g. open dialog or emit event\n console.log('Add new item clicked');\n this.dialog.openForm(\"create\");\n }\n onDropdownButtonClick() {\n this.search({ query: '' }); // trigger your own search\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\n }\n // Called when dropdown button clicked\n onDropdownClick(event) {\n // 🚫 stop the default dropdown behavior\n event.originalEvent.preventDefault();\n event.originalEvent.stopPropagation();\n console.log('Dropdown clicked!', event);\n // ✅ your custom code here\n // e.g., force trigger search for empty query\n this.search({ query: '' });\n }\n search(event) {\n const q = event.query?.toString().toLowerCase() || '';\n const lf = this.optionLabel;\n const fixedFilters = this.getFixedFilters();\n const filters = this.getFilters();\n if (this.to['offline']) {\n this.options_ = this.to['offlineDataFn']\n ? this.to['offlineDataFn'](q)\n : this._offlineList.filter(item => item[lf]?.toString().toLowerCase().includes(q));\n setTimeout(() => this.autoComp?.show(), 0);\n }\n else {\n this.loading = true;\n this.options_ = [];\n const searchParams = {\n ...fixedFilters\n };\n // Add query to main label\n searchParams[lf] = q;\n // Set all filter keys to the search query\n filters.forEach(key => {\n searchParams[key] = q;\n });\n // ✅ استخدام listEndpoint إذا كان موجودًا، وإلا العودة إلى الافتراضي\n let listEndpoint = this.props.listEndpoint;\n if (typeof listEndpoint === 'function') {\n listEndpoint = listEndpoint(this.model);\n }\n this.api.getList(searchParams, listEndpoint)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n this.options_ = res.items ?? res ?? [];\n setTimeout(() => this.autoComp?.show(), 0);\n },\n error: () => {\n this.options_ = [];\n },\n });\n }\n }\n openCrud(mode) {\n const payload = mode === 'add' ? null : this.selectedItem;\n // Example integration:\n // const ref = this.dialog.open(CrudComponent, {\n // data: {\n // serviceName: this.to.serviceName,\n // mode,\n // record: payload\n // }\n // });\n // ref.onClose.subscribe((updated: any) => {\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\n // this.api.get(updated[this.to.valueField])\n // .subscribe(item => {\n // this.selectedItem = item;\n // this.formControl.setValue(item?.[this.to.valueField]);\n // });\n // }\n // });\n }\n getEmptyMessage() {\n if (this.loading) {\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\n }\n else if (this.options_.length === 0) {\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\n }\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\n }\n isItemSelected(item) {\n const vf = this.to['valueField'] || 'id';\n return Array.isArray(this.selectedItem) &&\n this.selectedItem.some((sel) => sel[vf] === item[vf]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, deps: [{ token: i1.BaseService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSelectorTypeComponent, isStandalone: true, selector: \"formly-generic-selector\", providers: [DialogService, BaseService], viewQueries: [{ propertyName: \"autoComp\", first: true, predicate: [\"autoComp\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], usesInheritance: true, ngImport: i0, template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: AutoCompleteModule }, { kind: \"component\", type: i3.AutoComplete, selector: \"p-autoComplete, p-autocomplete, p-auto-complete\", inputs: [\"minLength\", \"minQueryLength\", \"delay\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"readonly\", \"scrollHeight\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"autoHighlight\", \"forceSelection\", \"type\", \"autoZIndex\", \"baseZIndex\", \"ariaLabel\", \"dropdownAriaLabel\", \"ariaLabelledBy\", \"dropdownIcon\", \"unique\", \"group\", \"completeOnFocus\", \"showClear\", \"dropdown\", \"showEmptyMessage\", \"dropdownMode\", \"multiple\", \"tabindex\", \"dataKey\", \"emptyMessage\", \"showTransitionOptions\", \"hideTransitionOptions\", \"autofocus\", \"autocomplete\", \"optionGroupChildren\", \"optionGroupLabel\", \"overlayOptions\", \"suggestions\", \"optionLabel\", \"optionValue\", \"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"selectOnFocus\", \"searchLocale\", \"optionDisabled\", \"focusOnHover\", \"typeahead\", \"appendTo\"], outputs: [\"completeMethod\", \"onSelect\", \"onUnselect\", \"onFocus\", \"onBlur\", \"onDropdownClick\", \"onClear\", \"onKeyUp\", \"onShow\", \"onHide\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i5.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i6.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"directive\", type: FormlyAttributes, selector: \"[formlyAttributes]\", inputs: [\"formlyAttributes\", \"id\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i7.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-generic-selector',\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\n providers: [DialogService, BaseService],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n CommonModule,\n InputGroupModule,\n InputGroupAddonModule,\n FormlyAttributes,\n TranslateModule,\n AutoComplete,\n CheckboxModule,\n ButtonModule,\n GenericDialogComponent\n ]\n }]\n }], ctorParameters: () => [{ type: i1.BaseService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { autoComp: [{\n type: ViewChild,\n args: ['autoComp']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztB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YSxFQUFDLFdBQVcsQ0FBQywwT0F0RTVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRVQsMkRBR0MsV0FBVyw4VkFDWCxtQkFBbUIsOEJBQ25CLGtCQUFrQixzeENBQ2xCLFlBQVksOEJBQ1osZ0JBQWdCLHlKQUNoQixxQkFBcUIsb0tBQ3JCLGdCQUFnQixrR0FDaEIsZUFBZSw4QkFFZixjQUFjLDhCQUNkLFlBQVksa2JBQ1osc0JBQXNCOzsyRkFHWiw0QkFBNEI7a0JBeEZ6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUVUO29CQUNELFNBQVMsRUFBRSxDQUFDLGFBQWEsRUFBQyxXQUFXLENBQUM7b0JBQ3RDLE9BQU8sRUFBQzt3QkFDTixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osc0JBQXNCO3FCQUN6QjtpQkFDQTt1SUFFd0IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUNBLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZpZWxkVHlwZSwgRm9ybWx5QXR0cmlidXRlcywgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEF1dG9Db21wbGV0ZU1vZHVsZSwgQXV0b0NvbXBsZXRlIH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGdyb3VwJztcclxuaW1wb3J0IHsgSW5wdXRHcm91cEFkZG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGdyb3VwYWRkb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L3ByaW1lbmcvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHZW5lcmljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtZGlhbG9nJztcclxuXHJcbmludGVyZmFjZSBHZW5lcmljU2VsZWN0b3JQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMvKiAsIEZvcm1seUZpZWxkU2VsZWN0UHJvcHMgKi8ge1xyXG4gIC8vIGFwcGVuZFRvPzogU2VsZWN0WydhcHBlbmRUbyddO1xyXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgbGlzdEVuZHBvaW50Pzogc3RyaW5nIHwgKChtb2RlbDogYW55KSA9PiBzdHJpbmcpO1xyXG4gIGxvYWREZWZhdWx0RmllbGQ/OiBzdHJpbmc7XHJcbiAgbG9hZERlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdD86IGJvb2xlYW47XHJcblxyXG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XHJcbiAgbGFiZWxGaWVsZEVuPzogc3RyaW5nO1xyXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XHJcbiAgdXNlTXVsdGlMYW5nPzogYm9vbGVhbjtcclxuXHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG5cclxuICBkaXNwbGF5PzogYm9vbGVhbjtcclxuICBvZmZsaW5lPzogYm9vbGVhbjtcclxuXHJcbiAgbG9hZFNhdmVkPzogYm9vbGVhbjtcclxuICBsb2FkU2F2ZWRGaWVsZD86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBTdGF0aWMgb2ZmbGluZSBpdGVtcyAoYXJyYXkgb2Ygb2JqZWN0cykgKi9cclxuICBvZmZsaW5lSXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLyoqIEFzeW5jIG9mZmxpbmUgaXRlbXMgKG9ic2VydmFibGUpICovXHJcbiAgb2ZmbGluZUl0ZW1zJD86IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICAvKiogRnVuY3Rpb24tYmFzZWQgZmlsdGVyIGZvciBvZmZsaW5lIGl0ZW1zICovXHJcbiAgb25TZWxlY3Q/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBldmVudD86IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgb2ZmbGluZURhdGFGbj86IChxdWVyeT86IHN0cmluZykgPT4gYW55W107XHJcbiAgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmdbXTtcclxuICAgZml4ZWRGaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgIGRlZmF1bHRWYWx1ZT86IGFueTsgICAgICAgLy8gaWQg2KPZiCBhcnJheSBvZiBpZHNcclxuICBkZWZhdWx0SXRlbT86IGFueTsgICAgICAgIC8vINin2YTZg9in2KbZhiDZg9in2YXZhCAob2JqZWN0KSDYpdiw2Kcg2LnZhtiv2YMg2KzYp9mH2LJcclxuXHJcbiAgdmlld1Blcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGVkaXRQZXJtaXNzaW9uTmFtZT86IHN0cmluZztcclxuICBhZGRQZXJtaXNzaW9uTmFtZT86IHN0cmluZztcclxuICBpZEZpZWxkPzogc3RyaW5nO1xyXG4gIGRpYWxvZ0Rpc3BsYXlNb2RlPzogIHwgJ2RyYXdlcidcclxuICAgIHwgJ2RpYWxvZydcclxuICAgIHwgJ3JvdXRlJ1xyXG4gICAgfCAnaW5saW5lJ1xyXG4gICAgfCBQYXJ0aWFsPFxyXG4gICAgICBSZWNvcmQ8XHJcbiAgICAgICAgJ2FkZCcgfCAnZWRpdCcgfCAndmlldycsXHJcbiAgICAgICAgJ2RyYXdlcicgfCAnZGlhbG9nJyB8ICdyb3V0ZScgfCAnaW5saW5lJ1xyXG4gICAgICA+PjtcclxuICBjYW5BZGQ/OiBib29sZWFuO1xyXG4gIGNhbkxvb2t1cD86IGJvb2xlYW47XHJcbiAgZm9ybUZpZWxkcz86ICBGb3JtbHlGaWVsZENvbmZpZ1tdO1xyXG4gIGFmdGVyU2F2ZT86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGV2ZW50PzogYW55KSA9PiB2b2lkO1xyXG5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktZ2VuZXJpYy1zZWxlY3RvcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICA8IS0tIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6IHByb3BzLmRpc3BsYXkgPyAnYmxvY2snOiAnbm9uZSd9XCIgLS0+XHJcbiA8cC1pbnB1dEdyb3VwICAgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICA8cC1hdXRvQ29tcGxldGVcclxuICAgICNhdXRvQ29tcFxyXG4gICAgW25nTW9kZWxdPVwic2VsZWN0ZWRJdGVtXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW2Zvcm1seUF0dHJpYnV0ZXNdPVwiZmllbGRcIlxyXG4gICAgW3N1Z2dlc3Rpb25zXT1cIm9wdGlvbnNfXCJcclxuICAgIChjb21wbGV0ZU1ldGhvZCk9XCJzZWFyY2goJGV2ZW50KVwiXHJcbiAgICBbbXVsdGlwbGVdPVwidG9bJ211bHRpcGxlJ11cIlxyXG4gICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbkxhYmVsXCJcclxuICAgIFtkcm9wZG93bl09XCJmYWxzZVwiXHJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwidHJ1ZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiKHByb3BzWydwbGFjZWhvbGRlciddID8/ICcnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCJcclxuICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICBjbGFzcz1cInctZnVsbCByb3VuZGVkLW5vbmVcIlxyXG4gICAgW3Nob3dFbXB0eU1lc3NhZ2VdPVwidHJ1ZVwiXHJcbiAgICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXHJcbiAgICBlbXB0eU1lc3NhZ2U9XCJ7eyBnZXRFbXB0eU1lc3NhZ2UoKSB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIicwbXMnXCJcclxuICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG5cclxuICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwib25BcnJvd0Rvd24oJGV2ZW50KVwiXHJcbiAgKGtleWRvd24uZXNjYXBlKT1cIm9uRXNjYXBlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICA8c3Bhbj57eyBnZXRQcmltYXJ5TGFiZWwoaXRlbSkgfX08L3NwYW4+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC1hdXRvQ29tcGxldGU+XHJcblxyXG4gIDxwLWlucHV0R3JvdXBBZGRvbj5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiEhcHJvcHMuZGlzYWJsZWQgfHwgbG9hZGluZ1wiXHJcbiAgICAgIFtpY29uXT1cImxvYWRpbmcgPyAncGkgcGktc3Bpbm5lciBwaS1zcGluJyA6ICdwaSBwaS1jaGV2cm9uLWRvd24nXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25CdXR0b25DbGljaygpXCJcclxuICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAvPlxyXG4gIDwvcC1pbnB1dEdyb3VwQWRkb24+XHJcbiAgPCEtLSBBZGQgbmV3IGJ1dHRvbiAtLT5cclxuICAgQGlmIChwcm9wcy5jYW5BZGQgJiYgcHJvcHMuZm9ybUZpZWxkcykge1xyXG4gIDxwLWlucHV0R3JvdXBBZGRvbj5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiEhcHJvcHMuZGlzYWJsZWRcIlxyXG4gICAgICBpY29uPVwicGkgcGktcGx1c1wiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZE5ld0NsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInByaW1hcnlcIiAvPlxyXG4gIDwvcC1pbnB1dEdyb3VwQWRkb24+XHJcbiAgIH1cclxuPC9wLWlucHV0R3JvdXA+XHJcblxyXG48IS0tIFttb2RlbF09XCJtb2RlbFwiIC0tPlxyXG4gIDxhcHAtZ2VuZXJpYy1kaWFsb2dcclxuICAgICNkaWFsb2dcclxuICAgIFtmb3JtRmllbGRzXT1cInByb3BzLmZvcm1GaWVsZHMgPz8gW11cIlxyXG4gICAgW2FwaU5hbWVdPVwicHJvcHMuc2VydmljZU5hbWVcIlxyXG4gICAgW2lkRmllbGRdPVwicHJvcHMuaWRGaWVsZCA/PydpZCdcIlxyXG4gICAgW2Rpc3BsYXlNb2RlXT1cInByb3BzLmRpYWxvZ0Rpc3BsYXlNb2RlID8/ICdkaWFsb2cnXCJcclxuICAgIChhZnRlclNhdmUpPVwiYWZ0ZXJTYXZlKCRldmVudClcIlxyXG4gID5cclxuICA8L2FwcC1nZW5lcmljLWRpYWxvZz5cclxuXHJcblxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbRGlhbG9nU2VydmljZSxCYXNlU2VydmljZV0sXHJcbiAgaW1wb3J0czpbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBBdXRvQ29tcGxldGVNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwTW9kdWxlLFxyXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxyXG4gICAgRm9ybWx5QXR0cmlidXRlcyxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgR2VuZXJpY0RpYWxvZ0NvbXBvbmVudFxyXG5dXHJcbn0pXHJcbmV4cG9ydCAgY2xhc3MgR2VuZXJpY1NlbGVjdG9yVHlwZUNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8R2VuZXJpY1NlbGVjdG9yUHJvcHM+PiBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2F1dG9Db21wJykgYXV0b0NvbXAhOiBBdXRvQ29tcGxldGU7XHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nJykgZGlhbG9nITogR2VuZXJpY0RpYWxvZ0NvbXBvbmVudDtcclxuICBvcHRpb25zXzogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEl0ZW06IGFueTtcclxuXHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX29mZmxpbmVMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZT0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICBhcGk6IEJhc2VTZXJ2aWNlfGFueTtcclxuIHByaXZhdGUgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247IC8vIEFkZCBhIHN1YnNjcmlwdGlvbiB0byBtYW5hZ2UgdGhlIG9ic2VydmFibGVcclxuXHJcbmdldCBvcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gIGlmKHRoaXMudG8udXNlTXVsdGlMYW5nID09IHRydWUpe1xyXG4gICAgIGlmKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyA9PSAnZW4nKXtcclxuICAgICByZXR1cm4gdGhpcy50bz8ubGFiZWxGaWVsZEVuIHx8ICduYW1lJztcclxuICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnRvPy5sYWJlbEZpZWxkIHx8ICduYW1lJztcclxuICB9XHJcbiAgcmV0dXJuIHRoaXMudG8/LmxhYmVsRmllbGQgfHwgJ25hbWUnO1xyXG59XHJcblxyXG5wcml2YXRlIGlzTnVsbE9yRW1wdHkodmFsOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gJyc7XHJcbn1cclxuXHJcbmdldFByaW1hcnlMYWJlbChpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGZpZWxkcyA9IFtcclxuICAgIHRoaXMub3B0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlZCBmaWVsZCBuYW1lIGZyb20gZ2V0dGVyXHJcbiAgICB0aGlzLnRvLmxhYmVsRmllbGQgfHwgJ25hbWUnLFxyXG4gICAgdGhpcy50by5sYWJlbEZpZWxkRW4gfHwgJ25hbWUnXHJcbiAgXTtcclxuXHJcbiAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xyXG4gICAgY29uc3QgdiA9IGl0ZW1bZl07XHJcbiAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eSh2KSkge1xyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAnJztcclxufVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmM6IEJhc2VTZXJ2aWNlLHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgfVxyXG5cclxuICAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFwaSA9IHRoaXMuc3ZjO1xyXG4gICAgY29uc3QgdG8gPSB0aGlzLnByb3BzO1xyXG4gICAgdGhpcy5hcGkuYXBpTmFtZSA9IHRvWydzZXJ2aWNlTmFtZSddO1xyXG5cclxuICAgIGlmICh0b1snb2ZmbGluZSddKSB7XHJcbiAgICAgIGlmICh0b1snb2ZmbGluZURhdGFGbiddKSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZURhdGFGbiddKCk7XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRvWydvZmZsaW5lSXRlbXMkJ10pIHtcclxuICAgICAgICB0b1snb2ZmbGluZUl0ZW1zJCddLnN1YnNjcmliZSgobGlzdDogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gbGlzdDtcclxuICAgICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lSXRlbXMnXSB8fCBbXTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgaWYgKHRoaXMucHJvcHMubG9hZFNhdmVkICYmICF0aGlzLnByb3BzLm11bHRpcGxlICYmIHRoaXMucHJvcHMubG9hZFNhdmVkRmllbGQgJiYgdGhpcy5wcm9wcy52YWx1ZUZpZWxkKSB7XHJcbiAgICAgICAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgICAgICAgY29uc3QgbGYgPSB0aGlzLm9wdGlvbkxhYmVsO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBbdmZdOnRoaXMuZm9ybUNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgIFtsZl06dGhpcy5tb2RlbFt0aGlzLnByb3BzLmxvYWRTYXZlZEZpZWxkXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICAgIGVsc2V7XHJcblxyXG4gICAgICAgICB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gZm9ybUNvbnRyb2wgdmFsdWUgY2hhbmdlc1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhpcyB0YXAgb3BlcmF0b3IgaXMgYSBnb29kIHBsYWNlIHRvIHJ1biBzaWRlIGVmZmVjdHNcclxuICAgICAgICAgIC8vIGxpa2UgY2FsbGluZyB5b3VyIGNoYW5nZSBoYW5kbGVyIGFmdGVyIGEgdmFsdWUgY2hhbmdlcy5cclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgaWYgKHRvWydvZmZsaW5lJ10pIHtcclxuICAgICAgaWYgKHRvWydvZmZsaW5lRGF0YUZuJ10pIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lRGF0YUZuJ10oKTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfSBlbHNlIGlmICh0b1snb2ZmbGluZUl0ZW1zJCddKSB7XHJcbiAgICAgICAgdG9bJ29mZmxpbmVJdGVtcyQnXS5zdWJzY3JpYmUoKGxpc3Q6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lSXRlbXMnXSB8fCBbXTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVtZW1iZXIgdG8gdW5zdWJzY3JpYmUgdG8gcHJldmVudCBtZW1vcnkgbGVha3MhXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5wcml2YXRlIGxvYWREZWZhdWx0VmFsdWUoKSB7XHJcbiAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG4gICAgIGNvbnN0IGxmID0gdGhpcy50b1snbG9hZERlZmF1bHRGaWVsZCddIHx8ICdpc0RlZmF1bHQnO1xyXG4gICAgIGNvbnN0IGxmVmFsdWUgPSB0aGlzLnRvWydsb2FkRGVmYXVsdFZhbHVlJ10gfHwgdHJ1ZTtcclxuY29uc3Qgc2VhcmNoUGFyYW1zID0ge1xyXG4gICAgIFtsZl06IGxmVmFsdWUsXHJcbiAgICAgIC4uLmZpeGVkRmlsdGVycyxcclxuICAgIH07XHJcbiAgdGhpcy5hcGkuZ2V0TGlzdChzZWFyY2hQYXJhbXMpXHJcbiAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gQXNzdW1pbmcgdGhlIEFQSSByZXR1cm5zIGEgbGlzdCBhbmQgeW91IHdhbnQgdG8gc2VsZWN0IHRoZSBmaXJzdCBvbmVcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5pdGVtcyAmJiByZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10pe1xyXG4gICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUocmVzLml0ZW1zLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHJlcy5pdGVtc1swXTtcclxuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGVmYXVsdFZhbHVlPy5bdmZdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKCk7IC8vIFByb2NlZWQgd2l0aCBvbmxpbmUgc2VsZWN0aW9uIGFmdGVyIHNldHRpbmcgdGhlIHZhbHVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgZGVmYXVsdCB2YWx1ZSBmcm9tIEFQSTpcIiwgZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oKTsgLy8gRmFsbGJhY2sgdG8gbG9jYWwgc2VsZWN0aW9uIGlmIEFQSSBmYWlsc1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4gICAgLy8gTmV3IG1ldGhvZCB0byBoYW5kbGUgbG9hZGluZyB0aGUgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBBUElcclxuXHJcbiAgICBhZnRlclNhdmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50LnJlY29yZCk7XHJcbiAgIGlmICh0aGlzLnByb3BzLmFmdGVyU2F2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmFmdGVyU2F2ZSh0aGlzLmZpZWxkLCB7IGl0ZW06IGV2ZW50LnJlc3BvbnNlIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG59XHJcblxyXG4gICAgb25TZWxlY3QoZXZlbnQ6IGFueSkge1xyXG5cclxuICAgaWYgKHRoaXMucHJvcHMub25TZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdCh0aGlzLmZpZWxkLCB7IGl0ZW06IGV2ZW50LnZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG59XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbDogYW55KSB7XHJcbiAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB2YWw7XHJcblxyXG4gIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gIGlmICh0aGlzLnRvWydtdWx0aXBsZSddKSB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKFxyXG4gICAgICBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubWFwKChjOiBhbnkpID0+IGNbdmZdKSA6IFtdXHJcbiAgICApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbD8uW3ZmXSA/PyBudWxsKTtcclxuICB9XHJcbn1cclxuICBwcml2YXRlIGluaXRPZmZsaW5lU2VsZWN0aW9uKHdpdGhTZXRWYWx1ZT10cnVlKSB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuXHJcbiAgICBpZiAodmFsID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSAmJiBBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgIHZhbC5pbmNsdWRlcyhpdGVtW3ZmXSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmluZChpdGVtID0+IGl0ZW1bdmZdID09PSB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHdpdGhTZXRWYWx1ZSA9PSB0cnVlKXtcclxuXHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKFxyXG4gICAgICB0aGlzLnRvWydtdWx0aXBsZSddXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbS5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pXHJcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkSXRlbT8uW3ZmXVxyXG4gICAgKTtcclxuICB9XHJcbiAgZWxzZXtcclxuICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdE9ubGluZVNlbGVjdGlvbih3aXRoU2V0VmFsdWUgPSB0cnVlKSB7XHJcbiAgY29uc3QgdmFsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICBpZiAodmFsID09IG51bGwgfHwgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnRvWydtdWx0aXBsZSddID8gW10gOiBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3BzWydsb2FkRGVmYXVsdCddID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuXHJcbiAgICAvLyDwn5SRIG9uZSBnZXRMaXN0IGNhbGwgcGVyIGlkLCBidXQgaW5jbHVkZSBmaXhlZEZpbHRlcnMgaW4gZWFjaFxyXG4gICAgY29uc3QgY2FsbHMgPSB2YWwubWFwKChpZDogYW55KSA9PlxyXG4gICAgICB0aGlzLmFwaS5nZXRMaXN0KHsgLi4uZml4ZWRGaWx0ZXJzLCBbdmZdOiBpZCB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IChyZXM/Lml0ZW1zPy5sZW5ndGggPyByZXMuaXRlbXNbMF0gOiBudWxsKSlcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3JrSm9pbihjYWxscylcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbXMuZmlsdGVyKGkgPT4gaSAhPSBudWxsKTtcclxuXHJcbiAgICAgICAgICBpZiAod2l0aFNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgbXVsdGlwbGUgc2VsZWN0aW9uczonLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB7IC4uLmZpeGVkRmlsdGVycywgW3ZmXTogdmFsIH07XHJcblxyXG4gICAgdGhpcy5hcGlcclxuICAgICAgLmdldExpc3Qoc2VhcmNoUGFyYW1zKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gcmVzPy5pdGVtcz8uWzBdIHx8IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcblxyXG4gICAgICAgICAgaWYgKHdpdGhTZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGl0ZW0/Llt2Zl0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHNlbGVjdGlvbjonLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZ2V0Rml4ZWRGaWx0ZXJzKCk6IGFueSB7XHJcbiAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy50b1snZml4ZWRGaWx0ZXJzJ107XHJcblxyXG4gIGlmICh0eXBlb2YgZml4ZWRGaWx0ZXJzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAvLyBDYWxsIHdpdGggY3VycmVudCBtb2RlbCAoYW5kIG9wdGlvbmFsbHkgZmllbGQpXHJcbiAgICByZXR1cm4gZml4ZWRGaWx0ZXJzKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpeGVkRmlsdGVycyB8fCB7fTtcclxufVxyXG5nZXRGaWx0ZXJzKCk6IHN0cmluZ1tdIHtcclxuICBsZXQgZmlsdGVycyA9IHRoaXMudG9bJ2ZpbHRlcnMnXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBmaWx0ZXJzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBmaWx0ZXJzID0gZmlsdGVycyh0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIGlmICghZmlsdGVycykgcmV0dXJuIFtdO1xyXG5cclxuICAvLyBJZiBpdCdzIGFuIG9iamVjdCwgcmV0dXJuIGl0cyBrZXlzXHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICAvLyBBbHJlYWR5IGFuIGFycmF5XHJcbiAgcmV0dXJuIGZpbHRlcnM7XHJcbn1cclxub25BcnJvd0Rvd24oZXZlbnQ6IGFueSkge1xyXG4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vIHRoaXMuYXV0b0NvbXAuc2hvdygpO1xyXG50aGlzLm9uRHJvcGRvd25CdXR0b25DbGljaygpO1xyXG59XHJcblxyXG5vbkVzY2FwZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5hdXRvQ29tcC5oaWRlKCk7XHJcblxyXG59XHJcbm9uQWRkTmV3Q2xpY2soKSB7XHJcbiAgLy8geW91ciBsb2dpYyBmb3IgYWRkaW5nIGEgbmV3IGl0ZW1cclxuICAvLyBlLmcuIG9wZW4gZGlhbG9nIG9yIGVtaXQgZXZlbnRcclxuICBjb25zb2xlLmxvZygnQWRkIG5ldyBpdGVtIGNsaWNrZWQnKTtcclxuICB0aGlzLmRpYWxvZy5vcGVuRm9ybShcImNyZWF0ZVwiKTtcclxufVxyXG5vbkRyb3Bkb3duQnV0dG9uQ2xpY2soKSB7XHJcbiAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7ICAgLy8gdHJpZ2dlciB5b3VyIG93biBzZWFyY2hcclxuICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXAuc2hvdygpLCAwKTsgLy8gZm9yY2UgZHJvcGRvd24gdG8gb3BlblxyXG59XHJcbi8vIENhbGxlZCB3aGVuIGRyb3Bkb3duIGJ1dHRvbiBjbGlja2VkXHJcbiAgb25Ecm9wZG93bkNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIPCfmqsgc3RvcCB0aGUgZGVmYXVsdCBkcm9wZG93biBiZWhhdmlvclxyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdEcm9wZG93biBjbGlja2VkIScsIGV2ZW50KTtcclxuICAgIC8vIOKchSB5b3VyIGN1c3RvbSBjb2RlIGhlcmVcclxuICAgIC8vIGUuZy4sIGZvcmNlIHRyaWdnZXIgc2VhcmNoIGZvciBlbXB0eSBxdWVyeVxyXG4gICAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7XHJcbiAgfVxyXG5cclxuc2VhcmNoKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSkge1xyXG4gIGNvbnN0IHEgPSBldmVudC5xdWVyeT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IGxmID0gdGhpcy5vcHRpb25MYWJlbDtcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG4gIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnMoKTtcclxuXHJcbiAgaWYgKHRoaXMudG9bJ29mZmxpbmUnXSkge1xyXG4gICAgdGhpcy5vcHRpb25zXyA9IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXVxyXG4gICAgICA/IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXShxKVxyXG4gICAgICA6IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICBpdGVtW2xmXT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcblxyXG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgIC4uLmZpeGVkRmlsdGVyc1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgcXVlcnkgdG8gbWFpbiBsYWJlbFxyXG4gICAgc2VhcmNoUGFyYW1zW2xmXSA9IHE7XHJcblxyXG4gICAgLy8gU2V0IGFsbCBmaWx0ZXIga2V5cyB0byB0aGUgc2VhcmNoIHF1ZXJ5XHJcbiAgICBmaWx0ZXJzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgc2VhcmNoUGFyYW1zW2tleV0gPSBxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgICAvLyDinIUg2KfYs9iq2K7Yr9in2YUgbGlzdEVuZHBvaW50INil2LDYpyDZg9in2YYg2YXZiNis2YjYr9mL2KfYjCDZiNil2YTYpyDYp9mE2LnZiNiv2Kkg2KXZhNmJINin2YTYp9mB2KrYsdin2LbZilxyXG4gICAgbGV0IGxpc3RFbmRwb2ludCA9IHRoaXMucHJvcHMubGlzdEVuZHBvaW50O1xyXG4gICBpZiAodHlwZW9mIGxpc3RFbmRwb2ludCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgbGlzdEVuZHBvaW50ID0gbGlzdEVuZHBvaW50KHRoaXMubW9kZWwpO1xyXG4gICB9XHJcblxyXG4gICAgdGhpcy5hcGkuZ2V0TGlzdChzZWFyY2hQYXJhbXMgLCBsaXN0RW5kcG9pbnQpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9uc18gPSByZXMuaXRlbXMgPz8gcmVzID8/IFtdO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9Db21wPy5zaG93KCksIDApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3B0aW9uc18gPSBbXTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4gIG9wZW5DcnVkKG1vZGU6ICdhZGQnIHwgJ2VkaXQnIHwgJ2luZm8nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gbW9kZSA9PT0gJ2FkZCcgPyBudWxsIDogdGhpcy5zZWxlY3RlZEl0ZW07XHJcblxyXG4gICAgLy8gRXhhbXBsZSBpbnRlZ3JhdGlvbjpcclxuICAgIC8vIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ3J1ZENvbXBvbmVudCwge1xyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgc2VydmljZU5hbWU6IHRoaXMudG8uc2VydmljZU5hbWUsXHJcbiAgICAvLyAgICAgbW9kZSxcclxuICAgIC8vICAgICByZWNvcmQ6IHBheWxvYWRcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZWYub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudG8ubXVsdGlwbGUgJiYgdXBkYXRlZD8uW3RoaXMudG8udmFsdWVGaWVsZF0pIHtcclxuICAgIC8vICAgICB0aGlzLmFwaS5nZXQodXBkYXRlZFt0aGlzLnRvLnZhbHVlRmllbGRdKVxyXG4gICAgLy8gICAgICAgLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGl0ZW0/Llt0aGlzLnRvLnZhbHVlRmllbGRdKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFbXB0eU1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuICdMT0FESU5HX0RBVEFfTUVTU0FHRSc7IC8vINmF2YHYqtin2K0g2KrYsdis2YXYqSDZhNmAIFwi2KzYp9ix2Yog2KrYrdmF2YrZhCDYp9mE2KjZitin2YbYp9iqLi4uXCJcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zXy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICdOT19SRVNVTFRTX0ZPVU5EJzsgLy8g2YXZgdiq2KfYrSDYqtix2KzZhdipINmE2YAgXCLZhNinINiq2YjYrNivINmG2KrYp9im2Kwg2YXYt9in2KjZgtipLlwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7IC8vINmE2Kcg2KrZj9i52LHYtiDYsdiz2KfZhNipINil2LDYpyDZg9in2YbYqiDZh9mG2KfZgyDZhtiq2KfYptisXHJcbiAgfVxyXG5cclxuaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbSkgJiZcclxuICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uc29tZSgoc2VsOiBhbnkpID0+IHNlbFt2Zl0gPT09IGl0ZW1bdmZdKTtcclxufVxyXG5cclxuXHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlbGVjdG9yL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-selector.mjs","sources":["../tmp-esm2022/generic-selector/lib/generic-selector-module.js","../tmp-esm2022/generic-selector/lib/generic-selector.component.js","../tmp-esm2022/generic-selector/elite.framework-ng.ui.core-generic-selector.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSelectorModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3ItbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8scUJBQXFCO3VHQUFyQixxQkFBcUI7d0dBQXJCLHFCQUFxQixZQUZ0QixZQUFZO3dHQUVYLHFCQUFxQixZQUZ0QixZQUFZOzsyRkFFWCxxQkFBcUI7a0JBSGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlbGVjdG9yTW9kdWxlIHt9XG4iXX0=","import { ChangeDetectorRef, Component, Injector, ViewChild, inject } from '@angular/core';\nimport { FieldType, FormlyAttributes } from '@ngx-formly/core';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { forkJoin } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ButtonModule } from 'primeng/button';\nimport { BaseService, QueryParser } from '@elite.framework/ng.core/services';\nimport { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@elite.framework/ng.core/services\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/autocomplete\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputgroup\";\nimport * as i6 from \"primeng/inputgroupaddon\";\nimport * as i7 from \"primeng/button\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericSelectorTypeComponent extends FieldType {\n svc;\n injector;\n cdr;\n autoComp;\n dialog;\n options_ = [];\n selectedItem;\n loading = false;\n _offlineList = [];\n translateService = inject(TranslateService);\n api;\n valueChangeSubscription; // Add a subscription to manage the observable\n get optionLabel() {\n if (this.to.useMultiLang == true) {\n if (this.translateService.currentLang == 'en') {\n return this.to?.labelFieldEn || 'name';\n }\n return this.to?.labelField || 'name';\n }\n return this.to?.labelField || 'name';\n }\n isNullOrEmpty(val) {\n return val === null || val === undefined || val === '';\n }\n getPrimaryLabel(item) {\n const fields = [\n this.optionLabel, // resolved field name from getter\n this.to.labelField || 'name',\n this.to.labelFieldEn || 'name'\n ];\n for (const f of fields) {\n const v = item[f];\n if (!this.isNullOrEmpty(v)) {\n return v;\n }\n }\n return '';\n }\n constructor(svc, injector, cdr) {\n super();\n this.svc = svc;\n this.injector = injector;\n this.cdr = cdr;\n }\n ngOnInit() {\n this.api = this.svc;\n const to = this.props;\n this.api.apiName = to['serviceName'];\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection();\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection();\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection();\n }\n }\n else {\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\n const vf = this.to['valueField'] || 'id';\n const lf = this.optionLabel;\n this.selectedItem =\n {\n [vf]: this.formControl.value,\n [lf]: this.model[this.props.loadSavedField],\n };\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n else {\n this.initOnlineSelection();\n }\n }\n // Subscribe to formControl value changes\n this.valueChangeSubscription = this.formControl.valueChanges\n .subscribe(() => {\n // This tap operator is a good place to run side effects\n // like calling your change handler after a value changes.\n // this.selectedItem = this.formControl.value;\n if (this.props.change) {\n if (to['offline']) {\n if (to['offlineDataFn']) {\n this._offlineList = to['offlineDataFn']();\n this.initOfflineSelection(false);\n }\n else if (to['offlineItems$']) {\n to['offlineItems$'].subscribe((list) => {\n this._offlineList = list;\n this.initOfflineSelection(false);\n });\n }\n else {\n this._offlineList = to['offlineItems'] || [];\n this.initOfflineSelection(false);\n }\n }\n else {\n this.initOnlineSelection(false);\n }\n }\n });\n }\n // Remember to unsubscribe to prevent memory leaks!\n ngOnDestroy() {\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n loadDefaultValue() {\n this.loading = true;\n const vf = this.to['valueField'] || 'id';\n const fixedFilters = this.getFixedFilters();\n const lf = this.to['loadDefaultField'] || 'isDefault';\n const lfValue = this.to['loadDefaultValue'] || true;\n const searchParams = {\n [lf]: lfValue,\n ...fixedFilters,\n };\n this.api.getList(searchParams)\n .subscribe({\n next: (res) => {\n // Assuming the API returns a list and you want to select the first one\n if (res && res.items && res.items.length > 0) {\n if (this.to['multiple']) {\n this.formControl.setValue(res.items.map((c) => c[vf]));\n }\n else {\n const defaultValue = res.items[0];\n this.formControl.setValue(defaultValue?.[vf]);\n }\n }\n this.loading = false;\n // this.initOnlineSelection(); // Proceed with online selection after setting the value\n },\n error: (err) => {\n console.error(\"Failed to load default value from API:\", err);\n this.loading = false;\n // this.initOnlineSelection(); // Fallback to local selection if API fails\n }\n });\n }\n // New method to handle loading the default value from the API\n afterSave(event) {\n this.onSelectionChange(event.record);\n if (this.props.afterSave) {\n this.props.afterSave(this.field, { item: event.response });\n this.cdr.detectChanges();\n }\n }\n onSelect(event) {\n if (this.props.onSelect) {\n this.props.onSelect(this.field, { item: event.value });\n this.cdr.detectChanges();\n }\n }\n onSelectionChange(val) {\n const vf = this.to['valueField'] || 'id';\n if (this.to['offline']) {\n // this.selectedItem = val;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n this.formControl.setValue(Array.isArray(this.selectedItem) ? this.selectedItem.map((c) => c[vf]) : []);\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\n }\n }\n else {\n this.selectedItem = val;\n if (this.to['multiple']) {\n this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);\n }\n else {\n this.formControl.setValue(val?.[vf] ?? null);\n }\n }\n }\n initOfflineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null)\n return;\n if (this.to['multiple'] && Array.isArray(val)) {\n this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));\n }\n else {\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\n }\n if (withSetValue == true) {\n this.formControl.setValue(this.to['multiple']\n ? this.selectedItem.map((c) => c[vf])\n : this.selectedItem?.[vf]);\n }\n else {\n if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n this.cdr.detectChanges();\n }\n }\n }\n initOnlineSelection(withSetValue = true) {\n const val = this.formControl.value;\n const vf = this.to['valueField'] || 'id';\n if (val == null || (Array.isArray(val) && val.length === 0)) {\n this.selectedItem = this.to['multiple'] ? [] : null;\n if (this.props['loadDefault'] === true) {\n this.loadDefaultValue();\n }\n return;\n }\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n // 🔑 one getList call per id, but include fixedFilters in each\n const calls = val.map((id) => this.api.getList({ ...fixedFilters, [vf]: id }).pipe(map((res) => (res?.items?.length ? res.items[0] : null))));\n forkJoin(calls)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (items) => {\n this.selectedItem = items.filter(i => i != null);\n if (withSetValue) {\n this.formControl.setValue(this.selectedItem.map((c) => c[vf]));\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load multiple selections:', err);\n this.selectedItem = [];\n this.loading = false;\n },\n });\n }\n else {\n this.loading = true;\n const fixedFilters = this.getFixedFilters();\n const searchParams = { ...fixedFilters, [vf]: val };\n this.api\n .getList(searchParams)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n const item = res?.items?.[0] || null;\n this.selectedItem = item;\n if (withSetValue) {\n this.formControl.setValue(item?.[vf]);\n }\n else if (this.props.change) {\n this.props.change(this.field, { item: this.selectedItem });\n }\n this.cdr.detectChanges();\n },\n error: (err) => {\n console.error('Failed to load selection:', err);\n this.selectedItem = null;\n this.loading = false;\n },\n });\n }\n }\n getFixedFilters() {\n const fixedFilters = this.to['fixedFilters'];\n if (typeof fixedFilters === 'function') {\n // Call with current model (and optionally field)\n return fixedFilters(this.model);\n }\n return fixedFilters || {};\n }\n onArrowDown(event) {\n event.preventDefault();\n // this.autoComp.show();\n this.onDropdownButtonClick();\n }\n onEscape(event) {\n this.autoComp.hide();\n }\n onAddNewClick() {\n // your logic for adding a new item\n // e.g. open dialog or emit event\n console.log('Add new item clicked');\n this.dialog.openForm(\"create\");\n }\n onDropdownButtonClick() {\n this.search({ query: '' }); // trigger your own search\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\n }\n // Called when dropdown button clicked\n onDropdownClick(event) {\n // 🚫 stop the default dropdown behavior\n event.originalEvent.preventDefault();\n event.originalEvent.stopPropagation();\n console.log('Dropdown clicked!', event);\n // ✅ your custom code here\n // e.g., force trigger search for empty query\n this.search({ query: '' });\n }\n search(event) {\n const q = event.query?.toString().toLowerCase() || '';\n const lf = this.optionLabel;\n const fixedFilters = this.getFixedFilters();\n if (this.to['offline']) {\n this.options_ = this.to['offlineDataFn']\n ? this.to['offlineDataFn'](q)\n : this._offlineList.filter(item => item[lf]?.toString().toLowerCase().includes(q));\n setTimeout(() => this.autoComp?.show(), 0);\n }\n else {\n this.loading = true;\n this.options_ = [];\n // Build QueryParameters\n const queryParams = {\n filters: [],\n orderBy: [],\n groupBy: []\n };\n // Handle main search and fixed filters\n if (!this.to['filters']) {\n // Create a group for main search condition\n const mainGroup = {\n logicalOperator: 'and',\n conditions: [\n {\n field: lf,\n operator: 'contains',\n value: q\n }\n ]\n };\n // Add fixed filters to the same group\n Object.keys(fixedFilters || {}).forEach(key => {\n const value = fixedFilters[key];\n if (value !== null && value !== undefined) {\n mainGroup.conditions.push({\n field: key,\n operator: 'eq',\n value: value\n });\n }\n });\n if (mainGroup.conditions.length > 0) {\n queryParams.filters.push(mainGroup);\n }\n }\n // Merge dynamic filters (function or array)\n let dynamicFilters = [];\n const filtersProp = this.to['filters'];\n if (typeof filtersProp === 'function') {\n dynamicFilters = filtersProp(q, this.field); // pass search text\n }\n else if (Array.isArray(filtersProp)) {\n dynamicFilters = filtersProp;\n }\n // Add dynamic filters with proper groupLogicalOperator\n dynamicFilters.forEach((filterGroup, index) => {\n if (index === 0 && queryParams.filters.length === 0) {\n // First filter group, no groupLogicalOperator needed\n queryParams.filters.push(filterGroup);\n }\n else {\n // Subsequent groups, ensure they have groupLogicalOperator\n const groupWithOperator = {\n ...filterGroup,\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\n };\n queryParams.filters.push(groupWithOperator);\n }\n });\n // Use listEndpoint if available, otherwise use default\n let listEndpoint = this.props.listEndpoint;\n if (typeof listEndpoint === 'function') {\n listEndpoint = listEndpoint(this.model);\n }\n const searchParams = {\n 'query': QueryParser.toString(queryParams)\n };\n this.api.getList(searchParams, listEndpoint)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res) => {\n this.options_ = res.items ?? res ?? [];\n setTimeout(() => this.autoComp?.show(), 0);\n },\n error: () => {\n this.options_ = [];\n },\n });\n }\n }\n openCrud(mode) {\n const payload = mode === 'add' ? null : this.selectedItem;\n // Example integration:\n // const ref = this.dialog.open(CrudComponent, {\n // data: {\n // serviceName: this.to.serviceName,\n // mode,\n // record: payload\n // }\n // });\n // ref.onClose.subscribe((updated: any) => {\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\n // this.api.get(updated[this.to.valueField])\n // .subscribe(item => {\n // this.selectedItem = item;\n // this.formControl.setValue(item?.[this.to.valueField]);\n // });\n // }\n // });\n }\n getEmptyMessage() {\n if (this.loading) {\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\n }\n else if (this.options_.length === 0) {\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\n }\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\n }\n isItemSelected(item) {\n const vf = this.to['valueField'] || 'id';\n return Array.isArray(this.selectedItem) &&\n this.selectedItem.some((sel) => sel[vf] === item[vf]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, deps: [{ token: i1.BaseService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSelectorTypeComponent, isStandalone: true, selector: \"formly-generic-selector\", providers: [DialogService, BaseService], viewQueries: [{ propertyName: \"autoComp\", first: true, predicate: [\"autoComp\"], descendants: true }, { propertyName: \"dialog\", first: true, predicate: [\"dialog\"], descendants: true }], usesInheritance: true, ngImport: i0, template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: AutoCompleteModule }, { kind: \"component\", type: i3.AutoComplete, selector: \"p-autoComplete, p-autocomplete, p-auto-complete\", inputs: [\"minLength\", \"minQueryLength\", \"delay\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"readonly\", \"scrollHeight\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"autoHighlight\", \"forceSelection\", \"type\", \"autoZIndex\", \"baseZIndex\", \"ariaLabel\", \"dropdownAriaLabel\", \"ariaLabelledBy\", \"dropdownIcon\", \"unique\", \"group\", \"completeOnFocus\", \"showClear\", \"dropdown\", \"showEmptyMessage\", \"dropdownMode\", \"multiple\", \"tabindex\", \"dataKey\", \"emptyMessage\", \"showTransitionOptions\", \"hideTransitionOptions\", \"autofocus\", \"autocomplete\", \"optionGroupChildren\", \"optionGroupLabel\", \"overlayOptions\", \"suggestions\", \"optionLabel\", \"optionValue\", \"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"selectOnFocus\", \"searchLocale\", \"optionDisabled\", \"focusOnHover\", \"typeahead\", \"appendTo\"], outputs: [\"completeMethod\", \"onSelect\", \"onUnselect\", \"onFocus\", \"onBlur\", \"onDropdownClick\", \"onClear\", \"onKeyUp\", \"onShow\", \"onHide\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i5.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i6.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"directive\", type: FormlyAttributes, selector: \"[formlyAttributes]\", inputs: [\"formlyAttributes\", \"id\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"component\", type: i7.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: GenericDialogComponent, selector: \"app-generic-dialog\", inputs: [\"form\", \"service\", \"formFields\", \"model\", \"apiName\", \"idField\", \"dialogMaxWidth\", \"displayMode\", \"mode\", \"forceState\", \"drawerVisible\", \"dialogVisible\", \"isViewMode\", \"isEditMode\", \"useConfirmOnSave\", \"loading\", \"errorMsg\", \"errorMessage\", \"beforeSaveTransform\", \"hideTable\", \"autoShowForm\"], outputs: [\"action\", \"afterSave\", \"afterDelete\", \"beforeSave\", \"beforeDelete\", \"formCancel\", \"formInit\", \"dataLoaded\", \"selectionChange\", \"error\", \"visibleChange\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSelectorTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-generic-selector',\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"false\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span>{{ getPrimaryLabel(item) }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\n providers: [DialogService, BaseService],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n AutoCompleteModule,\n CommonModule,\n InputGroupModule,\n InputGroupAddonModule,\n FormlyAttributes,\n TranslateModule,\n AutoComplete,\n CheckboxModule,\n ButtonModule,\n GenericDialogComponent\n ]\n }]\n }], ctorParameters: () => [{ type: i1.BaseService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { autoComp: [{\n type: ViewChild,\n args: ['autoComp']\n }], dialog: [{\n type: ViewChild,\n args: ['dialog']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQWdDLFdBQVcsRUFBRSxNQUFNLG1D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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFFVCwyREFHQyxXQUFXLDhWQUNYLG1CQUFtQiw4QkFDbkIsa0JBQWtCLHN4Q0FDbEIsWUFBWSw4QkFDWixnQkFBZ0IseUpBQ2hCLHFCQUFxQixvS0FDckIsZ0JBQWdCLGtHQUNoQixlQUFlLDhCQUVmLGNBQWMsOEJBQ2QsWUFBWSxrYkFDWixzQkFBc0I7OzJGQUdaLDRCQUE0QjtrQkF4RnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFDLFdBQVcsQ0FBQztvQkFDdEMsT0FBTyxFQUFDO3dCQUNOLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixzQkFBc0I7cUJBQ3pCO2lCQUNBO3VJQUV3QixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0EsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRmllbGRUeXBlLCBGb3JtbHlBdHRyaWJ1dGVzLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlLCBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvcHJpbWVuZy9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgRmlsdGVyR3JvdXAsIFF1ZXJ5UGFyYW1ldGVycywgUXVlcnlQYXJzZXIgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHZW5lcmljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtZGlhbG9nJztcclxuXHJcbmludGVyZmFjZSBHZW5lcmljU2VsZWN0b3JQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMvKiAsIEZvcm1seUZpZWxkU2VsZWN0UHJvcHMgKi8ge1xyXG4gIC8vIGFwcGVuZFRvPzogU2VsZWN0WydhcHBlbmRUbyddO1xyXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgbGlzdEVuZHBvaW50Pzogc3RyaW5nIHwgKChtb2RlbDogYW55KSA9PiBzdHJpbmcpO1xyXG4gIGxvYWREZWZhdWx0RmllbGQ/OiBzdHJpbmc7XHJcbiAgbG9hZERlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdD86IGJvb2xlYW47XHJcblxyXG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XHJcbiAgbGFiZWxGaWVsZEVuPzogc3RyaW5nO1xyXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XHJcbiAgdXNlTXVsdGlMYW5nPzogYm9vbGVhbjtcclxuXHJcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xyXG5cclxuICBkaXNwbGF5PzogYm9vbGVhbjtcclxuICBvZmZsaW5lPzogYm9vbGVhbjtcclxuXHJcbiAgbG9hZFNhdmVkPzogYm9vbGVhbjtcclxuICBsb2FkU2F2ZWRGaWVsZD86IHN0cmluZztcclxuXHJcblxyXG4gIC8qKiBTdGF0aWMgb2ZmbGluZSBpdGVtcyAoYXJyYXkgb2Ygb2JqZWN0cykgKi9cclxuICBvZmZsaW5lSXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLyoqIEFzeW5jIG9mZmxpbmUgaXRlbXMgKG9ic2VydmFibGUpICovXHJcbiAgb2ZmbGluZUl0ZW1zJD86IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICAvKiogRnVuY3Rpb24tYmFzZWQgZmlsdGVyIGZvciBvZmZsaW5lIGl0ZW1zICovXHJcbiAgb25TZWxlY3Q/OiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBldmVudD86IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgb2ZmbGluZURhdGFGbj86IChxdWVyeT86IHN0cmluZykgPT4gYW55W107XHJcbiAgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cFtdO1xyXG4gICBmaXhlZEZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgZGVmYXVsdFZhbHVlPzogYW55OyAgICAgICAvLyBpZCDYo9mIIGFycmF5IG9mIGlkc1xyXG4gIGRlZmF1bHRJdGVtPzogYW55OyAgICAgICAgLy8g2KfZhNmD2KfYptmGINmD2KfZhdmEIChvYmplY3QpINil2LDYpyDYudmG2K/ZgyDYrNin2YfYslxyXG5cclxuICB2aWV3UGVybWlzc2lvbk5hbWU/OiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGFkZFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGlhbG9nRGlzcGxheU1vZGU/OiAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID4+O1xyXG4gIGNhbkFkZD86IGJvb2xlYW47XHJcbiAgY2FuTG9va3VwPzogYm9vbGVhbjtcclxuICBmb3JtRmllbGRzPzogIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgYWZ0ZXJTYXZlPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zvcm1seS1nZW5lcmljLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDwhLS0gW25nU3R5bGVdPVwieydkaXNwbGF5JzogcHJvcHMuZGlzcGxheSA/ICdibG9jayc6ICdub25lJ31cIiAtLT5cclxuIDxwLWlucHV0R3JvdXAgICBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxwLWF1dG9Db21wbGV0ZVxyXG4gICAgI2F1dG9Db21wXHJcbiAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXHJcbiAgICBbc3VnZ2VzdGlvbnNdPVwib3B0aW9uc19cIlxyXG4gICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJ0b1snbXVsdGlwbGUnXVwiXHJcbiAgICBbb3B0aW9uTGFiZWxdPVwib3B0aW9uTGFiZWxcIlxyXG4gICAgW2Ryb3Bkb3duXT1cImZhbHNlXCJcclxuICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCIocHJvcHNbJ3BsYWNlaG9sZGVyJ10gPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXByb3BzLmRpc2FibGVkXCJcclxuICAgIGRyb3Bkb3duTW9kZT1cImN1cnJlbnRcIlxyXG4gICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbm9uZVwiXHJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIGVtcHR5TWVzc2FnZT1cInt7IGdldEVtcHR5TWVzc2FnZSgpIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIlxyXG4gICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcblxyXG4gICAgIChrZXlkb3duLmFycm93ZG93bik9XCJvbkFycm93RG93bigkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IGdldFByaW1hcnlMYWJlbChpdGVtKSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWF1dG9Db21wbGV0ZT5cclxuXHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZCB8fCBsb2FkaW5nXCJcclxuICAgICAgW2ljb25dPVwibG9hZGluZyA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAoY2xpY2spPVwib25Ecm9wZG93bkJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICA8IS0tIEFkZCBuZXcgYnV0dG9uIC0tPlxyXG4gICBAaWYgKHByb3BzLmNhbkFkZCAmJiBwcm9wcy5mb3JtRmllbGRzKSB7XHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3Q2xpY2soKVwiXHJcbiAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICAgfVxyXG48L3AtaW5wdXRHcm91cD5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwicHJvcHMuZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJwcm9wcy5zZXJ2aWNlTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJwcm9wcy5pZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwicHJvcHMuZGlhbG9nRGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuXHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLEJhc2VTZXJ2aWNlXSxcclxuICBpbXBvcnRzOltcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElucHV0R3JvdXBNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwQWRkb25Nb2R1bGUsXHJcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQXV0b0NvbXBsZXRlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50XHJcbl1cclxufSlcclxuZXhwb3J0ICBjbGFzcyBHZW5lcmljU2VsZWN0b3JUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxHZW5lcmljU2VsZWN0b3JQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXAnKSBhdXRvQ29tcCE6IEF1dG9Db21wbGV0ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2chOiBHZW5lcmljRGlhbG9nQ29tcG9uZW50O1xyXG4gIG9wdGlvbnNfOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2ZmbGluZUxpc3Q6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIGFwaTogQmFzZVNlcnZpY2V8YW55O1xyXG4gcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgLy8gQWRkIGEgc3Vic2NyaXB0aW9uIHRvIG1hbmFnZSB0aGUgb2JzZXJ2YWJsZVxyXG5cclxuZ2V0IG9wdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgaWYodGhpcy50by51c2VNdWx0aUxhbmcgPT0gdHJ1ZSl7XHJcbiAgICAgaWYodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdlbicpe1xyXG4gICAgIHJldHVybiB0aGlzLnRvPy5sYWJlbEZpZWxkRW4gfHwgJ25hbWUnO1xyXG4gICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMudG8/LmxhYmVsRmllbGQgfHwgJ25hbWUnO1xyXG4gIH1cclxuICByZXR1cm4gdGhpcy50bz8ubGFiZWxGaWVsZCB8fCAnbmFtZSc7XHJcbn1cclxuXHJcbnByaXZhdGUgaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcclxufVxyXG5cclxuZ2V0UHJpbWFyeUxhYmVsKGl0ZW06IGFueSk6IHN0cmluZyB7XHJcbiAgY29uc3QgZmllbGRzID0gW1xyXG4gICAgdGhpcy5vcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIGZpZWxkIG5hbWUgZnJvbSBnZXR0ZXJcclxuICAgIHRoaXMudG8ubGFiZWxGaWVsZCB8fCAnbmFtZScsXHJcbiAgICB0aGlzLnRvLmxhYmVsRmllbGRFbiB8fCAnbmFtZSdcclxuICBdO1xyXG5cclxuICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XHJcbiAgICBjb25zdCB2ID0gaXRlbVtmXTtcclxuICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHYpKSB7XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN2YzogQmFzZVNlcnZpY2UscHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IscHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICB9XHJcblxyXG4gICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBpID0gdGhpcy5zdmM7XHJcbiAgICBjb25zdCB0byA9IHRoaXMucHJvcHM7XHJcbiAgICB0aGlzLmFwaS5hcGlOYW1lID0gdG9bJ3NlcnZpY2VOYW1lJ107XHJcblxyXG4gICAgaWYgKHRvWydvZmZsaW5lJ10pIHtcclxuICAgICAgaWYgKHRvWydvZmZsaW5lRGF0YUZuJ10pIHtcclxuICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IHRvWydvZmZsaW5lRGF0YUZuJ10oKTtcclxuICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodG9bJ29mZmxpbmVJdGVtcyQnXSkge1xyXG4gICAgICAgIHRvWydvZmZsaW5lSXRlbXMkJ10uc3Vic2NyaWJlKChsaXN0OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICBpZiAodGhpcy5wcm9wcy5sb2FkU2F2ZWQgJiYgIXRoaXMucHJvcHMubXVsdGlwbGUgJiYgdGhpcy5wcm9wcy5sb2FkU2F2ZWRGaWVsZCAmJiB0aGlzLnByb3BzLnZhbHVlRmllbGQpIHtcclxuICAgICAgICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcbiAgICAgICAgICBjb25zdCBsZiA9IHRoaXMub3B0aW9uTGFiZWw7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFt2Zl06dGhpcy5mb3JtQ29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgW2xmXTp0aGlzLm1vZGVsW3RoaXMucHJvcHMubG9hZFNhdmVkRmllbGRdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgICAgZWxzZXtcclxuXHJcbiAgICAgICAgIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpO1xyXG4gICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YnNjcmliZSB0byBmb3JtQ29udHJvbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUaGlzIHRhcCBvcGVyYXRvciBpcyBhIGdvb2QgcGxhY2UgdG8gcnVuIHNpZGUgZWZmZWN0c1xyXG4gICAgICAgICAgLy8gbGlrZSBjYWxsaW5nIHlvdXIgY2hhbmdlIGhhbmRsZXIgYWZ0ZXIgYSB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICBpZiAodG9bJ29mZmxpbmUnXSkge1xyXG4gICAgICBpZiAodG9bJ29mZmxpbmVEYXRhRm4nXSkge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVEYXRhRm4nXSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRvWydvZmZsaW5lSXRlbXMkJ10pIHtcclxuICAgICAgICB0b1snb2ZmbGluZUl0ZW1zJCddLnN1YnNjcmliZSgobGlzdDogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gbGlzdDtcclxuICAgICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVJdGVtcyddIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICAgICAgICB9KVxyXG4gICAgICA7XHJcbiAgfVxyXG5cclxuICAvLyBSZW1lbWJlciB0byB1bnN1YnNjcmliZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyFcclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbnByaXZhdGUgbG9hZERlZmF1bHRWYWx1ZSgpIHtcclxuICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcbiAgICAgY29uc3QgbGYgPSB0aGlzLnRvWydsb2FkRGVmYXVsdEZpZWxkJ10gfHwgJ2lzRGVmYXVsdCc7XHJcbiAgICAgY29uc3QgbGZWYWx1ZSA9IHRoaXMudG9bJ2xvYWREZWZhdWx0VmFsdWUnXSB8fCB0cnVlO1xyXG5jb25zdCBzZWFyY2hQYXJhbXMgPSB7XHJcbiAgICAgW2xmXTogbGZWYWx1ZSxcclxuICAgICAgLi4uZml4ZWRGaWx0ZXJzLFxyXG4gICAgfTtcclxuICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcylcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBBc3N1bWluZyB0aGUgQVBJIHJldHVybnMgYSBsaXN0IGFuZCB5b3Ugd2FudCB0byBzZWxlY3QgdGhlIGZpcnN0IG9uZVxyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLml0ZW1zICYmIHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSl7XHJcbiAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShyZXMuaXRlbXMubWFwKChjOiBhbnkpID0+IGNbdmZdKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVzLml0ZW1zWzBdO1xyXG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkZWZhdWx0VmFsdWU/Llt2Zl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLmluaXRPbmxpbmVTZWxlY3Rpb24oKTsgLy8gUHJvY2VlZCB3aXRoIG9ubGluZSBzZWxlY3Rpb24gYWZ0ZXIgc2V0dGluZyB0aGUgdmFsdWVcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBkZWZhdWx0IHZhbHVlIGZyb20gQVBJOlwiLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpOyAvLyBGYWxsYmFjayB0byBsb2NhbCBzZWxlY3Rpb24gaWYgQVBJIGZhaWxzXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiAgICAvLyBOZXcgbWV0aG9kIHRvIGhhbmRsZSBsb2FkaW5nIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIEFQSVxyXG5cclxuICAgIGFmdGVyU2F2ZShldmVudDogYW55KSB7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQucmVjb3JkKTtcclxuICAgaWYgKHRoaXMucHJvcHMuYWZ0ZXJTYXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYWZ0ZXJTYXZlKHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQucmVzcG9uc2UgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgICBvblNlbGVjdChldmVudDogYW55KSB7XHJcblxyXG4gICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHRoaXMuZmllbGQsIHsgaXRlbTogZXZlbnQudmFsdWUgfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbn1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UodmFsOiBhbnkpIHtcclxuICAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgaWYodGhpcy50b1snb2ZmbGluZSddKXtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbSA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICB2YWwuaW5jbHVkZXMoaXRlbVt2Zl0pXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEl0ZW0pID8gdGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKSA6IFtdXHJcbiAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdmFsO1xyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkgOiBbXVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWw/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4gIHByaXZhdGUgaW5pdE9mZmxpbmVTZWxlY3Rpb24od2l0aFNldFZhbHVlPXRydWUpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnRvWydtdWx0aXBsZSddICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgdmFsLmluY2x1ZGVzKGl0ZW1bdmZdKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLl9vZmZsaW5lTGlzdC5maW5kKGl0ZW0gPT4gaXRlbVt2Zl0gPT09IHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYod2l0aFNldFZhbHVlID09IHRydWUpe1xyXG5cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMudG9bJ211bHRpcGxlJ11cclxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtLm1hcCgoYzogYW55KSA9PiBjW3ZmXSlcclxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtPy5bdmZdXHJcbiAgICApO1xyXG4gIH1cclxuICBlbHNle1xyXG4gICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0T25saW5lU2VsZWN0aW9uKHdpdGhTZXRWYWx1ZSA9IHRydWUpIHtcclxuICBjb25zdCB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gIGlmICh2YWwgPT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMudG9bJ211bHRpcGxlJ10gPyBbXSA6IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHNbJ2xvYWREZWZhdWx0J10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuICAgIC8vIPCflJEgb25lIGdldExpc3QgY2FsbCBwZXIgaWQsIGJ1dCBpbmNsdWRlIGZpeGVkRmlsdGVycyBpbiBlYWNoXHJcbiAgICBjb25zdCBjYWxscyA9IHZhbC5tYXAoKGlkOiBhbnkpID0+XHJcbiAgICAgIHRoaXMuYXBpLmdldExpc3QoeyAuLi5maXhlZEZpbHRlcnMsIFt2Zl06IGlkIH0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4gKHJlcz8uaXRlbXM/Lmxlbmd0aCA/IHJlcy5pdGVtc1swXSA6IG51bGwpKVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGZvcmtKb2luKGNhbGxzKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtcy5maWx0ZXIoaSA9PiBpICE9IG51bGwpO1xyXG5cclxuICAgICAgICAgIGlmICh3aXRoU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbS5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBtdWx0aXBsZSBzZWxlY3Rpb25zOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHsgLi4uZml4ZWRGaWx0ZXJzLCBbdmZdOiB2YWwgfTtcclxuXHJcbiAgICB0aGlzLmFwaVxyXG4gICAgICAuZ2V0TGlzdChzZWFyY2hQYXJhbXMpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZXM/Lml0ZW1zPy5bMF0gfHwgbnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgICBpZiAod2l0aFNldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbT8uW3ZmXSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc2VsZWN0aW9uOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5nZXRGaXhlZEZpbHRlcnMoKTogYW55IHtcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLnRvWydmaXhlZEZpbHRlcnMnXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBmaXhlZEZpbHRlcnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vIENhbGwgd2l0aCBjdXJyZW50IG1vZGVsIChhbmQgb3B0aW9uYWxseSBmaWVsZClcclxuICAgIHJldHVybiBmaXhlZEZpbHRlcnModGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZml4ZWRGaWx0ZXJzIHx8IHt9O1xyXG59XHJcblxyXG5vbkFycm93RG93bihldmVudDogYW55KSB7XHJcbiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgLy8gdGhpcy5hdXRvQ29tcC5zaG93KCk7XHJcbnRoaXMub25Ecm9wZG93bkJ1dHRvbkNsaWNrKCk7XHJcbn1cclxuXHJcbm9uRXNjYXBlKGV2ZW50OiBhbnkpIHtcclxuICB0aGlzLmF1dG9Db21wLmhpZGUoKTtcclxuXHJcbn1cclxub25BZGROZXdDbGljaygpIHtcclxuICAvLyB5b3VyIGxvZ2ljIGZvciBhZGRpbmcgYSBuZXcgaXRlbVxyXG4gIC8vIGUuZy4gb3BlbiBkaWFsb2cgb3IgZW1pdCBldmVudFxyXG4gIGNvbnNvbGUubG9nKCdBZGQgbmV3IGl0ZW0gY2xpY2tlZCcpO1xyXG4gIHRoaXMuZGlhbG9nLm9wZW5Gb3JtKFwiY3JlYXRlXCIpO1xyXG59XHJcbm9uRHJvcGRvd25CdXR0b25DbGljaygpIHtcclxuICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTsgICAvLyB0cmlnZ2VyIHlvdXIgb3duIHNlYXJjaFxyXG4gIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcC5zaG93KCksIDApOyAvLyBmb3JjZSBkcm9wZG93biB0byBvcGVuXHJcbn1cclxuLy8gQ2FsbGVkIHdoZW4gZHJvcGRvd24gYnV0dG9uIGNsaWNrZWRcclxuICBvbkRyb3Bkb3duQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgLy8g8J+aqyBzdG9wIHRoZSBkZWZhdWx0IGRyb3Bkb3duIGJlaGF2aW9yXHJcbiAgZXZlbnQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ0Ryb3Bkb3duIGNsaWNrZWQhJywgZXZlbnQpO1xyXG4gICAgLy8g4pyFIHlvdXIgY3VzdG9tIGNvZGUgaGVyZVxyXG4gICAgLy8gZS5nLiwgZm9yY2UgdHJpZ2dlciBzZWFyY2ggZm9yIGVtcHR5IHF1ZXJ5XHJcbiAgICB0aGlzLnNlYXJjaCh7IHF1ZXJ5OiAnJyB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5zZWFyY2goZXZlbnQ6IHsgcXVlcnk6IHN0cmluZyB9KSB7XHJcbiAgY29uc3QgcSA9IGV2ZW50LnF1ZXJ5Py50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgJyc7XHJcbiAgY29uc3QgbGYgPSB0aGlzLm9wdGlvbkxhYmVsO1xyXG4gIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcblxyXG4gIGlmICh0aGlzLnRvWydvZmZsaW5lJ10pIHtcclxuICAgIHRoaXMub3B0aW9uc18gPSB0aGlzLnRvWydvZmZsaW5lRGF0YUZuJ11cclxuICAgICAgPyB0aGlzLnRvWydvZmZsaW5lRGF0YUZuJ10ocSlcclxuICAgICAgOiB0aGlzLl9vZmZsaW5lTGlzdC5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbVtsZl0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9Db21wPy5zaG93KCksIDApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zXyA9IFtdO1xyXG5cclxuICAgIC8vIEJ1aWxkIFF1ZXJ5UGFyYW1ldGVyc1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIG9yZGVyQnk6IFtdLFxyXG4gICAgICBncm91cEJ5OiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBIYW5kbGUgbWFpbiBzZWFyY2ggYW5kIGZpeGVkIGZpbHRlcnNcclxuICAgIGlmICghdGhpcy50b1snZmlsdGVycyddKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIGdyb3VwIGZvciBtYWluIHNlYXJjaCBjb25kaXRpb25cclxuICAgICAgY29uc3QgbWFpbkdyb3VwOiBGaWx0ZXJHcm91cCA9IHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6IGxmLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogJ2NvbnRhaW5zJyxcclxuICAgICAgICAgICAgdmFsdWU6IHFcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBBZGQgZml4ZWQgZmlsdGVycyB0byB0aGUgc2FtZSBncm91cFxyXG4gICAgICBPYmplY3Qua2V5cyhmaXhlZEZpbHRlcnMgfHwge30pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpeGVkRmlsdGVyc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBtYWluR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IGtleSxcclxuICAgICAgICAgICAgb3BlcmF0b3I6ICdlcScsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChtYWluR3JvdXAuY29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXMuZmlsdGVycy5wdXNoKG1haW5Hcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNZXJnZSBkeW5hbWljIGZpbHRlcnMgKGZ1bmN0aW9uIG9yIGFycmF5KVxyXG4gICAgbGV0IGR5bmFtaWNGaWx0ZXJzOiBGaWx0ZXJHcm91cFtdIHwgYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGZpbHRlcnNQcm9wID0gdGhpcy50b1snZmlsdGVycyddO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZmlsdGVyc1Byb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgZHluYW1pY0ZpbHRlcnMgPSBmaWx0ZXJzUHJvcChxLHRoaXMuZmllbGQpOyAvLyBwYXNzIHNlYXJjaCB0ZXh0XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyc1Byb3ApKSB7XHJcbiAgICAgIGR5bmFtaWNGaWx0ZXJzID0gZmlsdGVyc1Byb3A7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIGR5bmFtaWMgZmlsdGVycyB3aXRoIHByb3BlciBncm91cExvZ2ljYWxPcGVyYXRvclxyXG4gICAgZHluYW1pY0ZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyR3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBxdWVyeVBhcmFtcy5maWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIC8vIEZpcnN0IGZpbHRlciBncm91cCwgbm8gZ3JvdXBMb2dpY2FsT3BlcmF0b3IgbmVlZGVkXHJcbiAgICAgICAgcXVlcnlQYXJhbXMuZmlsdGVycy5wdXNoKGZpbHRlckdyb3VwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBTdWJzZXF1ZW50IGdyb3VwcywgZW5zdXJlIHRoZXkgaGF2ZSBncm91cExvZ2ljYWxPcGVyYXRvclxyXG4gICAgICAgIGNvbnN0IGdyb3VwV2l0aE9wZXJhdG9yID0ge1xyXG4gICAgICAgICAgLi4uZmlsdGVyR3JvdXAsXHJcbiAgICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZmlsdGVyR3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZpbHRlcnMucHVzaChncm91cFdpdGhPcGVyYXRvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVzZSBsaXN0RW5kcG9pbnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHRcclxuICAgIGxldCBsaXN0RW5kcG9pbnQgPSB0aGlzLnByb3BzLmxpc3RFbmRwb2ludDtcclxuICAgIGlmICh0eXBlb2YgbGlzdEVuZHBvaW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxpc3RFbmRwb2ludCA9IGxpc3RFbmRwb2ludCh0aGlzLm1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgICdxdWVyeSc6IFF1ZXJ5UGFyc2VyLnRvU3RyaW5nKHF1ZXJ5UGFyYW1zKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcywgbGlzdEVuZHBvaW50KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnNfID0gcmVzLml0ZW1zID8/IHJlcyA/PyBbXTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvQ29tcD8uc2hvdygpLCAwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4gIG9wZW5DcnVkKG1vZGU6ICdhZGQnIHwgJ2VkaXQnIHwgJ2luZm8nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gbW9kZSA9PT0gJ2FkZCcgPyBudWxsIDogdGhpcy5zZWxlY3RlZEl0ZW07XHJcblxyXG4gICAgLy8gRXhhbXBsZSBpbnRlZ3JhdGlvbjpcclxuICAgIC8vIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ3J1ZENvbXBvbmVudCwge1xyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgc2VydmljZU5hbWU6IHRoaXMudG8uc2VydmljZU5hbWUsXHJcbiAgICAvLyAgICAgbW9kZSxcclxuICAgIC8vICAgICByZWNvcmQ6IHBheWxvYWRcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZWYub25DbG9zZS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudG8ubXVsdGlwbGUgJiYgdXBkYXRlZD8uW3RoaXMudG8udmFsdWVGaWVsZF0pIHtcclxuICAgIC8vICAgICB0aGlzLmFwaS5nZXQodXBkYXRlZFt0aGlzLnRvLnZhbHVlRmllbGRdKVxyXG4gICAgLy8gICAgICAgLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGl0ZW0/Llt0aGlzLnRvLnZhbHVlRmllbGRdKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFbXB0eU1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuICdMT0FESU5HX0RBVEFfTUVTU0FHRSc7IC8vINmF2YHYqtin2K0g2KrYsdis2YXYqSDZhNmAIFwi2KzYp9ix2Yog2KrYrdmF2YrZhCDYp9mE2KjZitin2YbYp9iqLi4uXCJcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zXy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICdOT19SRVNVTFRTX0ZPVU5EJzsgLy8g2YXZgdiq2KfYrSDYqtix2KzZhdipINmE2YAgXCLZhNinINiq2YjYrNivINmG2KrYp9im2Kwg2YXYt9in2KjZgtipLlwiXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7IC8vINmE2Kcg2KrZj9i52LHYtiDYsdiz2KfZhNipINil2LDYpyDZg9in2YbYqiDZh9mG2KfZgyDZhtiq2KfYptisXHJcbiAgfVxyXG5cclxuaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbSkgJiZcclxuICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uc29tZSgoc2VsOiBhbnkpID0+IHNlbFt2Zl0gPT09IGl0ZW1bdmZdKTtcclxufVxyXG5cclxuXHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlbGVjdG9yL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { FieldType, FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core'
5
5
  import { Observable } from 'rxjs';
6
6
  import { AutoComplete } from 'primeng/autocomplete';
7
7
  import { FormlyFieldProps } from '@ngx-formly/primeng/form-field';
8
- import { BaseService } from '@elite.framework/ng.core/services';
8
+ import { FilterGroup, BaseService } from '@elite.framework/ng.core/services';
9
9
  import { GenericDialogComponent } from '@elite.framework/ng.ui.core/generic-dialog';
10
10
 
11
11
  declare class GenericSelectorModule {
@@ -36,7 +36,7 @@ interface GenericSelectorProps extends FormlyFieldProps {
36
36
  /** Function-based filter for offline items */
37
37
  onSelect?: (field: FormlyFieldConfig, event?: any) => void;
38
38
  offlineDataFn?: (query?: string) => any[];
39
- filters?: Record<string, any> | string[];
39
+ filters?: Record<string, any> | FilterGroup[];
40
40
  fixedFilters?: Record<string, any>;
41
41
  defaultValue?: any;
42
42
  defaultItem?: any;
@@ -76,7 +76,6 @@ declare class GenericSelectorTypeComponent extends FieldType<FieldTypeConfig<Gen
76
76
  private initOfflineSelection;
77
77
  private initOnlineSelection;
78
78
  getFixedFilters(): any;
79
- getFilters(): string[];
80
79
  onArrowDown(event: any): void;
81
80
  onEscape(event: any): void;
82
81
  onAddNewClick(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elite.framework/ng.ui.core",
3
- "version": "1.0.72",
3
+ "version": "1.0.73",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"
@@ -20,14 +20,14 @@
20
20
  "types": "./base-crud/index.d.ts",
21
21
  "default": "./fesm2022/elite.framework-ng.ui.core-base-crud.mjs"
22
22
  },
23
- "./attachments": {
24
- "types": "./attachments/index.d.ts",
25
- "default": "./fesm2022/elite.framework-ng.ui.core-attachments.mjs"
26
- },
27
23
  "./breadcrumb": {
28
24
  "types": "./breadcrumb/index.d.ts",
29
25
  "default": "./fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs"
30
26
  },
27
+ "./attachments": {
28
+ "types": "./attachments/index.d.ts",
29
+ "default": "./fesm2022/elite.framework-ng.ui.core-attachments.mjs"
30
+ },
31
31
  "./checkbox": {
32
32
  "types": "./checkbox/index.d.ts",
33
33
  "default": "./fesm2022/elite.framework-ng.ui.core-checkbox.mjs"
@@ -84,10 +84,6 @@
84
84
  "types": "./formly-avatar-label/index.d.ts",
85
85
  "default": "./fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs"
86
86
  },
87
- "./formly-presets": {
88
- "types": "./formly-presets/index.d.ts",
89
- "default": "./fesm2022/elite.framework-ng.ui.core-formly-presets.mjs"
90
- },
91
87
  "./formly-button": {
92
88
  "types": "./formly-button/index.d.ts",
93
89
  "default": "./fesm2022/elite.framework-ng.ui.core-formly-button.mjs"
@@ -96,6 +92,10 @@
96
92
  "types": "./formly-button-selector/index.d.ts",
97
93
  "default": "./fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs"
98
94
  },
95
+ "./formly-presets": {
96
+ "types": "./formly-presets/index.d.ts",
97
+ "default": "./fesm2022/elite.framework-ng.ui.core-formly-presets.mjs"
98
+ },
99
99
  "./formly-split-button": {
100
100
  "types": "./formly-split-button/index.d.ts",
101
101
  "default": "./fesm2022/elite.framework-ng.ui.core-formly-split-button.mjs"
@@ -148,14 +148,14 @@
148
148
  "types": "./generic-search/index.d.ts",
149
149
  "default": "./fesm2022/elite.framework-ng.ui.core-generic-search.mjs"
150
150
  },
151
- "./generic-selector": {
152
- "types": "./generic-selector/index.d.ts",
153
- "default": "./fesm2022/elite.framework-ng.ui.core-generic-selector.mjs"
154
- },
155
151
  "./generic-search-advanced": {
156
152
  "types": "./generic-search-advanced/index.d.ts",
157
153
  "default": "./fesm2022/elite.framework-ng.ui.core-generic-search-advanced.mjs"
158
154
  },
155
+ "./generic-selector": {
156
+ "types": "./generic-selector/index.d.ts",
157
+ "default": "./fesm2022/elite.framework-ng.ui.core-generic-selector.mjs"
158
+ },
159
159
  "./generic-table": {
160
160
  "types": "./generic-table/index.d.ts",
161
161
  "default": "./fesm2022/elite.framework-ng.ui.core-generic-table.mjs"
@@ -220,14 +220,14 @@
220
220
  "types": "./tag-type/index.d.ts",
221
221
  "default": "./fesm2022/elite.framework-ng.ui.core-tag-type.mjs"
222
222
  },
223
- "./textarea": {
224
- "types": "./textarea/index.d.ts",
225
- "default": "./fesm2022/elite.framework-ng.ui.core-textarea.mjs"
226
- },
227
223
  "./text-editor": {
228
224
  "types": "./text-editor/index.d.ts",
229
225
  "default": "./fesm2022/elite.framework-ng.ui.core-text-editor.mjs"
230
226
  },
227
+ "./textarea": {
228
+ "types": "./textarea/index.d.ts",
229
+ "default": "./fesm2022/elite.framework-ng.ui.core-textarea.mjs"
230
+ },
231
231
  "./wrappers": {
232
232
  "types": "./wrappers/index.d.ts",
233
233
  "default": "./fesm2022/elite.framework-ng.ui.core-wrappers.mjs"