@elite.framework/ng.ui.core 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/excel-import/README.md +3 -0
- package/excel-import/index.d.ts +69 -0
- package/fesm2022/elite.framework-ng.ui.core-excel-import.mjs +568 -0
- package/fesm2022/elite.framework-ng.ui.core-excel-import.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +5 -2
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
- package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs +5 -2
- package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs.map +1 -1
- package/fesm2022/elite.framework-ng.ui.core-label-type.mjs +7 -3
- package/fesm2022/elite.framework-ng.ui.core-label-type.mjs.map +1 -1
- package/generic-crud-table/index.d.ts +2 -1
- package/generic-table/index.d.ts +2 -1
- package/package.json +25 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elite.framework-ng.ui.core-generic-crud-table.mjs","sources":["../tmp-esm2022/generic-crud-table/lib/generic-crud-table-module.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-table.js","../tmp-esm2022/generic-crud-table/elite.framework-ng.ui.core-generic-crud-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GenericButtonModule } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nexport class GenericCrudTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, GenericButtonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUtqRixNQUFNLE9BQU8sc0JBQXNCO3VHQUF0QixzQkFBc0I7d0dBQXRCLHNCQUFzQixZQUZ2QixZQUFZLEVBQUMsbUJBQW1CO3dHQUUvQixzQkFBc0IsWUFGdkIsWUFBWSxFQUFDLG1CQUFtQjs7MkZBRS9CLHNCQUFzQjtrQkFIbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUMsbUJBQW1CLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxHZW5lcmljQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0NydWRUYWJsZU1vZHVsZSB7fVxuIl19","import { DividerModule } from 'primeng/divider';\n// src/app/shared/generic-crud-table/generic-crud-table.component.ts\nimport { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessageModule } from 'primeng/message';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DialogModule } from 'primeng/dialog';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { SwalService } from '@elite.framework/ng.core/services';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { GenericTable } from '@elite.framework/ng.ui.core/generic-table';\nimport { GenericSearch } from '@elite.framework/ng.ui.core/generic-search';\nimport { UiButtonComponent } from '@elite.framework/ng.ui.core/ui-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/api\";\nimport * as i3 from \"primeng/button\";\nimport * as i4 from \"primeng/divider\";\nimport * as i5 from \"primeng/drawer\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/dialog\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericCrudTableComponent {\n genericTable;\n translate = inject(TranslateService);\n swalService = inject(SwalService);\n home = { icon: 'pi pi-home', routerLink: '/' };\n data = [];\n formFields_ = []; // <-- هنا\n formFields = []; // <-- هنا\n columns = []; // <-- هنا\n isViewMode = false;\n displayMode = 'drawer';\n isEditMode = false;\n drawerVisible = false;\n dialogVisible = false;\n form = new UntypedFormGroup({});\n model;\n model_ = {};\n loading = false;\n errorMsg = '';\n errorMessage = '';\n options = {};\n actions = [];\n /** تحدد طريقة العرض: 'buttons' أو 'menu' */\n actionsMode = 'buttons';\n action = new EventEmitter();\n bulkAction = new EventEmitter();\n singleAction = new EventEmitter();\n // البحث\n // Search\n filters;\n filterModel = {};\n search = new EventEmitter();\n /** للتحكم بإظهار/إخفاء قسم البحث */\n showSearch = true;\n /** Pagination Inputs */\n first = 0;\n rows = 10;\n totalRecords = 0;\n pageChange = new EventEmitter();\n onSearch = new EventEmitter();\n visibleChange = new EventEmitter();\n ;\n // @Output() visibleChange = new EventEmitter<boolean>();\n viewHeaderTitle = 'عرض التفاصيل';\n /** لجعل الجدول قابل لاختيار الصفوف (افتراضي false) */\n rowSelectable = false;\n /** حدث يخرج الصف المحدّد */\n rowSelect = new EventEmitter();\n selection = null;\n // الفرز\n sortField;\n sortOrder = 1;\n scrollHeight = '400px';\n paginator = true;\n service;\n idField = 'id';\n showRowSelectionCheckbox = false;\n bulkActionButtons = [];\n singleActionButtons = [];\n _selectedRows = [];\n get isSingleItemSelected() {\n return this._selectedRows.length === 1;\n }\n get isMultipleItemSelected() {\n return this._selectedRows.length > 1;\n }\n get selectedItems() {\n return this._selectedRows;\n }\n /** للتحكم بإظهار زر الإضافة */\n showAddButton = true;\n splitActions = [];\n /** الأيقونة الافتراضية لزر الإضافة */\n addButtonIcon = 'pi pi-plus';\n /** النص الافتراضي لزر الإضافة */\n addButtonLabel = 'ADD';\n /** تتحكّم بموقع زر الإضافة: 'top' أو 'bottom' */\n addButtonPosition = 'top';\n addButtonConfigs = [];\n breadcrumb;\n get breadcrumb_() {\n return this.breadcrumb?.map(v => ({\n ...v,\n label: this.translate.instant(v.label ?? '')\n }));\n }\n get rtl() {\n try {\n return document?.documentElement?.dir === 'rtl';\n }\n catch (error) {\n return true;\n }\n }\n // private destroy$ = new Subject<void>();\n /** الآن يتلقّى pagination + sort في حدث واحد */\n onLazyLoad(event) {\n // this.model_= this.model ?? {};\n this.model = this.model ?? {};\n this.formFields_ = this.formFields;\n const first = event.first ?? this.first;\n const rows = event.rows ?? this.rows;\n const sortField = typeof event.sortField === 'string'\n ? event.sortField\n : this.sortField;\n const sortOrder = event.sortOrder === -1 ? -1 : 1;\n const filters = {};\n if (event.filters) {\n Object.entries(event.filters).forEach(([field, meta]) => {\n const value = meta.value;\n if (value != null && value !== '') {\n filters[field] = value;\n }\n });\n }\n this.first = first;\n this.rows = rows;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n const dir = sortOrder === 1 ? 'asc' : 'desc';\n const sort = sortField ? `${sortField} ${dir}` : undefined;\n this.pageChange.emit({ first, rows, sort, filters });\n // يبني النص وإرساله\n }\n /** تصيير البيانات حسب الصفحة */\n get pagedData() {\n // return this.data ? this.data.slice(this.first, this.first + this.rows) : [];\n return this.data;\n }\n get globalFilterFields() {\n return this.columns.map(c => String(c.key));\n }\n /** أرسل إلى الأب لأتمتة شكل البحث إذا يحتاج */\n // from generic-crud-table.component.ts\n /** بدّل applySearch لتبث pageChange مباشرةً */\n applySearch(filters) {\n // this.genericTable.applyFilter(global);\n this.onSearch.emit(filters);\n }\n /** دالة تنفّذ عند النقر على صف */\n onRowClick(row) {\n console.log('GenericCrudTableComponent.rowClick:', row);\n if (this.rowSelectable) {\n this.rowSelect.emit(row);\n }\n }\n beforeSave = (record) => record;\n // onSubmit() {\n // if (this.form.invalid) return;\n // this.loading = true;\n // this.errorMessage = null;\n // const service = this.service /* as CrudService<T> */;\n // const id = this.isEditMode ? (this.model as any)[this.idField] : null;\n // const recordToSave = this.beforeSave({ ...this.model });\n // const operation$: Observable<any> = this.isEditMode\n // ? service.update(id, recordToSave)\n // : service.create(recordToSave);\n // // operation$.pipe(takeUntil(this.destroy$)).subscribe({\n // operation$.subscribe({\n // next: () => {\n // // this.ref.close(true); // نجاح العملية\n // this.visibleChange.emit(false)\n // // this.pageChange.emit({ first, rows ,sort, filters });\n // this.applySearch('');\n // // this.me\n // },\n // error: (err:any) => {\n // this.loading = false;\n // this.errorMessage = err.error?.title ||\n // err.message ||\n // 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n // }\n // });\n // }\n onSubmit() {\n if (this.form.invalid)\n return;\n // ✅ أول شيء نطلب تأكيد من المستخدم\n this.swalService.confirm(this.isEditMode ? 'تأكيد التعديل' : 'تأكيد الحفظ', this.isEditMode\n ? 'هل تريد حفظ التعديلات على هذا السجل؟'\n : 'هل تريد حفظ هذا السجل؟', 'نعم', 'إلغاء').then((result) => {\n if (!result.isConfirmed)\n return;\n this.loading = true;\n this.errorMessage = null;\n const service = this.service;\n const id = this.isEditMode ? this.model[this.idField] : null;\n const recordToSave = this.beforeSave({ ...this.model });\n const operation$ = this.isEditMode\n ? service.update(id, recordToSave)\n : service.create(recordToSave);\n operation$.subscribe({\n next: () => {\n this.loading = false;\n // ✅ رسالة نجاح\n this.swalService.success(this.isEditMode ? 'تم التعديل بنجاح' : 'تم الحفظ بنجاح');\n this.visibleChange.emit(false);\n this.applySearch('');\n },\n error: (err) => {\n this.loading = false;\n const msg = err.error?.title ||\n err.message ||\n 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n this.errorMessage = msg;\n // ❌ رسالة خطأ\n this.swalService.error('فشل الحفظ', msg);\n }\n });\n });\n }\n trackByIdx(index, item) {\n return index;\n }\n onSingleItemAction(btn) {\n if (!this.isSingleItemSelected)\n return;\n const selectedItem = this._selectedRows[0];\n this.singleAction.emit({\n name: btn.actionName ?? 'singleAction',\n item: selectedItem\n });\n }\n onInternalBulkAction(btn) {\n if (!this.isMultipleItemSelected)\n return;\n this.bulkAction.emit({\n name: btn.actionName ?? 'bulkAction',\n items: [...this._selectedRows] // نرسل نسخة من المصفوفة\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudTableComponent, isStandalone: true, selector: \"app-generic-crud-table\", inputs: { data: \"data\", formFields: \"formFields\", columns: \"columns\", isViewMode: \"isViewMode\", displayMode: \"displayMode\", isEditMode: \"isEditMode\", drawerVisible: \"drawerVisible\", dialogVisible: \"dialogVisible\", model: \"model\", loading: \"loading\", errorMsg: \"errorMsg\", errorMessage: \"errorMessage\", actions: \"actions\", actionsMode: \"actionsMode\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", rowSelectable: \"rowSelectable\", scrollHeight: \"scrollHeight\", paginator: \"paginator\", service: \"service\", idField: \"idField\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\", bulkActionButtons: \"bulkActionButtons\", singleActionButtons: \"singleActionButtons\", showAddButton: \"showAddButton\", splitActions: \"splitActions\", addButtonIcon: \"addButtonIcon\", addButtonLabel: \"addButtonLabel\", addButtonPosition: \"addButtonPosition\", addButtonConfigs: \"addButtonConfigs\", breadcrumb: \"breadcrumb\", beforeSave: \"beforeSave\" }, outputs: { action: \"action\", bulkAction: \"bulkAction\", singleAction: \"singleAction\", search: \"search\", pageChange: \"pageChange\", onSearch: \"onSearch\", visibleChange: \"visibleChange\", rowSelect: \"rowSelect\" }, host: { classAttribute: \"h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl p-4 bg-white\" }, viewQueries: [{ propertyName: \"genericTable\", first: true, predicate: [\"genericTable\"], descendants: true }], ngImport: i0, template: \"\\r\\n <div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <!-- <div class=\\\"text-2xl leading-8 font-medium bg-slate-800 p-4 rounded-md\\\">\\r\\n <p-breadcrumb\\r\\n [model]=\\\"breadcrumb_\\\"\\r\\n [home]=\\\"home\\\"\\r\\n styleClass=\\\"custom-breadcrumb\\\"\\r\\n ></p-breadcrumb>\\r\\n </div> -->\\r\\n\\r\\n<app-breadcrumb [breadcrumb]=\\\"breadcrumb_\\\"></app-breadcrumb>\\r\\n\\r\\n </div>\\r\\n\\r\\n<div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n <ng-container *ngIf=\\\"isSingleItemSelected\\\">\\r\\n <ng-container *ngFor=\\\"let btn of singleActionButtons; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n[label]=\\\"btn.label | translate\\\"\\r\\n[variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n</ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"selectedItems.length > 0\\\">\\r\\n <ng-container *ngFor=\\\"let btn of bulkActionButtons; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\" this.action.emit({ name: btn.actionName ?? 'add', row: null! });\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n\\r\\n\\r\\n\\r\\n @if ((showAddButton || splitActions.length > 0)&& addButtonConfigs.length === 0) {\\r\\n\\r\\n @if (showAddButton && splitActions.length === 0) {\\r\\n\\r\\n <!-- <p-button\\r\\n icon=\\\"pi pi-circle-fill text-green-500\\\" *ngIf=\\\"showAddButton && addButtonConfigs.length === 0\\\"\\r\\n [label]=\\\"(addButtonLabel | translate)\\r\\n \\\"(onClick)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n outlined severity=\\\"secondary\\\" /> -->\\r\\n\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'button',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n outlined: false,\\r\\n styleClass:''\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n @else {\\r\\n <!-- Split Button -->\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'split',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n loading: false,\\r\\n outlined: false,\\r\\n items: splitActions\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n\\r\\n\\r\\n }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n\\r\\n <ng-container *ngIf=\\\"showSearch && filters; else emptySearch\\\">\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"applySearch('')\\\"\\r\\n ></lib-generic-search>\\r\\n </ng-container>\\r\\n\\r\\n <ng-template #emptySearch>\\r\\n <!-- Render a dummy div to preserve expected DOM shape -->\\r\\n <!-- <div class=\\\"min-h-[2.5rem] w-[12rem]\\\"></div> -->\\r\\n </ng-template>\\r\\n\\r\\n <div class=\\\"flex items-center gap-3\\\">\\r\\n\\r\\n <p-button icon=\\\"pi pi-refresh\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"applySearch('')\\\" />\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0\\\" />\\r\\n <p-button icon=\\\"pi pi-sort\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button label=\\\"1 of 15\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-right\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-left\\\" outlined severity=\\\"secondary\\\" />\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n<lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n></lib-generic-table>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n<!-- Drawer -->\\r\\n<p-drawer\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'drawer' && drawerVisible\\\"\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissible]=\\\"false\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n styleClass=\\\"!w-full md:!w-80 lg:!w-[40rem]\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <span class=\\\"font-bold text-lg\\\">\\r\\n {{ isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : '\\u0639\\u0631\\u0636' }}\\r\\n </span>\\r\\n </ng-template>\\r\\n<!-- (ngSubmit)=\\\"onSubmit()\\\" -->\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\" *ngIf=\\\"!isViewMode\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ 'CANCEL' | translate }}\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"drawerVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n<!-- Dialog -->\\r\\n<p-dialog\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'dialog' && dialogVisible\\\"\\r\\n [(visible)]=\\\"dialogVisible\\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissableMask]=\\\"true\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n [style]=\\\"{ width: '95vw', maxWidth: '40rem' }\\\"\\r\\n [header]=\\\"isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : viewHeaderTitle\\\">\\r\\n\\r\\n <div class=\\\"relative\\\">\\r\\n <div *ngIf=\\\"isViewMode\\\" class=\\\"absolute inset-0 z-10 bg-white/50 pointer-events-auto rounded-md\\\"></div>\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button *ngIf=\\\"!isViewMode\\\"\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n (click)=\\\"onSubmit()\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ isViewMode ? ('CLOSE' | translate) : ('CANCEL' | translate) }}\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"dialogVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-dialog>\\r\\n\\r\\n\\r\\n\\r\\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: \"ngmodule\", type: TableModule }, { kind: \"directive\", type: i2.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { 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: ButtonModule }, { kind: \"directive\", type: i3.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i3.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: GenericSearch, selector: \"lib-generic-search\", inputs: [\"placeholder\", \"model\", \"fields\"], outputs: [\"search\"] }, { kind: \"component\", type: GenericTable, selector: \"lib-generic-table\", inputs: [\"data\", \"columns\", \"loading\", \"actions\", \"actionsMode\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"globalFilterFields\", \"scrollHeight\", \"rowSelectable\", \"selection\", \"paginator\", \"showRowSelectionCheckbox\"], outputs: [\"action\", \"pageChange\", \"onAddNew\", \"rowSelect\", \"selectionChange\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"component\", type: i4.Divider, selector: \"p-divider\", inputs: [\"styleClass\", \"layout\", \"type\", \"align\"] }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i5.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i6.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: MessageModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"component\", type: i7.Dialog, selector: \"p-dialog\", inputs: [\"header\", \"draggable\", \"resizable\", \"contentStyle\", \"contentStyleClass\", \"modal\", \"closeOnEscape\", \"dismissableMask\", \"rtl\", \"closable\", \"breakpoints\", \"styleClass\", \"maskStyleClass\", \"maskStyle\", \"showHeader\", \"blockScroll\", \"autoZIndex\", \"baseZIndex\", \"minX\", \"minY\", \"focusOnShow\", \"maximizable\", \"keepInViewport\", \"focusTrap\", \"transitionOptions\", \"closeIcon\", \"closeAriaLabel\", \"closeTabindex\", \"minimizeIcon\", \"maximizeIcon\", \"closeButtonProps\", \"maximizeButtonProps\", \"visible\", \"style\", \"position\", \"role\", \"appendTo\", \"content\", \"contentTemplate\", \"footerTemplate\", \"closeIconTemplate\", \"maximizeIconTemplate\", \"minimizeIconTemplate\", \"headlessTemplate\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\", \"onResizeInit\", \"onResizeEnd\", \"onDragEnd\", \"onMaximize\"] }, { kind: \"component\", type: UiButtonComponent, selector: \"ui-button\", inputs: [\"config\"], outputs: [\"onClick\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-table', standalone: true, imports: [\n CommonModule,\n TableModule,\n GenericButton,\n ButtonModule,\n GenericSearch,\n GenericTable,\n ToolbarModule,\n TranslateModule,\n DividerModule,\n IconFieldModule,\n DrawerModule,\n FormlyForm,\n ReactiveFormsModule,\n FormsModule,\n MessageModule,\n BreadcrumbComponent,\n DialogModule,\n UiButtonComponent\n ], host: {\n class: 'h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl p-4 bg-white'\n }, template: \"\\r\\n <div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <!-- <div class=\\\"text-2xl leading-8 font-medium bg-slate-800 p-4 rounded-md\\\">\\r\\n <p-breadcrumb\\r\\n [model]=\\\"breadcrumb_\\\"\\r\\n [home]=\\\"home\\\"\\r\\n styleClass=\\\"custom-breadcrumb\\\"\\r\\n ></p-breadcrumb>\\r\\n </div> -->\\r\\n\\r\\n<app-breadcrumb [breadcrumb]=\\\"breadcrumb_\\\"></app-breadcrumb>\\r\\n\\r\\n </div>\\r\\n\\r\\n<div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n <ng-container *ngIf=\\\"isSingleItemSelected\\\">\\r\\n <ng-container *ngFor=\\\"let btn of singleActionButtons; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n[label]=\\\"btn.label | translate\\\"\\r\\n[variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n</ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"selectedItems.length > 0\\\">\\r\\n <ng-container *ngFor=\\\"let btn of bulkActionButtons; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\" this.action.emit({ name: btn.actionName ?? 'add', row: null! });\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n\\r\\n\\r\\n\\r\\n @if ((showAddButton || splitActions.length > 0)&& addButtonConfigs.length === 0) {\\r\\n\\r\\n @if (showAddButton && splitActions.length === 0) {\\r\\n\\r\\n <!-- <p-button\\r\\n icon=\\\"pi pi-circle-fill text-green-500\\\" *ngIf=\\\"showAddButton && addButtonConfigs.length === 0\\\"\\r\\n [label]=\\\"(addButtonLabel | translate)\\r\\n \\\"(onClick)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n outlined severity=\\\"secondary\\\" /> -->\\r\\n\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'button',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n outlined: false,\\r\\n styleClass:''\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n @else {\\r\\n <!-- Split Button -->\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'split',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n loading: false,\\r\\n outlined: false,\\r\\n items: splitActions\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n\\r\\n\\r\\n }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n\\r\\n <ng-container *ngIf=\\\"showSearch && filters; else emptySearch\\\">\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"applySearch('')\\\"\\r\\n ></lib-generic-search>\\r\\n </ng-container>\\r\\n\\r\\n <ng-template #emptySearch>\\r\\n <!-- Render a dummy div to preserve expected DOM shape -->\\r\\n <!-- <div class=\\\"min-h-[2.5rem] w-[12rem]\\\"></div> -->\\r\\n </ng-template>\\r\\n\\r\\n <div class=\\\"flex items-center gap-3\\\">\\r\\n\\r\\n <p-button icon=\\\"pi pi-refresh\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"applySearch('')\\\" />\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0\\\" />\\r\\n <p-button icon=\\\"pi pi-sort\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button label=\\\"1 of 15\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-right\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-left\\\" outlined severity=\\\"secondary\\\" />\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n<lib-generic-table\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n></lib-generic-table>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n<!-- Drawer -->\\r\\n<p-drawer\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'drawer' && drawerVisible\\\"\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissible]=\\\"false\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n styleClass=\\\"!w-full md:!w-80 lg:!w-[40rem]\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <span class=\\\"font-bold text-lg\\\">\\r\\n {{ isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : '\\u0639\\u0631\\u0636' }}\\r\\n </span>\\r\\n </ng-template>\\r\\n<!-- (ngSubmit)=\\\"onSubmit()\\\" -->\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\" *ngIf=\\\"!isViewMode\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ 'CANCEL' | translate }}\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"drawerVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n<!-- Dialog -->\\r\\n<p-dialog\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'dialog' && dialogVisible\\\"\\r\\n [(visible)]=\\\"dialogVisible\\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissableMask]=\\\"true\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n [style]=\\\"{ width: '95vw', maxWidth: '40rem' }\\\"\\r\\n [header]=\\\"isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : viewHeaderTitle\\\">\\r\\n\\r\\n <div class=\\\"relative\\\">\\r\\n <div *ngIf=\\\"isViewMode\\\" class=\\\"absolute inset-0 z-10 bg-white/50 pointer-events-auto rounded-md\\\"></div>\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button *ngIf=\\\"!isViewMode\\\"\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n (click)=\\\"onSubmit()\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ isViewMode ? ('CLOSE' | translate) : ('CANCEL' | translate) }}\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"dialogVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-dialog>\\r\\n\\r\\n\\r\\n\\r\\n\" }]\n }], propDecorators: { genericTable: [{\n type: ViewChild,\n args: ['genericTable']\n }], data: [{\n type: Input\n }], formFields: [{\n type: Input\n }], columns: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], drawerVisible: [{\n type: Input\n }], dialogVisible: [{\n type: Input\n }], model: [{\n type: Input\n }], loading: [{\n type: Input\n }], errorMsg: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], action: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], singleAction: [{\n type: Output\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], search: [{\n type: Output\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], onSearch: [{\n type: Output\n }], visibleChange: [{\n type: Output\n }], rowSelectable: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], scrollHeight: [{\n type: Input\n }], paginator: [{\n type: Input\n }], service: [{\n type: Input\n }], idField: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], showAddButton: [{\n type: Input\n }], splitActions: [{\n type: Input\n }], addButtonIcon: [{\n type: Input\n }], addButtonLabel: [{\n type: Input\n }], addButtonPosition: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], beforeSave: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsb0VBQW9FO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTyxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFRLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQXFCLFVBQVUsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFn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TUFBTTtnQkFRQSxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUUsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFtQkMsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBMkZNLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZSAqL1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iIH0gZnJvbSAncHJpbWVuZy9icmVhZGNydW1iJztcclxuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XHJcbi8vIHNyYy9hcHAvc2hhcmVkL2dlbmVyaWMtY3J1ZC10YWJsZS9nZW5lcmljLWNydWQtdGFibGUuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIGluamVjdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNZXNzYWdlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tZXNzYWdlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUsVGFibGVMYXp5TG9hZEV2ZW50ICB9ICBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVG9vbGJhck1vZHVsZSB9ICAgZnJvbSAncHJpbWVuZy90b29sYmFyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtLCBGb3JtbHlGb3JtT3B0aW9ucyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBJY29uRmllbGRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2ljb25maWVsZCc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XHJcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsICB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTd2FsU2VydmljZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEFjdGlvbkRlZiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2JyZWFkY3J1bWInO1xyXG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcclxuaW1wb3J0IHsgR2VuZXJpY1RhYmxlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtdGFibGUnO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VhcmNoIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoJztcclxuaW1wb3J0IHsgVWlCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLnVpLmNvcmUvdWktYnV0dG9uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUNoYW5nZVBheWxvYWQgZXh0ZW5kcyBQYWdpbmF0b3JTdGF0ZSB7XHJcbnNvcnQ/OiBzdHJpbmc7XHJcbmZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25zTW9kZSA9ICdidXR0b25zJyB8ICdtZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyaWMtY3J1ZC10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUYWJsZU1vZHVsZSxcclxuICAgIEdlbmVyaWNCdXR0b24sXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBHZW5lcmljU2VhcmNoLFxyXG4gICAgR2VuZXJpY1RhYmxlLFxyXG4gICAgVG9vbGJhck1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIERpdmlkZXJNb2R1bGUsXHJcbiAgICBJY29uRmllbGRNb2R1bGUsXHJcbiAgICBEcmF3ZXJNb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWVzc2FnZU1vZHVsZSxcclxuICAgIEJyZWFkY3J1bWJDb21wb25lbnQsXHJcbiAgICBEaWFsb2dNb2R1bGUsXHJcbiAgICBVaUJ1dHRvbkNvbXBvbmVudFxyXG5dLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWNydWQtdGFibGUuaHRtbCcsXHJcbiAgIGhvc3Q6IHtcclxuICAgICAgICBjbGFzczogJ2gtZnVsbCBmbGV4LTEgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGJvcmRlci1zdXJmYWNlIHJvdW5kZWQtMnhsIHAtNCBiZy13aGl0ZSdcclxuICAgIH0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY0NydWRUYWJsZUNvbXBvbmVudDxUPiB7XHJcbiBAVmlld0NoaWxkKCdnZW5lcmljVGFibGUnKSBnZW5lcmljVGFibGUhOiBHZW5lcmljVGFibGU8VD47XHJcbiB0cmFuc2xhdGU6VHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuIHByaXZhdGUgc3dhbFNlcnZpY2UgPSBpbmplY3QoU3dhbFNlcnZpY2UpO1xyXG5cclxuICAgIGhvbWU6IE1lbnVJdGVtIHwgdW5kZWZpbmVkID0geyBpY29uOiAncGkgcGktaG9tZScsIHJvdXRlckxpbms6ICcvJyB9O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xyXG4gICBmb3JtRmllbGRzXzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdOyAgLy8gPC0tINmH2YbYp1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTsgIC8vIDwtLSDZh9mG2KdcclxuICBASW5wdXQoKSBjb2x1bW5zOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107ICAvLyA8LS0g2YfZhtinXHJcbiAgQElucHV0KCkgaXNWaWV3TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOlxyXG4gIHwgJ2RyYXdlcicgfCAnZGlhbG9nJyB8ICdyb3V0ZSdcclxuICB8IFBhcnRpYWw8UmVjb3JkPCdhZGQnIHwgJ2VkaXQnIHwgJ3ZpZXcnLCAnZHJhd2VyJyB8ICdkaWFsb2cnIHwgJ3JvdXRlJz4+XHJcbiAgPSAnZHJhd2VyJztcclxuICBASW5wdXQoKSBpc0VkaXRNb2RlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZHJhd2VyVmlzaWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ1Zpc2libGUgPSBmYWxzZTtcclxuICAgZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcclxuIEBJbnB1dCgpIG1vZGVsOiBhbnk7XHJcbiAgbW9kZWxfOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXJyb3JNc2cgPSAnJztcclxuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZ3xhbnkgPSAnJztcclxuXHJcbm9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge307XHJcblxyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbkRlZjxUPltdID0gW107XHJcbiAgICAvKiog2KrYrdiv2K8g2LfYsdmK2YLYqSDYp9mE2LnYsdi2OiAnYnV0dG9ucycg2KPZiCAnbWVudScgKi9cclxuICBASW5wdXQoKSBhY3Rpb25zTW9kZTogQWN0aW9uc01vZGUgPSAnYnV0dG9ucyc7XHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHJvdzogVCB9PigpO1xyXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgaXRlbXM6IFRbXSB9PigpO1xyXG4gIEBPdXRwdXQoKSBzaW5nbGVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyBpdGVtOiBUIH0+KCk7XHJcblxyXG4gIC8vINin2YTYqNit2KtcclxuLy8gU2VhcmNoXHJcbiAgQElucHV0KCkgZmlsdGVyczogYW55O1xyXG4gICBASW5wdXQoKSBmaWx0ZXJNb2RlbDogYW55ID0ge307XHJcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nOyBnbG9iYWw6IHN0cmluZyB9PigpO1xyXG5cclxuLyoqINmE2YTYqtit2YPZhSDYqNil2LjZh9in2LEv2KXYrtmB2KfYoSDZgtiz2YUg2KfZhNio2K3YqyAqL1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSB0cnVlO1xyXG5cclxuICAvKiogUGFnaW5hdGlvbiBJbnB1dHMgKi9cclxuICBASW5wdXQoKSBmaXJzdCA9IDA7XHJcbiAgQElucHV0KCkgcm93cyA9IDEwO1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VQYXlsb2FkPigpO1xyXG4gIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTs7XHJcbi8vIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG52aWV3SGVhZGVyVGl0bGUgPSAn2LnYsdi2INin2YTYqtmB2KfYtdmK2YQnO1xyXG4gICAvKiog2YTYrNi52YQg2KfZhNis2K/ZiNmEINmC2KfYqNmEINmE2KfYrtiq2YrYp9ixINin2YTYtdmB2YjZgSAo2KfZgdiq2LHYp9i22YogZmFsc2UpICovXHJcbiAgQElucHV0KCkgcm93U2VsZWN0YWJsZSA9IGZhbHNlO1xyXG4gIC8qKiDYrdiv2Ksg2YrYrtix2Kwg2KfZhNi12YEg2KfZhNmF2K3Yr9mR2K8gKi9cclxuICBAT3V0cHV0KCkgcm93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG5cclxuICBzZWxlY3Rpb246IFQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAvLyDYp9mE2YHYsdiyXHJcbiAgc29ydEZpZWxkPzogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogMSB8IC0xID0gMTtcclxuXHJcbkBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc0MDBweCc7XHJcblxyXG4gQElucHV0KCkgcGFnaW5hdG9yID0gdHJ1ZTtcclxuXHJcbkBJbnB1dCgpIHNlcnZpY2U6IEJhc2VTZXJ2aWNlfGFueTtcclxuQElucHV0KCkgaWRGaWVsZCA9ICdpZCc7XHJcblxyXG4gQElucHV0KCkgc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94ID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGJ1bGtBY3Rpb25CdXR0b25zOiBCdXR0b25Db25maWdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNpbmdsZUFjdGlvbkJ1dHRvbnM6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcblxyXG4gX3NlbGVjdGVkUm93czogVFtdID0gW107XHJcblxyXG5nZXQgaXNTaW5nbGVJdGVtU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cy5sZW5ndGggPT09IDE7XHJcbn1cclxuXHJcbmdldCBpc011bHRpcGxlSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZFJvd3MubGVuZ3RoID4gMTtcclxufVxyXG5cclxuZ2V0IHNlbGVjdGVkSXRlbXMoKTogVFtdIHtcclxuICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dzO1xyXG59XHJcblxyXG5cclxuXHJcbi8qKiDZhNmE2KrYrdmD2YUg2KjYpdi42YfYp9ixINiy2LEg2KfZhNil2LbYp9mB2KkgKi9cclxuQElucHV0KCkgc2hvd0FkZEJ1dHRvbiA9IHRydWU7XHJcbkBJbnB1dCgpIHNwbGl0QWN0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xyXG4vKiog2KfZhNij2YrZgtmI2YbYqSDYp9mE2KfZgdiq2LHYp9i22YrYqSDZhNiy2LEg2KfZhNil2LbYp9mB2KkgKi9cclxuQElucHV0KCkgYWRkQnV0dG9uSWNvbiA9ICdwaSBwaS1wbHVzJztcclxuLyoqINin2YTZhti1INin2YTYp9mB2KrYsdin2LbZiiDZhNiy2LEg2KfZhNil2LbYp9mB2KkgKi9cclxuQElucHV0KCkgYWRkQnV0dG9uTGFiZWwgPSAnQUREJztcclxuICAvKiog2KrYqtit2YPZkdmFINio2YXZiNmC2Lkg2LLYsSDYp9mE2KXYttin2YHYqTogJ3RvcCcg2KPZiCAnYm90dG9tJyAqL1xyXG5ASW5wdXQoKSBhZGRCdXR0b25Qb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICd0b3AnO1xyXG5cclxuIEBJbnB1dCgpIGFkZEJ1dHRvbkNvbmZpZ3M6IEJ1dHRvbkNvbmZpZ1tdID0gW107XHJcblxyXG5ASW5wdXQoKSBicmVhZGNydW1iOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuXHJcbmdldCBicmVhZGNydW1iXygpOiBNZW51SXRlbVtdIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gdGhpcy5icmVhZGNydW1iPy5tYXAodiA9PiAoe1xyXG4gICAgLi4udixcclxuICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHYubGFiZWwgPz8gJycpXHJcbiAgfSkpO1xyXG59XHJcbmdldCBydGwoKTogYm9vbGVhbiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBkb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50Py5kaXIgPT09ICdydGwnO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuLy8gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gLyoqINin2YTYotmGINmK2KrZhNmC2ZHZiSBwYWdpbmF0aW9uICsgc29ydCDZgdmKINit2K/YqyDZiNin2K3YryAqL1xyXG5vbkxhenlMb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcclxuICAvLyB0aGlzLm1vZGVsXz0gdGhpcy5tb2RlbCA/PyB7fTtcclxuICB0aGlzLm1vZGVsPSB0aGlzLm1vZGVsID8/IHt9O1xyXG5cclxuICB0aGlzLmZvcm1GaWVsZHNfID0gdGhpcy5mb3JtRmllbGRzO1xyXG4gIGNvbnN0IGZpcnN0ICAgICA9IGV2ZW50LmZpcnN0ICA/PyB0aGlzLmZpcnN0O1xyXG4gIGNvbnN0IHJvd3MgICAgICA9IGV2ZW50LnJvd3MgICA/PyB0aGlzLnJvd3M7XHJcbiAgY29uc3Qgc29ydEZpZWxkID0gdHlwZW9mIGV2ZW50LnNvcnRGaWVsZCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICA/IGV2ZW50LnNvcnRGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5zb3J0RmllbGQ7XHJcbiAgY29uc3Qgc29ydE9yZGVyID0gZXZlbnQuc29ydE9yZGVyID09PSAtMSA/IC0xIDogMTtcclxuXHJcblxyXG4gIGNvbnN0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGlmIChldmVudC5maWx0ZXJzKSB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZCwgbWV0YV0pID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IChtZXRhIGFzIGFueSkudmFsdWU7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICBmaWx0ZXJzW2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIHRoaXMuZmlyc3QgICAgID0gZmlyc3Q7XHJcbiAgdGhpcy5yb3dzICAgICAgPSByb3dzO1xyXG4gIHRoaXMuc29ydEZpZWxkID0gc29ydEZpZWxkO1xyXG4gIHRoaXMuc29ydE9yZGVyID0gc29ydE9yZGVyIGFzIDF8IC0xO1xyXG5jb25zdCBkaXIgPSBzb3J0T3JkZXIgPT09IDEgPyAnYXNjJyA6ICdkZXNjJztcclxuIGNvbnN0IHNvcnQgPSBzb3J0RmllbGQgPyBgJHtzb3J0RmllbGR9ICR7ZGlyfWAgOiB1bmRlZmluZWQ7XHJcblxyXG4gIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgZmlyc3QsIHJvd3MgLHNvcnQsIGZpbHRlcnMgfSk7XHJcblxyXG4gIC8vINmK2KjZhtmKINin2YTZhti1INmI2KXYsdiz2KfZhNmHXHJcblxyXG59XHJcblxyXG5cclxuICAvKiog2KrYtdmK2YrYsSDYp9mE2KjZitin2YbYp9iqINit2LPYqCDYp9mE2LXZgdit2KkgKi9cclxuICBnZXQgcGFnZWREYXRhKCk6IFRbXSB7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnNsaWNlKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnJvd3MpIDogW107XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG5cclxuXHJcbmdldCBnbG9iYWxGaWx0ZXJGaWVsZHMoKTogc3RyaW5nW10ge1xyXG4gIHJldHVybiB0aGlzLmNvbHVtbnMubWFwKGMgPT4gU3RyaW5nKGMua2V5KSk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKiDYo9ix2LPZhCDYpdmE2Ykg2KfZhNij2Kgg2YTYo9iq2YXYqtipINi02YPZhCDYp9mE2KjYrdirINil2LDYpyDZitit2KrYp9isICovXHJcbi8vIGZyb20gZ2VuZXJpYy1jcnVkLXRhYmxlLmNvbXBvbmVudC50c1xyXG5cclxuLyoqINio2K/ZkdmEIGFwcGx5U2VhcmNoINmE2KrYqNirIHBhZ2VDaGFuZ2Ug2YXYqNin2LTYsdip2YsgKi9cclxuIGFwcGx5U2VhcmNoKGZpbHRlcnM6IGFueSkge1xyXG4gICAgLy8gdGhpcy5nZW5lcmljVGFibGUuYXBwbHlGaWx0ZXIoZ2xvYmFsKTtcclxuICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KGZpbHRlcnMpO1xyXG4gIH1cclxuXHJcblxyXG4gLyoqINiv2KfZhNipINiq2YbZgdmR2LAg2LnZhtivINin2YTZhtmC2LEg2LnZhNmJINi12YEgKi9cclxuICBvblJvd0NsaWNrKHJvdzogVCkge1xyXG4gICAgIGNvbnNvbGUubG9nKCdHZW5lcmljQ3J1ZFRhYmxlQ29tcG9uZW50LnJvd0NsaWNrOicsIHJvdyk7XHJcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMucm93U2VsZWN0LmVtaXQocm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAgQElucHV0KCkgYmVmb3JlU2F2ZTogKHJlY29yZDogVCkgPT4gVCA9IChyZWNvcmQpID0+IHJlY29yZDtcclxuXHJcbiAgLy8gb25TdWJtaXQoKSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAvLyAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAvLyAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG5cclxuICAvLyAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZSAvKiBhcyBDcnVkU2VydmljZTxUPiAqLztcclxuICAvLyAgICAgY29uc3QgaWQgPSB0aGlzLmlzRWRpdE1vZGUgPyAodGhpcy5tb2RlbCBhcyBhbnkpW3RoaXMuaWRGaWVsZF0gOiBudWxsO1xyXG5cclxuICAvLyAgICAgY29uc3QgcmVjb3JkVG9TYXZlID0gdGhpcy5iZWZvcmVTYXZlKHsgLi4udGhpcy5tb2RlbCB9KTtcclxuXHJcblxyXG4gIC8vICAgICBjb25zdCBvcGVyYXRpb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmlzRWRpdE1vZGVcclxuICAvLyAgICAgICA/IHNlcnZpY2UudXBkYXRlKGlkLCByZWNvcmRUb1NhdmUpXHJcbiAgLy8gICAgICAgOiBzZXJ2aWNlLmNyZWF0ZShyZWNvcmRUb1NhdmUpO1xyXG5cclxuICAvLyAgICAgLy8gb3BlcmF0aW9uJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAvLyAgICAgb3BlcmF0aW9uJC5zdWJzY3JpYmUoe1xyXG4gIC8vICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAvLyAgICAgICAgIC8vIHRoaXMucmVmLmNsb3NlKHRydWUpOyAvLyDZhtis2KfYrSDYp9mE2LnZhdmE2YrYqVxyXG4gIC8vICAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpXHJcbiAgLy8gICAgICAgICAgIC8vIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgZmlyc3QsIHJvd3MgLHNvcnQsIGZpbHRlcnMgfSk7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuYXBwbHlTZWFyY2goJycpO1xyXG4gIC8vICAgICAgICAgLy8gdGhpcy5tZVxyXG4gIC8vICAgICAgIH0sXHJcbiAgLy8gICAgICAgZXJyb3I6IChlcnI6YW55KSA9PiB7XHJcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVyci5lcnJvcj8udGl0bGUgfHxcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSB8fFxyXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICfYrdiv2Ksg2K7Yt9ijINij2KvZhtin2KEg2KfZhNit2YHYuC4g2YrYsdis2Ykg2KfZhNmF2K3Yp9mI2YTYqSDZhdix2Kkg2KPYrtix2YkuJztcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfVxyXG5cclxuICBvblN1Ym1pdCgpIHtcclxuICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgLy8g4pyFINij2YjZhCDYtNmK2KEg2YbYt9mE2Kgg2KrYo9mD2YrYryDZhdmGINin2YTZhdiz2KrYrtiv2YVcclxuICB0aGlzLnN3YWxTZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICB0aGlzLmlzRWRpdE1vZGUgPyAn2KrYo9mD2YrYryDYp9mE2KrYudiv2YrZhCcgOiAn2KrYo9mD2YrYryDYp9mE2K3Zgdi4JyxcclxuICAgIHRoaXMuaXNFZGl0TW9kZVxyXG4gICAgICA/ICfZh9mEINiq2LHZitivINit2YHYuCDYp9mE2KrYudiv2YrZhNin2Kog2LnZhNmJINmH2LDYpyDYp9mE2LPYrNmE2J8nXHJcbiAgICAgIDogJ9mH2YQg2KrYsdmK2K8g2K3Zgdi4INmH2LDYpyDYp9mE2LPYrNmE2J8nLFxyXG4gICAgJ9mG2LnZhScsXHJcbiAgICAn2KXZhNi62KfYoSdcclxuICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgaWYgKCFyZXN1bHQuaXNDb25maXJtZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2U7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMuaXNFZGl0TW9kZSA/ICh0aGlzLm1vZGVsIGFzIGFueSlbdGhpcy5pZEZpZWxkXSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgcmVjb3JkVG9TYXZlID0gdGhpcy5iZWZvcmVTYXZlKHsgLi4udGhpcy5tb2RlbCB9KTtcclxuXHJcbiAgICBjb25zdCBvcGVyYXRpb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmlzRWRpdE1vZGVcclxuICAgICAgPyBzZXJ2aWNlLnVwZGF0ZShpZCwgcmVjb3JkVG9TYXZlKVxyXG4gICAgICA6IHNlcnZpY2UuY3JlYXRlKHJlY29yZFRvU2F2ZSk7XHJcblxyXG4gICAgb3BlcmF0aW9uJC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIOKchSDYsdiz2KfZhNipINmG2KzYp9itXHJcbiAgICAgICAgdGhpcy5zd2FsU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgdGhpcy5pc0VkaXRNb2RlID8gJ9iq2YUg2KfZhNiq2LnYr9mK2YQg2KjZhtis2KfYrScgOiAn2KrZhSDYp9mE2K3Zgdi4INio2YbYrNin2K0nXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlTZWFyY2goJycpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IG1zZyA9XHJcbiAgICAgICAgICBlcnIuZXJyb3I/LnRpdGxlIHx8XHJcbiAgICAgICAgICBlcnIubWVzc2FnZSB8fFxyXG4gICAgICAgICAgJ9it2K/YqyDYrti32KMg2KPYq9mG2KfYoSDYp9mE2K3Zgdi4LiDZitix2KzZiSDYp9mE2YXYrdin2YjZhNipINmF2LHYqSDYo9iu2LHZiS4nO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG1zZztcclxuXHJcbiAgICAgICAgLy8g4p2MINix2LPYp9mE2Kkg2K7Yt9ijXHJcbiAgICAgICAgdGhpcy5zd2FsU2VydmljZS5lcnJvcign2YHYtNmEINin2YTYrdmB2LgnLCBtc2cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG5cclxuXHJcbiAgICAgdHJhY2tCeUlkeChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBudW1iZXIge1xyXG4gIHJldHVybiBpbmRleDtcclxuIH1cclxuXHJcbm9uU2luZ2xlSXRlbUFjdGlvbihidG46IEJ1dHRvbkNvbmZpZyk6IHZvaWQge1xyXG4gIGlmICghdGhpcy5pc1NpbmdsZUl0ZW1TZWxlY3RlZCkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9zZWxlY3RlZFJvd3NbMF07XHJcbiAgdGhpcy5zaW5nbGVBY3Rpb24uZW1pdCh7XHJcbiAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnc2luZ2xlQWN0aW9uJyxcclxuICAgIGl0ZW06IHNlbGVjdGVkSXRlbVxyXG4gIH0pO1xyXG59XHJcblxyXG5vbkludGVybmFsQnVsa0FjdGlvbihidG46IEJ1dHRvbkNvbmZpZyk6IHZvaWQge1xyXG4gIGlmICghdGhpcy5pc011bHRpcGxlSXRlbVNlbGVjdGVkKSByZXR1cm47XHJcblxyXG4gIHRoaXMuYnVsa0FjdGlvbi5lbWl0KHtcclxuICAgIG5hbWU6IGJ0bi5hY3Rpb25OYW1lID8/ICdidWxrQWN0aW9uJyxcclxuICAgIGl0ZW1zOiBbLi4udGhpcy5fc2VsZWN0ZWRSb3dzXSAgLy8g2YbYsdiz2YQg2YbYs9iu2Kkg2YXZhiDYp9mE2YXYtdmB2YjZgdipXHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG59XHJcbiIsIlxyXG4gPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRleHQtMnhsIGxlYWRpbmctOCBmb250LW1lZGl1bSBiZy1zbGF0ZS04MDAgcC00IHJvdW5kZWQtbWRcIj5cclxuICAgICAgICAgICAgPHAtYnJlYWRjcnVtYlxyXG4gICAgICAgICAgICAgIFttb2RlbF09XCJicmVhZGNydW1iX1wiXHJcbiAgICAgICAgICAgICAgW2hvbWVdPVwiaG9tZVwiXHJcbiAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cImN1c3RvbS1icmVhZGNydW1iXCJcclxuICAgICAgICAgICAgPjwvcC1icmVhZGNydW1iPlxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuPGFwcC1icmVhZGNydW1iIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJfXCI+PC9hcHAtYnJlYWRjcnVtYj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktZW5kIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2luZ2xlSXRlbVNlbGVjdGVkXCI+XHJcbiA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2Ygc2luZ2xlQWN0aW9uQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeUlkeFwiPlxyXG4gPGxpYi1nZW5lcmljLWJ1dHRvblxyXG5cclxuICBbaWNvbl09XCJidG4uaWNvblwiXHJcbltsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG5bdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAoY2xpY2tlZCk9XCJvblNpbmdsZUl0ZW1BY3Rpb24oYnRuKVwiXHJcbiA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbjwvbmctY29udGFpbmVyPlxyXG4gPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgYnVsa0FjdGlvbkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlJZHhcIj5cclxuICAgICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICAgIFtwZXJtaXNzaW9uXT1cImJ0bi5wZXJtaXNzaW9uXCJcclxuICAgICAgICAgIChjbGlja2VkKT1cIm9uSW50ZXJuYWxCdWxrQWN0aW9uKGJ0bilcIlxyXG4gICAgICAgID48L2xpYi1nZW5lcmljLWJ1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBhZGRCdXR0b25Db25maWdzOyB0cmFja0J5OiB0cmFja0J5SWR4XCI+XHJcbiAgICAgIDxsaWItZ2VuZXJpYy1idXR0b25cclxuICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXHJcbiAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gICAgICAgIFtzaXplXT1cImJ0bi5zaXplXCJcclxuICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgKGNsaWNrZWQpPVwiIHRoaXMuYWN0aW9uLmVtaXQoeyBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnYWRkJywgcm93OiBudWxsISB9KTtcIlxyXG4gICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgQGlmICgoc2hvd0FkZEJ1dHRvbiB8fCBzcGxpdEFjdGlvbnMubGVuZ3RoID4gMCkmJiBhZGRCdXR0b25Db25maWdzLmxlbmd0aCA9PT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICBAaWYgKHNob3dBZGRCdXR0b24gJiYgc3BsaXRBY3Rpb25zLmxlbmd0aCAgPT09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgPCEtLSA8cC1idXR0b25cclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNpcmNsZS1maWxsIHRleHQtZ3JlZW4tNTAwXCIgKm5nSWY9XCJzaG93QWRkQnV0dG9uICYmIGFkZEJ1dHRvbkNvbmZpZ3MubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIihhZGRCdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgICAgXCIob25DbGljayk9XCJhY3Rpb24uZW1pdCh7IG5hbWU6ICdhZGQnLCByb3c6IG51bGwhIH0pXCJcclxuICAgICAgICAgICAgb3V0bGluZWQgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAvPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhZGRCdXR0b25MYWJlbHwgdHJhbnNsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1wbHVzJyxcclxuICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgICAgIG91dGxpbmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOicnXHJcbiAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24uZW1pdCh7IG5hbWU6ICdhZGQnLCByb3c6IG51bGwhIH0pXCI+XHJcbiAgICAgICAgICAgICAgICA8L3VpLWJ1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICA8IS0tIFNwbGl0IEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwbGl0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhZGRCdXR0b25MYWJlbHwgdHJhbnNsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXBsdXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGluZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNwbGl0QWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbi5lbWl0KHsgbmFtZTogJ2FkZCcsIHJvdzogbnVsbCEgfSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC91aS1idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTZWFyY2ggJiYgZmlsdGVyczsgZWxzZSBlbXB0eVNlYXJjaFwiPlxyXG4gICAgICAgICAgIDxsaWItZ2VuZXJpYy1zZWFyY2hcclxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJmaWx0ZXJNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBbZmllbGRzXT1cImZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgKHNlYXJjaCk9XCJhcHBseVNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChyZXNldCk9XCJhcHBseVNlYXJjaCgnJylcIlxyXG4gICAgICAgICAgICAgID48L2xpYi1nZW5lcmljLXNlYXJjaD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxyXG4gICAgPCEtLSBSZW5kZXIgYSBkdW1teSBkaXYgdG8gcHJlc2VydmUgZXhwZWN0ZWQgRE9NIHNoYXBlIC0tPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibWluLWgtWzIuNXJlbV0gdy1bMTJyZW1dXCI+PC9kaXY+IC0tPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1yZWZyZXNoXCIgb3V0bGluZWQgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAob25DbGljayk9XCJhcHBseVNlYXJjaCgnJylcIiAvPlxyXG4gICAgICAgICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIiBjbGFzcz1cIm0tMCBwLTBcIiAvPlxyXG4gICAgICAgICAgICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktc29ydFwiIG91dGxpbmVkIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIjEgb2YgMTVcIiBvdXRsaW5lZCBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLWNoZXZyb24tcmlnaHRcIiBvdXRsaW5lZCBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiIG91dGxpbmVkIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbjxsaWItZ2VuZXJpYy10YWJsZVxyXG4gIFtkYXRhXT1cImRhdGFcIlxyXG4gIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICBbYWN0aW9uc109XCJhY3Rpb25zXCJcclxuICBbYWN0aW9uc01vZGVdPVwiYWN0aW9uc01vZGVcIlxyXG4gIFtmaXJzdF09XCJmaXJzdFwiXHJcbiAgW3Jvd3NdPVwicm93c1wiXHJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gIFtzb3J0RmllbGRdPVwic29ydEZpZWxkXCJcclxuICBbc29ydE9yZGVyXT1cInNvcnRPcmRlclwiXHJcbiAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxyXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICBbc2hvd1Jvd1NlbGVjdGlvbkNoZWNrYm94XT1cInNob3dSb3dTZWxlY3Rpb25DaGVja2JveFwiXHJcbiAgKGFjdGlvbik9XCJhY3Rpb24uZW1pdCgkZXZlbnQpXCJcclxuICAob25BZGROZXcpPVwiYWN0aW9uLmVtaXQoeyBuYW1lOiAnYWRkJywgcm93OiBudWxsISB9KVwiXHJcbiAgKHBhZ2VDaGFuZ2UpPVwib25MYXp5TG9hZCgkZXZlbnQpXCJcclxuICBbcm93U2VsZWN0YWJsZV09XCJyb3dTZWxlY3RhYmxlXCJcclxuICAocm93U2VsZWN0KT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXHJcbiAgWyhzZWxlY3Rpb24pXT1cIl9zZWxlY3RlZFJvd3NcIlxyXG4gICNnZW5lcmljVGFibGVcclxuPjwvbGliLWdlbmVyaWMtdGFibGU+XHJcblxyXG5cclxuXHJcblxyXG48IS0tIERyYXdlciAtLT5cclxuPHAtZHJhd2VyXHJcbiAgKm5nSWY9XCIodHlwZW9mIGRpc3BsYXlNb2RlID09PSAnc3RyaW5nJyA/IGRpc3BsYXlNb2RlIDogaXNFZGl0TW9kZSA/IGRpc3BsYXlNb2RlWydlZGl0J10gOiBpc1ZpZXdNb2RlID09PSBmYWxzZSA/IGRpc3BsYXlNb2RlWydhZGQnXSA6IGRpc3BsYXlNb2RlWyd2aWV3J10gICkgPT09ICdkcmF3ZXInICYmIGRyYXdlclZpc2libGVcIlxyXG4gIFsodmlzaWJsZSldPVwiZHJhd2VyVmlzaWJsZVwiXHJcbiAgW2Nsb3NhYmxlXT1cInRydWVcIlxyXG4gIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiXHJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXHJcbiAgKHZpc2libGVDaGFuZ2UpPVwidmlzaWJsZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gIHN0eWxlQ2xhc3M9XCIhdy1mdWxsIG1kOiF3LTgwIGxnOiF3LVs0MHJlbV1cIj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1sZ1wiPlxyXG4gICAgICB7eyBpc0VkaXRNb2RlID8gJ9iq2LnYr9mK2YQnIDogaXNWaWV3TW9kZSA9PT0gZmFsc2UgPyAn2KXYttin2YHYqScgOiAn2LnYsdi2JyB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwhLS0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiAtLT5cclxuICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAgY2xhc3M9XCJwLTRcIj5cclxuICAgIDxmb3JtbHktZm9ybSBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmb3JtRmllbGRzX1wiIFttb2RlbF09XCJtb2RlbFwiIFtvcHRpb25zXT1cIm9wdGlvbnNcIj48L2Zvcm1seS1mb3JtPlxyXG4gIDwvZm9ybT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwiIWlzVmlld01vZGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgW2xhYmVsXT1cImlzRWRpdE1vZGUgPyAoJ1VQREFURScgfCB0cmFuc2xhdGUpIDogKCdTQVZFJyB8IHRyYW5zbGF0ZSlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmb3JtLmludmFsaWRcIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgbGFiZWw9XCJ7eyAnQ0FOQ0VMJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJkcmF3ZXJWaXNpYmxlID0gZmFsc2VcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZHJhd2VyPlxyXG5cclxuPCEtLSBEaWFsb2cgLS0+XHJcbjxwLWRpYWxvZ1xyXG4gICpuZ0lmPVwiKHR5cGVvZiBkaXNwbGF5TW9kZSA9PT0gJ3N0cmluZycgPyBkaXNwbGF5TW9kZSA6IGlzRWRpdE1vZGUgPyBkaXNwbGF5TW9kZVsnZWRpdCddIDogaXNWaWV3TW9kZSA9PT0gZmFsc2UgPyBkaXNwbGF5TW9kZVsnYWRkJ10gOiBkaXNwbGF5TW9kZVsndmlldyddICApID09PSAnZGlhbG9nJyAmJiBkaWFsb2dWaXNpYmxlXCJcclxuICBbKHZpc2libGUpXT1cImRpYWxvZ1Zpc2libGVcIlxyXG4gIFttb2RhbF09XCJ0cnVlXCJcclxuICBbY2xvc2FibGVdPVwidHJ1ZVwiXHJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJ0cnVlXCJcclxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcclxuICAodmlzaWJsZUNoYW5nZSk9XCJ2aXNpYmxlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgW3N0eWxlXT1cInsgd2lkdGg6ICc5NXZ3JywgbWF4V2lkdGg6ICc0MHJlbScgfVwiXHJcbiAgW2hlYWRlcl09XCJpc0VkaXRNb2RlID8gJ9iq2LnYr9mK2YQnIDogaXNWaWV3TW9kZSA9PT0gZmFsc2UgPyAn2KXYttin2YHYqScgOiB2aWV3SGVhZGVyVGl0bGVcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNWaWV3TW9kZVwiIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIGJnLXdoaXRlLzUwIHBvaW50ZXItZXZlbnRzLWF1dG8gcm91bmRlZC1tZFwiPjwvZGl2PlxyXG4gICAgPGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJwLTRcIj5cclxuICAgICAgPGZvcm1seS1mb3JtIFtmb3JtXT1cImZvcm1cIiBbZmllbGRzXT1cImZvcm1GaWVsZHNfXCIgW21vZGVsXT1cIm1vZGVsXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiPjwvZm9ybWx5LWZvcm0+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNWaWV3TW9kZVwiXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIFtsYWJlbF09XCJpc0VkaXRNb2RlID8gKCdVUERBVEUnIHwgdHJhbnNsYXRlKSA6ICgnU0FWRScgfCB0cmFuc2xhdGUpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmb3JtLmludmFsaWRcIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIGxhYmVsPVwie3sgaXNWaWV3TW9kZSA/ICgnQ0xPU0UnIHwgdHJhbnNsYXRlKSA6ICgnQ0FOQ0VMJyB8IHRyYW5zbGF0ZSkgfX1cIlxyXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAoY2xpY2spPVwiZGlhbG9nVmlzaWJsZSA9IGZhbHNlXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLWRpYWxvZz5cclxuXHJcblxyXG5cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.ui.core-generic-crud-table.mjs","sources":["../tmp-esm2022/generic-crud-table/lib/generic-crud-table-module.js","../tmp-esm2022/generic-crud-table/lib/generic-crud-table.js","../tmp-esm2022/generic-crud-table/elite.framework-ng.ui.core-generic-crud-table.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GenericButtonModule } from '@elite.framework/ng.ui.core/generic-button';\nimport * as i0 from \"@angular/core\";\nexport class GenericCrudTableModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, imports: [CommonModule, GenericButtonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, GenericButtonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUtqRixNQUFNLE9BQU8sc0JBQXNCO3VHQUF0QixzQkFBc0I7d0dBQXRCLHNCQUFzQixZQUZ2QixZQUFZLEVBQUMsbUJBQW1CO3dHQUUvQixzQkFBc0IsWUFGdkIsWUFBWSxFQUFDLG1CQUFtQjs7MkZBRS9CLHNCQUFzQjtrQkFIbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUMsbUJBQW1CLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBHZW5lcmljQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL2dlbmVyaWMtYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxHZW5lcmljQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0NydWRUYWJsZU1vZHVsZSB7fVxuIl19","import { DividerModule } from 'primeng/divider';\n// src/app/shared/generic-crud-table/generic-crud-table.component.ts\nimport { Component, Input, Output, EventEmitter, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MessageModule } from 'primeng/message';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DialogModule } from 'primeng/dialog';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { SwalService } from '@elite.framework/ng.core/services';\nimport { BreadcrumbComponent } from '@elite.framework/ng.ui.core/breadcrumb';\nimport { GenericButton } from '@elite.framework/ng.ui.core/generic-button';\nimport { GenericTable } from '@elite.framework/ng.ui.core/generic-table';\nimport { GenericSearch } from '@elite.framework/ng.ui.core/generic-search';\nimport { UiButtonComponent } from '@elite.framework/ng.ui.core/ui-button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/api\";\nimport * as i3 from \"primeng/button\";\nimport * as i4 from \"primeng/divider\";\nimport * as i5 from \"primeng/drawer\";\nimport * as i6 from \"@angular/forms\";\nimport * as i7 from \"primeng/dialog\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GenericCrudTableComponent {\n genericTable;\n translate = inject(TranslateService);\n swalService = inject(SwalService);\n home = { icon: 'pi pi-home', routerLink: '/' };\n data = [];\n formFields_ = []; // <-- هنا\n formFields = []; // <-- هنا\n columns = []; // <-- هنا\n dialogMaxWidth = '40rem'; // unset , fit-content\n isViewMode = false;\n displayMode = 'drawer';\n isEditMode = false;\n drawerVisible = false;\n dialogVisible = false;\n form = new UntypedFormGroup({});\n model;\n model_ = {};\n loading = false;\n errorMsg = '';\n errorMessage = '';\n options = {};\n actions = [];\n /** تحدد طريقة العرض: 'buttons' أو 'menu' */\n actionsMode = 'buttons';\n action = new EventEmitter();\n bulkAction = new EventEmitter();\n singleAction = new EventEmitter();\n // البحث\n // Search\n filters;\n filterModel = {};\n search = new EventEmitter();\n /** للتحكم بإظهار/إخفاء قسم البحث */\n showSearch = true;\n /** Pagination Inputs */\n first = 0;\n rows = 10;\n totalRecords = 0;\n pageChange = new EventEmitter();\n onSearch = new EventEmitter();\n visibleChange = new EventEmitter();\n ;\n // @Output() visibleChange = new EventEmitter<boolean>();\n viewHeaderTitle = 'عرض التفاصيل';\n /** لجعل الجدول قابل لاختيار الصفوف (افتراضي false) */\n rowSelectable = false;\n /** حدث يخرج الصف المحدّد */\n rowSelect = new EventEmitter();\n selection = null;\n // الفرز\n sortField;\n sortOrder = 1;\n scrollHeight = '400px';\n paginator = true;\n service;\n idField = 'id';\n showRowSelectionCheckbox = false;\n bulkActionButtons = [];\n singleActionButtons = [];\n _selectedRows = [];\n get isSingleItemSelected() {\n return this._selectedRows.length === 1;\n }\n get isMultipleItemSelected() {\n return this._selectedRows.length > 1;\n }\n get selectedItems() {\n return this._selectedRows;\n }\n /** للتحكم بإظهار زر الإضافة */\n showAddButton = true;\n splitActions = [];\n /** الأيقونة الافتراضية لزر الإضافة */\n addButtonIcon = 'pi pi-plus';\n /** النص الافتراضي لزر الإضافة */\n addButtonLabel = 'ADD';\n /** تتحكّم بموقع زر الإضافة: 'top' أو 'bottom' */\n addButtonPosition = 'top';\n addButtonConfigs = [];\n breadcrumb;\n get breadcrumb_() {\n return this.breadcrumb?.map(v => ({\n ...v,\n label: this.translate.instant(v.label ?? '')\n }));\n }\n get rtl() {\n try {\n return document?.documentElement?.dir === 'rtl';\n }\n catch (error) {\n return true;\n }\n }\n // private destroy$ = new Subject<void>();\n /** الآن يتلقّى pagination + sort في حدث واحد */\n onLazyLoad(event) {\n // this.model_= this.model ?? {};\n this.model = this.model ?? {};\n this.formFields_ = this.formFields;\n const first = event.first ?? this.first;\n const rows = event.rows ?? this.rows;\n const sortField = typeof event.sortField === 'string'\n ? event.sortField\n : this.sortField;\n const sortOrder = event.sortOrder === -1 ? -1 : 1;\n const filters = {};\n if (event.filters) {\n Object.entries(event.filters).forEach(([field, meta]) => {\n const value = meta.value;\n if (value != null && value !== '') {\n filters[field] = value;\n }\n });\n }\n this.first = first;\n this.rows = rows;\n this.sortField = sortField;\n this.sortOrder = sortOrder;\n const dir = sortOrder === 1 ? 'asc' : 'desc';\n const sort = sortField ? `${sortField} ${dir}` : undefined;\n this.pageChange.emit({ first, rows, sort, filters });\n // يبني النص وإرساله\n }\n /** تصيير البيانات حسب الصفحة */\n get pagedData() {\n // return this.data ? this.data.slice(this.first, this.first + this.rows) : [];\n return this.data;\n }\n get globalFilterFields() {\n return this.columns.map(c => String(c.key));\n }\n /** أرسل إلى الأب لأتمتة شكل البحث إذا يحتاج */\n // from generic-crud-table.component.ts\n /** بدّل applySearch لتبث pageChange مباشرةً */\n applySearch(filters) {\n // this.genericTable.applyFilter(global);\n this.onSearch.emit(filters);\n }\n /** دالة تنفّذ عند النقر على صف */\n onRowClick(row) {\n console.log('GenericCrudTableComponent.rowClick:', row);\n if (this.rowSelectable) {\n this.rowSelect.emit(row);\n }\n }\n beforeSave = (record) => record;\n // onSubmit() {\n // if (this.form.invalid) return;\n // this.loading = true;\n // this.errorMessage = null;\n // const service = this.service /* as CrudService<T> */;\n // const id = this.isEditMode ? (this.model as any)[this.idField] : null;\n // const recordToSave = this.beforeSave({ ...this.model });\n // const operation$: Observable<any> = this.isEditMode\n // ? service.update(id, recordToSave)\n // : service.create(recordToSave);\n // // operation$.pipe(takeUntil(this.destroy$)).subscribe({\n // operation$.subscribe({\n // next: () => {\n // // this.ref.close(true); // نجاح العملية\n // this.visibleChange.emit(false)\n // // this.pageChange.emit({ first, rows ,sort, filters });\n // this.applySearch('');\n // // this.me\n // },\n // error: (err:any) => {\n // this.loading = false;\n // this.errorMessage = err.error?.title ||\n // err.message ||\n // 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n // }\n // });\n // }\n onSubmit() {\n if (this.form.invalid)\n return;\n // ✅ أول شيء نطلب تأكيد من المستخدم\n this.swalService.confirm(this.isEditMode ? 'تأكيد التعديل' : 'تأكيد الحفظ', this.isEditMode\n ? 'هل تريد حفظ التعديلات على هذا السجل؟'\n : 'هل تريد حفظ هذا السجل؟', 'نعم', 'إلغاء').then((result) => {\n if (!result.isConfirmed)\n return;\n this.loading = true;\n this.errorMessage = null;\n const service = this.service;\n const id = this.isEditMode ? this.model[this.idField] : null;\n const recordToSave = this.beforeSave({ ...this.model });\n const operation$ = this.isEditMode\n ? service.update(id, recordToSave)\n : service.create(recordToSave);\n operation$.subscribe({\n next: () => {\n this.loading = false;\n // ✅ رسالة نجاح\n this.swalService.success(this.isEditMode ? 'تم التعديل بنجاح' : 'تم الحفظ بنجاح');\n this.visibleChange.emit(false);\n this.applySearch('');\n },\n error: (err) => {\n this.loading = false;\n const msg = err.error?.title ||\n err.message ||\n 'حدث خطأ أثناء الحفظ. يرجى المحاولة مرة أخرى.';\n this.errorMessage = msg;\n // ❌ رسالة خطأ\n this.swalService.error('فشل الحفظ', msg);\n }\n });\n });\n }\n trackByIdx(index, item) {\n return index;\n }\n onSingleItemAction(btn) {\n if (!this.isSingleItemSelected)\n return;\n const selectedItem = this._selectedRows[0];\n this.singleAction.emit({\n name: btn.actionName ?? 'singleAction',\n item: selectedItem\n });\n }\n onInternalBulkAction(btn) {\n if (!this.isMultipleItemSelected)\n return;\n this.bulkAction.emit({\n name: btn.actionName ?? 'bulkAction',\n items: [...this._selectedRows] // نرسل نسخة من المصفوفة\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericCrudTableComponent, isStandalone: true, selector: \"app-generic-crud-table\", inputs: { data: \"data\", formFields: \"formFields\", columns: \"columns\", dialogMaxWidth: \"dialogMaxWidth\", isViewMode: \"isViewMode\", displayMode: \"displayMode\", isEditMode: \"isEditMode\", drawerVisible: \"drawerVisible\", dialogVisible: \"dialogVisible\", model: \"model\", loading: \"loading\", errorMsg: \"errorMsg\", errorMessage: \"errorMessage\", actions: \"actions\", actionsMode: \"actionsMode\", filters: \"filters\", filterModel: \"filterModel\", showSearch: \"showSearch\", first: \"first\", rows: \"rows\", totalRecords: \"totalRecords\", rowSelectable: \"rowSelectable\", scrollHeight: \"scrollHeight\", paginator: \"paginator\", service: \"service\", idField: \"idField\", showRowSelectionCheckbox: \"showRowSelectionCheckbox\", bulkActionButtons: \"bulkActionButtons\", singleActionButtons: \"singleActionButtons\", showAddButton: \"showAddButton\", splitActions: \"splitActions\", addButtonIcon: \"addButtonIcon\", addButtonLabel: \"addButtonLabel\", addButtonPosition: \"addButtonPosition\", addButtonConfigs: \"addButtonConfigs\", breadcrumb: \"breadcrumb\", beforeSave: \"beforeSave\" }, outputs: { action: \"action\", bulkAction: \"bulkAction\", singleAction: \"singleAction\", search: \"search\", pageChange: \"pageChange\", onSearch: \"onSearch\", visibleChange: \"visibleChange\", rowSelect: \"rowSelect\" }, host: { classAttribute: \"h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl p-4 bg-white\" }, viewQueries: [{ propertyName: \"genericTable\", first: true, predicate: [\"genericTable\"], descendants: true }], ngImport: i0, template: \"\\r\\n <div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <!-- <div class=\\\"text-2xl leading-8 font-medium bg-slate-800 p-4 rounded-md\\\">\\r\\n <p-breadcrumb\\r\\n [model]=\\\"breadcrumb_\\\"\\r\\n [home]=\\\"home\\\"\\r\\n styleClass=\\\"custom-breadcrumb\\\"\\r\\n ></p-breadcrumb>\\r\\n </div> -->\\r\\n\\r\\n<app-breadcrumb [breadcrumb]=\\\"breadcrumb_\\\"></app-breadcrumb>\\r\\n\\r\\n </div>\\r\\n\\r\\n<div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n <ng-container *ngIf=\\\"isSingleItemSelected\\\">\\r\\n <ng-container *ngFor=\\\"let btn of singleActionButtons; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n[label]=\\\"btn.label | translate\\\"\\r\\n[variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n</ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"selectedItems.length > 0\\\">\\r\\n <ng-container *ngFor=\\\"let btn of bulkActionButtons; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\" this.action.emit({ name: btn.actionName ?? 'add', row: null! });\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n\\r\\n\\r\\n\\r\\n @if ((showAddButton || splitActions.length > 0)&& addButtonConfigs.length === 0) {\\r\\n\\r\\n @if (showAddButton && splitActions.length === 0) {\\r\\n\\r\\n <!-- <p-button\\r\\n icon=\\\"pi pi-circle-fill text-green-500\\\" *ngIf=\\\"showAddButton && addButtonConfigs.length === 0\\\"\\r\\n [label]=\\\"(addButtonLabel | translate)\\r\\n \\\"(onClick)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n outlined severity=\\\"secondary\\\" /> -->\\r\\n\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'button',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n outlined: false,\\r\\n styleClass:''\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n @else {\\r\\n <!-- Split Button -->\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'split',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n loading: false,\\r\\n outlined: false,\\r\\n items: splitActions\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n\\r\\n\\r\\n }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n\\r\\n <ng-container *ngIf=\\\"showSearch && filters; else emptySearch\\\">\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"applySearch('')\\\"\\r\\n ></lib-generic-search>\\r\\n </ng-container>\\r\\n\\r\\n <ng-template #emptySearch>\\r\\n <!-- Render a dummy div to preserve expected DOM shape -->\\r\\n <!-- <div class=\\\"min-h-[2.5rem] w-[12rem]\\\"></div> -->\\r\\n </ng-template>\\r\\n\\r\\n <div class=\\\"flex items-center gap-3\\\">\\r\\n\\r\\n <p-button icon=\\\"pi pi-refresh\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"applySearch('')\\\" />\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0\\\" />\\r\\n <p-button icon=\\\"pi pi-sort\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button label=\\\"1 of 15\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-right\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-left\\\" outlined severity=\\\"secondary\\\" />\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n<lib-generic-table\\r\\n [showAddButton]=\\\"showAddButton\\\"\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n></lib-generic-table>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n<!-- Drawer -->\\r\\n<p-drawer\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'drawer' && drawerVisible\\\"\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissible]=\\\"false\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n styleClass=\\\"!w-full md:!w-80 lg:!w-[40rem]\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <span class=\\\"font-bold text-lg\\\">\\r\\n {{ isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : '\\u0639\\u0631\\u0636' }}\\r\\n </span>\\r\\n </ng-template>\\r\\n<!-- (ngSubmit)=\\\"onSubmit()\\\" -->\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\" *ngIf=\\\"!isViewMode\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ 'CANCEL' | translate }}\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"drawerVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n<!-- Dialog -->\\r\\n<p-dialog\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'dialog' && dialogVisible\\\"\\r\\n [(visible)]=\\\"dialogVisible\\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissableMask]=\\\"true\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n [style]=\\\"{ width: '95vw', maxWidth: dialogMaxWidth }\\\"\\r\\n [header]=\\\"isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : viewHeaderTitle\\\">\\r\\n<!-- [breakpoints]=\\\"{ '1200px': '50vw', '768px': '70vw', '560px': '95vw' }\\\" -->\\r\\n <div class=\\\"relative\\\">\\r\\n <div *ngIf=\\\"isViewMode\\\" class=\\\"absolute inset-0 z-10 bg-white/50 pointer-events-auto rounded-md\\\"></div>\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button *ngIf=\\\"!isViewMode\\\"\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n (click)=\\\"onSubmit()\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ isViewMode ? ('CLOSE' | translate) : ('CANCEL' | translate) }}\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"dialogVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-dialog>\\r\\n\\r\\n\\r\\n\\r\\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: \"ngmodule\", type: TableModule }, { kind: \"directive\", type: i2.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { 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: ButtonModule }, { kind: \"directive\", type: i3.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i3.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: GenericSearch, selector: \"lib-generic-search\", inputs: [\"placeholder\", \"model\", \"fields\"], outputs: [\"search\"] }, { kind: \"component\", type: GenericTable, selector: \"lib-generic-table\", inputs: [\"data\", \"columns\", \"loading\", \"actions\", \"actionsMode\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"globalFilterFields\", \"scrollHeight\", \"rowSelectable\", \"showAddButton\", \"selection\", \"paginator\", \"showRowSelectionCheckbox\"], outputs: [\"action\", \"pageChange\", \"onAddNew\", \"rowSelect\", \"selectionChange\"] }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: DividerModule }, { kind: \"component\", type: i4.Divider, selector: \"p-divider\", inputs: [\"styleClass\", \"layout\", \"type\", \"align\"] }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i5.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i6.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i6.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i6.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: MessageModule }, { kind: \"component\", type: BreadcrumbComponent, selector: \"app-breadcrumb\", inputs: [\"breadcrumb\"] }, { kind: \"ngmodule\", type: DialogModule }, { kind: \"component\", type: i7.Dialog, selector: \"p-dialog\", inputs: [\"header\", \"draggable\", \"resizable\", \"contentStyle\", \"contentStyleClass\", \"modal\", \"closeOnEscape\", \"dismissableMask\", \"rtl\", \"closable\", \"breakpoints\", \"styleClass\", \"maskStyleClass\", \"maskStyle\", \"showHeader\", \"blockScroll\", \"autoZIndex\", \"baseZIndex\", \"minX\", \"minY\", \"focusOnShow\", \"maximizable\", \"keepInViewport\", \"focusTrap\", \"transitionOptions\", \"closeIcon\", \"closeAriaLabel\", \"closeTabindex\", \"minimizeIcon\", \"maximizeIcon\", \"closeButtonProps\", \"maximizeButtonProps\", \"visible\", \"style\", \"position\", \"role\", \"appendTo\", \"content\", \"contentTemplate\", \"footerTemplate\", \"closeIconTemplate\", \"maximizeIconTemplate\", \"minimizeIconTemplate\", \"headlessTemplate\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\", \"onResizeInit\", \"onResizeEnd\", \"onDragEnd\", \"onMaximize\"] }, { kind: \"component\", type: UiButtonComponent, selector: \"ui-button\", inputs: [\"config\"], outputs: [\"onClick\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericCrudTableComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-generic-crud-table', standalone: true, imports: [\n CommonModule,\n TableModule,\n GenericButton,\n ButtonModule,\n GenericSearch,\n GenericTable,\n ToolbarModule,\n TranslateModule,\n DividerModule,\n IconFieldModule,\n DrawerModule,\n FormlyForm,\n ReactiveFormsModule,\n FormsModule,\n MessageModule,\n BreadcrumbComponent,\n DialogModule,\n UiButtonComponent\n ], host: {\n class: 'h-full flex-1 flex flex-col overflow-hidden border border-surface rounded-2xl p-4 bg-white'\n }, template: \"\\r\\n <div class=\\\"flex items-start gap-2 justify-between\\\">\\r\\n <div>\\r\\n <!-- <div class=\\\"text-2xl leading-8 font-medium bg-slate-800 p-4 rounded-md\\\">\\r\\n <p-breadcrumb\\r\\n [model]=\\\"breadcrumb_\\\"\\r\\n [home]=\\\"home\\\"\\r\\n styleClass=\\\"custom-breadcrumb\\\"\\r\\n ></p-breadcrumb>\\r\\n </div> -->\\r\\n\\r\\n<app-breadcrumb [breadcrumb]=\\\"breadcrumb_\\\"></app-breadcrumb>\\r\\n\\r\\n </div>\\r\\n\\r\\n<div class=\\\"flex items-center gap-2 justify-end flex-wrap\\\">\\r\\n <ng-container *ngIf=\\\"isSingleItemSelected\\\">\\r\\n <ng-container *ngFor=\\\"let btn of singleActionButtons; trackBy: trackByIdx\\\">\\r\\n <lib-generic-button\\r\\n\\r\\n [icon]=\\\"btn.icon\\\"\\r\\n[label]=\\\"btn.label | translate\\\"\\r\\n[variant]=\\\"btn.variant\\\"\\r\\n [size]=\\\"btn.size\\\"\\r\\n [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onSingleItemAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n</ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"selectedItems.length > 0\\\">\\r\\n <ng-container *ngFor=\\\"let btn of bulkActionButtons; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\"onInternalBulkAction(btn)\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngFor=\\\"let btn of addButtonConfigs; trackBy: trackByIdx\\\">\\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 [permission]=\\\"btn.permission\\\"\\r\\n (clicked)=\\\" this.action.emit({ name: btn.actionName ?? 'add', row: null! });\\\"\\r\\n ></lib-generic-button>\\r\\n </ng-container>\\r\\n\\r\\n\\r\\n\\r\\n @if ((showAddButton || splitActions.length > 0)&& addButtonConfigs.length === 0) {\\r\\n\\r\\n @if (showAddButton && splitActions.length === 0) {\\r\\n\\r\\n <!-- <p-button\\r\\n icon=\\\"pi pi-circle-fill text-green-500\\\" *ngIf=\\\"showAddButton && addButtonConfigs.length === 0\\\"\\r\\n [label]=\\\"(addButtonLabel | translate)\\r\\n \\\"(onClick)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n outlined severity=\\\"secondary\\\" /> -->\\r\\n\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'button',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n outlined: false,\\r\\n styleClass:''\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n @else {\\r\\n <!-- Split Button -->\\r\\n <ui-button\\r\\n [config]=\\\"{\\r\\n type: 'split',\\r\\n label: addButtonLabel| translate,\\r\\n icon: 'pi pi-plus',\\r\\n severity: 'primary',\\r\\n loading: false,\\r\\n outlined: false,\\r\\n items: splitActions\\r\\n }\\\"\\r\\n (onClick)=\\\"action.emit({ name: 'add', row: null! })\\\">\\r\\n </ui-button>\\r\\n }\\r\\n\\r\\n\\r\\n }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"mt-2 mb-4 flex items-center justify-between\\\">\\r\\n\\r\\n <ng-container *ngIf=\\\"showSearch && filters; else emptySearch\\\">\\r\\n <lib-generic-search\\r\\n [model]=\\\"filterModel\\\"\\r\\n [fields]=\\\"filters\\\"\\r\\n (search)=\\\"applySearch($event)\\\"\\r\\n (reset)=\\\"applySearch('')\\\"\\r\\n ></lib-generic-search>\\r\\n </ng-container>\\r\\n\\r\\n <ng-template #emptySearch>\\r\\n <!-- Render a dummy div to preserve expected DOM shape -->\\r\\n <!-- <div class=\\\"min-h-[2.5rem] w-[12rem]\\\"></div> -->\\r\\n </ng-template>\\r\\n\\r\\n <div class=\\\"flex items-center gap-3\\\">\\r\\n\\r\\n <p-button icon=\\\"pi pi-refresh\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"applySearch('')\\\" />\\r\\n <p-divider layout=\\\"vertical\\\" class=\\\"m-0 p-0\\\" />\\r\\n <p-button icon=\\\"pi pi-sort\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button label=\\\"1 of 15\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-right\\\" outlined severity=\\\"secondary\\\" />\\r\\n <p-button icon=\\\"pi pi-chevron-left\\\" outlined severity=\\\"secondary\\\" />\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n<lib-generic-table\\r\\n [showAddButton]=\\\"showAddButton\\\"\\r\\n [data]=\\\"data\\\"\\r\\n [columns]=\\\"columns\\\"\\r\\n [paginator]=\\\"paginator\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n [actions]=\\\"actions\\\"\\r\\n [actionsMode]=\\\"actionsMode\\\"\\r\\n [first]=\\\"first\\\"\\r\\n [rows]=\\\"rows\\\"\\r\\n [totalRecords]=\\\"totalRecords\\\"\\r\\n [sortField]=\\\"sortField\\\"\\r\\n [sortOrder]=\\\"sortOrder\\\"\\r\\n [globalFilterFields]=\\\"globalFilterFields\\\"\\r\\n [scrollHeight]=\\\"scrollHeight\\\"\\r\\n [showRowSelectionCheckbox]=\\\"showRowSelectionCheckbox\\\"\\r\\n (action)=\\\"action.emit($event)\\\"\\r\\n (onAddNew)=\\\"action.emit({ name: 'add', row: null! })\\\"\\r\\n (pageChange)=\\\"onLazyLoad($event)\\\"\\r\\n [rowSelectable]=\\\"rowSelectable\\\"\\r\\n (rowSelect)=\\\"onRowClick($event)\\\"\\r\\n [(selection)]=\\\"_selectedRows\\\"\\r\\n #genericTable\\r\\n></lib-generic-table>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n<!-- Drawer -->\\r\\n<p-drawer\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'drawer' && drawerVisible\\\"\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissible]=\\\"false\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n styleClass=\\\"!w-full md:!w-80 lg:!w-[40rem]\\\">\\r\\n\\r\\n <ng-template pTemplate=\\\"header\\\">\\r\\n <span class=\\\"font-bold text-lg\\\">\\r\\n {{ isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : '\\u0639\\u0631\\u0636' }}\\r\\n </span>\\r\\n </ng-template>\\r\\n<!-- (ngSubmit)=\\\"onSubmit()\\\" -->\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\" *ngIf=\\\"!isViewMode\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ 'CANCEL' | translate }}\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"drawerVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n<!-- Dialog -->\\r\\n<p-dialog\\r\\n *ngIf=\\\"(typeof displayMode === 'string' ? displayMode : isEditMode ? displayMode['edit'] : isViewMode === false ? displayMode['add'] : displayMode['view'] ) === 'dialog' && dialogVisible\\\"\\r\\n [(visible)]=\\\"dialogVisible\\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [closable]=\\\"true\\\"\\r\\n [dismissableMask]=\\\"true\\\"\\r\\n [closeOnEscape]=\\\"true\\\"\\r\\n (visibleChange)=\\\"visibleChange.emit($event)\\\"\\r\\n [style]=\\\"{ width: '95vw', maxWidth: dialogMaxWidth }\\\"\\r\\n [header]=\\\"isEditMode ? '\\u062A\\u0639\\u062F\\u064A\\u0644' : isViewMode === false ? '\\u0625\\u0636\\u0627\\u0641\\u0629' : viewHeaderTitle\\\">\\r\\n<!-- [breakpoints]=\\\"{ '1200px': '50vw', '768px': '70vw', '560px': '95vw' }\\\" -->\\r\\n <div class=\\\"relative\\\">\\r\\n <div *ngIf=\\\"isViewMode\\\" class=\\\"absolute inset-0 z-10 bg-white/50 pointer-events-auto rounded-md\\\"></div>\\r\\n <form *ngIf=\\\"form\\\" [formGroup]=\\\"form\\\" class=\\\"p-4\\\">\\r\\n <formly-form [form]=\\\"form\\\" [fields]=\\\"formFields_\\\" [model]=\\\"model\\\" [options]=\\\"options\\\"></formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end gap-2\\\">\\r\\n <button *ngIf=\\\"!isViewMode\\\"\\r\\n pButton\\r\\n [label]=\\\"isEditMode ? ('UPDATE' | translate) : ('SAVE' | translate)\\\"\\r\\n type=\\\"button\\\"\\r\\n [disabled]=\\\"loading || form.invalid\\\"\\r\\n [loading]=\\\"loading\\\"\\r\\n (click)=\\\"onSubmit()\\\">\\r\\n </button>\\r\\n <button\\r\\n pButton\\r\\n label=\\\"{{ isViewMode ? ('CLOSE' | translate) : ('CANCEL' | translate) }}\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"dialogVisible = false\\\">\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-dialog>\\r\\n\\r\\n\\r\\n\\r\\n\" }]\n }], propDecorators: { genericTable: [{\n type: ViewChild,\n args: ['genericTable']\n }], data: [{\n type: Input\n }], formFields: [{\n type: Input\n }], columns: [{\n type: Input\n }], dialogMaxWidth: [{\n type: Input\n }], isViewMode: [{\n type: Input\n }], displayMode: [{\n type: Input\n }], isEditMode: [{\n type: Input\n }], drawerVisible: [{\n type: Input\n }], dialogVisible: [{\n type: Input\n }], model: [{\n type: Input\n }], loading: [{\n type: Input\n }], errorMsg: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], actions: [{\n type: Input\n }], actionsMode: [{\n type: Input\n }], action: [{\n type: Output\n }], bulkAction: [{\n type: Output\n }], singleAction: [{\n type: Output\n }], filters: [{\n type: Input\n }], filterModel: [{\n type: Input\n }], search: [{\n type: Output\n }], showSearch: [{\n type: Input\n }], first: [{\n type: Input\n }], rows: [{\n type: Input\n }], totalRecords: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], onSearch: [{\n type: Output\n }], visibleChange: [{\n type: Output\n }], rowSelectable: [{\n type: Input\n }], rowSelect: [{\n type: Output\n }], scrollHeight: [{\n type: Input\n }], paginator: [{\n type: Input\n }], service: [{\n type: Input\n }], idField: [{\n type: Input\n }], showRowSelectionCheckbox: [{\n type: Input\n }], bulkActionButtons: [{\n type: Input\n }], singleActionButtons: [{\n type: Input\n }], showAddButton: [{\n type: Input\n }], splitActions: [{\n type: Input\n }], addButtonIcon: [{\n type: Input\n }], addButtonLabel: [{\n type: Input\n }], addButtonPosition: [{\n type: Input\n }], addButtonConfigs: [{\n type: Input\n }], breadcrumb: [{\n type: Input\n }], beforeSave: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvbGliL2dlbmVyaWMtY3J1ZC10YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLWNydWQtdGFibGUvc3JjL2xpYi9nZW5lcmljLWNydWQtdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsb0VBQW9FO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTyxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFRLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQXFCLFVBQVUsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGdCQUFn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RUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFJSSxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBUUEsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxTQUFTO3NCQUFqQixLQUFLO2dCQUVFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVJLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBbUJDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQTJGTSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXggKi9cclxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmUgKi9cclxuaW1wb3J0IHsgQnJlYWRjcnVtYiB9IGZyb20gJ3ByaW1lbmcvYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IERpdmlkZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpdmlkZXInO1xyXG4vLyBzcmMvYXBwL3NoYXJlZC9nZW5lcmljLWNydWQtdGFibGUvZ2VuZXJpYy1jcnVkLXRhYmxlLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBpbmplY3QsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlLFRhYmxlTGF6eUxvYWRFdmVudCAgfSAgZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSAgIGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybSwgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgSWNvbkZpZWxkTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJhd2VyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcmF3ZXInO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25Db25maWcgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgU3dhbFNlcnZpY2UgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBY3Rpb25EZWYgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9icmVhZGNydW1iJztcclxuaW1wb3J0IHsgR2VuZXJpY0J1dHRvbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLWJ1dHRvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLXRhYmxlJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlYXJjaCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaCc7XHJcbmltcG9ydCB7IFVpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy51aS5jb3JlL3VpLWJ1dHRvbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VDaGFuZ2VQYXlsb2FkIGV4dGVuZHMgUGFnaW5hdG9yU3RhdGUge1xyXG5zb3J0Pzogc3RyaW5nO1xyXG5maWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc01vZGUgPSAnYnV0dG9ucycgfCAnbWVudSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1nZW5lcmljLWNydWQtdGFibGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgVGFibGVNb2R1bGUsXHJcbiAgICBHZW5lcmljQnV0dG9uLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgR2VuZXJpY1NlYXJjaCxcclxuICAgIEdlbmVyaWNUYWJsZSxcclxuICAgIFRvb2xiYXJNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBEaXZpZGVyTW9kdWxlLFxyXG4gICAgSWNvbkZpZWxkTW9kdWxlLFxyXG4gICAgRHJhd2VyTW9kdWxlLFxyXG4gICAgRm9ybWx5Rm9ybSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1lc3NhZ2VNb2R1bGUsXHJcbiAgICBCcmVhZGNydW1iQ29tcG9uZW50LFxyXG4gICAgRGlhbG9nTW9kdWxlLFxyXG4gICAgVWlCdXR0b25Db21wb25lbnRcclxuXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy1jcnVkLXRhYmxlLmh0bWwnLFxyXG4gICBob3N0OiB7XHJcbiAgICAgICAgY2xhc3M6ICdoLWZ1bGwgZmxleC0xIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIGJvcmRlciBib3JkZXItc3VyZmFjZSByb3VuZGVkLTJ4bCBwLTQgYmctd2hpdGUnXHJcbiAgICB9LFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNDcnVkVGFibGVDb21wb25lbnQ8VD4ge1xyXG4gQFZpZXdDaGlsZCgnZ2VuZXJpY1RhYmxlJykgZ2VuZXJpY1RhYmxlITogR2VuZXJpY1RhYmxlPFQ+O1xyXG4gdHJhbnNsYXRlOlRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiBwcml2YXRlIHN3YWxTZXJ2aWNlID0gaW5qZWN0KFN3YWxTZXJ2aWNlKTtcclxuXHJcbiAgICBob21lOiBNZW51SXRlbSB8IHVuZGVmaW5lZCA9IHsgaWNvbjogJ3BpIHBpLWhvbWUnLCByb3V0ZXJMaW5rOiAnLycgfTtcclxuICBASW5wdXQoKSBkYXRhOiBUW10gPSBbXTtcclxuICAgZm9ybUZpZWxkc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTsgIC8vIDwtLSDZh9mG2KdcclxuICBASW5wdXQoKSBmb3JtRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107ICAvLyA8LS0g2YfZhtinXHJcbiAgQElucHV0KCkgY29sdW1uczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdOyAgLy8gPC0tINmH2YbYp1xyXG4gIEBJbnB1dCgpIGRpYWxvZ01heFdpZHRoID0gJzQwcmVtJzsgLy8gdW5zZXQgLCBmaXQtY29udGVudFxyXG4gIEBJbnB1dCgpIGlzVmlld01vZGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaXNwbGF5TW9kZTpcclxuICB8ICdkcmF3ZXInIHwgJ2RpYWxvZycgfCAncm91dGUnXHJcbiAgfCBQYXJ0aWFsPFJlY29yZDwnYWRkJyB8ICdlZGl0JyB8ICd2aWV3JywgJ2RyYXdlcicgfCAnZGlhbG9nJyB8ICdyb3V0ZSc+PlxyXG4gID0gJ2RyYXdlcic7XHJcbiAgQElucHV0KCkgaXNFZGl0TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRyYXdlclZpc2libGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgIGZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcbiBASW5wdXQoKSBtb2RlbDogYW55O1xyXG4gIG1vZGVsXzogYW55ID0ge307XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yTXNnID0gJyc7XHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmd8YW55ID0gJyc7XHJcblxyXG5vcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiBBY3Rpb25EZWY8VD5bXSA9IFtdO1xyXG4gICAgLyoqINiq2K3Yr9ivINi32LHZitmC2Kkg2KfZhNi52LHYtjogJ2J1dHRvbnMnINij2YggJ21lbnUnICovXHJcbiAgQElucHV0KCkgYWN0aW9uc01vZGU6IEFjdGlvbnNNb2RlID0gJ2J1dHRvbnMnO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyByb3c6IFQgfT4oKTtcclxuICBAT3V0cHV0KCkgYnVsa0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IGl0ZW1zOiBUW10gfT4oKTtcclxuICBAT3V0cHV0KCkgc2luZ2xlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5hbWU6IHN0cmluZzsgaXRlbTogVCB9PigpO1xyXG5cclxuICAvLyDYp9mE2KjYrdirXHJcbi8vIFNlYXJjaFxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IGFueTtcclxuICAgQElucHV0KCkgZmlsdGVyTW9kZWw6IGFueSA9IHt9O1xyXG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZzsgZ2xvYmFsOiBzdHJpbmcgfT4oKTtcclxuXHJcbi8qKiDZhNmE2KrYrdmD2YUg2KjYpdi42YfYp9ixL9il2K7Zgdin2KEg2YLYs9mFINin2YTYqNit2KsgKi9cclxuICBASW5wdXQoKSBzaG93U2VhcmNoID0gdHJ1ZTtcclxuXHJcbiAgLyoqIFBhZ2luYXRpb24gSW5wdXRzICovXHJcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xyXG4gIEBJbnB1dCgpIHJvd3MgPSAxMDtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlUGF5bG9hZD4oKTtcclxuICBAT3V0cHV0KCkgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbkBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7O1xyXG4vLyBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxudmlld0hlYWRlclRpdGxlID0gJ9i52LHYtiDYp9mE2KrZgdin2LXZitmEJztcclxuICAgLyoqINmE2KzYudmEINin2YTYrNiv2YjZhCDZgtin2KjZhCDZhNin2K7YqtmK2KfYsSDYp9mE2LXZgdmI2YEgKNin2YHYqtix2KfYttmKIGZhbHNlKSAqL1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGFibGUgPSBmYWxzZTtcclxuICAvKiog2K3Yr9irINmK2K7YsdisINin2YTYtdmBINin2YTZhdit2K/ZkdivICovXHJcbiAgQE91dHB1dCgpIHJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgc2VsZWN0aW9uOiBUIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gLy8g2KfZhNmB2LHYslxyXG4gIHNvcnRGaWVsZD86IHN0cmluZztcclxuICBzb3J0T3JkZXI6IDEgfCAtMSA9IDE7XHJcblxyXG5ASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnNDAwcHgnO1xyXG5cclxuIEBJbnB1dCgpIHBhZ2luYXRvciA9IHRydWU7XHJcblxyXG5ASW5wdXQoKSBzZXJ2aWNlOiBCYXNlU2VydmljZXxhbnk7XHJcbkBJbnB1dCgpIGlkRmllbGQgPSAnaWQnO1xyXG5cclxuIEBJbnB1dCgpIHNob3dSb3dTZWxlY3Rpb25DaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBidWxrQWN0aW9uQnV0dG9uczogQnV0dG9uQ29uZmlnW10gPSBbXTtcclxuICBASW5wdXQoKSBzaW5nbGVBY3Rpb25CdXR0b25zOiBCdXR0b25Db25maWdbXSA9IFtdO1xyXG5cclxuIF9zZWxlY3RlZFJvd3M6IFRbXSA9IFtdO1xyXG5cclxuZ2V0IGlzU2luZ2xlSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB0aGlzLl9zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxO1xyXG59XHJcblxyXG5nZXQgaXNNdWx0aXBsZUl0ZW1TZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDE7XHJcbn1cclxuXHJcbmdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XHJcbiAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUm93cztcclxufVxyXG5cclxuXHJcblxyXG4vKiog2YTZhNiq2K3Zg9mFINio2KXYuNmH2KfYsSDYstixINin2YTYpdi22KfZgdipICovXHJcbkBJbnB1dCgpIHNob3dBZGRCdXR0b24gPSB0cnVlO1xyXG5ASW5wdXQoKSBzcGxpdEFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcclxuLyoqINin2YTYo9mK2YLZiNmG2Kkg2KfZhNin2YHYqtix2KfYttmK2Kkg2YTYstixINin2YTYpdi22KfZgdipICovXHJcbkBJbnB1dCgpIGFkZEJ1dHRvbkljb24gPSAncGkgcGktcGx1cyc7XHJcbi8qKiDYp9mE2YbYtSDYp9mE2KfZgdiq2LHYp9i22Yog2YTYstixINin2YTYpdi22KfZgdipICovXHJcbkBJbnB1dCgpIGFkZEJ1dHRvbkxhYmVsID0gJ0FERCc7XHJcbiAgLyoqINiq2KrYrdmD2ZHZhSDYqNmF2YjZgti5INiy2LEg2KfZhNil2LbYp9mB2Kk6ICd0b3AnINij2YggJ2JvdHRvbScgKi9cclxuQElucHV0KCkgYWRkQnV0dG9uUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgPSAndG9wJztcclxuXHJcbiBASW5wdXQoKSBhZGRCdXR0b25Db25maWdzOiBCdXR0b25Db25maWdbXSA9IFtdO1xyXG5cclxuQElucHV0KCkgYnJlYWRjcnVtYjogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZDtcclxuXHJcblxyXG5nZXQgYnJlYWRjcnVtYl8oKTogTWVudUl0ZW1bXSB8IHVuZGVmaW5lZCB7XHJcbiAgcmV0dXJuIHRoaXMuYnJlYWRjcnVtYj8ubWFwKHYgPT4gKHtcclxuICAgIC4uLnYsXHJcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2LmxhYmVsID8/ICcnKVxyXG4gIH0pKTtcclxufVxyXG5nZXQgcnRsKCk6IGJvb2xlYW4ge1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQ/LmRvY3VtZW50RWxlbWVudD8uZGlyID09PSAncnRsJztcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbi8vICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuIC8qKiDYp9mE2KLZhiDZitiq2YTZgtmR2YkgcGFnaW5hdGlvbiArIHNvcnQg2YHZiiDYrdiv2Ksg2YjYp9it2K8gKi9cclxub25MYXp5TG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgLy8gdGhpcy5tb2RlbF89IHRoaXMubW9kZWwgPz8ge307XHJcbiAgdGhpcy5tb2RlbD0gdGhpcy5tb2RlbCA/PyB7fTtcclxuXHJcbiAgdGhpcy5mb3JtRmllbGRzXyA9IHRoaXMuZm9ybUZpZWxkcztcclxuICBjb25zdCBmaXJzdCAgICAgPSBldmVudC5maXJzdCAgPz8gdGhpcy5maXJzdDtcclxuICBjb25zdCByb3dzICAgICAgPSBldmVudC5yb3dzICAgPz8gdGhpcy5yb3dzO1xyXG4gIGNvbnN0IHNvcnRGaWVsZCA9IHR5cGVvZiBldmVudC5zb3J0RmllbGQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBldmVudC5zb3J0RmllbGRcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc29ydEZpZWxkO1xyXG4gIGNvbnN0IHNvcnRPcmRlciA9IGV2ZW50LnNvcnRPcmRlciA9PT0gLTEgPyAtMSA6IDE7XHJcblxyXG5cclxuICBjb25zdCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBpZiAoZXZlbnQuZmlsdGVycykge1xyXG4gICAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIG1ldGFdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAobWV0YSBhcyBhbnkpLnZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgZmlsdGVyc1tmaWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB0aGlzLmZpcnN0ICAgICA9IGZpcnN0O1xyXG4gIHRoaXMucm93cyAgICAgID0gcm93cztcclxuICB0aGlzLnNvcnRGaWVsZCA9IHNvcnRGaWVsZDtcclxuICB0aGlzLnNvcnRPcmRlciA9IHNvcnRPcmRlciBhcyAxfCAtMTtcclxuY29uc3QgZGlyID0gc29ydE9yZGVyID09PSAxID8gJ2FzYycgOiAnZGVzYyc7XHJcbiBjb25zdCBzb3J0ID0gc29ydEZpZWxkID8gYCR7c29ydEZpZWxkfSAke2Rpcn1gIDogdW5kZWZpbmVkO1xyXG5cclxuICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGZpcnN0LCByb3dzICxzb3J0LCBmaWx0ZXJzIH0pO1xyXG5cclxuICAvLyDZitio2YbZiiDYp9mE2YbYtSDZiNil2LHYs9in2YTZh1xyXG5cclxufVxyXG5cclxuXHJcbiAgLyoqINiq2LXZitmK2LEg2KfZhNio2YrYp9mG2KfYqiDYrdiz2Kgg2KfZhNi12YHYrdipICovXHJcbiAgZ2V0IHBhZ2VkRGF0YSgpOiBUW10ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5zbGljZSh0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5yb3dzKSA6IFtdO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5nZXQgZ2xvYmFsRmlsdGVyRmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChjID0+IFN0cmluZyhjLmtleSkpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvKiog2KPYsdiz2YQg2KXZhNmJINin2YTYo9ioINmE2KPYqtmF2KrYqSDYtNmD2YQg2KfZhNio2K3YqyDYpdiw2Kcg2YrYrdiq2KfYrCAqL1xyXG4vLyBmcm9tIGdlbmVyaWMtY3J1ZC10YWJsZS5jb21wb25lbnQudHNcclxuXHJcbi8qKiDYqNiv2ZHZhCBhcHBseVNlYXJjaCDZhNiq2KjYqyBwYWdlQ2hhbmdlINmF2KjYp9i02LHYqdmLICovXHJcbiBhcHBseVNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcclxuICAgIC8vIHRoaXMuZ2VuZXJpY1RhYmxlLmFwcGx5RmlsdGVyKGdsb2JhbCk7XHJcbiAgICAgIHRoaXMub25TZWFyY2guZW1pdChmaWx0ZXJzKTtcclxuICB9XHJcblxyXG5cclxuIC8qKiDYr9in2YTYqSDYqtmG2YHZkdiwINi52YbYryDYp9mE2YbZgtixINi52YTZiSDYtdmBICovXHJcbiAgb25Sb3dDbGljayhyb3c6IFQpIHtcclxuICAgICBjb25zb2xlLmxvZygnR2VuZXJpY0NydWRUYWJsZUNvbXBvbmVudC5yb3dDbGljazonLCByb3cpO1xyXG4gICAgaWYgKHRoaXMucm93U2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgIEBJbnB1dCgpIGJlZm9yZVNhdmU6IChyZWNvcmQ6IFQpID0+IFQgPSAocmVjb3JkKSA9PiByZWNvcmQ7XHJcblxyXG4gIC8vIG9uU3VibWl0KCkge1xyXG4gIC8vICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgLy8gICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgLy8gICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbnVsbDtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2UgLyogYXMgQ3J1ZFNlcnZpY2U8VD4gKi87XHJcbiAgLy8gICAgIGNvbnN0IGlkID0gdGhpcy5pc0VkaXRNb2RlID8gKHRoaXMubW9kZWwgYXMgYW55KVt0aGlzLmlkRmllbGRdIDogbnVsbDtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHJlY29yZFRvU2F2ZSA9IHRoaXMuYmVmb3JlU2F2ZSh7IC4uLnRoaXMubW9kZWwgfSk7XHJcblxyXG5cclxuICAvLyAgICAgY29uc3Qgb3BlcmF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pc0VkaXRNb2RlXHJcbiAgLy8gICAgICAgPyBzZXJ2aWNlLnVwZGF0ZShpZCwgcmVjb3JkVG9TYXZlKVxyXG4gIC8vICAgICAgIDogc2VydmljZS5jcmVhdGUocmVjb3JkVG9TYXZlKTtcclxuXHJcbiAgLy8gICAgIC8vIG9wZXJhdGlvbiQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgIG9wZXJhdGlvbiQuc3Vic2NyaWJlKHtcclxuICAvLyAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgLy8gICAgICAgICAvLyB0aGlzLnJlZi5jbG9zZSh0cnVlKTsgLy8g2YbYrNin2K0g2KfZhNi52YXZhNmK2KlcclxuICAvLyAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKVxyXG4gIC8vICAgICAgICAgICAvLyB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IGZpcnN0LCByb3dzICxzb3J0LCBmaWx0ZXJzIH0pO1xyXG4gIC8vICAgICAgICAgICB0aGlzLmFwcGx5U2VhcmNoKCcnKTtcclxuICAvLyAgICAgICAgIC8vIHRoaXMubWVcclxuICAvLyAgICAgICB9LFxyXG4gIC8vICAgICAgIGVycm9yOiAoZXJyOmFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnIuZXJyb3I/LnRpdGxlIHx8XHJcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgfHxcclxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn2K3Yr9irINiu2LfYoyDYo9ir2YbYp9ihINin2YTYrdmB2LguINmK2LHYrNmJINin2YTZhdit2KfZiNmE2Kkg2YXYsdipINij2K7YsdmJLic7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gIC8vIOKchSDYo9mI2YQg2LTZitihINmG2LfZhNioINiq2KPZg9mK2K8g2YXZhiDYp9mE2YXYs9iq2K7Yr9mFXHJcbiAgdGhpcy5zd2FsU2VydmljZS5jb25maXJtKFxyXG4gICAgdGhpcy5pc0VkaXRNb2RlID8gJ9iq2KPZg9mK2K8g2KfZhNiq2LnYr9mK2YQnIDogJ9iq2KPZg9mK2K8g2KfZhNit2YHYuCcsXHJcbiAgICB0aGlzLmlzRWRpdE1vZGVcclxuICAgICAgPyAn2YfZhCDYqtix2YrYryDYrdmB2Lgg2KfZhNiq2LnYr9mK2YTYp9iqINi52YTZiSDZh9iw2Kcg2KfZhNiz2KzZhNifJ1xyXG4gICAgICA6ICfZh9mEINiq2LHZitivINit2YHYuCDZh9iw2Kcg2KfZhNiz2KzZhNifJyxcclxuICAgICfZhti52YUnLFxyXG4gICAgJ9il2YTYutin2KEnXHJcbiAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgIGlmICghcmVzdWx0LmlzQ29uZmlybWVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlO1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLmlzRWRpdE1vZGUgPyAodGhpcy5tb2RlbCBhcyBhbnkpW3RoaXMuaWRGaWVsZF0gOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHJlY29yZFRvU2F2ZSA9IHRoaXMuYmVmb3JlU2F2ZSh7IC4uLnRoaXMubW9kZWwgfSk7XHJcblxyXG4gICAgY29uc3Qgb3BlcmF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pc0VkaXRNb2RlXHJcbiAgICAgID8gc2VydmljZS51cGRhdGUoaWQsIHJlY29yZFRvU2F2ZSlcclxuICAgICAgOiBzZXJ2aWNlLmNyZWF0ZShyZWNvcmRUb1NhdmUpO1xyXG5cclxuICAgIG9wZXJhdGlvbiQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyDinIUg2LHYs9in2YTYqSDZhtis2KfYrVxyXG4gICAgICAgIHRoaXMuc3dhbFNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgIHRoaXMuaXNFZGl0TW9kZSA/ICfYqtmFINin2YTYqti52K/ZitmEINio2YbYrNin2K0nIDogJ9iq2YUg2KfZhNit2YHYuCDYqNmG2KzYp9itJ1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmFwcGx5U2VhcmNoKCcnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBtc2cgPVxyXG4gICAgICAgICAgZXJyLmVycm9yPy50aXRsZSB8fFxyXG4gICAgICAgICAgZXJyLm1lc3NhZ2UgfHxcclxuICAgICAgICAgICfYrdiv2Ksg2K7Yt9ijINij2KvZhtin2KEg2KfZhNit2YHYuC4g2YrYsdis2Ykg2KfZhNmF2K3Yp9mI2YTYqSDZhdix2Kkg2KPYrtix2YkuJztcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBtc2c7XHJcblxyXG4gICAgICAgIC8vIOKdjCDYsdiz2KfZhNipINiu2LfYo1xyXG4gICAgICAgIHRoaXMuc3dhbFNlcnZpY2UuZXJyb3IoJ9mB2LTZhCDYp9mE2K3Zgdi4JywgbXNnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG4gICAgIHRyYWNrQnlJZHgoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gaW5kZXg7XHJcbiB9XHJcblxyXG5vblNpbmdsZUl0ZW1BY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNTaW5nbGVJdGVtU2VsZWN0ZWQpIHJldHVybjtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5fc2VsZWN0ZWRSb3dzWzBdO1xyXG4gIHRoaXMuc2luZ2xlQWN0aW9uLmVtaXQoe1xyXG4gICAgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ3NpbmdsZUFjdGlvbicsXHJcbiAgICBpdGVtOiBzZWxlY3RlZEl0ZW1cclxuICB9KTtcclxufVxyXG5cclxub25JbnRlcm5hbEJ1bGtBY3Rpb24oYnRuOiBCdXR0b25Db25maWcpOiB2b2lkIHtcclxuICBpZiAoIXRoaXMuaXNNdWx0aXBsZUl0ZW1TZWxlY3RlZCkgcmV0dXJuO1xyXG5cclxuICB0aGlzLmJ1bGtBY3Rpb24uZW1pdCh7XHJcbiAgICBuYW1lOiBidG4uYWN0aW9uTmFtZSA/PyAnYnVsa0FjdGlvbicsXHJcbiAgICBpdGVtczogWy4uLnRoaXMuX3NlbGVjdGVkUm93c10gIC8vINmG2LHYs9mEINmG2LPYrtipINmF2YYg2KfZhNmF2LXZgdmI2YHYqVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxufVxyXG4iLCJcclxuIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBsZWFkaW5nLTggZm9udC1tZWRpdW0gYmctc2xhdGUtODAwIHAtNCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgIDxwLWJyZWFkY3J1bWJcclxuICAgICAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRjcnVtYl9cIlxyXG4gICAgICAgICAgICAgIFtob21lXT1cImhvbWVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJjdXN0b20tYnJlYWRjcnVtYlwiXHJcbiAgICAgICAgICAgID48L3AtYnJlYWRjcnVtYj5cclxuICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbjxhcHAtYnJlYWRjcnVtYiBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iX1wiPjwvYXBwLWJyZWFkY3J1bWI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWVuZCBmbGV4LXdyYXBcIj5cclxuICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NpbmdsZUl0ZW1TZWxlY3RlZFwiPlxyXG4gPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIHNpbmdsZUFjdGlvbkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlJZHhcIj5cclxuIDxsaWItZ2VuZXJpYy1idXR0b25cclxuXHJcbiAgW2ljb25dPVwiYnRuLmljb25cIlxyXG5bbGFiZWxdPVwiYnRuLmxhYmVsIHwgdHJhbnNsYXRlXCJcclxuW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnRcIlxyXG4gW3NpemVdPVwiYnRuLnNpemVcIlxyXG4gW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gKGNsaWNrZWQpPVwib25TaW5nbGVJdGVtQWN0aW9uKGJ0bilcIlxyXG4gPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1bGtBY3Rpb25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5SWR4XCI+XHJcbiAgICAgICAgPGxpYi1nZW5lcmljLWJ1dHRvblxyXG4gICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgICAgW2xhYmVsXT1cImJ0bi5sYWJlbCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudFwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgICBbcGVybWlzc2lvbl09XCJidG4ucGVybWlzc2lvblwiXHJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkludGVybmFsQnVsa0FjdGlvbihidG4pXCJcclxuICAgICAgICA+PC9saWItZ2VuZXJpYy1idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgYWRkQnV0dG9uQ29uZmlnczsgdHJhY2tCeTogdHJhY2tCeUlkeFwiPlxyXG4gICAgICA8bGliLWdlbmVyaWMtYnV0dG9uXHJcbiAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxyXG4gICAgICAgIFtsYWJlbF09XCJidG4ubGFiZWwgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50XCJcclxuICAgICAgICBbc2l6ZV09XCJidG4uc2l6ZVwiXHJcbiAgICAgICAgW3Blcm1pc3Npb25dPVwiYnRuLnBlcm1pc3Npb25cIlxyXG4gICAgICAgIChjbGlja2VkKT1cIiB0aGlzLmFjdGlvbi5lbWl0KHsgbmFtZTogYnRuLmFjdGlvbk5hbWUgPz8gJ2FkZCcsIHJvdzogbnVsbCEgfSk7XCJcclxuICAgICAgPjwvbGliLWdlbmVyaWMtYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIEBpZiAoKHNob3dBZGRCdXR0b24gfHwgc3BsaXRBY3Rpb25zLmxlbmd0aCA+IDApJiYgYWRkQnV0dG9uQ29uZmlncy5sZW5ndGggPT09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgQGlmIChzaG93QWRkQnV0dG9uICYmIHNwbGl0QWN0aW9ucy5sZW5ndGggID09PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgIDwhLS0gPHAtYnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1jaXJjbGUtZmlsbCB0ZXh0LWdyZWVuLTUwMFwiICpuZ0lmPVwic2hvd0FkZEJ1dHRvbiAmJiBhZGRCdXR0b25Db25maWdzLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoYWRkQnV0dG9uTGFiZWwgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICAgIFwiKG9uQ2xpY2spPVwiYWN0aW9uLmVtaXQoeyBuYW1lOiAnYWRkJywgcm93OiBudWxsISB9KVwiXHJcbiAgICAgICAgICAgIG91dGxpbmVkIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgLz4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cIntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYWRkQnV0dG9uTGFiZWx8IHRyYW5zbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktcGx1cycsXHJcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzczonJ1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aW9uLmVtaXQoeyBuYW1lOiAnYWRkJywgcm93OiBudWxsISB9KVwiPlxyXG4gICAgICAgICAgICAgICAgPC91aS1idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICAgICAgPCEtLSBTcGxpdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcGxpdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYWRkQnV0dG9uTGFiZWx8IHRyYW5zbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1wbHVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBzcGxpdEFjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24uZW1pdCh7IG5hbWU6ICdhZGQnLCByb3c6IG51bGwhIH0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWktYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtYi00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93U2VhcmNoICYmIGZpbHRlcnM7IGVsc2UgZW1wdHlTZWFyY2hcIj5cclxuICAgICAgICAgICA8bGliLWdlbmVyaWMtc2VhcmNoXHJcbiAgICAgICAgICAgICAgICBbbW9kZWxdPVwiZmlsdGVyTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgW2ZpZWxkc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgIChzZWFyY2gpPVwiYXBwbHlTZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocmVzZXQpPVwiYXBwbHlTZWFyY2goJycpXCJcclxuICAgICAgICAgICAgICA+PC9saWItZ2VuZXJpYy1zZWFyY2g+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVNlYXJjaD5cclxuICAgIDwhLS0gUmVuZGVyIGEgZHVtbXkgZGl2IHRvIHByZXNlcnZlIGV4cGVjdGVkIERPTSBzaGFwZSAtLT5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1pbi1oLVsyLjVyZW1dIHctWzEycmVtXVwiPjwvZGl2PiAtLT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIG91dGxpbmVkIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgKG9uQ2xpY2spPVwiYXBwbHlTZWFyY2goJycpXCIgLz5cclxuICAgICAgICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCIgY2xhc3M9XCJtLTAgcC0wXCIgLz5cclxuICAgICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXNvcnRcIiBvdXRsaW5lZCBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gbGFiZWw9XCIxIG9mIDE1XCIgb3V0bGluZWQgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1jaGV2cm9uLXJpZ2h0XCIgb3V0bGluZWQgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHAtYnV0dG9uIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIiBvdXRsaW5lZCBzZXZlcml0eT1cInNlY29uZGFyeVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG48bGliLWdlbmVyaWMtdGFibGVcclxuICBbc2hvd0FkZEJ1dHRvbl09XCJzaG93QWRkQnV0dG9uXCJcclxuICBbZGF0YV09XCJkYXRhXCJcclxuICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXHJcbiAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgW2FjdGlvbnNdPVwiYWN0aW9uc1wiXHJcbiAgW2FjdGlvbnNNb2RlXT1cImFjdGlvbnNNb2RlXCJcclxuICBbZmlyc3RdPVwiZmlyc3RcIlxyXG4gIFtyb3dzXT1cInJvd3NcIlxyXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgW3NvcnRPcmRlcl09XCJzb3J0T3JkZXJcIlxyXG4gIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcclxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXHJcbiAgW3Nob3dSb3dTZWxlY3Rpb25DaGVja2JveF09XCJzaG93Um93U2VsZWN0aW9uQ2hlY2tib3hcIlxyXG4gIChhY3Rpb24pPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkTmV3KT1cImFjdGlvbi5lbWl0KHsgbmFtZTogJ2FkZCcsIHJvdzogbnVsbCEgfSlcIlxyXG4gIChwYWdlQ2hhbmdlKT1cIm9uTGF6eUxvYWQoJGV2ZW50KVwiXHJcbiAgW3Jvd1NlbGVjdGFibGVdPVwicm93U2VsZWN0YWJsZVwiXHJcbiAgKHJvd1NlbGVjdCk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gIFsoc2VsZWN0aW9uKV09XCJfc2VsZWN0ZWRSb3dzXCJcclxuICAjZ2VuZXJpY1RhYmxlXHJcbj48L2xpYi1nZW5lcmljLXRhYmxlPlxyXG5cclxuXHJcblxyXG5cclxuPCEtLSBEcmF3ZXIgLS0+XHJcbjxwLWRyYXdlclxyXG4gICpuZ0lmPVwiKHR5cGVvZiBkaXNwbGF5TW9kZSA9PT0gJ3N0cmluZycgPyBkaXNwbGF5TW9kZSA6IGlzRWRpdE1vZGUgPyBkaXNwbGF5TW9kZVsnZWRpdCddIDogaXNWaWV3TW9kZSA9PT0gZmFsc2UgPyBkaXNwbGF5TW9kZVsnYWRkJ10gOiBkaXNwbGF5TW9kZVsndmlldyddICApID09PSAnZHJhd2VyJyAmJiBkcmF3ZXJWaXNpYmxlXCJcclxuICBbKHZpc2libGUpXT1cImRyYXdlclZpc2libGVcIlxyXG4gIFtjbG9zYWJsZV09XCJ0cnVlXCJcclxuICBbZGlzbWlzc2libGVdPVwiZmFsc2VcIlxyXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxyXG4gICh2aXNpYmxlQ2hhbmdlKT1cInZpc2libGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICBzdHlsZUNsYXNzPVwiIXctZnVsbCBtZDohdy04MCBsZzohdy1bNDByZW1dXCI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtbGdcIj5cclxuICAgICAge3sgaXNFZGl0TW9kZSA/ICfYqti52K/ZitmEJyA6IGlzVmlld01vZGUgPT09IGZhbHNlID8gJ9il2LbYp9mB2KknIDogJ9i52LHYticgfX1cclxuICAgIDwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48IS0tIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgLS0+XHJcbiAgPGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgIGNsYXNzPVwicC00XCI+XHJcbiAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZm9ybUZpZWxkc19cIiBbbW9kZWxdPVwibW9kZWxcIiBbb3B0aW9uc109XCJvcHRpb25zXCI+PC9mb3JtbHktZm9ybT5cclxuICA8L2Zvcm0+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiAqbmdJZj1cIiFpc1ZpZXdNb2RlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIFtsYWJlbF09XCJpc0VkaXRNb2RlID8gKCdVUERBVEUnIHwgdHJhbnNsYXRlKSA6ICgnU0FWRScgfCB0cmFuc2xhdGUpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgZm9ybS5pbnZhbGlkXCJcclxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgIGxhYmVsPVwie3sgJ0NBTkNFTCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcclxuICAgICAgICAoY2xpY2spPVwiZHJhd2VyVmlzaWJsZSA9IGZhbHNlXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLWRyYXdlcj5cclxuXHJcbjwhLS0gRGlhbG9nIC0tPlxyXG48cC1kaWFsb2dcclxuICAqbmdJZj1cIih0eXBlb2YgZGlzcGxheU1vZGUgPT09ICdzdHJpbmcnID8gZGlzcGxheU1vZGUgOiBpc0VkaXRNb2RlID8gZGlzcGxheU1vZGVbJ2VkaXQnXSA6IGlzVmlld01vZGUgPT09IGZhbHNlID8gZGlzcGxheU1vZGVbJ2FkZCddIDogZGlzcGxheU1vZGVbJ3ZpZXcnXSAgKSA9PT0gJ2RpYWxvZycgJiYgZGlhbG9nVmlzaWJsZVwiXHJcbiAgWyh2aXNpYmxlKV09XCJkaWFsb2dWaXNpYmxlXCJcclxuICBbbW9kYWxdPVwidHJ1ZVwiXHJcbiAgW2Nsb3NhYmxlXT1cInRydWVcIlxyXG4gIFtkaXNtaXNzYWJsZU1hc2tdPVwidHJ1ZVwiXHJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXHJcbiAgKHZpc2libGVDaGFuZ2UpPVwidmlzaWJsZUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gIFtzdHlsZV09XCJ7IHdpZHRoOiAnOTV2dycsIG1heFdpZHRoOiBkaWFsb2dNYXhXaWR0aCB9XCJcclxuICBbaGVhZGVyXT1cImlzRWRpdE1vZGUgPyAn2KrYudiv2YrZhCcgOiBpc1ZpZXdNb2RlID09PSBmYWxzZSA/ICfYpdi22KfZgdipJyA6IHZpZXdIZWFkZXJUaXRsZVwiPlxyXG48IS0tIFticmVha3BvaW50c109XCJ7ICcxMjAwcHgnOiAnNTB2dycsICc3NjhweCc6ICc3MHZ3JywgJzU2MHB4JzogJzk1dncnIH1cIiAtLT5cclxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1ZpZXdNb2RlXCIgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgYmctd2hpdGUvNTAgcG9pbnRlci1ldmVudHMtYXV0byByb3VuZGVkLW1kXCI+PC9kaXY+XHJcbiAgICA8Zm9ybSAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cInAtNFwiPlxyXG4gICAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZm9ybUZpZWxkc19cIiBbbW9kZWxdPVwibW9kZWxcIiBbb3B0aW9uc109XCJvcHRpb25zXCI+PC9mb3JtbHktZm9ybT5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc1ZpZXdNb2RlXCJcclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgW2xhYmVsXT1cImlzRWRpdE1vZGUgPyAoJ1VQREFURScgfCB0cmFuc2xhdGUpIDogKCdTQVZFJyB8IHRyYW5zbGF0ZSlcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGZvcm0uaW52YWxpZFwiXHJcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgbGFiZWw9XCJ7eyBpc1ZpZXdNb2RlID8gKCdDTE9TRScgfCB0cmFuc2xhdGUpIDogKCdDQU5DRUwnIHwgdHJhbnNsYXRlKSB9fVwiXHJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgIChjbGljayk9XCJkaWFsb2dWaXNpYmxlID0gZmFsc2VcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZGlhbG9nPlxyXG5cclxuXHJcblxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtY3J1ZC10YWJsZS9zcmMvZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1jcnVkLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|