@elite.framework/ng.ui.core 1.0.62 → 1.0.63

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.
Files changed (28) hide show
  1. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs +2 -0
  2. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs.map +1 -1
  3. package/fesm2022/elite.framework-ng.ui.core-formly-ui-all.mjs +8 -2
  4. package/fesm2022/elite.framework-ng.ui.core-formly-ui-all.mjs.map +1 -1
  5. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs +29 -31
  6. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs.map +1 -1
  7. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +124 -8
  8. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
  9. package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs +31 -7
  10. package/fesm2022/elite.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
  11. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs +1 -1
  12. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs.map +1 -1
  13. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs +6 -4
  14. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs.map +1 -1
  15. package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs +398 -0
  16. package/fesm2022/elite.framework-ng.ui.core-generic-view.mjs.map +1 -0
  17. package/fesm2022/elite.framework-ng.ui.core-label-type.mjs +44 -1
  18. package/fesm2022/elite.framework-ng.ui.core-label-type.mjs.map +1 -1
  19. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs +44 -1
  20. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs.map +1 -1
  21. package/generic-crud-table/index.d.ts +13 -2
  22. package/generic-dialog/index.d.ts +2 -2
  23. package/generic-table/index.d.ts +2 -0
  24. package/generic-view/README.md +3 -0
  25. package/generic-view/index.d.ts +96 -0
  26. package/label-type/index.d.ts +9 -1
  27. package/package.json +31 -27
  28. package/wrappers/index.d.ts +6 -1
@@ -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 } 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 } 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/inputgroup\";\nimport * as i5 from \"primeng/inputgroupaddon\";\nimport * as i6 from \"primeng/button\";\nimport * as i7 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 api;\n valueChangeSubscription; // Add a subscription to manage the observable\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.to['labelField'] || 'name';\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 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.to['labelField'] || 'name';\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 const searchParams = {\n [lf]: q,\n ...fixedFilters,\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 <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]=\"to['labelField'] || 'name'\"\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 </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: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i4.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i5.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: i6.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: [\"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: i7.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 <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]=\"to['labelField'] || 'name'\"\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 </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFxQixTQUFTLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0Is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QkFDWixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxZQUFZO3dCQUNaLHNCQUFzQjtxQkFDekI7aUJBQ0E7dUlBRXdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDQSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRmllbGRUeXBlLCBGb3JtbHlBdHRyaWJ1dGVzLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlLCBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvcHJpbWVuZy9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEdlbmVyaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1kaWFsb2cnO1xyXG5cclxuaW50ZXJmYWNlIEdlbmVyaWNTZWxlY3RvclByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcy8qICwgRm9ybWx5RmllbGRTZWxlY3RQcm9wcyAqLyB7XHJcbiAgLy8gYXBwZW5kVG8/OiBTZWxlY3RbJ2FwcGVuZFRvJ107XHJcbiAgc2VydmljZU5hbWU6IHN0cmluZztcclxuICBsaXN0RW5kcG9pbnQ/OiBzdHJpbmcgfCAoKG1vZGVsOiBhbnkpID0+IHN0cmluZyk7XHJcbiAgbG9hZERlZmF1bHRGaWVsZD86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gIGxvYWREZWZhdWx0PzogYm9vbGVhbjtcclxuXHJcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcclxuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xyXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcclxuXHJcbiAgb2ZmbGluZT86IGJvb2xlYW47XHJcblxyXG4gIGxvYWRTYXZlZD86IGJvb2xlYW47XHJcbiAgbG9hZFNhdmVkRmllbGQ/OiBzdHJpbmc7XHJcblxyXG5cclxuICAvKiogU3RhdGljIG9mZmxpbmUgaXRlbXMgKGFycmF5IG9mIG9iamVjdHMpICovXHJcbiAgb2ZmbGluZUl0ZW1zPzogYW55W107XHJcblxyXG4gIC8qKiBBc3luYyBvZmZsaW5lIGl0ZW1zIChvYnNlcnZhYmxlKSAqL1xyXG4gIG9mZmxpbmVJdGVtcyQ/OiBPYnNlcnZhYmxlPGFueVtdPjtcclxuXHJcbiAgLyoqIEZ1bmN0aW9uLWJhc2VkIGZpbHRlciBmb3Igb2ZmbGluZSBpdGVtcyAqL1xyXG4gIG9uU2VsZWN0PzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIG9mZmxpbmVEYXRhRm4/OiAocXVlcnk/OiBzdHJpbmcpID0+IGFueVtdO1xyXG4gICBmaXhlZEZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgZGVmYXVsdFZhbHVlPzogYW55OyAgICAgICAvLyBpZCDYo9mIIGFycmF5IG9mIGlkc1xyXG4gIGRlZmF1bHRJdGVtPzogYW55OyAgICAgICAgLy8g2KfZhNmD2KfYptmGINmD2KfZhdmEIChvYmplY3QpINil2LDYpyDYudmG2K/ZgyDYrNin2YfYslxyXG5cclxuICB2aWV3UGVybWlzc2lvbk5hbWU/OiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGFkZFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGlhbG9nRGlzcGxheU1vZGU/OiAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID4+O1xyXG4gIGNhbkFkZD86IGJvb2xlYW47XHJcbiAgY2FuTG9va3VwPzogYm9vbGVhbjtcclxuICBmb3JtRmllbGRzPzogIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgYWZ0ZXJTYXZlPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zvcm1seS1nZW5lcmljLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gPHAtaW5wdXRHcm91cCBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxwLWF1dG9Db21wbGV0ZVxyXG4gICAgI2F1dG9Db21wXHJcbiAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXHJcbiAgICBbc3VnZ2VzdGlvbnNdPVwib3B0aW9uc19cIlxyXG4gICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJ0b1snbXVsdGlwbGUnXVwiXHJcbiAgICBbb3B0aW9uTGFiZWxdPVwidG9bJ2xhYmVsRmllbGQnXSB8fCAnbmFtZSdcIlxyXG4gICAgW2Ryb3Bkb3duXT1cImZhbHNlXCJcclxuICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCIocHJvcHNbJ3BsYWNlaG9sZGVyJ10gPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXByb3BzLmRpc2FibGVkXCJcclxuICAgIGRyb3Bkb3duTW9kZT1cImN1cnJlbnRcIlxyXG4gICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbm9uZVwiXHJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIGVtcHR5TWVzc2FnZT1cInt7IGdldEVtcHR5TWVzc2FnZSgpIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIlxyXG4gICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcblxyXG4gICAgIChrZXlkb3duLmFycm93ZG93bik9XCJvbkFycm93RG93bigkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgPC9wLWF1dG9Db21wbGV0ZT5cclxuXHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZCB8fCBsb2FkaW5nXCJcclxuICAgICAgW2ljb25dPVwibG9hZGluZyA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAoY2xpY2spPVwib25Ecm9wZG93bkJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICA8IS0tIEFkZCBuZXcgYnV0dG9uIC0tPlxyXG4gICBAaWYgKHByb3BzLmNhbkFkZCAmJiBwcm9wcy5mb3JtRmllbGRzKSB7XHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3Q2xpY2soKVwiXHJcbiAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICAgfVxyXG48L3AtaW5wdXRHcm91cD5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwicHJvcHMuZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJwcm9wcy5zZXJ2aWNlTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJwcm9wcy5pZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwicHJvcHMuZGlhbG9nRGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuXHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLEJhc2VTZXJ2aWNlXSxcclxuICBpbXBvcnRzOltcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElucHV0R3JvdXBNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwQWRkb25Nb2R1bGUsXHJcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQXV0b0NvbXBsZXRlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50XHJcbl1cclxufSlcclxuZXhwb3J0ICBjbGFzcyBHZW5lcmljU2VsZWN0b3JUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxHZW5lcmljU2VsZWN0b3JQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXAnKSBhdXRvQ29tcCE6IEF1dG9Db21wbGV0ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2chOiBHZW5lcmljRGlhbG9nQ29tcG9uZW50O1xyXG4gIG9wdGlvbnNfOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2ZmbGluZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFwaTogQmFzZVNlcnZpY2V8YW55O1xyXG4gcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgLy8gQWRkIGEgc3Vic2NyaXB0aW9uIHRvIG1hbmFnZSB0aGUgb2JzZXJ2YWJsZVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ZjOiBCYXNlU2VydmljZSxwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcixwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hcGkgPSB0aGlzLnN2YztcclxuICAgIGNvbnN0IHRvID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMuYXBpLmFwaU5hbWUgPSB0b1snc2VydmljZU5hbWUnXTtcclxuXHJcbiAgICBpZiAodG9bJ29mZmxpbmUnXSkge1xyXG4gICAgICBpZiAodG9bJ29mZmxpbmVEYXRhRm4nXSkge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVEYXRhRm4nXSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0b1snb2ZmbGluZUl0ZW1zJCddKSB7XHJcbiAgICAgICAgdG9bJ29mZmxpbmVJdGVtcyQnXS5zdWJzY3JpYmUoKGxpc3Q6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZUl0ZW1zJ10gfHwgW107XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRTYXZlZCAmJiAhdGhpcy5wcm9wcy5tdWx0aXBsZSAmJiB0aGlzLnByb3BzLmxvYWRTYXZlZEZpZWxkICYmIHRoaXMucHJvcHMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICAgICAgICAgIGNvbnN0IGxmID0gdGhpcy50b1snbGFiZWxGaWVsZCddIHx8ICduYW1lJztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID1cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgW3ZmXTp0aGlzLmZvcm1Db250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICBbbGZdOnRoaXMubW9kZWxbdGhpcy5wcm9wcy5sb2FkU2F2ZWRGaWVsZF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgICBlbHNle1xyXG5cclxuICAgICAgICAgdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGZvcm1Db250cm9sIHZhbHVlIGNoYW5nZXNcclxuICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIC8vIFRoaXMgdGFwIG9wZXJhdG9yIGlzIGEgZ29vZCBwbGFjZSB0byBydW4gc2lkZSBlZmZlY3RzXHJcbiAgICAgICAgICAvLyBsaWtlIGNhbGxpbmcgeW91ciBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgIGlmICh0b1snb2ZmbGluZSddKSB7XHJcbiAgICAgIGlmICh0b1snb2ZmbGluZURhdGFGbiddKSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZURhdGFGbiddKCk7XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodG9bJ29mZmxpbmVJdGVtcyQnXSkge1xyXG4gICAgICAgIHRvWydvZmZsaW5lSXRlbXMkJ10uc3Vic2NyaWJlKChsaXN0OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZUl0ZW1zJ10gfHwgW107XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIDtcclxuICB9XHJcblxyXG4gIC8vIFJlbWVtYmVyIHRvIHVuc3Vic2NyaWJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxucHJpdmF0ZSBsb2FkRGVmYXVsdFZhbHVlKCkge1xyXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuICAgICBjb25zdCBsZiA9IHRoaXMudG9bJ2xvYWREZWZhdWx0RmllbGQnXSB8fCAnaXNEZWZhdWx0JztcclxuICAgICBjb25zdCBsZlZhbHVlID0gdGhpcy50b1snbG9hZERlZmF1bHRWYWx1ZSddIHx8IHRydWU7XHJcbmNvbnN0IHNlYXJjaFBhcmFtcyA9IHtcclxuICAgICBbbGZdOiBsZlZhbHVlLFxyXG4gICAgICAuLi5maXhlZEZpbHRlcnMsXHJcbiAgICB9O1xyXG4gIHRoaXMuYXBpLmdldExpc3Qoc2VhcmNoUGFyYW1zKVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEFzc3VtaW5nIHRoZSBBUEkgcmV0dXJucyBhIGxpc3QgYW5kIHlvdSB3YW50IHRvIHNlbGVjdCB0aGUgZmlyc3Qgb25lXHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuaXRlbXMgJiYgcmVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRvWydtdWx0aXBsZSddKXtcclxuICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHJlcy5pdGVtcy5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZXMuaXRlbXNbMF07XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRWYWx1ZT8uW3ZmXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpOyAvLyBQcm9jZWVkIHdpdGggb25saW5lIHNlbGVjdGlvbiBhZnRlciBzZXR0aW5nIHRoZSB2YWx1ZVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIGRlZmF1bHQgdmFsdWUgZnJvbSBBUEk6XCIsIGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKCk7IC8vIEZhbGxiYWNrIHRvIGxvY2FsIHNlbGVjdGlvbiBpZiBBUEkgZmFpbHNcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuICAgIC8vIE5ldyBtZXRob2QgdG8gaGFuZGxlIGxvYWRpbmcgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgQVBJXHJcblxyXG4gICAgYWZ0ZXJTYXZlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZShldmVudC5yZWNvcmQpO1xyXG4gICBpZiAodGhpcy5wcm9wcy5hZnRlclNhdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5hZnRlclNhdmUodGhpcy5maWVsZCwgeyBpdGVtOiBldmVudC5yZXNwb25zZSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxufVxyXG5cclxuICAgIG9uU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgIGlmICh0aGlzLnByb3BzLm9uU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QodGhpcy5maWVsZCwgeyBpdGVtOiBldmVudC52YWx1ZSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxufVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZSh2YWw6IGFueSkge1xyXG4gIHRoaXMuc2VsZWN0ZWRJdGVtID0gdmFsO1xyXG5cclxuICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkgOiBbXVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWw/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgfVxyXG59XHJcbiAgcHJpdmF0ZSBpbml0T2ZmbGluZVNlbGVjdGlvbih3aXRoU2V0VmFsdWU9dHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICB2YWwuaW5jbHVkZXMoaXRlbVt2Zl0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuX29mZmxpbmVMaXN0LmZpbmQoaXRlbSA9PiBpdGVtW3ZmXSA9PT0gdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZih3aXRoU2V0VmFsdWUgPT0gdHJ1ZSl7XHJcblxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgdGhpcy50b1snbXVsdGlwbGUnXVxyXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKVxyXG4gICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0/Llt2Zl1cclxuICAgICk7XHJcbiAgfVxyXG4gIGVsc2V7XHJcbiAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRPbmxpbmVTZWxlY3Rpb24od2l0aFNldFZhbHVlID0gdHJ1ZSkge1xyXG4gIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuXHJcbiAgaWYgKHZhbCA9PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy50b1snbXVsdGlwbGUnXSA/IFtdIDogbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wc1snbG9hZERlZmF1bHQnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLnRvWydtdWx0aXBsZSddICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcblxyXG4gICAgLy8g8J+UkSBvbmUgZ2V0TGlzdCBjYWxsIHBlciBpZCwgYnV0IGluY2x1ZGUgZml4ZWRGaWx0ZXJzIGluIGVhY2hcclxuICAgIGNvbnN0IGNhbGxzID0gdmFsLm1hcCgoaWQ6IGFueSkgPT5cclxuICAgICAgdGhpcy5hcGkuZ2V0TGlzdCh7IC4uLmZpeGVkRmlsdGVycywgW3ZmXTogaWQgfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiAocmVzPy5pdGVtcz8ubGVuZ3RoID8gcmVzLml0ZW1zWzBdIDogbnVsbCkpXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgZm9ya0pvaW4oY2FsbHMpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1zLmZpbHRlcihpID0+IGkgIT0gbnVsbCk7XHJcblxyXG4gICAgICAgICAgaWYgKHdpdGhTZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG11bHRpcGxlIHNlbGVjdGlvbnM6JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0geyAuLi5maXhlZEZpbHRlcnMsIFt2Zl06IHZhbCB9O1xyXG5cclxuICAgIHRoaXMuYXBpXHJcbiAgICAgIC5nZXRMaXN0KHNlYXJjaFBhcmFtcylcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHJlcz8uaXRlbXM/LlswXSB8fCBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgIGlmICh3aXRoU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtPy5bdmZdKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZWxlY3Rpb246JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmdldEZpeGVkRmlsdGVycygpOiBhbnkge1xyXG4gIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMudG9bJ2ZpeGVkRmlsdGVycyddO1xyXG5cclxuICBpZiAodHlwZW9mIGZpeGVkRmlsdGVycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gQ2FsbCB3aXRoIGN1cnJlbnQgbW9kZWwgKGFuZCBvcHRpb25hbGx5IGZpZWxkKVxyXG4gICAgcmV0dXJuIGZpeGVkRmlsdGVycyh0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaXhlZEZpbHRlcnMgfHwge307XHJcbn1cclxub25BcnJvd0Rvd24oZXZlbnQ6IGFueSkge1xyXG4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vIHRoaXMuYXV0b0NvbXAuc2hvdygpO1xyXG50aGlzLm9uRHJvcGRvd25CdXR0b25DbGljaygpO1xyXG59XHJcblxyXG5vbkVzY2FwZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5hdXRvQ29tcC5oaWRlKCk7XHJcblxyXG59XHJcbm9uQWRkTmV3Q2xpY2soKSB7XHJcbiAgLy8geW91ciBsb2dpYyBmb3IgYWRkaW5nIGEgbmV3IGl0ZW1cclxuICAvLyBlLmcuIG9wZW4gZGlhbG9nIG9yIGVtaXQgZXZlbnRcclxuICBjb25zb2xlLmxvZygnQWRkIG5ldyBpdGVtIGNsaWNrZWQnKTtcclxuICB0aGlzLmRpYWxvZy5vcGVuRm9ybShcImNyZWF0ZVwiKTtcclxufVxyXG5vbkRyb3Bkb3duQnV0dG9uQ2xpY2soKSB7XHJcbiAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7ICAgLy8gdHJpZ2dlciB5b3VyIG93biBzZWFyY2hcclxuICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXAuc2hvdygpLCAwKTsgLy8gZm9yY2UgZHJvcGRvd24gdG8gb3BlblxyXG59XHJcbi8vIENhbGxlZCB3aGVuIGRyb3Bkb3duIGJ1dHRvbiBjbGlja2VkXHJcbiAgb25Ecm9wZG93bkNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIPCfmqsgc3RvcCB0aGUgZGVmYXVsdCBkcm9wZG93biBiZWhhdmlvclxyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdEcm9wZG93biBjbGlja2VkIScsIGV2ZW50KTtcclxuICAgIC8vIOKchSB5b3VyIGN1c3RvbSBjb2RlIGhlcmVcclxuICAgIC8vIGUuZy4sIGZvcmNlIHRyaWdnZXIgc2VhcmNoIGZvciBlbXB0eSBxdWVyeVxyXG4gICAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7XHJcbiAgfVxyXG5cclxuc2VhcmNoKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSkge1xyXG4gIGNvbnN0IHEgPSBldmVudC5xdWVyeT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IGxmID0gdGhpcy50b1snbGFiZWxGaWVsZCddIHx8ICduYW1lJztcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuXHJcbiAgaWYgKHRoaXMudG9bJ29mZmxpbmUnXSkge1xyXG4gICAgdGhpcy5vcHRpb25zXyA9IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXVxyXG4gICAgICA/IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXShxKVxyXG4gICAgICA6IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICBpdGVtW2xmXT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcblxyXG4gICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHtcclxuICAgICAgW2xmXTogcSxcclxuICAgICAgLi4uZml4ZWRGaWx0ZXJzLFxyXG4gICAgfTtcclxuXHJcbiAgICAgIC8vIOKchSDYp9iz2KrYrtiv2KfZhSBsaXN0RW5kcG9pbnQg2KXYsNinINmD2KfZhiDZhdmI2KzZiNiv2YvYp9iMINmI2KXZhNinINin2YTYudmI2K/YqSDYpdmE2Ykg2KfZhNin2YHYqtix2KfYttmKXHJcbiAgICBsZXQgbGlzdEVuZHBvaW50ID0gdGhpcy5wcm9wcy5saXN0RW5kcG9pbnQ7XHJcbiAgIGlmICh0eXBlb2YgbGlzdEVuZHBvaW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBsaXN0RW5kcG9pbnQgPSBsaXN0RW5kcG9pbnQodGhpcy5tb2RlbCk7XHJcbiAgIH1cclxuXHJcbiAgICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcyAsIGxpc3RFbmRwb2ludClcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IHJlcy5pdGVtcyA/PyByZXMgPz8gW107XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IFtdO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbiAgb3BlbkNydWQobW9kZTogJ2FkZCcgfCAnZWRpdCcgfCAnaW5mbycpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSBtb2RlID09PSAnYWRkJyA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbTtcclxuXHJcbiAgICAvLyBFeGFtcGxlIGludGVncmF0aW9uOlxyXG4gICAgLy8gY29uc3QgcmVmID0gdGhpcy5kaWFsb2cub3BlbihDcnVkQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgIGRhdGE6IHtcclxuICAgIC8vICAgICBzZXJ2aWNlTmFtZTogdGhpcy50by5zZXJ2aWNlTmFtZSxcclxuICAgIC8vICAgICBtb2RlLFxyXG4gICAgLy8gICAgIHJlY29yZDogcGF5bG9hZFxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodXBkYXRlZDogYW55KSA9PiB7XHJcbiAgICAvLyAgIGlmICghdGhpcy50by5tdWx0aXBsZSAmJiB1cGRhdGVkPy5bdGhpcy50by52YWx1ZUZpZWxkXSkge1xyXG4gICAgLy8gICAgIHRoaXMuYXBpLmdldCh1cGRhdGVkW3RoaXMudG8udmFsdWVGaWVsZF0pXHJcbiAgICAvLyAgICAgICAuc3Vic2NyaWJlKGl0ZW0gPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbT8uW3RoaXMudG8udmFsdWVGaWVsZF0pO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldEVtcHR5TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9hZGluZykge1xyXG4gICAgICByZXR1cm4gJ0xPQURJTkdfREFUQV9NRVNTQUdFJzsgLy8g2YXZgdiq2KfYrSDYqtix2KzZhdipINmE2YAgXCLYrNin2LHZiiDYqtit2YXZitmEINin2YTYqNmK2KfZhtin2KouLi5cIlxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnNfLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gJ05PX1JFU1VMVFNfRk9VTkQnOyAvLyDZhdmB2KrYp9itINiq2LHYrNmF2Kkg2YTZgCBcItmE2Kcg2KrZiNis2K8g2YbYqtin2KbYrCDZhdi32KfYqNmC2KkuXCJcclxuICAgIH1cclxuICAgIHJldHVybiAnJzsgLy8g2YTYpyDYqtmP2LnYsdi2INix2LPYp9mE2Kkg2KXYsNinINmD2KfZhtiqINmH2YbYp9mDINmG2KrYp9im2KxcclxuICB9XHJcblxyXG5pc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRJdGVtKSAmJlxyXG4gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5zb21lKChzZWw6IGFueSkgPT4gc2VsW3ZmXSA9PT0gaXRlbVt2Zl0pO1xyXG59XHJcblxyXG5cclxufVxyXG4iXX0=","/**\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 } 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 } 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/inputgroup\";\nimport * as i5 from \"primeng/inputgroupaddon\";\nimport * as i6 from \"primeng/button\";\nimport * as i7 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 api;\n valueChangeSubscription; // Add a subscription to manage the observable\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.to['labelField'] || 'name';\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 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.to['labelField'] || 'name';\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 const searchParams = {\n [lf]: q,\n ...fixedFilters,\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 <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]=\"to['labelField'] || 'name'\"\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 </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: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i4.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i5.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: i6.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: i7.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 <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]=\"to['labelField'] || 'name'\"\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 </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWxlY3Rvci9zcmMvbGliL2dlbmVyaWMtc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFxQixTQUFTLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7QUF1SXBGLE1BQU0sT0FBUSw0QkFBNkIsU0FBUSxTQUFnRDtJQVc3RTtJQUF5QjtJQUEyQjtJQVZqRCxRQUFRLENBQWdCO0lBQzFCLE1BQU0sQ0FBMEI7SUFDckQsUUFBUSxHQUFVLEVBQUUsQ0FBQztJQUNyQixZQUFZLENBQU07SUFFbEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNSLFlBQVksR0FBVSxFQUFFLENBQUM7SUFFakMsR0FBRyxDQUFrQjtJQUNkLHVCQUF1QixDQUFnQixDQUFDLDhDQUE4QztJQUM3RixZQUFvQixHQUFnQixFQUFTLFFBQWtCLEVBQVMsR0FBc0I7UUFDNUYsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBRzlGLENBQUM7SUFFQSxRQUFRO1FBQ1AsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXJDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztpQkFBTSxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUMvQixFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFFTCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEcsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ3pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsWUFBWTtvQkFDakI7d0JBQ0UsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7d0JBQzNCLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztxQkFDM0MsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzVCLENBQUM7WUFDSixDQUFDO2lCQUNHLENBQUM7Z0JBRUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNKLENBQUM7UUFFRCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTthQUN6RCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osd0RBQXdEO1lBQ3hELDBEQUEwRDtZQUMxRCw4Q0FBOEM7WUFDOUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7eUJBQU0sSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFOzRCQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzs0QkFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNuQyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7UUFDSyxDQUFDLENBQUMsQ0FDSDtJQUNMLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0ssZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksV0FBVyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUc7WUFDaEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPO1lBQ1osR0FBRyxZQUFZO1NBQ2hCLENBQUM7UUFDSixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7YUFDM0IsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLHVFQUF1RTtnQkFDdkUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO3lCQUNHLENBQUM7d0JBQ0YsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQix1RkFBdUY7WUFDekYsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsMEVBQTBFO1lBQzVFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0csOERBQThEO0lBRTlELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ1gsQ0FBQztJQUVHLFFBQVEsQ0FBQyxLQUFVO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNYLENBQUM7SUFFQyxpQkFBaUIsQ0FBQyxHQUFRO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBRXhCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUN2QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNyRCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUNTLG9CQUFvQixDQUFDLFlBQVksR0FBQyxJQUFJO1FBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO1FBRXpDLElBQUksR0FBRyxJQUFJLElBQUk7WUFBRSxPQUFPO1FBRXhCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2QixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFHLFlBQVksSUFBSSxJQUFJLEVBQUMsQ0FBQztZQUV6QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM1QixDQUFDO1FBQ0osQ0FBQzthQUNHLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNULENBQUM7SUFDRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBWSxHQUFHLElBQUk7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFekMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVwRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFNUMsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2xELEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUQsQ0FDRixDQUFDO1lBRUYsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM1QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFFakQsSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RFLENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUVwRCxJQUFJLENBQUMsR0FBRztpQkFDTCxPQUFPLENBQUMsWUFBWSxDQUFDO2lCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM1QyxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUV6QixJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDN0QsQ0FBQztvQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUdELGVBQWU7UUFDYixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdDLElBQUksT0FBTyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsaURBQWlEO1lBQ2pELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBVTtRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXZCLENBQUM7SUFDRCxhQUFhO1FBQ1gsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBRywwQkFBMEI7UUFDeEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7SUFDdEUsQ0FBQztJQUNELHNDQUFzQztJQUNwQyxlQUFlLENBQUMsS0FBVTtRQUN4Qix3Q0FBd0M7UUFDMUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXBDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsMEJBQTBCO1FBQzFCLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVILE1BQU0sQ0FBQyxLQUF3QjtRQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFHNUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztZQUVOLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFFbEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ3BCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDUCxHQUFHLFlBQVk7YUFDaEIsQ0FBQztZQUVBLG9FQUFvRTtZQUN0RSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLE9BQU8sWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN4QyxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBRUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFHLFlBQVksQ0FBQztpQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDNUMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFFckIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRUMsUUFBUSxDQUFDLElBQTZCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUUxRCx1QkFBdUI7UUFDdkIsZ0RBQWdEO1FBQ2hELFlBQVk7UUFDWix3Q0FBd0M7UUFDeEMsWUFBWTtRQUNaLHNCQUFzQjtRQUN0QixNQUFNO1FBQ04sTUFBTTtRQUNOLDRDQUE0QztRQUM1Qyw4REFBOEQ7UUFDOUQsZ0RBQWdEO1FBQ2hELDZCQUE2QjtRQUM3QixvQ0FBb0M7UUFDcEMsaUVBQWlFO1FBQ2pFLFlBQVk7UUFDWixNQUFNO1FBQ04sTUFBTTtJQUVSLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxzQkFBc0IsQ0FBQyxDQUFDLDBDQUEwQztRQUMzRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLGtCQUFrQixDQUFDLENBQUMseUNBQXlDO1FBQ3RFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztJQUNsRCxDQUFDO0lBRUgsY0FBYyxDQUFDLElBQVM7UUFDdEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO3VHQTlYYSw0QkFBNEI7MkZBQTVCLDRCQUE0QixzRUFoQjdCLENBQUMsYUFBYSxFQUFDLFdBQVcsQ0FBQywwT0EvRDVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThEVCwyREFHQyxXQUFXLDhWQUNYLG1CQUFtQiw4QkFDbkIsa0JBQWtCLCtxQ0FDbEIsWUFBWSw4QkFDWixnQkFBZ0IseUpBQ2hCLHFCQUFxQixvS0FDckIsZ0JBQWdCLGtHQUNoQixlQUFlLDhCQUVmLGNBQWMsOEJBQ2QsWUFBWSxrYkFDWixzQkFBc0I7OzJGQUdaLDRCQUE0QjtrQkFqRnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThEVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxhQUFhLEVBQUMsV0FBVyxDQUFDO29CQUN0QyxPQUFPLEVBQUM7d0JBQ04sV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxZQUFZO3dCQUNaLHNCQUFzQjtxQkFDekI7aUJBQ0E7dUlBRXdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDQSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRmllbGRUeXBlLCBGb3JtbHlBdHRyaWJ1dGVzLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlLCBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvcHJpbWVuZy9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEdlbmVyaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvZ2VuZXJpYy1kaWFsb2cnO1xyXG5cclxuaW50ZXJmYWNlIEdlbmVyaWNTZWxlY3RvclByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcy8qICwgRm9ybWx5RmllbGRTZWxlY3RQcm9wcyAqLyB7XHJcbiAgLy8gYXBwZW5kVG8/OiBTZWxlY3RbJ2FwcGVuZFRvJ107XHJcbiAgc2VydmljZU5hbWU6IHN0cmluZztcclxuICBsaXN0RW5kcG9pbnQ/OiBzdHJpbmcgfCAoKG1vZGVsOiBhbnkpID0+IHN0cmluZyk7XHJcbiAgbG9hZERlZmF1bHRGaWVsZD86IHN0cmluZztcclxuICBsb2FkRGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gIGxvYWREZWZhdWx0PzogYm9vbGVhbjtcclxuXHJcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcclxuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xyXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcclxuXHJcbiAgb2ZmbGluZT86IGJvb2xlYW47XHJcblxyXG4gIGxvYWRTYXZlZD86IGJvb2xlYW47XHJcbiAgbG9hZFNhdmVkRmllbGQ/OiBzdHJpbmc7XHJcblxyXG5cclxuICAvKiogU3RhdGljIG9mZmxpbmUgaXRlbXMgKGFycmF5IG9mIG9iamVjdHMpICovXHJcbiAgb2ZmbGluZUl0ZW1zPzogYW55W107XHJcblxyXG4gIC8qKiBBc3luYyBvZmZsaW5lIGl0ZW1zIChvYnNlcnZhYmxlKSAqL1xyXG4gIG9mZmxpbmVJdGVtcyQ/OiBPYnNlcnZhYmxlPGFueVtdPjtcclxuXHJcbiAgLyoqIEZ1bmN0aW9uLWJhc2VkIGZpbHRlciBmb3Igb2ZmbGluZSBpdGVtcyAqL1xyXG4gIG9uU2VsZWN0PzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIG9mZmxpbmVEYXRhRm4/OiAocXVlcnk/OiBzdHJpbmcpID0+IGFueVtdO1xyXG4gICBmaXhlZEZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgZGVmYXVsdFZhbHVlPzogYW55OyAgICAgICAvLyBpZCDYo9mIIGFycmF5IG9mIGlkc1xyXG4gIGRlZmF1bHRJdGVtPzogYW55OyAgICAgICAgLy8g2KfZhNmD2KfYptmGINmD2KfZhdmEIChvYmplY3QpINil2LDYpyDYudmG2K/ZgyDYrNin2YfYslxyXG5cclxuICB2aWV3UGVybWlzc2lvbk5hbWU/OiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGFkZFBlcm1pc3Npb25OYW1lPzogc3RyaW5nO1xyXG4gIGlkRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGlhbG9nRGlzcGxheU1vZGU/OiAgfCAnZHJhd2VyJ1xyXG4gICAgfCAnZGlhbG9nJ1xyXG4gICAgfCAncm91dGUnXHJcbiAgICB8ICdpbmxpbmUnXHJcbiAgICB8IFBhcnRpYWw8XHJcbiAgICAgIFJlY29yZDxcclxuICAgICAgICAnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JyxcclxuICAgICAgICAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJyB8ICdpbmxpbmUnXHJcbiAgICAgID4+O1xyXG4gIGNhbkFkZD86IGJvb2xlYW47XHJcbiAgY2FuTG9va3VwPzogYm9vbGVhbjtcclxuICBmb3JtRmllbGRzPzogIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgYWZ0ZXJTYXZlPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zvcm1seS1nZW5lcmljLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gPHAtaW5wdXRHcm91cCBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxwLWF1dG9Db21wbGV0ZVxyXG4gICAgI2F1dG9Db21wXHJcbiAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXHJcbiAgICBbc3VnZ2VzdGlvbnNdPVwib3B0aW9uc19cIlxyXG4gICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJ0b1snbXVsdGlwbGUnXVwiXHJcbiAgICBbb3B0aW9uTGFiZWxdPVwidG9bJ2xhYmVsRmllbGQnXSB8fCAnbmFtZSdcIlxyXG4gICAgW2Ryb3Bkb3duXT1cImZhbHNlXCJcclxuICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCIocHJvcHNbJ3BsYWNlaG9sZGVyJ10gPz8gJycpIHwgdHJhbnNsYXRlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXByb3BzLmRpc2FibGVkXCJcclxuICAgIGRyb3Bkb3duTW9kZT1cImN1cnJlbnRcIlxyXG4gICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQtbm9uZVwiXHJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIGVtcHR5TWVzc2FnZT1cInt7IGdldEVtcHR5TWVzc2FnZSgpIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIlxyXG4gICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcblxyXG4gICAgIChrZXlkb3duLmFycm93ZG93bik9XCJvbkFycm93RG93bigkZXZlbnQpXCJcclxuICAoa2V5ZG93bi5lc2NhcGUpPVwib25Fc2NhcGUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgPC9wLWF1dG9Db21wbGV0ZT5cclxuXHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZCB8fCBsb2FkaW5nXCJcclxuICAgICAgW2ljb25dPVwibG9hZGluZyA/ICdwaSBwaS1zcGlubmVyIHBpLXNwaW4nIDogJ3BpIHBpLWNoZXZyb24tZG93bidcIlxyXG4gICAgICAoY2xpY2spPVwib25Ecm9wZG93bkJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICA8IS0tIEFkZCBuZXcgYnV0dG9uIC0tPlxyXG4gICBAaWYgKHByb3BzLmNhbkFkZCAmJiBwcm9wcy5mb3JtRmllbGRzKSB7XHJcbiAgPHAtaW5wdXRHcm91cEFkZG9uPlxyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFwcm9wcy5kaXNhYmxlZFwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3Q2xpY2soKVwiXHJcbiAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiIC8+XHJcbiAgPC9wLWlucHV0R3JvdXBBZGRvbj5cclxuICAgfVxyXG48L3AtaW5wdXRHcm91cD5cclxuXHJcbjwhLS0gW21vZGVsXT1cIm1vZGVsXCIgLS0+XHJcbiAgPGFwcC1nZW5lcmljLWRpYWxvZ1xyXG4gICAgI2RpYWxvZ1xyXG4gICAgW2Zvcm1GaWVsZHNdPVwicHJvcHMuZm9ybUZpZWxkcyA/PyBbXVwiXHJcbiAgICBbYXBpTmFtZV09XCJwcm9wcy5zZXJ2aWNlTmFtZVwiXHJcbiAgICBbaWRGaWVsZF09XCJwcm9wcy5pZEZpZWxkID8/J2lkJ1wiXHJcbiAgICBbZGlzcGxheU1vZGVdPVwicHJvcHMuZGlhbG9nRGlzcGxheU1vZGUgPz8gJ2RpYWxvZydcIlxyXG4gICAgKGFmdGVyU2F2ZSk9XCJhZnRlclNhdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLWdlbmVyaWMtZGlhbG9nPlxyXG5cclxuXHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLEJhc2VTZXJ2aWNlXSxcclxuICBpbXBvcnRzOltcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElucHV0R3JvdXBNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwQWRkb25Nb2R1bGUsXHJcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQXV0b0NvbXBsZXRlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljRGlhbG9nQ29tcG9uZW50XHJcbl1cclxufSlcclxuZXhwb3J0ICBjbGFzcyBHZW5lcmljU2VsZWN0b3JUeXBlQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxHZW5lcmljU2VsZWN0b3JQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXAnKSBhdXRvQ29tcCE6IEF1dG9Db21wbGV0ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2chOiBHZW5lcmljRGlhbG9nQ29tcG9uZW50O1xyXG4gIG9wdGlvbnNfOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2ZmbGluZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIGFwaTogQmFzZVNlcnZpY2V8YW55O1xyXG4gcHJpdmF0ZSB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjsgLy8gQWRkIGEgc3Vic2NyaXB0aW9uIHRvIG1hbmFnZSB0aGUgb2JzZXJ2YWJsZVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ZjOiBCYXNlU2VydmljZSxwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcixwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hcGkgPSB0aGlzLnN2YztcclxuICAgIGNvbnN0IHRvID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMuYXBpLmFwaU5hbWUgPSB0b1snc2VydmljZU5hbWUnXTtcclxuXHJcbiAgICBpZiAodG9bJ29mZmxpbmUnXSkge1xyXG4gICAgICBpZiAodG9bJ29mZmxpbmVEYXRhRm4nXSkge1xyXG4gICAgICAgIHRoaXMuX29mZmxpbmVMaXN0ID0gdG9bJ29mZmxpbmVEYXRhRm4nXSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdE9mZmxpbmVTZWxlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0b1snb2ZmbGluZUl0ZW1zJCddKSB7XHJcbiAgICAgICAgdG9bJ29mZmxpbmVJdGVtcyQnXS5zdWJzY3JpYmUoKGxpc3Q6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9vZmZsaW5lTGlzdCA9IGxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmluaXRPZmZsaW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZUl0ZW1zJ10gfHwgW107XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRTYXZlZCAmJiAhdGhpcy5wcm9wcy5tdWx0aXBsZSAmJiB0aGlzLnByb3BzLmxvYWRTYXZlZEZpZWxkICYmIHRoaXMucHJvcHMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuICAgICAgICAgIGNvbnN0IGxmID0gdGhpcy50b1snbGFiZWxGaWVsZCddIHx8ICduYW1lJztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID1cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgW3ZmXTp0aGlzLmZvcm1Db250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICBbbGZdOnRoaXMubW9kZWxbdGhpcy5wcm9wcy5sb2FkU2F2ZWRGaWVsZF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSk7XHJcbiAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgICBlbHNle1xyXG5cclxuICAgICAgICAgdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKCk7XHJcbiAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGZvcm1Db250cm9sIHZhbHVlIGNoYW5nZXNcclxuICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIC8vIFRoaXMgdGFwIG9wZXJhdG9yIGlzIGEgZ29vZCBwbGFjZSB0byBydW4gc2lkZSBlZmZlY3RzXHJcbiAgICAgICAgICAvLyBsaWtlIGNhbGxpbmcgeW91ciBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgIGlmICh0b1snb2ZmbGluZSddKSB7XHJcbiAgICAgIGlmICh0b1snb2ZmbGluZURhdGFGbiddKSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZURhdGFGbiddKCk7XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodG9bJ29mZmxpbmVJdGVtcyQnXSkge1xyXG4gICAgICAgIHRvWydvZmZsaW5lSXRlbXMkJ10uc3Vic2NyaWJlKChsaXN0OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb2ZmbGluZUxpc3QgPSB0b1snb2ZmbGluZUl0ZW1zJ10gfHwgW107XHJcbiAgICAgICAgdGhpcy5pbml0T2ZmbGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbihmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIDtcclxuICB9XHJcblxyXG4gIC8vIFJlbWVtYmVyIHRvIHVuc3Vic2NyaWJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxucHJpdmF0ZSBsb2FkRGVmYXVsdFZhbHVlKCkge1xyXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gICAgY29uc3QgZml4ZWRGaWx0ZXJzID0gdGhpcy5nZXRGaXhlZEZpbHRlcnMoKTtcclxuICAgICBjb25zdCBsZiA9IHRoaXMudG9bJ2xvYWREZWZhdWx0RmllbGQnXSB8fCAnaXNEZWZhdWx0JztcclxuICAgICBjb25zdCBsZlZhbHVlID0gdGhpcy50b1snbG9hZERlZmF1bHRWYWx1ZSddIHx8IHRydWU7XHJcbmNvbnN0IHNlYXJjaFBhcmFtcyA9IHtcclxuICAgICBbbGZdOiBsZlZhbHVlLFxyXG4gICAgICAuLi5maXhlZEZpbHRlcnMsXHJcbiAgICB9O1xyXG4gIHRoaXMuYXBpLmdldExpc3Qoc2VhcmNoUGFyYW1zKVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEFzc3VtaW5nIHRoZSBBUEkgcmV0dXJucyBhIGxpc3QgYW5kIHlvdSB3YW50IHRvIHNlbGVjdCB0aGUgZmlyc3Qgb25lXHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuaXRlbXMgJiYgcmVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRvWydtdWx0aXBsZSddKXtcclxuICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHJlcy5pdGVtcy5tYXAoKGM6IGFueSkgPT4gY1t2Zl0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZXMuaXRlbXNbMF07XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRWYWx1ZT8uW3ZmXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdE9ubGluZVNlbGVjdGlvbigpOyAvLyBQcm9jZWVkIHdpdGggb25saW5lIHNlbGVjdGlvbiBhZnRlciBzZXR0aW5nIHRoZSB2YWx1ZVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIGRlZmF1bHQgdmFsdWUgZnJvbSBBUEk6XCIsIGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5pbml0T25saW5lU2VsZWN0aW9uKCk7IC8vIEZhbGxiYWNrIHRvIGxvY2FsIHNlbGVjdGlvbiBpZiBBUEkgZmFpbHNcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuICAgIC8vIE5ldyBtZXRob2QgdG8gaGFuZGxlIGxvYWRpbmcgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgQVBJXHJcblxyXG4gICAgYWZ0ZXJTYXZlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZShldmVudC5yZWNvcmQpO1xyXG4gICBpZiAodGhpcy5wcm9wcy5hZnRlclNhdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5hZnRlclNhdmUodGhpcy5maWVsZCwgeyBpdGVtOiBldmVudC5yZXNwb25zZSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxufVxyXG5cclxuICAgIG9uU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgIGlmICh0aGlzLnByb3BzLm9uU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QodGhpcy5maWVsZCwgeyBpdGVtOiBldmVudC52YWx1ZSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxufVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZSh2YWw6IGFueSkge1xyXG4gIHRoaXMuc2VsZWN0ZWRJdGVtID0gdmFsO1xyXG5cclxuICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG5cclxuICBpZiAodGhpcy50b1snbXVsdGlwbGUnXSkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkgOiBbXVxyXG4gICAgKTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWw/Llt2Zl0gPz8gbnVsbCk7XHJcbiAgfVxyXG59XHJcbiAgcHJpdmF0ZSBpbml0T2ZmbGluZVNlbGVjdGlvbih3aXRoU2V0VmFsdWU9dHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIGNvbnN0IHZmID0gdGhpcy50b1sndmFsdWVGaWVsZCddIHx8ICdpZCc7XHJcblxyXG4gICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMudG9bJ211bHRpcGxlJ10gJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5fb2ZmbGluZUxpc3QuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICB2YWwuaW5jbHVkZXMoaXRlbVt2Zl0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuX29mZmxpbmVMaXN0LmZpbmQoaXRlbSA9PiBpdGVtW3ZmXSA9PT0gdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZih3aXRoU2V0VmFsdWUgPT0gdHJ1ZSl7XHJcblxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgdGhpcy50b1snbXVsdGlwbGUnXVxyXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW0ubWFwKChjOiBhbnkpID0+IGNbdmZdKVxyXG4gICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0/Llt2Zl1cclxuICAgICk7XHJcbiAgfVxyXG4gIGVsc2V7XHJcbiAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRPbmxpbmVTZWxlY3Rpb24od2l0aFNldFZhbHVlID0gdHJ1ZSkge1xyXG4gIGNvbnN0IHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgY29uc3QgdmYgPSB0aGlzLnRvWyd2YWx1ZUZpZWxkJ10gfHwgJ2lkJztcclxuXHJcbiAgaWYgKHZhbCA9PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy50b1snbXVsdGlwbGUnXSA/IFtdIDogbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wc1snbG9hZERlZmF1bHQnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLnRvWydtdWx0aXBsZSddICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMuZ2V0Rml4ZWRGaWx0ZXJzKCk7XHJcblxyXG4gICAgLy8g8J+UkSBvbmUgZ2V0TGlzdCBjYWxsIHBlciBpZCwgYnV0IGluY2x1ZGUgZml4ZWRGaWx0ZXJzIGluIGVhY2hcclxuICAgIGNvbnN0IGNhbGxzID0gdmFsLm1hcCgoaWQ6IGFueSkgPT5cclxuICAgICAgdGhpcy5hcGkuZ2V0TGlzdCh7IC4uLmZpeGVkRmlsdGVycywgW3ZmXTogaWQgfSkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiAocmVzPy5pdGVtcz8ubGVuZ3RoID8gcmVzLml0ZW1zWzBdIDogbnVsbCkpXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgZm9ya0pvaW4oY2FsbHMpXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1zLmZpbHRlcihpID0+IGkgIT0gbnVsbCk7XHJcblxyXG4gICAgICAgICAgaWYgKHdpdGhTZXRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtLm1hcCgoYzogYW55KSA9PiBjW3ZmXSkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB7IGl0ZW06IHRoaXMuc2VsZWN0ZWRJdGVtIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG11bHRpcGxlIHNlbGVjdGlvbnM6JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0geyAuLi5maXhlZEZpbHRlcnMsIFt2Zl06IHZhbCB9O1xyXG5cclxuICAgIHRoaXMuYXBpXHJcbiAgICAgIC5nZXRMaXN0KHNlYXJjaFBhcmFtcylcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHJlcz8uaXRlbXM/LlswXSB8fCBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgIGlmICh3aXRoU2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtPy5bdmZdKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgeyBpdGVtOiB0aGlzLnNlbGVjdGVkSXRlbSB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZWxlY3Rpb246JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmdldEZpeGVkRmlsdGVycygpOiBhbnkge1xyXG4gIGNvbnN0IGZpeGVkRmlsdGVycyA9IHRoaXMudG9bJ2ZpeGVkRmlsdGVycyddO1xyXG5cclxuICBpZiAodHlwZW9mIGZpeGVkRmlsdGVycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgLy8gQ2FsbCB3aXRoIGN1cnJlbnQgbW9kZWwgKGFuZCBvcHRpb25hbGx5IGZpZWxkKVxyXG4gICAgcmV0dXJuIGZpeGVkRmlsdGVycyh0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmaXhlZEZpbHRlcnMgfHwge307XHJcbn1cclxub25BcnJvd0Rvd24oZXZlbnQ6IGFueSkge1xyXG4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vIHRoaXMuYXV0b0NvbXAuc2hvdygpO1xyXG50aGlzLm9uRHJvcGRvd25CdXR0b25DbGljaygpO1xyXG59XHJcblxyXG5vbkVzY2FwZShldmVudDogYW55KSB7XHJcbiAgdGhpcy5hdXRvQ29tcC5oaWRlKCk7XHJcblxyXG59XHJcbm9uQWRkTmV3Q2xpY2soKSB7XHJcbiAgLy8geW91ciBsb2dpYyBmb3IgYWRkaW5nIGEgbmV3IGl0ZW1cclxuICAvLyBlLmcuIG9wZW4gZGlhbG9nIG9yIGVtaXQgZXZlbnRcclxuICBjb25zb2xlLmxvZygnQWRkIG5ldyBpdGVtIGNsaWNrZWQnKTtcclxuICB0aGlzLmRpYWxvZy5vcGVuRm9ybShcImNyZWF0ZVwiKTtcclxufVxyXG5vbkRyb3Bkb3duQnV0dG9uQ2xpY2soKSB7XHJcbiAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7ICAgLy8gdHJpZ2dlciB5b3VyIG93biBzZWFyY2hcclxuICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXAuc2hvdygpLCAwKTsgLy8gZm9yY2UgZHJvcGRvd24gdG8gb3BlblxyXG59XHJcbi8vIENhbGxlZCB3aGVuIGRyb3Bkb3duIGJ1dHRvbiBjbGlja2VkXHJcbiAgb25Ecm9wZG93bkNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIPCfmqsgc3RvcCB0aGUgZGVmYXVsdCBkcm9wZG93biBiZWhhdmlvclxyXG4gIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdEcm9wZG93biBjbGlja2VkIScsIGV2ZW50KTtcclxuICAgIC8vIOKchSB5b3VyIGN1c3RvbSBjb2RlIGhlcmVcclxuICAgIC8vIGUuZy4sIGZvcmNlIHRyaWdnZXIgc2VhcmNoIGZvciBlbXB0eSBxdWVyeVxyXG4gICAgdGhpcy5zZWFyY2goeyBxdWVyeTogJycgfSk7XHJcbiAgfVxyXG5cclxuc2VhcmNoKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSkge1xyXG4gIGNvbnN0IHEgPSBldmVudC5xdWVyeT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IGxmID0gdGhpcy50b1snbGFiZWxGaWVsZCddIHx8ICduYW1lJztcclxuICBjb25zdCBmaXhlZEZpbHRlcnMgPSB0aGlzLmdldEZpeGVkRmlsdGVycygpO1xyXG5cclxuXHJcbiAgaWYgKHRoaXMudG9bJ29mZmxpbmUnXSkge1xyXG4gICAgdGhpcy5vcHRpb25zXyA9IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXVxyXG4gICAgICA/IHRoaXMudG9bJ29mZmxpbmVEYXRhRm4nXShxKVxyXG4gICAgICA6IHRoaXMuX29mZmxpbmVMaXN0LmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICBpdGVtW2xmXT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnNfID0gW107XHJcblxyXG4gICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHtcclxuICAgICAgW2xmXTogcSxcclxuICAgICAgLi4uZml4ZWRGaWx0ZXJzLFxyXG4gICAgfTtcclxuXHJcbiAgICAgIC8vIOKchSDYp9iz2KrYrtiv2KfZhSBsaXN0RW5kcG9pbnQg2KXYsNinINmD2KfZhiDZhdmI2KzZiNiv2YvYp9iMINmI2KXZhNinINin2YTYudmI2K/YqSDYpdmE2Ykg2KfZhNin2YHYqtix2KfYttmKXHJcbiAgICBsZXQgbGlzdEVuZHBvaW50ID0gdGhpcy5wcm9wcy5saXN0RW5kcG9pbnQ7XHJcbiAgIGlmICh0eXBlb2YgbGlzdEVuZHBvaW50ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBsaXN0RW5kcG9pbnQgPSBsaXN0RW5kcG9pbnQodGhpcy5tb2RlbCk7XHJcbiAgIH1cclxuXHJcbiAgICB0aGlzLmFwaS5nZXRMaXN0KHNlYXJjaFBhcmFtcyAsIGxpc3RFbmRwb2ludClcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IHJlcy5pdGVtcyA/PyByZXMgPz8gW107XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXV0b0NvbXA/LnNob3coKSwgMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcHRpb25zXyA9IFtdO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbiAgb3BlbkNydWQobW9kZTogJ2FkZCcgfCAnZWRpdCcgfCAnaW5mbycpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSBtb2RlID09PSAnYWRkJyA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbTtcclxuXHJcbiAgICAvLyBFeGFtcGxlIGludGVncmF0aW9uOlxyXG4gICAgLy8gY29uc3QgcmVmID0gdGhpcy5kaWFsb2cub3BlbihDcnVkQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgIGRhdGE6IHtcclxuICAgIC8vICAgICBzZXJ2aWNlTmFtZTogdGhpcy50by5zZXJ2aWNlTmFtZSxcclxuICAgIC8vICAgICBtb2RlLFxyXG4gICAgLy8gICAgIHJlY29yZDogcGF5bG9hZFxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodXBkYXRlZDogYW55KSA9PiB7XHJcbiAgICAvLyAgIGlmICghdGhpcy50by5tdWx0aXBsZSAmJiB1cGRhdGVkPy5bdGhpcy50by52YWx1ZUZpZWxkXSkge1xyXG4gICAgLy8gICAgIHRoaXMuYXBpLmdldCh1cGRhdGVkW3RoaXMudG8udmFsdWVGaWVsZF0pXHJcbiAgICAvLyAgICAgICAuc3Vic2NyaWJlKGl0ZW0gPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbT8uW3RoaXMudG8udmFsdWVGaWVsZF0pO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldEVtcHR5TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9hZGluZykge1xyXG4gICAgICByZXR1cm4gJ0xPQURJTkdfREFUQV9NRVNTQUdFJzsgLy8g2YXZgdiq2KfYrSDYqtix2KzZhdipINmE2YAgXCLYrNin2LHZiiDYqtit2YXZitmEINin2YTYqNmK2KfZhtin2KouLi5cIlxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnNfLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gJ05PX1JFU1VMVFNfRk9VTkQnOyAvLyDZhdmB2KrYp9itINiq2LHYrNmF2Kkg2YTZgCBcItmE2Kcg2KrZiNis2K8g2YbYqtin2KbYrCDZhdi32KfYqNmC2KkuXCJcclxuICAgIH1cclxuICAgIHJldHVybiAnJzsgLy8g2YTYpyDYqtmP2LnYsdi2INix2LPYp9mE2Kkg2KXYsNinINmD2KfZhtiqINmH2YbYp9mDINmG2KrYp9im2KxcclxuICB9XHJcblxyXG5pc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICBjb25zdCB2ZiA9IHRoaXMudG9bJ3ZhbHVlRmllbGQnXSB8fCAnaWQnO1xyXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRJdGVtKSAmJlxyXG4gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5zb21lKChzZWw6IGFueSkgPT4gc2VsW3ZmXSA9PT0gaXRlbVt2Zl0pO1xyXG59XHJcblxyXG5cclxufVxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlbGVjdG9yL3NyYy9lbGl0ZS5mcmFtZXdvcmstbmcudWkuY29yZS1nZW5lcmljLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
@@ -9,12 +9,13 @@ import { ButtonModule, Button } from 'primeng/button';
9
9
  import * as i5 from 'primeng/menu';
10
10
  import { MenuModule, Menu } from 'primeng/menu';
11
11
  import * as i6 from '@ngx-translate/core';
12
- import { TranslateModule, TranslatePipe } from '@ngx-translate/core';
12
+ import { TranslateService, TranslateModule, TranslatePipe } from '@ngx-translate/core';
13
13
  import { FormlyForm, FormlyField } from '@ngx-formly/core';
14
14
  import { FormGroup } from '@angular/forms';
15
15
  import { cloneDeep } from 'lodash';
16
16
  import { GenericButton } from '@elite.framework/ng.ui.core/generic-button';
17
17
  import { PermissionsService } from '@elite.framework/ng.core/services';
18
+ import { PaginatorModule } from 'primeng/paginator';
18
19
  import * as i3 from 'primeng/api';
19
20
 
20
21
  class GenericTableModule {
@@ -30,6 +31,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
30
31
  }] });
31
32
 
32
33
  class GenericTable {
34
+ translateService = inject(TranslateService);
33
35
  permissionsService = inject(PermissionsService);
34
36
  dt;
35
37
  data = [];
@@ -210,7 +212,7 @@ class GenericTable {
210
212
  }
211
213
  getMenuItems(row) {
212
214
  return this.sortedActions.map(act => ({
213
- label: act.label,
215
+ label: this.translateService.instant(act.label ?? ''),
214
216
  icon: act.icon,
215
217
  command: () => this.onAction(act, row),
216
218
  styleClass: act.styleClass
@@ -224,11 +226,11 @@ class GenericTable {
224
226
  }
225
227
  }
226
228
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
227
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: GenericTable, isStandalone: true, selector: "lib-generic-table", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", globalFilterFields: "globalFilterFields", addButtonConfigs: "addButtonConfigs", scrollHeight: "scrollHeight", rowSelectable: "rowSelectable", selection: "selection", paginator: "paginator", showRowSelectionCheckbox: "showRowSelectionCheckbox" }, outputs: { action: "action", pageChange: "pageChange", onAddNew: "onAddNew", rowSelect: "rowSelect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"flex-1 last:[&>td]:border-0 rounded-lg border border-surface w-full overflow-auto\">\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n (sortFunction)=\"customSort($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i style=\"font-size: 2.5rem;\" class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n\r\n <ng-container *ngFor=\"let btn of addButtonConfigs; trackBy: trackByIdx\">\r\n @if (!btn.visible || ( btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit()\"\r\n ></lib-generic-button>\r\n }\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n<th *ngIf=\"actions.length > 0\" class=\"px-4 py-2 text-sm font-medium text-white text-center\">\r\n {{ 'OPERATIONS' | translate }}\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; trackBy: trackByFn\" >\r\n <th *ngIf=\"col.props?.table?.props?.width; else templateName\" [pSortableColumn]=\"col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-white text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width\">\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n\r\n <ng-template #templateName>\r\n <th style=\"min-width: 150px;\" class=\"px-4 py-2 text-sm font-medium text-white text-center\" [pSortableColumn]=\"col.key\">\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n</ng-container>\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100\" (click)=\"rowSelect.emit(rowData)\">\r\n <td *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n <td *ngIf=\"actions.length > 0\" class=\"border-t border-gray-200 px-4 py-2 text-center align-middle\">\r\n <ng-container [ngSwitch]=\"actionsMode\">\r\n <!-- Render buttons -->\r\n <ng-container *ngSwitchCase=\"'buttons'\">\r\n <ng-container *ngFor=\"let act of sortedActions\">\r\n <button\r\n *ngIf=\"act.icon || act.label\"\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label || '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\"\r\n ></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Render menu -->\r\n <ng-container *ngSwitchCase=\"'menu'\">\r\n <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2 px-2 py-1\">\r\n <i [ngClass]=\"item.icon\" class=\"text-primary-600\" *ngIf=\"item.icon\"></i>\r\n <span class=\"font-medium\">{{ (item.label || '') | translate }}</span>\r\n\r\n <span *ngIf=\"item.badge\" class=\"ml-auto text-xs bg-red-500 text-white px-2 py-1 rounded\">\r\n {{ item.badge }}\r\n </span>\r\n\r\n <!-- <p-inputSwitch *ngIf=\"item.toggle\" [(ngModel)]=\"item.toggleValue\" class=\"ml-auto\" /> -->\r\n </div>\r\n </ng-template>\r\n </p-menu>\r\n\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n <td *ngFor=\"let col of rowData.rowFields ; let colIndex = index;trackBy: trackByFn\"\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props && col.props['table']\r\n && col.props['table']['props'] && col.props['table']['props']['width'] \"\r\n\r\n >\r\n\r\n<formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\">\r\n </formly-form>\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n</div>\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2.TableCheckbox, selector: "p-tableCheckbox", inputs: ["value", "disabled", "required", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i2.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i4.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: "ngmodule", type: MenuModule }, { kind: "component", type: i5.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: GenericTable, isStandalone: true, selector: "lib-generic-table", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", globalFilterFields: "globalFilterFields", addButtonConfigs: "addButtonConfigs", scrollHeight: "scrollHeight", rowSelectable: "rowSelectable", selection: "selection", paginator: "paginator", showRowSelectionCheckbox: "showRowSelectionCheckbox" }, outputs: { action: "action", pageChange: "pageChange", onAddNew: "onAddNew", rowSelect: "rowSelect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\r\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\r\n\r\n <!-- PrimeNG Table -->\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"false\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"flex\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n (sortFunction)=\"customSort($event)\"\r\n class=\"flex-1 overflow-auto\"\r\n >\r\n\r\n <!-- Empty message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n <ng-container *ngFor=\"let btn of addButtonConfigs; trackBy: trackByIdx\">\r\n <lib-generic-button\r\n *ngIf=\"!btn.visible || btn.visible === true\"\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit()\"\r\n class=\"mb-2\"\r\n ></lib-generic-button>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\r\n <th *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-container *ngFor=\"let col of columns; trackBy: trackByFn\">\r\n <th\r\n [pSortableColumn]=\"col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\r\n >\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n </ng-container>\r\n\r\n <th *ngIf=\"actions.length > 0\" class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table body -->\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\r\n <td *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td\r\n *ngFor=\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\"\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props?.table?.props?.width\"\r\n >\r\n <formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\"\r\n ></formly-form>\r\n </td>\r\n\r\n <td *ngIf=\"actions.length > 0\" class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"actionsMode\">\r\n\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'buttons'\">\r\n <ng-container *ngFor=\"let act of sortedActions\">\r\n <button\r\n *ngIf=\"act.icon || act.label\"\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label ?? '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\"\r\n ></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Menu -->\r\n <ng-container *ngSwitchCase=\"'menu'\">\r\n <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </td>\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n <!-- Table footer -->\r\n\r\n\r\n <!-- <ng-template pTemplate=\"footer\">\r\n <tr class=\"bg-gray-200 sticky bottom-0 z-10\">\r\n <p-paginator [rows]=\"rows\" [totalRecords]=\"totalRecords\" [first]=\"first\"\r\n (onPageChange)=\"onLazyLoad($event)\">\r\n </p-paginator>\r\n </tr>\r\n </ng-template> -->\r\n\r\n </p-table>\r\n </div>\r\n</div>\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2.TableCheckbox, selector: "p-tableCheckbox", inputs: ["value", "disabled", "required", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i2.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "component", type: i4.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: "ngmodule", type: MenuModule }, { kind: "component", type: i5.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
228
230
  }
229
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericTable, decorators: [{
230
232
  type: Component,
231
- args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, NgForOf, TranslateModule, FormlyField, FormlyForm, NgIf, TranslatePipe, Menu, Button, GenericButton], template: "\r\n<div class=\"flex-1 last:[&>td]:border-0 rounded-lg border border-surface w-full overflow-auto\">\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n (sortFunction)=\"customSort($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i style=\"font-size: 2.5rem;\" class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n\r\n <ng-container *ngFor=\"let btn of addButtonConfigs; trackBy: trackByIdx\">\r\n @if (!btn.visible || ( btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit()\"\r\n ></lib-generic-button>\r\n }\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n<th *ngIf=\"actions.length > 0\" class=\"px-4 py-2 text-sm font-medium text-white text-center\">\r\n {{ 'OPERATIONS' | translate }}\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; trackBy: trackByFn\" >\r\n <th *ngIf=\"col.props?.table?.props?.width; else templateName\" [pSortableColumn]=\"col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-white text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width\">\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n\r\n <ng-template #templateName>\r\n <th style=\"min-width: 150px;\" class=\"px-4 py-2 text-sm font-medium text-white text-center\" [pSortableColumn]=\"col.key\">\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n</ng-container>\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100\" (click)=\"rowSelect.emit(rowData)\">\r\n <td *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n <td *ngIf=\"actions.length > 0\" class=\"border-t border-gray-200 px-4 py-2 text-center align-middle\">\r\n <ng-container [ngSwitch]=\"actionsMode\">\r\n <!-- Render buttons -->\r\n <ng-container *ngSwitchCase=\"'buttons'\">\r\n <ng-container *ngFor=\"let act of sortedActions\">\r\n <button\r\n *ngIf=\"act.icon || act.label\"\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label || '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\"\r\n ></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Render menu -->\r\n <ng-container *ngSwitchCase=\"'menu'\">\r\n <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2 px-2 py-1\">\r\n <i [ngClass]=\"item.icon\" class=\"text-primary-600\" *ngIf=\"item.icon\"></i>\r\n <span class=\"font-medium\">{{ (item.label || '') | translate }}</span>\r\n\r\n <span *ngIf=\"item.badge\" class=\"ml-auto text-xs bg-red-500 text-white px-2 py-1 rounded\">\r\n {{ item.badge }}\r\n </span>\r\n\r\n <!-- <p-inputSwitch *ngIf=\"item.toggle\" [(ngModel)]=\"item.toggleValue\" class=\"ml-auto\" /> -->\r\n </div>\r\n </ng-template>\r\n </p-menu>\r\n\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n <td *ngFor=\"let col of rowData.rowFields ; let colIndex = index;trackBy: trackByFn\"\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props && col.props['table']\r\n && col.props['table']['props'] && col.props['table']['props']['width'] \"\r\n\r\n >\r\n\r\n<formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\">\r\n </formly-form>\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n</div>\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"] }]
233
+ args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, NgForOf, TranslateModule, FormlyField, FormlyForm, NgIf, TranslatePipe, Menu, Button, GenericButton, PaginatorModule], template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\r\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\r\n\r\n <!-- PrimeNG Table -->\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"false\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"flex\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n (sortFunction)=\"customSort($event)\"\r\n class=\"flex-1 overflow-auto\"\r\n >\r\n\r\n <!-- Empty message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n <ng-container *ngFor=\"let btn of addButtonConfigs; trackBy: trackByIdx\">\r\n <lib-generic-button\r\n *ngIf=\"!btn.visible || btn.visible === true\"\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit()\"\r\n class=\"mb-2\"\r\n ></lib-generic-button>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\r\n <th *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <ng-container *ngFor=\"let col of columns; trackBy: trackByFn\">\r\n <th\r\n [pSortableColumn]=\"col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\r\n >\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.key\"></p-sortIcon>\r\n </th>\r\n </ng-container>\r\n\r\n <th *ngIf=\"actions.length > 0\" class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table body -->\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\r\n <td *ngIf=\"showRowSelectionCheckbox\" style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td\r\n *ngFor=\"let col of rowData.rowFields; let colIndex = index; trackBy: trackByFn\"\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props?.table?.props?.width\"\r\n >\r\n <formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\"\r\n ></formly-form>\r\n </td>\r\n\r\n <td *ngIf=\"actions.length > 0\" class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0 bg-gray-50\">\r\n <ng-container [ngSwitch]=\"actionsMode\">\r\n\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'buttons'\">\r\n <ng-container *ngFor=\"let act of sortedActions\">\r\n <button\r\n *ngIf=\"act.icon || act.label\"\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label ?? '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\"\r\n ></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Menu -->\r\n <ng-container *ngSwitchCase=\"'menu'\">\r\n <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </td>\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n <!-- Table footer -->\r\n\r\n\r\n <!-- <ng-template pTemplate=\"footer\">\r\n <tr class=\"bg-gray-200 sticky bottom-0 z-10\">\r\n <p-paginator [rows]=\"rows\" [totalRecords]=\"totalRecords\" [first]=\"first\"\r\n (onPageChange)=\"onLazyLoad($event)\">\r\n </p-paginator>\r\n </tr>\r\n </ng-template> -->\r\n\r\n </p-table>\r\n </div>\r\n</div>\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"] }]
232
234
  }], propDecorators: { dt: [{
233
235
  type: ViewChild,
234
236
  args: ['dt']